diff --git a/DEPS b/DEPS
index 5a6521a..74d7453 100644
--- a/DEPS
+++ b/DEPS
@@ -133,11 +133,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': 'f4c66ccafcb7fe62201cbe9a6eb72b09ef8a31da',
+  'skia_revision': 'aeb71ce166c755a09ba4a66f5e6a5d7a22149b12',
   # 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': 'c9178292dbb05caf07f5e1cd985f90383fbba6b9',
+  'v8_revision': '7afc9ca45927216f43bc869135b33134af3a64de',
   # 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.
@@ -145,11 +145,11 @@
   # 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': '70958d15db70251fc1650ae3920acce06998038b',
+  'angle_revision': '08146a27b7bc07d6a2426591de7f1ec1a06bed42',
   # 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': '7ab65834bc02587341438f4d2f23e5514a6ef232',
+  'swiftshader_revision': '9e2844fa2744c6f600b06888ac5387a1174f5c53',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -184,7 +184,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '31757f969fba60d75404f31e8f1168bef5011770',
+  'freetype_revision': '2f4b740ce435bc1ad5ef8570bb91ab7cd5682720',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
@@ -196,7 +196,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': '4d850033271b29cd51e6343747c75631d335f14c',
+  'catapult_revision': '5655d8f9f1891d271489d06b6988f001e9543f25',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -212,7 +212,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'feed_revision': 'eb5622ba5a63b0e62ee8cc7afd49d087faa107c9',
+  'feed_revision': '6eeec6bf30698daf8960301a3cb7a418b935449e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling android_sdk_build-tools_version
   # and whatever else without interference from each other.
@@ -268,7 +268,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.
-  'dawn_revision': '027a8f6464c56c7294a622118d5c1f0fbf9cf58f',
+  'dawn_revision': '2bc3169f0d64a07469b73c318a2e4c887f8eb17a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -802,7 +802,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f9db023d2092eb484bc7f17c59e99c0a5ed03a4a',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f0a719c3731cdc76fb6efd270801145b7afe1243',
       'condition': 'checkout_linux',
   },
 
@@ -827,7 +827,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '7639f1999ac1d8992fc4fbb169d164b156d9a7f7',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ad39f9d8f8d117ef63fc7d50b207a14017f05c08',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -1177,7 +1177,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  'f09f069a125f9ff57084616e11029da103aa91f5',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '513ef55bd2588a21ecdbd0d743c5aede17d02a9b',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78',
@@ -1345,7 +1345,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '6f0b34abee8dba611c253738d955c59f703c147a',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'b9979a533c0be7571c47fd727ad9796316e0f739',
+    Var('webrtc_git') + '/src.git' + '@' + '1ff16c87aa63d4f9b63a238fc0664b5e625e9884',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1386,7 +1386,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e4f5cbe5d994203d31fdc9cf7f35e276d8a5260b',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b28d01ad3a2a4984e35b311e010151d1a51bf881',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 2d51ba8..b3d07e3d 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -776,8 +776,6 @@
     "system/network/vpn_list.h",
     "system/network/vpn_list_view.cc",
     "system/network/vpn_list_view.h",
-    "system/network/vpn_util.cc",
-    "system/network/vpn_util.h",
     "system/network/wifi_toggle_notification_controller.cc",
     "system/network/wifi_toggle_notification_controller.h",
     "system/night_light/night_light_controller.cc",
diff --git a/ash/display/screen_orientation_controller.cc b/ash/display/screen_orientation_controller.cc
index 64ba553..764e270 100644
--- a/ash/display/screen_orientation_controller.cc
+++ b/ash/display/screen_orientation_controller.cc
@@ -6,6 +6,8 @@
 
 #include "ash/accelerometer/accelerometer_reader.h"
 #include "ash/accelerometer/accelerometer_types.h"
+#include "ash/home_screen/home_screen_controller.h"
+#include "ash/home_screen/home_screen_delegate.h"
 #include "ash/public/cpp/app_types.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "ash/shell.h"
@@ -588,16 +590,32 @@
   if (!ScreenOrientationProviderSupported())
     return;
 
+  Shell* shell = Shell::Get();
   MruWindowTracker::WindowList mru_windows(
-      Shell::Get()->mru_window_tracker()->BuildMruWindowList());
+      shell->mru_window_tracker()->BuildMruWindowList());
 
+  bool has_visible_window = false;
   for (auto* window : mru_windows) {
     if (!window->TargetVisibility())
       continue;
+    has_visible_window = true;
     if (ApplyLockForWindowIfPossible(window))
       return;
   }
 
+  // No visible MRU window means that the home screen might be showing. Check
+  // if it has an orientation lock.
+  if (!has_visible_window) {
+    DCHECK(shell->home_screen_controller()->IsHomeScreenAvailable());
+    const aura::Window* home_screen_window =
+        shell->home_screen_controller()->delegate()->GetHomeScreenWindow();
+    if (home_screen_window &&
+        shell->activation_client()->GetActiveWindow() == home_screen_window &&
+        ApplyLockForWindowIfPossible(home_screen_window)) {
+      return;
+    }
+  }
+
   LockRotationToOrientation(user_locked_orientation_);
 }
 
diff --git a/ash/display/screen_orientation_controller_unittest.cc b/ash/display/screen_orientation_controller_unittest.cc
index cb47699..f5c4c21 100644
--- a/ash/display/screen_orientation_controller_unittest.cc
+++ b/ash/display/screen_orientation_controller_unittest.cc
@@ -11,7 +11,11 @@
 #include "ash/accelerometer/accelerometer_types.h"
 #include "ash/display/screen_orientation_controller.h"
 #include "ash/display/screen_orientation_controller_test_api.h"
+#include "ash/home_screen/home_screen_controller.h"
+#include "ash/kiosk_next/kiosk_next_shell_test_util.h"
+#include "ash/kiosk_next/mock_kiosk_next_shell_client.h"
 #include "ash/public/cpp/app_types.h"
+#include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "ash/shell.h"
 #include "ash/system/screen_layout_observer.h"
@@ -22,6 +26,8 @@
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "ash/wm/window_state.h"
 #include "base/command_line.h"
+#include "base/macros.h"
+#include "base/test/scoped_feature_list.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/window.h"
 #include "ui/compositor/layer_type.h"
@@ -723,4 +729,206 @@
   EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
 }
 
+// Test fixture for Kiosk Next Home's rotation lock.
+class ScreenOrientationControllerKioskNextTest
+    : public ScreenOrientationControllerTest {
+ public:
+  ScreenOrientationControllerKioskNextTest() = default;
+  ~ScreenOrientationControllerKioskNextTest() override = default;
+
+  // AshTestBase:
+  void SetUp() override {
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        ::switches::kUseFirstDisplayAsInternal);
+    scoped_feature_list_.InitAndEnableFeature(features::kKioskNextShell);
+
+    set_start_session(false);
+    AshTestBase::SetUp();
+
+    client_ = BindMockKioskNextShellClient();
+  }
+
+  void TearDown() override {
+    home_screen_window_.reset();
+    AshTestBase::TearDown();
+  }
+
+ protected:
+  aura::Window* CreateHomeScreenWindow() {
+    home_screen_window_.reset(CreateAppWindowInShellWithId(0));
+    ash::Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(),
+                             ash::kShellWindowId_HomeScreenContainer)
+        ->AddChild(home_screen_window_.get());
+    return home_screen_window_.get();
+  }
+
+ private:
+  std::unique_ptr<MockKioskNextShellClient> client_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  std::unique_ptr<aura::Window> home_screen_window_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScreenOrientationControllerKioskNextTest);
+};
+
+// Tests that the home screen can be inverted but not rotated to portrait.
+TEST_F(ScreenOrientationControllerKioskNextTest,
+       LandscapeOrientationAllowsRotation) {
+  LogInKioskNextUser(GetSessionControllerClient());
+  aura::Window* home_screen_window = CreateHomeScreenWindow();
+
+  Shell::Get()->activation_client()->ActivateWindow(home_screen_window);
+
+  // The home screen window is rotation-locked to landscape.
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+  EXPECT_TRUE(RotationLocked());
+
+  // Inverse of orientation is allowed.
+  TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
+
+  // Display rotations in between are not allowed.
+  TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
+  TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
+}
+
+// Tests that app windows outside of the home screen follow normal orientation
+// rules.
+TEST_F(ScreenOrientationControllerKioskNextTest,
+       ActiveWindowChangesUpdateOrientation) {
+  LogInKioskNextUser(GetSessionControllerClient());
+  aura::Window* home_screen_window = CreateHomeScreenWindow();
+  Shell::Get()->activation_client()->ActivateWindow(home_screen_window);
+
+  // The home screen window is rotation-locked to landscape.
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  std::unique_ptr<aura::Window> child_window = CreateControlWindow();
+  std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
+
+  // The rotation is unlocked when an app window is opened.
+  AddWindowAndActivateParent(child_window.get(), focus_window.get());
+  EXPECT_FALSE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+  TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
+
+  // The rotation becomes locked again when returning to Home.
+  Shell::Get()->home_screen_controller()->GoHome(
+      display::Display::InternalDisplayId());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+}
+
+TEST_F(ScreenOrientationControllerKioskNextTest,
+       ActiveWindowChangesUpdateLock) {
+  LogInKioskNextUser(GetSessionControllerClient());
+  aura::Window* home_screen_window = CreateHomeScreenWindow();
+  Shell::Get()->activation_client()->ActivateWindow(home_screen_window);
+
+  // The home screen window is rotation-locked to landscape.
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  std::unique_ptr<aura::Window> child_window = CreateControlWindow();
+  std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
+
+  // An app window can specify its own lock.
+  Lock(child_window.get(), OrientationLockType::kPortrait);
+  AddWindowAndActivateParent(child_window.get(), focus_window.get());
+  EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
+  EXPECT_TRUE(RotationLocked());
+
+  // The rotation returns to landscape when returning to Home.
+  Shell::Get()->home_screen_controller()->GoHome(
+      display::Display::InternalDisplayId());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+}
+
+// Tests that the active window removing a rotation lock doesn't affect the home
+// screen window's lock.
+TEST_F(ScreenOrientationControllerKioskNextTest,
+       ActiveWindowRemovesUpdateLock) {
+  LogInKioskNextUser(GetSessionControllerClient());
+  aura::Window* home_screen_window = CreateHomeScreenWindow();
+  Shell::Get()->activation_client()->ActivateWindow(home_screen_window);
+
+  // The home screen window is rotation-locked to landscape.
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  std::unique_ptr<aura::Window> child_window = CreateControlWindow();
+  std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
+
+  // An app window can specify its own lock.
+  Lock(child_window.get(), OrientationLockType::kLandscape);
+  AddWindowAndActivateParent(child_window.get(), focus_window.get());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+  TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  // Returning home preserves the home screen lock, even after the previously
+  // active window drops its lock.
+  Shell::Get()->home_screen_controller()->GoHome(
+      display::Display::InternalDisplayId());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  Unlock(child_window.get());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+}
+
+// Tests that a user rotation lock doesn't override the home screen window's
+// orientation lock.
+TEST_F(ScreenOrientationControllerKioskNextTest, UserRotationLock) {
+  LogInKioskNextUser(GetSessionControllerClient());
+  aura::Window* home_screen_window = CreateHomeScreenWindow();
+  ::wm::ActivationClient* activation_client = Shell::Get()->activation_client();
+  activation_client->ActivateWindow(home_screen_window);
+
+  std::unique_ptr<aura::Window> child_window = CreateControlWindow();
+  std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
+
+  // The rotation is unlocked when an app window is opened.
+  AddWindowAndActivateParent(child_window.get(), focus_window.get());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+  EXPECT_FALSE(RotationLocked());
+  TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
+
+  // The user can lock the rotation.
+  SetUserRotationLocked(true);
+  EXPECT_TRUE(UserRotationLocked());
+  EXPECT_TRUE(RotationLocked());
+
+  // Rotating the screen doesn't update the orientation while locked.
+  TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
+  EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
+
+  // The rotation returns to landscape when returning to Home.
+  Shell::Get()->home_screen_controller()->GoHome(
+      display::Display::InternalDisplayId());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+
+  // The user rotation lock applies again when re-activating an app window.
+  activation_client->ActivateWindow(focus_window.get());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
+
+  // Removing the user rotation lock doesn't affect Home.
+  Shell::Get()->home_screen_controller()->GoHome(
+      display::Display::InternalDisplayId());
+  SetUserRotationLocked(false);
+  EXPECT_FALSE(UserRotationLocked());
+  EXPECT_TRUE(RotationLocked());
+  EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
+}
+
 }  // namespace ash
diff --git a/ash/ime/ime_controller.cc b/ash/ime/ime_controller.cc
index 0f16039..0e57214 100644
--- a/ash/ime/ime_controller.cc
+++ b/ash/ime/ime_controller.cc
@@ -5,16 +5,31 @@
 #include "ash/ime/ime_controller.h"
 
 #include "ash/ime/ime_mode_indicator_view.h"
+#include "ash/ime/ime_switch_type.h"
 #include "ash/ime/mode_indicator_observer.h"
 #include "ash/shell.h"
 #include "ash/system/tray/system_tray_notifier.h"
 #include "base/bind_helpers.h"
+#include "base/metrics/histogram_macros.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/ime/chromeos/extension_ime_util.h"
 #include "ui/display/manager/display_manager.h"
 
 namespace ash {
 
+namespace {
+
+// The result of pressing VKEY_MODECHANGE (for metrics).
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class ModeChangeKeyAction {
+  kShowIndicator = 0,
+  kSwitchIme = 1,
+  kMaxValue = kSwitchIme
+};
+
+}  // namespace
+
 ImeController::ImeController()
     : mode_indicator_observer_(std::make_unique<ModeIndicatorObserver>()) {}
 
@@ -223,10 +238,20 @@
 }
 
 void ImeController::ShowOrSwitchIme() {
-  if (mode_indicator_observer_->active_widget())
+  if (mode_indicator_observer_->active_widget()) {
     SwitchToNextIme();
-  else
+
+    UMA_HISTOGRAM_ENUMERATION("InputMethod.ModeChangeKeyAction",
+                              ModeChangeKeyAction::kSwitchIme);
+    UMA_HISTOGRAM_ENUMERATION("InputMethod.ImeSwitch",
+                              ImeSwitchType::kModeChangeKey,
+                              ImeSwitchType::kCount);
+  } else {
     client_->ShowModeIndicator();
+
+    UMA_HISTOGRAM_ENUMERATION("InputMethod.ModeChangeKeyAction",
+                              ModeChangeKeyAction::kShowIndicator);
+  }
 }
 
 bool ImeController::IsCapsLockEnabled() const {
diff --git a/ash/ime/ime_switch_type.h b/ash/ime/ime_switch_type.h
index 39d75f0..f43af4d 100644
--- a/ash/ime/ime_switch_type.h
+++ b/ash/ime/ime_switch_type.h
@@ -13,7 +13,8 @@
   // added at the end (otherwise it will cause problems interpreting logs)
   kTray = 0,
   kAccelerator = 1,
-  kCount = 2,
+  kModeChangeKey = 2,
+  kCount = 3,
 };
 
 }  // namespace ash
diff --git a/ash/keyboard/ui/BUILD.gn b/ash/keyboard/ui/BUILD.gn
index ed41d81..9be75ac 100644
--- a/ash/keyboard/ui/BUILD.gn
+++ b/ash/keyboard/ui/BUILD.gn
@@ -35,6 +35,8 @@
     "keyboard_ui.h",
     "keyboard_ui_factory.cc",
     "keyboard_ui_factory.h",
+    "keyboard_ui_model.cc",
+    "keyboard_ui_model.h",
     "keyboard_ukm_recorder.cc",
     "keyboard_ukm_recorder.h",
     "keyboard_util.cc",
diff --git a/ash/keyboard/ui/keyboard_controller.cc b/ash/keyboard/ui/keyboard_controller.cc
index 56855d8..c747292 100644
--- a/ash/keyboard/ui/keyboard_controller.cc
+++ b/ash/keyboard/ui/keyboard_controller.cc
@@ -71,41 +71,6 @@
 constexpr base::TimeDelta kTransientBlurThreshold =
     base::TimeDelta::FromMilliseconds(3500);
 
-// State transition diagram (document linked from crbug.com/719905)
-bool IsAllowedStateTransition(KeyboardControllerState from,
-                              KeyboardControllerState to) {
-  static const std::set<
-      std::pair<KeyboardControllerState, KeyboardControllerState>>
-      kAllowedStateTransition = {
-          // The initial ShowKeyboard scenario
-          // INITIAL -> LOADING_EXTENSION -> HIDDEN -> SHOWN.
-          {KeyboardControllerState::kInitial,
-           KeyboardControllerState::kLoadingExtension},
-          {KeyboardControllerState::kLoadingExtension,
-           KeyboardControllerState::kHidden},
-          {KeyboardControllerState::kHidden, KeyboardControllerState::kShown},
-
-          // Hide scenario
-          // SHOWN -> WILL_HIDE -> HIDDEN.
-          {KeyboardControllerState::kShown, KeyboardControllerState::kWillHide},
-          {KeyboardControllerState::kWillHide,
-           KeyboardControllerState::kHidden},
-
-          // Focus transition scenario
-          // SHOWN -> WILL_HIDE -> SHOWN.
-          {KeyboardControllerState::kWillHide, KeyboardControllerState::kShown},
-
-          // HideKeyboard can be called at anytime for example on shutdown.
-          {KeyboardControllerState::kShown, KeyboardControllerState::kHidden},
-
-          // Return to INITIAL when keyboard is disabled.
-          {KeyboardControllerState::kLoadingExtension,
-           KeyboardControllerState::kInitial},
-          {KeyboardControllerState::kHidden, KeyboardControllerState::kInitial},
-      };
-  return kAllowedStateTransition.count(std::make_pair(from, to)) == 1;
-}
-
 void SetTouchEventLogging(bool enable) {
   ui::InputController* controller =
       ui::OzonePlatform::GetInstance()->GetInputController();
@@ -113,23 +78,6 @@
     controller->SetTouchEventLoggingEnabled(enable);
 }
 
-std::string StateToStr(KeyboardControllerState state) {
-  switch (state) {
-    case KeyboardControllerState::kUnknown:
-      return "UNKNOWN";
-    case KeyboardControllerState::kInitial:
-      return "INITIAL";
-    case KeyboardControllerState::kLoadingExtension:
-      return "LOADING_EXTENSION";
-    case KeyboardControllerState::kShown:
-      return "SHOWN";
-    case KeyboardControllerState::kWillHide:
-      return "WILL_HIDE";
-    case KeyboardControllerState::kHidden:
-      return "HIDDEN";
-  }
-}
-
 // An enumeration of different keyboard control events that should be logged.
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
@@ -271,7 +219,7 @@
 
   show_on_keyboard_window_load_ = false;
   keyboard_locked_ = false;
-  DCHECK_EQ(state_, KeyboardControllerState::kInitial);
+  DCHECK_EQ(model_.state(), KeyboardControllerState::kInitial);
   ui_->SetController(this);
   SetContainerBehaviorInternal(mojom::ContainerType::kFullWidth);
   visual_bounds_in_root_ = gfx::Rect();
@@ -303,7 +251,7 @@
 
   // Return to the INITIAL state to ensure that transitions entering a state
   // is equal to transitions leaving the state.
-  if (state_ != KeyboardControllerState::kInitial)
+  if (model_.state() != KeyboardControllerState::kInitial)
     ChangeState(KeyboardControllerState::kInitial);
 
   // TODO(https://crbug.com/731537): Move KeyboardController members into a
@@ -412,7 +360,7 @@
 
 void KeyboardController::NotifyKeyboardWindowLoaded() {
   const bool should_show = show_on_keyboard_window_load_;
-  if (state_ == KeyboardControllerState::kLoadingExtension)
+  if (model_.state() == KeyboardControllerState::kLoadingExtension)
     ChangeState(KeyboardControllerState::kHidden);
   if (should_show) {
     // The window height is set to 0 initially or before switch to an IME in a
@@ -581,7 +529,7 @@
 void KeyboardController::HideKeyboard(HideReason reason) {
   TRACE_EVENT0("vk", "HideKeyboard");
 
-  switch (state_) {
+  switch (model_.state()) {
     case KeyboardControllerState::kUnknown:
     case KeyboardControllerState::kInitial:
     case KeyboardControllerState::kHidden:
@@ -671,7 +619,7 @@
 }
 
 void KeyboardController::HideKeyboardImplicitlyBySystem() {
-  if (state_ != KeyboardControllerState::kShown || keyboard_locked_)
+  if (model_.state() != KeyboardControllerState::kShown || keyboard_locked_)
     return;
 
   ChangeState(KeyboardControllerState::kWillHide);
@@ -686,7 +634,7 @@
 
 // private
 void KeyboardController::HideAnimationFinished() {
-  if (state_ == KeyboardControllerState::kHidden) {
+  if (model_.state() == KeyboardControllerState::kHidden) {
     if (queued_container_type_) {
       SetContainerBehaviorInternal(queued_container_type_->container_type());
       // The position of the container window will be adjusted shortly in
@@ -753,7 +701,7 @@
 }
 
 void KeyboardController::LoadKeyboardWindowInBackground() {
-  DCHECK_EQ(state_, KeyboardControllerState::kInitial);
+  DCHECK_EQ(model_.state(), KeyboardControllerState::kInitial);
 
   TRACE_EVENT0("vk", "LoadKeyboardWindowInBackground");
 
@@ -847,7 +795,7 @@
       client && client->GetTextInputFlags() != ui::TEXT_INPUT_FLAG_NONE;
 
   if (should_hide) {
-    switch (state_) {
+    switch (model_.state()) {
       case KeyboardControllerState::kLoadingExtension:
         show_on_keyboard_window_load_ = false;
         return;
@@ -858,7 +806,7 @@
         return;
     }
   } else {
-    switch (state_) {
+    switch (model_.state()) {
       case KeyboardControllerState::kWillHide:
         // Abort a pending keyboard hide.
         ChangeState(KeyboardControllerState::kShown);
@@ -898,9 +846,9 @@
 
 void KeyboardController::PopulateKeyboardContent(
     aura::Window* target_container) {
-  DCHECK_NE(state_, KeyboardControllerState::kInitial);
+  DCHECK_NE(model_.state(), KeyboardControllerState::kInitial);
 
-  DVLOG(1) << "PopulateKeyboardContent: " << StateToStr(state_);
+  DVLOG(1) << "PopulateKeyboardContent: " << StateToStr(model_.state());
   TRACE_EVENT0("vk", "PopulateKeyboardContent");
 
   MoveToParentContainer(target_container);
@@ -909,7 +857,7 @@
   DCHECK(keyboard_window);
   DCHECK_EQ(parent_container_, keyboard_window->parent());
 
-  switch (state_) {
+  switch (model_.state()) {
     case KeyboardControllerState::kShown:
       return;
     case KeyboardControllerState::kLoadingExtension:
@@ -923,7 +871,7 @@
 
   SetTouchEventLogging(false /* enable */);
 
-  switch (state_) {
+  switch (model_.state()) {
     case KeyboardControllerState::kWillHide:
       ChangeState(KeyboardControllerState::kShown);
       return;
@@ -931,7 +879,7 @@
       break;
   }
 
-  DCHECK_EQ(state_, KeyboardControllerState::kHidden);
+  DCHECK_EQ(model_.state(), KeyboardControllerState::kHidden);
 
   // If the container is not animating, makes sure the position and opacity
   // are at begin states for animation.
@@ -967,7 +915,7 @@
 
 bool KeyboardController::WillHideKeyboard() const {
   bool res = weak_factory_will_hide_.HasWeakPtrs();
-  DCHECK_EQ(res, state_ == KeyboardControllerState::kWillHide);
+  DCHECK_EQ(res, model_.state() == KeyboardControllerState::kWillHide);
   return res;
 }
 
@@ -976,33 +924,8 @@
     observer.OnKeyboardConfigChanged();
 }
 
-void KeyboardController::CheckStateTransition(KeyboardControllerState prev,
-                                              KeyboardControllerState next) {
-  std::stringstream error_message;
-  const bool valid_transition = IsAllowedStateTransition(prev, next);
-  if (!valid_transition)
-    error_message << "Unexpected transition";
-
-  // Emit UMA
-  const int transition_record =
-      (valid_transition ? 1 : -1) *
-      (static_cast<int>(prev) * 1000 + static_cast<int>(next));
-  base::UmaHistogramSparse("VirtualKeyboard.ControllerStateTransition",
-                           transition_record);
-  UMA_HISTOGRAM_BOOLEAN("VirtualKeyboard.ControllerStateTransitionIsValid",
-                        transition_record > 0);
-
-  DCHECK(error_message.str().empty())
-      << "State: " << StateToStr(prev) << " -> " << StateToStr(next) << " "
-      << error_message.str();
-}
-
 void KeyboardController::ChangeState(KeyboardControllerState state) {
-  CheckStateTransition(state_, state);
-  if (state_ == state)
-    return;
-
-  state_ = state;
+  model_.ChangeState(state);
 
   if (state != KeyboardControllerState::kWillHide)
     weak_factory_will_hide_.InvalidateWeakPtrs();
@@ -1010,7 +933,7 @@
     show_on_keyboard_window_load_ = false;
 
   weak_factory_report_lingering_state_.InvalidateWeakPtrs();
-  switch (state_) {
+  switch (model_.state()) {
     case KeyboardControllerState::kLoadingExtension:
     case KeyboardControllerState::kWillHide:
       base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
@@ -1026,9 +949,10 @@
 }
 
 void KeyboardController::ReportLingeringState() {
-  LOG(ERROR) << "KeyboardController lingering in " << StateToStr(state_);
+  LOG(ERROR) << "KeyboardController lingering in "
+             << StateToStr(model_.state());
   UMA_HISTOGRAM_ENUMERATION("VirtualKeyboard.LingeringIntermediateState",
-                            state_);
+                            model_.state());
 }
 
 gfx::Rect KeyboardController::GetWorkspaceOccludedBoundsInScreen() const {
@@ -1098,7 +1022,7 @@
     return;
   }
 
-  if (state_ == KeyboardControllerState::kShown) {
+  if (model_.state() == KeyboardControllerState::kShown) {
     // Keyboard is already shown. Hiding the keyboard at first then switching
     // container type.
     queued_container_type_ = std::make_unique<QueuedContainerType>(
@@ -1130,7 +1054,7 @@
 }
 
 bool KeyboardController::IsKeyboardVisible() {
-  if (state_ == KeyboardControllerState::kShown) {
+  if (model_.state() == KeyboardControllerState::kShown) {
     DCHECK(IsEnabled());
     return true;
   }
diff --git a/ash/keyboard/ui/keyboard_controller.h b/ash/keyboard/ui/keyboard_controller.h
index 4a8b8ee6..4d99e54 100644
--- a/ash/keyboard/ui/keyboard_controller.h
+++ b/ash/keyboard/ui/keyboard_controller.h
@@ -14,6 +14,7 @@
 #include "ash/keyboard/ui/keyboard_event_handler.h"
 #include "ash/keyboard/ui/keyboard_export.h"
 #include "ash/keyboard/ui/keyboard_layout_delegate.h"
+#include "ash/keyboard/ui/keyboard_ui_model.h"
 #include "ash/keyboard/ui/keyboard_ukm_recorder.h"
 #include "ash/keyboard/ui/notification_manager.h"
 #include "ash/keyboard/ui/queued_container_type.h"
@@ -47,28 +48,6 @@
 class KeyboardUI;
 class KeyboardUIFactory;
 
-// Represents the current state of the keyboard managed by the controller.
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class KeyboardControllerState {
-  kUnknown = 0,
-  // Keyboard has never been shown.
-  kInitial = 1,
-  // Waiting for an extension to be loaded. Will move to HIDDEN if this is
-  // loading pre-emptively, otherwise will move to SHOWN.
-  kLoadingExtension = 2,
-  // kShowing = 3,  // no longer used
-  // Keyboard is shown.
-  kShown = 4,
-  // Keyboard is still shown, but will move to HIDING in a short period, or if
-  // an input element gets focused again, will move to SHOWN.
-  kWillHide = 5,
-  // kHiding = 6,  // no longer used
-  // Keyboard is hidden, but has shown at least once.
-  kHidden = 7,
-  kMaxValue = kHidden
-};
-
 // Provides control of the virtual keyboard, including enabling/disabling the
 // keyboard and controlling its visibility.
 class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver,
@@ -253,7 +232,7 @@
       std::unique_ptr<ContainerBehavior> container_behavior) {
     container_behavior_ = std::move(container_behavior);
   }
-  KeyboardControllerState GetStateForTest() const { return state_; }
+  KeyboardControllerState GetStateForTest() const { return model_.state(); }
   ui::InputMethod* GetInputMethodForTest();
   void EnsureCaretInWorkAreaForTest(const gfx::Rect& occluded_bounds_in_root);
 
@@ -436,18 +415,19 @@
   bool show_on_keyboard_window_load_ = false;
 
   // If true, the keyboard is always visible even if no window has input focus.
+  // TODO(https://crbug.com/964191): Move this to the UI model.
   bool keyboard_locked_ = false;
   KeyboardEventHandler event_handler_;
 
   base::ObserverList<KeyboardControllerObserver>::Unchecked observer_list_;
 
+  KeyboardUIModel model_;
+
   // The bounds for the visible portion of the keyboard, relative to the root
   // window. If the keyboard window is visible, this should be the same size as
   // the keyboard window. If not, this should be empty.
   gfx::Rect visual_bounds_in_root_;
 
-  KeyboardControllerState state_ = KeyboardControllerState::kInitial;
-
   // Keyboard configuration associated with the controller.
   mojom::KeyboardConfig keyboard_config_;
 
diff --git a/ash/keyboard/ui/keyboard_ui_model.cc b/ash/keyboard/ui/keyboard_ui_model.cc
new file mode 100644
index 0000000..b65d0029
--- /dev/null
+++ b/ash/keyboard/ui/keyboard_ui_model.cc
@@ -0,0 +1,99 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/keyboard/ui/keyboard_ui_model.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/no_destructor.h"
+
+namespace keyboard {
+
+namespace {
+
+// Returns whether a given state transition is valid.
+// See the design document linked in https://crbug.com/71990.
+bool IsAllowedStateTransition(KeyboardControllerState from,
+                              KeyboardControllerState to) {
+  static const base::NoDestructor<
+      std::set<std::pair<KeyboardControllerState, KeyboardControllerState>>>
+      kAllowedStateTransition({
+          // The initial ShowKeyboard scenario
+          // INITIAL -> LOADING_EXTENSION -> HIDDEN -> SHOWN.
+          {KeyboardControllerState::kInitial,
+           KeyboardControllerState::kLoadingExtension},
+          {KeyboardControllerState::kLoadingExtension,
+           KeyboardControllerState::kHidden},
+          {KeyboardControllerState::kHidden, KeyboardControllerState::kShown},
+
+          // Hide scenario
+          // SHOWN -> WILL_HIDE -> HIDDEN.
+          {KeyboardControllerState::kShown, KeyboardControllerState::kWillHide},
+          {KeyboardControllerState::kWillHide,
+           KeyboardControllerState::kHidden},
+
+          // Focus transition scenario
+          // SHOWN -> WILL_HIDE -> SHOWN.
+          {KeyboardControllerState::kWillHide, KeyboardControllerState::kShown},
+
+          // HideKeyboard can be called at anytime for example on shutdown.
+          {KeyboardControllerState::kShown, KeyboardControllerState::kHidden},
+
+          // Return to INITIAL when keyboard is disabled.
+          {KeyboardControllerState::kLoadingExtension,
+           KeyboardControllerState::kInitial},
+          {KeyboardControllerState::kHidden, KeyboardControllerState::kInitial},
+      });
+  return kAllowedStateTransition->count(std::make_pair(from, to)) == 1;
+}
+
+// Records a state transition for metrics.
+void RecordStateTransition(KeyboardControllerState prev,
+                           KeyboardControllerState next) {
+  const bool valid_transition = IsAllowedStateTransition(prev, next);
+
+  // Emit UMA
+  const int transition_record =
+      (valid_transition ? 1 : -1) *
+      (static_cast<int>(prev) * 1000 + static_cast<int>(next));
+  base::UmaHistogramSparse("VirtualKeyboard.ControllerStateTransition",
+                           transition_record);
+  UMA_HISTOGRAM_BOOLEAN("VirtualKeyboard.ControllerStateTransitionIsValid",
+                        valid_transition);
+
+  DCHECK(valid_transition) << "State: " << StateToStr(prev) << " -> "
+                           << StateToStr(next) << " Unexpected transition";
+}
+
+}  // namespace
+
+std::string StateToStr(KeyboardControllerState state) {
+  switch (state) {
+    case KeyboardControllerState::kUnknown:
+      return "UNKNOWN";
+    case KeyboardControllerState::kInitial:
+      return "INITIAL";
+    case KeyboardControllerState::kLoadingExtension:
+      return "LOADING_EXTENSION";
+    case KeyboardControllerState::kShown:
+      return "SHOWN";
+    case KeyboardControllerState::kWillHide:
+      return "WILL_HIDE";
+    case KeyboardControllerState::kHidden:
+      return "HIDDEN";
+  }
+}
+
+KeyboardUIModel::KeyboardUIModel() = default;
+
+void KeyboardUIModel::ChangeState(KeyboardControllerState new_state) {
+  RecordStateTransition(state_, new_state);
+
+  if (new_state == state_)
+    return;
+
+  state_ = new_state;
+}
+
+}  // namespace keyboard
diff --git a/ash/keyboard/ui/keyboard_ui_model.h b/ash/keyboard/ui/keyboard_ui_model.h
new file mode 100644
index 0000000..94a593f3
--- /dev/null
+++ b/ash/keyboard/ui/keyboard_ui_model.h
@@ -0,0 +1,62 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_KEYBOARD_UI_KEYBOARD_UI_MODEL_H_
+#define ASH_KEYBOARD_UI_KEYBOARD_UI_MODEL_H_
+
+#include <string>
+
+#include "ash/keyboard/ui/keyboard_export.h"
+#include "ash/public/interfaces/keyboard_config.mojom.h"
+#include "base/macros.h"
+
+namespace keyboard {
+
+// TODO(https://crbug.com/964191): Change this to be part of the model.
+// Represents the current state of the keyboard managed by the controller.
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class KeyboardControllerState {
+  kUnknown = 0,
+  // Keyboard has never been shown.
+  kInitial = 1,
+  // Waiting for an extension to be loaded. Will move to HIDDEN if this is
+  // loading pre-emptively, otherwise will move to SHOWN.
+  kLoadingExtension = 2,
+  // kShowing = 3,  // no longer used
+  // Keyboard is shown.
+  kShown = 4,
+  // Keyboard is still shown, but will move to HIDING in a short period, or if
+  // an input element gets focused again, will move to SHOWN.
+  kWillHide = 5,
+  // kHiding = 6,  // no longer used
+  // Keyboard is hidden, but has shown at least once.
+  kHidden = 7,
+  kMaxValue = kHidden
+};
+
+// Convert a state into a string.
+std::string StateToStr(KeyboardControllerState state);
+
+// Model for the virtual keyboard UI.
+class KEYBOARD_EXPORT KeyboardUIModel {
+ public:
+  KeyboardUIModel();
+
+  // Get the current state of the keyboard UI.
+  KeyboardControllerState state() const { return state_; }
+
+  // Changes the current state to another. Only accepts valid state transitions.
+  void ChangeState(KeyboardControllerState new_state);
+
+ private:
+  // Current state of the keyboard UI.
+  KeyboardControllerState state_ = KeyboardControllerState::kInitial;
+
+  DISALLOW_COPY_AND_ASSIGN(KeyboardUIModel);
+};
+
+}  // namespace keyboard
+
+#endif  // ASH_KEYBOARD_UI_KEYBOARD_UI_MODEL_H_
diff --git a/ash/kiosk_next/kiosk_next_home_controller.cc b/ash/kiosk_next/kiosk_next_home_controller.cc
index accbc87..90b20e1e 100644
--- a/ash/kiosk_next/kiosk_next_home_controller.cc
+++ b/ash/kiosk_next/kiosk_next_home_controller.cc
@@ -6,12 +6,13 @@
 
 #include <memory>
 
+#include "ash/display/screen_orientation_controller.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/screen_util.h"
+#include "ash/shell.h"
 #include "ash/wm/container_finder.h"
 #include "ash/wm/wm_event.h"
 #include "base/logging.h"
-#include "ui/aura/client/window_types.h"
 #include "ui/aura/window.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animator.h"
@@ -24,10 +25,21 @@
 
 KioskNextHomeController::KioskNextHomeController() {
   display::Screen::GetScreen()->AddObserver(this);
+
+  home_screen_container_ = Shell::GetPrimaryRootWindow()->GetChildById(
+      kShellWindowId_HomeScreenContainer);
+  home_screen_container_->AddObserver(this);
+  if (!home_screen_container_->children().empty()) {
+    DCHECK_EQ(1u, home_screen_container_->children().size());
+    home_screen_window_ = home_screen_container_->children()[0];
+  }
 }
 
 KioskNextHomeController::~KioskNextHomeController() {
   display::Screen::GetScreen()->RemoveObserver(this);
+
+  if (home_screen_container_)
+    home_screen_container_->RemoveObserver(this);
 }
 
 void KioskNextHomeController::ShowHomeScreenView() {
@@ -37,24 +49,7 @@
 }
 
 aura::Window* KioskNextHomeController::GetHomeScreenWindow() {
-  aura::Window::Windows containers = wm::GetContainersFromAllRootWindows(
-      kShellWindowId_HomeScreenContainer, nullptr);
-  for (aura::Window* container : containers) {
-    if (container->children().empty())
-      continue;
-
-    // Expect only one window.
-    DCHECK_EQ(1u, container->children().size());
-    aura::Window* window = container->children()[0];
-
-    // When the app list is being destroyed (before the Home app is launched),
-    // the app list will appear here; filter for the Home app by checking for a
-    // normal type window.
-    if (window->type() == aura::client::WindowType::WINDOW_TYPE_NORMAL)
-      return window;
-  }
-
-  return nullptr;
+  return home_screen_window_;
 }
 
 void KioskNextHomeController::UpdateYPositionAndOpacityForHomeLauncher(
@@ -109,4 +104,23 @@
   wm::GetWindowState(window)->OnWMEvent(&event);
 }
 
+void KioskNextHomeController::OnWindowAdded(aura::Window* new_window) {
+  DCHECK(!home_screen_window_);
+  DCHECK_EQ(new_window->type(), aura::client::WindowType::WINDOW_TYPE_NORMAL);
+  home_screen_window_ = new_window;
+
+  Shell::Get()->screen_orientation_controller()->LockOrientationForWindow(
+      home_screen_window_, OrientationLockType::kLandscape);
+}
+
+void KioskNextHomeController::OnWillRemoveWindow(aura::Window* window) {
+  DCHECK_EQ(home_screen_window_, window);
+  home_screen_window_ = nullptr;
+}
+
+void KioskNextHomeController::OnWindowDestroying(aura::Window* window) {
+  if (window == home_screen_container_)
+    home_screen_container_ = nullptr;
+}
+
 }  // namespace ash
diff --git a/ash/kiosk_next/kiosk_next_home_controller.h b/ash/kiosk_next/kiosk_next_home_controller.h
index 5625209..aed0000 100644
--- a/ash/kiosk_next/kiosk_next_home_controller.h
+++ b/ash/kiosk_next/kiosk_next_home_controller.h
@@ -8,6 +8,7 @@
 #include "ash/ash_export.h"
 #include "ash/home_screen/home_screen_delegate.h"
 #include "base/macros.h"
+#include "ui/aura/window_observer.h"
 #include "ui/display/display_observer.h"
 
 namespace ash {
@@ -16,7 +17,8 @@
 // TODO(michaelpg): Manage gestures on the Home window, such as dragging down
 // from the top for Overview mode.
 class ASH_EXPORT KioskNextHomeController : public HomeScreenDelegate,
-                                           public display::DisplayObserver {
+                                           public display::DisplayObserver,
+                                           public aura::WindowObserver {
  public:
   KioskNextHomeController();
   ~KioskNextHomeController() override;
@@ -37,7 +39,15 @@
   void OnDisplayMetricsChanged(const display::Display& display,
                                uint32_t changed_metrics) override;
 
+  // WindowObserver:
+  void OnWindowAdded(aura::Window* new_window) override;
+  void OnWillRemoveWindow(aura::Window* window) override;
+  void OnWindowDestroying(aura::Window* window) override;
+
  private:
+  aura::Window* home_screen_container_ = nullptr;
+  aura::Window* home_screen_window_ = nullptr;
+
   DISALLOW_COPY_AND_ASSIGN(KioskNextHomeController);
 };
 
diff --git a/ash/metrics/demo_session_metrics_recorder.cc b/ash/metrics/demo_session_metrics_recorder.cc
index ca1230ac8..098e3af 100644
--- a/ash/metrics/demo_session_metrics_recorder.cc
+++ b/ash/metrics/demo_session_metrics_recorder.cc
@@ -44,15 +44,15 @@
 DemoModeApp GetAppFromAppId(const std::string& app_id) {
   // Each version of the Highlights app is bucketed into the same value.
   if (app_id == extension_misc::kHighlightsAppId ||
-      app_id == extension_misc::kHighlightsAlt1AppId ||
-      app_id == extension_misc::kHighlightsAlt2AppId) {
+      app_id == extension_misc::kHighlightsEveAppId ||
+      app_id == extension_misc::kHighlightsNocturneAppId) {
     return DemoModeApp::kHighlights;
   }
 
   // Each version of the Screensaver app is bucketed into the same value.
   if (app_id == extension_misc::kScreensaverAppId ||
-      app_id == extension_misc::kScreensaverAlt1AppId ||
-      app_id == extension_misc::kScreensaverAlt2AppId) {
+      app_id == extension_misc::kScreensaverEveAppId ||
+      app_id == extension_misc::kScreensaverNocturneAppId) {
     return DemoModeApp::kScreensaver;
   }
 
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 83febfe..2040886 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -770,6 +770,9 @@
 ShelfLayoutManager::TargetBounds::~TargetBounds() = default;
 
 void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
+  if (suspend_visibility_update_)
+    return;
+
   State state;
   state.visibility_state = visibility_state;
   state.auto_hide_state = CalculateAutoHideState(visibility_state);
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index cfbecbd..869c940 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -1309,6 +1309,9 @@
 
 // Tests that the shelf should be visible when in overview mode.
 TEST_F(ShelfLayoutManagerTest, VisibleInOverview) {
+  ui::ScopedAnimationDurationScaleMode regular_animations(
+      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
+
   std::unique_ptr<aura::Window> window(CreateTestWindow());
   window->Show();
   Shelf* shelf = GetPrimaryShelf();
@@ -1326,14 +1329,22 @@
   OverviewController* overview_controller = Shell::Get()->overview_controller();
   // Tests that the shelf is visible when in overview mode
   overview_controller->ToggleOverview();
+  ash::ShellTestApi().WaitForOverviewAnimationState(
+      ash::OverviewAnimationState::kEnterAnimationComplete);
+
   EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState());
   EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->GetAutoHideState());
   EXPECT_EQ(SHELF_BACKGROUND_OVERVIEW, GetShelfWidget()->GetBackgroundType());
 
   // Test that on exiting overview mode, the shelf returns to auto hide state.
   overview_controller->ToggleOverview();
+  ash::ShellTestApi().WaitForOverviewAnimationState(
+      ash::OverviewAnimationState::kExitAnimationComplete);
+
   EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState());
   EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->GetAutoHideState());
+  EXPECT_EQ(display.bounds().bottom() - kHiddenShelfInScreenPortion,
+            GetShelfWidget()->GetWindowBoundsInScreen().y());
 }
 
 // Assertions around SetAutoHideBehavior.
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index b71427e7..225b412 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -159,6 +159,7 @@
 <translation id="3308453408813785101">Korisnik <ph name="USER_EMAIL_ADDRESS" /> može se prijaviti i kasnije.</translation>
 <translation id="3321628682574733415">Netočan roditeljski kôd</translation>
 <translation id="332587331255250389">Zamijenite bateriju</translation>
+<translation id="3335825575923019462">Jeste li sigurni da želite onemogućiti automatske klikove?</translation>
 <translation id="3351879221545518001">Trenutačno emitirate zaslon.</translation>
 <translation id="3364721542077212959">Alati pisaljke</translation>
 <translation id="3368922792935385530">Spojeno</translation>
@@ -401,6 +402,7 @@
 <translation id="7348093485538360975">Tipkovnica na zaslonu</translation>
 <translation id="735745346212279324">Veza s VPN-om prekinuta</translation>
 <translation id="7377169924702866686">Uključena je opcija Caps Lock.</translation>
+<translation id="7378594059915113390">Medijske kontrole</translation>
 <translation id="7384299914270925461"><ph name="SIGN" /><ph name="MINUTES_REMAINING" />:<ph name="SECONDS_REMAINING" />s</translation>
 <translation id="7398254312354928459">Promijenjena je mrežna veza</translation>
 <translation id="7405710164030118432">Da biste otključali uređaj, unesite kôd za roditeljski pristup Family Linka</translation>
@@ -486,6 +488,7 @@
 <translation id="8649101189709089199">Odabir za govor</translation>
 <translation id="8652175077544655965">Zatvaranje postavki</translation>
 <translation id="8653151467777939995">Prikaz postavki obavijesti. Obavijesti su uključene</translation>
+<translation id="8664483332071009680">Želite li onemogućiti automatske klikove?</translation>
 <translation id="8664753092453405566">Prikaz popisa mreža. <ph name="STATE_TEXT" /></translation>
 <translation id="8673028979667498656">270°</translation>
 <translation id="8676770494376880701">Priključen je punjač male snage</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 92d3c72..5d47909 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -84,7 +84,7 @@
 <translation id="225680501294068881">Đang quét tìm thiết bị...</translation>
 <translation id="2268130516524549846">Đã tắt bluetooth</translation>
 <translation id="2268813581635650749">Đăng xuất tất cả</translation>
-<translation id="2277103315734023688">Tua đi</translation>
+<translation id="2277103315734023688">Tua tiến</translation>
 <translation id="2292698582925480719">Tỷ lệ hiển thị</translation>
 <translation id="2302092602801625023">Tài khoản này do Family Link quản lý</translation>
 <translation id="2303600792989757991">Tổng quan về chuyển đổi cửa sổ</translation>
@@ -206,7 +206,7 @@
 <translation id="4042660782729322247">Bạn đang chia sẻ màn hình</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Tắt thông báo của một ứng dụng}other{Tắt thông báo của # ứng dụng}}</translation>
 <translation id="4072264167173457037">Tín hiệu trung bình</translation>
-<translation id="4112140312785995938">Tua lại</translation>
+<translation id="4112140312785995938">Tua lùi</translation>
 <translation id="4129129681837227511">Để xem thông báo trên màn hình khóa, hãy mở khóa thiết bị để thay đổi tùy chọn cài đặt này</translation>
 <translation id="4146833061457621061">Phát nhạc</translation>
 <translation id="4181841719683918333">Ngôn ngữ</translation>
diff --git a/ash/system/model/system_tray_model.cc b/ash/system/model/system_tray_model.cc
index 329fa1bd..e5e5488 100644
--- a/ash/system/model/system_tray_model.cc
+++ b/ash/system/model/system_tray_model.cc
@@ -14,6 +14,7 @@
 #include "ash/system/model/update_model.h"
 #include "ash/system/model/virtual_keyboard_model.h"
 #include "ash/system/network/active_network_icon.h"
+#include "ash/system/network/tray_network_state_observer.h"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "base/logging.h"
@@ -28,7 +29,9 @@
       tracing_(std::make_unique<TracingModel>()),
       update_model_(std::make_unique<UpdateModel>()),
       virtual_keyboard_(std::make_unique<VirtualKeyboardModel>()),
-      active_network_icon_(std::make_unique<ActiveNetworkIcon>(connector)) {}
+      active_network_icon_(std::make_unique<ActiveNetworkIcon>(connector)),
+      network_observer_(std::make_unique<TrayNetworkStateObserver>(connector)) {
+}
 
 SystemTrayModel::~SystemTrayModel() = default;
 
diff --git a/ash/system/model/system_tray_model.h b/ash/system/model/system_tray_model.h
index d683e2b6..acf1cd0 100644
--- a/ash/system/model/system_tray_model.h
+++ b/ash/system/model/system_tray_model.h
@@ -23,6 +23,7 @@
 class LocaleModel;
 class SessionLengthLimitModel;
 class TracingModel;
+class TrayNetworkStateObserver;
 class UpdateModel;
 class VirtualKeyboardModel;
 
@@ -70,7 +71,9 @@
   ActiveNetworkIcon* active_network_icon() {
     return active_network_icon_.get();
   }
-
+  TrayNetworkStateObserver* network_observer() {
+    return network_observer_.get();
+  }
   const mojom::SystemTrayClientPtr& client_ptr() { return client_ptr_; }
 
  private:
@@ -82,6 +85,7 @@
   std::unique_ptr<UpdateModel> update_model_;
   std::unique_ptr<VirtualKeyboardModel> virtual_keyboard_;
   std::unique_ptr<ActiveNetworkIcon> active_network_icon_;
+  std::unique_ptr<TrayNetworkStateObserver> network_observer_;
 
   // TODO(tetsui): Add following as a sub-model of SystemTrayModel:
   // * BluetoothModel
diff --git a/ash/system/network/active_network_icon.cc b/ash/system/network/active_network_icon.cc
index 4134e79..1c4a604 100644
--- a/ash/system/network/active_network_icon.cc
+++ b/ash/system/network/active_network_icon.cc
@@ -12,7 +12,6 @@
 #include "chromeos/services/network_config/public/cpp/cros_network_config_util.h"
 #include "chromeos/services/network_config/public/mojom/constants.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/paint_vector_icon.h"
 
diff --git a/ash/system/network/network_feature_pod_button.cc b/ash/system/network/network_feature_pod_button.cc
index b1619f5..9cc0c12a 100644
--- a/ash/system/network/network_feature_pod_button.cc
+++ b/ash/system/network/network_feature_pod_button.cc
@@ -169,20 +169,21 @@
   // NetworkHandler can be uninitialized in unit tests.
   if (!NetworkHandler::IsInitialized())
     return;
-  network_state_observer_ = std::make_unique<TrayNetworkStateObserver>(this);
+  Shell::Get()->system_tray_model()->network_observer()->AddObserver(this);
   ShowDetailedViewArrow();
   Update();
 }
 
 NetworkFeaturePodButton::~NetworkFeaturePodButton() {
   network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
+  Shell::Get()->system_tray_model()->network_observer()->RemoveObserver(this);
 }
 
 void NetworkFeaturePodButton::NetworkIconChanged() {
   Update();
 }
 
-void NetworkFeaturePodButton::NetworkStateChanged(bool notify_a11y) {
+void NetworkFeaturePodButton::ActiveNetworkStateChanged() {
   Update();
 }
 
diff --git a/ash/system/network/network_feature_pod_button.h b/ash/system/network/network_feature_pod_button.h
index d7aa127..49acdcb 100644
--- a/ash/system/network/network_feature_pod_button.h
+++ b/ash/system/network/network_feature_pod_button.h
@@ -15,7 +15,7 @@
 // animation to implement network connecting animation on feature pod button.
 class NetworkFeaturePodButton : public FeaturePodButton,
                                 public network_icon::AnimationObserver,
-                                public TrayNetworkStateObserver::Delegate {
+                                public TrayNetworkStateObserver::Observer {
  public:
   explicit NetworkFeaturePodButton(FeaturePodControllerBase* controller);
   ~NetworkFeaturePodButton() override;
@@ -23,15 +23,13 @@
   // network_icon::AnimationObserver:
   void NetworkIconChanged() override;
 
-  // TrayNetworkStateObserver::Delegate:
-  void NetworkStateChanged(bool notify_a11y) override;
+  // TrayNetworkStateObserver::Observer:
+  void ActiveNetworkStateChanged() override;
 
  private:
   void Update();
   void SetTooltipState(const base::string16& tooltip_state);
 
-  std::unique_ptr<TrayNetworkStateObserver> network_state_observer_;
-
   DISALLOW_COPY_AND_ASSIGN(NetworkFeaturePodButton);
 };
 
diff --git a/ash/system/network/network_tray_view.cc b/ash/system/network/network_tray_view.cc
index ec42e54..bbe373b 100644
--- a/ash/system/network/network_tray_view.cc
+++ b/ash/system/network/network_tray_view.cc
@@ -9,6 +9,7 @@
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/system/model/system_tray_model.h"
 #include "ash/system/network/network_icon.h"
 #include "ash/system/network/network_icon_animation.h"
 #include "ash/system/network/network_tray_icon_strategy.h"
@@ -34,6 +35,7 @@
 
 NetworkTrayView::~NetworkTrayView() {
   network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
+  Shell::Get()->system_tray_model()->network_observer()->RemoveObserver(this);
 }
 
 NetworkTrayView* NetworkTrayView::CreateForDefault(Shelf* shelf) {
@@ -80,17 +82,22 @@
   UpdateNetworkStateHandlerIcon();
 }
 
-void NetworkTrayView::NetworkStateChanged(bool notify_a11y) {
+void NetworkTrayView::ActiveNetworkStateChanged() {
   UpdateNetworkStateHandlerIcon();
-  UpdateConnectionStatus(GetConnectedNetwork(), notify_a11y);
+  UpdateConnectionStatus(GetConnectedNetwork(), true /* notify _a11y */);
+}
+
+void NetworkTrayView::NetworkListChanged() {
+  UpdateNetworkStateHandlerIcon();
+  UpdateConnectionStatus(GetConnectedNetwork(), false /* notify_a11y */);
 }
 
 NetworkTrayView::NetworkTrayView(
     Shelf* shelf,
     std::unique_ptr<NetworkTrayIconStrategy> network_tray_icon_strategy)
     : TrayItemView(shelf),
-      network_state_observer_(std::make_unique<TrayNetworkStateObserver>(this)),
       network_tray_icon_strategy_(std::move(network_tray_icon_strategy)) {
+  Shell::Get()->system_tray_model()->network_observer()->AddObserver(this);
   CreateImageView();
   UpdateNetworkStateHandlerIcon();
   UpdateConnectionStatus(GetConnectedNetwork(), true /* notify_a11y */);
diff --git a/ash/system/network/network_tray_view.h b/ash/system/network/network_tray_view.h
index 6ecfbe3..5249ea6 100644
--- a/ash/system/network/network_tray_view.h
+++ b/ash/system/network/network_tray_view.h
@@ -28,7 +28,7 @@
 class NetworkTrayView : public TrayItemView,
                         public network_icon::AnimationObserver,
                         public SessionObserver,
-                        public TrayNetworkStateObserver::Delegate {
+                        public TrayNetworkStateObserver::Observer {
  public:
   ~NetworkTrayView() override;
 
@@ -52,8 +52,9 @@
   // SessionObserver:
   void OnSessionStateChanged(session_manager::SessionState state) override;
 
-  // TrayNetworkStateObserver::Delegate:
-  void NetworkStateChanged(bool notify_a11y) override;
+  // TrayNetworkStateObserver::Observer:
+  void ActiveNetworkStateChanged() override;
+  void NetworkListChanged() override;
 
  private:
   NetworkTrayView(Shelf* shelf,
@@ -71,7 +72,6 @@
   base::string16 accessible_description_;
   base::string16 connection_status_tooltip_;
 
-  std::unique_ptr<TrayNetworkStateObserver> network_state_observer_;
   std::unique_ptr<NetworkTrayIconStrategy> network_tray_icon_strategy_;
 
   DISALLOW_COPY_AND_ASSIGN(NetworkTrayView);
diff --git a/ash/system/network/tray_network_state_observer.cc b/ash/system/network/tray_network_state_observer.cc
index bf4b19b..3614467f 100644
--- a/ash/system/network/tray_network_state_observer.cc
+++ b/ash/system/network/tray_network_state_observer.cc
@@ -9,105 +9,129 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "chromeos/network/network_state.h"
-#include "chromeos/network/network_state_handler.h"
+#include "chromeos/services/network_config/public/cpp/cros_network_config_util.h"
+#include "chromeos/services/network_config/public/mojom/constants.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 
-using chromeos::NetworkHandler;
+using chromeos::network_config::mojom::DeviceStateType;
+using chromeos::network_config::mojom::NetworkType;
 
 namespace {
 
 const int kUpdateFrequencyMs = 1000;
 
-bool IsWifiEnabled() {
-  return NetworkHandler::Get()->network_state_handler()->IsTechnologyEnabled(
-      chromeos::NetworkTypePattern::WiFi());
-}
-
-bool IsMobileEnabled() {
-  return NetworkHandler::Get()->network_state_handler()->IsTechnologyEnabled(
-      chromeos::NetworkTypePattern::Cellular() |
-      chromeos::NetworkTypePattern::Tether());
-}
-
 }  // namespace
 
 namespace ash {
 
-TrayNetworkStateObserver::TrayNetworkStateObserver(Delegate* delegate)
-    : delegate_(delegate), update_frequency_(kUpdateFrequencyMs) {
+TrayNetworkStateObserver::TrayNetworkStateObserver(
+    service_manager::Connector* connector)
+    : update_frequency_(kUpdateFrequencyMs) {
   if (ui::ScopedAnimationDurationScaleMode::duration_scale_mode() !=
       ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION) {
     update_frequency_ = 0;  // Send updates immediately for tests.
   }
-  // TODO(mash): Figure out what to do about NetworkHandler.
-  if (NetworkHandler::IsInitialized()) {
-    NetworkHandler::Get()->network_state_handler()->AddObserver(this,
-                                                                FROM_HERE);
-    wifi_enabled_ = IsWifiEnabled();
+  if (connector)  // May be null in tests.
+    BindCrosNetworkConfig(connector);
+}
+
+TrayNetworkStateObserver::~TrayNetworkStateObserver() = default;
+
+void TrayNetworkStateObserver::AddObserver(Observer* observer) {
+  observer_list_.AddObserver(observer);
+}
+
+void TrayNetworkStateObserver::RemoveObserver(Observer* observer) {
+  observer_list_.RemoveObserver(observer);
+}
+
+void TrayNetworkStateObserver::OnActiveNetworksChanged(
+    std::vector<chromeos::network_config::mojom::NetworkStatePropertiesPtr>) {
+  SendActiveNetworkStateChanged();
+}
+
+void TrayNetworkStateObserver::OnNetworkStateListChanged() {
+  NotifyNetworkListChanged();
+}
+
+void TrayNetworkStateObserver::OnDeviceStateListChanged() {
+  // This observer is triggered when any device state changes. Depending on the
+  // actual state changes, an immediate or delated update may be triggered.
+  // See OnGetDeviceStateList for details.
+  UpdateDeviceEnabledStates();
+}
+
+void TrayNetworkStateObserver::BindCrosNetworkConfig(
+    service_manager::Connector* connector) {
+  // Ensure bindings are reset in case this is called after a failure.
+  cros_network_config_observer_binding_.Close();
+  cros_network_config_ptr_.reset();
+
+  connector->BindInterface(chromeos::network_config::mojom::kServiceName,
+                           &cros_network_config_ptr_);
+  chromeos::network_config::mojom::CrosNetworkConfigObserverPtr observer_ptr;
+  cros_network_config_observer_binding_.Bind(mojo::MakeRequest(&observer_ptr));
+  cros_network_config_ptr_->AddObserver(std::move(observer_ptr));
+  UpdateDeviceEnabledStates();
+
+  // If the connection is lost (e.g. due to a crash), attempt to rebind it.
+  cros_network_config_ptr_.set_connection_error_handler(
+      base::BindOnce(&TrayNetworkStateObserver::BindCrosNetworkConfig,
+                     base::Unretained(this), connector));
+}
+
+void TrayNetworkStateObserver::UpdateDeviceEnabledStates() {
+  cros_network_config_ptr_->GetDeviceStateList(base::BindOnce(
+      &TrayNetworkStateObserver::OnGetDeviceStateList, base::Unretained(this)));
+}
+
+void TrayNetworkStateObserver::OnGetDeviceStateList(
+    std::vector<chromeos::network_config::mojom::DeviceStatePropertiesPtr>
+        devices) {
+  bool wifi_was_enabled = wifi_enabled_;
+  bool mobile_was_enabled = mobile_enabled_;
+  wifi_enabled_ = false;
+  mobile_enabled_ = false;
+  for (auto& device : devices) {
+    NetworkType type = device->type;
+    if (type == NetworkType::kWiFi &&
+        device->state == DeviceStateType::kEnabled) {
+      wifi_enabled_ = true;
+    }
+    if ((type == NetworkType::kCellular || type == NetworkType::kTether) &&
+        device->state == DeviceStateType::kEnabled) {
+      mobile_enabled_ = true;
+    }
+  }
+  if (wifi_was_enabled != wifi_enabled_ ||
+      mobile_was_enabled != mobile_enabled_) {
+    SendActiveNetworkStateChanged();
   }
 }
 
-TrayNetworkStateObserver::~TrayNetworkStateObserver() {
-  if (NetworkHandler::IsInitialized()) {
-    NetworkHandler::Get()->network_state_handler()->RemoveObserver(this,
-                                                                   FROM_HERE);
-  }
-}
-
-void TrayNetworkStateObserver::NetworkListChanged() {
-  SignalUpdate(false /* notify_a11y */);
-}
-
-void TrayNetworkStateObserver::DeviceListChanged() {
-  SignalUpdate(false /* notify_a11y */);
-}
-
-void TrayNetworkStateObserver::ActiveNetworksChanged(
-    const std::vector<const chromeos::NetworkState*>& active_networks) {
-  SignalUpdate(true /* notify_a11y */);
-}
-
-// This tracks Strength and other property changes for all networks. It will
-// be called in addition to NetworkConnectionStateChanged for connection state
-// changes.
-void TrayNetworkStateObserver::NetworkPropertiesUpdated(
-    const chromeos::NetworkState* network) {
-  SignalUpdate(false /* notify_a11y */);
-}
-
-// Required to propagate changes to the "scanning" property of DeviceStates.
-void TrayNetworkStateObserver::DevicePropertiesUpdated(
-    const chromeos::DeviceState* device) {
-  SignalUpdate(false /* notify_a11y */);
-}
-
-void TrayNetworkStateObserver::SignalUpdate(bool notify_a11y) {
-  bool old_wifi_state = wifi_enabled_;
-  wifi_enabled_ = IsWifiEnabled();
-
-  bool old_mobile_state = mobile_enabled_;
-  mobile_enabled_ = IsMobileEnabled();
-
-  // Update immediately when Wi-Fi and/or Mobile have been turned on or off.
-  // This ensures that the UI for settings and quick settings stays in sync; see
-  // https://crbug.com/917325.
-  if (old_wifi_state != wifi_enabled_ || old_mobile_state != mobile_enabled_) {
-    timer_.Stop();
-    SendNetworkStateChanged(notify_a11y);
-    return;
-  }
-
+void TrayNetworkStateObserver::NotifyNetworkListChanged() {
   if (timer_.IsRunning())
     return;
-  timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(update_frequency_),
-               base::Bind(&TrayNetworkStateObserver::SendNetworkStateChanged,
-                          base::Unretained(this), notify_a11y));
+  timer_.Start(
+      FROM_HERE, base::TimeDelta::FromMilliseconds(update_frequency_),
+      base::BindRepeating(&TrayNetworkStateObserver::SendNetworkListChanged,
+                          base::Unretained(this)));
 }
 
-void TrayNetworkStateObserver::SendNetworkStateChanged(bool notify_a11y) {
-  delegate_->NetworkStateChanged(notify_a11y);
+void TrayNetworkStateObserver::SendActiveNetworkStateChanged() {
+  for (auto& observer : observer_list_)
+    observer.ActiveNetworkStateChanged();
 }
 
+void TrayNetworkStateObserver::SendNetworkListChanged() {
+  for (auto& observer : observer_list_)
+    observer.NetworkListChanged();
+}
+
+void TrayNetworkStateObserver::Observer::ActiveNetworkStateChanged() {}
+
+void TrayNetworkStateObserver::Observer::NetworkListChanged() {}
+
 }  // namespace ash
diff --git a/ash/system/network/tray_network_state_observer.h b/ash/system/network/tray_network_state_observer.h
index bbead095..f295f13 100644
--- a/ash/system/network/tray_network_state_observer.h
+++ b/ash/system/network/tray_network_state_observer.h
@@ -8,48 +8,67 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "base/observer_list.h"
 #include "base/timer/timer.h"
-#include "chromeos/network/network_state_handler_observer.h"
+#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
+#include "mojo/public/cpp/bindings/binding.h"
+
+namespace service_manager {
+class Connector;
+}
 
 namespace ash {
 
-class TrayNetworkStateObserver : public chromeos::NetworkStateHandlerObserver {
+class TrayNetworkStateObserver
+    : public chromeos::network_config::mojom::CrosNetworkConfigObserver {
  public:
-  class Delegate {
+  // TrayNetworkStateObserver observes the mojo interface, and in turn has UI
+  // observers that only need to be informed when the UI should be refreshed.
+  class Observer : public base::CheckedObserver {
    public:
-    // Called when any interesting network changes occur. The frequency of this
-    // event is limited to kUpdateFrequencyMs.
-    virtual void NetworkStateChanged(bool notify_a11y) = 0;
+    // The active networks changed or a device enabled state changed.
+    virtual void ActiveNetworkStateChanged();
 
-   protected:
-    virtual ~Delegate() {}
+    // The list of networks changed. The frequency of this event is limited.
+    virtual void NetworkListChanged();
   };
 
-  explicit TrayNetworkStateObserver(Delegate* delegate);
-
+  explicit TrayNetworkStateObserver(service_manager::Connector* connector);
   ~TrayNetworkStateObserver() override;
 
-  // NetworkStateHandlerObserver
-  void NetworkListChanged() override;
-  void DeviceListChanged() override;
-  void ActiveNetworksChanged(const std::vector<const chromeos::NetworkState*>&
-                                 active_networks) override;
-  void NetworkPropertiesUpdated(const chromeos::NetworkState* network) override;
-  void DevicePropertiesUpdated(const chromeos::DeviceState* device) override;
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+
+  // CrosNetworkConfigObserver
+  void OnActiveNetworksChanged(
+      std::vector<chromeos::network_config::mojom::NetworkStatePropertiesPtr>)
+      override;
+  void OnNetworkStateListChanged() override;
+  void OnDeviceStateListChanged() override;
 
  private:
-  void SignalUpdate(bool notify_a11y);
-  void SendNetworkStateChanged(bool notify_a11y);
+  void BindCrosNetworkConfig(service_manager::Connector* connector);
+  void UpdateDeviceEnabledStates();
+  void OnGetDeviceStateList(
+      std::vector<chromeos::network_config::mojom::DeviceStatePropertiesPtr>
+          devices);
+  void NotifyNetworkListChanged();
+  void SendActiveNetworkStateChanged();
+  void SendNetworkListChanged();
 
-  // Unowned Delegate pointer (must outlive this instance).
-  Delegate* delegate_;
+  chromeos::network_config::mojom::CrosNetworkConfigPtr
+      cros_network_config_ptr_;
+  mojo::Binding<chromeos::network_config::mojom::CrosNetworkConfigObserver>
+      cros_network_config_observer_binding_{this};
 
-  // Frequency at which to push NetworkStateChanged updates. This avoids
+  base::ObserverList<Observer> observer_list_;
+
+  // Frequency at which to push NetworkListChanged updates. This avoids
   // unnecessarily frequent UI updates (which can be expensive). We set this
   // to 0 for tests to eliminate timing variance.
   int update_frequency_;
 
-  // Timer used to limit the frequency of NetworkStateChanged updates.
+  // Timer used to limit the frequency of NetworkListChanged updates.
   base::OneShotTimer timer_;
 
   // The cached states of whether Wi-Fi and Mobile are enabled. The tray
diff --git a/ash/system/network/unified_network_detailed_view_controller.cc b/ash/system/network/unified_network_detailed_view_controller.cc
index 23dcab9..a4efe4d 100644
--- a/ash/system/network/unified_network_detailed_view_controller.cc
+++ b/ash/system/network/unified_network_detailed_view_controller.cc
@@ -6,6 +6,7 @@
 
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/system/model/system_tray_model.h"
 #include "ash/system/network/network_list.h"
 #include "ash/system/tray/detailed_view_delegate.h"
 
@@ -14,12 +15,13 @@
 UnifiedNetworkDetailedViewController::UnifiedNetworkDetailedViewController(
     UnifiedSystemTrayController* tray_controller)
     : detailed_view_delegate_(
-          std::make_unique<DetailedViewDelegate>(tray_controller)),
-      network_state_observer_(
-          std::make_unique<TrayNetworkStateObserver>(this)) {}
+          std::make_unique<DetailedViewDelegate>(tray_controller)) {
+  Shell::Get()->system_tray_model()->network_observer()->AddObserver(this);
+}
 
-UnifiedNetworkDetailedViewController::~UnifiedNetworkDetailedViewController() =
-    default;
+UnifiedNetworkDetailedViewController::~UnifiedNetworkDetailedViewController() {
+  Shell::Get()->system_tray_model()->network_observer()->RemoveObserver(this);
+}
 
 views::View* UnifiedNetworkDetailedViewController::CreateView() {
   DCHECK(!view_);
@@ -30,8 +32,12 @@
   return view_;
 }
 
-void UnifiedNetworkDetailedViewController::NetworkStateChanged(
-    bool notify_a11y) {
+void UnifiedNetworkDetailedViewController::ActiveNetworkStateChanged() {
+  if (view_)
+    view_->Update();
+}
+
+void UnifiedNetworkDetailedViewController::NetworkListChanged() {
   if (view_)
     view_->Update();
 }
diff --git a/ash/system/network/unified_network_detailed_view_controller.h b/ash/system/network/unified_network_detailed_view_controller.h
index 78fe0ade..f4e31ee 100644
--- a/ash/system/network/unified_network_detailed_view_controller.h
+++ b/ash/system/network/unified_network_detailed_view_controller.h
@@ -20,7 +20,7 @@
 // Controller of Network detailed view in UnifiedSystemTray.
 class UnifiedNetworkDetailedViewController
     : public DetailedViewController,
-      public TrayNetworkStateObserver::Delegate {
+      public TrayNetworkStateObserver::Observer {
  public:
   explicit UnifiedNetworkDetailedViewController(
       UnifiedSystemTrayController* tray_controller);
@@ -29,12 +29,12 @@
   // DetailedViewControllerBase:
   views::View* CreateView() override;
 
-  // TrayNetworkStateObserver::Delegate:
-  void NetworkStateChanged(bool notify_a11y) override;
+  // TrayNetworkStateObserver::Observer:
+  void ActiveNetworkStateChanged() override;
+  void NetworkListChanged() override;
 
  private:
   const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
-  const std::unique_ptr<TrayNetworkStateObserver> network_state_observer_;
 
   tray::NetworkListView* view_ = nullptr;
 
diff --git a/ash/system/network/unified_vpn_detailed_view_controller.cc b/ash/system/network/unified_vpn_detailed_view_controller.cc
index 06b7dd3..1c4e699 100644
--- a/ash/system/network/unified_vpn_detailed_view_controller.cc
+++ b/ash/system/network/unified_vpn_detailed_view_controller.cc
@@ -6,6 +6,7 @@
 
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/system/model/system_tray_model.h"
 #include "ash/system/network/vpn_list_view.h"
 #include "ash/system/tray/detailed_view_delegate.h"
 
@@ -14,11 +15,13 @@
 UnifiedVPNDetailedViewController::UnifiedVPNDetailedViewController(
     UnifiedSystemTrayController* tray_controller)
     : detailed_view_delegate_(
-          std::make_unique<DetailedViewDelegate>(tray_controller)),
-      network_state_observer_(
-          std::make_unique<TrayNetworkStateObserver>(this)) {}
+          std::make_unique<DetailedViewDelegate>(tray_controller)) {
+  Shell::Get()->system_tray_model()->network_observer()->AddObserver(this);
+}
 
-UnifiedVPNDetailedViewController::~UnifiedVPNDetailedViewController() = default;
+UnifiedVPNDetailedViewController::~UnifiedVPNDetailedViewController() {
+  Shell::Get()->system_tray_model()->network_observer()->RemoveObserver(this);
+}
 
 views::View* UnifiedVPNDetailedViewController::CreateView() {
   DCHECK(!view_);
@@ -29,7 +32,12 @@
   return view_;
 }
 
-void UnifiedVPNDetailedViewController::NetworkStateChanged(bool notify_a11y) {
+void UnifiedVPNDetailedViewController::ActiveNetworkStateChanged() {
+  if (view_)
+    view_->Update();
+}
+
+void UnifiedVPNDetailedViewController::NetworkListChanged() {
   if (view_)
     view_->Update();
 }
diff --git a/ash/system/network/unified_vpn_detailed_view_controller.h b/ash/system/network/unified_vpn_detailed_view_controller.h
index 6f722ec..4cc5844 100644
--- a/ash/system/network/unified_vpn_detailed_view_controller.h
+++ b/ash/system/network/unified_vpn_detailed_view_controller.h
@@ -20,7 +20,7 @@
 // Controller of VPN detailed view in UnifiedSystemTray.
 class UnifiedVPNDetailedViewController
     : public DetailedViewController,
-      public TrayNetworkStateObserver::Delegate {
+      public TrayNetworkStateObserver::Observer {
  public:
   explicit UnifiedVPNDetailedViewController(
       UnifiedSystemTrayController* tray_controller);
@@ -29,12 +29,12 @@
   // DetailedViewControllerBase:
   views::View* CreateView() override;
 
-  // TrayNetworkStateObserver::Delegate:
-  void NetworkStateChanged(bool notify_a11y) override;
+  // TrayNetworkStateObserver::Observer:
+  void ActiveNetworkStateChanged() override;
+  void NetworkListChanged() override;
 
  private:
   const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
-  const std::unique_ptr<TrayNetworkStateObserver> network_state_observer_;
 
   tray::VPNListView* view_ = nullptr;
 
diff --git a/ash/system/network/vpn_feature_pod_controller.cc b/ash/system/network/vpn_feature_pod_controller.cc
index 3a986174..b8783fe 100644
--- a/ash/system/network/vpn_feature_pod_controller.cc
+++ b/ash/system/network/vpn_feature_pod_controller.cc
@@ -8,9 +8,9 @@
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/system/model/system_tray_model.h"
 #include "ash/system/network/network_icon.h"
 #include "ash/system/network/vpn_list.h"
-#include "ash/system/network/vpn_util.h"
 #include "ash/system/tray/tray_constants.h"
 #include "ash/system/unified/feature_pod_button.h"
 #include "ash/system/unified/unified_system_tray_controller.h"
@@ -26,12 +26,50 @@
 
 namespace ash {
 
+namespace {
+
+bool IsVPNVisibleInSystemTray() {
+  LoginStatus login_status = Shell::Get()->session_controller()->login_status();
+  if (login_status == LoginStatus::NOT_LOGGED_IN)
+    return false;
+
+  // Show the VPN entry in the ash tray bubble if at least one third-party VPN
+  // provider is installed.
+  if (Shell::Get()->vpn_list()->HaveThirdPartyOrArcVPNProviders())
+    return true;
+
+  // Also show the VPN entry if at least one VPN network is configured.
+  NetworkStateHandler* const handler =
+      NetworkHandler::Get()->network_state_handler();
+  if (handler->FirstNetworkByType(NetworkTypePattern::VPN()))
+    return true;
+  return false;
+}
+
+bool IsVPNEnabled() {
+  NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
+  return handler->FirstNetworkByType(NetworkTypePattern::VPN());
+}
+
+bool IsVPNConnected() {
+  NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
+  const NetworkState* vpn =
+      handler->FirstNetworkByType(NetworkTypePattern::VPN());
+  return IsVPNEnabled() &&
+         (vpn->IsConnectedState() || vpn->IsConnectingState());
+}
+
+}  // namespace
+
 VPNFeaturePodController::VPNFeaturePodController(
     UnifiedSystemTrayController* tray_controller)
-    : network_state_observer_(std::make_unique<TrayNetworkStateObserver>(this)),
-      tray_controller_(tray_controller) {}
+    : tray_controller_(tray_controller) {
+  Shell::Get()->system_tray_model()->network_observer()->AddObserver(this);
+}
 
-VPNFeaturePodController::~VPNFeaturePodController() = default;
+VPNFeaturePodController::~VPNFeaturePodController() {
+  Shell::Get()->system_tray_model()->network_observer()->RemoveObserver(this);
+}
 
 FeaturePodButton* VPNFeaturePodController::CreateButton() {
   DCHECK(!button_);
@@ -54,7 +92,7 @@
   return SystemTrayItemUmaType::UMA_VPN;
 }
 
-void VPNFeaturePodController::NetworkStateChanged(bool notify_a11y) {
+void VPNFeaturePodController::ActiveNetworkStateChanged() {
   Update();
 }
 
@@ -63,14 +101,14 @@
   if (!chromeos::NetworkHandler::IsInitialized())
     return;
 
-  button_->SetVisible(vpn_util::IsVPNVisibleInSystemTray());
+  button_->SetVisible(IsVPNVisibleInSystemTray());
   if (!button_->GetVisible())
     return;
 
   button_->SetSubLabel(l10n_util::GetStringUTF16(
-      vpn_util::IsVPNConnected() ? IDS_ASH_STATUS_TRAY_VPN_CONNECTED_SHORT
-                                 : IDS_ASH_STATUS_TRAY_VPN_DISCONNECTED_SHORT));
-  button_->SetToggled(vpn_util::IsVPNEnabled() && vpn_util::IsVPNConnected());
+      IsVPNConnected() ? IDS_ASH_STATUS_TRAY_VPN_CONNECTED_SHORT
+                       : IDS_ASH_STATUS_TRAY_VPN_DISCONNECTED_SHORT));
+  button_->SetToggled(IsVPNEnabled() && IsVPNConnected());
 }
 
 }  // namespace ash
diff --git a/ash/system/network/vpn_feature_pod_controller.h b/ash/system/network/vpn_feature_pod_controller.h
index b2ad697..3ed002a 100644
--- a/ash/system/network/vpn_feature_pod_controller.h
+++ b/ash/system/network/vpn_feature_pod_controller.h
@@ -16,7 +16,7 @@
 
 // Controller of vpn feature pod button.
 class VPNFeaturePodController : public FeaturePodControllerBase,
-                                public TrayNetworkStateObserver::Delegate {
+                                public TrayNetworkStateObserver::Observer {
  public:
   VPNFeaturePodController(UnifiedSystemTrayController* tray_controller);
   ~VPNFeaturePodController() override;
@@ -26,14 +26,12 @@
   void OnIconPressed() override;
   SystemTrayItemUmaType GetUmaType() const override;
 
-  // TrayNetworkStateObserver::Delegate:
-  void NetworkStateChanged(bool notify_a11y) override;
+  // TrayNetworkStateObserver::Observer:
+  void ActiveNetworkStateChanged() override;
 
  private:
   void Update();
 
-  const std::unique_ptr<TrayNetworkStateObserver> network_state_observer_;
-
   // Unowned.
   UnifiedSystemTrayController* const tray_controller_;
   FeaturePodButton* button_ = nullptr;
diff --git a/ash/system/network/vpn_util.cc b/ash/system/network/vpn_util.cc
deleted file mode 100644
index 45bb5fb7..0000000
--- a/ash/system/network/vpn_util.cc
+++ /dev/null
@@ -1,53 +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 "ash/system/network/vpn_util.h"
-
-#include "ash/session/session_controller_impl.h"
-#include "ash/shell.h"
-#include "ash/system/network/vpn_list.h"
-#include "chromeos/network/network_state.h"
-#include "chromeos/network/network_state_handler.h"
-
-using chromeos::NetworkHandler;
-using chromeos::NetworkState;
-using chromeos::NetworkStateHandler;
-using chromeos::NetworkTypePattern;
-
-namespace ash {
-namespace vpn_util {
-
-bool IsVPNVisibleInSystemTray() {
-  LoginStatus login_status = Shell::Get()->session_controller()->login_status();
-  if (login_status == LoginStatus::NOT_LOGGED_IN)
-    return false;
-
-  // Show the VPN entry in the ash tray bubble if at least one third-party VPN
-  // provider is installed.
-  if (Shell::Get()->vpn_list()->HaveThirdPartyOrArcVPNProviders())
-    return true;
-
-  // Also show the VPN entry if at least one VPN network is configured.
-  NetworkStateHandler* const handler =
-      NetworkHandler::Get()->network_state_handler();
-  if (handler->FirstNetworkByType(NetworkTypePattern::VPN()))
-    return true;
-  return false;
-}
-
-bool IsVPNEnabled() {
-  NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
-  return handler->FirstNetworkByType(NetworkTypePattern::VPN());
-}
-
-bool IsVPNConnected() {
-  NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
-  const NetworkState* vpn =
-      handler->FirstNetworkByType(NetworkTypePattern::VPN());
-  return IsVPNEnabled() &&
-         (vpn->IsConnectedState() || vpn->IsConnectingState());
-}
-
-}  // namespace vpn_util
-}  // namespace ash
diff --git a/ash/system/network/vpn_util.h b/ash/system/network/vpn_util.h
deleted file mode 100644
index d2fdc03..0000000
--- a/ash/system/network/vpn_util.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ASH_SYSTEM_NETWORK_VPN_UTIL_H_
-#define ASH_SYSTEM_NETWORK_VPN_UTIL_H_
-
-namespace ash {
-namespace vpn_util {
-
-extern bool IsVPNVisibleInSystemTray();
-extern bool IsVPNEnabled();
-extern bool IsVPNConnected();
-
-}  // namespace vpn_util
-}  // namespace ash
-
-#endif  // ASH_SYSTEM_NETWORK_VPN_UTIL_H_
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc
index 5c5a5ab7..8b0187aa 100644
--- a/ash/system/unified/unified_system_tray_controller.cc
+++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -329,14 +329,15 @@
 
   // If you want to add a new feature pod item, add here.
 
-  std::string histogram_name = "ChromeOS.SystemTray.FeaturePodCountOnOpen";
   if (Shell::Get()
           ->tablet_mode_controller()
           ->IsTabletModeWindowManagerEnabled()) {
-    histogram_name = "ChromeOS.SystemTray.Tablet.FeaturePodCountOnOpen";
+    UMA_HISTOGRAM_COUNTS_100("ChromeOS.SystemTray.Tablet.FeaturePodCountOnOpen",
+                             unified_view_->GetVisibleFeaturePodCount());
+  } else {
+    UMA_HISTOGRAM_COUNTS_100("ChromeOS.SystemTray.FeaturePodCountOnOpen",
+                             unified_view_->GetVisibleFeaturePodCount());
   }
-  UMA_HISTOGRAM_COUNTS_100(histogram_name,
-                           unified_view_->GetVisibleFeaturePodCount());
 }
 
 void UnifiedSystemTrayController::AddFeaturePodItem(
diff --git a/base/i18n/build_utf8_validator_tables.cc b/base/i18n/build_utf8_validator_tables.cc
index e096dec..c5042a26 100644
--- a/base/i18n/build_utf8_validator_tables.cc
+++ b/base/i18n/build_utf8_validator_tables.cc
@@ -425,7 +425,8 @@
 int main(int argc, char* argv[]) {
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
   if (base::CommandLine::ForCurrentProcess()->HasSwitch("help")) {
     fwrite(kHelpText, 1, base::size(kHelpText), stdout);
diff --git a/base/logging.cc b/base/logging.cc
index 010b8e9..5561ca1 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -137,7 +137,9 @@
 
 int g_min_log_level = 0;
 
-LoggingDestination g_logging_destination = LOG_DEFAULT;
+// Specifies the process' logging sink(s), represented as a combination of
+// LoggingDestination values joined by bitwise OR.
+int g_logging_destination = LOG_DEFAULT;
 
 // For LOG_ERROR and above, always print to stderr.
 const int kAlwaysPrintErrorLevel = LOG_ERROR;
@@ -413,8 +415,9 @@
 
 bool BaseInitLoggingImpl(const LoggingSettings& settings) {
 #if defined(OS_NACL)
-  // Can log only to the system debug log.
-  CHECK_EQ(settings.logging_dest & ~LOG_TO_SYSTEM_DEBUG_LOG, 0);
+  // Can log only to the system debug log and stderr.
+  CHECK_EQ(settings.logging_dest & ~(LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR),
+           0u);
 #endif
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   // Don't bother initializing |g_vlog_info| unless we use one of the
@@ -838,17 +841,17 @@
                     str_newline.c_str());
     }
 #endif  // OS_FUCHSIA
-    ignore_result(fwrite(str_newline.data(), str_newline.size(), 1, stderr));
-    fflush(stderr);
-  } else if (severity_ >= kAlwaysPrintErrorLevel) {
-    // When we're only outputting to a log file, above a certain log level, we
-    // should still output to stderr so that we can better detect and diagnose
+  }
+
+  if ((g_logging_destination & LOG_TO_STDERR) != 0 ||
+      severity_ >= kAlwaysPrintErrorLevel) {
+    // Write logs with destination LOG_TO_STDERR to stderr. Also output to
+    // stderr for logs above a certain log level to better detect and diagnose
     // problems with unit tests, especially on the buildbots.
     ignore_result(fwrite(str_newline.data(), str_newline.size(), 1, stderr));
     fflush(stderr);
   }
 
-  // write to log file
   if ((g_logging_destination & LOG_TO_FILE) != 0) {
     // We can have multiple threads and/or processes, so try to prevent them
     // from clobbering each other's writes.
diff --git a/base/logging.h b/base/logging.h
index b700fdf..80d60c7 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 
 #include <cassert>
+#include <cstdint>
 #include <cstring>
 #include <sstream>
 #include <string>
@@ -169,22 +170,30 @@
 typedef char PathChar;
 #endif
 
-// Where to record logging output? A flat file and/or system debug log
-// via OutputDebugString.
-enum LoggingDestination {
+// A bitmask of potential logging destinations.
+using LoggingDestination = uint32_t;
+// Specifies where logs will be written. Multiple destinations can be specified
+// with bitwise OR.
+// Unless destination is LOG_NONE, all logs with severity ERROR and above will
+// be written to stderr in addition to the specified destination.
+enum : uint32_t {
   LOG_NONE                = 0,
   LOG_TO_FILE             = 1 << 0,
   LOG_TO_SYSTEM_DEBUG_LOG = 1 << 1,
+  LOG_TO_STDERR           = 1 << 2,
 
-  LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG,
+  LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
 
-  // On Windows, use a file next to the exe; on POSIX platforms, where
-  // it may not even be possible to locate the executable on disk, use
-  // stderr.
-#if defined(OS_WIN)
-  LOG_DEFAULT = LOG_TO_FILE,
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+// On Windows, use a file next to the exe.
+// On POSIX platforms, where it may not even be possible to locate the
+// executable on disk, use stderr.
+// On Fuchsia, use the Fuchsia logging service.
+#if defined(OS_FUCHSIA) || defined(OS_NACL)
   LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG,
+#elif defined(OS_WIN)
+  LOG_DEFAULT = LOG_TO_FILE,
+#elif defined(OS_POSIX)
+  LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
 #endif
 };
 
@@ -210,7 +219,9 @@
   //  delete_old:   APPEND_TO_OLD_LOG_FILE
   LoggingSettings();
 
-  LoggingDestination logging_dest;
+  // Equivalent to logging destination enum, but allows for multiple
+  // destinations.
+  uint32_t logging_dest;
 
   // The three settings below have an effect only when LOG_TO_FILE is
   // set in |logging_dest|.
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index 333fbf6..0e1ee4f1 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -218,6 +218,22 @@
   LOG(ERROR) << mock_log_source_error.Log();
 }
 
+// Check that logging to stderr is gated on LOG_TO_STDERR.
+TEST_F(LoggingTest, LogToStdErrFlag) {
+  LoggingSettings settings;
+  settings.logging_dest = LOG_NONE;
+  InitLogging(settings);
+  MockLogSource mock_log_source;
+  EXPECT_CALL(mock_log_source, Log()).Times(0);
+  LOG(INFO) << mock_log_source.Log();
+
+  settings.logging_dest = LOG_TO_STDERR;
+  MockLogSource mock_log_source_stderr;
+  InitLogging(settings);
+  EXPECT_CALL(mock_log_source_stderr, Log()).Times(1).WillOnce(Return("foo"));
+  LOG(INFO) << mock_log_source_stderr.Log();
+}
+
 // Official builds have CHECKs directly call BreakDebugger.
 #if !defined(OFFICIAL_BUILD)
 
diff --git a/base/test/test_support_android.cc b/base/test/test_support_android.cc
index 7c07905..5c2aaf0 100644
--- a/base/test/test_support_android.cc
+++ b/base/test/test_support_android.cc
@@ -192,7 +192,8 @@
 
 void InitAndroidTestLogging() {
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
   // To view log output with IDs and timestamps use "adb logcat -v threadtime".
   logging::SetLogItems(false,    // Process ID
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index f80d144a3..d328f05 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -140,6 +140,7 @@
 class DWriteFontLookupTableBuilder;
 class GpuProcessTransportFactory;
 class NestedMessagePumpAndroid;
+class RenderWidgetHostViewMac;
 class RTCVideoDecoder;
 class RTCVideoDecoderAdapter;
 class RTCVideoEncoder;
@@ -338,6 +339,7 @@
   friend class android_webview::ScopedAllowInitGLBindings;
   friend class content::BrowserProcessSubThread;
   friend class content::GpuProcessTransportFactory;
+  friend class content::RenderWidgetHostViewMac;  // http://crbug.com/121917
   friend class content::WebContentsViewMac;
   friend class cronet::CronetPrefsManager;
   friend class cronet::CronetURLRequestContext;
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
index d7a94a5..c351d6ba 100644
--- a/build/config/compiler/compiler.gni
+++ b/build/config/compiler/compiler.gni
@@ -57,9 +57,7 @@
 
   # Enables support for ThinLTO, which links 3x-10x faster than full LTO. See
   # also http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html
-  # TODO(thakis): Re-add `|| (is_android && is_official_build)` once lld and
-  # resource whitelist generation can coexist again, https://crbug.com/960881
-  use_thin_lto = is_cfi
+  use_thin_lto = is_cfi || (is_android && is_official_build)
 
   # Tell VS to create a PDB that references information in .obj files rather
   # than copying it all. This should improve linker performance. mspdbcmf.exe
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 0878b2fd..5f89773 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -269,6 +269,7 @@
     "tiles/tiling_set_raster_queue_all.h",
     "tiles/tiling_set_raster_queue_required.cc",
     "tiles/tiling_set_raster_queue_required.h",
+    "trees/animation_effect_timings.h",
     "trees/animation_options.h",
     "trees/clip_expander.cc",
     "trees/clip_expander.h",
diff --git a/cc/animation/DEPS b/cc/animation/DEPS
index 80d05f0..bc229ac9d 100644
--- a/cc/animation/DEPS
+++ b/cc/animation/DEPS
@@ -7,6 +7,7 @@
   "+cc/output/filter_operations.h",
   "+cc/test",
   "+cc/trees/animation_options.h",
+  "+cc/trees/animation_effect_timings.h",
   "+cc/trees/element_id.h",
   "+cc/trees/mutator_host.h",
   "+cc/trees/mutator_host_client.h",
diff --git a/cc/animation/animation_host_unittest.cc b/cc/animation/animation_host_unittest.cc
index 0ebe0c4a..9290174c 100644
--- a/cc/animation/animation_host_unittest.cc
+++ b/cc/animation/animation_host_unittest.cc
@@ -37,7 +37,7 @@
     client_impl_.RegisterElementId(element_id_, ElementListType::ACTIVE);
 
     worklet_animation_ = WorkletAnimation::Create(
-        worklet_animation_id_, "test_name", 1, nullptr, nullptr);
+        worklet_animation_id_, "test_name", 1, nullptr, nullptr, nullptr);
     int cc_id = worklet_animation_->id();
     worklet_animation_->AttachElement(element_id_);
     host_->AddAnimationTimeline(timeline_);
@@ -340,7 +340,7 @@
   // Create a worklet animation that is bound to the scroll timeline.
   scoped_refptr<WorkletAnimation> worklet_animation(
       new WorkletAnimation(animation_id2, worklet_animation_id, "test_name", 1,
-                           std::move(scroll_timeline), nullptr, true));
+                           std::move(scroll_timeline), nullptr, nullptr, true));
   worklet_animation->AttachElement(element_id);
   timeline_->AttachAnimation(worklet_animation);
 
diff --git a/cc/animation/worklet_animation.cc b/cc/animation/worklet_animation.cc
index 10dd6e0..41199e53 100644
--- a/cc/animation/worklet_animation.cc
+++ b/cc/animation/worklet_animation.cc
@@ -8,6 +8,7 @@
 #include "cc/animation/animation_id_provider.h"
 #include "cc/animation/keyframe_effect.h"
 #include "cc/animation/scroll_timeline.h"
+#include "cc/trees/animation_effect_timings.h"
 #include "cc/trees/animation_options.h"
 
 namespace cc {
@@ -19,6 +20,7 @@
     double playback_rate,
     std::unique_ptr<ScrollTimeline> scroll_timeline,
     std::unique_ptr<AnimationOptions> options,
+    std::unique_ptr<AnimationEffectTimings> effect_timings,
     bool is_controlling_instance)
     : WorkletAnimation(cc_animation_id,
                        worklet_animation_id,
@@ -26,6 +28,7 @@
                        playback_rate,
                        std::move(scroll_timeline),
                        std::move(options),
+                       std::move(effect_timings),
                        is_controlling_instance,
                        nullptr) {}
 
@@ -36,6 +39,7 @@
     double playback_rate,
     std::unique_ptr<ScrollTimeline> scroll_timeline,
     std::unique_ptr<AnimationOptions> options,
+    std::unique_ptr<AnimationEffectTimings> effect_timings,
     bool is_controlling_instance,
     std::unique_ptr<KeyframeEffect> effect)
     : SingleKeyframeEffectAnimation(cc_animation_id, std::move(effect)),
@@ -44,6 +48,7 @@
       scroll_timeline_(std::move(scroll_timeline)),
       playback_rate_(playback_rate),
       options_(std::move(options)),
+      effect_timings_(std::move(effect_timings)),
       local_time_(base::nullopt),
       start_time_(base::nullopt),
       last_current_time_(base::nullopt),
@@ -57,10 +62,12 @@
     const std::string& name,
     double playback_rate,
     std::unique_ptr<ScrollTimeline> scroll_timeline,
-    std::unique_ptr<AnimationOptions> options) {
+    std::unique_ptr<AnimationOptions> options,
+    std::unique_ptr<AnimationEffectTimings> effect_timings) {
   return WrapRefCounted(new WorkletAnimation(
       AnimationIdProvider::NextAnimationId(), worklet_animation_id, name,
-      playback_rate, std::move(scroll_timeline), std::move(options), false));
+      playback_rate, std::move(scroll_timeline), std::move(options),
+      std::move(effect_timings), false));
 }
 
 scoped_refptr<Animation> WorkletAnimation::CreateImplInstance() const {
@@ -68,9 +75,9 @@
   if (scroll_timeline_)
     impl_timeline = scroll_timeline_->CreateImplInstance();
 
-  return WrapRefCounted(
-      new WorkletAnimation(id(), worklet_animation_id_, name(), playback_rate_,
-                           std::move(impl_timeline), CloneOptions(), true));
+  return WrapRefCounted(new WorkletAnimation(
+      id(), worklet_animation_id_, name(), playback_rate_,
+      std::move(impl_timeline), CloneOptions(), CloneEffectTimings(), true));
 }
 
 void WorkletAnimation::PushPropertiesTo(Animation* animation_impl) {
@@ -142,10 +149,13 @@
       // https://crbug.com/767043.
       input_state->Add({worklet_animation_id(), name(),
                         current_time->InMillisecondsF(), CloneOptions(),
-                        1 /* num_effects */});
+                        CloneEffectTimings()});
       state_ = State::RUNNING;
       break;
     case State::RUNNING:
+      // TODO(jortaylo): EffectTimings need to be sent to the worklet during
+      // updates, otherwise the timing info will become outdated.
+      // https://crbug.com/915344.
       input_state->Update(
           {worklet_animation_id(), current_time->InMillisecondsF()});
       break;
diff --git a/cc/animation/worklet_animation.h b/cc/animation/worklet_animation.h
index a8da26c..83c21cc 100644
--- a/cc/animation/worklet_animation.h
+++ b/cc/animation/worklet_animation.h
@@ -20,6 +20,7 @@
 }  // namespace
 
 class AnimationOptions;
+class AnimationEffectTimings;
 class ScrollTimeline;
 
 // A WorkletAnimation is an animation that allows its animation
@@ -42,13 +43,15 @@
                    double playback_rate,
                    std::unique_ptr<ScrollTimeline> scroll_timeline,
                    std::unique_ptr<AnimationOptions> options,
+                   std::unique_ptr<AnimationEffectTimings> effect_timings,
                    bool is_controlling_instance);
   static scoped_refptr<WorkletAnimation> Create(
       WorkletAnimationId worklet_animation_id,
       const std::string& name,
       double playback_rate,
       std::unique_ptr<ScrollTimeline> scroll_timeline,
-      std::unique_ptr<AnimationOptions> options);
+      std::unique_ptr<AnimationOptions> options,
+      std::unique_ptr<AnimationEffectTimings> effect_timings);
   scoped_refptr<Animation> CreateImplInstance() const override;
 
   WorkletAnimationId worklet_animation_id() { return worklet_animation_id_; }
@@ -96,6 +99,7 @@
                    double playback_rate,
                    std::unique_ptr<ScrollTimeline> scroll_timeline,
                    std::unique_ptr<AnimationOptions> options,
+                   std::unique_ptr<AnimationEffectTimings> effect_timings,
                    bool is_controlling_instance,
                    std::unique_ptr<KeyframeEffect> effect);
 
@@ -119,6 +123,10 @@
     return options_ ? options_->Clone() : nullptr;
   }
 
+  std::unique_ptr<AnimationEffectTimings> CloneEffectTimings() const {
+    return effect_timings_ ? effect_timings_->Clone() : nullptr;
+  }
+
   // Updates the playback rate of the Impl thread instance.
   // Called by the UI thread WorletAnimation instance during commit.
   void SetPlaybackRate(double playback_rate);
@@ -147,6 +155,7 @@
   double playback_rate_;
 
   std::unique_ptr<AnimationOptions> options_;
+  std::unique_ptr<AnimationEffectTimings> effect_timings_;
 
   // Local time is used as an input to the keyframe effect of this animation.
   // The value comes from the user script that runs inside the animation worklet
diff --git a/cc/animation/worklet_animation_unittest.cc b/cc/animation/worklet_animation_unittest.cc
index 0b8a06b..37cf907 100644
--- a/cc/animation/worklet_animation_unittest.cc
+++ b/cc/animation/worklet_animation_unittest.cc
@@ -37,7 +37,7 @@
 
     worklet_animation_ = WrapRefCounted(
         new WorkletAnimation(1, worklet_animation_id_, "test_name", 1, nullptr,
-                             nullptr, true /* controlling instance*/));
+                             nullptr, nullptr, true /* controlling instance*/));
     worklet_animation_->AttachElement(element_id_);
     host_->AddAnimationTimeline(timeline_);
     timeline_->AttachAnimation(worklet_animation_);
@@ -68,7 +68,7 @@
 
   scoped_refptr<WorkletAnimation> worklet_animation =
       WrapRefCounted(new WorkletAnimation(
-          1, worklet_animation_id_, "test_name", 1, nullptr, nullptr,
+          1, worklet_animation_id_, "test_name", 1, nullptr, nullptr, nullptr,
           false /* not impl instance*/, std::move(effect)));
 
   EXPECT_CALL(*mock_effect, Tick(_)).Times(0);
@@ -118,7 +118,7 @@
           (base::TimeTicks() + base::TimeDelta::FromMilliseconds(1234))));
   scoped_refptr<WorkletAnimation> worklet_animation =
       WorkletAnimation::Create(worklet_animation_id_, "test_name", 1,
-                               std::move(scroll_timeline), nullptr);
+                               std::move(scroll_timeline), nullptr, nullptr);
 
   ScrollTree scroll_tree;
   std::unique_ptr<MutatorInputState> state =
@@ -133,7 +133,7 @@
 TEST_F(WorkletAnimationTest,
        CurrentTimeFromRegularTimelineIsOffsetByStartTime) {
   scoped_refptr<WorkletAnimation> worklet_animation = WorkletAnimation::Create(
-      worklet_animation_id_, "test_name", 1, nullptr, nullptr);
+      worklet_animation_id_, "test_name", 1, nullptr, nullptr, nullptr);
 
   base::TimeTicks first_ticks =
       base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111);
@@ -171,7 +171,7 @@
   const double playback_rate_half = 0.5;
   scoped_refptr<WorkletAnimation> worklet_animation =
       WorkletAnimation::Create(worklet_animation_id_, "test_name",
-                               playback_rate_double, nullptr, nullptr);
+                               playback_rate_double, nullptr, nullptr, nullptr);
 
   base::TimeTicks first_ticks =
       base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111);
@@ -223,7 +223,7 @@
 
   scoped_refptr<WorkletAnimation> worklet_animation = WorkletAnimation::Create(
       worklet_animation_id_, "test_name", playback_rate_double,
-      std::move(scroll_timeline), nullptr);
+      std::move(scroll_timeline), nullptr, nullptr);
   const MockScrollTimeline* mock_timeline =
       static_cast<const MockScrollTimeline*>(
           worklet_animation->scroll_timeline());
@@ -273,7 +273,7 @@
 
   scoped_refptr<WorkletAnimation> worklet_animation = WorkletAnimation::Create(
       worklet_animation_id_, "test_name", /*playback_rate*/ 1,
-      std::move(scroll_timeline), nullptr);
+      std::move(scroll_timeline), nullptr, nullptr);
 
   const MockScrollTimeline* mock_timeline =
       static_cast<const MockScrollTimeline*>(
diff --git a/cc/trees/animation_effect_timings.h b/cc/trees/animation_effect_timings.h
new file mode 100644
index 0000000..c66ab65
--- /dev/null
+++ b/cc/trees/animation_effect_timings.h
@@ -0,0 +1,25 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_TREES_ANIMATION_EFFECT_TIMINGS_H_
+#define CC_TREES_ANIMATION_EFFECT_TIMINGS_H_
+
+#include <memory>
+
+#include "cc/cc_export.h"
+
+namespace cc {
+
+// This class acts as opaque handle in cc while the actual implementation lives
+// in blink. It is meant to facilitate plumbing the effect timings from blink
+// main thread to worklet thread via cc animations machinery.
+class CC_EXPORT AnimationEffectTimings {
+ public:
+  virtual ~AnimationEffectTimings() = default;
+  virtual std::unique_ptr<AnimationEffectTimings> Clone() const = 0;
+};
+
+}  // namespace cc
+
+#endif  // CC_TREES_ANIMATION_EFFECT_TIMINGS_H_
diff --git a/cc/trees/layer_tree_mutator.cc b/cc/trees/layer_tree_mutator.cc
index 15d2b6a..9e285596 100644
--- a/cc/trees/layer_tree_mutator.cc
+++ b/cc/trees/layer_tree_mutator.cc
@@ -13,12 +13,12 @@
     std::string name,
     double current_time,
     std::unique_ptr<AnimationOptions> options,
-    int num_effects)
+    std::unique_ptr<AnimationEffectTimings> effect_timings)
     : worklet_animation_id(worklet_animation_id),
       name(name),
       current_time(current_time),
       options(std::move(options)),
-      num_effects(num_effects) {}
+      effect_timings(std::move(effect_timings)) {}
 AnimationWorkletInput::AddAndUpdateState::AddAndUpdateState(
     AddAndUpdateState&&) = default;
 AnimationWorkletInput::AddAndUpdateState::~AddAndUpdateState() = default;
diff --git a/cc/trees/layer_tree_mutator.h b/cc/trees/layer_tree_mutator.h
index fd5956c2..ff1c325 100644
--- a/cc/trees/layer_tree_mutator.h
+++ b/cc/trees/layer_tree_mutator.h
@@ -9,6 +9,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "cc/cc_export.h"
+#include "cc/trees/animation_effect_timings.h"
 #include "cc/trees/animation_options.h"
 
 #include <memory>
@@ -64,13 +65,13 @@
     // Worklet animation's current time, from its associated timeline.
     double current_time;
     std::unique_ptr<AnimationOptions> options;
-    int num_effects;
+    std::unique_ptr<AnimationEffectTimings> effect_timings;
 
     AddAndUpdateState(WorkletAnimationId worklet_animation_id,
                       std::string name,
                       double current_time,
                       std::unique_ptr<AnimationOptions> options,
-                      int num_effects);
+                      std::unique_ptr<AnimationEffectTimings> effect_timings);
 
     AddAndUpdateState(AddAndUpdateState&&);
     ~AddAndUpdateState();
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index b841259..6ba7287 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -82,6 +82,7 @@
   "junit/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegateTest.java",
   "junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java",
   "junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java",
+  "junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java",
   "junit/src/org/chromium/chrome/browser/image_fetcher/CachedImageFetcherTest.java",
   "junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherFactoryTest.java",
   "junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherTest.java",
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_am.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_am.xtb
index 13dd3b3b..ac42fbb0 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_am.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_am.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="am">
 <translation id="1135993792949700405">Chrome እርስዎ የመረጡትን የግል ውሂብ ወደ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ይልካል</translation>
-<translation id="1472675084647422956">ተጨማሪ አሳይ</translation>
 <translation id="1625889395409731085">ውጫዊ አገናኝ ይከፈት?</translation>
 <translation id="1699570257714336246">መረጃ ይጎድላል</translation>
 <translation id="3604604794717279723">ተቀብያለሁ</translation>
 <translation id="4437727785356380473">Google ረዳት በChrome ውስጥ ተዘግቷል።</translation>
 <translation id="4850886885716139402">አሳይ</translation>
 <translation id="5014174725590676422">በChrome ውስጥ Google ረዳት የመጀመሪያ ማሄድ ማያ ገጽ ይታያል</translation>
-<translation id="5138227688689900538">ያነሰ አሳይ</translation>
 <translation id="5188078772080029703">Chrome የጣቢያውን ዩአርኤልና ይዘት እና እንዲሁም የእርስዎን ኢሜይል እና በChrome ውስጥ የተቀመጠው የክሬዲት ካርድ አይነት ወደ Google ይልካል። ይህን በChrome ቅንብሮች ውስጥ ማጥፋት ይችላሉ። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google ረዳት በChrome ውስጥ ሙሉ ቁመት ላይ ተከፍቷል።</translation>
 <translation id="6555233628095991027">Google ረዳት በChrome ውስጥ ግማሽ ቁመት ላይ ተከፍቷል።</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ar.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ar.xtb
index 376c989..cbaed7b 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ar.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ar.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
 <translation id="1135993792949700405">‏سيُرسل Chrome البيانات الشخصية التي اختَرتها إلى <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">عرض المزيد</translation>
 <translation id="1625889395409731085">هل تريد فتح الرابط الخارجي؟</translation>
 <translation id="1699570257714336246">معلومات غير متوفرة</translation>
 <translation id="3604604794717279723">أوافق</translation>
 <translation id="4437727785356380473">‏تم غلق "مساعد Google" في Chrome.</translation>
 <translation id="4850886885716139402">عرض</translation>
 <translation id="5014174725590676422">‏يتم عرض شاشة التشغيل الأولى "لمساعد Google" على Chrome</translation>
-<translation id="5138227688689900538">عرض أقل</translation>
 <translation id="5188078772080029703">‏سيرسل Chrome عنوان URL للموقع الإلكتروني ومحتواه، بالإضافة إلى عنوان بريدك الإلكتروني ونوع بطاقة الائتمان التي تم حفظها في Chrome إلى Google. يمكنك إيقاف هذا الإعداد من خلال "إعدادات Chrome". <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">‏يتم فتح "مساعد Google" في Chrome بارتفاع كامل.</translation>
 <translation id="6555233628095991027">‏تم فتح "مساعد Google" في Chrome بنصف ارتفاع.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bg.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bg.xtb
index 3be8077b..9ec427ea 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bg.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bg.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
 <translation id="1135993792949700405">Chrome ще изпрати избраните от вас лични данни до <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Показване на още</translation>
 <translation id="1625889395409731085">Да се отвори ли външната връзка?</translation>
 <translation id="1699570257714336246">Липсва информация</translation>
 <translation id="3604604794717279723">Приемам</translation>
 <translation id="4437727785356380473">Google Асистент в Chrome бе затворен.</translation>
 <translation id="4850886885716139402">Изглед</translation>
 <translation id="5014174725590676422">Показан е екранът при първо стартиране на Google Асистент в Chrome</translation>
-<translation id="5138227688689900538">Показване на по-малко</translation>
 <translation id="5188078772080029703">Chrome ще ни изпрати URL адреса и съдържанието на сайта, както и имейла ви и типа на кредитната карта, запазени в браузъра. Можете да изключите тази функция от настройките на Chrome. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Асистент в Chrome е отворен на цялата височина.</translation>
 <translation id="6555233628095991027">Google Асистент в Chrome е отворен на половината височина.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bn.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bn.xtb
index 7c43fed..8fbe2729 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bn.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_bn.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="bn">
 <translation id="1135993792949700405">আপনার বেছে নেওয়া <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />-এ Chrome ব্যক্তিগত ডেটা পাঠাবে</translation>
-<translation id="1472675084647422956">আরও দেখান</translation>
 <translation id="1625889395409731085">এক্সটারনাল লিঙ্ক খুলতে চান?</translation>
 <translation id="1699570257714336246">সম্পূর্ণ তথ্য দেওয়া হয়নি</translation>
 <translation id="3604604794717279723">আমি সম্মতি দিচ্ছি</translation>
 <translation id="4437727785356380473">Chrome-এ Google অ্যাসিস্ট্যান্ট বন্ধ হয়ে গেছে।</translation>
 <translation id="4850886885716139402">দেখুন</translation>
 <translation id="5014174725590676422">Chrome প্রথমবার চালানোর সময়ে Google অ্যাসিস্ট্যান্ট কীভাবে কাজ করবে তা দেখানো হয়েছে</translation>
-<translation id="5138227688689900538">কম দেখুন</translation>
 <translation id="5188078772080029703">Chrome ব্রাউজারে সেভ করা সাইটের ইউআরএল এবং কন্টেন্ট সহ আপনার ইমেল আইডি ও ক্রেডিট কার্ড সংক্রান্ত তথ্য Chrome-এর মাধ্যমে Google-কে পাঠানো হবে। Chrome সেটিংসে গিয়ে আপনি এটি বন্ধ করতে পারবেন। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome-এ Google অ্যাসিস্ট্যান্ট পুরো স্ক্রিন জুড়ে খোলা আছে।</translation>
 <translation id="6555233628095991027">Chrome-এ Google অ্যাসিস্ট্যান্ট অর্ধেক স্ক্রিন জুড়ে খোলা আছে।</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
index 13f7c67..c0e3652 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
@@ -2,21 +2,19 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
 <translation id="1135993792949700405">Chrome enviarà a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> les dades personals que hagis seleccionat</translation>
-<translation id="1472675084647422956">Mostra'n més</translation>
 <translation id="1625889395409731085">Vols obrir l'enllaç extern?</translation>
 <translation id="1699570257714336246">Falta informació</translation>
 <translation id="3604604794717279723">Accepto</translation>
 <translation id="4437727785356380473">L'Assistent de Google a Chrome s'ha tancat.</translation>
 <translation id="4850886885716139402">Mostra</translation>
 <translation id="5014174725590676422">Es mostra la pantalla de la primera execució de l'Assistent de Google a Chrome</translation>
-<translation id="5138227688689900538">Mostra'n menys</translation>
 <translation id="5188078772080029703">Chrome enviarà a Google l'URL i el contingut del lloc web, així com l'adreça electrònica i el tipus de targeta de crèdit que tens desats al navegador. Pots desactivar aquesta funció a la configuració de Chrome. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">L'Assistent de Google a Chrome ocupa tota la pantalla.</translation>
 <translation id="6555233628095991027">L'Assistent de Google a Chrome ocupa la meitat inferior de la pantalla.</translation>
 <translation id="6973932557599545801">Em sap greu, però no et puc ajudar. Continua pel teu compte.</translation>
 <translation id="7658239707568436148">Cancel·la</translation>
 <translation id="7871791972254842204">Llegeix i accepta els termes i condicions del domini <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> més tard</translation>
-<translation id="8253702004019660079">Assistent de Google a Chrome</translation>
+<translation id="8253702004019660079">Assistent de Google a Chrome.</translation>
 <translation id="8723954843026426558">Accepto els termes i condicions, la política de privadesa i el dret de desistiment establerts pel domini <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
 <translation id="9138504265731110181">L'Assistent de Google t'ajuda a pagar al web, cosa que et permet estalviar temps</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_cs.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_cs.xtb
index aefbe76..2f092ce7 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_cs.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_cs.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="cs">
 <translation id="1135993792949700405">Osobní údaje, které jste vybrali, Chrome odešle webu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Zobrazit více</translation>
 <translation id="1625889395409731085">Otevřít externí odkaz?</translation>
 <translation id="1699570257714336246">Některé informace chybí</translation>
 <translation id="3604604794717279723">Přijímám</translation>
 <translation id="4437727785356380473">Asistent Google v Chromu byl zavřen.</translation>
 <translation id="4850886885716139402">Zobrazit</translation>
 <translation id="5014174725590676422">Je zobrazena obrazovka prvního spuštění Asistenta Google v Chromu</translation>
-<translation id="5138227688689900538">Zobrazit méně</translation>
 <translation id="5188078772080029703">Adresu URL a obsah webu a váš e-mail a typ platební karty uložený v Chromu odešle Chrome do Googlu. Tuto možnost můžete vypnout v nastavení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Asistent Google v Chromu byl otevřen na celou výšku.</translation>
 <translation id="6555233628095991027">Asistent Google v Chromu je otevřený na poloviční výšku.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_da.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_da.xtb
index 6d835be..7dd7976 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_da.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_da.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
 <translation id="1135993792949700405">Chrome sender de personoplysninger, du har valgt, til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Vis mere</translation>
 <translation id="1625889395409731085">Vil du åbne et eksternt link?</translation>
 <translation id="1699570257714336246">Der mangler oplysninger</translation>
 <translation id="3604604794717279723">Jeg accepterer</translation>
 <translation id="4437727785356380473">Google Assistent i Chrome er lukket.</translation>
 <translation id="4850886885716139402">Vis</translation>
 <translation id="5014174725590676422">Skærmen for førstegangsbrug af Google Assistent i Chrome vises</translation>
-<translation id="5138227688689900538">Vis færre</translation>
 <translation id="5188078772080029703">Chrome sender websitets webadresse og indhold samt den mail og type betalingskort, der er gemt i Chrome, til Google. Du kan slå dette fra i indstillingerne for Chrome. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistent i Chrome er åbnet i fuld højde.</translation>
 <translation id="6555233628095991027">Google Assistent i Chrome er åbnet i halv højde.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_de.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_de.xtb
index e2709e1..bac884c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_de.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_de.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="de">
 <translation id="1135993792949700405">Chrome sendet die von Ihnen ausgewählten personenbezogenen Daten an <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Mehr anzeigen</translation>
 <translation id="1625889395409731085">Externen Link öffnen?</translation>
 <translation id="1699570257714336246">Fehlende Informationen</translation>
 <translation id="3604604794717279723">Ich stimme zu</translation>
 <translation id="4437727785356380473">Google Assistant für Chrome geschlossen.</translation>
 <translation id="4850886885716139402">Anzeigen</translation>
 <translation id="5014174725590676422">Bildschirm für die erste Ausführung von Google Assistant für Chrome wird angezeigt</translation>
-<translation id="5138227688689900538">Weniger anzeigen</translation>
 <translation id="5188078772080029703">Chrome sendet die URL und die Inhalte der Website an Google, ebenso wie Ihre E-Mail-Adresse und den Typ Ihrer Kreditkarte, die in Chrome gespeichert sind. Sie können dies in den Einstellungen von Chrome deaktivieren. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistant für Chrome in voller Höhe geöffnet.</translation>
 <translation id="6555233628095991027">Google Assistant für Chrome mit halber Höhe geöffnet.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_el.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_el.xtb
index 77fcda7b..9877b67c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_el.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_el.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="el">
 <translation id="1135993792949700405">Το Chrome θα στείλει τα προσωπικά δεδομένα που επιλέξατε στον τομέα <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Εμφάνιση περισσότερων</translation>
 <translation id="1625889395409731085">Άνοιγμα εξωτερικού συνδέσμου;</translation>
 <translation id="1699570257714336246">Λείπουν πληροφορίες</translation>
 <translation id="3604604794717279723">Συμφωνώ</translation>
 <translation id="4437727785356380473">Ο Βοηθός Google στο Chrome έκλεισε.</translation>
 <translation id="4850886885716139402">Προβολή</translation>
 <translation id="5014174725590676422">Εμφανίζεται ο Βοηθός Google στην η οθόνη πρώτης εκτέλεσης του Chrome</translation>
-<translation id="5138227688689900538">Εμφάνιση λιγότερων</translation>
 <translation id="5188078772080029703">Το Chrome θα στείλει στην Google το URL και το περιεχόμενο του ιστοτόπου, καθώς και τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας και τον τύπο πιστωτικής κάρτας που είναι αποθηκευμένο στο Chrome. Μπορείτε να απενεργοποιήσετε αυτήν τη λειτουργία στις ρυθμίσεις του Chrome. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Ο Βοηθός Google στο Chrome άνοιξε στο πλήρες ύψος.</translation>
 <translation id="6555233628095991027">Ο Βοηθός Google στο Chrome άνοιξε στο μισό ύψος.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_en-GB.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_en-GB.xtb
index a21cd9d..3311dcf 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_en-GB.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_en-GB.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="en-GB">
 <translation id="1135993792949700405">Chrome will send personal data that you selected to <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Show more</translation>
 <translation id="1625889395409731085">Open external link?</translation>
 <translation id="1699570257714336246">Information missing</translation>
 <translation id="3604604794717279723">I accept</translation>
 <translation id="4437727785356380473">Google Assistant in Chrome closed.</translation>
 <translation id="4850886885716139402">View</translation>
 <translation id="5014174725590676422">Google Assistant in Chrome first run screen is shown</translation>
-<translation id="5138227688689900538">Show less</translation>
 <translation id="5188078772080029703">Chrome will send the site’s URL and content as well as your email and credit card type saved in Chrome to Google. You can turn this off in Chrome settings. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistant in Chrome opened at full height.</translation>
 <translation id="6555233628095991027">Google Assistant in Chrome opened at half height.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es-419.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es-419.xtb
index f04fbcc..8b946bb 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es-419.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es-419.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
 <translation id="1135993792949700405">Chrome enviará los datos personales que hayas seleccionados a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Mostrar más</translation>
 <translation id="1625889395409731085">¿Quieres abrir el vínculo externo?</translation>
 <translation id="1699570257714336246">Falta información</translation>
 <translation id="3604604794717279723">Acepto</translation>
 <translation id="4437727785356380473">Se cerró el Asistente de Google en Chrome.</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="5014174725590676422">Se muestra la pantalla de primera ejecución del Asistente de Google en Chrome</translation>
-<translation id="5138227688689900538">Mostrar menos</translation>
 <translation id="5188078772080029703">Chrome enviará a Google la URL y el contenido del sitio, además de tu correo electrónico y el tipo de tarjeta de crédito guardados en Chrome. Puedes desactivar esta opción en la configuración de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">El Asistente de Google en Chrome se abrió por completo.</translation>
 <translation id="6555233628095991027">El Asistente de Google en Chrome se abrió a media altura.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es.xtb
index d2d3ad5..b6e1371 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_es.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="es">
 <translation id="1135993792949700405">Chrome enviará la información personal que hayas seleccionado a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Mostrar más</translation>
 <translation id="1625889395409731085">¿Quieres abrir el enlace externo?</translation>
 <translation id="1699570257714336246">Falta información</translation>
 <translation id="3604604794717279723">Acepto</translation>
 <translation id="4437727785356380473">Se ha cerrado el Asistente de Google en Chrome.</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="5014174725590676422">Se muestra la primera pantalla de ejecución del Asistente de Google en Chrome</translation>
-<translation id="5138227688689900538">Mostrar menos</translation>
 <translation id="5188078772080029703">Chrome enviará a Google la URL y el contenido del sitio web, así como tu correo electrónico y el tipo de tarjeta de crédito guardada en Chrome. Puedes desactivar esta opción en los ajustes de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Se ha abierto el Asistente de Google en Chrome para que ocupe toda la pantalla.</translation>
 <translation id="6555233628095991027">Se ha abierto el Asistente de Google en Chrome a media altura.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_et.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_et.xtb
index 45d6921..64a1379 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_et.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_et.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
 <translation id="1135993792949700405">Chrome saadab teie valitud isiklikud andmed teenusele <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Kuva rohkem</translation>
 <translation id="1625889395409731085">Kas avada väline link?</translation>
 <translation id="1699570257714336246">Teave on puudu</translation>
 <translation id="3604604794717279723">Nõustun</translation>
 <translation id="4437727785356380473">Chrome'ile mõeldud Google'i assistent on suletud.</translation>
 <translation id="4850886885716139402">Kuva</translation>
 <translation id="5014174725590676422">Näidatud on Google'i assistendi esmakordse käivitamise kuva Chrome'is</translation>
-<translation id="5138227688689900538">Kuva vähem</translation>
 <translation id="5188078772080029703">Chrome saadab Google'ile saidi URL-i ja sisu ning teie e-posti aadressi ja Chrome'i salvestatud krediitkaardi tüübi. Selle saab Chrome'i seadetes välja lülitada. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome'i jaoks mõeldud Google'i assistent avanes täiskõrgusega.</translation>
 <translation id="6555233628095991027">Chrome'i jaoks mõeldud Google'i assistent avanes poole kõrgusega.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fa.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fa.xtb
index a0a8f3b..7daeca7 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fa.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fa.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
 <translation id="1135993792949700405">‏Chrome داده‌های شخصی را که انتخاب کرده‌اید به <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ارسال می‌کند</translation>
-<translation id="1472675084647422956">بیشتر ببینید</translation>
 <translation id="1625889395409731085">پیوند خارجی باز شود؟</translation>
 <translation id="1699570257714336246">اطلاعات از دست می‌رود</translation>
 <translation id="3604604794717279723">موافقم</translation>
 <translation id="4437727785356380473">‏«دستیار Google» در Chrome بسته شد.</translation>
 <translation id="4850886885716139402">نما</translation>
 <translation id="5014174725590676422">‏صفحه اولین اجرای «دستیار Google» در Chrome نشان داده می‌شود</translation>
-<translation id="5138227688689900538">نمایش موارد کمتر</translation>
 <translation id="5188078772080029703">‏Chrome نشانی وب و محتوای سایت را به‌همراه ایمیل و نوع کارت ذخیره‌شده شما در Chrome، به Google ارسال می‌کند. می‌توانید این گزینه را در تنظیمات Chrome خاموش کنید. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">‏«دستیار Google» به‌صورت کامل در Chrome باز شد.</translation>
 <translation id="6555233628095991027">‏«دستیار Google» به‌صورت نیمه در Chrome باز شد.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fi.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fi.xtb
index 09a5a253..0a58821 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fi.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fi.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fi">
 <translation id="1135993792949700405">Chrome lähettää valitsemaasi henkilökohtaista dataa: <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Näytä enemmän</translation>
 <translation id="1625889395409731085">Avataanko ulkoinen linkki?</translation>
 <translation id="1699570257714336246">Tietoja puuttuu</translation>
 <translation id="3604604794717279723">Hyväksyn</translation>
 <translation id="4437727785356380473">Chromen Google Assistant suljettu</translation>
 <translation id="4850886885716139402">Näytä</translation>
 <translation id="5014174725590676422">Chromen Google Assistantin ensimmäisen käyttökerran näyttö näkyy</translation>
-<translation id="5138227688689900538">Näytä vähemmän</translation>
 <translation id="5188078772080029703">Chrome lähettää Googlelle sivuston URL-osoitteen ja sisällön sekä Chromeen tallennetun sähköpostiosoitteen ja luottokorttityypin. Voit poistaa tämän käytöstä Chromen asetuksissa. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chromen Google Assistant avattu koko näytön korkeudelle.</translation>
 <translation id="6555233628095991027">Chromen Google Assistant avattu näytön puolivälin korkeudelle</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fil.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fil.xtb
index 67f0bc7..b754858 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fil.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fil.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fil">
 <translation id="1135993792949700405">Ipapadala ng Chrome sa <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ang napili mong personal na data</translation>
-<translation id="1472675084647422956">Magpakita ng higit pa</translation>
 <translation id="1625889395409731085">Buksan ang external na link?</translation>
 <translation id="1699570257714336246">May nawawalang impormasyon</translation>
 <translation id="3604604794717279723">Tinatanggap ko</translation>
 <translation id="4437727785356380473">Nakasara ang Google Assistant sa Chrome.</translation>
 <translation id="4850886885716139402">View</translation>
 <translation id="5014174725590676422">Ipinapakita ang screen ng unang pagtakbo ng Google Assistant sa Chrome</translation>
-<translation id="5138227688689900538">Magpakita ng mas kaunti</translation>
 <translation id="5188078772080029703">Ipapadala ng Chrome sa Google ang URL at content ng site pati na rin ang iyong email at uri ng credit card na naka-save sa Chrome. Puwede mo itong i-off sa mga setting ng Chrome. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Nakabukas ang Google Assistant sa Chrome nang buo ang taas.</translation>
 <translation id="6555233628095991027">Nakabukas ang Google Assistant sa Chrome nang kalahati ang taas.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fr.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fr.xtb
index e1ab8f7..6cca942 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fr.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_fr.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fr">
 <translation id="1135993792949700405">Chrome envoie les données à caractère personnel sélectionnées par vos soins à <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Plus</translation>
 <translation id="1625889395409731085">Ouvrir le lien externe ?</translation>
 <translation id="1699570257714336246">Informations manquantes</translation>
 <translation id="3604604794717279723">J'accepte</translation>
 <translation id="4437727785356380473">L'Assistant Google dans Chrome est fermé.</translation>
 <translation id="4850886885716139402">Afficher</translation>
 <translation id="5014174725590676422">L'écran de première utilisation de l'Assistant Google dans Chrome est affiché</translation>
-<translation id="5138227688689900538">Afficher moins</translation>
 <translation id="5188078772080029703">L'URL et le contenu du site sont envoyés à Google via Chrome, tout comme votre adresse e-mail et le type de votre carte de crédit enregistrés dans Chrome. Vous pouvez désactiver cette option dans les paramètres de Chrome. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">L'Assistant Google dans Chrome est ouvert à hauteur maximale.</translation>
 <translation id="6555233628095991027">L'Assistant Google dans Chrome est ouvert à mi-hauteur.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_gu.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_gu.xtb
index f1b29a5..1ea6271 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_gu.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_gu.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="gu">
 <translation id="1135993792949700405">તમે પસંદ કરેલો વ્યક્તિગત ડેટા Chrome <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />ને મોકલશે</translation>
-<translation id="1472675084647422956">વધુ બતાવો</translation>
 <translation id="1625889395409731085">બાહ્ય લિંક ખોલીએ?</translation>
 <translation id="1699570257714336246">માહિતી ખૂટે છે</translation>
 <translation id="3604604794717279723">હું સ્વીકારું છું</translation>
 <translation id="4437727785356380473">Chromeમાં Google આસિસ્ટંટ બંધ કર્યું.</translation>
 <translation id="4850886885716139402">જુઓ</translation>
 <translation id="5014174725590676422">Chromeમાં Google આસિસ્ટંટની પહેલી સ્ક્રીન બતાવવામાં આવી છે</translation>
-<translation id="5138227688689900538">ઓછું બતાવો</translation>
 <translation id="5188078772080029703">Chrome સાઇટના URL અને કન્ટેન્ટ તેમજ તમારા ઇમેઇલ અને Chromeમાં સાચવેલા ક્રેડિટ કાર્ડના પ્રકારને Googleને મોકલશે. તમે આને Chrome સેટિંગમાં બંધ કરી શકો છો. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chromeમાં Google આસિસ્ટંટ સંપૂર્ણ ઊંચાઈએ ખુલ્યું.</translation>
 <translation id="6555233628095991027">Chromeમાં Google આસિસ્ટંટ અડધી ઊંચાઈએ ખુલ્યું.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hi.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hi.xtb
index c0b07c3..7bc02358 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hi.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hi.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hi">
 <translation id="1135993792949700405">Chrome वह निजी डेटा भेजेगा जिसे आपने <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> के लिए चुना है</translation>
-<translation id="1472675084647422956">और दिखाएं</translation>
 <translation id="1625889395409731085">बाहरी लिंक खोलना चाहते हैं?</translation>
 <translation id="1699570257714336246">जानकारी मौजूद नहीं है</translation>
 <translation id="3604604794717279723">मैं सहमत हूं</translation>
 <translation id="4437727785356380473">Chrome में Google Assistant की सुविधा बंद हो गई है.</translation>
 <translation id="4850886885716139402">देखें</translation>
 <translation id="5014174725590676422">'Chrome में Google Assistant' की सबसे पहली स्क्रीन दिखाई गई है</translation>
-<translation id="5138227688689900538">कम दिखाएं</translation>
 <translation id="5188078772080029703">Chrome साइट के यूआरएल और सामग्री के साथ ही आपका ईमेल और Chrome में सेव किया गया क्रेडिट कार्ड का प्रकार Google को भेजेगा. आप Chrome सेटिंग में जाकर इसे बंद कर सकते हैं. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome में Google Assistant सेवा पूरी ऊंचाई पर खुलती है.</translation>
 <translation id="6555233628095991027">Chrome में Google Assistant सेवा आधी ऊंचाई पर खुली है.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hr.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hr.xtb
index 17a39aed..a37a5cfb 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hr.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hr.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
 <translation id="1135993792949700405">Chrome će poslati domeni <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> osobne podatke koje ste odabrali</translation>
-<translation id="1472675084647422956">Prikaži više</translation>
 <translation id="1625889395409731085">Želite li otvoriti eksternu vezu?</translation>
 <translation id="1699570257714336246">Nedostaju podaci</translation>
 <translation id="3604604794717279723">Prihvaćam</translation>
 <translation id="4437727785356380473">Zatvoren je Google asistent u Chromeu.</translation>
 <translation id="4850886885716139402">Prikaz</translation>
 <translation id="5014174725590676422">Prikazuje se zaslon prvog pokretanja Google asistenta u Chromeu</translation>
-<translation id="5138227688689900538">Pokaži manje</translation>
 <translation id="5188078772080029703">Chrome će Googleu poslati URL web-lokacije i njezin sadržaj, kao i vašu e-adresu i vrstu kreditne kartice spremljene u Chromeu. To možete isključiti u Chromeovim postavkama. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google asistent u Chromeu otvoren je u punoj visini.</translation>
 <translation id="6555233628095991027">Google asistent u Chromeu otvoren je na pola visine.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hu.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hu.xtb
index b6a3d8b..dfc7f63c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hu.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_hu.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hu">
 <translation id="1135993792949700405">Az Ön által kiválasztott személyes adatokat a Chrome elküldi a következő domainnek: <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Továbbiak megjelenítése</translation>
 <translation id="1625889395409731085">Megnyitja a külső linket?</translation>
 <translation id="1699570257714336246">Hiányzó információ</translation>
 <translation id="3604604794717279723">Elfogadom</translation>
 <translation id="4437727785356380473">A Google Segéd be van zárva a Chrome-ban.</translation>
 <translation id="4850886885716139402">Nézet</translation>
 <translation id="5014174725590676422">A képernyőn a Google Segéd a Chrome-ban szolgáltatás első futtatáskor megjelenő képernyője látható</translation>
-<translation id="5138227688689900538">Kevesebb megjelenítése</translation>
 <translation id="5188078772080029703">A Chrome elküldi a Google-nak a webhely URL-címét és tartalmát, valamint az Ön által a Chrome böngészőben elmentett e-mail-címet és hitelkártyatípust. Ezt a Chrome beállításai között kapcsolhatja ki. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">A Google Segéd teljes magasságban van megnyitva a Chrome-ban.</translation>
 <translation id="6555233628095991027">A Google Segéd félmagasságban van megnyitva a Chrome-ban.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_id.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_id.xtb
index 8f657a4..dbd69f3 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_id.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_id.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="id">
 <translation id="1135993792949700405">Chrome akan mengirimkan data pribadi yang Anda pilih ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Tampilkan lainnya</translation>
 <translation id="1625889395409731085">Buka link eksternal?</translation>
 <translation id="1699570257714336246">Informasi tidak ada</translation>
 <translation id="3604604794717279723">Saya setuju</translation>
 <translation id="4437727785356380473">Asisten Google di Chrome ditutup.</translation>
 <translation id="4850886885716139402">Lihat</translation>
 <translation id="5014174725590676422">Layar penggunaan pertama Asisten Google di Chrome ditampilkan</translation>
-<translation id="5138227688689900538">Tampilkan lebih sedikit</translation>
 <translation id="5188078772080029703">Chrome akan mengirimkan URL dan konten situs serta email dan jenis kartu kredit Anda yang tersimpan di Chrome ke Google. Anda dapat menonaktifkan opsi ini di setelan Chrome. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Asisten Google di Chrome terbuka dengan ketinggian penuh.</translation>
 <translation id="6555233628095991027">Asisten Google di Chrome terbuka dengan ketinggian separuh.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_it.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_it.xtb
index aff7a17..750cf03 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_it.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_it.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="it">
 <translation id="1135993792949700405">Chrome invierà i dati personali selezionati al sito <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Mostra altro</translation>
 <translation id="1625889395409731085">Aprire il link esterno?</translation>
 <translation id="1699570257714336246">Mancano informazioni</translation>
 <translation id="3604604794717279723">Accetto</translation>
 <translation id="4437727785356380473">Assistente Google in Chrome chiuso.</translation>
 <translation id="4850886885716139402">Visualizza</translation>
 <translation id="5014174725590676422">È mostrata la schermata della prima esecuzione dell'Assistente Google in Chrome</translation>
-<translation id="5138227688689900538">Mostra meno</translation>
 <translation id="5188078772080029703">Chrome invierà a Google l'URL e i contenuti del sito, nonché la tua email e il tipo di carta di credito salvati in Chrome. Puoi disattivare questa funzione nelle impostazioni di Chrome. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Assistente Google in Chrome aperto a schermo intero.</translation>
 <translation id="6555233628095991027">Assistente Google in Chrome aperto nella parte inferiore dello schermo.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_iw.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_iw.xtb
index dc203f93..4a65eaf 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_iw.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_iw.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="iw">
 <translation id="1135993792949700405">‏Chrome ישלח את המידע האישי שבחרת אל <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">הצג יותר</translation>
 <translation id="1625889395409731085">לפתוח את הקישור החיצוני?</translation>
 <translation id="1699570257714336246">חסר מידע</translation>
 <translation id="3604604794717279723">אני מסכים/ה</translation>
 <translation id="4437727785356380473">‏Google Assistant ב-Chrome נסגר.</translation>
 <translation id="4850886885716139402">הצגה</translation>
 <translation id="5014174725590676422">‏מוצג מסך ההפעלה הראשונה של Google Assistant ב-Chrome</translation>
-<translation id="5138227688689900538">פחות אפליקציות</translation>
 <translation id="5188078772080029703">‏Chrome ישלח אל Google את כתובת ה-URL של האתר ואת התוכן שלו, כמו גם את כתובת האימייל וסוג כרטיס האשראי ששמרת ב-Chrome. ניתן להשבית את האפשרות הזו בהגדרות Chrome. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">‏Google Assistant ב-Chrome נפתח בגובה מלא.</translation>
 <translation id="6555233628095991027">‏Google Assistant ב-Chrome נפתח בחצי גובה.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ja.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ja.xtb
index a55dab6..89d8d6c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ja.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ja.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ja">
 <translation id="1135993792949700405">ユーザーが選択した個人データが Chrome から <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> に送信されます</translation>
-<translation id="1472675084647422956">表示項目を増やす</translation>
 <translation id="1625889395409731085">外部リンクを開きますか?</translation>
 <translation id="1699570257714336246">情報が不足しています</translation>
 <translation id="3604604794717279723">同意する</translation>
 <translation id="4437727785356380473">Chrome の Google アシスタントを終了しました。</translation>
 <translation id="4850886885716139402">表示</translation>
 <translation id="5014174725590676422">Chrome の Google アシスタントの初回実行画面が表示されました</translation>
-<translation id="5138227688689900538">一部を表示</translation>
 <translation id="5188078772080029703">Chrome から Google に、サイトの URL とコンテンツ、および Chrome に保存されているメールアドレスとクレジット カードのタイプが送信されます。この機能は Chrome の設定で無効にできます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome の Google アシスタントが画面全体に開いています。</translation>
 <translation id="6555233628095991027">Chrome の Google アシスタントが画面の下半分に開いています。</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_kn.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_kn.xtb
index f701ace9..bc44baa 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_kn.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_kn.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="kn">
 <translation id="1135993792949700405">Chrome, ನೀವು ಆಯ್ಕೆ ಮಾಡಿರುವ ವೈಯಕ್ತಿಕ ಡೇಟಾವನ್ನು <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation>
-<translation id="1472675084647422956">ಇನ್ನಷ್ಟು ತೋರಿಸಿ</translation>
 <translation id="1625889395409731085">ಬಾಹ್ಯ ಲಿಂಕ್ ತೆರೆಯುವುದೇ?</translation>
 <translation id="1699570257714336246">ಮಾಹಿತಿ ಕಾಣೆಯಾಗಿದೆ</translation>
 <translation id="3604604794717279723">ನಾನು ಒಪ್ಪುತ್ತೇನೆ</translation>
 <translation id="4437727785356380473">Chrome ನಲ್ಲಿ Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಮುಚ್ಚಲಾಗಿದೆ.</translation>
 <translation id="4850886885716139402">ವೀಕ್ಷಣೆ</translation>
 <translation id="5014174725590676422">Chrome ನಲ್ಲಿನ Google ಅಸಿಸ್ಟೆಂಟ್‌ನ ಮೊದಲ ಬಾರಿ ರನ್ ಮಾಡಿದ ಸ್ಕ್ರೀನ್ ಅನ್ನು ತೋರಿಸಲಾಗಿದೆ</translation>
-<translation id="5138227688689900538">ಕಡಿಮೆ ತೋರಿಸಿ</translation>
 <translation id="5188078772080029703">Chrome, ಸೈಟ್‌ನ URL ಮತ್ತು ವಿಷಯವನ್ನು ಅಂತೆಯೇ Chrome ನಲ್ಲಿ ಉಳಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಇಮೇಲ್ ಹಾಗೂ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಪ್ರಕಾರದ ಮಾಹಿತಿಯನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ. ನೀವು Chrome ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಇದನ್ನು ಆಫ್ ಮಾಡಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome ನಲ್ಲಿ Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಪೂರ್ಣ ಎತ್ತರದಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
 <translation id="6555233628095991027">Chrome ನಲ್ಲಿ Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಅರ್ಧ ಎತ್ತರದಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ko.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ko.xtb
index bbc3d0b..2e50634 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ko.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ko.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
 <translation id="1135993792949700405">Chrome에서 사용자가 선택한 개인 정보가 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에 전송됩니다.</translation>
-<translation id="1472675084647422956">자세히 보기</translation>
 <translation id="1625889395409731085">외부 링크를 여시겠습니까?</translation>
 <translation id="1699570257714336246">정보 누락</translation>
 <translation id="3604604794717279723">동의</translation>
 <translation id="4437727785356380473">Chrome의 Google 어시스턴트가 종료되었습니다</translation>
 <translation id="4850886885716139402">보기</translation>
 <translation id="5014174725590676422">Chrome의 Google 어시스턴트 첫 실행 화면이 표시됩니다.</translation>
-<translation id="5138227688689900538">간략히</translation>
 <translation id="5188078772080029703">사이트의 URL과 콘텐츠, Chrome에 저장된 이메일 및 신용카드 종류가 Google에 전송됩니다. 이 기능은 Chrome 설정에서 사용 중지할 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome의 Google 어시스턴트가 전체 높이로 열렸습니다</translation>
 <translation id="6555233628095991027">Chrome의 Google 어시스턴트가 절반 높이로 열렸습니다</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lt.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lt.xtb
index e16b1797..e42d2a5 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lt.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lt.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="lt">
 <translation id="1135993792949700405">„Chrome“ siųs pasirinktus asmens duomenis į <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Rodyti daugiau</translation>
 <translation id="1625889395409731085">Atidaryti išorinę nuorodą?</translation>
 <translation id="1699570257714336246">Trūksta informacijos</translation>
 <translation id="3604604794717279723">Sutinku</translation>
 <translation id="4437727785356380473">Programa „Google Assistant“ sistemoje „Chrome“ uždaryta.</translation>
 <translation id="4850886885716139402">Žiūrėti</translation>
 <translation id="5014174725590676422">Rodomas „Google“ padėjėjo sistemoje „Chrome“ pirmosios paleisties ekranas</translation>
-<translation id="5138227688689900538">Rodyti mažiau</translation>
 <translation id="5188078772080029703">„Chrome“ siųs „Google“ svetainės URL ir turinį bei jūsų el. pašto adresą ir kredito kortelės tipą, išsaugotus sistemoje „Chrome“. Šią funkciją galite išjungti „Chrome“ nustatymuose. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Programa „Google Assistant“ naršyklėje „Chrome“ atidaryta viso aukščio.</translation>
 <translation id="6555233628095991027">Programa „Google Assistant“ naršyklėje „Chrome“ atidaryta pusės aukščio.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lv.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lv.xtb
index 3faef39..303bfc0 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lv.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_lv.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="lv">
 <translation id="1135993792949700405">Chrome sūtīs jūsu atlasītos personas datus uz <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Rādīt vairāk</translation>
 <translation id="1625889395409731085">Vai atvērt ārējo saiti?</translation>
 <translation id="1699570257714336246">Trūkst informācijas</translation>
 <translation id="3604604794717279723">Piekrītu</translation>
 <translation id="4437727785356380473">Google asistents pārlūkprogrammā Chrome ir aizvērts.</translation>
 <translation id="4850886885716139402">Skatīt</translation>
 <translation id="5014174725590676422">Tiek rādīts Google asistenta pirmās palaišanas ekrāns pārlūkprogrammā Chrome.</translation>
-<translation id="5138227688689900538">Rādīt mazāk</translation>
 <translation id="5188078772080029703">Chrome nosūtīs vietnes URL un saturu, kā arī jūsu pārlūkā saglabāto e-pasta adresi un kredītkartes veidu uz Google. Šo iespēju varat izslēgt Chrome iestatījumos. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google asistents pārlūkprogrammā Chrome ir atvērts pilnā augstumā.</translation>
 <translation id="6555233628095991027">Google asistents pārlūkprogrammā Chrome ir atvērts pusekrāna augstumā.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ml.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ml.xtb
index 4484ff02..63290d32 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ml.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ml.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ml">
 <translation id="1135993792949700405">നിങ്ങൾ തിരഞ്ഞെടുത്ത വ്യക്തിപരമായ ഡാറ്റ Chrome <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> എന്നതിലേക്ക് അയയ്ക്കും</translation>
-<translation id="1472675084647422956">കൂടുതൽ‍ കാണിക്കുക</translation>
 <translation id="1625889395409731085">ബാഹ്യ ലിങ്ക് തുറക്കണോ?</translation>
 <translation id="1699570257714336246">വിവരങ്ങൾ സമ്പൂർണ്ണമല്ല</translation>
 <translation id="3604604794717279723">ഞാന്‍ അംഗീകരിക്കുന്നു</translation>
 <translation id="4437727785356380473">Chrome-ലെ Google അസിസ്‌റ്റൻ്റ് അടച്ചു.</translation>
 <translation id="4850886885716139402">കാണുക</translation>
 <translation id="5014174725590676422">Chrome-ലെ Google അസിസ്‌റ്റന്‍റ്, ആദ്യ റൺ സ്‌ക്രീൻ കാണിക്കുന്നു</translation>
-<translation id="5138227688689900538">കുറച്ച് കാണിക്കുക</translation>
 <translation id="5188078772080029703">സൈറ്റിൻ്റെ URL, ഉള്ളടക്കം എന്നിവയും നിങ്ങൾ Google-ലേക്ക് Chrome-ൽ സംരക്ഷിച്ചിരിക്കുന്ന ഇമെയിൽ, ക്രെഡിറ്റ് കാർഡ് തരം എന്നിവയും Chrome അയയ്‌ക്കും. Chrome ക്രമീകരണത്തിൽ നിങ്ങൾക്കിത് ഓഫാക്കാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome-ലെ Google അസിസ്‌റ്റൻ്റ് മുഴുവൻ ഉയരത്തിൽ തുറന്നു.</translation>
 <translation id="6555233628095991027">Chrome-ലെ Google അസിസ്‌റ്റൻ്റ് പകുതി ഉയരത്തിൽ തുറന്നു.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_mr.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_mr.xtb
index 6bd0664..07745d5c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_mr.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_mr.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
 <translation id="1135993792949700405">Chrome तुम्ही निवडलेला वैयक्तिक डेटा <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ला पाठवेल</translation>
-<translation id="1472675084647422956">अधिक दर्शवा</translation>
 <translation id="1625889395409731085">बाह्य लिंक उघडायची आहे का?</translation>
 <translation id="1699570257714336246">माहिती नाही आहे</translation>
 <translation id="3604604794717279723">मी स्वीकारत आहे</translation>
 <translation id="4437727785356380473">Chrome मधील Google असिस्टंट बंद आहे.</translation>
 <translation id="4850886885716139402">पहा</translation>
 <translation id="5014174725590676422">Chrome मध्ये Google असिस्टंट पहिल्यांदा रन केलेली स्क्रीन दाखवली आहे</translation>
-<translation id="5138227688689900538">कमी दाखवा</translation>
 <translation id="5188078772080029703">Chrome साइटची URL आणि आशय तसेच Chrome मध्ये सेव्ह केलेला तुमचा ईमेल आणि क्रेडिट कार्डचा प्रकार Google ला पाठवेल. तुम्ही हे Chrome सेटिंग्जमधून बंद करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome मधील Google असिस्टंट पूर्ण स्क्रीनवर उघडले.</translation>
 <translation id="6555233628095991027">Chrome मधील Google असिस्टंट अर्ध्या स्क्रीनवर उघडले आहे.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ms.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ms.xtb
index 89ccf9d..3279cf8 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ms.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ms.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ms">
 <translation id="1135993792949700405">Chrome akan menghantar data peribadi yang anda pilih ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Tunjukkan lagi</translation>
 <translation id="1625889395409731085">Buka pautan luar?</translation>
 <translation id="1699570257714336246">Tiada maklumat</translation>
 <translation id="3604604794717279723">Saya terima</translation>
 <translation id="4437727785356380473">Google Assistant dalam Chrome ditutup.</translation>
 <translation id="4850886885716139402">Lihat</translation>
 <translation id="5014174725590676422">Google Assistant dalam skrin pelaksanaan pertama Chrome dipaparkan</translation>
-<translation id="5138227688689900538">Tunjukkan kurang</translation>
 <translation id="5188078772080029703">Chrome akan menghantar URL dan kandungan tapak serta e-mel dan jenis kad kredit anda yang disimpan dalam Chrome kepada Google. Anda boleh mematikan pilihan ini dalam tetapan Chrome. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistant dalam Chrome dibuka pada ketinggian penuh.</translation>
 <translation id="6555233628095991027">Google Assistant dalam Chrome dibuka pada ketinggian separuh.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_nl.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_nl.xtb
index d2749af..57b1c7f 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_nl.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_nl.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="nl">
 <translation id="1135993792949700405">Chrome verzendt de persoonsgegevens die je hebt geselecteerd naar <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Meer weergeven</translation>
 <translation id="1625889395409731085">Externe link openen?</translation>
 <translation id="1699570257714336246">Ontbrekende informatie</translation>
 <translation id="3604604794717279723">Ik ga akkoord</translation>
 <translation id="4437727785356380473">De Google Assistent in Chrome is gesloten.</translation>
 <translation id="4850886885716139402">Weergave</translation>
 <translation id="5014174725590676422">Het eerste uitvoeringsscherm van de Google Assistent in Chrome wordt weergegeven</translation>
-<translation id="5138227688689900538">Minder weergeven</translation>
 <translation id="5188078772080029703">Chrome verzendt zowel de URL en content van de URL als je e-mailadres en type creditcard die zijn opgeslagen in Chrome naar Google. Je kunt dit uitschakelen in de Chrome-instellingen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">De Google Assistent is op volledige hoogte geopend in Chrome.</translation>
 <translation id="6555233628095991027">De Google Assistent is op halve hoogte geopend in Chrome.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_no.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_no.xtb
index 10eddb5..7f71bdab 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_no.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_no.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
 <translation id="1135993792949700405">Chrome sender personopplysningene du har valgt, til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Vis mer</translation>
 <translation id="1625889395409731085">Vil du åpne den eksterne linken?</translation>
 <translation id="1699570257714336246">Informasjon mangler</translation>
 <translation id="3604604794717279723">Godta</translation>
 <translation id="4437727785356380473">Google-assistenten i Chrome er lukket.</translation>
 <translation id="4850886885716139402">Visning</translation>
 <translation id="5014174725590676422">Skjermen for første kjøring av Google-assistenten i Chrome vises</translation>
-<translation id="5138227688689900538">Vis færre</translation>
 <translation id="5188078772080029703">Chrome sender nettstedets nettadresse og innhold, samt e-postadressen din og kredittkorttypen som er lagret i Chrome, til Google. Du kan slå av dette i Chrome-innstillingene. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google-assistenten i Chrome er åpnet i full høyde.</translation>
 <translation id="6555233628095991027">Google-assistenten i Chrome er åpnet i halv høyde.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pl.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pl.xtb
index 379d65f3..d2b035c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pl.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pl.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
 <translation id="1135993792949700405">Chrome będzie wysyłać wybrane przez Ciebie dane osobowe do <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Pokaż więcej</translation>
 <translation id="1625889395409731085">Otworzyć link zewnętrzny?</translation>
 <translation id="1699570257714336246">Brak informacji</translation>
 <translation id="3604604794717279723">Zgadzam się</translation>
 <translation id="4437727785356380473">Zamknięto Asystenta Google w Chrome.</translation>
 <translation id="4850886885716139402">Widok</translation>
 <translation id="5014174725590676422">Wyświetlany jest ekran pierwszego uruchomienia Asystenta Google w Chrome</translation>
-<translation id="5138227688689900538">Pokaż mniej</translation>
 <translation id="5188078772080029703">Chrome wyśle do Google URL i zawartość strony oraz Twój e-mail i typ karty kredytowej zapisane w Chrome. Możesz wyłączyć tę opcję w ustawieniach Chrome. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Asystent Google w Chrome otwarty na pełną wysokość.</translation>
 <translation id="6555233628095991027">Asystent Google w Chrome otwarty na pół wysokości.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-BR.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-BR.xtb
index ea418bba..f4e5864 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-BR.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-BR.xtb
@@ -2,21 +2,19 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
 <translation id="1135993792949700405">O Chrome enviará dados pessoais selecionados por você para <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Mostrar mais</translation>
 <translation id="1625889395409731085">Abrir link externo?</translation>
 <translation id="1699570257714336246">Informações faltantes</translation>
 <translation id="3604604794717279723">Aceito</translation>
 <translation id="4437727785356380473">Google Assistente no Chrome fechado.</translation>
 <translation id="4850886885716139402">Visualizar</translation>
 <translation id="5014174725590676422">Exibição da tela de primeiro acesso do Google Assistente no Chrome</translation>
-<translation id="5138227688689900538">Mostrar menos</translation>
 <translation id="5188078772080029703">O Chrome enviará para o Google o URL e o conteúdo do site, assim como seu e-mail e tipo de cartão de crédito salvo no navegador. É possível desativar esse recurso nas configurações do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistente no Chrome aberto no tamanho máximo.</translation>
 <translation id="6555233628095991027">Google Assistente no Chrome aberto no tamanho médio.</translation>
 <translation id="6973932557599545801">Não posso ajudar. Você está por conta própria.</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7871791972254842204">Ler e aceitar os Termos e Condições em <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> mais tarde</translation>
-<translation id="8253702004019660079">Google Assistente no Chrome</translation>
+<translation id="8253702004019660079">Google Assistente no Chrome.</translation>
 <translation id="8723954843026426558">Concordo com os Termos e Condições, com a Política de Privacidade e com o direito legal de cancelamento de <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
 <translation id="9138504265731110181">Com o Google Assistente, você economiza tempo ao finalizar suas compras na Web</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-PT.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-PT.xtb
index b87833a2..b6ca03fa 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-PT.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_pt-PT.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-PT">
 <translation id="1135993792949700405">O Chrome envia os dados pessoais selecionados para <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation>
-<translation id="1472675084647422956">Mostrar mais</translation>
 <translation id="1625889395409731085">Pretende abrir o link externo?</translation>
 <translation id="1699570257714336246">Informações em falta</translation>
 <translation id="3604604794717279723">Aceito</translation>
 <translation id="4437727785356380473">Assistente Google no Chrome fechado.</translation>
 <translation id="4850886885716139402">Ver</translation>
 <translation id="5014174725590676422">É apresentado o primeiro ecrã de execução do Assistente Google no Chrome.</translation>
-<translation id="5138227688689900538">Mostrar menos</translation>
 <translation id="5188078772080029703">O Chrome envia o URL e o conteúdo do site, bem como o seu email e tipo de cartão de crédito guardados no Chrome para o Google. Pode desativar esta opção nas definições do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" />.</translation>
 <translation id="5267269112080050255">Assistente Google no Chrome aberto à altura total.</translation>
 <translation id="6555233628095991027">Assistente Google no Chrome aberto a metade da altura.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ro.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ro.xtb
index 9cc7241..deda00c 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ro.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ro.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ro">
 <translation id="1135993792949700405">Chrome va trimite datele cu caracter personal selectate la <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Afișați mai multe</translation>
 <translation id="1625889395409731085">Deschizi linkul extern?</translation>
 <translation id="1699570257714336246">Informații lipsă</translation>
 <translation id="3604604794717279723">Accept</translation>
 <translation id="4437727785356380473">Asistentul Google în Chrome este închis.</translation>
 <translation id="4850886885716139402">Afișează</translation>
 <translation id="5014174725590676422">Se afișează ecranul pentru prima rulare a Asistentului Google în Chrome</translation>
-<translation id="5138227688689900538">Afișează mai puțin</translation>
 <translation id="5188078772080029703">Chrome va trimite la Google adresa URL a site-ului și conținutul său, precum și adresa ta de e-mail și tipul cardului de credit salvate în Chrome. Poți să dezactivezi această opțiune din setările Chrome. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Asistentul Google în Chrome este deschis la înălțimea completă.</translation>
 <translation id="6555233628095991027">Asistentul Google în Chrome a fost deschis la jumătate din înălțime.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ru.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ru.xtb
index e320a00..f3561d3 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ru.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ru.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
 <translation id="1135993792949700405">Персональные данные, выбранные вами для автозаполнения, будут переданы <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation>
-<translation id="1472675084647422956">Показать больше...</translation>
 <translation id="1625889395409731085">Открыть внешнюю ссылку?</translation>
 <translation id="1699570257714336246">Данные отсутствуют</translation>
 <translation id="3604604794717279723">Принимаю</translation>
 <translation id="4437727785356380473">Окно Google Ассистента в Chrome закрыто.</translation>
 <translation id="4850886885716139402">Посмотреть</translation>
 <translation id="5014174725590676422">Показан экран первого запуска Google Ассистента в Chrome</translation>
-<translation id="5138227688689900538">Свернуть</translation>
 <translation id="5188078772080029703">URL сайта и его содержимое, а также адрес электронной почты и тип кредитной карты, сохраненные в Chrome, будут переданы в Google. Вы можете отключить эти параметры в настройках Chrome. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Окно Google Ассистента в Chrome открыто полностью.</translation>
 <translation id="6555233628095991027">Окно Google Ассистента в Chrome открыто наполовину.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sk.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sk.xtb
index c06a49c..c29a17b 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sk.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sk.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
 <translation id="1135993792949700405">Chrome bude odosielať vybrané osobné údaje do domény <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Zobraziť viac</translation>
 <translation id="1625889395409731085">Chcete otvoriť externý odkaz?</translation>
 <translation id="1699570257714336246">Chýbajú informácie</translation>
 <translation id="3604604794717279723">Súhlasím</translation>
 <translation id="4437727785356380473">Asistent Google v Chrome sa zavrel.</translation>
 <translation id="4850886885716139402">Zobraziť</translation>
 <translation id="5014174725590676422">Zobrazuje sa obrazovka pri prvom spustení Asistenta Google v Chrome</translation>
-<translation id="5138227688689900538">Zobraziť menej</translation>
 <translation id="5188078772080029703">Chrome odošle Googlu webovú adresu a obsah webu spolu s vaším e‑mailom a typom kreditnej karty uloženej v Chome. Túto možnosť môžete vypnúť v nastaveniach. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Asistent Google v Chrome sa otvoril na celú výšku.</translation>
 <translation id="6555233628095991027">Asistent Google v Chrome sa otvoril na polovičnú výšku.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sl.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sl.xtb
index 8afdf8f..2548c26 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sl.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sl.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
 <translation id="1135993792949700405">Chrome bo <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> pošiljal osebne podatke, ki ste jih izbrali</translation>
-<translation id="1472675084647422956">Pokaži več</translation>
 <translation id="1625889395409731085">Želite odpreti zunanjo povezavo?</translation>
 <translation id="1699570257714336246">Manjkajo podatki</translation>
 <translation id="3604604794717279723">Sprejmem</translation>
 <translation id="4437727785356380473">Pomočnik Google v Chromu je zaprt.</translation>
 <translation id="4850886885716139402">Pogled</translation>
 <translation id="5014174725590676422">Prikazan je zaslon za prvi zagon Pomočnika Google v Chromu</translation>
-<translation id="5138227688689900538">Pokaži manj</translation>
 <translation id="5188078772080029703">Chrome bo URL in vsebino spletnega mesta ter vaš e-poštni naslov in vrsto kreditne kartice, shranjena v Chromu, poslal Googlu. To lahko izklopite v nastavitvah Chroma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Pomočnik Google v Chromu, odprt pri polni višini</translation>
 <translation id="6555233628095991027">Pomočnik Google v Chromu, odprt pri polovični višini</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sr.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sr.xtb
index bf2cd84f..2a8b71a 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sr.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sr.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr">
 <translation id="1135993792949700405">Chrome ће послати личне податке које сте изабрали на <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Прикажи више</translation>
 <translation id="1625889395409731085">Желите ли да отворите спољни линк?</translation>
 <translation id="1699570257714336246">Недостају информације</translation>
 <translation id="3604604794717279723">Прихватам</translation>
 <translation id="4437727785356380473">Google помоћник у Chrome-у је затворен.</translation>
 <translation id="4850886885716139402">Приказ</translation>
 <translation id="5014174725590676422">Приказује се екран за прво покретање Google помоћника у Chrome-у</translation>
-<translation id="5138227688689900538">Прикажи мање</translation>
 <translation id="5188078772080029703">Chrome ће послати Google-у URL и садржај сајта као и ваш имејл и тип кредитне картице сачуван у Chrome-у. Можете да искључите ово у Chrome подешавањима. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google помоћник у Chrome-у је отворен у пуној висини.</translation>
 <translation id="6555233628095991027">Google помоћник у Chrome-у је отворен на пола висине.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sv.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sv.xtb
index 1706da0..4b68fd9a 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sv.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sv.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sv">
 <translation id="1135993792949700405">Chrome skickar valda personuppgifter till <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Visa fler</translation>
 <translation id="1625889395409731085">Vill du öppna extern länk?</translation>
 <translation id="1699570257714336246">Uppgifter saknas</translation>
 <translation id="3604604794717279723">Godkänn</translation>
 <translation id="4437727785356380473">Google-assistenten i Chrome är stängd.</translation>
 <translation id="4850886885716139402">Visa</translation>
 <translation id="5014174725590676422">Skärmen vid första användningen av Googe-assistenten i Chrome visas</translation>
-<translation id="5138227688689900538">Visa färre</translation>
 <translation id="5188078772080029703">Chrome skickar webbplatsens adress och innehåll tillsammans med den e-postadress och den kreditkortstyp som du har sparat i Chrome till Google. Du kan inaktivera detta i inställningarna i Chrome. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google-assistenten i Chrome öppnades och tar upp hela skärmen.</translation>
 <translation id="6555233628095991027">Google-assistenten i Chrome öppnades och tar upp halva skärmen.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sw.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sw.xtb
index 498d02c..7250069 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sw.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sw.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sw">
 <translation id="1135993792949700405">Chrome itatuma data ya binafsi uliyochagua kwa <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Onyesha zaidi</translation>
 <translation id="1625889395409731085">Ungependa kufungua kiungo cha nje?</translation>
 <translation id="1699570257714336246">Maelezo hayajakamilika</translation>
 <translation id="3604604794717279723">Ninakubali</translation>
 <translation id="4437727785356380473">Imefunga Mratibu wa Google katika Chrome.</translation>
 <translation id="4850886885716139402">Mwonekano</translation>
 <translation id="5014174725590676422">Inaonyesha skrini ya haraka ya programu ya Mratibu wa Google katika Chrome</translation>
-<translation id="5138227688689900538">Onyesha chache</translation>
 <translation id="5188078772080029703">Chrome itatuma kwa Google maudhui na URL ya tovuti, pamoja na anwani yako ya barua pepe na aina ya kadi ya mikopo uliyohifadhi katika Chrome. Unaweza kuzima hali hii katika mipangilio ya Chrome. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Programu ya Mratibu wa Google katika Chrome imefunguliwa katika urefu kamili.</translation>
 <translation id="6555233628095991027">Imefungua urefu nusu wa programu ya Mratibu wa Google katika Chrome.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ta.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ta.xtb
index d156985..b5f75cb 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ta.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ta.xtb
@@ -2,13 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ta">
 <translation id="1135993792949700405">Chrome நீங்கள் தேர்ந்தெடுத்த தனிப்பட்ட தரவை <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> டொமைனுக்கு அனுப்பும்</translation>
-<translation id="1472675084647422956">மேலும் காண்பி</translation>
 <translation id="1625889395409731085">புற இணைப்புகளைத் திறக்கவா?</translation>
 <translation id="3604604794717279723">ஏற்கிறேன்</translation>
 <translation id="4437727785356380473">'Chromeமில் Google அசிஸ்டண்ட்' மூடப்பட்டது.</translation>
 <translation id="4850886885716139402">காட்சி</translation>
 <translation id="5014174725590676422">’Chromeமில் Google அசிஸ்டண்ட்’ முதன்மைத் திரை காண்பிக்கப்படுகிறது</translation>
-<translation id="5138227688689900538">குறைவாகக் காட்டு</translation>
 <translation id="5188078772080029703">தளத்தின் URL, உள்ளடக்கம், Chromeமில் சேமிக்கப்பட்ட உங்கள் மின்னஞ்சல் முகவரி, கிரெடிட் கார்டு வகை ஆகியவற்றை Googleளுக்கு Chrome அனுப்பும். இதை Chrome அமைப்புகளில் முடக்கலாம். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">'Chromeமில் Google அசிஸ்டண்ட்' முழு உயரத்தில் திறக்கப்பட்டது.</translation>
 <translation id="6555233628095991027">'Chromeமில் Google அசிஸ்டண்ட்' பாதி உயரத்தில் திறக்கப்பட்டது.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
index 88245fd6..ba9acfe0 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="te">
 <translation id="1135993792949700405">Chrome మీరు ఎంచుకున్న వ్యక్తిగత డేటాను <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />కు పంపుతుంది</translation>
-<translation id="1472675084647422956">మరిన్ని చూపించు</translation>
 <translation id="1625889395409731085">బాహ్య లింక్‌ను తెరవాలా?</translation>
 <translation id="1699570257714336246">సమాచారం సరిగ్గా లేదు</translation>
 <translation id="3604604794717279723">నేను ఆమోదిస్తున్నాను</translation>
 <translation id="4437727785356380473">Chromeలో Google అసిస్టెంట్ మూసివేయబడింది.</translation>
 <translation id="4850886885716139402">వీక్షణ</translation>
 <translation id="5014174725590676422">Chromeలో Google అసిస్టెంట్ మొదటి అమలు స్క్రీన్ చూపబడింది</translation>
-<translation id="5138227688689900538">తక్కువ చూపు</translation>
 <translation id="5188078772080029703">Chrome ఈ సైట్ యొక్క URL మరియు కంటెంట్‌తో పాటు Chromeలో సేవ్ చేసిన మీ ఇమెయిల్ మరియు క్రెడిట్ కార్డ్ రకాన్ని Googleకు పంపుతుంది. మీరు Chrome సెట్టింగ్‌లలో దీన్ని ఆఫ్ చేయవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chromeలో Google అసిస్టెంట్ పూర్తి ఎత్తులో తెరవబడింది.</translation>
 <translation id="6555233628095991027">Chromeలో Google అసిస్టెంట్ సగం ఎత్తులో తెరవబడింది.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_th.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_th.xtb
index f1269ab2..f38e35d7 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_th.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_th.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="th">
 <translation id="1135993792949700405">Chrome จะส่งข้อมูลส่วนตัวที่คุณเลือกไปยัง <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">แสดงเพิ่มเติม</translation>
 <translation id="1625889395409731085">เปิดลิงก์ภายนอกไหม</translation>
 <translation id="1699570257714336246">ข้อมูลไม่ครบ</translation>
 <translation id="3604604794717279723">ฉันยอมรับ</translation>
 <translation id="4437727785356380473">Google Assistant ใน Chrome ปิดอยู่</translation>
 <translation id="4850886885716139402">มุมมอง</translation>
 <translation id="5014174725590676422">กำลังแสดงหน้าจอเรียกใช้ Google Assistant ครั้งแรกใน Chrome</translation>
-<translation id="5138227688689900538">แสดงน้อยลง</translation>
 <translation id="5188078772080029703">Chrome จะส่ง URL และเนื้อหาของเว็บไซต์ รวมถึงอีเมลและประเภทบัตรเครดิตที่คุณบันทึกไว้ใน Chrome ไปยัง Google คุณปิดการดำเนินการนี้ได้ในการตั้งค่า Chrome <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Assistant ใน Chrome เปิดอยู่ที่ระดับความสูงเต็มหน้าจอ</translation>
 <translation id="6555233628095991027">Google Assistant ใน Chrome เปิดอยู่ที่ระดับความสูงครึ่งหนึ่งของหน้าจอ</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_tr.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_tr.xtb
index 7ebc441..d0e3cc3 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_tr.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_tr.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="tr">
 <translation id="1135993792949700405">Chrome, seçtiğiniz kişisel verileri <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> sitesine gönderecektir</translation>
-<translation id="1472675084647422956">Daha fazla göster</translation>
 <translation id="1625889395409731085">Harici bağlantı açılsın mı?</translation>
 <translation id="1699570257714336246">Bilgi eksik</translation>
 <translation id="3604604794717279723">Kabul ediyorum</translation>
 <translation id="4437727785356380473">Chrome'da Google Asistan kapatıldı.</translation>
 <translation id="4850886885716139402">Görüntüle</translation>
 <translation id="5014174725590676422">Chrome'da Google Asistan'ın ilk kez çalışma ekranı aşağıda gösterilmiştir</translation>
-<translation id="5138227688689900538">Daha az göster</translation>
 <translation id="5188078772080029703">Chrome, sitenin URL'sinin ve içeriğinin yanı sıra Chrome'da kayıtlı e-posta adresinizi ve kredi kartınızın türünü de Google'a gönderecektir. Bu işlevi Chrome ayarlarından kapatabilirsiniz. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome'da Google Assistant tam yükseklikte açıldı.</translation>
 <translation id="6555233628095991027">Chrome'da Google Asistan yarım yükseklikte açıldı.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_uk.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_uk.xtb
index f664cff..00304d6 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_uk.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_uk.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="uk">
 <translation id="1135993792949700405">Chrome надсилатиме вибрані персональні дані на веб-сайт <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Показати більше</translation>
 <translation id="1625889395409731085">Відкрити зовнішнє посилання?</translation>
 <translation id="1699570257714336246">Немає інформації</translation>
 <translation id="3604604794717279723">Прийняти</translation>
 <translation id="4437727785356380473">Google Асистент у Chrome закрито.</translation>
 <translation id="4850886885716139402">Перегляд</translation>
 <translation id="5014174725590676422">Показано екран першого запуску Google Асистента в Chrome</translation>
-<translation id="5138227688689900538">Показати менше</translation>
 <translation id="5188078772080029703">Chrome надсилатиме в Google URL-адресу та вміст сайту, а також електронну адресу й тип кредитної картки, збереженої у веб-переглядачі. Ви можете вимкнути цю функцію в налаштуваннях Chrome. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Google Асистент відкрито в Chrome на повну висоту.</translation>
 <translation id="6555233628095991027">Google Асистент відкрито в Chrome на половину висоти.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_vi.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_vi.xtb
index 0153e1a1..c4dcf46 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_vi.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_vi.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="vi">
 <translation id="1135993792949700405">Chrome sẽ gửi dữ liệu cá nhân mà bạn đã chọn tới <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">Hiển thị thêm</translation>
 <translation id="1625889395409731085">Mở đường dẫn liên kết bên ngoài?</translation>
 <translation id="1699570257714336246">Thiếu thông tin</translation>
 <translation id="3604604794717279723">Tôi chấp nhận</translation>
 <translation id="4437727785356380473">Đã đóng Trợ lý Google trong Chrome.</translation>
 <translation id="4850886885716139402">Xem</translation>
 <translation id="5014174725590676422">Màn hình chạy đầu tiên của Trợ lý Google trong Chrome đã được hiển thị</translation>
-<translation id="5138227688689900538">Ẩn bớt</translation>
 <translation id="5188078772080029703">Chrome sẽ gửi URL và nội dung của trang web cũng như địa chỉ email và loại thẻ tín dụng bạn đã lưu trong Chrome cho Google. Bạn có thể tắt tính năng này trong phần cài đặt Chrome. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Trợ lý Google trong Chrome đã mở trên toàn màn hình.</translation>
 <translation id="6555233628095991027">Trợ lý Google trong Chrome đã mở ở nửa dưới của màn hình.</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-CN.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-CN.xtb
index ff0b313..b3b595c7 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-CN.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-CN.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
 <translation id="1135993792949700405">Chrome 会将您选择的个人数据发送到 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">显示更多</translation>
 <translation id="1625889395409731085">打开外部链接?</translation>
 <translation id="1699570257714336246">缺少信息</translation>
 <translation id="3604604794717279723">我接受</translation>
 <translation id="4437727785356380473">Chrome 中的 Google 助理已关闭。</translation>
 <translation id="4850886885716139402">视图</translation>
 <translation id="5014174725590676422">显示 Chrome 中的 Google 助理的首次运行屏幕</translation>
-<translation id="5138227688689900538">收起</translation>
 <translation id="5188078772080029703">Chrome 会将相应网站的网址和内容以及您在 Chrome 中保存的电子邮件地址和信用卡类型发送给 Google。您可在 Chrome 的“设置”中关闭此功能。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome 中的 Google 助理已全屏打开。</translation>
 <translation id="6555233628095991027">Chrome 中的 Google 助理已半屏打开。</translation>
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-TW.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-TW.xtb
index 9d48ba8..478d5bd8 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-TW.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_zh-TW.xtb
@@ -2,14 +2,12 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-TW">
 <translation id="1135993792949700405">Chrome 會將你所選的個人資料傳送給 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /></translation>
-<translation id="1472675084647422956">顯示更多</translation>
 <translation id="1625889395409731085">要開啟外部連結嗎?</translation>
 <translation id="1699570257714336246">缺少資訊</translation>
 <translation id="3604604794717279723">我接受</translation>
 <translation id="4437727785356380473">已關閉 Chrome 版 Google 助理。</translation>
 <translation id="4850886885716139402">檢視</translation>
 <translation id="5014174725590676422">目前顯示 Chrome 版 Google 助理首次執行的畫面</translation>
-<translation id="5138227688689900538">顯示較少</translation>
 <translation id="5188078772080029703">Chrome 會將網站的網址和內容,以及 Chrome 中儲存的電子郵件和信用卡類型資訊傳送給 Google。你可以在 Chrome 設定中關閉這項功能。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="5267269112080050255">Chrome 版 Google 助理已開啟,顯示於整個畫面。</translation>
 <translation id="6555233628095991027">Chrome 版 Google 助理已開啟,顯示在畫面下半部。</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
index 56f6d8e..e02a4d4 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
@@ -5,7 +5,9 @@
 <translation id="2803478378562657435">Prikazivanje spremljenih zaporki i opcija zaporki</translation>
 <translation id="2903493209154104877">Adrese</translation>
 <translation id="4660011489602794167">Prikaži tipkovnicu</translation>
+<translation id="5088366526685584589">Prikazivanje spremljenih adresa</translation>
 <translation id="6393156038355142111">Predloži snažnu zaporku</translation>
+<translation id="7299100402441711551">Prikaži adrese</translation>
 <translation id="7494879913343971937">Prikaz zaporki</translation>
 <translation id="8507520749471379845">Dostupne zaporke</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedDebuggingBridge.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedDebuggingBridge.java
index 31ae060..86c75e6 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedDebuggingBridge.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedDebuggingBridge.java
@@ -5,7 +5,7 @@
 package org.chromium.chrome.browser.feed;
 
 import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
-import com.google.android.libraries.feed.api.scope.FeedProcessScope;
+import com.google.android.libraries.feed.api.internal.scope.FeedProcessScope;
 import com.google.android.libraries.feed.common.logging.Dumper;
 
 import org.chromium.base.annotations.CalledByNative;
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
index fdbdb5c..9171645a 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
@@ -28,7 +28,7 @@
 import com.google.android.libraries.feed.api.host.stream.TooltipApi;
 import com.google.android.libraries.feed.api.host.stream.TooltipCallbackApi;
 import com.google.android.libraries.feed.api.host.stream.TooltipInfo;
-import com.google.android.libraries.feed.api.scope.FeedProcessScope;
+import com.google.android.libraries.feed.api.internal.scope.FeedProcessScope;
 import com.google.android.libraries.feed.api.stream.NonDismissibleHeader;
 
 import org.chromium.base.ApiCompatibilityUtils;
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
index a6b73ff..7981ad1 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java
@@ -12,7 +12,7 @@
 import com.google.android.libraries.feed.api.host.config.DebugBehavior;
 import com.google.android.libraries.feed.api.host.network.NetworkClient;
 import com.google.android.libraries.feed.api.host.stream.TooltipSupportedApi;
-import com.google.android.libraries.feed.api.scope.FeedProcessScope;
+import com.google.android.libraries.feed.api.internal.scope.FeedProcessScope;
 import com.google.android.libraries.feed.common.functional.Consumer;
 
 import org.chromium.base.ContextUtils;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java
index efb54a1e..f9cfa38d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java
@@ -281,7 +281,7 @@
             tab.resetOffset();
             tab.setScale(mStack.getScaleAmount());
             tab.setAlpha(1.f);
-            tab.getLayoutTab().setToolbarAlpha(0.f);
+            tab.getLayoutTab().setToolbarAlpha(i == focusIndex ? 1.f : 0.f);
             tab.getLayoutTab().setBorderScale(1.f);
 
             float scrollOffset = mStack.screenToScroll(i * spacing);
@@ -336,7 +336,7 @@
             tab.resetOffset();
             tab.setScale(mStack.getScaleAmount());
             tab.setAlpha(1.f);
-            tab.getLayoutTab().setToolbarAlpha(0.f);
+            tab.getLayoutTab().setToolbarAlpha(i == focusIndex ? 1.f : 0.f);
             tab.getLayoutTab().setBorderScale(1.f);
 
             final float scrollOffset = mStack.screenToScroll(i * spacing);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryDeletionBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryDeletionBridge.java
index 289dde4..6baaa3f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryDeletionBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryDeletionBridge.java
@@ -6,10 +6,12 @@
 
 import org.chromium.base.ObserverList;
 import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JCaller;
+import org.chromium.base.annotations.NativeMethods;
 
 /** The JNI bridge for Android to receive notifications about history deletions. */
-// TODO(crbug.com/964072): Write unit tests for this class.
 public class HistoryDeletionBridge {
     /**
      * Allows derived class to listen to history deletions that pass through this bridge. The
@@ -35,7 +37,7 @@
 
     HistoryDeletionBridge() {
         // This object is a singleton and therefore will be implicitly destroyed.
-        nativeInit();
+        HistoryDeletionBridgeJni.get().init(this);
     }
 
     public void addObserver(Observer observer) {
@@ -47,9 +49,13 @@
     }
 
     @CalledByNative
-    private void onURLsDeleted(HistoryDeletionInfo historyDeletionInfo) {
+    @VisibleForTesting
+    void onURLsDeleted(HistoryDeletionInfo historyDeletionInfo) {
         for (Observer observer : mObservers) observer.onURLsDeleted(historyDeletionInfo);
     }
 
-    private native long nativeInit();
+    @NativeMethods
+    interface Natives {
+        long init(@JCaller HistoryDeletionBridge self);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
index a4ba362..6ccdf32 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
@@ -350,7 +350,9 @@
 
     @Override
     public void onCloseButtonClicked() {
-        mTabLayout.endScrollingAnimationIfPlaying();
+        // TODO(https://crbug.com/965058): If the infobar was not properly initialized (in touchless
+        //                                 mode for example), mTabLayout will be null.
+        if (mTabLayout != null) mTabLayout.endScrollingAnimationIfPlaying();
         closeInfobar(true);
     }
 
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
index d08d8db4..e5c1faca 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
@@ -584,7 +584,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> avatud vaheleht, puudutage vahelehtede vahetamiseks}other{<ph name="OPEN_TABS_MANY" /> avatud vahelehte, puudutage vahelehtede vahetamiseks}}</translation>
 <translation id="5391532827096253100">Teie ühendus selle saidiga ei ole turvaline. Saidi teave</translation>
 <translation id="5400569084694353794">Seda rakendust kasutades nõustute Chrome'i <ph name="BEGIN_LINK1" />teenusetingimuste<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />privaatsusteatisega<ph name="END_LINK2" />.</translation>
-<translation id="5403644198645076998">Luba ainult teatud saidid</translation>
+<translation id="5403644198645076998">Luba ainult kindlad saidid</translation>
 <translation id="5414836363063783498">Kinnitamine ...</translation>
 <translation id="5423934151118863508">Teie enim külastatud lehed ilmuvad siin</translation>
 <translation id="5424588387303617268"><ph name="GIGABYTES" /> GB saadaval</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 2707a53e..c0f8e078 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -831,6 +831,7 @@
 <translation id="7062545763355031412">Prihvati i promijeni račun</translation>
 <translation id="7063006564040364415">Nije uspjelo povezivanje s poslužiteljem za sinkronizaciju.</translation>
 <translation id="7066151586745993502">{NUM_SELECTED,plural, =1{1 odabrana stavka}one{# odabrana stavka}few{# odabrane stavke}other{# odabranih stavki}}</translation>
+<translation id="7071521146534760487">Upravljanje računom</translation>
 <translation id="7077143737582773186">SD kartica</translation>
 <translation id="7087918508125750058">Odabrano: <ph name="ITEM_COUNT" />. Opcije su dostupne pri vrhu zaslona</translation>
 <translation id="7121362699166175603">Briše povijest i automatska dovršavanja u adresnoj traci. Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
index cfefcfa..d3a9058d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -207,7 +207,7 @@
 <translation id="2450083983707403292">להתחיל שוב את ההורדה של <ph name="FILE_NAME" />?</translation>
 <translation id="2476578072172137802">הגדרות אתר</translation>
 <translation id="2482878487686419369">התראות</translation>
-<translation id="2490684707762498678">מנוהל על-ידי <ph name="APP_NAME" /></translation>
+<translation id="2490684707762498678">מנוהלות על-ידי <ph name="APP_NAME" /></translation>
 <translation id="2494974097748878569">‏Google Assistant ב-Chrome</translation>
 <translation id="2496180316473517155">היסטוריית גלישה</translation>
 <translation id="2498359688066513246">עזרה ומשוב</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
index 7bb761c..bd31e11 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
@@ -249,7 +249,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> ಸೆಕೆಂಡುಗಳು ಉಳಿದಿವೆ</translation>
 <translation id="2779651927720337254">ವಿಫಲವಾಗಿದೆ</translation>
 <translation id="2781151931089541271">1 ಸೆಕೆಂಡು ಉಳಿದಿದೆ</translation>
-<translation id="2801022321632964776">ನಿಮ್ಮ ಭಾಷೆಯನ್ನು Chrome ನ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಗೆ ಪಡೆದುಕೊಳ್ಳಲು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ</translation>
+<translation id="2801022321632964776">ನಿಮ್ಮ ಭಾಷೆಯನ್ನು Chrome ನ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯಲ್ಲಿ ಪಡೆದುಕೊಳ್ಳಲು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ</translation>
 <translation id="2810645512293415242">ಡೇಟಾ ಉಳಿಸಲು ಮತ್ತು ವೇಗವಾಗಿ ಲೋಡ್ ಮಾಡಲು ಪುಟವನ್ನು ಸರಳೀಕೃತಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="281504910091592009">ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ <ph name="BEGIN_LINK" />Google ಖಾತೆಯಲ್ಲಿ<ph name="END_LINK" /> ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="2818669890320396765">ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, ಸೈನ್ ಇನ್ ಮಾಡಿ ಮತ್ತು ಸಿಂಕ್ ಆನ್ ಮಾಡಿ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
index 5b0ed07..2ea53a3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -1003,7 +1003,7 @@
 <translation id="8310344678080805313">일반 탭</translation>
 <translation id="8313455859591948645">시작 페이지 수정</translation>
 <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> 및 그 외 사이트</translation>
-<translation id="8327155640814342956">최고의 탐색 환경을 사용하려면 Chrome을 열고고 업데이트하세요.</translation>
+<translation id="8327155640814342956">최고의 탐색 환경을 사용하려면 Chrome을 열고 업데이트하세요.</translation>
 <translation id="8339163506404995330"><ph name="LANGUAGE" />로 된 페이지를 번역하지 않습니다.</translation>
 <translation id="8349013245300336738">사용된 데이터 양에 따라 정렬</translation>
 <translation id="8372893542064058268">특정 사이트에서 백그라운드 동기화를 허용합니다.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
index 197ecd3..ab25782 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
@@ -917,7 +917,7 @@
 <translation id="7649070708921625228">Bantuan</translation>
 <translation id="7658239707568436148">Batal</translation>
 <translation id="7665369617277396874">Tambah akaun</translation>
-<translation id="766587987807204883">Artikel dipaparkan di sini, yang boleh anda baca walaupun semasa anda di luar talian</translation>
+<translation id="766587987807204883">Artikel dipaparkan di sini, yang boleh anda baca walaupun semasa anda luar talian</translation>
 <translation id="7682724950699840886">Cuba petua berikut: pastikan ruang pada peranti anda mencukupi, cuba eksport sekali lagi.</translation>
 <translation id="7698359219371678927">Buat e-mel dalam <ph name="APP_NAME" /></translation>
 <translation id="7704317875155739195">Autolengkap carian dan URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index e9d9adc..e5ee088 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -1000,7 +1000,7 @@
 <translation id="8266862848225348053">Local de download</translation>
 <translation id="8274165955039650276">Ver downloads</translation>
 <translation id="8283853025636624853">Sincronizando com <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
-<translation id="8300705686683892304">Gerenciado por app</translation>
+<translation id="8300705686683892304">Gerenciados por app</translation>
 <translation id="8310344678080805313">Guias padrão</translation>
 <translation id="8313455859591948645">Editar página de inicialização</translation>
 <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> e outros sites</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
index a250f94..027d6888 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
@@ -64,7 +64,7 @@
 <translation id="1409426117486808224">திறக்கப்பட்டுள்ள தாவல்களுக்கான எளிதாக்கப்பட்ட காட்சி</translation>
 <translation id="1409879593029778104">கோப்பு ஏற்கனவே இருப்பதால் <ph name="FILE_NAME" /> இன் பதிவிறக்கம் தடுக்கப்பட்டது.</translation>
 <translation id="1414981605391750300">Googleஐத் தொடர்புகொள்கிறது. இதற்குச் சில வினாடிகள் ஆகலாம்…</translation>
-<translation id="1416550906796893042">பயன்பாட்டின் பதிப்பு</translation>
+<translation id="1416550906796893042">ஆப்ஸின் பதிப்பு</translation>
 <translation id="1430915738399379752">அச்சிடுக</translation>
 <translation id="1445680696957526815">Chrome இன் கூறுகள் ஒன்றுக்கொன்று இணங்கவில்லை. Chrome மேம்படுத்தலில் இருக்கக்கூடும் என்பதால், சில நிமிடங்களுக்குப் பிறகு முயற்சிக்கவும். சிக்கல் தொடர்ந்தால் Chromeஐ நிறுவல்நீக்கி, மீண்டும் நிறுவவும்.</translation>
 <translation id="1446450296470737166">MIDI சாதனங்களுக்கு முழுக் கட்டுப்பாட்டை அனுமதி</translation>
@@ -635,7 +635,7 @@
 <translation id="5748802427693696783">இயல்பான தாவல்களுக்கு மாற்றப்பட்டது</translation>
 <translation id="5749068826913805084">கோப்புகளைப் பதிவிறக்க Chromeமுக்கு சேமிப்பிட அணுகல் தேவை.</translation>
 <translation id="5763382633136178763">மறைநிலைத் தாவல்கள்</translation>
-<translation id="5763514718066511291">இந்தப் பயன்பாட்டின் URLஐ நகலெடுக்க, தட்டவும்</translation>
+<translation id="5763514718066511291">இந்த ஆப்ஸின் URLஐ நகலெடுக்க, தட்டவும்</translation>
 <translation id="5765780083710877561">விவரம்:</translation>
 <translation id="5777170031995031090">தேடல், விளம்பரங்கள் மற்றும் பிற Google சேவைகளைத் தனிப்பயனாக்க, உங்கள் உலாவல் வரலாற்றை Google எவ்வாறு பயன்படுத்துகிறது என்பதைக் கட்டுப்படுத்தலாம்.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> இல் <ph name="SPACE_USED" /> பயன்படுத்தப்படுகிறது</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
index 70047c1..01b0082 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -96,7 +96,7 @@
 <translation id="1671236975893690980">Đang chờ tải xuống...</translation>
 <translation id="1672586136351118594">Không hiển thị lại</translation>
 <translation id="1692118695553449118">Đồng bộ hóa đang bật</translation>
-<translation id="169515064810179024">Chặn không cho trang web sử dụng cảm biến chuyển động</translation>
+<translation id="169515064810179024">Chặn không cho các trang web sử dụng cảm biến chuyển động</translation>
 <translation id="1717218214683051432">Cảm biến chuyển động</translation>
 <translation id="1718835860248848330">Giờ vừa qua</translation>
 <translation id="1733116627827457509"><ph name="FILE_SIZE" /> - Đã cập nhật <ph name="TIME_SINCE_UPDATE" /></translation>
@@ -195,7 +195,7 @@
 <translation id="2359808026110333948">Tiếp tục</translation>
 <translation id="2369533728426058518">tab đang mở</translation>
 <translation id="2387895666653383613">Chia tỷ lệ văn bản</translation>
-<translation id="2394602618534698961">Các tệp bạn tải xuống xuất hiện ở đây</translation>
+<translation id="2394602618534698961">Các tệp bạn tải xuống sẽ xuất hiện ở đây</translation>
 <translation id="2402980924095424747"><ph name="MEGABYTES" /> MB</translation>
 <translation id="2410754283952462441">Chọn một tài khoản</translation>
 <translation id="2414886740292270097">Tối</translation>
@@ -901,7 +901,7 @@
 <translation id="756809126120519699">Đã xóa dữ liệu Chrome</translation>
 <translation id="757524316907819857">Chặn không cho trang web phát nội dung được bảo vệ</translation>
 <translation id="757855969265046257">{FILES,plural, =1{Đã tải <ph name="FILES_DOWNLOADED_ONE" /> tệp xuống}other{Đã tải <ph name="FILES_DOWNLOADED_MANY" /> tệp xuống}}</translation>
-<translation id="7588219262685291874">Bật giao diện tối khi đang bật Trình tiết kiệm pin trên thiết bị</translation>
+<translation id="7588219262685291874">Bật giao diện tối khi Trình tiết kiệm pin trên thiết bị đang bật</translation>
 <translation id="7589445247086920869">Chặn công cụ tìm kiếm hiện tại</translation>
 <translation id="7593557518625677601">Mở c.đặt Android &amp; bật lại đ.bộ hóa hệ thống Android để b.đầu đồng bộ hóa Chrome</translation>
 <translation id="7596558890252710462">Hệ điều hành</translation>
@@ -1061,7 +1061,7 @@
 <translation id="8788968922598763114">Mở lại tab đóng sau cùng</translation>
 <translation id="8801436777607969138">Chặn JavaScript cho một trang web cụ thể.</translation>
 <translation id="8812260976093120287">Trên một số trang web, bạn có thể thanh toán bằng các ứng dụng thanh toán được hỗ trợ bên trên trên thiết bị của bạn.</translation>
-<translation id="8816026460808729765">Chặn không cho trang web sử dụng cảm biến</translation>
+<translation id="8816026460808729765">Chặn không cho các trang web sử dụng cảm biến</translation>
 <translation id="8816439037877937734"><ph name="APP_NAME" /> sẽ mở trong Chrome. Bằng việc tiếp tục, bạn đồng ý với <ph name="BEGIN_LINK1" />Điều khoản dịch vụ<ph name="END_LINK1" /> và <ph name="BEGIN_LINK2" />Thông báo bảo mật<ph name="END_LINK2" /> của Chrome, cũng như <ph name="BEGIN_LINK3" />Thông báo bảo mật cho Tài khoản Google được quản lý bằng Family Link<ph name="END_LINK3" />.</translation>
 <translation id="8820817407110198400">Dấu trang</translation>
 <translation id="8833831881926404480">Một trang web đang chia sẻ màn hình của bạn</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentHandlerChangePaymentMethodTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentHandlerChangePaymentMethodTest.java
index 08903cb..36e6855 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentHandlerChangePaymentMethodTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentHandlerChangePaymentMethodTest.java
@@ -16,6 +16,7 @@
 
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ui.DisableAnimationsTestRule;
@@ -50,7 +51,9 @@
         // Find the web contents where JavaScript will be executed and instrument the browser
         // payment sheet.
         mRule.openPage();
+    }
 
+    private void installPaymentHandler() throws Throwable {
         mRule.runJavaScriptCodeInCurrentTab("install();");
         mRule.expectResultContains(new String[] {"instruments.set(): Payment handler installed."});
     }
@@ -67,42 +70,91 @@
     @Test
     @Feature({"Payments"})
     public void testNoEventHandler() throws Throwable {
+        installPaymentHandler();
         mRule.clickNodeAndWait("testNoHandler", mRule.getDismissed());
         mRule.expectResultContains(
                 new String[] {"PaymentRequest.show(): changePaymentMethod() returned: null"});
     }
 
     /**
+     * Verify that absence of the "paymentmethodchange" event handler in the merchant will cause
+     * PaymentRequestEvent.changePaymentMethod() to resolve with null.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testNoEventHandlerBasicCard() throws Throwable {
+        mRule.clickNode("basicCardMethodName");
+        installPaymentHandler();
+        mRule.triggerUIAndWait("testNoHandler", mRule.getReadyToPay());
+        mRule.clickAndWait(R.id.button_primary, mRule.getDismissed());
+        mRule.expectResultContains(
+                new String[] {"PaymentRequest.show(): changePaymentMethod() returned: null"});
+    }
+
+    /**
      * Verify that rejecting the promise passed into PaymentMethodChangeEvent.updateWith() will
      * cause PaymentRequest.show() to reject and thus abort the transaction.
      */
     @Test
     @Feature({"Payments"})
     public void testReject() throws Throwable {
+        installPaymentHandler();
         mRule.clickNodeAndWait("testReject", mRule.getDismissed());
         mRule.expectResultContains(
                 new String[] {"PaymentRequest.show() rejected with: Error for test"});
     }
 
     /**
+     * Verify that rejecting the promise passed into PaymentMethodChangeEvent.updateWith() will
+     * cause PaymentRequest.show() to reject and thus abort the transaction.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testRejectBasicCard() throws Throwable {
+        mRule.clickNode("basicCardMethodName");
+        installPaymentHandler();
+        mRule.triggerUIAndWait("testReject", mRule.getReadyToPay());
+        mRule.clickAndWait(R.id.button_primary, mRule.getDismissed());
+        mRule.expectResultContains(
+                new String[] {"PaymentRequest.show() rejected with: Error for test"});
+    }
+
+    /**
      * Verify that a JavaScript exception in the "paymentmethodchange" event handler will cause
      * PaymentRequest.show() to reject and thus abort the transaction.
      */
     @Test
     @Feature({"Payments"})
     public void testThrow() throws Throwable {
+        installPaymentHandler();
         mRule.clickNodeAndWait("testThrow", mRule.getDismissed());
         mRule.expectResultContains(
                 new String[] {"PaymentRequest.show() rejected with: Error: Error for test"});
     }
 
     /**
+     * Verify that a JavaScript exception in the "paymentmethodchange" event handler will cause
+     * PaymentRequest.show() to reject and thus abort the transaction.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testThrowBasicCard() throws Throwable {
+        mRule.clickNode("basicCardMethodName");
+        installPaymentHandler();
+        mRule.triggerUIAndWait("testThrow", mRule.getReadyToPay());
+        mRule.clickAndWait(R.id.button_primary, mRule.getDismissed());
+        mRule.expectResultContains(
+                new String[] {"PaymentRequest.show() rejected with: Error: Error for test"});
+    }
+
+    /**
      * Verify that the payment handler receives a subset of the payment details passed into
-     * PaymentMethodChangeEvent.updateWith().
+     * PaymentMethodChangeEvent.updateWith() with URL-based payment method identifier.
      */
     @Test
     @Feature({"Payments"})
     public void testDetails() throws Throwable {
+        installPaymentHandler();
         mRule.clickNodeAndWait("testDetails", mRule.getDismissed());
         // Look for the this exact return value to ensure that the browser redacts some details
         // before forwarding them to the payment handler.
@@ -112,9 +164,33 @@
                                 + "[{\"data\":{\"soup\":\"potato\"},"
                                 + "\"supportedMethods\":\"https://127.0.0.1:",
                         // Port changes every time, so don't hardcode it here.
-                        "\",\"total\":{\"amount\":{\"currency\":\"EUR\",\"value\":\"0.03\"},"
+                        "/pay\",\"total\":{\"amount\":{\"currency\":\"EUR\",\"value\":\"0.03\"},"
                                 + "\"label\":\"\",\"pending\":false}}],"
                                 + "\"paymentMethodErrors\":{\"country\":\"Unsupported country\"},"
                                 + "\"total\":{\"currency\":\"GBP\",\"value\":\"0.02\"}}"});
     }
-}
+
+    /**
+     * Verify that the payment handler receives a subset of the payment details passed into
+     * PaymentMethodChangeEvent.updateWith() when basic-card payment method is used.
+     */
+    @Test
+    @Feature({"Payments"})
+    public void testDetailsBasicCard() throws Throwable {
+        mRule.clickNode("basicCardMethodName");
+        installPaymentHandler();
+        mRule.triggerUIAndWait("testDetails", mRule.getReadyToPay());
+        mRule.clickAndWait(R.id.button_primary, mRule.getDismissed());
+        // Look for the this exact return value to ensure that the browser redacts some details
+        // before forwarding them to the payment handler.
+        mRule.expectResultContains(
+                new String[] {"PaymentRequest.show(): changePaymentMethod() returned: "
+                        + "{\"error\":\"Error for test\",\"modifiers\":"
+                        + "[{\"data\":{\"soup\":\"potato\"},"
+                        + "\"supportedMethods\":\"basic-card\","
+                        + "\"total\":{\"amount\":{\"currency\":\"EUR\",\"value\":\"0.03\"},"
+                        + "\"label\":\"\",\"pending\":false}}],"
+                        + "\"paymentMethodErrors\":{\"country\":\"Unsupported country\"},"
+                        + "\"total\":{\"currency\":\"GBP\",\"value\":\"0.02\"}}"});
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestRule.java
index 1a8bfe8..33e832e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestRule.java
@@ -258,7 +258,7 @@
     protected void openPageAndClickNode(String nodeId)
             throws InterruptedException, TimeoutException {
         openPage();
-        DOMUtils.clickNode(mWebContentsRef.get(), nodeId);
+        clickNode(nodeId);
     }
 
     protected void triggerUIAndWait(String nodeId, PaymentsCallbackHelper<PaymentRequestUI> helper)
@@ -291,10 +291,15 @@
     protected void clickNodeAndWait(String nodeId, CallbackHelper helper)
             throws InterruptedException, TimeoutException {
         int callCount = helper.getCallCount();
-        DOMUtils.clickNode(mWebContentsRef.get(), nodeId);
+        clickNode(nodeId);
         helper.waitForCallback(callCount);
     }
 
+    /** Clicks on an HTML node. */
+    protected void clickNode(String nodeId) throws InterruptedException, TimeoutException {
+        DOMUtils.clickNode(mWebContentsRef.get(), nodeId);
+    }
+
     /** Clicks on an element in the payments UI. */
     protected void clickAndWait(int resourceId, CallbackHelper helper)
             throws InterruptedException, TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java
index 39fff0b..9d667b07 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java
@@ -4,8 +4,6 @@
 
 package org.chromium.chrome.browser.permissions;
 
-import android.support.test.filters.MediumTest;
-
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -13,7 +11,7 @@
 
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.Feature;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.permissions.PermissionTestRule.DialogShownCriteria;
@@ -49,9 +47,11 @@
      * @throws Exception
      */
     @Test
-    @MediumTest
-    @Feature({"Permissions"})
+    // @MediumTest
+    // @Feature({"Permissions"})
     @CommandLineFlags.Add("enable-features=" + PermissionTestRule.MODAL_FLAG)
+    // Flaky on official bots, https://crbug.com/699851#c8
+    @DisabledTest
     public void testNavigationDismissesModalPermissionPrompt() throws Exception {
         mPermissionRule.setUpUrl(TEST_FILE);
         mPermissionRule.runJavaScriptCodeInCurrentTab("requestGeolocationPermission()");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/profiling_host/ProfilingProcessHostAndroidTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/profiling_host/ProfilingProcessHostAndroidTest.java
index ed469620..fb509d3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/profiling_host/ProfilingProcessHostAndroidTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/profiling_host/ProfilingProcessHostAndroidTest.java
@@ -13,6 +13,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeSwitches;
@@ -38,6 +39,7 @@
 
     @Test
     @MediumTest
+    @DisableIf.Build(sdk_is_greater_than = 20, message = "https://crbug.com/964502")
     @CommandLineFlags.Add({"memlog=browser", "memlog-stack-mode=native-include-thread-names",
             "memlog-sampling-rate=1"})
     public void
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java
new file mode 100644
index 0000000..b8a18038
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java
@@ -0,0 +1,68 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.history;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.test.util.JniMocker;
+
+/** Unit tests for HistoryDeletionBridge. */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class HistoryDeletionBridgeTest {
+    @Rule
+    public JniMocker mocker = new JniMocker();
+
+    @Mock
+    HistoryDeletionBridge.Natives mNativeMocks;
+
+    @Mock
+    HistoryDeletionBridge.Observer mHistoryDeletionBridgeObserverOne;
+
+    @Mock
+    HistoryDeletionBridge.Observer mHistoryDeletionBridgeObserverTwo;
+
+    @Mock
+    HistoryDeletionInfo mHistoryDeletionInfo;
+
+    HistoryDeletionBridge mHistoryDeletionBridge;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mocker.mock(HistoryDeletionBridgeJni.TEST_HOOKS, mNativeMocks);
+        mHistoryDeletionBridge = new HistoryDeletionBridge();
+    }
+
+    @Test
+    public void testObserverMethodsCalled() {
+        mHistoryDeletionBridge.addObserver(mHistoryDeletionBridgeObserverOne);
+        mHistoryDeletionBridge.addObserver(mHistoryDeletionBridgeObserverTwo);
+        mHistoryDeletionBridge.onURLsDeleted(mHistoryDeletionInfo);
+
+        Mockito.verify(mHistoryDeletionBridgeObserverOne).onURLsDeleted(mHistoryDeletionInfo);
+        Mockito.verify(mHistoryDeletionBridgeObserverTwo).onURLsDeleted(mHistoryDeletionInfo);
+    }
+
+    @Test
+    public void testObserverRemovedDoesNotCall() {
+        mHistoryDeletionBridge.addObserver(mHistoryDeletionBridgeObserverOne);
+        mHistoryDeletionBridge.addObserver(mHistoryDeletionBridgeObserverTwo);
+        mHistoryDeletionBridge.removeObserver(mHistoryDeletionBridgeObserverOne);
+        mHistoryDeletionBridge.onURLsDeleted(mHistoryDeletionInfo);
+
+        Mockito.verify(mHistoryDeletionBridgeObserverOne, Mockito.never())
+                .onURLsDeleted(mHistoryDeletionInfo);
+        Mockito.verify(mHistoryDeletionBridgeObserverTwo).onURLsDeleted(mHistoryDeletionInfo);
+    }
+}
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index 92a75aa..2935214e 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -51,7 +51,7 @@
 <translation id="2718390899429598676">Para maior segurança, o Chromium criptografará seus dados.</translation>
 <translation id="2770231113462710648">Alterar navegador padrão para:</translation>
 <translation id="2799223571221894425">Reiniciar</translation>
-<translation id="2838154144102149890">Para atualizar, é necessário interromper o Chromium neste computador. Essa ação pode causar perda de dados não salvos de outros usuários conectados a este computador.</translation>
+<translation id="2838154144102149890">Para atualizar, é necessário interromper o Chromium neste computador. Essa ação pode causar perda de dados não salvos de outros usuários conectados a esta máquina.</translation>
 <translation id="2847479871509788944">Remover do Chromium</translation>
 <translation id="2886012850691518054">Opcional: Ajude a tornar o Chromium melhor enviando automaticamente as estatísticas de uso e os relatórios de erros ao Google.</translation>
 <translation id="2898082584336937987">Instale o Chromium no seu smartphone. Enviaremos um SMS para seu número: <ph name="PHONE_NUMBER" /></translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 5a0bae8..ff1ba8b 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">የማሳያ የመሣሪያ ቅንብሮችን ክፈት</translation>
 <translation id="1572266655485775982">Wi-Fi አንቃ</translation>
 <translation id="1572876035008611720">የእርስዎን ኢሜይል ያስገቡ</translation>
-<translation id="1573150740912592860">የእርስዎን ግስጋሴ ያስቀምጡ</translation>
 <translation id="1576594961618857597">ነባሪ ነጭ አምሳያ</translation>
 <translation id="1581962803218266616">በፈላጊ ውስጥ አሳይ</translation>
 <translation id="1584990664401018068">እየተጠቀሙ ያሉት Wi-Fi አውታረ መረብ (<ph name="NETWORK_ID" />) ማረጋገጫን ሊጠይቅ ይችላል።</translation>
@@ -5068,7 +5067,6 @@
 <translation id="8898786835233784856">ቀጣይ ትርን ምረጥ</translation>
 <translation id="8898840733695078011">የሲግናል ጥንካሬ</translation>
 <translation id="8899851313684471736">አገናኙን በአዲስ &amp;መስኮት ክፈት</translation>
-<translation id="8902081783136172774">ለመነሻ ገጽዎ ልጣፍ ይምረጡ</translation>
 <translation id="8902667442496790482">ለመናገር-ይምረጡ ቅንብሮችን ይክፈቱ</translation>
 <translation id="8904976895050290827">Chrome ሥምረት</translation>
 <translation id="890616557918890486">ምንጭ ይለውጡ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 7ba3179..3923cb9 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">فتح إعدادات الجهاز للعرض</translation>
 <translation id="1572266655485775982">‏تفعيل شبكة Wi-Fi</translation>
 <translation id="1572876035008611720">أدخل بريدك الإلكتروني</translation>
-<translation id="1573150740912592860">حفظ التقدُّم الذي أحرزته</translation>
 <translation id="1576594961618857597">الصورة الرمزية التلقائية البيضاء</translation>
 <translation id="1581962803218266616">إظهار في الباحث</translation>
 <translation id="1584990664401018068">‏قد تتطلب شبكة اللاسلكي، Wi-Fi التي تستخدمها <ph name="NETWORK_ID" /> مصادقة.</translation>
@@ -5063,7 +5062,6 @@
 <translation id="8898786835233784856">تحديد علامة التبويب التالية</translation>
 <translation id="8898840733695078011">قوة الإشارة</translation>
 <translation id="8899851313684471736">&amp;فتح الرّابط في نافذة جديدة</translation>
-<translation id="8902081783136172774">اختيار خلفية للصفحة الرئيسية</translation>
 <translation id="8902667442496790482">فتح إعدادات الاختيار والاستماع</translation>
 <translation id="8904976895050290827">‏مزامنة Chrome</translation>
 <translation id="890616557918890486">تغيير المصدر</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 930c4c0..1478da7 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Отваряне на настройките за дисплея</translation>
 <translation id="1572266655485775982">Активиране на Wi-Fi</translation>
 <translation id="1572876035008611720">Въведете имейл адреса си</translation>
-<translation id="1573150740912592860">Запазване на напредъка ви</translation>
 <translation id="1576594961618857597">Стандартен бял аватар</translation>
 <translation id="1581962803218266616">Показване във Finder</translation>
 <translation id="1584990664401018068">Използваната от вас Wi-Fi мрежа (<ph name="NETWORK_ID" />) може да изисква удостоверяване.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">Устройството не може да се присъедини към домейна. Проверете дали не сте надхвърлили броя устройства, които можете да добавите.</translation>
 <translation id="1744108098763830590">фонова страница</translation>
 <translation id="1745520510852184940">Превеждане винаги</translation>
+<translation id="1746402432151920942">Идентификатор на защитена мултимедия</translation>
 <translation id="175196451752279553">По&amp;вторно отваряне на затворения раздел</translation>
 <translation id="1753905327828125965">Ползвани</translation>
 <translation id="1756681705074952506">Метод за въвеждане</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">Не сте в профила си</translation>
 <translation id="1832511806131704864">Промяната на телефона е актуализирана</translation>
 <translation id="1834503245783133039">Неуспешно изтегляне: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI устройства</translation>
 <translation id="1838374766361614909">Изчистване на търсенето</translation>
 <translation id="1841545962859478868">Администраторът на устройството може да наблюдава следното:</translation>
 <translation id="1841616161104323629">Липсва запис за устройството.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">Подаване на сигнал за проблем</translation>
 <translation id="2220572644011485463">ПИН код или парола</translation>
 <translation id="2224444042887712269">Тази настройка принадлежи на <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Събития за достъпност</translation>
 <translation id="2224551243087462610">Редактиране на името на папката</translation>
 <translation id="2226449515541314767">Пълният контрол над MIDI устройствата е блокиран за този сайт.</translation>
 <translation id="2226720438730111184">Кажете ни какво се случва</translation>
@@ -5064,7 +5066,6 @@
 <translation id="8898786835233784856">Избор на следващия раздел</translation>
 <translation id="8898840733695078011">Сила на сигнала</translation>
 <translation id="8899851313684471736">Отваряне на връзк&amp;ата в нов прозорец</translation>
-<translation id="8902081783136172774">Изберете тапет за началната си страница</translation>
 <translation id="8902667442496790482">Отваряне на настройките на Прочитане на глас</translation>
 <translation id="8904976895050290827">Синхронизиране в Chrome</translation>
 <translation id="890616557918890486">Промяна на източника</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index d75d463..929dd3f 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">প্রদর্শন ডিভাইস সেটিংস খুলুন</translation>
 <translation id="1572266655485775982">ওয়াই ফাই সক্ষম করুন</translation>
 <translation id="1572876035008611720">আপনার ইমেল আইডি লিখুন</translation>
-<translation id="1573150740912592860">আপনি যা করেছেন তা সেভ করুন</translation>
 <translation id="1576594961618857597">ডিফল্ট সাদা রঙের অবতার</translation>
 <translation id="1581962803218266616">ফাইন্ডারে দেখান</translation>
 <translation id="1584990664401018068">আপনি যে ওয়াই-ফাই নেটওয়ার্ক ব্যবহার করছেন (<ph name="NETWORK_ID" />) সেটি যাচাই করার প্রয়োজন হতে পারে৷</translation>
@@ -487,6 +486,7 @@
 <translation id="1744060673522309905">ডোমেনে ডিভাইসটি যোগ করা যাবে না। ভাল করে দেখে নিন যে আপনার ডিভাইস যোগ করার সর্বাধিক সংখ্যা যেন অতিক্রম না করে।</translation>
 <translation id="1744108098763830590">পৃষ্ঠভূমি পৃষ্ঠা</translation>
 <translation id="1745520510852184940">সর্বদা এটিই করুন</translation>
+<translation id="1746402432151920942">প্রোটেক্টেড মিডিয়া আইডেন্টিফায়ার</translation>
 <translation id="175196451752279553">বন্ধ ট্যাবটি পু&amp;নঃরায় খুলুন</translation>
 <translation id="1753905327828125965">সর্বাধিক দেখা</translation>
 <translation id="1756681705074952506">ইনপুট পদ্ধতি</translation>
@@ -544,6 +544,7 @@
 <translation id="1830550083491357902">প্রবেশ করেননি</translation>
 <translation id="1832511806131704864">ফোন পরিবর্তন আপডেট হয়েছে</translation>
 <translation id="1834503245783133039">ডাউনলোড হয়নি: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI ডিভাইস</translation>
 <translation id="1838374766361614909">সার্চ সাফ করুন</translation>
 <translation id="1841545962859478868">ডিভাইস প্রশাসক নিম্নল্লিখিত বিষয়গুলি পর্যবেক্ষণ করতে পারেন:</translation>
 <translation id="1841616161104323629">ডিভাইসের রেকর্ড পাওয়া যাচ্ছে না।</translation>
@@ -787,6 +788,7 @@
 <translation id="2220529011494928058">কোনো সমস্যার অভিযোগ করুন</translation>
 <translation id="2220572644011485463">PIN বা পাসওয়ার্ড</translation>
 <translation id="2224444042887712269">এই সেটিংটি <ph name="OWNER_EMAIL" /> এর৷</translation>
+<translation id="2224471211857467033">অ্যাক্সেসিবিলিটি ইভেন্ট</translation>
 <translation id="2224551243087462610">ফোল্ডার নাম সম্পাদনা করুন</translation>
 <translation id="2226449515541314767">MIDI ডিভাইসগুলির সম্পূর্ণ নিয়ন্ত্রণ থেকে এই সাইটিকে অবরুদ্ধ করা হয়েছে৷</translation>
 <translation id="2226720438730111184">কী ঘটছে তা আমাদের বলুন</translation>
@@ -5061,7 +5063,6 @@
 <translation id="8898786835233784856">পরবর্তী ট্যাব বেছে নিন</translation>
 <translation id="8898840733695078011">সংকেতের ক্ষমতা</translation>
 <translation id="8899851313684471736">নতুন &amp;উইন্ডোতে লিঙ্ক খুলুন</translation>
-<translation id="8902081783136172774">আপনার শুরুর পৃষ্ঠার জন্য একটি ওয়ালপেপার বেছে নিন</translation>
 <translation id="8902667442496790482">'বাছুন ও শুনুন'-এর সেটিংস খুলুন</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">সোর্স পরিবর্তন করুন</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 827fd964..63c99f7 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Obre la configuració de la pantalla</translation>
 <translation id="1572266655485775982">Activa la Wi-Fi</translation>
 <translation id="1572876035008611720">Introdueix el correu electrònic</translation>
-<translation id="1573150740912592860">Desa el que estiguis fent</translation>
 <translation id="1576594961618857597">Avatar blanc predeterminat</translation>
 <translation id="1581962803218266616">Mostra a Finder</translation>
 <translation id="1584990664401018068">És possible que la xarxa Wi-Fi que esteu fent servir (<ph name="NETWORK_ID" />) sol·liciti que us autentiqueu.</translation>
@@ -616,7 +615,7 @@
 <translation id="1932026958134051332">Opcions d'Accés amb interruptors</translation>
 <translation id="1932098463447129402">No abans</translation>
 <translation id="1933809209549026293">Connecteu un cursor o un teclat. Si feu servir un dispositiu Bluetooth, assegureu-vos que estigui preparat per a la sincronització.</translation>
-<translation id="1937774647013465102">No es pot importar el tipus d'arquitectura <ph name="ARCHITECTURE_CONTAINER" /> del contenidor amb aquest dispositiu, que és <ph name="ARCHITECTURE_DEVICE" />. Pots provar de restaurar el contenidor en un altre dispositiu o accedir als fitxers que inclou la imatge del contenidor obrint l'aplicació Fitxers.</translation>
+<translation id="1937774647013465102">No es pot importar el tipus d'arquitectura de contenidors<ph name="ARCHITECTURE_CONTAINER" /> amb aquest dispositiu, que és <ph name="ARCHITECTURE_DEVICE" />. Pots provar de restaurar el contenidor en un altre dispositiu o accedir als fitxers que inclou la imatge del contenidor obrint l'aplicació Fitxers.</translation>
 <translation id="1938351510777341717">Ordre externa</translation>
 <translation id="1940546824932169984">Dispositius connectats</translation>
 <translation id="1944921356641260203">S'ha trobat una actualització.</translation>
@@ -1490,7 +1489,7 @@
 <translation id="3317459757438853210">A dues cares</translation>
 <translation id="3317678681329786349">La càmera i el micròfon estan bloquejats</translation>
 <translation id="3319048459796106952">Finestra d'incògnit nova</translation>
-<translation id="3323521181261657960">Que bé! Tens més temps de connexió</translation>
+<translation id="3323521181261657960">Has obtingut més temps de connexió!</translation>
 <translation id="3325910708063135066">La càmera i el micròfon estan desactivats a les preferències del sistema de Mac</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informació de l'aplicació</translation>
@@ -1710,7 +1709,8 @@
 <translation id="3664511988987167893">Icona de l'extensió</translation>
 <translation id="3665589677786828986">Chrome ha detectat que un altre programa ha malmès alguns dels paràmetres de configuració i els ha restablert als valors predeterminats originals.</translation>
 <translation id="3668570675727296296">Configuració d'idioma</translation>
-<translation id="366867565525278777">No s'ha pogut fer la instal·lació perquè falta espai d'emmagatzematge. Calen almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, suprimeix fitxers de l'emmagatzematge del dispositiu.</translation>
+<translation id="366867565525278777">No s'ha pogut fer la instal·lació perquè falta espai d'emmagatzematge. Cal
+en almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, suprimeix fitxers de l'emmagatzematge del dispositiu.</translation>
 <translation id="3668801437375206837">Per diagnosticar millor els problemes del Bluetooth, els Googlers poden incloure registres de Bluetooth addicionals als seus informes de suggeriments. Si aquesta opció està marcada, l'informe inclourà registres BTSnoop i HCI de la teva sessió actual, que es depurarà per suprimir tanta informació d'identificació personal (IIP) com sigui possible. L'accés a aquests registres es restringirà als gestors del grup de productes de Chrome OS a Listnr. Els registres se suprimiran permanentment al cap de 90 dies.</translation>
 <translation id="3668823961463113931">Gestors</translation>
 <translation id="3670113805793654926">Dispositius de qualsevol proveïdor</translation>
@@ -3838,7 +3838,7 @@
 <translation id="7022562585984256452">S'ha definit la pàgina d'inici.</translation>
 <translation id="7025190659207909717">Gestió de serveis de dades mòbils</translation>
 <translation id="7029809446516969842">Contrasenyes</translation>
-<translation id="7031608529463141342"><ph name="WINDOW_TITLE" />: port en sèrie connecat</translation>
+<translation id="7031608529463141342"><ph name="WINDOW_TITLE" />: port en sèrie connectat</translation>
 <translation id="7031962166228839643">El mòdul TPM s'està preparant (aquest procés pot trigar una estona). Espereu...</translation>
 <translation id="7037509989619051237">Text de prova</translation>
 <translation id="7039326228527141150">Accedir a dispositius USB del proveïdor <ph name="VENDOR_NAME" /></translation>
@@ -4399,7 +4399,7 @@
 <translation id="7877451762676714207">Error de servidor desconegut. Torneu-ho a provar o contacteu amb l'administrador del servidor.</translation>
 <translation id="7877680364634660272">Visita guiada</translation>
 <translation id="7878562273885520351">La teva contrasenya pot estar en perill</translation>
-<translation id="7880823633812189969">Les dades locals se suprimiran en reiniciar</translation>
+<translation id="7880823633812189969">Les dades locals se suprimiran en reiniciar el dispositiu</translation>
 <translation id="7881483672146086348">Mostra el compte</translation>
 <translation id="7882358943899516840">Tipus de proveïdor</translation>
 <translation id="7885253890047913815">Destinacions recents</translation>
@@ -5060,7 +5060,6 @@
 <translation id="8898786835233784856">Selecciona la pestanya següent</translation>
 <translation id="8898840733695078011">Intensitat del senyal</translation>
 <translation id="8899851313684471736">Obre l'enllaç en una &amp;finestra nova</translation>
-<translation id="8902081783136172774">Selecciona un fons de pantalla per a la pàgina d'inici</translation>
 <translation id="8902667442496790482">Obre la configuració d'Escolta la selecció</translation>
 <translation id="8904976895050290827">Sincronització de Google Chrome</translation>
 <translation id="890616557918890486">Canvia la font</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 86a32bb..56d2782 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Otevřít nastavení displeje</translation>
 <translation id="1572266655485775982">Aktivovat Wi-Fi</translation>
 <translation id="1572876035008611720">Zadejte svůj e-mail</translation>
-<translation id="1573150740912592860">Uložení postupu</translation>
 <translation id="1576594961618857597">Výchozí bílý avatar</translation>
 <translation id="1581962803218266616">Zobrazit ve službě Finder</translation>
 <translation id="1584990664401018068">Síť Wi-Fi, kterou používáte (<ph name="NETWORK_ID" />), může vyžadovat ověření.</translation>
@@ -5060,7 +5059,6 @@
 <translation id="8898786835233784856">Vybrat další kartu</translation>
 <translation id="8898840733695078011">Síla signálu</translation>
 <translation id="8899851313684471736">Otevřít o&amp;dkaz v novém okně</translation>
-<translation id="8902081783136172774">Vyberte tapetu pro svou úvodní stránku</translation>
 <translation id="8902667442496790482">Otevřít nastavení poslechu vybraného textu</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Změnit zdroj</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 1366625d..118c7b55 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Åbn enhedens skærmindstillinger</translation>
 <translation id="1572266655485775982">Aktivér Wi-Fi</translation>
 <translation id="1572876035008611720">Angiv din mailadresse</translation>
-<translation id="1573150740912592860">Gem dine ændringer</translation>
 <translation id="1576594961618857597">Hvid standardavatar</translation>
 <translation id="1581962803218266616">Vis i Finder</translation>
 <translation id="1584990664401018068">Det Wi-Fi-netværk, du bruger (<ph name="NETWORK_ID" />), kan kræve godkendelse.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">Enheden kunne ikke knyttes til domænet. Sørg for, at du ikke har overskredet antallet af enheder, du kan tilføje.</translation>
 <translation id="1744108098763830590">baggrundsside</translation>
 <translation id="1745520510852184940">Gør altid dette</translation>
+<translation id="1746402432151920942">Id for beskyttet medie</translation>
 <translation id="175196451752279553">G&amp;enåbn lukket fane</translation>
 <translation id="1753905327828125965">Mest besøgte</translation>
 <translation id="1756681705074952506">Indtastningsmetode</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">Ikke logget ind</translation>
 <translation id="1832511806131704864">Telefonændring opdateret</translation>
 <translation id="1834503245783133039">Downloaden blev ikke fuldført: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-enheder</translation>
 <translation id="1838374766361614909">Ryd søgning</translation>
 <translation id="1841545962859478868">Administratoren af enheden kan overvåge følgende:</translation>
 <translation id="1841616161104323629">Manglende enhedsregistrering.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">Rapportér et problem</translation>
 <translation id="2220572644011485463">Pin- eller adgangskode</translation>
 <translation id="2224444042887712269">Denne indstilling tilhører <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Handlinger foretaget i hjælpetilstand</translation>
 <translation id="2224551243087462610">Rediger mappenavn</translation>
 <translation id="2226449515541314767">Dette website er blevet blokeret fra at have fuld kontrol over MIDI-enheder.</translation>
 <translation id="2226720438730111184">Fortæl os, hvad der sker</translation>
@@ -5063,7 +5065,6 @@
 <translation id="8898786835233784856">Vælg næste fane</translation>
 <translation id="8898840733695078011">Signalstyrke</translation>
 <translation id="8899851313684471736">Åbn link i nyt &amp;vindue</translation>
-<translation id="8902081783136172774">Vælg en baggrund til din startside</translation>
 <translation id="8902667442496790482">Åbn indstillinger for Tekstoplæsning</translation>
 <translation id="8904976895050290827">Chrome-synkronisering</translation>
 <translation id="890616557918890486">Skift kilde</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index bc1eabec..d247e15 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Einstellungen für Anzeigegerät öffnen</translation>
 <translation id="1572266655485775982">WLAN-Aktivierung</translation>
 <translation id="1572876035008611720">E-Mail-Adresse eingeben</translation>
-<translation id="1573150740912592860">Fortschritt speichern</translation>
 <translation id="1576594961618857597">Weißer Standardavatar</translation>
 <translation id="1581962803218266616">Im Finder anzeigen</translation>
 <translation id="1584990664401018068">Eventuell müssen Sie sich bei dem verwendeten WLAN (<ph name="NETWORK_ID" />) authentifizieren.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">Das Gerät konnte der Domain nicht beitreten. Sie dürfen nicht mehr als die erlaubte Anzahl von Geräten hinzufügen.</translation>
 <translation id="1744108098763830590">Hintergrundseite</translation>
 <translation id="1745520510852184940">Immer so verfahren</translation>
+<translation id="1746402432151920942">ID für geschützte Medien</translation>
 <translation id="175196451752279553">Geschlossenen Tab wieder öffn&amp;en</translation>
 <translation id="1753905327828125965">Meistbesucht</translation>
 <translation id="1756681705074952506">Eingabemethode</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">Nicht angemeldet</translation>
 <translation id="1832511806131704864">Änderung übernommen</translation>
 <translation id="1834503245783133039">Download fehlgeschlagen: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-Geräte</translation>
 <translation id="1838374766361614909">Suche löschen</translation>
 <translation id="1841545962859478868">Der Geräteadministrator überwacht eventuell Folgendes:</translation>
 <translation id="1841616161104323629">Fehlender Gerätedatensatz.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">Problem melden</translation>
 <translation id="2220572644011485463">PIN oder Passwort</translation>
 <translation id="2224444042887712269">Inhaber dieser Einstellung ist <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Bedienungshilfen</translation>
 <translation id="2224551243087462610">Ordnername bearbeiten</translation>
 <translation id="2226449515541314767">Dieser Website wurde keine vollständige Kontrolle über MIDI-Geräte gewährt.</translation>
 <translation id="2226720438730111184">Sagen Sie uns, was los ist</translation>
@@ -5059,7 +5061,6 @@
 <translation id="8898786835233784856">Nächsten Tab auswählen</translation>
 <translation id="8898840733695078011">Signalstärke</translation>
 <translation id="8899851313684471736">Link in neuem &amp;Fenster öffnen</translation>
-<translation id="8902081783136172774">Hintergrund für Ihre Startseite auswählen</translation>
 <translation id="8902667442496790482">Einstellungen für "Vorlesen" öffnen</translation>
 <translation id="8904976895050290827">Google Chrome Sync</translation>
 <translation id="890616557918890486">Quelle ändern</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index a8e9f5f..e096fea 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Άνοιγμα των ρυθμίσεων οθόνης της συσκευής</translation>
 <translation id="1572266655485775982">Ενεργοποίηση Wi-Fi</translation>
 <translation id="1572876035008611720">Εισαγάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας</translation>
-<translation id="1573150740912592860">Αποθήκευση της προόδου σας</translation>
 <translation id="1576594961618857597">Προεπιλεγμένο λευκό avatar</translation>
 <translation id="1581962803218266616">Εμφάνιση στο Finder</translation>
 <translation id="1584990664401018068">Το δίκτυο Wi-Fi που χρησιμοποιείτε (<ph name="NETWORK_ID" />) ενδέχεται να απαιτεί έλεγχο ταυτότητας.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Δεν είναι δυνατή η σύνδεση της συσκευής στον τομέα. Βεβαιωθείτε ότι δεν έχετε υπερβεί τον αριθμό των συσκευών που μπορείτε να προσθέσετε.</translation>
 <translation id="1744108098763830590">σελίδα παρασκηνίου</translation>
 <translation id="1745520510852184940">Να γίνεται πάντα</translation>
+<translation id="1746402432151920942">Αναγνωριστικό προστατευμένων μέσων</translation>
 <translation id="175196451752279553">Ε&amp;παναφορά καρτέλας που έχει κλείσει</translation>
 <translation id="1753905327828125965">Πιο Δημοφιλή</translation>
 <translation id="1756681705074952506">Μέθοδος εισόδου</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Δεν είναι συνδεδεμένος</translation>
 <translation id="1832511806131704864">Η αλλαγή του τηλεφώνου ενημερώθηκε</translation>
 <translation id="1834503245783133039">Ανεπιτυχής λήψη: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Συσκευές MIDI</translation>
 <translation id="1838374766361614909">Διαγραφή αναζητήσεων</translation>
 <translation id="1841545962859478868">Ο διαχειριστής της συσκευής μπορεί να παρακολουθεί τα παρακάτω:</translation>
 <translation id="1841616161104323629">Λείπει κάποιο αρχείο συσκευής.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Αναφορά προβλήματος</translation>
 <translation id="2220572644011485463">PIN ή κωδικός πρόσβασης</translation>
 <translation id="2224444042887712269">Αυτή η ρύθμιση ανήκει στον χρήστη <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Συμβάντα προσβασιμότητας</translation>
 <translation id="2224551243087462610">Επεξεργασία ονόματος φακέλου</translation>
 <translation id="2226449515541314767">Αυτός ο ιστότοπος έχει αποκλειστεί από τον πλήρη έλεγχο των συσκευών MIDI.</translation>
 <translation id="2226720438730111184">Πείτε μας τι συμβαίνει</translation>
@@ -5063,7 +5065,6 @@
 <translation id="8898786835233784856">Επιλογή Επόμενης Καρτέλας</translation>
 <translation id="8898840733695078011">Ισχύς σήματος</translation>
 <translation id="8899851313684471736">Άνοιγμα συνδέσμου σε νέο παρά&amp;θυρο</translation>
-<translation id="8902081783136172774">Επιλέξτε μια ταπετσαρία για την αρχική σελίδα σας</translation>
 <translation id="8902667442496790482">Άνοιγμα ρυθμίσεων λειτουργίας "Επιλέξτε για εκφώνηση"</translation>
 <translation id="8904976895050290827">Συγχρονισμός Chrome</translation>
 <translation id="890616557918890486">Αλλαγή πηγής</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index add3c3464..b816178a 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Open display device settings</translation>
 <translation id="1572266655485775982">Wi-Fi enable</translation>
 <translation id="1572876035008611720">Enter your email</translation>
-<translation id="1573150740912592860">Save your progress</translation>
 <translation id="1576594961618857597">Default white avatar</translation>
 <translation id="1581962803218266616">Show in Finder</translation>
 <translation id="1584990664401018068">The Wi-Fi network that you are using (<ph name="NETWORK_ID" />) may require authentication.</translation>
@@ -5066,7 +5065,6 @@
 <translation id="8898786835233784856">Select Next Tab</translation>
 <translation id="8898840733695078011">Signal strength</translation>
 <translation id="8899851313684471736">Open link in new &amp;window</translation>
-<translation id="8902081783136172774">Pick a wallpaper for your start page</translation>
 <translation id="8902667442496790482">Open Select to Speak settings</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Change source</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index fb20ea3..017a06e 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Abrir configuración de pantalla</translation>
 <translation id="1572266655485775982">Habilitar Wi-Fi</translation>
 <translation id="1572876035008611720">Ingresa tu correo electrónico.</translation>
-<translation id="1573150740912592860">Guardar el progreso</translation>
 <translation id="1576594961618857597">Avatar blanco predeterminado</translation>
 <translation id="1581962803218266616">Mostrar en Buscador</translation>
 <translation id="1584990664401018068">La red Wi-Fi que estás usando (<ph name="NETWORK_ID" />) podría exigir autenticación.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">No se pudo unir el dispositivo al dominio. Asegúrate de no haber superado la cantidad de dispositivos que puedes agregar.</translation>
 <translation id="1744108098763830590">página en segundo plano</translation>
 <translation id="1745520510852184940">Realizar siempre esta acción</translation>
+<translation id="1746402432151920942">Identificador de medios protegidos</translation>
 <translation id="175196451752279553">Volver a abrir una pestaña cerrada</translation>
 <translation id="1753905327828125965">Más visitados</translation>
 <translation id="1756681705074952506">Método de entrada</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">No has accedido.</translation>
 <translation id="1832511806131704864">Cambio de teléfono actualizado</translation>
 <translation id="1834503245783133039">No se pudo realizar la descarga: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Dispositivos MIDI</translation>
 <translation id="1838374766361614909">Borrar la búsqueda</translation>
 <translation id="1841545962859478868">Es posible que el administrador de dispositivos supervise lo siguiente:</translation>
 <translation id="1841616161104323629">Falta un registro de dispositivo.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">Informar un problema</translation>
 <translation id="2220572644011485463">PIN o contraseña</translation>
 <translation id="2224444042887712269">Esta configuración pertenece a <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Eventos de accesibilidad</translation>
 <translation id="2224551243087462610">Editar nombre de carpeta</translation>
 <translation id="2226449515541314767">Se bloqueó este sitio para que no tenga el control total de los dispositivos MIDI</translation>
 <translation id="2226720438730111184">Cuéntanos cuál es el problema</translation>
@@ -5062,7 +5064,6 @@
 <translation id="8898786835233784856">Seleccionar siguiente pestaña</translation>
 <translation id="8898840733695078011">Intensidad de la señal</translation>
 <translation id="8899851313684471736">Abrir enlace en una &amp;ventana nueva</translation>
-<translation id="8902081783136172774">Elige un fondo de pantalla para tu página de inicio</translation>
 <translation id="8902667442496790482">Abrir configuración de Seleccionar para pronunciar</translation>
 <translation id="8904976895050290827">Sincronización de Chrome</translation>
 <translation id="890616557918890486">Cambiar la fuente</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 5ca839b..0c8743f 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Abrir la configuración de la pantalla</translation>
 <translation id="1572266655485775982">Habilitar Wi-Fi</translation>
 <translation id="1572876035008611720">Introduce tu correo electrónico</translation>
-<translation id="1573150740912592860">Guarda tu progreso</translation>
 <translation id="1576594961618857597">Avatar blanco predeterminado</translation>
 <translation id="1581962803218266616">Mostrar en Finder</translation>
 <translation id="1584990664401018068">La red Wi-Fi que estás utilizando (<ph name="NETWORK_ID" />) puede requerir autenticación.</translation>
@@ -5064,7 +5063,6 @@
 <translation id="8898786835233784856">Seleccionar siguiente pestaña</translation>
 <translation id="8898840733695078011">Intensidad de la señal</translation>
 <translation id="8899851313684471736">Abrir enlace en una &amp;ventana nueva</translation>
-<translation id="8902081783136172774">Elige un fondo de pantalla para la página de inicio</translation>
 <translation id="8902667442496790482">Abrir los ajustes de Enunciar Selección</translation>
 <translation id="8904976895050290827">Sincronización de Chrome</translation>
 <translation id="890616557918890486">Cambiar fuente</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index b967535a..a1d0ab8d 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Kuvaseadme seadete avamine</translation>
 <translation id="1572266655485775982">WiFi lubamine</translation>
 <translation id="1572876035008611720">Sisestage oma e-posti aadress</translation>
-<translation id="1573150740912592860">Salvestage edenemisteave</translation>
 <translation id="1576594961618857597">Valge vaikeavatar</translation>
 <translation id="1581962803218266616">Näita otsijas</translation>
 <translation id="1584990664401018068">Teie kasutatav WiFi-võrk (<ph name="NETWORK_ID" />) võib nõuda autentimist.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Seadet ei saa domeeniga liita. Veenduge, et lisatavate seadmete maksimumarv ei oleks ületatud.</translation>
 <translation id="1744108098763830590">taustleht</translation>
 <translation id="1745520510852184940">Tee seda alati</translation>
+<translation id="1746402432151920942">Kaitstud meedia identifikaator</translation>
 <translation id="175196451752279553">&amp;Ava suletud vaheleht uuesti</translation>
 <translation id="1753905327828125965">Enim külastatud</translation>
 <translation id="1756681705074952506">Sisestusmeetod</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Pole sisse logitud</translation>
 <translation id="1832511806131704864">Telefoni muutmist värskendati</translation>
 <translation id="1834503245783133039">Allalaadimine nurjus: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-seadmed</translation>
 <translation id="1838374766361614909">Otsingu kustutamine</translation>
 <translation id="1841545962859478868">Seadme administraator võib jälgida järgmist:</translation>
 <translation id="1841616161104323629">Seadme kirje puudub.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Probleemist teatamine</translation>
 <translation id="2220572644011485463">PIN-kood või parool</translation>
 <translation id="2224444042887712269">Seade omanik on <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Juurdepääsetavuse sündmused</translation>
 <translation id="2224551243087462610">Muuda kausta nime</translation>
 <translation id="2226449515541314767">Saidil pole lubatud MIDI-seadmeid täielikult juhtida.</translation>
 <translation id="2226720438730111184">Andke meile teada, mis toimub</translation>
@@ -5065,7 +5067,6 @@
 <translation id="8898786835233784856">Vali järgmine vaheleht</translation>
 <translation id="8898840733695078011">Signaali tugevus</translation>
 <translation id="8899851313684471736">Ava link uues &amp;aknas</translation>
-<translation id="8902081783136172774">Valige oma avalehe taustapilt</translation>
 <translation id="8902667442496790482">Ava funktsiooni Vali ja kuula seaded</translation>
 <translation id="8904976895050290827">Chrome'i sünkroonimine</translation>
 <translation id="890616557918890486">Vaheta allikat</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 35f2cff..69345a96 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">باز کردن تنظیمات نمایشگر دستگاه</translation>
 <translation id="1572266655485775982">‏فعال کردن Wi-Fi</translation>
 <translation id="1572876035008611720">ایمیل‌تان را وارد کنید</translation>
-<translation id="1573150740912592860">ذخیره پیشرفت</translation>
 <translation id="1576594961618857597">چهره‌نمای پیش‌فرض سفید</translation>
 <translation id="1581962803218266616">‏نمایش در Finder</translation>
 <translation id="1584990664401018068">‏شبکه Wi-Fi مورد استفاده شما (<ph name="NETWORK_ID" />) احتمالاً نیاز به احراز هویت دارد.</translation>
@@ -613,7 +612,7 @@
 <translation id="1932026958134051332">گزینه‌های دسترسی سوئیچ</translation>
 <translation id="1932098463447129402">نه قبل از</translation>
 <translation id="1933809209549026293">لطفاً موشواره یا صفحه‌کلیدی را وصل کنید. اگر از دستگاه بلوتوث استفاده می‌کنید، مطمئن شوید آماده مرتبط‌سازی است.</translation>
-<translation id="1937774647013465102">‏نمی‌توان با این دستگاه که <ph name="ARCHITECTURE_DEVICE" /> است، محتوی با نوع معماری <ph name="ARCHITECTURE_CONTAINER" /> را وارد کرد. می‌توانید این محتوی را در دستگاه دیگری بازیابی کنید، یا اینکه برنامه Files را باز کنید و ازطریق آن به فایل‌های درون این تصویر محتوی دسترسی یابید.</translation>
+<translation id="1937774647013465102">‏نمی‌توان با این دستگاه که <ph name="ARCHITECTURE_DEVICE" /> است، محتوای با نوع معماری <ph name="ARCHITECTURE_CONTAINER" /> را وارد کرد. می‌توانید این محتوا را در دستگاه دیگری بازیابی کنید، یا اینکه برنامه Files را باز کنید و ازطریق آن به فایل‌های درون این تصویر محتوی دسترسی یابید.</translation>
 <translation id="1938351510777341717">فرمان خارجی</translation>
 <translation id="1940546824932169984">دستگاه‌های متصل</translation>
 <translation id="1944921356641260203">به‌روزرسانی پیدا شد</translation>
@@ -5063,7 +5062,6 @@
 <translation id="8898786835233784856">انتخاب برگه بعدی</translation>
 <translation id="8898840733695078011">قدرت سیگنال</translation>
 <translation id="8899851313684471736">باز کردن پیوند در &amp;پنجره جدید</translation>
-<translation id="8902081783136172774">یک کاغذدیواری برای صفحه شروع خود انتخاب کنید</translation>
 <translation id="8902667442496790482">باز کردن تنظیمات «انتخاب برای شنیدن»</translation>
 <translation id="8904976895050290827">‏همگام‌سازی Chrome</translation>
 <translation id="890616557918890486">تغییر منبع</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 51aae707..799d8d2e 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Avaa näytön laiteasetukset</translation>
 <translation id="1572266655485775982">Wi-Fi käyttöön</translation>
 <translation id="1572876035008611720">Anna sähköpostiosoitteesi.</translation>
-<translation id="1573150740912592860">Tallenna edistyminen</translation>
 <translation id="1576594961618857597">Valkoinen oletusavatar</translation>
 <translation id="1581962803218266616">Näytä Finderissä</translation>
 <translation id="1584990664401018068">Käyttämäsi Wi-Fi-verkko (<ph name="NETWORK_ID" />) saattaa edellyttää todennusta.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Laitetta ei voi liittää verkkotunnukseen. Varmista, ettei lisättävien laitteiden kiintiösi ole ylittynyt,</translation>
 <translation id="1744108098763830590">taustasivu:</translation>
 <translation id="1745520510852184940">Käännä aina</translation>
+<translation id="1746402432151920942">Suojatun median tunniste</translation>
 <translation id="175196451752279553">A&amp;vaa suljettu välilehti uudelleen</translation>
 <translation id="1753905327828125965">Käydyimmät</translation>
 <translation id="1756681705074952506">Syöttötapa</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Ei kirjautunut</translation>
 <translation id="1832511806131704864">Puhelimen vaihdos päivitettiin</translation>
 <translation id="1834503245783133039">Lataus epäonnistui: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-laitteet</translation>
 <translation id="1838374766361614909">Tyhjennä haku</translation>
 <translation id="1841545962859478868">Laitteen järjestelmänvalvoja voi seurata näitä:</translation>
 <translation id="1841616161104323629">Laitetallenne puuttuu.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Ilmoita ongelmasta</translation>
 <translation id="2220572644011485463">PIN-koodi tai salasana</translation>
 <translation id="2224444042887712269">Tämä asetus kuuluu käyttäjälle <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Esteettömyystapahtumat</translation>
 <translation id="2224551243087462610">Muokkaa kansion nimeä</translation>
 <translation id="2226449515541314767">Tältä sivustolta on estetty MIDI-laitteiden täysi käyttöoikeus.</translation>
 <translation id="2226720438730111184">Kerro, mitä tapahtuu</translation>
@@ -5063,7 +5065,6 @@
 <translation id="8898786835233784856">Valitse seuraava välilehti</translation>
 <translation id="8898840733695078011">Signaalin vahvuus</translation>
 <translation id="8899851313684471736">Avaa linkki uudessa &amp;ikkunassa</translation>
-<translation id="8902081783136172774">Aloitussivun taustakuvan valinta</translation>
 <translation id="8902667442496790482">Avaa Teksti puhuttuna -asetukset</translation>
 <translation id="8904976895050290827">Chromen synkronointi</translation>
 <translation id="890616557918890486">Vaihda lähdettä</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index f8186c9..fa8fb4db 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Buksan ang mga setting ng display device</translation>
 <translation id="1572266655485775982">I-enable ang Wi-Fi</translation>
 <translation id="1572876035008611720">Ilagay ang iyong email</translation>
-<translation id="1573150740912592860">I-save ang iyong progress</translation>
 <translation id="1576594961618857597">Default na puting avatar</translation>
 <translation id="1581962803218266616">Show in Finder</translation>
 <translation id="1584990664401018068">Maaaring mangailangan ng pagpapatotoo ang Wi-Fi network na ginagamit mo (<ph name="NETWORK_ID" />).</translation>
@@ -5069,7 +5068,6 @@
 <translation id="8898786835233784856">Select Next Tab</translation>
 <translation id="8898840733695078011">Lakas ng signal</translation>
 <translation id="8899851313684471736">Buksan ang link sa bagong &amp;window</translation>
-<translation id="8902081783136172774">Pumili ng wallpaper para sa iyong panimulang page</translation>
 <translation id="8902667442496790482">Buksan ang mga setting ng Select to Speak</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Baguhin ang source</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index b52412c3..26051ca 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Ouvrir les paramètres de l'écran</translation>
 <translation id="1572266655485775982">Activation du Wi-Fi</translation>
 <translation id="1572876035008611720">Saisissez votre adresse e-mail</translation>
-<translation id="1573150740912592860">Enregistrer votre progression</translation>
 <translation id="1576594961618857597">Avatar blanc par défaut</translation>
 <translation id="1581962803218266616">Afficher dans le Finder</translation>
 <translation id="1584990664401018068">Pour utiliser ce réseau Wi-Fi (<ph name="NETWORK_ID" />), vous devrez peut-être vous identifier.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Impossible d'associer l'appareil au domaine. Vérifiez que vous n'avez pas dépassé le nombre d'appareils pouvant être ajoutés.</translation>
 <translation id="1744108098763830590">page en arrière-plan</translation>
 <translation id="1745520510852184940">Toujours procéder ainsi</translation>
+<translation id="1746402432151920942">Identifiant du contenu multimédia protégé</translation>
 <translation id="175196451752279553">&amp;Rouvrir l'onglet fermé</translation>
 <translation id="1753905327828125965">Les + visités</translation>
 <translation id="1756681705074952506">Mode de saisie</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Non connecté</translation>
 <translation id="1832511806131704864">Changement de téléphone mis à jour</translation>
 <translation id="1834503245783133039">Échec du téléchargement : <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Appareils MIDI</translation>
 <translation id="1838374766361614909">Effacer la recherche</translation>
 <translation id="1841545962859478868">L'administrateur de cet appareil peut contrôler les éléments suivants :</translation>
 <translation id="1841616161104323629">Enregistrement de l'appareil manquant.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Signaler un problème</translation>
 <translation id="2220572644011485463">Code ou mot de passe</translation>
 <translation id="2224444042887712269">Ce paramètre appartient à <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Événements d'accessibilité</translation>
 <translation id="2224551243087462610">Modifier le nom du dossier</translation>
 <translation id="2226449515541314767">Le contrôle total des appareils MIDI a été bloqué pour ce site.</translation>
 <translation id="2226720438730111184">Décrivez-nous le problème rencontré</translation>
@@ -5065,7 +5067,6 @@
 <translation id="8898786835233784856">Sélectionner l'onglet suivant</translation>
 <translation id="8898840733695078011">Intensité du signal</translation>
 <translation id="8899851313684471736">Ouvrir le lien dans une nouvelle &amp;fenêtre</translation>
-<translation id="8902081783136172774">Choisir un fond d'écran pour votre page d'accueil</translation>
 <translation id="8902667442496790482">Ouvrir les paramètres de "Sélectionner pour prononcer"</translation>
 <translation id="8904976895050290827">Synchronisation Chrome</translation>
 <translation id="890616557918890486">Modifier la source</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 4707a3c1..7933200 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">ડિસ્પ્લે ડિવાઇસ સેટિંગ ખોલો</translation>
 <translation id="1572266655485775982">વાઇ-ફાઇ ચાલુ</translation>
 <translation id="1572876035008611720">તમારું ઇમેઇલ દાખલ કરો</translation>
-<translation id="1573150740912592860">તમારી પ્રગતિ સાચવો</translation>
 <translation id="1576594961618857597">ડિફોલ્ટ સફેદ અવતાર</translation>
 <translation id="1581962803218266616">ફાઇન્ડર માં બતાવો</translation>
 <translation id="1584990664401018068">તમે ઉપયોગમાં લઈ રહ્યા છો તે વાઇ-ફાઇ (<ph name="NETWORK_ID" />) માટે, પ્રમાણીકરણની જરૂર હોઈ શકે છે.</translation>
@@ -5059,7 +5058,6 @@
 <translation id="8898786835233784856">આગલું ટૅબ પસંદ કરો</translation>
 <translation id="8898840733695078011">સિગ્નલ પ્રબળતા</translation>
 <translation id="8899851313684471736">નવી &amp;વિંડોમાં લિંક ખોલો</translation>
-<translation id="8902081783136172774">તમારા શરૂઆતના પેજ માટે વૉલપેપર પસંદ કરો</translation>
 <translation id="8902667442496790482">સાંભળવા માટે પસંદ કરોના સેટિંગ ખોલો</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">સ્રોત બદલો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 4f6949b..dc95c97 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">डिसप्ले डिवाइस सेटिंग खोलें</translation>
 <translation id="1572266655485775982">वाई-फ़ाई चालू करें</translation>
 <translation id="1572876035008611720">अपना ईमेल डालें</translation>
-<translation id="1573150740912592860">अपनी प्रगति सेव करें</translation>
 <translation id="1576594961618857597">डिफ़ॉल्ट सफ़ेद अवतार</translation>
 <translation id="1581962803218266616">खोजकर्ता में दिखाएं</translation>
 <translation id="1584990664401018068">आप जिस वाई-फ़ाई नेटवर्क (<ph name="NETWORK_ID" />) का उपयोग कर रहे हैं उसे प्रमाणीकरण की आवश्‍यकता है.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">डिवाइस को डोमेन से नहीं जोड़ सकते. पक्का करें कि आपने जोड़े जा सकने वाले डिवाइस की संख्या पार नहीं की है.</translation>
 <translation id="1744108098763830590">पेजभूमि पेज</translation>
 <translation id="1745520510852184940">हमेशा ऐसा करें</translation>
+<translation id="1746402432151920942">सुरक्षित सामग्री पहचानकर्ता</translation>
 <translation id="175196451752279553">बंद किए गए टैब पु&amp;न: खोलें</translation>
 <translation id="1753905327828125965">सबसे ज़्यादा देखे गए</translation>
 <translation id="1756681705074952506">इनपुट का तरीका</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">प्रवेश नहीं है</translation>
 <translation id="1832511806131704864">फ़ोन बदलाव अपडेट किया गया</translation>
 <translation id="1834503245783133039">फ़ाइल डाउनलोड नहीं हो सकी: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI डिवाइस</translation>
 <translation id="1838374766361614909">खोज साफ़ करें</translation>
 <translation id="1841545962859478868">डिवाइस व्यवस्थापक इन चीज़ों की निगरानी कर सकता है:</translation>
 <translation id="1841616161104323629">डिवाइस का रिकॉर्ड मौजूद नहीं है.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">किसी समस्या की रिपोर्ट करें</translation>
 <translation id="2220572644011485463">पिन या पासवर्ड</translation>
 <translation id="2224444042887712269">यह सेटिंग <ph name="OWNER_EMAIL" /> से संबंधित है.</translation>
+<translation id="2224471211857467033">सुलभता इवेंट</translation>
 <translation id="2224551243087462610">फ़ोल्डर के नाम में बदलाव करें</translation>
 <translation id="2226449515541314767">इस साइट को MIDI डिवाइस का पूरा नियंत्रण रखने से ब्लॉक कर दिया गया है.</translation>
 <translation id="2226720438730111184">हमें बताएं कि क्या हो रहा है</translation>
@@ -5062,7 +5064,6 @@
 <translation id="8898786835233784856">अगले टैब को चुनें</translation>
 <translation id="8898840733695078011">सिग्‍नल शक्ति</translation>
 <translation id="8899851313684471736">लिंक को नई &amp;विंडो में खोलें</translation>
-<translation id="8902081783136172774">अपने शुरुआत करने के पेज के लिए कोई वॉलपेपर चुनें</translation>
 <translation id="8902667442496790482">चुनें और सुनें सेटिंग खोलें</translation>
 <translation id="8904976895050290827">Chrome सिंक</translation>
 <translation id="890616557918890486">स्रोत बदलें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 5069d27..acc4807e 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -238,6 +238,7 @@
 <translation id="1361655923249334273">Nekorišteno</translation>
 <translation id="1361872463926621533">Reproduciraj zvuk pri pokretanju</translation>
 <translation id="1364702626840264065">{NUM_TABS,plural, =1{Zatvori karticu}one{Zatvori kartice}few{Zatvori kartice}other{Zatvori kartice}}</translation>
+<translation id="1365180424462182382">Vašim <ph name="BEGIN_LINK" />preglednikom upravlja<ph name="END_LINK" /> <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1366177842110999534">Pokrenite Linuxove alate, uređivače i IDE-jeve na uređaju <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Saznajte više&lt;/a&gt;</translation>
 <translation id="1367951781824006909">Odaberite datoteku</translation>
 <translation id="1371301976177520732">Vaše oznake, zaporke, povijest i još mnogo na svim vašim uređajima</translation>
@@ -370,7 +371,6 @@
 <translation id="1568323446248056064">Otvorite postavke zaslona na uređaju</translation>
 <translation id="1572266655485775982">Omogućivanje Wi-Fija</translation>
 <translation id="1572876035008611720">Unesite e-adresu</translation>
-<translation id="1573150740912592860">Spremite svoj napredak</translation>
 <translation id="1576594961618857597">Zadani bijeli avatar</translation>
 <translation id="1581962803218266616">Prikaži u programu Finder</translation>
 <translation id="1584990664401018068">Wi-Fi mreža koju upotrebljavate (<ph name="NETWORK_ID" />) možda zahtijeva autentifikaciju.</translation>
@@ -472,6 +472,7 @@
 <translation id="1719312230114180055">Napomena: otisak prsta može biti manje siguran od snažne zaporke ili PIN-a.</translation>
 <translation id="1720318856472900922">Provjera autentičnosti TLS WWW poslužitelja</translation>
 <translation id="1721937473331968728">Na uslugu <ph name="CLOUD_PRINT_NAME" /> možete dodati klasične pisače povezane s vašim računalom.</translation>
+<translation id="1722460139690167654">Vašim uređajem <ph name="BEGIN_LINK" /><ph name="DEVICE_TYPE" /> upravlja<ph name="END_LINK" /> <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1723824996674794290">&amp;Novi prozor</translation>
 <translation id="1725149567830788547">Prikaži &amp;kontrole</translation>
 <translation id="1726100011689679555">Poslužitelji naziva</translation>
@@ -488,6 +489,7 @@
 <translation id="1744060673522309905">Uređaj nije moguće pridružiti domeni. Provjerite jeste li premašili broj uređaja koji možete dodati.</translation>
 <translation id="1744108098763830590">pozadinska stranica</translation>
 <translation id="1745520510852184940">Učini to uvijek</translation>
+<translation id="174617397682753897">Kerberos računi</translation>
 <translation id="1746402432151920942">Identifikator zaštićenog medija</translation>
 <translation id="175196451752279553">P&amp;onovo otvori zatvorenu karticu</translation>
 <translation id="1753905327828125965">Najposjećenije</translation>
@@ -790,10 +792,11 @@
 <translation id="2220529011494928058">Prijavite poteškoću</translation>
 <translation id="2220572644011485463">PIN ili zaporka</translation>
 <translation id="2224444042887712269">Ova postavka pripada korisniku <ph name="OWNER_EMAIL" />.</translation>
-<translation id="2224471211857467033">Događaji Pristupačnosti</translation>
+<translation id="2224471211857467033">Događaji pristupačnosti</translation>
 <translation id="2224551243087462610">Uredi naziv mape</translation>
 <translation id="2226449515541314767">Za tu je web-lokaciju blokiran potpuni nadzor nad MIDI uređajima.</translation>
 <translation id="2226720438730111184">Recite nam što se događa</translation>
+<translation id="2227179592712503583">Ukloni prijedlog</translation>
 <translation id="2229161054156947610">Preostalo više od 1 sata</translation>
 <translation id="222931766245975952">Datoteka je skraćena</translation>
 <translation id="2230051135190148440">CHAP</translation>
@@ -808,6 +811,7 @@
 <translation id="2241634353105152135">Samo jednom</translation>
 <translation id="2242687258748107519">Informacije o datoteci</translation>
 <translation id="2246549592927364792">Želite li dohvatiti opise slika s Googlea?</translation>
+<translation id="2249269794707377949">Ovdje možete upravljati svim Kerberos računima za jedinstvenu prijavu na određene aplikacije i web-lokacije te za dijeljenje datoteka.</translation>
 <translation id="224940702122312781">Ova stranica troši veliku količinu podataka.</translation>
 <translation id="2249605167705922988">npr. 1-5, 8, 11-13</translation>
 <translation id="2251218783371366160">Otvori u pregledniku sustava</translation>
@@ -870,6 +874,7 @@
 <translation id="2342740338116612727">Oznake su dodane</translation>
 <translation id="2343747224442182863">Fokusiraj tu karticu</translation>
 <translation id="2344028582131185878">Automatska preuzimanja</translation>
+<translation id="2345574157728712751">Omogućite aplikacijama Trgovine Play pristup ovom uređaju putem Postavki.</translation>
 <translation id="2345723121311404059">1 stranica na pisač <ph name="PRINTER_NAME" /></translation>
 <translation id="2347644257713614136">Upotrebu usluga Hangouts i Cast for Education reguliraju Googleova pravila o privatnosti.</translation>
 <translation id="2348176352564285430">Aplikacija: <ph name="ARC_PROCESS_NAME" /></translation>
@@ -1034,6 +1039,7 @@
 <translation id="2588636910004461974">Uređaji dobavljača <ph name="VENDOR_NAME" /></translation>
 <translation id="258932246702879617">Odaberite <ph name="BEGIN_BOLD" />Prikvači na programsku traku<ph name="END_BOLD" /></translation>
 <translation id="2594999711683503743">Pretražite na Googleu ili unesite URL</translation>
+<translation id="2597521610396315071">Dodavanje nadzora</translation>
 <translation id="2603115962224169880">Očistite računalo</translation>
 <translation id="2603463522847370204">Otvaranje u &amp;anonimnom prozoru</translation>
 <translation id="2604255671529671813">Pogreška mrežne veze</translation>
@@ -1253,6 +1259,7 @@
 <translation id="2916073183900451334">Pritiskom na Tab na web-stranici ističu se veze, isto kao i iz polja</translation>
 <translation id="2916745397441987255">Pretražite proširenja</translation>
 <translation id="2921081876747860777">Napravite zaporku da biste zaštitili lokalne podatke.</translation>
+<translation id="2923234477033317484">Ukloni taj račun</translation>
 <translation id="2926085873880284723">Vrati zadane prečace</translation>
 <translation id="2927017729816812676">Pohrana predmemorije</translation>
 <translation id="2932085390869194046">Predloži zaporku…</translation>
@@ -1826,6 +1833,7 @@
 <translation id="381202950560906753">Dodaj još jedan</translation>
 <translation id="3812525830114410218">Neispravan certifikat</translation>
 <translation id="3813296892522778813">Ako ne možete pronaći ono što tražite, otvorite <ph name="BEGIN_LINK_CHROMIUM" />pomoć za Google Chrome<ph name="END_LINK_CHROMIUM" /></translation>
+<translation id="3816118180265633665">Boje u Chromeu</translation>
 <translation id="3817579325494460411">Nenavedeno</translation>
 <translation id="3819257035322786455">Sigurnosna kopija</translation>
 <translation id="3819261658055281761">Sustav nije uspio pohraniti token za dugotrajni pristup API-ju za ovaj uređaj.</translation>
@@ -1950,6 +1958,7 @@
 <translation id="3982375475032951137">Postavite preglednik u nekoliko jednostavnih koraka</translation>
 <translation id="3983400541576569538">Podaci iz nekih aplikacija možda su izgubljeni</translation>
 <translation id="3983586614702900908">uređaji nepoznatog dobavljača</translation>
+<translation id="3983764759749072418">Aplikacije Trgovine Play imaju pristup ovom uređaju.</translation>
 <translation id="3984159763196946143">Pokretanje demo-načina nije uspjelo</translation>
 <translation id="3984431586879874039">Želite li dopustiti web-lokaciji prikaz vašeg sigurnosnog ključa?</translation>
 <translation id="3987938432087324095">Žao mi je, ne razumijem.</translation>
@@ -2064,6 +2073,7 @@
 <translation id="4159681666905192102">Ovo je račun za djecu kojim upravljaju <ph name="CUSTODIAN_EMAIL" /> i <ph name="SECOND_CUSTODIAN_EMAIL" />.</translation>
 <translation id="4163560723127662357">Nepoznata tipkovnica</translation>
 <translation id="4168015872538332605">Neke postavke korisnika <ph name="PRIMARY_EMAIL" /> dijele se s vama. Te postavke utječu na vaš račun samo kad upotrebljavate višestruku prijavu.</translation>
+<translation id="4169535189173047238">Nemoj dopustiti</translation>
 <translation id="4170314459383239649">Izbriši pri izlazu</translation>
 <translation id="4172051516777682613">Uvijek prikaži</translation>
 <translation id="4175737294868205930">Stalna pohrana</translation>
@@ -2223,6 +2233,7 @@
 <translation id="4453946976636652378">Pretraži <ph name="SEARCH_ENGINE_NAME" /> ili unesi URL</translation>
 <translation id="4462159676511157176">Prilagođeni poslužitelji naziva</translation>
 <translation id="4469477701382819144">Blokirano na web-lokacijama koje prikazuju ometajuće ili obmanjujuće oglase</translation>
+<translation id="4470957202018033307">Postavke vanjske pohrane</translation>
 <translation id="447252321002412580">Pomozite poboljšati Chromeove značajke i izvedbu</translation>
 <translation id="4472575034687746823">Početak korištenja</translation>
 <translation id="4474155171896946103">Označi sve kartice...</translation>
@@ -2579,6 +2590,7 @@
 <translation id="504561833207953641">Otvaranje u postojećoj sesiji preglednika.</translation>
 <translation id="5047421709274785093">Web-lokacijama nije dopuštena upotreba senzora pokreta i osvjetljenja</translation>
 <translation id="5050042263972837708">Naziv grupe</translation>
+<translation id="5051836348807686060">Provjera pravopisa nije podržana za jezike koje ste odabrali</translation>
 <translation id="5052499409147950210">Uređivanje web-lokacije</translation>
 <translation id="5053604404986157245">Nasumično generirana TPM zaporka nije dostupna. To je uobičajeno nakon primjene funkcije Powerwash.</translation>
 <translation id="5057110919553308744">Kada kliknete proširenje</translation>
@@ -2662,6 +2674,7 @@
 <translation id="5187295959347858724">Sada ste prijavljeni na uslugu <ph name="SHORT_PRODUCT_NAME" />. Vaše oznake, povijest i druge postavke sinkroniziraju se s vašim Google računom.</translation>
 <translation id="5187826826541650604"><ph name="KEY_NAME" /> (<ph name="DEVICE" />)</translation>
 <translation id="51918995459521422"><ph name="ORIGIN" /> želi preuzeti više datoteka</translation>
+<translation id="5202089186707505116">Želite li omogućiti toj web-lokaciji pristup vašim VR senzorima?</translation>
 <translation id="5204673965307125349">Izvršite powerwash uređaja i pokušajte ponovo.</translation>
 <translation id="5204967432542742771">Unesite zaporku</translation>
 <translation id="5206215183583316675">Želite li izbrisati "<ph name="CERTIFICATE_NAME" />"?</translation>
@@ -2757,6 +2770,7 @@
 <translation id="5331975486040154427">USB-C uređaj (stražnji lijevi priključak)</translation>
 <translation id="5334142896108694079">Predmemorija skripte</translation>
 <translation id="5336126339807372270">Onemogući svim web-lokacijama pristup USB uređajima</translation>
+<translation id="5336688142483283574">Ta stranica uklonit će se i iz vaše povijesti i aktivnosti na tražilici <ph name="SEARCH_ENGINE" />.</translation>
 <translation id="5337771866151525739">Instalirala treća strana.</translation>
 <translation id="5338503421962489998">Lokalna pohrana</translation>
 <translation id="5340638867532133571">Dopusti web-lokacijama instalaciju rukovatelja plaćanjem (preporučeno)</translation>
@@ -2875,6 +2889,7 @@
 <translation id="5518584115117143805">Certifikat enkripcije e-pošte</translation>
 <translation id="5521078259930077036">Je li to početna stranica koju ste očekivali?</translation>
 <translation id="5522156646677899028">To proširenje sadrži ozbiljni sigurnosni propust.</translation>
+<translation id="5523201311986093262">Pozadine</translation>
 <translation id="5525677322972469346">Izradi novog nadziranog korisnika</translation>
 <translation id="5526701598901867718">Sve (nije sigurno)</translation>
 <translation id="5526745900034778153">Prijavite se opet da biste ponovo pokrenuli sinkronizaciju</translation>
@@ -3977,6 +3992,7 @@
 <translation id="7230787553283372882">Prilagodba veličine teksta</translation>
 <translation id="7232750842195536390">Preimenovanje nije uspjelo</translation>
 <translation id="7235716375204803342">Dohvaćanje aktivnosti...</translation>
+<translation id="7235737137505019098">Na sigurnosnom ključu nema dovoljno prostora za izradu novih računa.</translation>
 <translation id="7238585580608191973">SHA-256 otisak prsta</translation>
 <translation id="7240120331469437312">Zamjenski naziv predmeta certifikata</translation>
 <translation id="7240339475467890413">Želite li se povezati s novom žarišnom točkom?</translation>
@@ -3993,6 +4009,7 @@
 <translation id="7254951428499890870">jeste li sigurni da želite pokrenuti "<ph name="APP_NAME" />" u načinu dijagnostike?</translation>
 <translation id="7255002516883565667">Trenutačno imate jednu karticu kojom se može plaćati samo na ovom uređaju</translation>
 <translation id="7255220508626648026">Emitiranje: <ph name="ROUTETITLE" /></translation>
+<translation id="7255916308560539517">Još jednom dodirnite sigurnosni ključ da biste potvrdili vraćanje na zadano. Sve informacije pohranjene na sigurnosnom ključu, uključujući njegov PIN, izbrisat će se.</translation>
 <translation id="7255935316994522020">Primijeni</translation>
 <translation id="7256069762010468647">Web-lokacija upotrebljava vašu kameru</translation>
 <translation id="7256405249507348194">Neprepoznata pogreška: <ph name="DESC" /></translation>
@@ -4028,6 +4045,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ova bi aplikacija mogla spriječiti Chrome da pravilno funkcionira.}one{Ova bi aplikacija (ili više njih) mogla spriječiti Chrome da pravilno funkcionira.}few{Ove bi aplikacije mogle spriječiti Chrome da pravilno funkcionira.}other{Ove bi aplikacije mogle spriječiti Chrome da pravilno funkcionira.}}</translation>
 <translation id="7303281435234579599">Ups! Došlo je do pogreške pri postavljanju demo načina.</translation>
 <translation id="7303900363563182677">Toj je web-lokaciji blokiran uvid u tekst i slike kopirane u međuspremnik</translation>
+<translation id="7305123176580523628">USB pisač povezan</translation>
 <translation id="730515362922783851">razmjenjivati podatke s bilo kojim uređajem na lokalnoj mreži ili internetu</translation>
 <translation id="7307129035224081534">Pauzirano</translation>
 <translation id="7308002049209013926">Pomoću Pokretača možete brzo pristupiti novim aplikacijama i aktivnostima. Da biste ga otvorili pomoću tipkovnice, pritisnite Alt + Shift + L.</translation>
@@ -4152,6 +4170,7 @@
 <translation id="7502658306369382406">IPv6 adresa</translation>
 <translation id="7503191893372251637">Vrsta Netscape certifikata</translation>
 <translation id="7503821294401948377">Nije uspjelo učitavanje ikone "<ph name="ICON" />" za radnju preglednika.</translation>
+<translation id="7503985202154027481">Na sigurnosnom ključu zadržat će se evidencija vašeg posjeta toj web-lokaciji.</translation>
 <translation id="750509436279396091">Otvori mapu preuzimanja</translation>
 <translation id="7506541170099744506">Vaš je <ph name="DEVICE_TYPE" /> uređaj uspješno registriran za poslovno upravljanje.</translation>
 <translation id="7507930499305566459">Certifikat odgovora statusa</translation>
@@ -4164,6 +4183,7 @@
 <translation id="7529411698175791732">Provjerite internetsku vezu. Ako se problem ne riješi, pokušajte se odjaviti i ponovo prijaviti.</translation>
 <translation id="7530016656428373557">Stopa pražnjenja u vatima</translation>
 <translation id="7531779363494549572">Otvorite Postavke &gt; Aplikacije i obavijesti &gt; Obavijesti.</translation>
+<translation id="7536220825385726660">Omogućite aplikacijama Trgovine Play pristup vanjskim pogonima</translation>
 <translation id="7537601449003285327">Prikvači na programsku traku</translation>
 <translation id="7539856059004947393">Bluetooth sigurnosni ključ</translation>
 <translation id="7540972813190816353">Došlo je do pogreške prilikom traženja ažuriranja: <ph name="ERROR" /></translation>
@@ -4193,6 +4213,7 @@
 <translation id="7574650250151586813">Da biste unijeli tekst, ažurirajte aplikaciju Tipkovnica za Daydream</translation>
 <translation id="7576690715254076113">Spari</translation>
 <translation id="7576976045740938453">Pojavio se problem s računom za demo način.</translation>
+<translation id="757941033127302446">Prijavljen</translation>
 <translation id="7580671184200851182">Reprodukcija istog zvuka na svim zvučnicima (mono audio)</translation>
 <translation id="7581462281756524039">Alat za čišćenje</translation>
 <translation id="7582582252461552277">Preferiraj ovu mrežu</translation>
@@ -4250,6 +4271,7 @@
 <translation id="7665369617277396874">Dodaj račun</translation>
 <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{PIN nije točan. Preostao vam je još jedan pokušaj.}one{PIN nije točan. Preostao vam je još # pokušaj.}few{PIN nije točan. Preostala su vam još # pokušaja.}other{PIN nije točan. Preostalo vam je još # pokušaja.}}</translation>
 <translation id="7671130400130574146">Koristi naslovnu traku sustava i obrube</translation>
+<translation id="767127784612208024">Dodirnite za potvrdu vraćanja na zadano</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, na stranici <ph name="PAGE_TITLE" />.</translation>
 <translation id="7676867886086876795">Pošaljite audiopodatke o svojem glasu Googleu da biste omogućili diktiranje za bilo koje tekstno polje.</translation>
 <translation id="7678280409648629969">Podaci za prijavu pohranit će se u Chromeu nakon što izađete iz anonimnog načina. Na taj ćete način kasnije opet moći koristiti Touch ID s ovom web-lokacijom.</translation>
@@ -4436,6 +4458,7 @@
 <translation id="7925247922861151263">Provjera AAA nije uspjela</translation>
 <translation id="7925285046818567682">Čekanje <ph name="HOST_NAME" />...</translation>
 <translation id="7926423016278357561">To nisam bio ja.</translation>
+<translation id="7928836894214140642">Upravlja: <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="7930294771522048157">Ovdje će se prikazivati spremljeni načini plaćanja</translation>
 <translation id="79312157130859720"><ph name="APP_NAME" /> dijeli zaslon i zvuk.</translation>
 <translation id="7931318309563332511">Nepoznato</translation>
@@ -4463,6 +4486,7 @@
 <translation id="7959074893852789871">Datoteka je sadržavala više certifikata, a neki od njih nisu uvezeni:</translation>
 <translation id="7961015016161918242">Nikad</translation>
 <translation id="7963826112438303517">Te snimke i zahtjeve koje izgovorite Asistent upotrebljava za izradu i ažuriranje vašeg glasovnog modela koji se sprema samo na uređajima na kojima ste uključili Voice Match. Glasovnu aktivnost možete pregledati ili ponovo uvježbati u postavkama Asistenta.</translation>
+<translation id="796416202355062143"><ph name="ORIGIN" /> želi potražiti Bluetooth uređaje u blizini. Pronađeni su sljedeći uređaji:</translation>
 <translation id="7966241909927244760">K&amp;opiraj adresu slike</translation>
 <translation id="7968742106503422125">čitati i izmjenjivati podatke koje kopirate i lijepite</translation>
 <translation id="7968833647796919681">Omogući prikupljanje podataka o izvedbi</translation>
@@ -4562,11 +4586,13 @@
     <ph name="BEGIN_PARAGRAPH4" />Podaci sigurnosnih kopija neće se ubrajati u kvotu pohrane na Disku.<ph name="END_PARAGRAPH4" />
     <ph name="BEGIN_PARAGRAPH5" />Tu uslugu možete isključiti u Postavkama.<ph name="END_PARAGRAPH5" /></translation>
 <translation id="80974698889265265">PIN-ovi se ne podudaraju</translation>
+<translation id="8099495042588009598">Više dopuštenja</translation>
 <translation id="8101987792947961127">Pri sljedećem ponovnom pokretanju potrebno je izvršiti Powerwash</translation>
 <translation id="8102159139658438129">Otvorite <ph name="LINK_BEGIN" />Postavke<ph name="LINK_END" /> da biste vidjeli opcije za povezani telefon</translation>
 <translation id="8104696615244072556">Pokrenite Powerwash na svom <ph name="IDS_SHORT_PRODUCT_NAME" /> uređaju i vratite ga na prethodnu verziju.</translation>
 <translation id="8105368624971345109">Isključi</translation>
 <translation id="8107015733319732394">Trgovina Google Play instalira se na vašem uređaju <ph name="DEVICE_TYPE" />. To bi moglo potrajati nekoliko minuta.</translation>
+<translation id="810875025413331850">Nije pronađen nijedan uređaj u blizini.</translation>
 <translation id="8111155949205007504">Dijelite ovu zaporku sa svojim iPhoneom</translation>
 <translation id="8113043281354018522">Odaberite vrstu licence</translation>
 <translation id="8116972784401310538">&amp;Upravitelj oznaka</translation>
@@ -4717,6 +4743,7 @@
 <translation id="8363095875018065315">stabilan</translation>
 <translation id="8363142353806532503">Mikrofon je blokiran</translation>
 <translation id="8366396658833131068">Veza s mrežom ponovno je uspostavljena. Odaberite neku drugu mrežu ili pritisnite gumb "Nastavi" u nastavku kako biste pokrenuli aplikaciju kioska.</translation>
+<translation id="8368027906805972958">Nepoznati ili nepodržani uređaj (<ph name="DEVICE_ID" />)</translation>
 <translation id="8368859634510605990">&amp;Otvori sve oznake</translation>
 <translation id="8371695176452482769">Govorite sad</translation>
 <translation id="8371925839118813971">{NUM_TABS,plural, =1{Isključi zvuk na web-lokaciji}one{Isključi zvuk na web-lokacijama}few{Isključi zvuk na web-lokacijama}other{Isključi zvuk na web-lokacijama}}</translation>
@@ -4916,6 +4943,7 @@
 <translation id="8678648549315280022">Upravljanje postavkama preuzimanja...</translation>
 <translation id="8678933587484842200">Kako želite da se ova aplikacija pokreće?</translation>
 <translation id="8680251145628383637">Prijavite se tako da vam oznake, povijest i druge postavke budu dostupne na svim svojim uređajima. Time ćete se automatski prijaviti i na Googleove usluge.</translation>
+<translation id="8682730193597992579"><ph name="PRINTER_NAME" /> je povezan i spreman</translation>
 <translation id="8688579245973331962">Ne vidite svoje ime?</translation>
 <translation id="8688591111840995413">Pogrešna zaporka</translation>
 <translation id="8688672835843460752">Dostupno</translation>
@@ -5068,8 +5096,8 @@
 <translation id="8898786835233784856">Odaberi sljedeću karticu</translation>
 <translation id="8898840733695078011">Jakost signala</translation>
 <translation id="8899851313684471736">Otvori vezu u novom &amp;prozoru</translation>
-<translation id="8902081783136172774">Odaberite pozadinu za početnu stranicu</translation>
 <translation id="8902667442496790482">Otvorite postavke Odabira za govor</translation>
+<translation id="8903263458134414071">Odaberite račun putem kojeg ćete se prijaviti</translation>
 <translation id="8904976895050290827">Chrome sinkronizacija</translation>
 <translation id="890616557918890486">Promijeni izvor</translation>
 <translation id="8909833622202089127">Web-lokacija prati vašu lokaciju</translation>
@@ -5156,6 +5184,7 @@
 <translation id="9040661932550800571">Želite li ažurirati zaporku za <ph name="ORIGIN" />?</translation>
 <translation id="9041692268811217999">Pristup lokalnim datotekama na vašem računalu onemogućio je administrator</translation>
 <translation id="9041909613332246191">Ova se datoteka obično ne preuzima i može biti opasna. Štiti vas Napredna zaštita.</translation>
+<translation id="9042858701776831292">Aplikacije Trgovine Google Play mogu zatražiti pristup vanjskim uređajima za pohranu radi čitanja i zapisivanja datoteka i mapa na njima.</translation>
 <translation id="9042893549633094279">Privatnost i sigurnost</translation>
 <translation id="904451693890288097">Unesite pristupni ključ za uređaj "<ph name="DEVICE_NAME" />":</translation>
 <translation id="9044646465488564462">Povezivanje s mrežom nije uspjelo: <ph name="DETAILS" /></translation>
@@ -5215,6 +5244,7 @@
 <translation id="9137916601698928395">Otvori vezu kao <ph name="USER" /></translation>
 <translation id="9138978632494473300">Dodajte prečace na sljedećim mjestima:</translation>
 <translation id="9140067245205650184">Upotrebljavate nepodržanu oznaku značajke: <ph name="BAD_FLAG" />. Ugrožena je stabilnost i sigurnost.</translation>
+<translation id="9143298529634201539">Želite li ukloniti prijedlog?</translation>
 <translation id="9147304170847707004">Način autentifikacije</translation>
 <translation id="9147392381910171771">&amp;Opcije</translation>
 <translation id="9148058034647219655">Izlaz</translation>
@@ -5229,6 +5259,7 @@
 <translation id="916607977885256133">Slika u slici</translation>
 <translation id="9168436347345867845">Učinite to kasnije</translation>
 <translation id="9169496697824289689">Prikaz tipkovnih prečaca</translation>
+<translation id="916964310188958970">Zašto taj prijedlog?</translation>
 <translation id="9169931577761441333">Dodajte <ph name="APP_NAME" /> na početni zaslon</translation>
 <translation id="9170848237812810038">&amp;Poništi</translation>
 <translation id="9170884462774788842">Drugi program na vašem računalu dodao je temu koja može promijeniti način na koji radi Chrome.</translation>
@@ -5239,6 +5270,7 @@
 <translation id="9179734824669616955">Postavite Linux (Beta) na uređaju <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Taj postupak može potrajati nekoliko minuta. Pokreće se Linuxov spremnik.</translation>
 <translation id="9180380851667544951">Web-lokacija može dijeliti vaš zaslon</translation>
+<translation id="9185926955514281189">Boje i teme</translation>
 <translation id="9188441292293901223">Ažurirajte svoj telefon na najnoviju verziju Androida kako biste otključali ovaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="9188732951356337132">Slanje podataka o upotrebi i dijagnostici. Ovaj uređaj trenutačno Googleu automatski šalje dijagnostičke podatke te podatke o upotrebi uređaja i aplikacija. Ti se podaci neće upotrebljavati za identifikaciju vašeg djeteta, a pomoći će poboljšati sustav, stabilnost aplikacija i drugo. Neki skupni podaci pomoći će i Googleovim aplikacijama i partnerima, na primjer razvojnim programerima za Android. Ako je za vaše dijete uključena dodatna postavka Aktivnost na webu i u aplikacijama, ti se podaci mogu spremati na djetetov Google račun. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation>
 <translation id="9190063653747922532">L2TP/IPsec + unaprijed dijeljeni ključ</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 5be81be2..5db2192 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Megjelenítőeszköz beállításainak megnyitása</translation>
 <translation id="1572266655485775982">Wi-Fi engedélyezése</translation>
 <translation id="1572876035008611720">Adja meg e-mail-címét</translation>
-<translation id="1573150740912592860">Mentse a munkáját</translation>
 <translation id="1576594961618857597">Alapértelmezett fehér avatar</translation>
 <translation id="1581962803218266616">Megjelenítés a Finderben</translation>
 <translation id="1584990664401018068">Előfordulhat, hogy az Ön által használt Wi-Fi-hálózat (<ph name="NETWORK_ID" />) hitelesítést ír elő.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Nem sikerült csatlakoztatni az eszközt a domainhez. Győződjön meg róla, hogy nem lépte túl a hozzáadható eszközök számát.</translation>
 <translation id="1744108098763830590">háttéroldal</translation>
 <translation id="1745520510852184940">Mindig ezt tegye</translation>
+<translation id="1746402432151920942">Védett médiaelem azonosítója</translation>
 <translation id="175196451752279553">Bezárt lap m&amp;egnyitása</translation>
 <translation id="1753905327828125965">Leggyakrabban látogatott</translation>
 <translation id="1756681705074952506">Beviteli mód</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Nem jelentkezett be</translation>
 <translation id="1832511806131704864">Telefonmódosítás frissítve</translation>
 <translation id="1834503245783133039">Sikertelen letöltés: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-eszközök</translation>
 <translation id="1838374766361614909">Keresett kifejezés törlése</translation>
 <translation id="1841545962859478868">Az eszköz rendszergazdája figyelheti a következőket:</translation>
 <translation id="1841616161104323629">Hiányzó eszközrekord.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Probléma bejelentése</translation>
 <translation id="2220572644011485463">PIN-kód vagy jelszó</translation>
 <translation id="2224444042887712269">Ez a beállítás a következő fiókhoz tartozik: <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Kisegítő események</translation>
 <translation id="2224551243087462610">Mappa nevének szerkesztése</translation>
 <translation id="2226449515541314767">Ennél a webhelynél le van tiltva a MIDI-eszközökhöz való teljes hozzáférés.</translation>
 <translation id="2226720438730111184">Mondja el, mi a probléma</translation>
@@ -5066,7 +5068,6 @@
 <translation id="8898786835233784856">Következő lap kiválasztása</translation>
 <translation id="8898840733695078011">Jelerősség</translation>
 <translation id="8899851313684471736">Link megnyitása új &amp;ablakban</translation>
-<translation id="8902081783136172774">Válasszon háttérképet a kezdőoldalra</translation>
 <translation id="8902667442496790482">Felolvasási beállítások megnyitása</translation>
 <translation id="8904976895050290827">Chrome - szinkronizálás</translation>
 <translation id="890616557918890486">Forrás módosítása</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 3c55032..f3b403eb 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Buka setelan perangkat layar</translation>
 <translation id="1572266655485775982">Wi-Fi aktif</translation>
 <translation id="1572876035008611720">Masukkan email Anda</translation>
-<translation id="1573150740912592860">Simpan progres Anda</translation>
 <translation id="1576594961618857597">Avatar putih default</translation>
 <translation id="1581962803218266616">Tampilkan di Penemu</translation>
 <translation id="1584990664401018068">Jaringan Wi-Fi yang Anda gunakan ( <ph name="NETWORK_ID" /> ) mungkin perlu autentikasi.</translation>
@@ -5065,7 +5064,6 @@
 <translation id="8898786835233784856">Pilih Tab Berikutnya</translation>
 <translation id="8898840733695078011">Kekuatan sinyal</translation>
 <translation id="8899851313684471736">Buka link di &amp;jendela baru</translation>
-<translation id="8902081783136172774">Pilih wallpaper untuk halaman awal Anda</translation>
 <translation id="8902667442496790482">Buka setelan klik untuk diucapkan</translation>
 <translation id="8904976895050290827">Sinkronisasi Chrome</translation>
 <translation id="890616557918890486">Ubah sumber</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 257c835..229cdb1c 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Apri le impostazioni dello schermo</translation>
 <translation id="1572266655485775982">Attiva Wi-Fi</translation>
 <translation id="1572876035008611720">Inserisci il tuo indirizzo email</translation>
-<translation id="1573150740912592860">Salva i tuoi progressi</translation>
 <translation id="1576594961618857597">Avatar bianco predefinito</translation>
 <translation id="1581962803218266616">Mostra nel Finder</translation>
 <translation id="1584990664401018068">La rete Wi-Fi in uso (<ph name="NETWORK_ID" />) potrebbe richiedere l'autenticazione.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Impossibile aggiungere il dispositivo al dominio. Assicurati di non avere superato il numero di dispositivi che puoi aggiungere.</translation>
 <translation id="1744108098763830590">pagina di sfondo</translation>
 <translation id="1745520510852184940">Traduci sempre</translation>
+<translation id="1746402432151920942">Identificatore dei contenuti multimediali protetti</translation>
 <translation id="175196451752279553">R&amp;iapri scheda chiusa</translation>
 <translation id="1753905327828125965">Più visitati</translation>
 <translation id="1756681705074952506">Metodo di immissione</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Accesso non eseguito</translation>
 <translation id="1832511806131704864">Cambio di telefono aggiornato</translation>
 <translation id="1834503245783133039">Download non riuscito: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Dispositivi MIDI</translation>
 <translation id="1838374766361614909">Cancella ricerca</translation>
 <translation id="1841545962859478868">L'amministratore del dispositivo potrebbe monitorare i seguenti elementi:</translation>
 <translation id="1841616161104323629">Record del dispositivo mancante.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Segnala un problema</translation>
 <translation id="2220572644011485463">PIN o password</translation>
 <translation id="2224444042887712269">Questa impostazione appartiene a <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Eventi di accessibilità</translation>
 <translation id="2224551243087462610">Modifica nome cartella</translation>
 <translation id="2226449515541314767">A questo sito è stato impedito il controllo totale dei dispositivi MIDI.</translation>
 <translation id="2226720438730111184">Spiegaci cosa succede</translation>
@@ -5057,7 +5059,6 @@
 <translation id="8898786835233784856">Seleziona scheda successiva</translation>
 <translation id="8898840733695078011">Intensità del segnale</translation>
 <translation id="8899851313684471736">Apri link in un'altra &amp;finestra</translation>
-<translation id="8902081783136172774">Seleziona uno sfondo per la pagina iniziale</translation>
 <translation id="8902667442496790482">Apri le impostazioni Seleziona per ascoltare</translation>
 <translation id="8904976895050290827">Sincronizzazione Google Chrome</translation>
 <translation id="890616557918890486">Cambia origine</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 7202dd5c..7d0cb39 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">פתח את הגדרות המכשיר של התצוגה</translation>
 <translation id="1572266655485775982">‏הפעלת Wi-Fi</translation>
 <translation id="1572876035008611720">הזן את כתובת האימייל</translation>
-<translation id="1573150740912592860">שמירת ההתקדמות שלך</translation>
 <translation id="1576594961618857597">דמות ברירת מחדל לבנה</translation>
 <translation id="1581962803218266616">‏הצג ב-Finder</translation>
 <translation id="1584990664401018068">‏ייתכן שיהיה צורך באימות בשביל רשת ה-Wi-Fi שבה אתה משתמש (<ph name="NETWORK_ID" />).</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">אי אפשר לצרף את המכשיר אל הדומיין. יש לוודא שלא חרגת ממספר המכשירים שניתן להוסיף.</translation>
 <translation id="1744108098763830590">דף רקע</translation>
 <translation id="1745520510852184940">עשה זאת תמיד</translation>
+<translation id="1746402432151920942">מזהה מדיה מוגנת</translation>
 <translation id="175196451752279553">פ&amp;תח מחדש את הכרטיסייה הסגורה</translation>
 <translation id="1753905327828125965">עם המבקרים הרבים ביותר</translation>
 <translation id="1756681705074952506">שיטת קלט</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">לא מחובר</translation>
 <translation id="1832511806131704864">השינוי בטלפון עודכן</translation>
 <translation id="1834503245783133039">ההורדה נכשלה: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">‏התקני MIDI</translation>
 <translation id="1838374766361614909">ניקוי חיפוש</translation>
 <translation id="1841545962859478868">ייתכן שמנהל המכשיר עוקב אחרי:</translation>
 <translation id="1841616161104323629">רשומת מכשיר חסרה.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">דיווח על בעיה</translation>
 <translation id="2220572644011485463">‏PIN או סיסמה</translation>
 <translation id="2224444042887712269">ההגדרה הזו שייכת ל-<ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">אירועי נגישות</translation>
 <translation id="2224551243087462610">ערוך את שם התיקייה</translation>
 <translation id="2226449515541314767">‏האפשרות לשלוט שליטה מלאה על מכשירי MIDI נחסמה עבור אתר זה.</translation>
 <translation id="2226720438730111184">ספר לנו מה קורה</translation>
@@ -1709,7 +1711,7 @@
 <translation id="3664511988987167893">סמל התוסף</translation>
 <translation id="3665589677786828986">‏Chrome זיהה שחלק מההגדרות שלך נפגמו על ידי תכנית אחרת ואיפס אותן לברירות המחדל המקוריות.</translation>
 <translation id="3668570675727296296">הגדרות שפה</translation>
-<translation id="366867565525278777">ההתקנה נכשלה כי אין מספיק שטח אחסון. צריך שטח אחסון פנוי בגודל <ph name="INSTALL_SIZE" /> לפחות. כדי לפנות שטח, עליך למחוק קבצים מאחסון המכשיר.</translation>
+<translation id="366867565525278777">ההתקנה נכשלה כי אין מספיק שטח אחסון. צריך שטח אחסון פנוי של <ph name="INSTALL_SIZE" /> לפחות. כדי לפנות שטח, עליך למחוק קבצים מאחסון המכשיר.</translation>
 <translation id="3668801437375206837">‏כדי לשפר את האבחון של בעיות בחיבור Bluetooth, גוגלרים יכולים לכלול יומני Bluetooth נוספים במשובים. אם האפשרות מסומנת, הדוח יכלול את יומני btsnoop ו-HCI מהסשן הנוכחי, והמערכת "תנקה" אותו כדי להסיר כמה שיותר פרטים אישיים מזהים (PII). הגישה ליומנים האלה תוגבל למנהלים של קבוצת מוצרי Chrome OS ב-Listnr. המערכת תמחק לצמיתות את היומנים אחרי 90 ימים.</translation>
 <translation id="3668823961463113931">מטפלים</translation>
 <translation id="3670113805793654926">מכשירים של כל ספק</translation>
@@ -2017,7 +2019,7 @@
 <translation id="409579654357498729">‏הוסף ל-Google Cloud Print</translation>
 <translation id="4096508467498758490">השבתת תוספים של מצב מפתח</translation>
 <translation id="4096824249111507322">המערכת מכינה את המודול המאובטח (פעולה זו עשויה להימשך מספר דקות), אנא המתן...</translation>
-<translation id="4097560579602855702">‏חפש ב-Google</translation>
+<translation id="4097560579602855702">‏חיפוש ב-Google</translation>
 <translation id="4099060993766194518">לשחזר את מנוע החיפוש שהוגדר כברירת המחדל?</translation>
 <translation id="4099874310852108874">התרחשה שגיאת רשת.</translation>
 <translation id="4100733287846229632">שטח האחסון במכשיר כמעט נגמר</translation>
@@ -3861,7 +3863,7 @@
 <translation id="706626672220389329">קרתה שגיאה בטעינת התקן הרשת לשיתוף קבצים. ההתקן שצוין כבר נטען.</translation>
 <translation id="7066944511817949584">נכשלה ההתחברות אל "<ph name="DEVICE_NAME" />".</translation>
 <translation id="7067725467529581407">לעולם אל תציג זאת שוב.</translation>
-<translation id="7069811530847688087">ייתכן שיהיה צורך במפתח אבטחה חדש יותר או מסוג אחר עבור <ph name="WEBSITE" /></translation>
+<translation id="7069811530847688087">ייתכן שיהיה צורך במפתח אבטחה חדש יותר, או מסוג אחר, עבור <ph name="WEBSITE" /></translation>
 <translation id="7070484045139057854">התוסף יכול לקרוא ולשנות נתוני אתרים</translation>
 <translation id="7072010813301522126">שם קיצור הדרך</translation>
 <translation id="707392107419594760">בחר מקלדת:</translation>
@@ -5060,7 +5062,6 @@
 <translation id="8898786835233784856">בחר את הכרטיסייה הבאה</translation>
 <translation id="8898840733695078011">עוצמת אות</translation>
 <translation id="8899851313684471736">פתח קישור &amp;בחלון חדש</translation>
-<translation id="8902081783136172774">בחירת טפט בשביל דף הפתיחה</translation>
 <translation id="8902667442496790482">פתיחה של הגדרות ההקראה</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">שינוי המקור</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 99b485d..87764bb 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">ディスプレイのデバイス設定を開く</translation>
 <translation id="1572266655485775982">Wi-Fi の有効化</translation>
 <translation id="1572876035008611720">メールアドレスを入力してください</translation>
-<translation id="1573150740912592860">現在の状態を保存する</translation>
 <translation id="1576594961618857597">デフォルトの白のアバター</translation>
 <translation id="1581962803218266616">Finder で表示</translation>
 <translation id="1584990664401018068">ご利用の Wi-Fi(<ph name="NETWORK_ID" />)では、認証が必要になる可能性があります。</translation>
@@ -5068,7 +5067,6 @@
 <translation id="8898786835233784856">次のタブを選択</translation>
 <translation id="8898840733695078011">電波強度</translation>
 <translation id="8899851313684471736">新しいウィンドウで開く(&amp;W)</translation>
-<translation id="8902081783136172774">スタートページの壁紙を選択します</translation>
 <translation id="8902667442496790482">「選択して読み上げ」の設定を開く</translation>
 <translation id="8904976895050290827">Chrome の同期</translation>
 <translation id="890616557918890486">ソースを変更</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 0f6221a..9369b44 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -371,7 +371,6 @@
 <translation id="1568323446248056064">ಪ್ರದರ್ಶನ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="1572266655485775982">ವೈ-ಫೈ ಸಕ್ರಿಯ</translation>
 <translation id="1572876035008611720">ನಿಮ್ಮ ಇಮೇಲ್ ನಮೂದಿಸಿ</translation>
-<translation id="1573150740912592860">ನಿಮ್ಮ ಪ್ರಗತಿಯನ್ನು ಉಳಿಸಿ</translation>
 <translation id="1576594961618857597">ಡಿಫಾಲ್ಟ್ ಬಿಳಿ ಅವತಾರ್</translation>
 <translation id="1581962803218266616">ಫೈಂಡರ್‌ನಲ್ಲಿ ತೋರಿಸಿ</translation>
 <translation id="1584990664401018068">ನೀವು ಬಳಸುತ್ತಿರುವ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್ (<ph name="NETWORK_ID" />) ಗೆ ಪ್ರಮಾಣೀಕರಣದ ಅಗತ್ಯವಿರಬಹುದು.</translation>
@@ -489,6 +488,7 @@
 <translation id="1744060673522309905">ಡೊಮೇನ್‌ಗೆ ಸಾಧನವನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಸೇರಿಸಬಹುದಾದ ಸಾಧನಗಳ ಸಂಖ್ಯೆಯನ್ನು ಮೀರಿಲ್ಲ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
 <translation id="1744108098763830590">ಹಿನ್ನೆಲೆ ಪುಟ</translation>
 <translation id="1745520510852184940">ಯಾವಾಗಲೂ ಇದನ್ನು ಮಾಡಿ</translation>
+<translation id="1746402432151920942">ಸುರಕ್ಷಿತ ಮಾಧ್ಯಮ ಗುರುತಿಸುವಿಕೆ</translation>
 <translation id="175196451752279553">ಮುಚ್ಚಿದ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಮತ್ತೆ ತೆರೆಯಿರಿ</translation>
 <translation id="1753905327828125965">ಅತಿಹೆಚ್ಚು ಬಾರಿ ಸಂದರ್ಶಿಸಿರುವುದು</translation>
 <translation id="1756681705074952506">ಇನ್‌ಪುಟ್ ವಿಧಾನ</translation>
@@ -546,6 +546,7 @@
 <translation id="1830550083491357902">ಸೈನ್ ಇನ್ ಆಗಿಲ್ಲ</translation>
 <translation id="1832511806131704864">ಫೋನ್ ಬದಲಾವಣೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1834503245783133039">ಡೌನ್‌ಲೋಡ್‌ ವಿಫಲಗೊಂಡಿದೆ: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI ಸಾಧನಗಳು</translation>
 <translation id="1838374766361614909">ಹುಡುಕಾಟ ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="1841545962859478868">ಸಾಧನದ ನಿರ್ವಾಹಕರು ಕೆಳಗಿನದನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು:</translation>
 <translation id="1841616161104323629">ಸಾಧನದ ರೆಕಾರ್ಡ್ ಕಾಣೆಯಾಗಿದೆ.</translation>
@@ -789,6 +790,7 @@
 <translation id="2220529011494928058">ಸಮಸ್ಯೆ ವರದಿಮಾಡಿ</translation>
 <translation id="2220572644011485463">ಪಿನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="2224444042887712269">ಈ ಸೆಟ್ಟಿಂಗ್ <ph name="OWNER_EMAIL" /> ಗೆ ಸೇರಿರುತ್ತದೆ.</translation>
+<translation id="2224471211857467033">ಅಕ್ಸೆಸಿಬಿಲಿಟಿ ಈವೆಂಟ್‌ಗಳು</translation>
 <translation id="2224551243087462610">ಫೋಲ್ಡರ್ ಹೆಸರು ಎಡಿಟ್ ಮಾಡಿ</translation>
 <translation id="2226449515541314767">ಈ ಸೈಟ್ ಅನ್ನು MIDI ಸಾಧನಗಳ ಮೇಲೆ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ಸಾಧಿಸುವುದರಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="2226720438730111184">ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ನಮಗೆ ತಿಳಿಸಿ</translation>
@@ -1109,7 +1111,7 @@
 <translation id="271033894570825754">ಹೊಸತು</translation>
 <translation id="2714393097308983682">Google Play ಸ್ಟೋರ್</translation>
 <translation id="2715751256863167692">ಈ ಅಪ್‌ಗ್ರೇಡ್ ನಿಮ್ಮ Chromebook ಅನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಸ್ತುತ ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ.</translation>
-<translation id="2716986496990888774">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಪೋಷಕರು ನಿರ್ವಹಿಸುತ್ತಾರೆ.</translation>
+<translation id="2716986496990888774">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಪೋಷಕರು ನಿರ್ವಹಿಸಿರುತ್ತಾರೆ.</translation>
 <translation id="2718395828230677721">ನೈಟ್ ಲೈಟ್</translation>
 <translation id="2718998670920917754">ಆಂಟಿ ವೈರಸ್ ಸಾಫ್ಟ್‌ವೇರ್ ವೈರಸ್ ಒಂದನ್ನು ಪತ್ತೆಹಚ್ಚಿದೆ.</translation>
 <translation id="2719936478972253983">ಕೆಳಗಿನ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
@@ -2486,7 +2488,7 @@
 <translation id="4892229439761351791">ಸೈಟ್, ಬ್ಲೂಟೂತ್ ಅನ್ನು ಬಳಸಬಹುದು</translation>
 <translation id="4893336867552636863">ಇದು ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಖಾಯಂ ಆಗಿ ಅಳಿಸುತ್ತದೆ.</translation>
 <translation id="4893522937062257019">ಲಾಕ್ ಪರದೆಯಲ್ಲಿ</translation>
-<translation id="489454699928748701">ಚಲನಾ ಸೆನ್ಸರ್‌ಗಳನ್ನು ಬಳಸಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ</translation>
+<translation id="489454699928748701">ಚಲನೆ ಸೆನ್ಸರ್‌ಗಳನ್ನು ಬಳಸಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ</translation>
 <translation id="4898011734382862273">"<ph name="CERTIFICATE_NAME" />" ಪ್ರಮಾಣಪತ್ರವು ಪ್ರಮಾಣೀಕರಣದ ಪ್ರಾಧಿಕಾರವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ</translation>
 <translation id="489985760463306091">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್‍ ತೆಗೆದುಹಾಕುವುದನ್ನು ಪೂರ್ತಿಗೊಳಿಸಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="4900392736118574277">ನಿಮ್ಮ ಆರಂಭಿಕ ಪುಟವನ್ನು <ph name="URL" /> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ.</translation>
@@ -5068,7 +5070,6 @@
 <translation id="8898786835233784856">ಮುಂದೆ ಟ್ಯಾಬ್ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="8898840733695078011">ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ</translation>
 <translation id="8899851313684471736">ಹೊಸ &amp;ವಿಂಡೋದಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation>
-<translation id="8902081783136172774">ನಿಮ್ಮ ಪ್ರಾರಂಭಿಕ ಪುಟಕ್ಕೆ ಒಂದು ವಾಲ್‌ಪೇಪರ್ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="8902667442496790482">ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಆಲಿಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">ಮೂಲವನ್ನು ಬದಲಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 50826337..0715b13 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">디스플레이 기기 설정 열기</translation>
 <translation id="1572266655485775982">Wi-Fi 사용</translation>
 <translation id="1572876035008611720">이메일을 입력하세요.</translation>
-<translation id="1573150740912592860">진행 상황 저장</translation>
 <translation id="1576594961618857597">기본 흰색 아바타</translation>
 <translation id="1581962803218266616">Finder에서 보기</translation>
 <translation id="1584990664401018068">사용 중인 Wi-Fi 네트워크(<ph name="NETWORK_ID" />)에서 인증을 요청할 수 있습니다.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">기기가 도메인에 가입하지 못했습니다. 추가할 수 있는 기기 수를 초과하지 않았는지 확인하세요.</translation>
 <translation id="1744108098763830590">백그라운드 페이지</translation>
 <translation id="1745520510852184940">항상 번역</translation>
+<translation id="1746402432151920942">보호된 미디어 식별자</translation>
 <translation id="175196451752279553">닫은 탭 다시 열기(&amp;E)</translation>
 <translation id="1753905327828125965">자주 방문한 페이지</translation>
 <translation id="1756681705074952506">입력 방법</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">로그인하지 않음</translation>
 <translation id="1832511806131704864">휴대전화 변경사항이 업데이트됨</translation>
 <translation id="1834503245783133039">다운로드 실패: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI 기기</translation>
 <translation id="1838374766361614909">검색어 지우기</translation>
 <translation id="1841545962859478868">기기 관리자가 다음을 모니터링할 수 있습니다.</translation>
 <translation id="1841616161104323629">기기 기록이 누락되었습니다.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">문제 신고</translation>
 <translation id="2220572644011485463">PIN 또는 비밀번호</translation>
 <translation id="2224444042887712269"><ph name="OWNER_EMAIL" />의 설정입니다.</translation>
+<translation id="2224471211857467033">접근성 이벤트</translation>
 <translation id="2224551243087462610">폴더 이름 수정</translation>
 <translation id="2226449515541314767">이 사이트는 MIDI 기기를 완전히 제어할 수 없도록 차단되었습니다.</translation>
 <translation id="2226720438730111184">어떤 문제인지 알려주세요.</translation>
@@ -1089,7 +1091,7 @@
 <translation id="2677748264148917807">나가기</translation>
 <translation id="2678063897982469759">다시 사용</translation>
 <translation id="268053382412112343">내역(&amp;S)</translation>
-<translation id="2682498795777673382">부모님이 업데이트한 내용</translation>
+<translation id="2682498795777673382">보호자가 업데이트한 내용</translation>
 <translation id="2683638487103917598">폴더가 정렬됨</translation>
 <translation id="2684004000387153598">계속하려면 확인을 클릭한 다음 사용자 추가를 클릭하여 이메일 주소로 새로운 프로필을 만드세요.</translation>
 <translation id="2688196195245426394">기기를 서버에 등록하는 중에 오류 발생: <ph name="CLIENT_ERROR" />.</translation>
@@ -1712,7 +1714,7 @@
 <translation id="3664511988987167893">확장 프로그램 아이콘</translation>
 <translation id="3665589677786828986">Chrome에서 다른 프로그램이 브라우저 설정을 일부 손상시키고 원래 기본값으로 재설정했음을 감지했습니다.</translation>
 <translation id="3668570675727296296">언어 설정</translation>
-<translation id="366867565525278777">저장공간이 부족하여 설치할 수 없습니다. 최소 <ph name="INSTALL_SIZE" />의 여유 공간이 필요합니다. 저장 공간을 확보하려면 기기 저장소에서 파일을 삭제하세요.</translation>
+<translation id="366867565525278777">저장공간이 부족하여 설치할 수 없습니다. 최소 <ph name="INSTALL_SIZE" />의 여유 공간이 필요합니다. 저장공간을 확보하려면 기기 저장소에서 파일을 삭제하세요.</translation>
 <translation id="3668801437375206837">블루투스 문제를 더 효과적으로 진단하기 위해 Google 직원이 의견 보고서에 추가 블루투스 로그를 포함할 수 있습니다. 이 옵션을 선택하면 보고서에 현재 세션의 btsnoop 및 HCI 로그가 포함됩니다. 이 로그는 개인 식별 정보가 가능한 한 적게 포함되도록 정리되며, Listnr의 Chrome OS 제품 그룹 관리자만 액세스할 수 있습니다. 해당 로그는 90일 후에 삭제됩니다.</translation>
 <translation id="3668823961463113931">핸들러</translation>
 <translation id="3670113805793654926">모든 공급업체의 기기</translation>
@@ -2022,7 +2024,7 @@
 <translation id="4099060993766194518">기본 검색엔진을 복원하시겠습니까?</translation>
 <translation id="4099874310852108874">네트워크 오류가 발생했습니다.</translation>
 <translation id="4100733287846229632">기기 저장 공간 매우 부족</translation>
-<translation id="4100853287411968461">새 기기 사용 시간 제한</translation>
+<translation id="4100853287411968461">기기 사용 시간 제한 업데이트</translation>
 <translation id="4103091233824664032">비밀번호를 입력하여 화면 잠금을 설정하고 로그인하세요.</translation>
 <translation id="4104163789986725820">내보내기(&amp;X)...</translation>
 <translation id="4107048419833779140">외부 저장장치 식별 및 제거</translation>
@@ -3862,7 +3864,7 @@
 <translation id="706626672220389329">공유를 마운트하는 중에 오류가 발생했습니다. 지정된 공유가 이미 마운트되었습니다.</translation>
 <translation id="7066944511817949584">'<ph name="DEVICE_NAME" />'에 연결하지 못했습니다.</translation>
 <translation id="7067725467529581407">다시 표시하지 않음</translation>
-<translation id="7069811530847688087"><ph name="WEBSITE" />에서 새롭거나 다른 유형의 보안 키를 요구할 수 있습니다.</translation>
+<translation id="7069811530847688087"><ph name="WEBSITE" />에서 새로운 또는 다른 유형의 보안 키를 요구할 수 있습니다.</translation>
 <translation id="7070484045139057854">사이트 데이터를 읽고 변경할 수 있음</translation>
 <translation id="7072010813301522126">바로가기 이름</translation>
 <translation id="707392107419594760">키보드 선택:</translation>
@@ -4014,7 +4016,7 @@
 <translation id="7289225569524511578">배경화면 앱 열기</translation>
 <translation id="7290242001003353852"><ph name="SAML_DOMAIN" />에서 호스팅하는 이 로그인 서비스는 카메라에 액세스합니다.</translation>
 <translation id="7290594223351252791">등록 확인</translation>
-<translation id="7295614427631867477">Android, Play 및 관련 앱은 각자의 데이터 수집 및 이용 정책을 따릅니다.</translation>
+<translation id="7295614427631867477">Android, Play 및 관련 앱은 각각의 데이터 수집 및 이용 정책을 따릅니다.</translation>
 <translation id="729583233778673644">AES 및 RC4 암호화를 허용합니다. RC4 암호화는 안전하지 않으므로 이 옵션을 사용하면 보안 위험도가 높아집니다.</translation>
 <translation id="7296774163727375165"><ph name="DOMAIN" /> 약관</translation>
 <translation id="7297443947353982503">사용자 이름 또는 비밀번호가 잘못되었거나 EAP 인증에 실패했습니다.</translation>
@@ -5062,7 +5064,6 @@
 <translation id="8898786835233784856">다음 탭 선택</translation>
 <translation id="8898840733695078011">신호 강도</translation>
 <translation id="8899851313684471736">새 창에서 링크 열기(&amp;W)</translation>
-<translation id="8902081783136172774">시작 페이지의 배경화면을 선택하세요.</translation>
 <translation id="8902667442496790482">텍스트 읽어주기 설정 열기</translation>
 <translation id="8904976895050290827">Chrome 동기화</translation>
 <translation id="890616557918890486">소스 변경</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index e47c9cd..42fccc1 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Atidaryti įrenginio pateikties nustatymus</translation>
 <translation id="1572266655485775982">Įgalinti „Wi-Fi“</translation>
 <translation id="1572876035008611720">Įveskite savo el. pašto adresą</translation>
-<translation id="1573150740912592860">Išsaugokite progresą</translation>
 <translation id="1576594961618857597">Numatytasis baltas pseudoportretas</translation>
 <translation id="1581962803218266616">Rodyti ieškojimo priemonėje</translation>
 <translation id="1584990664401018068">Naudojant šį „Wi-Fi“ tinklą (<ph name="NETWORK_ID" />) gali būti prašoma autentifikuoti.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Nepavyko prijungti įrenginio prie domeno. Įsitikinkite, kad neviršijote įrenginių, kuriuos galite pridėti, skaičiaus.</translation>
 <translation id="1744108098763830590">foninis puslapis</translation>
 <translation id="1745520510852184940">Visada tai daryti</translation>
+<translation id="1746402432151920942">Apsaugotos medijos identifikatorius</translation>
 <translation id="175196451752279553">I&amp;š naujo atidaryti uždarytą skirtuką</translation>
 <translation id="1753905327828125965">Dažniausiai lankomi</translation>
 <translation id="1756681705074952506">Įvesties metodas</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Neprisijungta</translation>
 <translation id="1832511806131704864">Telefono pakeitimas atnaujintas</translation>
 <translation id="1834503245783133039">Nepavyko atsisiųsti: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI įrenginiai</translation>
 <translation id="1838374766361614909">Išvalyti paiešką</translation>
 <translation id="1841545962859478868">Įrenginio administratorius gali stebėti:</translation>
 <translation id="1841616161104323629">Trūksta įrenginio įrašo.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Pranešti apie problemą</translation>
 <translation id="2220572644011485463">PIN kodas arba slaptažodis</translation>
 <translation id="2224444042887712269">Šis nustatymas priklauso <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Pritaikomumo įvykiai</translation>
 <translation id="2224551243087462610">Redaguoti aplanko pavadinimą</translation>
 <translation id="2226449515541314767">Ši svetainė užblokuota, kad negalėtų visiškai valdyti MIDI įrenginių.</translation>
 <translation id="2226720438730111184">Aprašykite problemą</translation>
@@ -5065,7 +5067,6 @@
 <translation id="8898786835233784856">Pasirinkti kitą skirtuką</translation>
 <translation id="8898840733695078011">Signalo stiprumas</translation>
 <translation id="8899851313684471736">Atidaryti nuorodą naujame &amp;lange</translation>
-<translation id="8902081783136172774">Pasirinkite pradžios puslapio ekrano foną</translation>
 <translation id="8902667442496790482">Atidaryti funkcijos „Teksto ištarimas“ nustatymus</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Keisti šaltinį</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 3f0683d..af0f2b0d9 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Atvērt attēlojuma ierīces iestatījumus</translation>
 <translation id="1572266655485775982">Iespējot Wi-Fi</translation>
 <translation id="1572876035008611720">Ievadiet savu e-pasta adresi.</translation>
-<translation id="1573150740912592860">Paveiktā saglabāšana</translation>
 <translation id="1576594961618857597">Noklusējuma iemiesojums baltā krāsā</translation>
 <translation id="1581962803218266616">Rādīt lietojumprogrammā Finder</translation>
 <translation id="1584990664401018068">Iespējams, izmantotajā Wi-Fi tīklā (<ph name="NETWORK_ID" />) tiks prasīta autentifikācija.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Ierīci nevar saistīt ar domēnu. Nepārsniedziet pievienojamo ierīču skaitu.</translation>
 <translation id="1744108098763830590">fona lapa</translation>
 <translation id="1745520510852184940">Vienmēr</translation>
+<translation id="1746402432151920942">Aizsargāta multivides satura identifikators</translation>
 <translation id="175196451752279553">Vēlr&amp;eiz atvērt aizvērto cilni</translation>
 <translation id="1753905327828125965">Visapmeklētākais</translation>
 <translation id="1756681705074952506">Ievades metode</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Nav pierakstījies</translation>
 <translation id="1832511806131704864">Tālruņa iestatījumu izmaiņas atjauninātas</translation>
 <translation id="1834503245783133039">Nesekmīga lejupielāde: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI ierīces</translation>
 <translation id="1838374766361614909">Notīrīt meklēšanas vaicājumu</translation>
 <translation id="1841545962859478868">Ierīces administrators var uzraudzīt šo:</translation>
 <translation id="1841616161104323629">Trūkst ierīces ieraksta.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Ziņot par problēmu</translation>
 <translation id="2220572644011485463">PIN vai parole</translation>
 <translation id="2224444042887712269">Šo iestatījumu veica <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Pieejamības notikumi</translation>
 <translation id="2224551243087462610">Rediģēt mapes nosaukumu</translation>
 <translation id="2226449515541314767">Šajā vietnē ir bloķēta MIDI ierīču pilnīga pārvaldība.</translation>
 <translation id="2226720438730111184">Aprakstiet problēmu.</translation>
@@ -5064,7 +5066,6 @@
 <translation id="8898786835233784856">Atlasīt nākamo cilni</translation>
 <translation id="8898840733695078011">Signāla stiprums</translation>
 <translation id="8899851313684471736">Atvērt saiti jaunā logā</translation>
-<translation id="8902081783136172774">Izvēlieties fona tapeti sākuma lapai</translation>
 <translation id="8902667442496790482">Atvērt funkcijas “Atlasīt, lai izrunātu” iestatījumus</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Mainīt avotu</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 0dc9ef53..624bd91 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">ഡിസ്‌പ്ലേ ഉപകരണ ക്രമീകരണം തുറക്കുക</translation>
 <translation id="1572266655485775982">Wi-Fi പ്രവർത്തനക്ഷമമാക്കൽ</translation>
 <translation id="1572876035008611720">നിങ്ങളുടെ ഇമെയിൽ നൽകുക</translation>
-<translation id="1573150740912592860">നിങ്ങളുടെ പുരോഗതി സംരക്ഷിക്കുക</translation>
 <translation id="1576594961618857597">ഡിഫോൾട്ടായ വെളുത്ത അവതാർ</translation>
 <translation id="1581962803218266616">ഫൈന്‍ഡറില്‍ കാണിക്കുക</translation>
 <translation id="1584990664401018068">നിങ്ങൾ ഉപയോഗിക്കുന്ന Wi-Fi നെറ്റ്‌വർക്കിന് (<ph name="NETWORK_ID" />) പരിശോധിച്ചുറപ്പിക്കൽ ആവശ്യമായി വരാം.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">ഉപകരണത്തെ ഡൊമെയ്‌നുമായി ബന്ധിപ്പിക്കാൻ കഴിയുന്നില്ല. നിങ്ങൾക്ക് ചേർക്കാനാവുന്ന ഉപകരണങ്ങളുടെ എണ്ണം കവിഞ്ഞിട്ടില്ലെന്ന് ഉറപ്പാക്കുക.</translation>
 <translation id="1744108098763830590">പശ്ചാത്തല പേജ്</translation>
 <translation id="1745520510852184940">എല്ലായ്‌പ്പോഴും ഇങ്ങനെ ചെയ്യുക</translation>
+<translation id="1746402432151920942">പരിരക്ഷിത മീഡിയ ഐഡന്റിഫയർ</translation>
 <translation id="175196451752279553">അടച്ച ടാബ് വീ&amp;ണ്ടും തുറക്കുക</translation>
 <translation id="1753905327828125965">കൂടുതൽ‍ സന്ദര്‍ശിച്ചത്</translation>
 <translation id="1756681705074952506">ഇന്‍‌പുട്ട് രീതി</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">പ്രവേശിച്ചിട്ടില്ല</translation>
 <translation id="1832511806131704864">ഫോൺ മാറ്റം അപ്‌ഡേറ്റ് ചെയ്‌തു</translation>
 <translation id="1834503245783133039">ഡൗൺലോഡ് പരാജയപ്പെട്ടു: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI ഉപകരണങ്ങൾ</translation>
 <translation id="1838374766361614909">തിരയൽ മായ്ക്കുക</translation>
 <translation id="1841545962859478868">ഉപകരണ അഡ്‌മിൻ ഇനിപ്പറയുന്നവ നിരീക്ഷിച്ചേക്കാം:</translation>
 <translation id="1841616161104323629">ഉപകരണ റെക്കോർഡ് കണ്ടെത്താനായില്ല.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">ഒരു പ്രശ്‌നം റിപ്പോർട്ടുചെയ്യുക</translation>
 <translation id="2220572644011485463">പിൻ അല്ലെങ്കിൽ പാസ്‌വേഡ്</translation>
 <translation id="2224444042887712269">ഈ ക്രമീകരണം <ph name="OWNER_EMAIL" />-ന്റേതാണ്.</translation>
+<translation id="2224471211857467033">ഉപയോഗസഹായി ഇവന്റുകൾ</translation>
 <translation id="2224551243087462610">ഫോള്‍ഡര്‍ നാമം എഡിറ്റ് ചെയ്യുക</translation>
 <translation id="2226449515541314767">MIDI ഉപകരണങ്ങളിൽ പൂർണ്ണനിയന്ത്രണം നേടുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ തടഞ്ഞു.</translation>
 <translation id="2226720438730111184">എന്താണ് സംഭവിക്കുന്നതെന്ന് ഞങ്ങളെ അറിയിക്കുക</translation>
@@ -5061,7 +5063,6 @@
 <translation id="8898786835233784856">അടുത്ത ടാബ് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="8898840733695078011">സിഗ്‌നൽ ശക്തി</translation>
 <translation id="8899851313684471736">ലിങ്ക് പുതിയ &amp;വിൻഡോയിൽ തുറക്കുക</translation>
-<translation id="8902081783136172774">നിങ്ങളുടെ ആരംഭ പേജിനായി ഒരു വാൾപേപ്പർ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="8902667442496790482">'വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക' ക്രമീകരണം തുറക്കുക</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">ഉറവിടം മാറ്റുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 48badd0..5b009f1 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">डिस्प्ले डिव्हाइस सेटिंग्ज उघडा</translation>
 <translation id="1572266655485775982">वाय-फाय सुरू</translation>
 <translation id="1572876035008611720">तुमचा ईमेल एंटर करा</translation>
-<translation id="1573150740912592860">तुमची प्रगती सेव्ह करा</translation>
 <translation id="1576594961618857597">डीफॉल्ट पांढरा अवतार</translation>
 <translation id="1581962803218266616">फाइंडर मध्ये दर्शवा</translation>
 <translation id="1584990664401018068">तुम्ही वापरत असलेल्या वाय-फाय नेटवर्कला (<ph name="NETWORK_ID" />) अॉथेंटिकेशनची आवश्यकता असू शकते.</translation>
@@ -487,6 +486,7 @@
 <translation id="1744060673522309905">डिव्हाइस डोमेनशी जोडू शकत नाही. तुम्हाला जोडता येऊ शकणाऱ्या डिव्हाइसची संख्या तुम्ही ओलांडलेली नाही याची खात्री करा.</translation>
 <translation id="1744108098763830590">पार्श्वभूमी पृष्ठ</translation>
 <translation id="1745520510852184940">हे नेहमी करा</translation>
+<translation id="1746402432151920942">संरक्षित मीडिया आयडेंटिफायर</translation>
 <translation id="175196451752279553">पु&amp;न्हा बंद टॅब उघडा</translation>
 <translation id="1753905327828125965">सर्वाधिक भेट दिलेले</translation>
 <translation id="1756681705074952506">इनपुट पद्धत</translation>
@@ -544,6 +544,7 @@
 <translation id="1830550083491357902">साइन इन केलेले नाही</translation>
 <translation id="1832511806131704864">फोन बदल अपडेट झाला</translation>
 <translation id="1834503245783133039">डाउनलोड करता आले नाही: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI डिव्हाइस</translation>
 <translation id="1838374766361614909">शोध साफ करा</translation>
 <translation id="1841545962859478868">डिव्हाइस प्रशासक कदाचित खालील गोष्टींचे परीक्षण करू शकतो:</translation>
 <translation id="1841616161104323629">डिव्हाइस रेकॉर्ड उपलब्ध नाही.</translation>
@@ -787,6 +788,7 @@
 <translation id="2220529011494928058">समस्येची तक्रार करा</translation>
 <translation id="2220572644011485463">पिन किंवा पासवर्ड</translation>
 <translation id="2224444042887712269">ही सेटिंग <ph name="OWNER_EMAIL" /> च्या मालकीची आहे.</translation>
+<translation id="2224471211857467033">अॅक्सेसिबिलिटी इव्हेंट</translation>
 <translation id="2224551243087462610">फोल्डर नाव संपादित करा</translation>
 <translation id="2226449515541314767">MIDI डिव्हाइसचे पूर्ण नियंत्रण असण्यापासून ही साइट अवरोधित केली गेली आहे.</translation>
 <translation id="2226720438730111184">काय होत आहे ते आम्हाला सांगा</translation>
@@ -5063,7 +5065,6 @@
 <translation id="8898786835233784856">पुढील टॅब निवडा</translation>
 <translation id="8898840733695078011">सिग्नल सामर्थ्य</translation>
 <translation id="8899851313684471736">नवीन &amp;विंडोमध्ये लिंक उघडा</translation>
-<translation id="8902081783136172774">तुमच्या सुरू करा पेजसाठी वॉलपेपर निवडा</translation>
 <translation id="8902667442496790482">बोलण्यासाठी निवडा सेटिंग्ज उघडा</translation>
 <translation id="8904976895050290827">Chrome सिंक</translation>
 <translation id="890616557918890486">स्रोत बदला</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index e154992..a00ab95e 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Buka tetapan peranti paparan</translation>
 <translation id="1572266655485775982">Wi-Fi didayakan</translation>
 <translation id="1572876035008611720">Masukkan e-mel anda</translation>
-<translation id="1573150740912592860">Simpan kemajuan anda</translation>
 <translation id="1576594961618857597">Avatar putih lalai</translation>
 <translation id="1581962803218266616">Show in Finder</translation>
 <translation id="1584990664401018068">Rangkaian Wi-Fi yang anda gunakan (<ph name="NETWORK_ID" />) mungkin menghendaki pengesahan.</translation>
@@ -905,7 +904,7 @@
 <translation id="2392369802118427583">Aktifkan</translation>
 <translation id="2394566832561516196">Tetapan akan dikosongkan pada muat semula seterusnya.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> anda berjaya didaftarkan untuk pengurusan perusahaan, tetapi gagal menghantar maklumat aset dan lokasinya. Sila masukkan maklumat ini secara manual daripada Admin console anda untuk peranti ini.</translation>
-<translation id="2396783860772170191">Masukkan pin 4 angka (0000-9999)</translation>
+<translation id="2396783860772170191">Masukkan PIN 4 angka (0000-9999)</translation>
 <translation id="2408955596600435184">Masukkan PIN anda</translation>
 <translation id="241082044617551207">Pemalam tidak diketahui</translation>
 <translation id="2413749388954403953">Ubah antara muka pengguna penanda halaman</translation>
@@ -1001,7 +1000,7 @@
 <translation id="2538361623464451692">Penyegerakan dilumpuhkan</translation>
 <translation id="2540449034743108469">Tekan "Mula" untuk mendengar aktiviti sambungan</translation>
 <translation id="2541002089857695151">Optimumkan penghantaran skrin penuh?</translation>
-<translation id="2541706104884128042">Masa tidur baharu ditetapkan</translation>
+<translation id="2541706104884128042">Waktu tidur baharu ditetapkan</translation>
 <translation id="2544853746127077729">Sijil pengesahan ditolak oleh rangkaian</translation>
 <translation id="2549985041256363841">Mulakan rakaman</translation>
 <translation id="2550212893339833758">Memori ditukar</translation>
@@ -1334,7 +1333,7 @@
 <translation id="304747341537320566">Enjin Pertuturan</translation>
 <translation id="3047644958362961983">Maklumat ini membantu kami memahami masalah Assistant anda dengan lebih baik. Maklumat ini disimpan sehingga 90 hari dan akses dihadkan kepada pasukan kejuruteraan dan maklum balas yang berkenaan.</translation>
 <translation id="3053013834507634016">Penggunaan Penting Sijil</translation>
-<translation id="3053273573829329829">Dayakan pin pengguna</translation>
+<translation id="3053273573829329829">Dayakan PIN pengguna</translation>
 <translation id="3058498974290601450">Anda boleh mematikan penyegerakan pada bila-bila masa dalam tetapan</translation>
 <translation id="3060379269883947824">Dayakan pilih untuk bercakap</translation>
 <translation id="3061707000357573562">Perkhidmatan Tampung</translation>
@@ -3772,7 +3771,7 @@
 <translation id="692114467174262153"><ph name="ALTERNATIVE_BROWSER_NAME" /> tidak dapat dibuka</translation>
 <translation id="6921709132208495314">Berhenti menggunakan data pada halaman ini</translation>
 <translation id="6922128026973287222">Simpan data dan semak imbas dengan lebih pantas menggunakan Penjimat Data Google. Klik untuk mengetahui lebih lanjut.</translation>
-<translation id="6922745772873733498">Masukkan pin untuk mencetak</translation>
+<translation id="6922745772873733498">Masukkan PIN untuk mencetak</translation>
 <translation id="6923132443355966645">Tatal / Klik</translation>
 <translation id="6923633482430812883">Ralat semasa melekapkan kongsi. Sila pastikan bahawa pelayan fail yang bersambung dengan anda itu menyokong SMBv2 atau yang lebih baharu.</translation>
 <translation id="6930036377490597025">Kunci keselamatan luaran atau penderia terbina dalam</translation>
@@ -4988,7 +4987,7 @@
 <translation id="8780123805589053431">Dapatkan perihalan imej daripada Google</translation>
 <translation id="8780443667474968681">Carian suara telah dimatikan.</translation>
 <translation id="878069093594050299">Sijil telah disahkan untuk penggunaan berikut:</translation>
-<translation id="8781470833671194250">Klik penstabilan kedudukan</translation>
+<translation id="8781470833671194250">Penstabilan kedudukan klik</translation>
 <translation id="8781980678064919987">Matikan apabila penutup ditutup</translation>
 <translation id="8782565991310229362">Pelancaran aplikasi kios dibatalkan.</translation>
 <translation id="8783093612333542422">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; ingin berkongsi pencetak &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; dengan anda.</translation>
@@ -5069,7 +5068,6 @@
 <translation id="8898786835233784856">Pilih Tab Seterusnya</translation>
 <translation id="8898840733695078011">Kekuatan isyarat</translation>
 <translation id="8899851313684471736">Buka pautan dalam tetingkap &amp;baharu</translation>
-<translation id="8902081783136172774">Pilih kertas dinding untuk halaman mula anda</translation>
 <translation id="8902667442496790482">Buka tetapan pilih untuk bercakap</translation>
 <translation id="8904976895050290827">Penyegerakan Chrome</translation>
 <translation id="890616557918890486">Tukar sumber</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index ee298424..15964ad 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Weergave-instellingen van apparaat openen</translation>
 <translation id="1572266655485775982">Wifi inschakelen</translation>
 <translation id="1572876035008611720">Geef je e-mailadres op</translation>
-<translation id="1573150740912592860">Voortgang opslaan</translation>
 <translation id="1576594961618857597">Standaard witte avatar</translation>
 <translation id="1581962803218266616">Toon in Finder</translation>
 <translation id="1584990664401018068">Mogelijk is verificatie vereist voor het wifi-netwerk dat je gebruikt (<ph name="NETWORK_ID" />).</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Kan het apparaat niet aan het domein koppelen. Zorg ervoor dat je het aantal apparaten dat je kunt toevoegen niet overschrijdt.</translation>
 <translation id="1744108098763830590">achtergrondpagina</translation>
 <translation id="1745520510852184940">Dit altijd doen</translation>
+<translation id="1746402432151920942">ID voor beschermde media</translation>
 <translation id="175196451752279553">Gesloten tabblad opni&amp;euw openen</translation>
 <translation id="1753905327828125965">Meest bezocht</translation>
 <translation id="1756681705074952506">Invoermethode</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Niet ingelogd</translation>
 <translation id="1832511806131704864">Telefoonwijziging geüpdatet</translation>
 <translation id="1834503245783133039">Download niet geslaagd: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-apparaten</translation>
 <translation id="1838374766361614909">Zoekopdracht wissen</translation>
 <translation id="1841545962859478868">De apparaatbeheerder kan het volgende controleren:</translation>
 <translation id="1841616161104323629">Ontbrekende apparaatrecord.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Een probleem melden</translation>
 <translation id="2220572644011485463">Pincode of wachtwoord</translation>
 <translation id="2224444042887712269">Deze instelling hoort bij <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Toegankelijkheidsgebeurtenissen</translation>
 <translation id="2224551243087462610">Mapnaam bewerken</translation>
 <translation id="2226449515541314767">Deze site is geblokkeerd voor volledig beheer van MIDI-apparaten.</translation>
 <translation id="2226720438730111184">Vertel ons wat er aan de hand is</translation>
@@ -5064,7 +5066,6 @@
 <translation id="8898786835233784856">Selecteer volgend tabblad</translation>
 <translation id="8898840733695078011">Signaalsterkte</translation>
 <translation id="8899851313684471736">Link openen in nieu&amp;w venster</translation>
-<translation id="8902081783136172774">Een achtergrond kiezen voor je startpagina</translation>
 <translation id="8902667442496790482">Instellingen voor 'Selecteer om uitgesproken te worden' openen</translation>
 <translation id="8904976895050290827">Chrome-synchronisatie</translation>
 <translation id="890616557918890486">Bron wijzigen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 6e5f971b..3185df92 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Åpne skjerminnstillingene på enheten</translation>
 <translation id="1572266655485775982">Slå på Wi-Fi</translation>
 <translation id="1572876035008611720">Skriv inn e-postadressen din</translation>
-<translation id="1573150740912592860">Lagre fremgangen din</translation>
 <translation id="1576594961618857597">Hvitt standardbrukerbilde</translation>
 <translation id="1581962803218266616">Vis i Finder</translation>
 <translation id="1584990664401018068">Det kan hende at Wi-Fi-nettverket du bruker (<ph name="NETWORK_ID" />), krever autentisering.</translation>
@@ -485,6 +484,7 @@
 <translation id="1744060673522309905">Kan ikke knytte enheten til domenet. Kontrollér at du ikke har overskredet antall enheter som du kan legge til.</translation>
 <translation id="1744108098763830590">bakgrunnsside</translation>
 <translation id="1745520510852184940">Gjør alltid dette</translation>
+<translation id="1746402432151920942">Beskyttet medieidentifikator</translation>
 <translation id="175196451752279553">Gj&amp;enåpne den lukkede fanen</translation>
 <translation id="1753905327828125965">Mest besøkt</translation>
 <translation id="1756681705074952506">Inndatametode</translation>
@@ -542,6 +542,7 @@
 <translation id="1830550083491357902">Ikke pålogget</translation>
 <translation id="1832511806131704864">Telefonendring oppdatert</translation>
 <translation id="1834503245783133039">Nedlasting mislykket: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-enheter</translation>
 <translation id="1838374766361614909">Fjern søket</translation>
 <translation id="1841545962859478868">Enhetsadministratoren kan overvåke følgende:</translation>
 <translation id="1841616161104323629">Manglende enhetsoppføring.</translation>
@@ -785,6 +786,7 @@
 <translation id="2220529011494928058">Rapportér et problem</translation>
 <translation id="2220572644011485463">PIN-kode eller passord</translation>
 <translation id="2224444042887712269">Denne innstillingen tilhører <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Tilgjengelighetshendelser</translation>
 <translation id="2224551243087462610">Rediger mappenavn</translation>
 <translation id="2226449515541314767">Full kontroll over MIDI-enheter er blokkert for dette nettstedet.</translation>
 <translation id="2226720438730111184">Fortell oss hva som skjer</translation>
@@ -5055,7 +5057,6 @@
 <translation id="8898786835233784856">Velg neste fane</translation>
 <translation id="8898840733695078011">Signalstyrke</translation>
 <translation id="8899851313684471736">Å&amp;pne linken i et nytt vindu</translation>
-<translation id="8902081783136172774">Velg en bakgrunn for startsiden din</translation>
 <translation id="8902667442496790482">Åpne innstillingene for Tekstopplesing</translation>
 <translation id="8904976895050290827">Chrome-synkronisering</translation>
 <translation id="890616557918890486">Endre kilde</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 830c2f0..e336ae6 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Otwórz ustawienia wyświetlacza</translation>
 <translation id="1572266655485775982">Włączanie Wi-Fi</translation>
 <translation id="1572876035008611720">Wpisz swój adres e-mail</translation>
-<translation id="1573150740912592860">Zapisuj swoje postępy</translation>
 <translation id="1576594961618857597">Domyślny biały awatar</translation>
 <translation id="1581962803218266616">Pokaż w Finderze</translation>
 <translation id="1584990664401018068">Sieć Wi-Fi (<ph name="NETWORK_ID" />), której używasz, może wymagać uwierzytelniania.</translation>
@@ -5068,7 +5067,6 @@
 <translation id="8898786835233784856">Wybierz następną kartę</translation>
 <translation id="8898840733695078011">Siła sygnału</translation>
 <translation id="8899851313684471736">Otwórz link w nowym &amp;oknie</translation>
-<translation id="8902081783136172774">Wybierz tapetę strony startowej</translation>
 <translation id="8902667442496790482">Otwórz ustawienia funkcji Przeczytaj na głos</translation>
 <translation id="8904976895050290827">Synchronizacja Chrome</translation>
 <translation id="890616557918890486">Zmień źródło</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 33dc362..a048161c 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -31,7 +31,7 @@
 <translation id="1036982837258183574">Pressione |<ph name="ACCELERATOR" />| para sair do modo tela cheia</translation>
 <translation id="1038168778161626396">Somente codificar</translation>
 <translation id="1039337018183941703">Arquivo inválido ou corrompido</translation>
-<translation id="1041175011127912238">Esta página não está respondendo.</translation>
+<translation id="1041175011127912238">Esta página não está respondendo</translation>
 <translation id="1042174272890264476">Seu computador já vem com a biblioteca RLZ do <ph name="SHORT_PRODUCT_NAME" /> integrada. O RLZ atribui uma tag não exclusiva e sem identificação pessoal para medir as pesquisas e o uso do <ph name="SHORT_PRODUCT_NAME" /> gerados por uma campanha promocional específica. Esses marcadores às vezes aparecem em consultas da Pesquisa Google no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1046059554679513793">Ops. Este nome já está em uso.</translation>
 <translation id="1046635659603195359">Parece que você já configurou o "Voice Match" com seu Google Assistente em outro dispositivo. Essas gravações anteriores podem ser usadas para criar um modelo de voz neste dispositivo. Isso levará menos de um minuto.</translation>
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Abrir configurações de exibição do dispositivo</translation>
 <translation id="1572266655485775982">Ativar Wi-Fi</translation>
 <translation id="1572876035008611720">Digite seu e-mail</translation>
-<translation id="1573150740912592860">Salve seu progresso</translation>
 <translation id="1576594961618857597">Avatar branco padrão</translation>
 <translation id="1581962803218266616">Mostrar no Finder</translation>
 <translation id="1584990664401018068">A rede Wi-Fi que você está usando (<ph name="NETWORK_ID" />) pode exigir autenticação.</translation>
@@ -1715,7 +1714,7 @@
 <translation id="3664511988987167893">Ícone de extensão</translation>
 <translation id="3665589677786828986">O Google Chrome detectou que algumas das suas configurações foram corrompidas por outro programa e as redefiniu para os padrões originais.</translation>
 <translation id="3668570675727296296">Configurações de idioma</translation>
-<translation id="366867565525278777">Falha na instalação devido à falta de espaço de armazenamento. É necessário ter pelo menos <ph name="INSTALL_SIZE" /> de espaço livre. Para liberar espaço, exclua arquivos do armazenamento do dispositivo.</translation>
+<translation id="366867565525278777">Falha na instalação devido à falta de espaço de armazenamento. É necessário pelo menos <ph name="INSTALL_SIZE" /> de espaço livre. Para liberar espaço, exclua arquivos do armazenamento do dispositivo.</translation>
 <translation id="3668801437375206837">Para diagnosticar melhor os problemas de Bluetooth, os Googlers podem incluir outros registros de Bluetooth aos relatórios de feedback deles. Quando essa opção estiver marcada, seu relatório incluirá registros btsnoop e HCI da sua sessão atual, depois de terem sido corrigidos para remover o máximo de PII possível. O acesso a esses registros será restrito aos gerentes do grupo de produtos do Chrome OS no Listnr. Os registros serão excluídos após 90 dias.</translation>
 <translation id="3668823961463113931">Manipuladores</translation>
 <translation id="3670113805793654926">Dispositivos de qualquer fornecedor</translation>
@@ -4021,7 +4020,7 @@
 <translation id="7289225569524511578">Abra o app de papel de parede</translation>
 <translation id="7290242001003353852">Este serviço de login, hospedado por <ph name="SAML_DOMAIN" />, está acessando sua câmara.</translation>
 <translation id="7290594223351252791">Confirmar registro</translation>
-<translation id="7295614427631867477">O Android, o Google Play e os apps associados são regidos pelas próprias políticas de uso e coleta de dados.</translation>
+<translation id="7295614427631867477">O Android, o Google Play e os apps associados são regidos pelas próprias políticas de uso e de coleta de dados.</translation>
 <translation id="729583233778673644">Permitir a codificação AES e RC4. O uso dessa opção é mais arriscado, porque as criptografias RC4 não são seguras.</translation>
 <translation id="7296774163727375165">Termos de <ph name="DOMAIN" /></translation>
 <translation id="7297443947353982503">Nome de usuário/senha incorretos ou falha de autenticação EAP</translation>
@@ -5070,7 +5069,6 @@
 <translation id="8898786835233784856">Selecionar próxima guia</translation>
 <translation id="8898840733695078011">Intensidade do sinal</translation>
 <translation id="8899851313684471736">Abrir link em uma nova &amp;janela</translation>
-<translation id="8902081783136172774">Escolha um plano de fundo para sua página inicial</translation>
 <translation id="8902667442496790482">Abrir configurações de Selecionar para ouvir</translation>
 <translation id="8904976895050290827">Sincronização do Google Chrome</translation>
 <translation id="890616557918890486">Alterar origem</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 672da3ab..83a8128 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Abrir definições do dispositivo de visualização</translation>
 <translation id="1572266655485775982">Ativar Wi-Fi</translation>
 <translation id="1572876035008611720">Introduza o seu email</translation>
-<translation id="1573150740912592860">Guardar o seu progresso</translation>
 <translation id="1576594961618857597">Avatar branco predefinido</translation>
 <translation id="1581962803218266616">Mostrar no Finder</translation>
 <translation id="1584990664401018068">A rede Wi-Fi que está a utilizar (<ph name="NETWORK_ID" />) pode necessitar de autenticação.</translation>
@@ -5067,7 +5066,6 @@
 <translation id="8898786835233784856">Selecionar separador seguinte</translation>
 <translation id="8898840733695078011">Intensidade do sinal</translation>
 <translation id="8899851313684471736">Abrir link numa nova &amp;janela</translation>
-<translation id="8902081783136172774">Escolha uma imagem de fundo para a página de início</translation>
 <translation id="8902667442496790482">Abrir as definições de Selecionar para ativar voz</translation>
 <translation id="8904976895050290827">Sincronização do Google Chrome</translation>
 <translation id="890616557918890486">Alterar origem</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 66736944..2384471 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Deschide setările dispozitivului privind afișajul</translation>
 <translation id="1572266655485775982">Activează Wi-Fi</translation>
 <translation id="1572876035008611720">Introdu adresa de e-mail</translation>
-<translation id="1573150740912592860">Salvează până aici</translation>
 <translation id="1576594961618857597">Avatar alb prestabilit</translation>
 <translation id="1581962803218266616">Afișează în Finder</translation>
 <translation id="1584990664401018068">Este posibil ca rețeaua Wi-Fi pe care o folosești (<ph name="NETWORK_ID" />) să solicite autentificare.</translation>
@@ -5067,7 +5066,6 @@
 <translation id="8898786835233784856">Selectează următoarea filă</translation>
 <translation id="8898840733695078011">Puterea semnalului</translation>
 <translation id="8899851313684471736">Deschide linkul într-o &amp;fereastră nouă</translation>
-<translation id="8902081783136172774">Alege o imagine de fundal pentru pagina de pornire</translation>
 <translation id="8902667442496790482">Deschide setările „Selectează și ascultă”</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Schimbă sursa</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index c25db5c..3796d37 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -369,7 +369,6 @@
 <translation id="1568323446248056064">Открыть настройки экрана</translation>
 <translation id="1572266655485775982">Включить Wi-Fi</translation>
 <translation id="1572876035008611720">Эл. почта</translation>
-<translation id="1573150740912592860">Сохраняйте изменения</translation>
 <translation id="1576594961618857597">Аватар по умолчанию (белый)</translation>
 <translation id="1581962803218266616">Показать в Finder</translation>
 <translation id="1584990664401018068">Для сети Wi-Fi (<ph name="NETWORK_ID" />) может потребоваться аутентификация.</translation>
@@ -487,6 +486,7 @@
 <translation id="1744060673522309905">Не удалось подключить устройство к домену. Убедитесь, что вы не превысили допустимое количество устройств.</translation>
 <translation id="1744108098763830590">фоновая страница</translation>
 <translation id="1745520510852184940">Всегда переводить</translation>
+<translation id="1746402432151920942">Идентификатор защищенного мультимедийного контента</translation>
 <translation id="175196451752279553">От&amp;крыть закрытую вкладку</translation>
 <translation id="1753905327828125965">Наиболее посещаемые</translation>
 <translation id="1756681705074952506">Способ ввода</translation>
@@ -544,6 +544,7 @@
 <translation id="1830550083491357902">Вход не выполнен</translation>
 <translation id="1832511806131704864">Сведения о телефоне обновлены</translation>
 <translation id="1834503245783133039">Не удалось скачать файл <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI-устройства</translation>
 <translation id="1838374766361614909">Удалить условия поиска</translation>
 <translation id="1841545962859478868">Администратор устройства может просматривать следующую информацию:</translation>
 <translation id="1841616161104323629">Устройство не зарегистрировано.</translation>
@@ -787,6 +788,7 @@
 <translation id="2220529011494928058">Сообщить о проблеме</translation>
 <translation id="2220572644011485463">PIN-код или пароль</translation>
 <translation id="2224444042887712269">Этот параметр установлен пользователем <ph name="OWNER_EMAIL" /></translation>
+<translation id="2224471211857467033">События, связанные со специальными возможностями</translation>
 <translation id="2224551243087462610">Изменить имя папки</translation>
 <translation id="2226449515541314767">Этому сайту запрещено получать полный контроль над устройствами MIDI.</translation>
 <translation id="2226720438730111184">Описание проблемы</translation>
@@ -5063,7 +5065,6 @@
 <translation id="8898786835233784856">Выбрать следующую вкладку</translation>
 <translation id="8898840733695078011">Уровень сигнала</translation>
 <translation id="8899851313684471736">Открыть ссылку в новом &amp;окне</translation>
-<translation id="8902081783136172774">Выберите обои для стартовой страницы.</translation>
 <translation id="8902667442496790482">Открыть настройки озвучивания при нажатии</translation>
 <translation id="8904976895050290827">Синхронизация Chrome</translation>
 <translation id="890616557918890486">Изменить источник</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index e99b52d..4c1341a0 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Otvoriť nastavenia obrazovky</translation>
 <translation id="1572266655485775982">Povolenie Wi‑Fi</translation>
 <translation id="1572876035008611720">Zadajte svoj e-mail</translation>
-<translation id="1573150740912592860">Uložte svoj postup</translation>
 <translation id="1576594961618857597">Predvolený biely avatar</translation>
 <translation id="1581962803218266616">Zobraziť v aplikácii Finder</translation>
 <translation id="1584990664401018068">Využívaná sieť Wi‑Fi (<ph name="NETWORK_ID" />) môže vyžadovať overenie totožnosti.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Zariadenie sa nepodarilo pripojiť k doméne. Skontrolujte, či ste nepresiahli počet zariadení, ktoré môžete pridať.</translation>
 <translation id="1744108098763830590">stránka na pozadí</translation>
 <translation id="1745520510852184940">Vždy prekladať</translation>
+<translation id="1746402432151920942">Identifikátor chráneného média</translation>
 <translation id="175196451752279553">Znovu o&amp;tvoriť zatvorenú kartu</translation>
 <translation id="1753905327828125965">Najviac navšt.</translation>
 <translation id="1756681705074952506">Metóda vstupu</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Neprihlásený/-á</translation>
 <translation id="1832511806131704864">Zmena telefónu bola aktualizovaná</translation>
 <translation id="1834503245783133039">Sťahovanie sa nepodarilo: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Zariadenia MIDI</translation>
 <translation id="1838374766361614909">Vymazať vyhľadávanie</translation>
 <translation id="1841545962859478868">Správca zariadenia môže monitorovať nasledovné:</translation>
 <translation id="1841616161104323629">Chýbajúci záznam zariadenia.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Nahlásiť problém</translation>
 <translation id="2220572644011485463">PIN alebo heslo</translation>
 <translation id="2224444042887712269">Nastavenie patrí používateľovi <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Udalosti dostupnosti</translation>
 <translation id="2224551243087462610">Upraviť názov priečinka</translation>
 <translation id="2226449515541314767">Týmto stránkam bola zablokovaná úplná kontrola nad zariadeniami MIDI.</translation>
 <translation id="2226720438730111184">Povedzte nám, čo sa deje</translation>
@@ -5061,7 +5063,6 @@
 <translation id="8898786835233784856">Vybrať ďalšiu kartu</translation>
 <translation id="8898840733695078011">Sila signálu</translation>
 <translation id="8899851313684471736">Otvoriť odkaz v novom &amp;okne</translation>
-<translation id="8902081783136172774">Pridajte si na úvodnú stránku tapetu</translation>
 <translation id="8902667442496790482">Otvoriť nastavenia počúvania vybraného textu</translation>
 <translation id="8904976895050290827">Synchronizácia Chromu</translation>
 <translation id="890616557918890486">Zmeniť zdroj</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index e56a2fab..345820a3 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Odpiranje nastavitev zaslona v napravi</translation>
 <translation id="1572266655485775982">Omogočanje Wi-Fi-ja</translation>
 <translation id="1572876035008611720">Vnesite e-poštni naslov</translation>
-<translation id="1573150740912592860">Shranite napredek</translation>
 <translation id="1576594961618857597">Privzeti beli avatar</translation>
 <translation id="1581962803218266616">Pokaži v Finderju</translation>
 <translation id="1584990664401018068">Omrežje Wi-Fi, ki ga uporabljate (<ph name="NETWORK_ID" />), bo morda zahtevalo preverjanje pristnosti.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Naprave ni mogoče pridružiti domeni. Preverite, ali niste presegli števila naprav, ki jih lahko dodate.</translation>
 <translation id="1744108098763830590">stran v ozadju</translation>
 <translation id="1745520510852184940">Vedno izvedi to</translation>
+<translation id="1746402432151920942">Identifikator zaščitene predstavnosti</translation>
 <translation id="175196451752279553">&amp;Znova odpri zaprt zavihek</translation>
 <translation id="1753905327828125965">Najpogosteje obiskane</translation>
 <translation id="1756681705074952506">Način vnosa</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Niste prijavljeni</translation>
 <translation id="1832511806131704864">Sprememba telefona posodobljena</translation>
 <translation id="1834503245783133039">Prenos ni uspel: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">Naprave MIDI</translation>
 <translation id="1838374766361614909">Čiščenje iskanja</translation>
 <translation id="1841545962859478868">Skrbnik naprave morda nadzira naslednje:</translation>
 <translation id="1841616161104323629">Manjka zapis o napravi.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Prijavite težavo</translation>
 <translation id="2220572644011485463">Koda PIN ali geslo</translation>
 <translation id="2224444042887712269">Ta nastavitev se nanaša na uporabnika <ph name="OWNER_EMAIL" />.</translation>
+<translation id="2224471211857467033">Dogodki funkcij za ljudi s posebnimi potrebami</translation>
 <translation id="2224551243087462610">Uredi ime mape</translation>
 <translation id="2226449515541314767">Temu spletnemu mestu je preprečen popolni nadzor nad napravami MIDI.</translation>
 <translation id="2226720438730111184">Povejte nam, kaj se dogaja</translation>
@@ -5066,7 +5068,6 @@
 <translation id="8898786835233784856">Izberi naslednji zavihek</translation>
 <translation id="8898840733695078011">Moč signala</translation>
 <translation id="8899851313684471736">Odpri povezavo v novem &amp;oknu</translation>
-<translation id="8902081783136172774">Izbira ozadja za začetno stran</translation>
 <translation id="8902667442496790482">Odpri nastavitve storitve Izberite in poslušajte</translation>
 <translation id="8904976895050290827">Sinhronizacija za Chrome</translation>
 <translation id="890616557918890486">Spremeni vir</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index e5fb4fe..077263b 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Отвори подешавања уређаја за екран</translation>
 <translation id="1572266655485775982">Омогући Wi-Fi</translation>
 <translation id="1572876035008611720">Унесите имејл</translation>
-<translation id="1573150740912592860">Сачувајте досадашњи напредак</translation>
 <translation id="1576594961618857597">Подразумевани бели аватар</translation>
 <translation id="1581962803218266616">Прикажи у Finder-у</translation>
 <translation id="1584990664401018068">Wi-Fi мрежа коју користите (<ph name="NETWORK_ID" />) ће можда захтевати потврду аутентичности.</translation>
@@ -5065,7 +5064,6 @@
 <translation id="8898786835233784856">Изабери следећу картицу</translation>
 <translation id="8898840733695078011">Јачина сигнала</translation>
 <translation id="8899851313684471736">Отвори линк у новом &amp;прозору</translation>
-<translation id="8902081783136172774">Изаберите позадину за почетну страницу</translation>
 <translation id="8902667442496790482">Отвори подешавања за услугу Изаберите за говор</translation>
 <translation id="8904976895050290827">Синхронизација Chrome прегледача</translation>
 <translation id="890616557918890486">Промени извор</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 8ec86670..f5e8e998 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Öppna enhetsinställningarna för skärm</translation>
 <translation id="1572266655485775982">Aktivera Wi-Fi</translation>
 <translation id="1572876035008611720">Ange din e-postadress</translation>
-<translation id="1573150740912592860">Spara det du gör</translation>
 <translation id="1576594961618857597">Vit standardavatar</translation>
 <translation id="1581962803218266616">Visa i Finder</translation>
 <translation id="1584990664401018068">Wi-Fi-nätverket du använder (<ph name="NETWORK_ID" />) kanske kräver autentisering.</translation>
@@ -5066,7 +5065,6 @@
 <translation id="8898786835233784856">Välj nästa flik</translation>
 <translation id="8898840733695078011">Signalstyrka</translation>
 <translation id="8899851313684471736">Öppna länk i nytt f&amp;önster</translation>
-<translation id="8902081783136172774">Välj en bakgrund för startsidan</translation>
 <translation id="8902667442496790482">Öppna inställningarna för Textuppläsning</translation>
 <translation id="8904976895050290827">Synkronisera med Chrome</translation>
 <translation id="890616557918890486">Ändra källa</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 00cf10a..98c1aa1 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">Fungua mipangilio ya kifaa ya onyesho</translation>
 <translation id="1572266655485775982">Washa Wi-Fi</translation>
 <translation id="1572876035008611720">Weka anwani yako ya barua pepe</translation>
-<translation id="1573150740912592860">Hifadhi maendeleo yako</translation>
 <translation id="1576594961618857597">Ishara chaguomsingi nyeupe</translation>
 <translation id="1581962803218266616">Onyesha katika Kipataji</translation>
 <translation id="1584990664401018068">Mtandao wa Wi-Fi unaotumia (<ph name="NETWORK_ID" />) huenda ukahitaji uidhinishaji.</translation>
@@ -5061,7 +5060,6 @@
 <translation id="8898786835233784856">Chagua Kichupo Kinachofuata</translation>
 <translation id="8898840733695078011">Uthabiti wa mawimbi</translation>
 <translation id="8899851313684471736">Fungua kiungo katika &amp;dirisha jipya</translation>
-<translation id="8902081783136172774">Chagua mandhari ya ukurasa wako wa kwanza</translation>
 <translation id="8902667442496790482">Fungua mipangilio ya kipengele cha chagua ili izungumze</translation>
 <translation id="8904976895050290827">Usawazishaji wa Chrome</translation>
 <translation id="890616557918890486">Badilisha chanzo</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 4590005..62cdf76 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -266,7 +266,7 @@
 <translation id="1408504635543854729">கோப்புகள் பயன்பாட்டில் சாதனத்தின் உள்ளடக்கத்தைத் தேடவும். உள்ளடக்கத்தை நிர்வாகி கட்டுப்படுத்துவதால் அதைத் திருத்த முடியாது.</translation>
 <translation id="1408789165795197664">மேம்பட்டவை...</translation>
 <translation id="1409390508152595145">மேற்பார்வையிடப்படும் பயனரை உருவாக்கு</translation>
-<translation id="1410197035576869800">பயன்பாட்டின் ஐகான்</translation>
+<translation id="1410197035576869800">ஆப்ஸின் ஐகான்</translation>
 <translation id="1410616244180625362">உங்கள் கேமராவை அணுக <ph name="HOST" /> ஐத் தொடர்ந்து அனுமதிக்கவும்</translation>
 <translation id="1414648216875402825">உருவாக்கப்பட்டு வரும் அம்சங்கள் உள்ள <ph name="PRODUCT_NAME" /> இன் நிலையற்ற பதிப்பிற்கு மேம்படுத்துகிறீர்கள். சிதைவுகள் மற்றும் எதிர்பாராத பிழைகள் ஏற்படும். கவனமாக தொடரவும்.</translation>
 <translation id="1415708812149920388">கிளிப்போர்டைப் படிப்பதற்கான அணுகல் மறுக்கப்பட்டது</translation>
@@ -369,7 +369,6 @@
 <translation id="1568323446248056064">திரை அமைப்புகளைத் திற</translation>
 <translation id="1572266655485775982">வைஃபையை இயக்கு</translation>
 <translation id="1572876035008611720">மின்னஞ்சலை உள்ளிடவும்</translation>
-<translation id="1573150740912592860">உங்கள் செயல்நிலையைச் சேமியுங்கள்</translation>
 <translation id="1576594961618857597">இயல்பு வெள்ளைநிற அவதார்</translation>
 <translation id="1581962803218266616">&amp;கண்டுபிடிப்பானில் காண்பி</translation>
 <translation id="1584990664401018068">பயன்படுத்திக் கொண்டிருக்கும் வைஃபை நெட்வொர்க்குக்கு (<ph name="NETWORK_ID" />) அங்கீகரிப்பு தேவைப்படலாம்.</translation>
@@ -503,7 +502,7 @@
 <translation id="1768278914020124551">அச்சச்சோ!  உள்நுழைவுச் சேவையகத்தைத் தொடர்புகொள்வதில் பிழை ஏற்பட்டது. நெட்வொர்க் இணைப்பையும் டொமைன் பெயரையும் சரிபார்த்து, மீண்டும் முயலவும்.</translation>
 <translation id="1769104665586091481">இணைப்பை புதிய &amp;சாளரத்தில் திற</translation>
 <translation id="1773212559869067373">அடையாளச் சான்றிதழ் பயனரின் கம்ப்யூட்டரில் நிராகரிக்கப்பட்டது</translation>
-<translation id="177336675152937177">ஹோஸ்ட் செய்யப்பட்ட பயன்பாட்டின் தரவு</translation>
+<translation id="177336675152937177">ஹோஸ்ட் செய்யப்பட்ட ஆப்ஸின் தரவு</translation>
 <translation id="1774833706453699074">திறந்திருக்கும் பக்கங்களைப் புக்மார்க் செய்...</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1779652936965200207">"<ph name="DEVICE_NAME" />" இல் இந்தக் கடவுவிசையை உள்ளிடுக:</translation>
@@ -2677,7 +2676,7 @@
 <translation id="5234764350956374838">நிராகரி</translation>
 <translation id="5235050375939235066">ஆப்ஸை நிறுவல் நீக்கவா?</translation>
 <translation id="5235750401727657667">புதிய தாவலைத் திறக்கும் போது காண்பிக்கப்படும் பக்கத்தை மாற்று</translation>
-<translation id="5238278114306905396">பயன்பாட்டின் "<ph name="EXTENSION_NAME" />" ஆனது தானாக அகற்றப்பட்டது.</translation>
+<translation id="5238278114306905396">ஆப்ஸின் "<ph name="EXTENSION_NAME" />" ஆனது தானாக அகற்றப்பட்டது.</translation>
 <translation id="5238369540257804368">நோக்கங்கள்</translation>
 <translation id="5241128660650683457">நீங்கள் செல்லும் இணையதளங்களில் உள்ள உங்கள் தரவு அனைத்தையும் படிக்கவும்</translation>
 <translation id="5242724311594467048">"<ph name="EXTENSION_NAME" />" ஐ இயக்கவா?</translation>
@@ -3470,7 +3469,7 @@
 <translation id="6444070574980481588">தேதியையும் நேரத்தையும் அமை</translation>
 <translation id="6445450263907939268">உங்களுக்கு இந்த மாற்றங்கள் பிடிக்கவில்லை எனில், முந்தைய அமைப்புகளை நீங்கள் மீட்டெடுக்கலாம்.</translation>
 <translation id="6447842834002726250">குக்கீகள்</translation>
-<translation id="6449285849137521213">பயன்பாட்டின் "<ph name="EXTENSION_NAME" />" சேர்க்கப்பட்டது.</translation>
+<translation id="6449285849137521213">ஆப்ஸின் "<ph name="EXTENSION_NAME" />" சேர்க்கப்பட்டது.</translation>
 <translation id="6450876761651513209">உங்களின் தனியுரிமைத் தொடர்பான அமைப்புகளை மாற்றலாம்</translation>
 <translation id="6451180435462401570">கிளவுடு அச்சுச் சாதனங்களை நிர்வகி</translation>
 <translation id="6451689256222386810">கடவுச்சொற்றொடரை மறந்துவிட்டால் அல்லது இந்த அமைப்பை மாற்ற விரும்பினால், <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" />.</translation>
@@ -4977,7 +4976,7 @@
 <translation id="878069093594050299">பின்வரும் பயன்பாடுகளுக்காக, இந்த சான்றிதழானது சரிபார்க்கப்பட்டது:</translation>
 <translation id="8781470833671194250">கிளிக் இயக்கத்தை நிலைப்படுத்தும்</translation>
 <translation id="8781980678064919987">மூடியிருக்கும் போது, சாதனத்தை நிறுத்து</translation>
-<translation id="8782565991310229362">Kiosk பயன்பாட்டின் துவக்கம் ரத்தானது.</translation>
+<translation id="8782565991310229362">Kiosk ஆப்ஸின் துவக்கம் ரத்தானது.</translation>
 <translation id="8783093612333542422">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; உங்களுடன் &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; பிரிண்டரைப் பகிர விரும்புகிறார்.</translation>
 <translation id="8784626084144195648">குப்பைக்கு நகர்த்தப்பட்டதன் சராசரி</translation>
 <translation id="8785622406424941542">ஸ்டைலஸ்</translation>
@@ -5056,7 +5055,6 @@
 <translation id="8898786835233784856">அடுத்த தாவலைத் தேர்ந்தெடு</translation>
 <translation id="8898840733695078011">சிக்னலின் வலிமை</translation>
 <translation id="8899851313684471736">இணைப்பை புதிய &amp;சாளரத்தில் திற</translation>
-<translation id="8902081783136172774">உங்கள் தொடக்கப் பக்கத்திற்கான வால்பேப்பரைத் தேர்வுசெய்க</translation>
 <translation id="8902667442496790482">பேசும் திரை அமைப்புகளைத் திற</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">மூலத்தை மாற்று</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index fa613efb..8ae3245d 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">ప్రదర్శన పరికరం సెట్టింగ్‌లను తెరవండి</translation>
 <translation id="1572266655485775982">Wi-Fiని ప్రారంభించు</translation>
 <translation id="1572876035008611720">మీ ఇమెయిల్‌ను నమోదు చేయండి</translation>
-<translation id="1573150740912592860">మీ ప్రోగ్రెస్‌ను సేవ్ చేసుకోండి</translation>
 <translation id="1576594961618857597">డిఫాల్ట్ తెలుపు రంగు అవతార్</translation>
 <translation id="1581962803218266616">శోధినిలో చూపించు</translation>
 <translation id="1584990664401018068">మీరు ఉపయోగిస్తున్న Wi-Fi నెట్‌వర్క్‌కు (<ph name="NETWORK_ID" />) ప్రామాణీకరణ అవసరం.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">పరికరాన్ని డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. మీరు జోడించగల పరికరాల గరిష్ట సంఖ్యను మించిపోలేదని నిర్ధారించుకోండి.</translation>
 <translation id="1744108098763830590">నేపథ్య పేజీ</translation>
 <translation id="1745520510852184940">ఎల్లప్పుడూ దీన్ని చేయి</translation>
+<translation id="1746402432151920942">రక్షిత మీడియా ఐడెంటిఫైయర్</translation>
 <translation id="175196451752279553">మూసివేయబడిన ట్యాబ్‌ను మళ్లీ తె&amp;రవండి</translation>
 <translation id="1753905327828125965">అధికంగా సందర్శించేది</translation>
 <translation id="1756681705074952506">ఇన్‌పుట్ విధానం</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">సైన్ ఇన్ చేయలేదు</translation>
 <translation id="1832511806131704864">ఫోన్ మార్పు అప్‌డేట్ చేయబడింది</translation>
 <translation id="1834503245783133039">డౌన్‌లోడ్ విజయవంతం కాలేదు: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI పరికరాలు</translation>
 <translation id="1838374766361614909">శోధనను తీసివేయి</translation>
 <translation id="1841545962859478868">పరికర నిర్వాహకుడు కింది వాటిని పర్యవేక్షించవచ్చు:</translation>
 <translation id="1841616161104323629">పరికర రికార్డ్ కనుగొనబడటం లేదు.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">సమస్యను నివేదించండి</translation>
 <translation id="2220572644011485463">PIN లేదా పాస్‌వర్డ్</translation>
 <translation id="2224444042887712269">ఈ సెట్టింగ్ <ph name="OWNER_EMAIL" />కి సంబంధించినది.</translation>
+<translation id="2224471211857467033">యాక్సెసిబిలిటీ ఈవెంట్‌లు</translation>
 <translation id="2224551243087462610">ఫోల్డర్ పేరును సవరించు</translation>
 <translation id="2226449515541314767">ఈ సైట్ MIDI పరికరాలకు పూర్తి నియంత్రణ లేకుండా బ్లాక్ చేయబడింది.</translation>
 <translation id="2226720438730111184">ఏమి జరుగుతోందో మాకు చెప్పండి</translation>
@@ -5060,7 +5062,6 @@
 <translation id="8898786835233784856">తదుపరి టాబ్‌ను ఎంచుకో</translation>
 <translation id="8898840733695078011">సిగ్నల్ సామర్థ్యం</translation>
 <translation id="8899851313684471736">కొత్త &amp;విండోలో లింక్‌ను తెరువు</translation>
-<translation id="8902081783136172774">మీ ప్రారంభ పేజీ కోసం వాల్‌పేపర్‌ను ఎంచుకోండి</translation>
 <translation id="8902667442496790482">వినడానికి-ఎంచుకోండి ఎంపికలను తెరువు</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">మూలాధారాన్ని మార్చు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 3cc450f..e2bb04c 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">เปิดการตั้งค่าอุปกรณ์แสดงผล</translation>
 <translation id="1572266655485775982">เปิดใช้ Wi-Fi</translation>
 <translation id="1572876035008611720">ป้อนอีเมล</translation>
-<translation id="1573150740912592860">บันทึกความคืบหน้า</translation>
 <translation id="1576594961618857597">รูปโปรไฟล์เริ่มต้นสีขาว</translation>
 <translation id="1581962803218266616">แสดงใน Finder</translation>
 <translation id="1584990664401018068">เครือข่าย Wi-Fi ที่คุณใช้ (<ph name="NETWORK_ID" />) อาจต้องการการตรวจสอบสิทธิ์</translation>
@@ -5067,7 +5066,6 @@
 <translation id="8898786835233784856">เลือกแท็บถัดไป</translation>
 <translation id="8898840733695078011">ความแรงสัญญาณ</translation>
 <translation id="8899851313684471736">เปิดลิงก์ใน&amp;หน้าต่างใหม่</translation>
-<translation id="8902081783136172774">เลือกวอลเปเปอร์สำหรับหน้าเริ่มต้น</translation>
 <translation id="8902667442496790482">เปิดการตั้งค่าการเลือกเพื่อให้อ่าน</translation>
 <translation id="8904976895050290827">การซิงค์ข้อมูลของ Chrome</translation>
 <translation id="890616557918890486">เปลี่ยนแหล่งที่มา</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 79b48b15..c1cc2e8 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Ekran cihaz ayarlarını aç</translation>
 <translation id="1572266655485775982">Kablosuz bağlantıyı etkinleştir</translation>
 <translation id="1572876035008611720">E-postanızı girin</translation>
-<translation id="1573150740912592860">İlerleme durumunuzu kaydedin</translation>
 <translation id="1576594961618857597">Varsayılan beyaz avatar</translation>
 <translation id="1581962803218266616">Finder'da Göster</translation>
 <translation id="1584990664401018068">Kullandığınız kablosuz ağ (<ph name="NETWORK_ID" />) kimlik doğrulaması gerektirebilir.</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">Cihaz alan adına eklenemiyor. Ekleyebileceğiniz cihaz sayısını aşmadığınızdan emin olun.</translation>
 <translation id="1744108098763830590">arka plan sayfası</translation>
 <translation id="1745520510852184940">Bunu Her Zaman Yap</translation>
+<translation id="1746402432151920942">Korunan Medya Tanımlayıcı</translation>
 <translation id="175196451752279553">&amp;Kapatılan sekmeyi yeniden aç</translation>
 <translation id="1753905327828125965">En Çok Ziyaret Edilenler</translation>
 <translation id="1756681705074952506">Giriş yöntemi</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">Oturum açılmadı</translation>
 <translation id="1832511806131704864">Telefon değişikliği güncellendi</translation>
 <translation id="1834503245783133039">İndirme işlemi başarısız oldu: <ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI Cihazlar</translation>
 <translation id="1838374766361614909">Aramayı temizle</translation>
 <translation id="1841545962859478868">Cihaz yöneticisi aşağıdakileri izleyebilir:</translation>
 <translation id="1841616161104323629">Eksik cihaz kaydı.</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">Sorun bildir</translation>
 <translation id="2220572644011485463">PIN veya şifre</translation>
 <translation id="2224444042887712269">Bu ayar <ph name="OWNER_EMAIL" /> kullanıcısına aittir.</translation>
+<translation id="2224471211857467033">Erişilebilirlik Etkinlikleri</translation>
 <translation id="2224551243087462610">Klasör adını düzenle</translation>
 <translation id="2226449515541314767">Bu sitenin MIDI cihazları üzerinde tam denetime sahip olması engellendi.</translation>
 <translation id="2226720438730111184">Ne Olduğunu Anlatın</translation>
@@ -5064,7 +5066,6 @@
 <translation id="8898786835233784856">Sonraki Sekmeyi Seç</translation>
 <translation id="8898840733695078011">Sinyal gücü</translation>
 <translation id="8899851313684471736">Bağlantıyı yeni &amp;pencerede aç</translation>
-<translation id="8902081783136172774">Başlangıç sayfanız için bir duvar kağıdı seçin</translation>
 <translation id="8902667442496790482">Seç ve Dinle ayarlarını aç</translation>
 <translation id="8904976895050290827">Chrome Senkronizasyonu</translation>
 <translation id="890616557918890486">Kaynağı değiştir</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index ff6d756..07ca7a2e 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Відкрити налаштування дисплея</translation>
 <translation id="1572266655485775982">Увімкнути Wi-Fi</translation>
 <translation id="1572876035008611720">Електронна адреса</translation>
-<translation id="1573150740912592860">Збережіть свої досягнення</translation>
 <translation id="1576594961618857597">Стандартний білий аватар</translation>
 <translation id="1581962803218266616">Показати в програмі Finder</translation>
 <translation id="1584990664401018068">Можливо, щоб під’єднатися до цієї мережі Wi-Fi (<ph name="NETWORK_ID" />), потрібно ввести облікові дані.</translation>
@@ -5067,7 +5066,6 @@
 <translation id="8898786835233784856">Вибрати наступну вкладку</translation>
 <translation id="8898840733695078011">Рівень сигналу</translation>
 <translation id="8899851313684471736">Відкрити посилання у новому &amp;вікні</translation>
-<translation id="8902081783136172774">Виберіть фоновий малюнок для початкової сторінки</translation>
 <translation id="8902667442496790482">Відкрити налаштування служби Читання з екрана</translation>
 <translation id="8904976895050290827">Синхронізація Chrome</translation>
 <translation id="890616557918890486">Змінити джерело</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 3c04413..98cb20a 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -8,7 +8,7 @@
 <translation id="1007408791287232274">Không thể tải các thiết bị.</translation>
 <translation id="1008186147501209563">Xuất dấu trang</translation>
 <translation id="1008557486741366299">Không phải Bây giờ</translation>
-<translation id="1010498023906173788">Tab này kết nối với một cổng nối tiếp.</translation>
+<translation id="1010498023906173788">Tab này đã kết nối với một cổng nối tiếp.</translation>
 <translation id="1010833424573920260">{NUM_PAGES,plural, =1{Trang không phản hồi}other{Trang không phản hồi}}</translation>
 <translation id="1012794136286421601">Các tệp Google Tài liệu, Trang tính, Trang trình bày và Bản vẽ của bạn đang được đồng bộ hóa. Mở ứng dụng Google Drive để truy cập chúng trực tuyến hoặc ngoại tuyến.</translation>
 <translation id="1012876632442809908">Thiết bị USB-C (cổng phía trước)</translation>
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">Mở cài đặt thiết bị hiển thị</translation>
 <translation id="1572266655485775982">Bật Wi-Fi</translation>
 <translation id="1572876035008611720">Nhập email của bạn</translation>
-<translation id="1573150740912592860">Lưu tiến độ của bạn</translation>
 <translation id="1576594961618857597">Hình đại diện màu trắng mặc định</translation>
 <translation id="1581962803218266616">Hiển thị trong Trình tìm kiếm</translation>
 <translation id="1584990664401018068">Mạng Wi-Fi bạn đang sử dụng (<ph name="NETWORK_ID" />) có thể yêu cầu xác thực.</translation>
@@ -807,7 +806,7 @@
 <translation id="2241053333139545397">Đọc và thay đổi dữ liệu của bạn trên một số trang web</translation>
 <translation id="2241634353105152135">Chỉ một lần</translation>
 <translation id="2242687258748107519">Thông tin tệp</translation>
-<translation id="2246549592927364792">Tải nội dung mô tả hình ảnh của Google?</translation>
+<translation id="2246549592927364792">Tải nội dung mô tả hình ảnh từ Google?</translation>
 <translation id="224940702122312781">Trang này sẽ sử dụng nhiều dữ liệu.</translation>
 <translation id="2249605167705922988">ví dụ: 1-5, 8, 11-13</translation>
 <translation id="2251218783371366160">Mở bằng trình xem hệ thống</translation>
@@ -1092,7 +1091,7 @@
 <translation id="2677748264148917807">Rời khỏi</translation>
 <translation id="2678063897982469759">Kích hoạt lại</translation>
 <translation id="268053382412112343">Lị&amp;ch sử</translation>
-<translation id="2682498795777673382">Cập nhật từ cha mẹ</translation>
+<translation id="2682498795777673382">Thông tin mới từ cha mẹ</translation>
 <translation id="2683638487103917598">Đẵ sắp xếp thư mục</translation>
 <translation id="2684004000387153598">Để tiếp tục, hãy nhấp vào OK, sau đó nhấp vào Thêm người để tạo hồ sơ mới cho địa chỉ email của bạn.</translation>
 <translation id="2688196195245426394">Lỗi khi đăng ký thiết bị với máy chủ: <ph name="CLIENT_ERROR" />.</translation>
@@ -1495,7 +1494,7 @@
 <translation id="3317459757438853210">Hai mặt</translation>
 <translation id="3317678681329786349">Máy ảnh và micrô bị chặn</translation>
 <translation id="3319048459796106952">Cửa sổ ẩn &amp;danh mới</translation>
-<translation id="3323521181261657960">Phần thưởng! Bạn đã có thêm thời gian sử dụng thiết bị</translation>
+<translation id="3323521181261657960">Phần thưởng! Bạn có thêm thời gian sử dụng thiết bị</translation>
 <translation id="3325910708063135066">Máy ảnh và micrô đã bị tắt trong System Preferences (Tùy chọn hệ thống) trên máy Mac</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Thông tin ứng dụng</translation>
@@ -3443,7 +3442,7 @@
 <translation id="6390994422085833176">Xem lại các tính năng đồng bộ hóa và cá nhân hóa sau khi thiết lập</translation>
 <translation id="6393156038355142111">Đề xuất mật khẩu mạnh</translation>
 <translation id="6395423953133416962">Gửi <ph name="BEGIN_LINK1" />thông tin hệ thống<ph name="END_LINK1" /> và <ph name="BEGIN_LINK2" />số liệu<ph name="END_LINK2" /></translation>
-<translation id="6396988158856674517">Chặn không cho trang web sử dụng cảm biến chuyển động</translation>
+<translation id="6396988158856674517">Chặn không cho các trang web sử dụng cảm biến chuyển động</translation>
 <translation id="6397094776139756010">Tùy chọn đồng bộ hóa và cá nhân hóa</translation>
 <translation id="6398715114293939307">Xóa Cửa hàng Google Play</translation>
 <translation id="6398765197997659313">Thoát khỏi chế độ toàn màn hình</translation>
@@ -5067,7 +5066,6 @@
 <translation id="8898786835233784856">Chọn Tab Tiếp theo</translation>
 <translation id="8898840733695078011">Cường độ tín hiệu</translation>
 <translation id="8899851313684471736">Mở liên kết bằng cửa sổ &amp;mới</translation>
-<translation id="8902081783136172774">Chọn hình nền cho trang chủ của bạn</translation>
 <translation id="8902667442496790482">Mở mục cài đặt chọn để nói</translation>
 <translation id="8904976895050290827">Chrome Sync</translation>
 <translation id="890616557918890486">Thay đổi nguồn</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 413abd7..54c3bbbf 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -367,7 +367,6 @@
 <translation id="1568323446248056064">打开显示设备设置</translation>
 <translation id="1572266655485775982">Wi-Fi 开关</translation>
 <translation id="1572876035008611720">输入您的电子邮件地址</translation>
-<translation id="1573150740912592860">保存您的进度</translation>
 <translation id="1576594961618857597">默认的白色头像</translation>
 <translation id="1581962803218266616">在 Finder 中显示</translation>
 <translation id="1584990664401018068">您要使用的 Wi-Fi 网络(“<ph name="NETWORK_ID" />”)可能需要您进行身份验证。</translation>
@@ -5056,7 +5055,6 @@
 <translation id="8898786835233784856">选择下一个标签</translation>
 <translation id="8898840733695078011">信号强度</translation>
 <translation id="8899851313684471736">在新窗口中打开链接(&amp;W)</translation>
-<translation id="8902081783136172774">为初始页选择一张壁纸</translation>
 <translation id="8902667442496790482">打开“随选朗读”设置</translation>
 <translation id="8904976895050290827">Chrome 浏览器同步</translation>
 <translation id="890616557918890486">更改来源</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 83678b5..b4dabd2 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -370,7 +370,6 @@
 <translation id="1568323446248056064">開啟顯示裝置設定</translation>
 <translation id="1572266655485775982">啟用 Wi-Fi</translation>
 <translation id="1572876035008611720">請輸入您的電子郵件</translation>
-<translation id="1573150740912592860">儲存你的進度</translation>
 <translation id="1576594961618857597">預設的白色顯示圖片</translation>
 <translation id="1581962803218266616">在 Finder 中顯示</translation>
 <translation id="1584990664401018068">您所使用的 Wi-Fi 網路 (<ph name="NETWORK_ID" />) 可能需要驗證。</translation>
@@ -488,6 +487,7 @@
 <translation id="1744060673522309905">無法將這個裝置加入網域。請確認裝置數量沒有超過添加上限。</translation>
 <translation id="1744108098763830590">背景頁面</translation>
 <translation id="1745520510852184940">一律採取這種處理方式</translation>
+<translation id="1746402432151920942">受保護媒體 ID</translation>
 <translation id="175196451752279553">重新開啟已關閉分頁(&amp;E)</translation>
 <translation id="1753905327828125965">最常造訪</translation>
 <translation id="1756681705074952506">輸入法</translation>
@@ -545,6 +545,7 @@
 <translation id="1830550083491357902">未登入</translation>
 <translation id="1832511806131704864">手機變更已更新</translation>
 <translation id="1834503245783133039">下載失敗:<ph name="FILE_NAME" /></translation>
+<translation id="1834583737373831634">MIDI 裝置</translation>
 <translation id="1838374766361614909">清除搜尋</translation>
 <translation id="1841545962859478868">裝置管理員可能會監控下列項目:</translation>
 <translation id="1841616161104323629">沒有裝置記錄。</translation>
@@ -788,6 +789,7 @@
 <translation id="2220529011494928058">回報問題</translation>
 <translation id="2220572644011485463">PIN 或密碼</translation>
 <translation id="2224444042887712269">這項設定屬於 <ph name="OWNER_EMAIL" />。</translation>
+<translation id="2224471211857467033">無障礙工具活動</translation>
 <translation id="2224551243087462610">編輯資料夾名稱</translation>
 <translation id="2226449515541314767">這個網站已遭封鎖,無法完整控制 MIDI 裝置。</translation>
 <translation id="2226720438730111184">將發生的狀況告訴我們</translation>
@@ -5060,7 +5062,6 @@
 <translation id="8898786835233784856">選取下一個分頁</translation>
 <translation id="8898840733695078011">訊號強度</translation>
 <translation id="8899851313684471736">在新視窗中開啟連結(&amp;W)</translation>
-<translation id="8902081783136172774">選擇起始網頁上顯示的桌布圖片</translation>
 <translation id="8902667442496790482">開啟隨選朗讀設定</translation>
 <translation id="8904976895050290827">Google Chrome 同步功能</translation>
 <translation id="890616557918890486">變更來源</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index 35dc0b5..342c3c1 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -25,7 +25,7 @@
 <translation id="1585657529869845941">Clique em <ph name="BEGIN_BOLD" />Alterar mesmo assim<ph name="END_BOLD" />, se essa opção for exibida</translation>
 <translation id="1587223624401073077">O Google Chrome está usando sua câmera.</translation>
 <translation id="1587325591171447154">O arquivo <ph name="FILE_NAME" /> é perigoso. Por isso ele foi bloqueado pelo Chrome.</translation>
-<translation id="1590588151039584890">Para atualizar, é necessário interromper o Chrome neste computador. Essa ação pode causar perda de dados não salvos de outros usuários conectados a este computador.</translation>
+<translation id="1590588151039584890">Para atualizar, é necessário interromper o Chrome neste computador. Essa ação pode causar perda de dados não salvos de outros usuários conectados a esta máquina.</translation>
 <translation id="1619887657840448962">Para tornar o Chrome mais seguro, desativamos a extensão a seguir, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e pode ter sido adicionada sem seu conhecimento.</translation>
 <translation id="1628000112320670027">Ajuda com o Chrome</translation>
 <translation id="1662639173275167396">O Chrome OS tornou-se possível graças a um outro <ph name="BEGIN_LINK_CROS_OSS" />software de código aberto<ph name="END_LINK_CROS_OSS" />, como o <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb
index d8f163a..67d22d4f 100644
--- a/chrome/app/resources/google_chrome_strings_vi.xtb
+++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -230,7 +230,7 @@
 <translation id="7473136999113284234">Chrome tự động cập nhật nên bạn luôn có phiên bản mới nhất.</translation>
 <translation id="7486227612705979895">Chrome sẽ truy cập vào Drive của bạn để đưa ra đề xuất trên thanh địa chỉ</translation>
 <translation id="748945194546522577">Tệp này nguy hiểm nên đã bị Chrome chặn. Tính năng Bảo vệ nâng cao giữ an toàn cho bạn.</translation>
-<translation id="7531671357096394523">Thoát khỏi tất cả các bản sao của Chrome.</translation>
+<translation id="7531671357096394523">Đóng tất cả các bản sao của Chrome.</translation>
 <translation id="7535429826459677826">Google Chrome Dev</translation>
 <translation id="7552219221109926349">Hiển thị Chrome OS bằng ngôn ngữ này</translation>
 <translation id="7561940363513215021">{0,plural, =1{Chrome sẽ chạy lại sau 1 phút}other{Chrome sẽ chạy lại sau # phút}}</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 47d411a5..92e3ff7b 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -263,7 +263,7 @@
       Automatically click when the mouse cursor stops
     </message>
     <message name="IDS_SETTINGS_DELAY_BEFORE_CLICK_LABEL" desc="Label for dropdown menu which contains various time delays for mouse action.">
-      Delay before click:
+      Delay before click
     </message>
     <message name="IDS_SETTINGS_DELAY_BEFORE_CLICK_EXTREMELY_SHORT" desc="Description of an extremely short delay before mouse action.">
       extremely short (0.6s)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 13650c4..bd78f6729 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3742,11 +3742,15 @@
      FEATURE_VALUE_TYPE(chromeos::features::kAutoScreenBrightness)},
 #endif  // defined(OS_CHROMEOS)
 
+     {"audio-worklet-realtime-thread",
+     flag_descriptions::kAudioWorkletRealtimeThreadName,
+     flag_descriptions::kAudioWorkletRealtimeThreadDescription, kOsAll,
+     FEATURE_VALUE_TYPE(blink::features::kAudioWorkletRealtimeThread)}
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
     // AboutFlagsHistogramTest unit test to verify this process).
-
 };
 
 class FlagsStateSingleton {
diff --git a/chrome/browser/chromeos/extensions/install_limiter_unittest.cc b/chrome/browser/chromeos/extensions/install_limiter_unittest.cc
index eff5ec3..73789b8 100644
--- a/chrome/browser/chromeos/extensions/install_limiter_unittest.cc
+++ b/chrome/browser/chromeos/extensions/install_limiter_unittest.cc
@@ -42,8 +42,8 @@
 
 TEST_P(InstallLimiterTest, ShouldDeferInstall) {
   const std::vector<std::string> screensaver_ids = {
-      extension_misc::kScreensaverAppId, extension_misc::kScreensaverAlt1AppId,
-      extension_misc::kScreensaverAlt2AppId};
+      extension_misc::kScreensaverAppId, extension_misc::kScreensaverEveAppId,
+      extension_misc::kScreensaverNocturneAppId};
 
   chromeos::DemoModeTestHelper demo_mode_test_helper;
   if (GetParam() != chromeos::DemoSession::DemoModeConfig::kNone)
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_session.cc b/chrome/browser/chromeos/login/demo_mode/demo_session.cc
index a38daa11..3456d58 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_session.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_session.cc
@@ -119,9 +119,9 @@
 
 std::string GetHighlightsAppId() {
   if (GetBoardName() == "eve")
-    return extension_misc::kHighlightsAlt1AppId;
+    return extension_misc::kHighlightsEveAppId;
   if (GetBoardName() == "nocturne")
-    return extension_misc::kHighlightsAlt2AppId;
+    return extension_misc::kHighlightsNocturneAppId;
   return extension_misc::kHighlightsAppId;
 }
 
@@ -321,9 +321,9 @@
 // static
 std::string DemoSession::GetScreensaverAppId() {
   if (GetBoardName() == "eve")
-    return extension_misc::kScreensaverAlt1AppId;
+    return extension_misc::kScreensaverEveAppId;
   if (GetBoardName() == "nocturne")
-    return extension_misc::kScreensaverAlt2AppId;
+    return extension_misc::kScreensaverNocturneAppId;
   return extension_misc::kScreensaverAppId;
 }
 
diff --git a/chrome/browser/extensions/api/cast_streaming/performance_test.cc b/chrome/browser/extensions/api/cast_streaming/performance_test.cc
index 4e06a05..d06ede3 100644
--- a/chrome/browser/extensions/api/cast_streaming/performance_test.cc
+++ b/chrome/browser/extensions/api/cast_streaming/performance_test.cc
@@ -10,6 +10,7 @@
 #include <cstring>
 #include <iterator>
 #include <map>
+#include <memory>
 #include <vector>
 
 #include "base/base64.h"
@@ -674,7 +675,7 @@
   }
   scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment(
       new SkewedCastEnvironment(delta));
-  TestPatternReceiver* const receiver = new TestPatternReceiver(
+  auto receiver = std::make_unique<TestPatternReceiver>(
       cast_environment, receiver_end_point, is_full_performance_run());
   receiver->Start();
 
diff --git a/chrome/browser/extensions/content_verifier_browsertest.cc b/chrome/browser/extensions/content_verifier_browsertest.cc
index d1b8689..faf1971 100644
--- a/chrome/browser/extensions/content_verifier_browsertest.cc
+++ b/chrome/browser/extensions/content_verifier_browsertest.cc
@@ -115,6 +115,21 @@
     EXPECT_TRUE(job_observer.WaitForExpectedJobs());
   }
 
+  void NavigateToResourceAndExpectExtensionDisabled(
+      const ExtensionId& extension_id,
+      const GURL& extension_resource) {
+    TestExtensionRegistryObserver unload_observer(
+        ExtensionRegistry::Get(profile()), extension_id);
+    ui_test_utils::NavigateToURLWithDisposition(
+        browser(), extension_resource,
+        WindowOpenDisposition::NEW_FOREGROUND_TAB,
+        ui_test_utils::BROWSER_TEST_NONE);
+    EXPECT_TRUE(unload_observer.WaitForExtensionUnloaded());
+    ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
+    int reasons = prefs->GetDisableReasons(extension_id);
+    EXPECT_EQ(disable_reason::DISABLE_CORRUPTED, reasons);
+  }
+
  protected:
   base::test::ScopedFeatureList scoped_feature_list_;
 };
@@ -282,18 +297,34 @@
   }
 
   GURL page_url = extension->GetResourceURL("page.html");
-  TestExtensionRegistryObserver unload_observer(
-      ExtensionRegistry::Get(profile()), kExtensionId);
-  // Wait for 0 navigations to complete because with PlzNavigate it's racy
-  // when the didstop IPC arrives relative to the tab being closed. The
-  // wait call below is what the tests care about.
-  ui_test_utils::NavigateToURLWithDispositionBlockUntilNavigationsComplete(
-      browser(), page_url, 0, WindowOpenDisposition::NEW_FOREGROUND_TAB,
-      ui_test_utils::BROWSER_TEST_NONE);
-  EXPECT_TRUE(unload_observer.WaitForExtensionUnloaded());
-  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
-  int reasons = prefs->GetDisableReasons(kExtensionId);
-  EXPECT_TRUE(reasons & disable_reason::DISABLE_CORRUPTED);
+  NavigateToResourceAndExpectExtensionDisabled(kExtensionId, page_url);
+}
+
+// Tests that tampering with a large resource fails content verification as
+// expected. The size of the resource is such that it would trigger
+// FileLoaderObserver::OnSeekComplete in extension_protocols.cc.
+//
+// Regression test for: http://crbug.com/965043.
+IN_PROC_BROWSER_TEST_F(ContentVerifierTest, TamperLargeSizedResource) {
+  // This test extension is copied from the webstore that has actual
+  // signatures.
+  const Extension* extension = InstallExtensionFromWebstore(
+      test_data_dir_.AppendASCII("content_verifier/different_sized_files.crx"),
+      1);
+  ASSERT_TRUE(extension);
+
+  const char kResource[] = "jquery-3.2.0.min.js";
+  {
+    // Modify content so that content verification fails.
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    base::FilePath real_path = extension->path().AppendASCII(kResource);
+    ASSERT_TRUE(base::PathExists(real_path));
+    std::string extra = "some_extra_function_call();";
+    ASSERT_TRUE(base::AppendToFile(real_path, extra.data(), extra.size()));
+  }
+
+  NavigateToResourceAndExpectExtensionDisabled(
+      extension->id(), extension->GetResourceURL(kResource));
 }
 
 class ContentVerifierPolicyTest : public ContentVerifierTest {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 2f9aa1ad..84123e8 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -187,6 +187,11 @@
     "expiry_milestone": 78
   },
   {
+    "name": "audio-worklet-realtime-thread",
+    "owners": [ "//third_party/blink/renderer/modules/webaudio/OWNERS" ],
+    "expiry_milestone": 80
+  },
+  {
     "name": "auto-fetch-on-net-error-page",
     "owners": [ "harringtond", "offline-dev" ],
     "expiry_milestone": 82
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 12cc530f..3812453 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -53,6 +53,12 @@
     "Allows running a lightweight service-manager-only mode, in which services "
     "can run without the browser process.";
 
+const char kAudioWorkletRealtimeThreadName[] =
+    "Use realtime priority thread for Audio Worklet";
+const char kAudioWorkletRealtimeThreadDescription[] =
+    "Run Audio Worklet operation on a realtime priority thread for better "
+    "audio stream stability.";
+
 const char kUpdatedCellularActivationUiName[] =
     "Updated Cellular Activation UI";
 const char kUpdatedCellularActivationUiDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 405ceadb..4cf2060 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -61,6 +61,9 @@
 extern const char kAllowStartingServiceManagerOnlyName[];
 extern const char kAllowStartingServiceManagerOnlyDescription[];
 
+extern const char kAudioWorkletRealtimeThreadName[];
+extern const char kAudioWorkletRealtimeThreadDescription[];
+
 extern const char kUpdatedCellularActivationUiName[];
 extern const char kUpdatedCellularActivationUiDescription[];
 
diff --git a/chrome/browser/metrics/perf/cpu_identity.cc b/chrome/browser/metrics/perf/cpu_identity.cc
index d6ae9056..abaac03 100644
--- a/chrome/browser/metrics/perf/cpu_identity.cc
+++ b/chrome/browser/metrics/perf/cpu_identity.cc
@@ -56,6 +56,7 @@
     {"06_5C", "Goldmont"},
     {"06_5E", "Skylake"},
     {"06_5F", "Goldmont"},    // Denverton
+    {"06_7A", "GoldmontPlus"},
     {"06_8E", "Kabylake"},
     {"06_9E", "Kabylake"},
     {"0F_03", "Prescott"},
diff --git a/chrome/browser/metrics/perf/cpu_identity_unittest.cc b/chrome/browser/metrics/perf/cpu_identity_unittest.cc
index fc06c5e..cef333c 100644
--- a/chrome/browser/metrics/perf/cpu_identity_unittest.cc
+++ b/chrome/browser/metrics/perf/cpu_identity_unittest.cc
@@ -39,6 +39,16 @@
   EXPECT_EQ("SandyBridge", GetCpuUarch(cpuid));
 }
 
+TEST(CpuIdentityTest, DefaultCommandsBasedOnUarch_GoldmontPlus) {
+  CPUIdentity cpuid;
+  cpuid.arch = "x86_64";
+  cpuid.vendor = "GenuineIntel";
+  cpuid.family = 0x06;
+  cpuid.model = 0x7a;  // Gemini Lake
+  cpuid.model_name = "";
+  EXPECT_EQ("GoldmontPlus", GetCpuUarch(cpuid));
+}
+
 TEST(CpuIdentityTest, DefaultCommandsBasedOnUarch_Excavator) {
   CPUIdentity cpuid;
   cpuid.arch = "x86_64";
diff --git a/chrome/browser/metrics/perf/perf_events_collector.cc b/chrome/browser/metrics/perf/perf_events_collector.cc
index 93597fa6..a1c6cb77 100644
--- a/chrome/browser/metrics/perf/perf_events_collector.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector.cc
@@ -103,6 +103,17 @@
 // we sample on the branches retired event.
 const char kPerfRecordLBRCmdAtom[] = "perf record -a -e rc4 -b -c 300001";
 
+// The following events count misses in the level 1 caches and TLBs.
+
+// Perf doesn't support the generic dTLB-misses event for Goldmont. We define it
+// in terms of raw event number and umask value. Event codes taken from
+// "Intel 64 and IA-32 Architectures Software Developer's Manual, Vol 3".
+const char kPerfRecordInstructionTLBMissesCmdGLM[] =
+    "perf record -a -e r0481 -c 2003";
+
+const char kPerfRecordDataTLBMissesCmdGLM[] = "perf record -a -e r13d0 -c 2003";
+
+// Use the generic event names for the other microarchitectures.
 const char kPerfRecordInstructionTLBMissesCmd[] =
     "perf record -a -e iTLB-misses -c 2003";
 
@@ -156,8 +167,7 @@
     cmds.push_back(WeightAndValue(5.0, kPerfRecordCacheMissesCmd));
     return cmds;
   }
-  if (cpu_uarch == "Silvermont" || cpu_uarch == "Airmont" ||
-      cpu_uarch == "Goldmont") {
+  if (cpu_uarch == "Silvermont" || cpu_uarch == "Airmont") {
     cmds.push_back(WeightAndValue(50.0, kPerfRecordCyclesCmd));
     cmds.push_back(WeightAndValue(20.0, callgraph_cmd));
     cmds.push_back(WeightAndValue(15.0, kPerfRecordLBRCmdAtom));
@@ -166,6 +176,16 @@
     cmds.push_back(WeightAndValue(5.0, kPerfRecordCacheMissesCmd));
     return cmds;
   }
+  if (cpu_uarch == "Goldmont" || cpu_uarch == "GoldmontPlus") {
+    cmds.push_back(WeightAndValue(50.0, kPerfRecordCyclesCmd));
+    cmds.push_back(WeightAndValue(20.0, callgraph_cmd));
+    cmds.push_back(WeightAndValue(15.0, kPerfRecordLBRCmdAtom));
+    // Use the Goldmont variants of iTLB and dTLB misses.
+    cmds.push_back(WeightAndValue(5.0, kPerfRecordInstructionTLBMissesCmdGLM));
+    cmds.push_back(WeightAndValue(5.0, kPerfRecordDataTLBMissesCmdGLM));
+    cmds.push_back(WeightAndValue(5.0, kPerfRecordCacheMissesCmd));
+    return cmds;
+  }
   // Other 64-bit x86
   cmds.push_back(WeightAndValue(65.0, kPerfRecordCyclesCmd));
   cmds.push_back(WeightAndValue(20.0, callgraph_cmd));
diff --git a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
index 202e1b0..b1483cb 100644
--- a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
@@ -31,6 +31,10 @@
 const char kPerfRecordCyclesCmd[] = "perf record -a -e cycles -c 1000003";
 const char kPerfRecordCallgraphCmd[] = "perf record -a -e cycles -g -c 4000037";
 const char kPerfRecordLBRCmd[] = "perf record -a -e r20c4 -b -c 200011";
+const char kPerfRecordLBRCmdAtom[] = "perf record -a -e rc4 -b -c 300001";
+const char kPerfRecordDataTLBMissesCmdGLM[] = "perf record -a -e r13d0 -c 2003";
+const char kPerfRecordDataTLBMissesCmd[] =
+    "perf record -a -e dTLB-misses -c 2003";
 const char kPerfRecordCacheMissesCmd[] =
     "perf record -a -e cache-misses -c 10007";
 const char kPerfStatMemoryBandwidthCmd[] =
@@ -362,6 +366,46 @@
   EXPECT_NE(cmds.end(), found);
 }
 
+TEST_F(PerfCollectorTest, DefaultCommandsBasedOnUarch_Goldmont) {
+  CPUIdentity cpuid;
+  cpuid.arch = "x86_64";
+  cpuid.vendor = "GenuineIntel";
+  cpuid.family = 0x06;
+  cpuid.model = 0x5c;  // Goldmont
+  cpuid.model_name = "";
+  std::vector<RandomSelector::WeightAndValue> cmds =
+      internal::GetDefaultCommandsForCpu(cpuid);
+  ASSERT_GE(cmds.size(), 2UL);
+  EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
+  EXPECT_EQ(cmds[1].value, kPerfRecordCallgraphCmd);
+  auto found =
+      std::find_if(cmds.begin(), cmds.end(),
+                   [](const RandomSelector::WeightAndValue& cmd) -> bool {
+                     return cmd.value == kPerfStatMemoryBandwidthCmd;
+                   });
+  EXPECT_EQ(cmds.end(), found) << "Goldmont does not support this command";
+  found = std::find_if(cmds.begin(), cmds.end(),
+                       [](const RandomSelector::WeightAndValue& cmd) -> bool {
+                         return cmd.value == kPerfRecordLBRCmdAtom;
+                       });
+  EXPECT_NE(cmds.end(), found);
+  found = std::find_if(cmds.begin(), cmds.end(),
+                       [](const RandomSelector::WeightAndValue& cmd) -> bool {
+                         return cmd.value == kPerfRecordCacheMissesCmd;
+                       });
+  EXPECT_NE(cmds.end(), found);
+  found = std::find_if(cmds.begin(), cmds.end(),
+                       [](const RandomSelector::WeightAndValue& cmd) -> bool {
+                         return cmd.value == kPerfRecordDataTLBMissesCmd;
+                       });
+  EXPECT_EQ(cmds.end(), found) << "Goldmont requires specialized dTLB command";
+  found = std::find_if(cmds.begin(), cmds.end(),
+                       [](const RandomSelector::WeightAndValue& cmd) -> bool {
+                         return cmd.value == kPerfRecordDataTLBMissesCmdGLM;
+                       });
+  EXPECT_NE(cmds.end(), found);
+}
+
 TEST_F(PerfCollectorTest, DefaultCommandsBasedOnArch_Arm) {
   CPUIdentity cpuid;
   cpuid.arch = "armv7l";
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
index f848cf09..ca3e7d84 100644
--- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
@@ -12,7 +12,6 @@
 #include "base/time/time.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
-#include "components/google/core/common/google_util.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "net/base/url_util.h"
@@ -23,22 +22,8 @@
 
 namespace {
 
-using AMPViewType = AMPPageLoadMetricsObserver::AMPViewType;
-
 const char kHistogramPrefix[] = "PageLoad.Clients.AMP.";
 
-const char kHistogramAMPDOMContentLoadedEventFired[] =
-    "DocumentTiming.NavigationToDOMContentLoadedEventFired";
-const char kHistogramAMPFirstLayout[] =
-    "DocumentTiming.NavigationToFirstLayout";
-const char kHistogramAMPLoadEventFired[] =
-    "DocumentTiming.NavigationToLoadEventFired";
-const char kHistogramAMPFirstContentfulPaint[] =
-    "PaintTiming.NavigationToFirstContentfulPaint";
-const char kHistogramAMPParseStart[] = "ParseTiming.NavigationToParseStart";
-const char kHistogramAMPParseStartRedirect[] =
-    "ParseTiming.NavigationToParseStart.RedirectToNonAmpPage";
-
 const char kHistogramAMPSubframeNavigationToInput[] =
     "Experimental.PageTiming.NavigationToInput.Subframe";
 const char kHistogramAMPSubframeInputToNavigation[] =
@@ -62,39 +47,6 @@
 const char kHistogramAMPSubframeLayoutStabilityJankScoreFullNavigation[] =
     "Experimental.LayoutStability.JankScore.Subframe.FullNavigation";
 
-// Host pattern for AMP Cache URLs.
-// See https://developers.google.com/amp/cache/overview#amp-cache-url-format
-// for a definition of the format of AMP Cache URLs.
-const char kAmpCacheHostSuffix[] = "cdn.ampproject.org";
-
-#define RECORD_HISTOGRAM_FOR_TYPE(name, amp_view_type, value)                 \
-  do {                                                                        \
-    PAGE_LOAD_HISTOGRAM(std::string(kHistogramPrefix).append(name), value);   \
-    switch (amp_view_type) {                                                  \
-      case AMPViewType::AMP_CACHE:                                            \
-        PAGE_LOAD_HISTOGRAM(                                                  \
-            std::string(kHistogramPrefix).append("AmpCache.").append(name),   \
-            value);                                                           \
-        break;                                                                \
-      case AMPViewType::GOOGLE_SEARCH_AMP_VIEWER:                             \
-        PAGE_LOAD_HISTOGRAM(std::string(kHistogramPrefix)                     \
-                                .append("GoogleSearch.")                      \
-                                .append(name),                                \
-                            value);                                           \
-        break;                                                                \
-      case AMPViewType::GOOGLE_NEWS_AMP_VIEWER:                               \
-        PAGE_LOAD_HISTOGRAM(                                                  \
-            std::string(kHistogramPrefix).append("GoogleNews.").append(name), \
-            value);                                                           \
-        break;                                                                \
-      case AMPViewType::NONE:                                                 \
-        NOTREACHED();                                                         \
-        break;                                                                \
-      case AMPViewType::AMP_VIEW_TYPE_LAST:                                   \
-        break;                                                                \
-    }                                                                         \
-  } while (false)
-
 GURL GetCanonicalizedSameDocumentUrl(const GURL& url) {
   if (!url.has_ref())
     return url;
@@ -151,7 +103,6 @@
     content::NavigationHandle* navigation_handle,
     ukm::SourceId source_id) {
   current_url_ = navigation_handle->GetURL();
-  view_type_ = GetAMPViewType(current_url_);
   ProcessMainFrameNavigation(navigation_handle);
   return CONTINUE_OBSERVING;
 }
@@ -170,15 +121,6 @@
   MaybeRecordAmpDocumentMetrics();
   current_main_frame_nav_info_ = nullptr;
   ProcessMainFrameNavigation(navigation_handle);
-
-  AMPViewType same_document_view_type = GetAMPViewType(url);
-  if (same_document_view_type == AMPViewType::NONE)
-    return;
-
-  // Count how often AMP same-document navigations occur.
-  UMA_HISTOGRAM_ENUMERATION(
-      std::string(kHistogramPrefix).append("SameDocumentView"),
-      same_document_view_type, AMPViewType::AMP_VIEW_TYPE_LAST);
 }
 
 void AMPPageLoadMetricsObserver::OnDidFinishSubFrameNavigation(
@@ -224,92 +166,6 @@
   amp_subframe_info_.erase(rfh);
 }
 
-void AMPPageLoadMetricsObserver::OnDomContentLoadedEventStart(
-    const page_load_metrics::mojom::PageLoadTiming& timing,
-    const page_load_metrics::PageLoadExtraInfo& info) {
-  if (view_type_ == AMPViewType::NONE)
-    return;
-
-  if (!WasStartedInForegroundOptionalEventInForeground(
-          timing.document_timing->dom_content_loaded_event_start, info)) {
-    return;
-  }
-  RECORD_HISTOGRAM_FOR_TYPE(
-      kHistogramAMPDOMContentLoadedEventFired, view_type_,
-      timing.document_timing->dom_content_loaded_event_start.value());
-}
-
-void AMPPageLoadMetricsObserver::OnLoadEventStart(
-    const page_load_metrics::mojom::PageLoadTiming& timing,
-    const page_load_metrics::PageLoadExtraInfo& info) {
-  if (view_type_ == AMPViewType::NONE)
-    return;
-
-  if (!WasStartedInForegroundOptionalEventInForeground(
-          timing.document_timing->load_event_start, info)) {
-    return;
-  }
-  RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPLoadEventFired, view_type_,
-                            timing.document_timing->load_event_start.value());
-}
-
-void AMPPageLoadMetricsObserver::OnFirstLayout(
-    const page_load_metrics::mojom::PageLoadTiming& timing,
-    const page_load_metrics::PageLoadExtraInfo& info) {
-  if (view_type_ == AMPViewType::NONE)
-    return;
-
-  if (!WasStartedInForegroundOptionalEventInForeground(
-          timing.document_timing->first_layout, info)) {
-    return;
-  }
-  RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPFirstLayout, view_type_,
-                            timing.document_timing->first_layout.value());
-}
-
-void AMPPageLoadMetricsObserver::OnFirstContentfulPaintInPage(
-    const page_load_metrics::mojom::PageLoadTiming& timing,
-    const page_load_metrics::PageLoadExtraInfo& info) {
-  if (view_type_ == AMPViewType::NONE)
-    return;
-
-  if (!WasStartedInForegroundOptionalEventInForeground(
-          timing.paint_timing->first_contentful_paint, info)) {
-    return;
-  }
-  RECORD_HISTOGRAM_FOR_TYPE(
-      kHistogramAMPFirstContentfulPaint, view_type_,
-      timing.paint_timing->first_contentful_paint.value());
-}
-
-void AMPPageLoadMetricsObserver::OnParseStart(
-    const page_load_metrics::mojom::PageLoadTiming& timing,
-    const page_load_metrics::PageLoadExtraInfo& info) {
-  if (!WasStartedInForegroundOptionalEventInForeground(
-          timing.parse_timing->parse_start, info)) {
-    return;
-  }
-
-  if (view_type_ == AMPViewType::NONE) {
-    // If we ended up on a non-AMP document, but the initial URL matched an AMP
-    // document, record the time it took to get to this point. We encounter this
-    // case in the Google News AMP viewer, for example: when a user loads a news
-    // AMP URL in a non-same-document navigation context, the user is presented
-    // with a redirect prompt which they must click through to continue to the
-    // canonical document on the non-AMP origin.
-    AMPViewType initial_view_type = GetAMPViewType(info.start_url);
-    if (initial_view_type != AMPViewType::NONE) {
-      RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPParseStartRedirect,
-                                initial_view_type,
-                                timing.parse_timing->parse_start.value());
-    }
-    return;
-  }
-
-  RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPParseStart, view_type_,
-                            timing.parse_timing->parse_start.value());
-}
-
 void AMPPageLoadMetricsObserver::OnTimingUpdate(
     content::RenderFrameHost* subframe_rfh,
     const page_load_metrics::mojom::PageLoadTiming& timing,
@@ -558,32 +414,3 @@
 
   builder.Record(ukm::UkmRecorder::Get());
 }
-
-// static
-AMPPageLoadMetricsObserver::AMPViewType
-AMPPageLoadMetricsObserver::GetAMPViewType(const GURL& url) {
-  const char kAmpViewerUrlPrefix[] = "/amp/";
-
-  if (base::EndsWith(url.host(), kAmpCacheHostSuffix,
-                     base::CompareCase::INSENSITIVE_ASCII)) {
-    return AMPViewType::AMP_CACHE;
-  }
-
-  base::Optional<std::string> google_hostname_prefix =
-      page_load_metrics::GetGoogleHostnamePrefix(url);
-  if (!google_hostname_prefix.has_value())
-    return AMPViewType::NONE;
-
-  if (google_hostname_prefix.value() == "www" &&
-      base::StartsWith(url.path_piece(), kAmpViewerUrlPrefix,
-                       base::CompareCase::SENSITIVE) &&
-      url.path_piece().length() > strlen(kAmpViewerUrlPrefix)) {
-    return AMPViewType::GOOGLE_SEARCH_AMP_VIEWER;
-  }
-
-  if (google_hostname_prefix.value() == "news" &&
-      url.path_piece() == "/news/amp" && !url.query_piece().empty()) {
-    return AMPViewType::GOOGLE_NEWS_AMP_VIEWER;
-  }
-  return AMPViewType::NONE;
-}
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
index ec1fde4..57eef59 100644
--- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
@@ -44,21 +44,6 @@
 class AMPPageLoadMetricsObserver
     : public page_load_metrics::PageLoadMetricsObserver {
  public:
-  // If you add elements to this enum, make sure you update the enum value in
-  // enums.xml. Only add elements to the end to prevent inconsistencies between
-  // versions.
-  enum class AMPViewType {
-    NONE,
-    AMP_CACHE,
-    GOOGLE_SEARCH_AMP_VIEWER,
-    GOOGLE_NEWS_AMP_VIEWER,
-
-    // New values should be added before this final entry.
-    AMP_VIEW_TYPE_LAST
-  };
-
-  static AMPViewType GetAMPViewType(const GURL& url);
-
   AMPPageLoadMetricsObserver();
   ~AMPPageLoadMetricsObserver() override;
 
@@ -71,19 +56,6 @@
       content::NavigationHandle* navigation_handle,
       const page_load_metrics::PageLoadExtraInfo&) override;
   void OnFrameDeleted(content::RenderFrameHost* rfh) override;
-  void OnDomContentLoadedEventStart(
-      const page_load_metrics::mojom::PageLoadTiming& timing,
-      const page_load_metrics::PageLoadExtraInfo& info) override;
-  void OnLoadEventStart(
-      const page_load_metrics::mojom::PageLoadTiming& timing,
-      const page_load_metrics::PageLoadExtraInfo& info) override;
-  void OnFirstLayout(const page_load_metrics::mojom::PageLoadTiming& timing,
-                     const page_load_metrics::PageLoadExtraInfo& info) override;
-  void OnFirstContentfulPaintInPage(
-      const page_load_metrics::mojom::PageLoadTiming& timing,
-      const page_load_metrics::PageLoadExtraInfo& info) override;
-  void OnParseStart(const page_load_metrics::mojom::PageLoadTiming& timing,
-                    const page_load_metrics::PageLoadExtraInfo& info) override;
   void OnTimingUpdate(
       content::RenderFrameHost* subframe_rfh,
       const page_load_metrics::mojom::PageLoadTiming& timing,
@@ -153,7 +125,6 @@
   std::map<content::RenderFrameHost*, SubFrameInfo> amp_subframe_info_;
 
   GURL current_url_;
-  AMPViewType view_type_ = AMPViewType::NONE;
 
   DISALLOW_COPY_AND_ASSIGN(AMPPageLoadMetricsObserver);
 };
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc
index fb03768..b17785b 100644
--- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc
@@ -23,7 +23,6 @@
 #include "url/gurl.h"
 
 using content::NavigationSimulator;
-using AMPViewType = AMPPageLoadMetricsObserver::AMPViewType;
 
 class AMPPageLoadMetricsObserverTest
     : public page_load_metrics::PageLoadMetricsObserverTestHarness {
@@ -57,30 +56,6 @@
     NavigateAndCommit(GURL("http://otherurl.com"));
   }
 
-  void ValidateHistograms(bool expect_histograms, const char* view_type) {
-    ValidateHistogramsFor(
-        "PageLoad.Clients.AMP.DocumentTiming."
-        "NavigationToDOMContentLoadedEventFired",
-        view_type, timing_.document_timing->dom_content_loaded_event_start,
-        expect_histograms);
-    ValidateHistogramsFor(
-        "PageLoad.Clients.AMP.DocumentTiming.NavigationToFirstLayout",
-        view_type, timing_.document_timing->first_layout, expect_histograms);
-    ValidateHistogramsFor(
-        "PageLoad.Clients.AMP.DocumentTiming."
-        "NavigationToLoadEventFired",
-        view_type, timing_.document_timing->load_event_start,
-        expect_histograms);
-    ValidateHistogramsFor(
-        "PageLoad.Clients.AMP.PaintTiming."
-        "NavigationToFirstContentfulPaint",
-        view_type, timing_.paint_timing->first_contentful_paint,
-        expect_histograms);
-    ValidateHistogramsFor(
-        "PageLoad.Clients.AMP.ParseTiming.NavigationToParseStart", view_type,
-        timing_.parse_timing->parse_start, expect_histograms);
-  }
-
   void ValidateHistogramsFor(const std::string& histogram,
                              const char* view_type,
                              const base::Optional<base::TimeDelta>& event,
@@ -126,37 +101,8 @@
   DISALLOW_COPY_AND_ASSIGN(AMPPageLoadMetricsObserverTest);
 };
 
-TEST_F(AMPPageLoadMetricsObserverTest, AMPViewType) {
-  using AMPViewType = AMPPageLoadMetricsObserver::AMPViewType;
-
-  struct {
-    AMPViewType expected_type;
-    const char* url;
-  } test_cases[] = {
-      {AMPViewType::NONE, "https://google.com/"},
-      {AMPViewType::NONE, "https://google.com/amp/foo"},
-      {AMPViewType::NONE, "https://google.com/news/amp?foo"},
-      {AMPViewType::NONE, "https://example.com/"},
-      {AMPViewType::NONE, "https://example.com/amp/foo"},
-      {AMPViewType::NONE, "https://example.com/news/amp?foo"},
-      {AMPViewType::NONE, "https://www.google.com/"},
-      {AMPViewType::NONE, "https://news.google.com/"},
-      {AMPViewType::AMP_CACHE, "https://cdn.ampproject.org/foo"},
-      {AMPViewType::AMP_CACHE, "https://site.cdn.ampproject.org/foo"},
-      {AMPViewType::GOOGLE_SEARCH_AMP_VIEWER, "https://www.google.com/amp/foo"},
-      {AMPViewType::GOOGLE_NEWS_AMP_VIEWER,
-       "https://news.google.com/news/amp?foo"},
-  };
-  for (const auto& test : test_cases) {
-    EXPECT_EQ(test.expected_type,
-              AMPPageLoadMetricsObserver::GetAMPViewType(GURL(test.url)))
-        << "For URL: " << test.url;
-  }
-}
-
 TEST_F(AMPPageLoadMetricsObserverTest, AMPCachePage) {
   RunTest(GURL("https://cdn.ampproject.org/page"));
-  ValidateHistograms(true, "AmpCache.");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -164,7 +110,6 @@
 
 TEST_F(AMPPageLoadMetricsObserverTest, GoogleSearchAMPCachePage) {
   RunTest(GURL("https://www.google.com/amp/page"));
-  ValidateHistograms(true, "GoogleSearch.");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -172,7 +117,6 @@
 
 TEST_F(AMPPageLoadMetricsObserverTest, GoogleSearchAMPCachePageBaseURL) {
   RunTest(GURL("https://www.google.com/amp/"));
-  ValidateHistograms(false, "");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -180,7 +124,6 @@
 
 TEST_F(AMPPageLoadMetricsObserverTest, GoogleNewsAMPCachePage) {
   RunTest(GURL("https://news.google.com/news/amp?page"));
-  ValidateHistograms(true, "GoogleNews.");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -188,7 +131,6 @@
 
 TEST_F(AMPPageLoadMetricsObserverTest, GoogleNewsAMPCachePageBaseURL) {
   RunTest(GURL("https://news.google.com/news/amp"));
-  ValidateHistograms(false, "");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -196,7 +138,6 @@
 
 TEST_F(AMPPageLoadMetricsObserverTest, NonAMPPage) {
   RunTest(GURL("https://www.google.com/not-amp/page"));
-  ValidateHistograms(false, "");
   EXPECT_TRUE(test_ukm_recorder()
                   .GetEntriesByName(ukm::builders::AmpPageLoad::kEntryName)
                   .empty());
@@ -211,35 +152,6 @@
       GURL("https://www.google.com/amp/page"), main_rfh())
       ->CommitSameDocument();
 
-  histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.AMP.SameDocumentView",
-      static_cast<base::HistogramBase::Sample>(
-          AMPViewType::GOOGLE_SEARCH_AMP_VIEWER),
-      1);
-
-  // Verify that additional same-document navigations to the same URL don't
-  // result in additional views being counted.
-  NavigationSimulator::CreateRendererInitiated(
-      GURL("https://www.google.com/amp/page#fragment"), main_rfh())
-      ->CommitSameDocument();
-  NavigationSimulator::CreateRendererInitiated(
-      GURL("https://www.google.com/amp/page"), main_rfh())
-      ->CommitSameDocument();
-  histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.AMP.SameDocumentView",
-      static_cast<base::HistogramBase::Sample>(
-          AMPViewType::GOOGLE_SEARCH_AMP_VIEWER),
-      1);
-
-  NavigationSimulator::CreateRendererInitiated(
-      GURL("https://www.google.com/amp/page2"), main_rfh())
-      ->CommitSameDocument();
-  histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.AMP.SameDocumentView",
-      static_cast<base::HistogramBase::Sample>(
-          AMPViewType::GOOGLE_SEARCH_AMP_VIEWER),
-      2);
-
   // Verify that subframe metrics aren't recorded without an AMP subframe.
   histogram_tester().ExpectTotalCount(
       "PageLoad.Clients.AMP.Experimental.PageTiming.NavigationToInput.Subframe",
@@ -257,31 +169,6 @@
                   .empty());
 }
 
-TEST_F(AMPPageLoadMetricsObserverTest, GoogleNewsAMPCacheRedirect) {
-  auto navigation_simulator = NavigationSimulator::CreateRendererInitiated(
-      GURL("https://news.google.com/news/amp?page"), main_rfh());
-  navigation_simulator->Redirect(GURL("http://www.example.com/"));
-  navigation_simulator->Commit();
-  SimulateTimingUpdate(timing_);
-
-  histogram_tester().ExpectTotalCount(
-      "PageLoad.Clients.AMP.ParseTiming.NavigationToParseStart", 0);
-  histogram_tester().ExpectTotalCount(
-      "PageLoad.Clients.AMP.GoogleNews.ParseTiming.NavigationToParseStart", 0);
-  histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.AMP.ParseTiming.NavigationToParseStart."
-      "RedirectToNonAmpPage",
-      static_cast<base::HistogramBase::Sample>(
-          timing_.parse_timing->parse_start.value().InMilliseconds()),
-      1);
-  histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.AMP.GoogleNews.ParseTiming.NavigationToParseStart."
-      "RedirectToNonAmpPage",
-      static_cast<base::HistogramBase::Sample>(
-          timing_.parse_timing->parse_start.value().InMilliseconds()),
-      1);
-}
-
 TEST_F(AMPPageLoadMetricsObserverTest, SubFrameInputBeforeNavigation) {
   GURL amp_url("https://ampviewer.com/page");
 
diff --git a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_graphics_tracing_ui.js b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_graphics_tracing_ui.js
index b98f79a0..ec1a3d8a 100644
--- a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_graphics_tracing_ui.js
+++ b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_graphics_tracing_ui.js
@@ -154,22 +154,69 @@
  * Describes how value events should be rendered in charts. |color| specifies
  * color of the event, |name| is used in tooltips, |width| specify width of
  * the line in chart, |scale| is used to convert actual value to rendered value.
+ * When rendered, min and max values and determined and used as a range where
+ * chart is drawn. However, in the case range is small, let say 1 mb for
+ * |kMemUsed| this may lead to user confusion that huge amount of memory was
+ * allocated. To prevent this scanario, |minRange| defines the minimum range of
+ * values and is set in scaled units.
  */
 var valueAttributes = {
   // kMemUsed.
-  1: {color: '#ff3d00', name: 'used mb', scale: 1.0 / 1024.0, width: 1.0},
+  1: {
+    color: '#ff3d00',
+    minRange: 512.0,
+    name: 'used mb',
+    scale: 1.0 / 1024.0,
+    width: 1.0
+  },
   // kSwapRead.
-  2: {color: '#ffc400', name: 'swap read sectors', scale: 1.0, width: 1.0},
+  2: {
+    color: '#ffc400',
+    minRange: 32.0,
+    name: 'swap read sectors',
+    scale: 1.0,
+    width: 1.0
+  },
   // kSwapWrite.
-  3: {color: '#ff9100', name: 'swap write sectors', scale: 1.0, width: 1.0},
+  3: {
+    color: '#ff9100',
+    minRange: 32.0,
+    name: 'swap write sectors',
+    scale: 1.0,
+    width: 1.0
+  },
   // kGemObjects.
-  5: {color: '#3d5afe', name: 'geom. objects', scale: 1.0, width: 1.0},
+  5: {
+    color: '#3d5afe',
+    minRange: 1000,
+    name: 'geom. objects',
+    scale: 1.0,
+    width: 1.0
+  },
   // kGemSize.
-  6: {color: '#7c4dff', name: 'geom. size mb', scale: 1.0 / 1024.0, width: 1.0},
+  6: {
+    color: '#7c4dff',
+    minRange: 256.0,
+    name: 'geom. size mb',
+    scale: 1.0 / 1024.0,
+    width: 1.0
+  },
   // kGpuFreq.
-  7: {color: '#01579b', name: 'GPU frequency mhz', scale: 1.0, width: 1.0},
+  7: {
+    color: '#01579b',
+    minRange: 300.0,
+    name: 'GPU frequency mhz',
+    scale: 1.0,
+    width: 1.0
+  },
   // kCpuTemp.
-  8: {color: '#ff3d00', name: 'CPU celsius.', scale: 1.0 / 1000.0, width: 1.0},
+  8: {
+    color: '#ff3d00',
+    minRange: 20.0,
+    name: 'CPU celsius.',
+    scale: 1.0 / 1000.0,
+    width: 1.0
+  },
 };
 
 /**
@@ -587,6 +634,7 @@
     // Calculate min/max for sources and event indices.
     var minValue = null;
     var maxValue = null;
+    var attributes = null;
     var eventIndicesForAll = [];
     for (var i = 0; i < sources.length; ++i) {
       var source = sources[i];
@@ -606,17 +654,25 @@
         minValue = Math.min(minValue, source.events[eventIndex][2]);
         maxValue = Math.max(maxValue, source.events[eventIndex][2]);
         eventIndex = source.getNextEvent(eventIndex, 1 /* direction */);
+        if (!attributes) {
+          attributes = valueAttributes[source.events[eventIndex][0]];
+        }
       }
       eventIndicesForAll.push(eventIndices);
     }
 
+    if (!attributes) {
+      // no one event to render.
+      return;
+    }
+
+    // Ensure minimum value range.
+    if (maxValue - minValue < attributes.minRange / attributes.scale) {
+      maxValue = minValue + attributes.minRange / attributes.scale;
+    }
+
     // Add +-1% to bounds.
     var dif = maxValue - minValue;
-    if (minValue == maxValue) {
-      // To support constant value, set diff to any non-zero value that would
-      // put line in the center.
-      dif = 1;
-    }
     minValue -= dif * 0.01;
     maxValue += dif * 0.01;
     var divider = 1.0 / (maxValue - minValue);
@@ -631,7 +687,6 @@
       }
       // Determine type using first element.
       var eventType = source.events[eventIndices[0]][0];
-      var attributes = valueAttributes[eventType];
 
       var points = [];
       var lastY = 0;
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
index 7b88f43c..77c06db 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_hr.xtb
@@ -3,10 +3,12 @@
 <translationbundle lang="hr">
 <translation id="1276998909102132017">Slike iz galerije</translation>
 <translation id="1430915738399379752">Ispis</translation>
+<translation id="1462966117743110941">Vaš fotoaparat sada podržava nove načine rada te će fotografije i videozapisi biti dostupni u mapama Preuzimanja.</translation>
 <translation id="1620510694547887537">Fotoaparat</translation>
 <translation id="1627744224761163218">4 x 4</translation>
 <translation id="1664224225747386870">Nije snimljeno ništa</translation>
 <translation id="1862930711583847113">Izvoz datoteke <ph name="FILE" /> nije moguć</translation>
+<translation id="2008689030244369546">Potpuno novi izgled</translation>
 <translation id="2036868001356139588">Trajanje odbrojavanja</translation>
 <translation id="2050339315714019657">Portret</translation>
 <translation id="2064538373111010176">Aktivno: <ph name="CAMERA" /></translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
index efee49c..91aab23 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
@@ -601,7 +601,8 @@
           .expectBraille('dog img is a cat img test')
           .clearPendingOutput()
           .call(moveByChar)
-          .expectSpeech('dog', 'Image')
+          // This is actually wrong; should say space.
+          .expectSpeech('dog')
           .expectBraille(lineText, {startIndex: 3, endIndex: 3})
           .call(moveByChar)
           .expectSpeech('i')
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
index e86e6ac..4632dd0 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
@@ -213,7 +213,7 @@
 <translation id="2626530649491650971">clickable</translation>
 <translation id="2628764385451019380">אין תיבה משולבת קודמת.</translation>
 <translation id="2637227747952042642">Math</translation>
-<translation id="2638785836053527382">ההורדה נמשכת <ph name="FILE_NAME" /></translation>
+<translation id="2638785836053527382">ההורדה של <ph name="FILE_NAME" /> נמשכת</translation>
 <translation id="2639750663247012216">‏מקש צירוף של ChromeVox</translation>
 <translation id="2644542693584024604">misspelled</translation>
 <translation id="2661530546602071611">הודעה</translation>
@@ -1081,7 +1081,7 @@
 <translation id="8096975275316362544">מנטה בהיר</translation>
 <translation id="8098587210054821856">אפור תכלת</translation>
 <translation id="8110647606445335195">‏אין ציוני דרך מסוג ARIA.</translation>
-<translation id="812886159861361726">ההורדה נפסקה <ph name="FILE_NAME" /></translation>
+<translation id="812886159861361726">ההורדה של <ph name="FILE_NAME" /> נפסקה</translation>
 <translation id="8138880386467279117">מגע</translation>
 <translation id="8153880621934657047">לא בתוך טבלה.</translation>
 <translation id="817440585505441544">{COUNT,plural, =1{קו תחתון}two{# סימני קו תחתון}many{# סימני קו תחתון}other{# סימני קו תחתון}}</translation>
@@ -1151,7 +1151,7 @@
 <translation id="8743786158317878347">היכנס לתוכן מובנה, כמו טבלאות</translation>
 <translation id="8747966237988593539">רשימה לפי סדר</translation>
 <translation id="8749988712346667988">כסף</translation>
-<translation id="875769700429317857">ההורדהשל <ph name="FILE_NAME" /> הושלמה</translation>
+<translation id="875769700429317857">ההורדה של <ph name="FILE_NAME" /> הושלמה</translation>
 <translation id="8759334257841767240">אין קישור הבא.</translation>
 <translation id="8767968232364267681">הכותרת הבאה של רמה 4</translation>
 <translation id="8770473310765924354">צא מתוכן מובנה, כמו טבלאות</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
index 3a36458b8..0fd4178e 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
@@ -621,7 +621,7 @@
 <translation id="5349770431644471053">Liên kết ngược</translation>
 <translation id="536031132345979795">Lùi lại đoạn trước đó trong khi tiếp tục đọc</translation>
 <translation id="5368000168321181111">Tắt kết nối tai nghe</translation>
-<translation id="5368505757342402527">Đã tải được <ph name="PROGRESS" />% của <ph name="FILE_NAME" /> xuống. Còn khoảng <ph name="TIME" /> <ph name="UNITS" /> nữa.</translation>
+<translation id="5368505757342402527">Đã tải <ph name="FILE_NAME" /> được <ph name="PROGRESS" />%. Còn khoảng <ph name="TIME" /> <ph name="UNITS" /> nữa.</translation>
 <translation id="5374320867641260420">Không có nút tiếp theo nào.</translation>
 <translation id="5376407118396657359">Nhấn tổ hợp phím Tìm kiếm+Ctrl+Alt cùng với các mũi tên để di chuyển theo ô.</translation>
 <translation id="5382299583965267720">Không có tiêu đề cấp 1 tiếp theo nào.</translation>
@@ -802,7 +802,7 @@
 <translation id="667999046851023355">Tài liệu</translation>
 <translation id="6688209025607531203">Thông báo phi thể thức</translation>
 <translation id="6689672606256159458">Màu hồng cam đậm</translation>
-<translation id="669617842401078250">Đã tạm dừng quá trình tải <ph name="FILE_NAME" /> xuống</translation>
+<translation id="669617842401078250">Đã tạm dừng tải <ph name="FILE_NAME" /> xuống</translation>
 <translation id="6696967141280706829">Lời nói đầu</translation>
 <translation id="6697092096875747123">Hộp kết hợp trước</translation>
 <translation id="6702609185760332517">{COUNT,plural, =1{dấu chấm than}other{# dấu chấm than}}</translation>
diff --git a/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html b/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html
index 9db9071..be487dc8 100644
--- a/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html
+++ b/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html
@@ -54,6 +54,10 @@
         color: white;
       }
 
+      :host-context(:not([dark])):host([new-print-preview]) cr-icon-button {
+        --cr-icon-button-ripple-opacity: .5;
+      }
+
       :host-context([dark]):host([new-print-preview]) cr-icon-button {
         background-color: var(--google-grey-900);
         color: var(--google-grey-200);
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
index b779c70..bf85b1f 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
@@ -31,7 +31,6 @@
           [[getConnectionStatusText_(device)]]
         </div>
       </div>
-      <span hidden$="[[!device.connecting]]">$i18n{bluetoothConnecting}</span>
       <div hidden$="[[!device.paired]]">
         <cr-icon-button class="icon-more-vert" on-click="onMenuButtonTap_"
             tabindex$="[[tabindex]]" title="$i18n{moreActions}"
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
index 478680d7a..a3328e0 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
@@ -88,6 +88,9 @@
     if (!this.hasConnectionStatusText_(device)) {
       return '';
     }
+    if (device.connecting) {
+      return this.i18n('bluetoothConnecting');
+    }
     return this.i18n(
         device.connected ? 'bluetoothConnected' : 'bluetoothNotConnected');
   },
@@ -99,7 +102,7 @@
    * @private
    */
   hasConnectionStatusText_: function(device) {
-    return !!device.paired && !device.connecting;
+    return !!(device.paired || device.connecting);
   },
 
   /**
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
index 5f4c361..9241ed9 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/BUILD.gn
@@ -13,6 +13,8 @@
     "//chrome/browser/resources/settings/people_page:change_picture_browser_proxy",
     "//chrome/browser/resources/settings/people_page:fingerprint_browser_proxy",
     "//chrome/browser/resources/settings/people_page:fingerprint_list",
+    "//chrome/browser/resources/settings/people_page:kerberos_accounts",
+    "//chrome/browser/resources/settings/people_page:kerberos_accounts_browser_proxy",
     "//chrome/browser/resources/settings/people_page:lock_screen",
     "//chrome/browser/resources/settings/people_page:lock_screen_password_prompt_dialog",
     "//chrome/browser/resources/settings/people_page:lock_state_behavior",
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
index 968a424..36aaa4d 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
@@ -1,5 +1,6 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
+<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_png_behavior.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html">
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
@@ -13,25 +14,23 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="../../controls/settings_toggle_button.html">
 <link rel="import" href="../../icons.html">
+<link rel="import" href="../../people_page/account_manager.html">
+<link rel="import" href="../../people_page/change_picture.html">
+<link rel="import" href="../../people_page/fingerprint_list.html">
+<link rel="import" href="../../people_page/kerberos_accounts.html">
+<link rel="import" href="../../people_page/lock_screen.html">
+<link rel="import" href="../../people_page/lock_state_behavior.html">
 <link rel="import" href="../../people_page/profile_info_browser_proxy.html">
-<link rel="import" href="../../people_page/sync_browser_proxy.html">
-<link rel="import" href="../../people_page/sync_page.html">
 <link rel="import" href="../../people_page/signout_dialog.html">
+<link rel="import" href="../../people_page/sync_browser_proxy.html">
 <link rel="import" href="../../people_page/sync_controls.html">
+<link rel="import" href="../../people_page/sync_page.html">
+<link rel="import" href="../../people_page/users_page.html">
 <link rel="import" href="../../route.html">
 <link rel="import" href="../../settings_page/settings_animated_pages.html">
 <link rel="import" href="../../settings_page/settings_subpage.html">
 <link rel="import" href="../../settings_shared_css.html">
 
-
-<link rel="import" href="../../people_page/account_manager.html">
-<link rel="import" href="../../people_page/change_picture.html">
-<link rel="import" href="chrome://resources/cr_elements/chromeos/cr_picture/cr_png_behavior.html">
-<link rel="import" href="../../people_page/fingerprint_list.html">
-<link rel="import" href="../../people_page/lock_screen.html">
-<link rel="import" href="../../people_page/lock_state_behavior.html">
-<link rel="import" href="../../people_page/users_page.html">
-
 <dom-module id="os-settings-people-page">
   <template>
     <style include="settings-shared iron-flex">
@@ -167,6 +166,12 @@
               label="$i18n{accountManagerSubMenuLabel}"></cr-link-row>
         </template>
 
+        <template is="dom-if" if="[[isKerberosEnabled_]]">
+          <cr-link-row id="kerberos-accounts-subpage-trigger" class="hr"
+              on-click="onKerberosAccountsTap_"
+              label="$i18n{kerberosAccountsSubMenuLabel}"></cr-link-row>
+        </template>
+
         <cr-link-row id="manage-other-people-subpage-trigger"
             label="$i18n{manageOtherPeople}" on-click="onManageOtherPeople_">
         </cr-link-row>
@@ -242,6 +247,15 @@
           </settings-subpage>
         </template>
       </template>
+      <template is="dom-if" if="[[isKerberosEnabled_]]">
+        <template is="dom-if" route-path="/kerberosAccounts">
+          <settings-subpage
+              associated-control="[[$$('#kerberos-accounts-subpage-trigger')]]"
+              page-title="$i18n{kerberosAccountsPageTitle}">
+            <settings-kerberos-accounts></settings-kerberos-accounts>
+          </settings-subpage>
+        </template>
+      </template>
     </settings-animated-pages>
 
     <template is="dom-if" if="[[showSignoutDialog_]]" restamp>
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
index cd163f3..a115e9c 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
@@ -100,6 +100,18 @@
       readOnly: true,
     },
 
+    /**
+     * True if Chrome OS Kerberos support is enabled.
+     * @private
+     */
+    isKerberosEnabled_: {
+      type: Boolean,
+      value: function() {
+        return loadTimeData.getBoolean('isKerberosEnabled');
+      },
+      readOnly: true,
+    },
+
     /** @private {!Map<string, string>} */
     focusConfig_: {
       type: Object,
@@ -131,6 +143,11 @@
               settings.routes.ACCOUNT_MANAGER.path,
               '#account-manager-subpage-trigger');
         }
+        if (settings.routes.KERBEROS_ACCOUNTS) {
+          map.set(
+              settings.routes.KERBEROS_ACCOUNTS.path,
+              '#kerberos-accounts-subpage-trigger');
+        }
         return map;
       },
     },
@@ -288,6 +305,14 @@
     settings.navigateTo(settings.routes.ACCOUNT_MANAGER);
   },
 
+  /**
+   * @param {!Event} e
+   * @private
+   */
+  onKerberosAccountsTap_: function(e) {
+    settings.navigateTo(settings.routes.KERBEROS_ACCOUNTS);
+  },
+
   /** @private */
   onManageOtherPeople_: function() {
     settings.navigateTo(settings.routes.ACCOUNTS);
diff --git a/chrome/browser/resources/settings/page_visibility.js b/chrome/browser/resources/settings/page_visibility.js
index 823fb641..662c86bd 100644
--- a/chrome/browser/resources/settings/page_visibility.js
+++ b/chrome/browser/resources/settings/page_visibility.js
@@ -47,6 +47,7 @@
 /**
  * @typedef {{
  *   googleAccounts: boolean,
+ *   kerberosAccounts: boolean,
  *   lockScreen: boolean,
  *   manageUsers: boolean,
  * }}
@@ -129,6 +130,7 @@
       autofill: true,
       people: {
         lockScreen: showOSSettings,
+        kerberosAccounts: showOSSettings,
         googleAccounts: showOSSettings,
         manageUsers: showOSSettings,
       },
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html
index ac1a8e0..6f0157b9 100644
--- a/chrome/browser/resources/settings/people_page/people_page.html
+++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -269,14 +269,15 @@
                 prefs.settings.enable_screen_lock.value)]]"
             hidden="[[!pageVisibility.people.lockScreen]]"></cr-link-row>
 
-        <template is="dom-if" if="[[isAccountManagerEnabled_]]">
+        <template is="dom-if" if="[[shouldShowAccountManager_(
+            isAccountManagerEnabled_, pageVisibility.people.googleAccounts)]]">
           <cr-link-row id="account-manager-subpage-trigger" class="hr"
               on-click="onAccountManagerTap_"
-              label="$i18n{accountManagerSubMenuLabel}"
-              hidden="[[!pageVisibility.people.googleAccounts]]"></cr-link-row>
+              label="$i18n{accountManagerSubMenuLabel}"></cr-link-row>
         </template>
 
-        <template is="dom-if" if="[[isKerberosEnabled_]]">
+        <template is="dom-if" if="[[shouldShowKerberos_(
+            isKerberosEnabled_, pageVisibility.people.kerberosAccounts)]]">
           <cr-link-row id="kerberos-accounts-subpage-trigger" class="hr"
               on-click="onKerberosAccountsTap_"
               label="$i18n{kerberosAccountsSubMenuLabel}"></cr-link-row>
@@ -365,8 +366,8 @@
           <settings-change-picture></settings-change-picture>
         </settings-subpage>
       </template>
-      <template is="dom-if" if="[[isAccountManagerEnabled_
-          && !pageVisibility.people.googleAccounts]]">
+      <template is="dom-if" if="[[shouldShowAccountManager_(
+          isAccountManagerEnabled_, pageVisibility.people.googleAccounts)]]">
         <template is="dom-if" route-path="/accountManager">
           <settings-subpage
               associated-control="[[$$('#account-manager-subpage-trigger')]]"
@@ -375,7 +376,8 @@
           </settings-subpage>
         </template>
       </template>
-      <template is="dom-if" if="[[isKerberosEnabled_]]">
+      <template is="dom-if" if="[[shouldShowKerberos_(
+          isKerberosEnabled_, pageVisibility.people.kerberosAccounts)]]">
         <template is="dom-if" route-path="/kerberosAccounts">
           <settings-subpage
               associated-control="[[$$('#kerberos-accounts-subpage-trigger')]]"
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js
index d55f8d54a..f1ac47c 100644
--- a/chrome/browser/resources/settings/people_page/people_page.js
+++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -71,7 +71,7 @@
 
     /**
      * Dictionary defining page visibility.
-     * @type {!PeoplePageVisibility}
+     * @type {!PageVisibility}
      */
     pageVisibility: Object,
 
@@ -450,6 +450,18 @@
   onManageOtherPeople_: function() {
     settings.navigateTo(settings.routes.ACCOUNTS);
   },
+
+  /** @private */
+  shouldShowAccountManager_: function() {
+    return this.isAccountManagerEnabled_ &&
+        this.pageVisibility.people.googleAccounts;
+  },
+
+  /** @private */
+  shouldShowKerberos_: function() {
+    return this.isKerberosEnabled_ &&
+        this.pageVisibility.people.kerberosAccounts;
+  },
   // </if>
 
   // <if expr="not chromeos">
diff --git a/chrome/browser/sync/test/integration/send_tab_to_self_helper.cc b/chrome/browser/sync/test/integration/send_tab_to_self_helper.cc
index d81d5b3b..e3a78df 100644
--- a/chrome/browser/sync/test/integration/send_tab_to_self_helper.cc
+++ b/chrome/browser/sync/test/integration/send_tab_to_self_helper.cc
@@ -55,6 +55,56 @@
   CheckExitCondition();
 }
 
+SendTabToSelfUrlOpenedChecker::SendTabToSelfUrlOpenedChecker(
+    send_tab_to_self::SendTabToSelfSyncService* service,
+    const GURL& url)
+    : url_(url), service_(service) {
+  DCHECK(service);
+  service->GetSendTabToSelfModel()->AddObserver(this);
+}
+
+SendTabToSelfUrlOpenedChecker::~SendTabToSelfUrlOpenedChecker() {
+  service_->GetSendTabToSelfModel()->RemoveObserver(this);
+}
+
+bool SendTabToSelfUrlOpenedChecker::IsExitConditionSatisfied() {
+  send_tab_to_self::SendTabToSelfModel* model =
+      service_->GetSendTabToSelfModel();
+  for (auto const& guid : model->GetAllGuids()) {
+    const send_tab_to_self::SendTabToSelfEntry* entry =
+        model->GetEntryByGUID(guid);
+    if (entry->GetURL() == url_ && entry->IsOpened()) {
+      return true;
+    }
+  }
+  return false;
+}
+
+std::string SendTabToSelfUrlOpenedChecker::GetDebugMessage() const {
+  return "Waiting for data for url '" + url_.spec() + "' to be marked opened.";
+}
+
+void SendTabToSelfUrlOpenedChecker::SendTabToSelfModelLoaded() {
+  CheckExitCondition();
+}
+
+void SendTabToSelfUrlOpenedChecker::EntriesAddedRemotely(
+    const std::vector<const send_tab_to_self::SendTabToSelfEntry*>&
+        new_entries) {
+  CheckExitCondition();
+}
+
+void SendTabToSelfUrlOpenedChecker::EntriesRemovedRemotely(
+    const std::vector<std::string>& guids_removed) {
+  CheckExitCondition();
+}
+
+void SendTabToSelfUrlOpenedChecker::EntriesOpenedRemotely(
+    const std::vector<const send_tab_to_self::SendTabToSelfEntry*>&
+        opened_entries) {
+  CheckExitCondition();
+}
+
 SendTabToSelfModelEqualityChecker::SendTabToSelfModelEqualityChecker(
     send_tab_to_self::SendTabToSelfSyncService* service0,
     send_tab_to_self::SendTabToSelfSyncService* service1)
diff --git a/chrome/browser/sync/test/integration/send_tab_to_self_helper.h b/chrome/browser/sync/test/integration/send_tab_to_self_helper.h
index 6da5be8..d1bf44fb 100644
--- a/chrome/browser/sync/test/integration/send_tab_to_self_helper.h
+++ b/chrome/browser/sync/test/integration/send_tab_to_self_helper.h
@@ -21,7 +21,7 @@
 namespace send_tab_to_self_helper {
 
 // Class that allows waiting until a particular |url| is exposed by the
-// SendTabToSelfModel in|service|.
+// SendTabToSelfModel in |service|.
 class SendTabToSelfUrlChecker
     : public StatusChangeChecker,
       public send_tab_to_self::SendTabToSelfModelObserver {
@@ -51,6 +51,41 @@
   DISALLOW_COPY_AND_ASSIGN(SendTabToSelfUrlChecker);
 };
 
+// Class that allows waiting until a particular |url| is marked opened by the
+// SendTabToSelfModel in |service|.
+class SendTabToSelfUrlOpenedChecker
+    : public StatusChangeChecker,
+      public send_tab_to_self::SendTabToSelfModelObserver {
+ public:
+  // The caller must ensure that |service| is not null and will outlive this
+  // object.
+  SendTabToSelfUrlOpenedChecker(
+      send_tab_to_self::SendTabToSelfSyncService* service,
+      const GURL& url);
+  ~SendTabToSelfUrlOpenedChecker() override;
+
+  // StatusChangeChecker implementation.
+  bool IsExitConditionSatisfied() override;
+  std::string GetDebugMessage() const override;
+
+  // SendTabToSelfModelObserver implementation.
+  void SendTabToSelfModelLoaded() override;
+  void EntriesAddedRemotely(
+      const std::vector<const send_tab_to_self::SendTabToSelfEntry*>&
+          new_entries) override;
+  void EntriesRemovedRemotely(
+      const std::vector<std::string>& guids_removed) override;
+  void EntriesOpenedRemotely(
+      const std::vector<const send_tab_to_self::SendTabToSelfEntry*>&
+          opened_entries) override;
+
+ private:
+  const GURL url_;
+  send_tab_to_self::SendTabToSelfSyncService* const service_;
+
+  DISALLOW_COPY_AND_ASSIGN(SendTabToSelfUrlOpenedChecker);
+};
+
 // Class that allows waiting the number of entries in until |service0|
 // matches the number of entries in |service1|.
 class SendTabToSelfModelEqualityChecker
diff --git a/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc b/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc
index d72bcf5..13b8f3a 100644
--- a/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc
@@ -220,3 +220,46 @@
   EXPECT_EQ(1u, profile1_target_device_map.size());
   EXPECT_EQ(1u, profile2_target_device_map.size());
 }
+
+IN_PROC_BROWSER_TEST_F(TwoClientSendTabToSelfSyncTest,
+                       MarkOpenedWhenBothClientsAlreadySyncing) {
+  const GURL kUrl("https://www.example.com");
+  const base::Time kHistoryEntryTime = base::Time::Now();
+  const std::string kTitle("example");
+  const std::string kTargetDeviceSyncCacheGuid("target_device");
+  const base::Time kTime = base::Time::FromDoubleT(1);
+
+  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
+
+  history::HistoryService* history_service =
+      HistoryServiceFactory::GetForProfile(GetProfile(0),
+                                           ServiceAccessType::EXPLICIT_ACCESS);
+  history_service->AddPage(kUrl, kHistoryEntryTime, history::SOURCE_BROWSED);
+
+  base::RunLoop run_loop;
+  history_service->FlushForTest(run_loop.QuitClosure());
+  run_loop.Run();
+
+  send_tab_to_self::SendTabToSelfSyncService* service0 =
+      SendTabToSelfSyncServiceFactory::GetForProfile(GetProfile(0));
+
+  send_tab_to_self::SendTabToSelfModel* model0 =
+      service0->GetSendTabToSelfModel();
+
+  ASSERT_TRUE(
+      model0->AddEntry(kUrl, kTitle, kTime, kTargetDeviceSyncCacheGuid));
+
+  send_tab_to_self::SendTabToSelfSyncService* service1 =
+      SendTabToSelfSyncServiceFactory::GetForProfile(GetProfile(1));
+
+  ASSERT_TRUE(
+      send_tab_to_self_helper::SendTabToSelfUrlChecker(service1, kUrl).Wait());
+
+  const std::string guid = model0->GetAllGuids()[0];
+
+  service1->GetSendTabToSelfModel()->MarkEntryOpened(guid);
+
+  EXPECT_TRUE(
+      send_tab_to_self_helper::SendTabToSelfUrlOpenedChecker(service0, kUrl)
+          .Wait());
+}
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.cc b/chrome/browser/ui/app_list/app_list_client_impl.cc
index 472d97f..ebd5a317 100644
--- a/chrome/browser/ui/app_list/app_list_client_impl.cc
+++ b/chrome/browser/ui/app_list/app_list_client_impl.cc
@@ -107,8 +107,6 @@
   if (!result)
     return;
 
-  search_controller_->OpenResult(result, event_flags);
-
   // Send training signal to search controller.
   search_controller_->Train(result_id,
                             app_list::RankingItemTypeFromSearchResult(*result));
@@ -122,6 +120,9 @@
 
   RecordSearchResultOpenTypeHistogram(
       launched_from, result->GetSearchResultType(), IsTabletMode());
+
+  // OpenResult may cause |result| to be deleted.
+  search_controller_->OpenResult(result, event_flags);
 }
 
 void AppListClientImpl::InvokeSearchResultAction(const std::string& result_id,
diff --git a/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc b/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc
index 83e2365..f22a963 100644
--- a/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc
+++ b/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc
@@ -151,6 +151,50 @@
   }
 }
 
+// Test that OpenSearchResult that dismisses app list runs fine without
+// user-after-free.
+IN_PROC_BROWSER_TEST_F(AppListClientImplBrowserTest, OpenSearchResult) {
+  AppListClientImpl* client = AppListClientImpl::GetInstance();
+  ASSERT_TRUE(client);
+
+  // Associate |client| with the current profile.
+  client->UpdateProfile();
+
+  // Show the launcher.
+  client->ShowAppList();
+
+  AppListModelUpdater* model_updater = test::GetModelUpdater(client);
+  ASSERT_TRUE(model_updater);
+  app_list::SearchController* search_controller = client->search_controller();
+  ASSERT_TRUE(search_controller);
+
+  // Any app that opens a window to dismiss app list is good enough for this
+  // test.
+  const std::string app_title = "chromium";
+  const std::string app_result_id =
+      "chrome-extension://mgndgikekgjfcpckkfioiadnlibdjbkf/";
+
+  // Search by title and the app must present in the results.
+  model_updater->UpdateSearchBox(base::ASCIIToUTF16(app_title),
+                                 true /* initiated_by_user */);
+  ASSERT_TRUE(search_controller->FindSearchResult(app_result_id));
+
+  // Open the app result.
+  client->OpenSearchResult(
+      app_result_id, ui::EF_NONE,
+      ash::mojom::AppListLaunchedFrom::kLaunchedFromSearchBox,
+      ash::mojom::AppListLaunchType::kAppSearchResult, 0);
+
+  // App list should be dismissed.
+  EXPECT_FALSE(client->app_list_target_visibility());
+
+  // Needed to let AppLaunchEventLogger finish its work on worker thread.
+  // Otherwise, its |weak_factory_| is released on UI thread and causing
+  // the bound WeakPtr to fail sequence check on a worker thread.
+  // TODO(crbug.com/965065): Remove after fixing AppLaunchEventLogger.
+  content::RunAllTasksUntilIdle();
+}
+
 // Test that browser launch time is recorded is recorded in preferences.
 // This is important for suggested apps sorting.
 IN_PROC_BROWSER_TEST_F(AppListClientImplBrowserTest,
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 1ede853..4a992fa 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -2449,6 +2449,12 @@
 // Browser, In-progress download termination handling (private):
 
 bool Browser::CanCloseWithInProgressDownloads() {
+#if defined(OS_MACOSX)
+  // On Mac, non-incognito download can still continue after window is closed.
+  if (!profile_->IsOffTheRecord())
+    return true;
+#endif
+
   // If we've prompted, we need to hear from the user before we
   // can close.
   if (cancel_download_confirmation_state_ != NOT_PROMPTED)
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index 8f83b074..c30b698 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -603,6 +603,8 @@
   FRIEND_TEST_ALL_PREFIXES(AppModeTest, EnableAppModeTest);
   FRIEND_TEST_ALL_PREFIXES(BrowserCommandControllerTest,
                            IsReservedCommandOrKeyIsApp);
+  FRIEND_TEST_ALL_PREFIXES(BrowserCloseTest, LastIncognito);
+  FRIEND_TEST_ALL_PREFIXES(BrowserCloseTest, LastRegular);
   FRIEND_TEST_ALL_PREFIXES(BrowserCommandControllerTest, AppFullScreen);
   FRIEND_TEST_ALL_PREFIXES(BrowserTest, OpenAppWindowLikeNtp);
   FRIEND_TEST_ALL_PREFIXES(BrowserTest, AppIdSwitch);
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 9db56de3..946ccf10 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -826,9 +826,6 @@
   // It should have inherited the tab group from the first tab.
   EXPECT_EQ(browser()->tab_strip_model()->GetTabGroupForTab(0),
             browser()->tab_strip_model()->GetTabGroupForTab(1));
-
-  // TODO (946263): Remove this teardown once the crash it prevents is fixed.
-  model->RemoveFromGroup({0, 1});
 }
 
 // BeforeUnloadAtQuitWithTwoWindows is a regression test for
diff --git a/chrome/browser/ui/browser_close_unittest.cc b/chrome/browser/ui/browser_close_unittest.cc
index 68f30a3..fdb35f40 100644
--- a/chrome/browser/ui/browser_close_unittest.cc
+++ b/chrome/browser/ui/browser_close_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/strings/stringprintf.h"
+#include "build/build_config.h"
 #include "chrome/browser/download/chrome_download_manager_delegate.h"
 #include "chrome/browser/download/download_core_service.h"
 #include "chrome/browser/download/download_core_service_factory.h"
@@ -200,6 +201,8 @@
   EXPECT_EQ(Browser::DOWNLOAD_CLOSE_LAST_WINDOW_IN_INCOGNITO_PROFILE,
             browser->OkToCloseWithInProgressDownloads(&num_downloads_blocking));
   EXPECT_EQ(num_downloads_blocking, 1);
+
+  EXPECT_EQ(false, browser->CanCloseWithInProgressDownloads());
 }
 
 // Last incognito window close with no downloads => no warning.
@@ -258,6 +261,11 @@
   EXPECT_EQ(Browser::DOWNLOAD_CLOSE_BROWSER_SHUTDOWN,
             browser->OkToCloseWithInProgressDownloads(&num_downloads_blocking));
   EXPECT_EQ(num_downloads_blocking, 1);
+#if defined(OS_MACOSX)
+  EXPECT_EQ(true, browser->CanCloseWithInProgressDownloads());
+#else
+  EXPECT_EQ(false, browser->CanCloseWithInProgressDownloads());
+#endif
 }
 
 // Last regular window triggers browser close warning if download is on a
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
index 1458431..19b2d5a0 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
@@ -132,7 +132,7 @@
                                 ui::NativeTheme::kColorId_DefaultIconColor)));
 }
 
-bool GetSyncedFaviconForPageURL(
+bool RecentTabsGetSyncedFaviconForPageURL(
     sync_sessions::SessionSyncService* session_sync_service,
     const GURL& page_url,
     scoped_refptr<base::RefCountedMemory>* sync_bitmap) {
@@ -588,7 +588,7 @@
       favicon::FaviconRequestOrigin::RECENTLY_CLOSED_TABS,
       FaviconServiceFactory::GetForProfile(browser_->profile(),
                                            ServiceAccessType::EXPLICIT_ACCESS),
-      base::BindOnce(&GetSyncedFaviconForPageURL,
+      base::BindOnce(&RecentTabsGetSyncedFaviconForPageURL,
                      base::Unretained(session_sync_service_)),
       is_local_tab ? &local_tab_cancelable_task_tracker_
                    : &other_devices_tab_cancelable_task_tracker_);
diff --git a/chrome/browser/ui/views/payments/payment_handler_change_payment_method_browsertest.cc b/chrome/browser/ui/views/payments/payment_handler_change_payment_method_browsertest.cc
index 88dc32f4..a2e6754 100644
--- a/chrome/browser/ui/views/payments/payment_handler_change_payment_method_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_handler_change_payment_method_browsertest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include <string>
-#include <utility>
 
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
@@ -30,9 +29,26 @@
              : may_contain_method_url;
 }
 
+enum class MethodIdentifier { kUrlBased, kBasicCard };
+
+struct TestCase {
+  TestCase(const std::string& init_test_code,
+           const std::string& expected_output,
+           MethodIdentifier method_identifier = MethodIdentifier::kUrlBased)
+      : init_test_code(init_test_code),
+        expected_output(expected_output),
+        method_identifier(method_identifier) {}
+
+  ~TestCase() {}
+
+  const std::string init_test_code;
+  const std::string expected_output;
+  const MethodIdentifier method_identifier;
+};
+
 class PaymentHandlerChangePaymentMethodTest
     : public PaymentRequestBrowserTestBase,
-      public testing::WithParamInterface<std::pair<std::string, std::string>> {
+      public testing::WithParamInterface<TestCase> {
  protected:
   PaymentHandlerChangePaymentMethodTest() {}
   ~PaymentHandlerChangePaymentMethodTest() override {}
@@ -43,42 +59,82 @@
 
 IN_PROC_BROWSER_TEST_P(PaymentHandlerChangePaymentMethodTest, Test) {
   NavigateTo("/change_payment_method.html");
+
+  if (GetParam().method_identifier == MethodIdentifier::kBasicCard) {
+    ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(),
+                                       "basicCardMethodName();"));
+  }
   std::string actual_output;
   ASSERT_TRUE(content::ExecuteScriptAndExtractString(
       GetActiveWebContents(), "install();", &actual_output));
   ASSERT_EQ(actual_output, "instruments.set(): Payment handler installed.");
 
+  ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(),
+                                     GetParam().init_test_code));
+
+  if (GetParam().method_identifier == MethodIdentifier::kBasicCard)
+    EnalbeSkipUIForForBasicCard();
+
   ASSERT_TRUE(content::ExecuteScriptAndExtractString(
-      GetActiveWebContents(), GetParam().first, &actual_output));
+      GetActiveWebContents(), "outputChangePaymentMethodReturnValue(request);",
+      &actual_output));
 
   // The test expectations are hard-coded, but the embedded test server changes
   // its port number in every test, e.g., https://a.com:34548.
-  ASSERT_EQ(ClearPortNumber(actual_output), GetParam().second)
-      << "When executing " << GetParam().first;
+  ASSERT_EQ(ClearPortNumber(actual_output), GetParam().expected_output)
+      << "When executing " << GetParam().init_test_code;
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    Tests,
+    NoMerchantResponse,
     PaymentHandlerChangePaymentMethodTest,
     testing::Values(
-        std::make_pair(
-            "testNoHandler();",
-            "PaymentRequest.show(): changePaymentMethod() returned: null"),
-        std::make_pair("testReject()",
-                       "PaymentRequest.show() rejected with: Error for test"),
-        std::make_pair(
-            "testThrow()",
-            "PaymentRequest.show() rejected with: Error: Error for test"),
-        std::make_pair(
-            "testDetails()",
+        TestCase("initTestNoHandler();",
+                 "PaymentRequest.show(): changePaymentMethod() returned: null"),
+        TestCase("initTestNoHandler();",
+                 "PaymentRequest.show(): changePaymentMethod() returned: null",
+                 MethodIdentifier::kBasicCard)));
+
+INSTANTIATE_TEST_SUITE_P(
+    ErrorCases,
+    PaymentHandlerChangePaymentMethodTest,
+    testing::Values(
+        TestCase("initTestReject()",
+                 "PaymentRequest.show() rejected with: Error for test"),
+        TestCase("initTestReject()",
+                 "PaymentRequest.show() rejected with: Error for test",
+                 MethodIdentifier::kBasicCard),
+        TestCase("initTestThrow()",
+                 "PaymentRequest.show() rejected with: Error: Error for test"),
+        TestCase("initTestThrow()",
+                 "PaymentRequest.show() rejected with: Error: Error for test",
+                 MethodIdentifier::kBasicCard)));
+
+INSTANTIATE_TEST_SUITE_P(
+    MerchantResponse,
+    PaymentHandlerChangePaymentMethodTest,
+    testing::Values(
+        TestCase(
+            "initTestDetails()",
             "PaymentRequest.show(): changePaymentMethod() returned: "
             "{\"error\":\"Error for test\","
             "\"modifiers\":[{\"data\":{\"soup\":\"potato\"},"
-            "\"supportedMethods\":\"https://a.com/\","
+            "\"supportedMethods\":\"https://a.com/pay\","
             "\"total\":{\"amount\":{\"currency\":\"EUR\",\"value\":\"0.03\"},"
             "\"label\":\"\",\"pending\":false}}],"
             "\"paymentMethodErrors\":{\"country\":\"Unsupported country\"},"
-            "\"total\":{\"currency\":\"GBP\",\"value\":\"0.02\"}}")));
+            "\"total\":{\"currency\":\"GBP\",\"value\":\"0.02\"}}"),
+        TestCase(
+            "initTestDetails()",
+            "PaymentRequest.show(): changePaymentMethod() returned: "
+            "{\"error\":\"Error for test\","
+            "\"modifiers\":[{\"data\":{\"soup\":\"potato\"},"
+            "\"supportedMethods\":\"basic-card\","
+            "\"total\":{\"amount\":{\"currency\":\"EUR\",\"value\":\"0.03\"},"
+            "\"label\":\"\",\"pending\":false}}],"
+            "\"paymentMethodErrors\":{\"country\":\"Unsupported country\"},"
+            "\"total\":{\"currency\":\"GBP\",\"value\":\"0.02\"}}",
+            MethodIdentifier::kBasicCard)));
 
 }  // namespace
 }  // namespace payments
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
index 0cf0833..bb02095 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
@@ -836,6 +836,14 @@
   event_waiter_->Wait();
 }
 
+void PaymentRequestBrowserTestBase::EnalbeSkipUIForForBasicCard() {
+  std::vector<PaymentRequest*> requests =
+      GetPaymentRequests(GetActiveWebContents());
+  ASSERT_EQ(1U, requests.size());
+  requests.front()
+      ->set_skip_ui_for_non_url_payment_method_identifiers_for_test();
+}
+
 }  // namespace payments
 
 std::ostream& operator<<(
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest_base.h b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
index 4ccf242..4a511e1 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
@@ -269,6 +269,9 @@
   // Wait for the event(s) passed to ResetEventWaiter*() to occur.
   void WaitForObservedEvent();
 
+  // Allows to skip UI into payment handler for "basic-card".
+  void EnalbeSkipUIForForBasicCard();
+
  private:
   std::unique_ptr<autofill::EventWaiter<DialogEvent>> event_waiter_;
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
diff --git a/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
index 0c98a55..85d82ccf 100644
--- a/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_show_promise_browsertest.cc
@@ -30,15 +30,6 @@
     ASSERT_EQ(contents, "instruments.set(): Payment handler installed.");
   }
 
-  // Allows to skip UI into payment handler for "basic-card".
-  void EnalbeSkipUIForForBasicCard() {
-    std::vector<PaymentRequest*> requests =
-        GetPaymentRequests(GetActiveWebContents());
-    ASSERT_EQ(1U, requests.size());
-    requests.front()
-        ->set_skip_ui_for_non_url_payment_method_identifiers_for_test();
-  }
-
   // Shows the browser payment sheet.
   void ShowBrowserPaymentSheet() {
     ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN,
diff --git a/chrome/browser/ui/views/tabs/tab_group_header.cc b/chrome/browser/ui/views/tabs/tab_group_header.cc
index 9e24788..a150b85bb 100644
--- a/chrome/browser/ui/views/tabs/tab_group_header.cc
+++ b/chrome/browser/ui/views/tabs/tab_group_header.cc
@@ -8,7 +8,6 @@
 #include <utility>
 
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/tabs/tab_group_data.h"
 #include "chrome/browser/ui/tabs/tab_style.h"
@@ -18,8 +17,6 @@
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/views/border.h"
-#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/button/image_button_factory.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/flex_layout.h"
 #include "ui/views/layout/flex_layout_types.h"
@@ -47,10 +44,6 @@
                          views::FlexSpecification::ForSizeRule(
                              views::MinimumFlexSizeRule::kScaleToZero,
                              views::MaximumFlexSizeRule::kUnbounded));
-
-  auto group_menu_button = views::CreateVectorImageButton(/*listener*/ nullptr);
-  views::SetImageFromVectorIcon(group_menu_button.get(), kBrowserToolsIcon);
-  AddChildView(std::move(group_menu_button));
 }
 
 void TabGroupHeader::OnPaint(gfx::Canvas* canvas) {
diff --git a/chrome/browser/vr/webxr_vr_input_browser_test.cc b/chrome/browser/vr/webxr_vr_input_browser_test.cc
index c7f45eb..75e9215 100644
--- a/chrome/browser/vr/webxr_vr_input_browser_test.cc
+++ b/chrome/browser/vr/webxr_vr_input_browser_test.cc
@@ -168,6 +168,13 @@
     UpdateControllerAndWait(controller_index, controller_data);
   }
 
+  void UpdateControllerRole(unsigned int controller_index,
+                            device::ControllerRole role) {
+    auto controller_data = GetCurrentControllerData(controller_index);
+    controller_data.role = role;
+    UpdateControllerAndWait(controller_index, controller_data);
+  }
+
  private:
   vr::EVRButtonId GetAxisId(unsigned int offset) {
     return static_cast<vr::EVRButtonId>(vr::k_EButton_Axis0 + offset);
@@ -200,6 +207,42 @@
   std::move(callback).Run();
 }
 
+// Ensure that when an input source's handedness changes, an input source change
+// event is fired and a new input source is created.
+IN_PROC_BROWSER_TEST_F(WebXrVrBrowserTestStandard, TestInputHandednessChange) {
+  WebXrControllerInputMock my_mock;
+  unsigned int controller_index = my_mock.CreateAndConnectMinimalGamepad();
+
+  LoadUrlAndAwaitInitialization(
+      GetFileUrlForHtmlTestFile("test_webxr_input_same_object"));
+  EnterSessionWithUserGestureOrFail();
+
+  // We should only have seen the first change indicating we have input sources.
+  PollJavaScriptBooleanOrFail("inputChangeEvents === 1", kPollTimeoutShort);
+
+  // We only expect one input source, cache it.
+  RunJavaScriptOrFail("validateInputSourceLength(1)");
+  RunJavaScriptOrFail("updateCachedInputSource(0)");
+
+  // Change the handedness from right to left and verify that we get a change
+  // event.  Then cache the new input source.
+  my_mock.UpdateControllerRole(controller_index,
+                               device::ControllerRole::kControllerRoleLeft);
+  PollJavaScriptBooleanOrFail("inputChangeEvents === 2", kPollTimeoutShort);
+  RunJavaScriptOrFail("validateCachedSourcePresence(false)");
+  RunJavaScriptOrFail("validateInputSourceLength(1)");
+  RunJavaScriptOrFail("updateCachedInputSource(0)");
+
+  // Switch back to the right hand and confirm that we get the change.
+  my_mock.UpdateControllerRole(controller_index,
+                               device::ControllerRole::kControllerRoleRight);
+  PollJavaScriptBooleanOrFail("inputChangeEvents === 3", kPollTimeoutShort);
+  RunJavaScriptOrFail("validateCachedSourcePresence(false)");
+  RunJavaScriptOrFail("validateInputSourceLength(1)");
+  RunJavaScriptOrFail("done()");
+  EndTest();
+}
+
 // Test that inputsourceschange events contain only the expected added/removed
 // input sources when a mock controller is connected/disconnected.
 // Also validates that if an input source changes substantially we get an event
diff --git a/chrome/chrome_proxy/chrome_proxy_main_win.cc b/chrome/chrome_proxy/chrome_proxy_main_win.cc
index 4ae74b0..8118952 100644
--- a/chrome/chrome_proxy/chrome_proxy_main_win.cc
+++ b/chrome/chrome_proxy/chrome_proxy_main_win.cc
@@ -41,7 +41,8 @@
   base::CommandLine::Init(0, nullptr);
 
   logging::LoggingSettings logging_settings;
-  logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  logging_settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(logging_settings);
 
   base::FilePath chrome_dir;
diff --git a/chrome/chrome_watcher/chrome_watcher_main.cc b/chrome/chrome_watcher/chrome_watcher_main.cc
index 81b3493c..3aeaf58 100644
--- a/chrome/chrome_watcher/chrome_watcher_main.cc
+++ b/chrome/chrome_watcher/chrome_watcher_main.cc
@@ -113,7 +113,7 @@
     // Let --enable-logging=stderr force only stderr, particularly useful for
     // non-debug builds where otherwise you can't get logs to stderr at all.
     if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr")
-      log_mode = LOG_TO_SYSTEM_DEBUG_LOG;
+      log_mode = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR;
     else
       log_mode = kDefaultLoggingMode;
   } else {
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
index 6b682efc..173b5041 100644
--- a/chrome/common/logging_chrome.cc
+++ b/chrome/common/logging_chrome.cc
@@ -146,7 +146,7 @@
     // Let --enable-logging=stderr force only stderr, particularly useful for
     // non-debug builds where otherwise you can't get logs to stderr at all.
     if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr")
-      log_mode = LOG_TO_SYSTEM_DEBUG_LOG;
+      log_mode = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR;
     else
       log_mode = kDefaultLoggingMode;
   } else {
diff --git a/chrome/elevation_service/elevation_service.cc b/chrome/elevation_service/elevation_service.cc
index 0d3d8ec..64402b0 100644
--- a/chrome/elevation_service/elevation_service.cc
+++ b/chrome/elevation_service/elevation_service.cc
@@ -21,7 +21,8 @@
   base::CommandLine::Init(0, nullptr);
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   // The exit manager is in charge of calling the dtors of singletons.
diff --git a/chrome/installer/gcapi/gcapi_dll.cc b/chrome/installer/gcapi/gcapi_dll.cc
index 66e9bc1c..7b7b68d 100644
--- a/chrome/installer/gcapi/gcapi_dll.cc
+++ b/chrome/installer/gcapi/gcapi_dll.cc
@@ -23,7 +23,8 @@
     g_exit_manager = new base::AtExitManager();
     base::CommandLine::Init(0, NULL);
     logging::LoggingSettings settings;
-    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+    settings.logging_dest =
+        logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
     logging::InitLogging(settings);
   } else if (reason == DLL_PROCESS_DETACH) {
     base::CommandLine::Reset();
diff --git a/chrome/installer/mac/BUILD.gn b/chrome/installer/mac/BUILD.gn
index 6902785..af5abce 100644
--- a/chrome/installer/mac/BUILD.gn
+++ b/chrome/installer/mac/BUILD.gn
@@ -12,37 +12,11 @@
 group("mac") {
   public_deps = [
     ":copies",
-    ":make_signers",
   ]
 }
 
 _packaging_dir = "$root_out_dir/$chrome_product_full_name Packaging"
 
-action("make_signers") {
-  visibility = [ ":mac" ]
-
-  script = "//build/gn_run_binary.py"
-  shell_script = "//chrome/installer/mac/make_signers.sh"
-
-  inputs = [
-    script,
-    shell_script,
-    "app_resource_rules.plist.in",
-    "//chrome/VERSION",
-  ]
-
-  outputs = [
-    "$_packaging_dir/app_resource_rules.plist",
-  ]
-
-  args = [
-    rebase_path(shell_script, root_build_dir),
-    rebase_path(_packaging_dir, root_build_dir),
-    chrome_product_full_name,
-    chrome_version_full,
-  ]
-}
-
 process_version_rc_template("sign_config") {
   visibility = [ ":copy_signing" ]
 
@@ -108,6 +82,7 @@
     "$root_out_dir/liblzma_decompress.dylib",
     "$root_out_dir/xz",
     "$root_out_dir/xzdec",
+    "app_resource_rules.plist",
     "dirdiffer.sh",
     "dirpatcher.sh",
     "dmgdiffer.sh",
diff --git a/chrome/installer/mac/app_resource_rules.plist b/chrome/installer/mac/app_resource_rules.plist
new file mode 100644
index 0000000..88ad5ec1
--- /dev/null
+++ b/chrome/installer/mac/app_resource_rules.plist
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>rules</key>
+	<dict>
+		<key>.*</key>
+		<true/>
+		<key>^Versions/</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>10</real>
+		</dict>
+		<key>^Resources/.+\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>30</real>
+		</dict>
+		<key>/\.DS_Store$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>50</real>
+		</dict>
+	</dict>
+	<key>rules2</key>
+	<dict>
+		<key>.*</key>
+		<true/>
+		<key>^Versions/</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>10</real>
+		</dict>
+		<key>^Resources/.+\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>30</real>
+		</dict>
+		<key>/\.DS_Store$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>50</real>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/chrome/installer/mac/app_resource_rules.plist.in b/chrome/installer/mac/app_resource_rules.plist.in
deleted file mode 100644
index cb3fc93..0000000
--- a/chrome/installer/mac/app_resource_rules.plist.in
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>rules</key>
-	<dict>
-		<key>.*</key>
-		<true/>
-		<key>^Versions/</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>10</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/</key>
-		<dict>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-		<key>^Resources/.+\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>30</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/.+/Resources/.+\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>30</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/.+/Resources Disabled/</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>40</real>
-		</dict>
-		<key>/\.DS_Store$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>50</real>
-		</dict>
-	</dict>
-	<key>rules2</key>
-	<dict>
-		<key>.*</key>
-		<true/>
-		<key>^Versions/</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>10</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/</key>
-		<dict>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-		<key>^Resources/.+\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>30</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/.+/Resources/.+\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>30</real>
-		</dict>
-		<key>^Versions/@VERSION_REGEX@/.+/Resources Disabled/</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>40</real>
-		</dict>
-		<key>/\.DS_Store$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>50</real>
-		</dict>
-	</dict>
-</dict>
-</plist>
diff --git a/chrome/installer/mac/make_signers.sh b/chrome/installer/mac/make_signers.sh
deleted file mode 100755
index f6272fb7..0000000
--- a/chrome/installer/mac/make_signers.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash -p
-
-# Copyright (c) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This script creates sign_app.sh and sign_versioned_dir.sh, the scripts that
-# will be used to sign the application bundle and inner bundles. It also
-# creates auxiliary files that these scripts need to do their jobs, such as
-# the custom resource rules used to sign the outermost application bundle.
-# The build places these in the "${mac_product_name} Packaging" directory next
-# to the .app bundle. The packaging system is expected to run these scripts to
-# sign everything.
-
-set -eu
-
-# Environment sanitization. Set a known-safe PATH. Clear environment variables
-# that might impact the interpreter's operation. The |bash -p| invocation
-# on the #! line takes the bite out of BASH_ENV, ENV, and SHELLOPTS (among
-# other features), but clearing them here ensures that they won't impact any
-# shell scripts used as utility programs. SHELLOPTS is read-only and can't be
-# unset, only unexported.
-export PATH="/usr/bin:/bin:/usr/sbin:/sbin"
-unset BASH_ENV CDPATH ENV GLOBIGNORE IFS POSIXLY_CORRECT
-export -n SHELLOPTS
-
-ME="$(basename "${0}")"
-readonly ME
-
-if [[ ${#} -ne 3 ]]; then
-  echo "usage: ${ME} packaging_dir mac_product_name version" >& 2
-  exit 1
-fi
-
-packaging_dir="${1}"
-mac_product_name="${2}"
-version="${3}"
-
-script_dir="$(dirname "${0}")"
-in_files=(
-  "${script_dir}/app_resource_rules.plist.in"
-)
-
-# Double-backslash each dot: one backslash belongs in the regular expression,
-# and the other backslash tells sed not to treat the first backslash
-# specially.
-version_regex="$(echo "${version}" | sed -e 's/\./\\\\./g')"
-
-mkdir -p "${packaging_dir}"
-
-for in_file in "${in_files[@]}"; do
-  out_file="${packaging_dir}/$(basename "${in_file:0:${#in_file} - 3}")"
-  sed -e "s/@MAC_PRODUCT_NAME@/${mac_product_name}/g" \
-      -e "s/@VERSION@/${version}/g" \
-      -e "s/@VERSION_REGEX@/${version_regex}/g" \
-      < "${in_file}" \
-      > "${out_file}"
-
-  if [[ "${out_file: -3}" = ".sh" ]]; then
-    chmod +x "${out_file}"
-  fi
-done
diff --git a/chrome/installer/mac/signing/model.py b/chrome/installer/mac/signing/model.py
index ab78625..eed4b6bf 100644
--- a/chrome/installer/mac/signing/model.py
+++ b/chrome/installer/mac/signing/model.py
@@ -75,6 +75,14 @@
             A string for designated requirements of the product, which can be
             passed to `codesign --requirements`.
         """
+        # If the signing identity indicates ad-hoc (i.e. no real signing
+        # identity), do not enforce any requirements. Ad hoc signing will append
+        # a hash to the identifier, which would violate the
+        # identifier_requirement and most other requirements that would be
+        # specified.
+        if config.identity == '-':
+            return ''
+
         reqs = []
         if self.identifier_requirement:
             reqs.append('designated => identifier "{identifier}"'.format(
diff --git a/chrome/installer/mac/signing/model_test.py b/chrome/installer/mac/signing/model_test.py
index 5c0c8ee7..6aa9470c 100644
--- a/chrome/installer/mac/signing/model_test.py
+++ b/chrome/installer/mac/signing/model_test.py
@@ -20,6 +20,15 @@
             'path/binary', 'binary', identifier_requirement=False)
         self.assertEqual('', product.requirements_string(TestConfig()))
 
+    def test_requirements_string_ad_hoc(self):
+        config = TestConfig(identity='-')
+        product = model.CodeSignedProduct('path/binary', 'binary')
+        self.assertEqual('', product.requirements_string(config))
+
+        product = model.CodeSignedProduct(
+            'path/binary', 'binary', requirements='req')
+        self.assertEqual('', product.requirements_string(config))
+
     def test_requirements_product_requirement(self):
         product = model.CodeSignedProduct(
             'path/binary', 'binary', requirements='and another requirement')
@@ -41,6 +50,9 @@
             'designated => identifier "binary" and another requirement and config requirement',
             product.requirements_string(RequirementConfig()))
 
+        self.assertEqual(
+            '', product.requirements_string(RequirementConfig(identity='-')))
+
 
 class TestVerifyOptions(unittest.TestCase):
 
diff --git a/chrome/installer/mac/signing/signing.py b/chrome/installer/mac/signing/signing.py
index e8b8cf01..b56853e5 100644
--- a/chrome/installer/mac/signing/signing.py
+++ b/chrome/installer/mac/signing/signing.py
@@ -42,8 +42,7 @@
                 options=CodeSignOptions.RESTRICT,
                 requirements=config.codesign_requirements_outer_app,
                 identifier_requirement=False,
-                resource_rules=None if config.use_new_mac_bundle_structure else
-                'app_resource_rules.plist',
+                resource_rules='app_resource_rules.plist',
                 entitlements='app-entitlements.plist',
                 verify_options=VerifyOptions.DEEP + VerifyOptions.NO_STRICT),
         'framework':
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn
index 2bcc4d5..cc5a38a2 100644
--- a/chrome/renderer/BUILD.gn
+++ b/chrome/renderer/BUILD.gn
@@ -100,6 +100,14 @@
     "sandbox_status_extension_android.h",
     "security_interstitials/security_interstitial_page_controller.cc",
     "security_interstitials/security_interstitial_page_controller.h",
+    "subresource_redirect/subresource_redirect_params.cc",
+    "subresource_redirect/subresource_redirect_params.h",
+    "subresource_redirect/subresource_redirect_switches.cc",
+    "subresource_redirect/subresource_redirect_switches.h",
+    "subresource_redirect/subresource_redirect_url_loader_throttle.cc",
+    "subresource_redirect/subresource_redirect_url_loader_throttle.h",
+    "subresource_redirect/subresource_redirect_util.cc",
+    "subresource_redirect/subresource_redirect_util.h",
     "supervised_user/supervised_user_error_page_controller.cc",
     "supervised_user/supervised_user_error_page_controller.h",
     "tts_dispatcher.cc",
diff --git a/chrome/renderer/subresource_redirect/DEPS b/chrome/renderer/subresource_redirect/DEPS
new file mode 100644
index 0000000..a7c8042
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+components/base32",
+]
diff --git a/chrome/renderer/subresource_redirect/OWNERS b/chrome/renderer/subresource_redirect/OWNERS
new file mode 100644
index 0000000..b3958dc
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/OWNERS
@@ -0,0 +1,4 @@
+tbansal@chromium.org
+robertogden@chromium.org
+
+# COMPONENT: Internals>Network>DataProxy
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_params.cc b/chrome/renderer/subresource_redirect/subresource_redirect_params.cc
new file mode 100644
index 0000000..f4e9602
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_params.cc
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_params.h"
+
+#include "base/command_line.h"
+#include "chrome/renderer/subresource_redirect/subresource_redirect_switches.h"
+
+namespace subresource_redirect {
+
+bool ShouldForceEnableSubresourceRedirect() {
+  return base::CommandLine::ForCurrentProcess()->HasSwitch(
+      subresource_redirect::kEnableSubresourceRedirect);
+}
+
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_params.h b/chrome/renderer/subresource_redirect/subresource_redirect_params.h
new file mode 100644
index 0000000..c4012d7c
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_params.h
@@ -0,0 +1,16 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_PARAMS_H_
+#define CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_PARAMS_H_
+
+namespace subresource_redirect {
+
+// Returns true if Subresource Redirect is forced to be enabled from the
+// command line.
+bool ShouldForceEnableSubresourceRedirect();
+
+}  // namespace subresource_redirect
+
+#endif  // CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_PARAMS_H_
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_switches.cc b/chrome/renderer/subresource_redirect/subresource_redirect_switches.cc
new file mode 100644
index 0000000..be27e68
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_switches.cc
@@ -0,0 +1,13 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_switches.h"
+
+namespace subresource_redirect {
+
+// Feature flag to enable HTTPS subresource internal redirects to compressed
+// versions.
+const char kEnableSubresourceRedirect[] = "enable-subresource-redirect";
+
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_switches.h b/chrome/renderer/subresource_redirect/subresource_redirect_switches.h
new file mode 100644
index 0000000..faf45c8
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_switches.h
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_SWITCHES_H_
+#define CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_SWITCHES_H_
+
+namespace subresource_redirect {
+
+// All switches in alphabetical order. The switches should be documented
+// alongside the definition of their values in the .cc file.
+
+extern const char kEnableSubresourceRedirect[];
+
+}  // namespace subresource_redirect
+
+#endif  // CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_SWITCHES_H_
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.cc b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.cc
new file mode 100644
index 0000000..facef78
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.cc
@@ -0,0 +1,33 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h"
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_util.h"
+#include "content/public/common/resource_type.h"
+#include "url/gurl.h"
+
+namespace subresource_redirect {
+
+SubresourceRedirectURLLoaderThrottle::SubresourceRedirectURLLoaderThrottle() =
+    default;
+SubresourceRedirectURLLoaderThrottle::~SubresourceRedirectURLLoaderThrottle() =
+    default;
+
+void SubresourceRedirectURLLoaderThrottle::WillStartRequest(
+    network::ResourceRequest* request,
+    bool* defer) {
+  if (request->resource_type != static_cast<int>(content::ResourceType::kImage))
+    return;
+
+  if (!request->url.SchemeIs(url::kHttpsScheme))
+    return;
+
+  request->url = GetSubresourceURLForURL(request->url);
+  *defer = false;
+}
+
+void SubresourceRedirectURLLoaderThrottle::DetachFromCurrentSequence() {}
+
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h
new file mode 100644
index 0000000..b9b12433
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h
@@ -0,0 +1,27 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_URL_LOADER_THROTTLE_H_
+#define CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_URL_LOADER_THROTTLE_H_
+
+#include "content/public/common/url_loader_throttle.h"
+
+namespace subresource_redirect {
+
+// This class handles internal redirects for subresouces on HTTPS sites to
+// compressed versions of subresources.
+class SubresourceRedirectURLLoaderThrottle : public content::URLLoaderThrottle {
+ public:
+  SubresourceRedirectURLLoaderThrottle();
+  ~SubresourceRedirectURLLoaderThrottle() override;
+
+  // content::URLLoaderThrottle:
+  void WillStartRequest(network::ResourceRequest* request,
+                        bool* defer) override;
+  void DetachFromCurrentSequence() override;
+};
+
+}  // namespace subresource_redirect
+
+#endif  // CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_URL_LOADER_THROTTLE_H_
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle_unittest.cc b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle_unittest.cc
new file mode 100644
index 0000000..810ea8d
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle_unittest.cc
@@ -0,0 +1,71 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h"
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace subresource_redirect {
+
+namespace {
+
+TEST(SubresourceRedirectURLLoaderThrottleTest, TestGetSubresourceURL) {
+  struct TestCase {
+    GURL original_url;
+    int resource_type;
+    GURL redirected_subresource_url;
+  };
+
+  const TestCase kTestCases[]{
+      {
+          GURL("https://www.test.com/test.jpg"),
+          static_cast<int>(content::ResourceType::kImage),
+          GetSubresourceURLForURL(GURL("https://www.test.com/test.jpg")),
+      },
+      {
+          GURL("https://www.test.com/test.jpg#test"),
+          static_cast<int>(content::ResourceType::kImage),
+          GetSubresourceURLForURL(GURL("https://www.test.com/test.jpg#test")),
+      },
+      {
+          GURL("https://www.test.com/test.css"),
+          static_cast<int>(content::ResourceType::kStylesheet),
+          GURL("https://www.test.com/test.css"),
+      },
+      {
+          GURL("http://www.insecure.com/test.jpg"),
+          static_cast<int>(content::ResourceType::kImage),
+          GURL("http://www.insecure.com/test.jpg"),
+      },
+  };
+
+  for (const TestCase& test_case : kTestCases) {
+    network::ResourceRequest request;
+    request.url = test_case.original_url;
+    request.resource_type = test_case.resource_type;
+    bool defer = false;
+
+    SubresourceRedirectURLLoaderThrottle throttle;
+    throttle.WillStartRequest(&request, &defer);
+
+    EXPECT_FALSE(defer);
+    EXPECT_EQ(request.url, test_case.redirected_subresource_url);
+  }
+}
+
+TEST(SubresourceRedirectURLLoaderThrottleTest, DeferOverridenToFalse) {
+  SubresourceRedirectURLLoaderThrottle throttle;
+
+  network::ResourceRequest request;
+  request.url = GURL("https://www.test.com/test.jpg");
+  request.resource_type = static_cast<int>(content::ResourceType::kImage);
+  bool defer = true;
+
+  throttle.WillStartRequest(&request, &defer);
+  EXPECT_FALSE(defer);
+}
+
+}  // namespace
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_util.cc b/chrome/renderer/subresource_redirect/subresource_redirect_util.cc
new file mode 100644
index 0000000..92316250
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_util.cc
@@ -0,0 +1,51 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_util.h"
+
+#include <string>
+
+#include "base/strings/safe_sprintf.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "components/base32/base32.h"
+#include "crypto/sha2.h"
+#include "net/base/escape.h"
+#include "net/base/url_util.h"
+#include "url/gurl.h"
+
+namespace subresource_redirect {
+
+GURL GetSubresourceURLForURL(const GURL& original_url) {
+  DCHECK(original_url.is_valid());
+
+  std::string fragment;
+  if (original_url.has_ref()) {
+    fragment = "#" + original_url.ref();
+  }
+
+  std::string origin_hash = base::ToLowerASCII(base32::Base32Encode(
+      crypto::SHA256HashString(
+          original_url.scheme() + "://" + original_url.host() + ":" +
+          base::NumberToString(original_url.EffectiveIntPort())),
+      base32::Base32EncodePolicy::OMIT_PADDING));
+  GURL subresource_host("https://litepages.googlezip.net/");
+  // TODO(harrisonsean): Add experiment (x=) param.
+  GURL compressed_url(
+      subresource_host.scheme() + "://" + origin_hash + "." +
+      subresource_host.host() +
+      (subresource_host.has_port() ? (":" + subresource_host.port()) : "") +
+      "/sr?u=" +
+      // Strip out the fragment so that it is not sent to the server.
+      net::EscapeQueryParamValue(original_url.GetAsReferrer().spec(),
+                                 true /* use_plus */) +
+      "&t=image" + fragment);
+
+  DCHECK(compressed_url.is_valid());
+  DCHECK_EQ(subresource_host.scheme(), compressed_url.scheme());
+  return compressed_url;
+}
+
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_util.h b/chrome/renderer/subresource_redirect/subresource_redirect_util.h
new file mode 100644
index 0000000..20ce031d
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_util.h
@@ -0,0 +1,18 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_UTIL_H_
+#define CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_UTIL_H_
+
+#include "url/gurl.h"
+
+namespace subresource_redirect {
+
+// Gets the new URL for the compressed version of the image resource to enable
+// internal redirects.
+GURL GetSubresourceURLForURL(const GURL& original_url);
+
+}  // namespace subresource_redirect
+
+#endif  // CHROME_RENDERER_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_UTIL_H_
\ No newline at end of file
diff --git a/chrome/renderer/subresource_redirect/subresource_redirect_util_unittest.cc b/chrome/renderer/subresource_redirect/subresource_redirect_util_unittest.cc
new file mode 100644
index 0000000..e0df1d6
--- /dev/null
+++ b/chrome/renderer/subresource_redirect/subresource_redirect_util_unittest.cc
@@ -0,0 +1,74 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/subresource_redirect/subresource_redirect_util.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace subresource_redirect {
+
+TEST(SubresourceRedirectURL, ProperlyChangesURL) {
+  EXPECT_EQ(GetSubresourceURLForURL(GURL("https://www.test.com/test.jpg")),
+            GURL("https://"
+                 "jy6r5d5zc3n6juvq35nveinxzyuk4n4wndppyli5x5ycmrza36fa."
+                 "litepages.googlezip.net/"
+                 "sr?u=https%3A%2F%2Fwww.test.com%2Ftest.jpg&t=image"));
+}
+
+TEST(SubresourceRedirectURL, ProperlyHandlesFragment) {
+  EXPECT_EQ(GetSubresourceURLForURL(GURL("https://www.test.com/test.jpg#test")),
+            GURL("https://"
+                 "jy6r5d5zc3n6juvq35nveinxzyuk4n4wndppyli5x5ycmrza36fa."
+                 "litepages.googlezip.net/"
+                 "sr?u=https%3A%2F%2Fwww.test.com%2Ftest.jpg&t=image#test"));
+}
+
+TEST(SubresourceRedirectURL, ProperlyHandlesSetPort) {
+  EXPECT_EQ(GetSubresourceURLForURL(GURL("https://www.test.com:4444/test.jpg")),
+            GURL("https://flm6clfkawcjb2bw5cnrrcdf4fkoliileuljcc23lahdet75ouqq."
+                 "litepages.googlezip.net/sr?u=https%3A%2F%2Fwww.test."
+                 "com%3A4444%2Ftest.jpg&t=image"));
+}
+
+TEST(SubresourceRedirectURL, ProperlyHandlesQueryParams) {
+  EXPECT_EQ(GetSubresourceURLForURL(
+                GURL("https://www.test.com/test.jpg?color=yellow")),
+            GURL("https://"
+                 "jy6r5d5zc3n6juvq35nveinxzyuk4n4wndppyli5x5ycmrza36fa."
+                 "litepages.googlezip.net/"
+                 "sr?u=https%3A%2F%2Fwww.test.com%2Ftest.jpg%3Fcolor%3Dyellow&"
+                 "t=image"));
+}
+
+TEST(SubresourceRedirectURL, ProperlyHandlesMultipleQueryParams) {
+  EXPECT_EQ(GetSubresourceURLForURL(
+                GURL("https://www.test.com/test.jpg?color=yellow&name=test")),
+            GURL("https://"
+                 "jy6r5d5zc3n6juvq35nveinxzyuk4n4wndppyli5x5ycmrza36fa."
+                 "litepages.googlezip.net/"
+                 "sr?u=https%3A%2F%2Fwww.test.com%2Ftest.jpg%3Fcolor%3Dyellow%"
+                 "26name%3Dtest&t=image"));
+}
+
+TEST(SubresourceRedirectURL, ProperlyHandlesQueryParamsWithFragments) {
+  EXPECT_EQ(GetSubresourceURLForURL(
+                GURL("https://www.test.com/test.jpg?color=yellow#test")),
+            GURL("https://"
+                 "jy6r5d5zc3n6juvq35nveinxzyuk4n4wndppyli5x5ycmrza36fa."
+                 "litepages.googlezip.net/"
+                 "sr?u=https%3A%2F%2Fwww.test.com%2Ftest.jpg%3Fcolor%3Dyellow&"
+                 "t=image#test"));
+}
+
+// Currently redirects are not supported for HTTP subresources, but there is
+// potential to add them in the future.
+TEST(SubresourceRedirectURL, ProperlyChangesHTTPURL) {
+  EXPECT_EQ(
+      GetSubresourceURLForURL(GURL("http://www.test.com/test.jpg")),
+      GURL("https://bc6pgqmtr6nlicooao2zh77svcptncpwfolwlgbrop6gqnr6ck3q."
+           "litepages.googlezip.net/sr?u=http%3A%2F%2Fwww.test.com%2Ftest."
+           "jpg&t=image"));
+}
+
+}  // namespace subresource_redirect
\ No newline at end of file
diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/renderer/url_loader_throttle_provider_impl.cc
index a549b152..692d318 100644
--- a/chrome/renderer/url_loader_throttle_provider_impl.cc
+++ b/chrome/renderer/url_loader_throttle_provider_impl.cc
@@ -17,6 +17,8 @@
 #include "chrome/renderer/chrome_render_thread_observer.h"
 #include "chrome/renderer/prerender/prerender_dispatcher.h"
 #include "chrome/renderer/prerender/prerender_helper.h"
+#include "chrome/renderer/subresource_redirect/subresource_redirect_params.h"
+#include "chrome/renderer/subresource_redirect/subresource_redirect_url_loader_throttle.h"
 #include "components/data_reduction_proxy/content/common/data_reduction_proxy_url_loader_throttle.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_throttle_manager.h"
@@ -274,6 +276,12 @@
           ->chromeos_listener()));
 #endif  // defined(OS_CHROMEOS)
 
+  if (subresource_redirect::ShouldForceEnableSubresourceRedirect()) {
+    throttles.push_back(
+        std::make_unique<
+            subresource_redirect::SubresourceRedirectURLLoaderThrottle>());
+  }
+
   return throttles;
 }
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 2fd5b33..986fc8ef7 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3055,6 +3055,8 @@
     "../renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc",
     "../renderer/plugins/plugin_uma_unittest.cc",
     "../renderer/prerender/prerender_dispatcher_unittest.cc",
+    "../renderer/subresource_redirect/subresource_redirect_url_loader_throttle_unittest.cc",
+    "../renderer/subresource_redirect/subresource_redirect_util_unittest.cc",
     "../renderer/v8_unwinder_unittest.cc",
     "../test/base/chrome_render_view_test.cc",
     "../test/base/chrome_render_view_test.h",
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc
index ed04f8276b..e7fef6a9 100644
--- a/chrome/test/chromedriver/logging.cc
+++ b/chrome/test/chromedriver/logging.cc
@@ -297,7 +297,8 @@
   logging::SetLogMessageHandler(&HandleLogMessage);
 
   logging::LoggingSettings logging_settings;
-  logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  logging_settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   bool res = logging::InitLogging(logging_settings);
   if (cmd_line->HasSwitch("log-path") && res) {
     VLOG(0) << "Starting ChromeDriver " << kChromeDriverVersion;
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/events.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/events.js
index ce937131..ab8ff57 100644
--- a/chrome/test/data/extensions/api_test/automation/tests/tabs/events.js
+++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/events.js
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-var allTests = [
+let allTests = [
   function testEventListenerTarget() {
-    var cancelButton = rootNode.firstChild.children[2];
+    let cancelButton = rootNode.firstChild.children[2];
     assertEq('Cancel', cancelButton.name);
     cancelButton.addEventListener(EventType.FOCUS,
                                   function onFocusTarget(event) {
@@ -16,26 +16,26 @@
     cancelButton.focus();
   },
   function testEventListenerBubble() {
-    var cancelButton = rootNode.firstChild.children[2];
-    assertEq('Cancel', cancelButton.name);
-    var cancelButtonGotEvent = false;
-    cancelButton.addEventListener(EventType.FOCUS,
+    let okButton = rootNode.firstChild.children[0];
+    assertEq('Ok', okButton.name);
+    let okButtonGotEvent = false;
+    okButton.addEventListener(EventType.FOCUS,
                                   function onFocusBubble(event) {
-      cancelButtonGotEvent = true;
-      cancelButton.removeEventListener(EventType.FOCUS, onFocusBubble);
+      okButtonGotEvent = true;
+      okButton.removeEventListener(EventType.FOCUS, onFocusBubble);
     });
     rootNode.addEventListener(EventType.FOCUS,
                                function onFocusBubbleRoot(event) {
       assertEq('focus', event.type);
-      assertEq(cancelButton, event.target);
-      assertTrue(cancelButtonGotEvent);
+      assertEq(okButton, event.target);
+      assertTrue(okButtonGotEvent);
       rootNode.removeEventListener(EventType.FOCUS, onFocusBubbleRoot);
       chrome.test.succeed();
     });
-    cancelButton.focus();
+    okButton.focus();
   },
   function testStopPropagation() {
-    var cancelButton = rootNode.firstChild.children[2];
+    let cancelButton = rootNode.firstChild.children[2];
     assertEq('Cancel', cancelButton.name);
     function onFocusStopPropRoot(event) {
       rootNode.removeEventListener(EventType.FOCUS, onFocusStopPropRoot);
@@ -54,31 +54,31 @@
     cancelButton.focus();
   },
   function testEventListenerCapture() {
-    var cancelButton = rootNode.firstChild.children[2];
-    assertEq('Cancel', cancelButton.name);
-    var cancelButtonGotEvent = false;
+    let okButton = rootNode.firstChild.children[0];
+    assertEq('Ok', okButton.name);
+    let okButtonGotEvent = false;
     function onFocusCapture(event) {
-      cancelButtonGotEvent = true;
-      cancelButton.removeEventListener(EventType.FOCUS, onFocusCapture);
+      okButtonGotEvent = true;
+      okButton.removeEventListener(EventType.FOCUS, onFocusCapture);
       chrome.test.fail("Focus event was not captured by root");
     };
-    cancelButton.addEventListener(EventType.FOCUS, onFocusCapture);
+    okButton.addEventListener(EventType.FOCUS, onFocusCapture);
     rootNode.addEventListener(EventType.FOCUS,
                                function onFocusCaptureRoot(event) {
       assertEq('focus', event.type);
-      assertEq(cancelButton, event.target);
-      assertFalse(cancelButtonGotEvent);
+      assertEq(okButton, event.target);
+      assertFalse(okButtonGotEvent);
       event.stopPropagation();
       rootNode.removeEventListener(EventType.FOCUS, onFocusCaptureRoot);
       rootNode.removeEventListener(EventType.FOCUS, onFocusCapture);
       window.setTimeout(chrome.test.succeed.bind(this), 0);
     }, true);
-    cancelButton.focus();
+    okButton.focus();
   },
   function testHitTestWithReply() {
-    var cancelButton = rootNode.firstChild.children[2];
+    let cancelButton = rootNode.firstChild.children[2];
     assertEq('Cancel', cancelButton.name);
-    var loc = cancelButton.unclippedLocation;
+    let loc = cancelButton.unclippedLocation;
     rootNode.hitTestWithReply(loc.left, loc.top, function(result) {
       assertEq(result, cancelButton);
       chrome.test.succeed();
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
index 3dcdd25..4220804 100644
--- a/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
+++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
@@ -18,7 +18,7 @@
     assertEq('Automation Tests', title);
 
     var state = RemoveUntestedStates(rootNode.state);
-    assertEq({focusable: true}, state);
+    assertEq({focusable: true, focused: true}, state);
     assertEq(undefined, rootNode.restriction);
 
     var children = rootNode.children;
diff --git a/chrome/test/data/extensions/content_verifier/different_sized_files.crx b/chrome/test/data/extensions/content_verifier/different_sized_files.crx
new file mode 100644
index 0000000..5382980e
--- /dev/null
+++ b/chrome/test/data/extensions/content_verifier/different_sized_files.crx
Binary files differ
diff --git a/chrome/test/data/extensions/content_verifier/different_sized_files.crx.INFO b/chrome/test/data/extensions/content_verifier/different_sized_files.crx.INFO
new file mode 100644
index 0000000..eff32db
--- /dev/null
+++ b/chrome/test/data/extensions/content_verifier/different_sized_files.crx.INFO
@@ -0,0 +1,7 @@
+Fetched from Chrome Web Store.
+CRX ID = dlefkgcbefcjoiheimkdkkhdcejpbgda
+
+This extension has a file that has interesting size w.r.t
+FileURLLoaderFactory's mime-sniffing code. Specifically,
+jquery-3.2.0.min.js file is larger than 1024 bytes. This will trigger
+FileURLLoaderObserver::OnSeekComplete that we care about in our test.
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js
index 2817423..24b74506 100644
--- a/chrome/test/data/webui/settings/people_page_test.js
+++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -44,6 +44,7 @@
 
       PolymerTest.clearBody();
       peoplePage = document.createElement('settings-people-page');
+      peoplePage.pageVisibility = settings.pageVisibility;
       document.body.appendChild(peoplePage);
 
       return Promise
@@ -110,6 +111,7 @@
 
         PolymerTest.clearBody();
         peoplePage = document.createElement('settings-people-page');
+        peoplePage.pageVisibility = settings.pageVisibility;
         document.body.appendChild(peoplePage);
       });
 
@@ -405,6 +407,7 @@
 
         PolymerTest.clearBody();
         peoplePage = document.createElement('settings-people-page');
+        peoplePage.pageVisibility = settings.pageVisibility;
         document.body.appendChild(peoplePage);
 
         Polymer.dom.flush();
@@ -555,6 +558,7 @@
 
       PolymerTest.clearBody();
       peoplePage = document.createElement('settings-people-page');
+      peoplePage.pageVisibility = settings.pageVisibility;
       document.body.appendChild(peoplePage);
 
       Polymer.dom.flush();
diff --git a/chromecast/app/cast_main_delegate.cc b/chromecast/app/cast_main_delegate.cc
index 979a80b1..a36392b0 100644
--- a/chromecast/app/cast_main_delegate.cc
+++ b/chromecast/app/cast_main_delegate.cc
@@ -71,7 +71,8 @@
   RegisterPathProvider();
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
 #if defined(OS_ANDROID)
   const base::CommandLine* command_line(base::CommandLine::ForCurrentProcess());
   std::string process_type =
@@ -80,7 +81,8 @@
   if (process_type.empty()) {
     base::FilePath log_file;
     base::PathService::Get(FILE_CAST_ANDROID_LOG, &log_file);
-    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+    settings.logging_dest =
+        logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
     settings.log_file = log_file.value().c_str();
     settings.delete_old = logging::DELETE_OLD_LOG_FILE;
   }
diff --git a/chromecast/external_mojo/external_service_support/process_setup.cc b/chromecast/external_mojo/external_service_support/process_setup.cc
index 98f4435..a7ff784 100644
--- a/chromecast/external_mojo/external_service_support/process_setup.cc
+++ b/chromecast/external_mojo/external_service_support/process_setup.cc
@@ -24,7 +24,8 @@
 
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   CHECK_NE(SIG_ERR, signal(SIGPIPE, SIG_IGN));
diff --git a/chromeos/network/onc/onc_translator_onc_to_shill.cc b/chromeos/network/onc/onc_translator_onc_to_shill.cc
index 1fca6135..50a2266 100644
--- a/chromeos/network/onc/onc_translator_onc_to_shill.cc
+++ b/chromeos/network/onc/onc_translator_onc_to_shill.cc
@@ -27,6 +27,7 @@
 #include "chromeos/network/onc/onc_utils.h"
 #include "chromeos/network/shill_property_util.h"
 #include "components/onc/onc_constants.h"
+#include "net/base/ip_address.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace chromeos {
@@ -94,6 +95,7 @@
   void TranslateVPN();
   void TranslateWiFi();
   void TranslateEAP();
+  void TranslateStaticIPConfig();
   void TranslateNetworkConfiguration();
 
   // Copies all entries from |onc_object_| to |shill_dictionary_| for which a
@@ -144,6 +146,8 @@
     TranslateWiFi();
   else if (onc_signature_ == &kEAPSignature)
     TranslateEAP();
+  else if (onc_signature_ == &kStaticIPConfigSignature)
+    TranslateStaticIPConfig();
   else
     CopyFieldsAccordingToSignature();
 }
@@ -332,6 +336,26 @@
   CopyFieldsAccordingToSignature();
 }
 
+void LocalTranslator::TranslateStaticIPConfig() {
+  CopyFieldsAccordingToSignature();
+  // Shill expects 4 valid nameserver values. Ensure all values are valid and
+  // replace any invalid values with 0.0.0.0 (which has no effect). See
+  // https://crbug.com/922219 for details.
+  base::Value* name_servers =
+      shill_dictionary_->FindKey(shill::kNameServersProperty);
+  if (name_servers) {
+    static const char kDefaultIpAddr[] = "0.0.0.0";
+    net::IPAddress ip_addr;
+    for (base::Value& value_ref : name_servers->GetList()) {
+      // AssignFromIPLiteral returns true if a string is valid ipv4 or ipv6.
+      if (!ip_addr.AssignFromIPLiteral(value_ref.GetString()))
+        value_ref = base::Value(kDefaultIpAddr);
+    }
+    while (name_servers->GetList().size() < 4)
+      name_servers->GetList().push_back(base::Value(kDefaultIpAddr));
+  }
+}
+
 void LocalTranslator::TranslateNetworkConfiguration() {
   std::string type;
   onc_object_->GetStringWithoutPathExpansion(::onc::network_config::kType,
diff --git a/chromeos/test/data/network/ethernet.onc b/chromeos/test/data/network/ethernet.onc
index b842999..632043d0 100644
--- a/chromeos/test/data/network/ethernet.onc
+++ b/chromeos/test/data/network/ethernet.onc
@@ -9,7 +9,7 @@
     "IPAddress":"125.125.125.125",
     "NameServers":[
       "1.1.1.8",
-      "125.1.1.3"
+      "125.1.1.3",
     ],
     "RoutingPrefix":26,
     "Type":"IPv4"
diff --git a/chromeos/test/data/network/shill_arc_vpn.json b/chromeos/test/data/network/shill_arc_vpn.json
index 115d7366..60af48c 100644
--- a/chromeos/test/data/network/shill_arc_vpn.json
+++ b/chromeos/test/data/network/shill_arc_vpn.json
@@ -10,7 +10,7 @@
       "Gateway": "192.168.10.1",
       "IncludedRoutes": [ "192.168.11.0/24", "192.168.12.0/24" ],
       "ExcludedRoutes": [ "192.168.1.0/24" ],
-      "NameServers": [ "8.8.8.8", "8.8.4.4" ],
+       "NameServers": [ "8.8.8.8", "8.8.4.4", "0.0.0.0", "0.0.0.0" ],
       "SearchDomains": [ "example.com" ]
    }
 }
diff --git a/chromeos/test/data/network/shill_ethernet.json b/chromeos/test/data/network/shill_ethernet.json
index 7842203..75d5ab3 100644
--- a/chromeos/test/data/network/shill_ethernet.json
+++ b/chromeos/test/data/network/shill_ethernet.json
@@ -3,7 +3,7 @@
   "StaticIPConfig": {
     "Address": "125.125.125.125",
     "Gateway": "1.1.1.7",
-    "NameServers": ["1.1.1.8", "125.1.1.3"],
+      "NameServers": ["1.1.1.8", "125.1.1.3", "0.0.0.0", "0.0.0.0"],
     "Prefixlen": 26
   }
 }
diff --git a/chromeos/test/data/network/translation_of_shill_ethernet.onc b/chromeos/test/data/network/translation_of_shill_ethernet.onc
index 6a71c5b..a309f8b 100644
--- a/chromeos/test/data/network/translation_of_shill_ethernet.onc
+++ b/chromeos/test/data/network/translation_of_shill_ethernet.onc
@@ -11,7 +11,9 @@
     "IPAddress":"125.125.125.125",
     "NameServers":[
       "1.1.1.8",
-      "125.1.1.3"
+      "125.1.1.3",
+      "0.0.0.0",
+      "0.0.0.0"
     ],
     "RoutingPrefix":26,
     "Type":"IPv4"
diff --git a/components/chromeos_camera/BUILD.gn b/components/chromeos_camera/BUILD.gn
index 7c1f0947..a60b8e2fc 100644
--- a/components/chromeos_camera/BUILD.gn
+++ b/components/chromeos_camera/BUILD.gn
@@ -144,6 +144,7 @@
       "//media:test_support",
       "//media/gpu:buildflags",
       "//media/gpu/test:helpers",
+      "//media/parsers",
       "//mojo/core/embedder",
       "//testing/gtest",
       "//third_party:jpeg",
@@ -179,6 +180,7 @@
     "//media:test_support",
     "//media/gpu:buildflags",
     "//media/gpu/test:helpers",
+    "//media/parsers",
     "//mojo/core/embedder",
     "//testing/gtest",
     "//third_party/libyuv",
diff --git a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
index 83c353c..cea3b569 100644
--- a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
+++ b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
@@ -26,9 +26,9 @@
 #include "components/chromeos_camera/gpu_jpeg_encode_accelerator_factory.h"
 #include "components/chromeos_camera/jpeg_encode_accelerator.h"
 #include "media/base/test_data_util.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/buildflags.h"
 #include "media/gpu/test/video_accelerator_unittest_helpers.h"
+#include "media/parsers/jpeg_parser.h"
 #include "mojo/core/embedder/embedder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libyuv/include/libyuv.h"
diff --git a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
index 11d431f0..3490cb7 100644
--- a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
+++ b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
@@ -26,9 +26,9 @@
 #include "components/chromeos_camera/gpu_mjpeg_decode_accelerator_factory.h"
 #include "components/chromeos_camera/mjpeg_decode_accelerator.h"
 #include "media/base/test_data_util.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/buildflags.h"
 #include "media/gpu/test/video_accelerator_unittest_helpers.h"
+#include "media/parsers/jpeg_parser.h"
 #include "mojo/core/embedder/embedder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/libyuv/include/libyuv.h"
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb
index ed8229d7..193b51f 100644
--- a/components/policy/resources/policy_templates_ca.xtb
+++ b/components/policy/resources/policy_templates_ca.xtb
@@ -276,15 +276,15 @@
 <translation id="1502843533062797703">Activa el bloqueig d'injecció de programari de tercers</translation>
 <translation id="1504431521196476721">Testimoni remot</translation>
 <translation id="1507382822467487898">
-          Configura quina adreça MAC (control d'accés multimèdia) es farà servir en connectar una base al dispositiu.
+          Configura quina adreça MAC (control d'accés als recursos multimèdia) s'utilitzarà quan es connecta una base al dispositiu.
 
-          Quan es connecta una base a alguns models de dispositiu, es fa servir l'adreça MAC de la base designada pel dispositiu per identificar el dispositiu a Ethernet de manera predeterminada. Aquesta política permet que l'administrador canviï la font de l'adreça MAC mentre està connectat.
+          Quan una base es connecta a alguns models de dispositius, l'adreça MAC de la base designada s'utilitza per identificar el dispositiu a Ethernet de manera predeterminada. Aquesta política permet a l'administrador canviar l'origen de l'adreça MAC mentre el dispositiu està connectat a la base.
 
-          Si se selecciona "DeviceDockMacAddress" o la política es deixa sense establir, es farà servir l'adreça MAC de la base designada pel dispositiu.
+          Si se selecciona "DeviceDockMacAddress" o la política es deixa sense establir, s'utilitzarà l'adreça MAC de la base designada del dispositiu.
 
-          Si se selecciona "DeviceNicMacAddress", es farà servir l'adreça MAC del NIC (controlador de la interfície de xarxa) del dispositiu.
+          Si se selecciona "DeviceNicMacAddress", s'utilitzarà l'adreça MAC de la targeta de xarxa (NIC) del dispositiu.
 
-          Si se selecciona "DockNicMacAddress", es farà servir l'adreça MAC del NIC de la base.
+          Si se selecciona "DockNicMacAddress", s'utilitzarà l'adreça MAC de la targeta de xarxa de la base.
 
           L'usuari no pot canviar aquesta opció de configuració.</translation>
 <translation id="1507957856411744193">Si aquesta política s'estableix en "true", <ph name="PRODUCT_NAME" /> es connectarà a dispositius d'emissió en totes les adreces IP, no només en adreces privades de les normes RFC 1918 i RFC 4913.
@@ -677,7 +677,7 @@
 
           Si aquesta política es deixa sense establir i el dispositiu l'admet, s'aplicarà el mode estàndard de càrrega de la bateria i l'usuari no el podrà canviar.
 
-          Nota: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> substitueix aquesta política si s'especifica l'anterior.</translation>
+          Nota: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> substitueix aquesta política si la primera s'especifica.</translation>
 <translation id="237494535617297575">Us permet definir una llista de patrons d'URL que especifiquen els llocs en què està permès mostrar notificacions. Si no es defineix aquesta política, s'utilitzarà el valor global predeterminat per a tots els llocs tant de la política "DefaultNotificationsSetting", si es defineix, com d'un altre tipus de configuració personal de l'usuari.</translation>
 <translation id="2386362615870139244">Permet els wake locks de la pantalla</translation>
 <translation id="2411817661175306360">L'advertiment sobre la protecció de contrasenyes està desactivat</translation>
@@ -947,7 +947,7 @@
       Si desactives aquesta opció de configuració o no hi estableixes cap valor, a Previsualització de la impressió s'utilitzarà la impressora que s'ha fet servir més recentment com a opció de destinació predeterminada.
 
       Si actives aquesta opció de configuració, a Previsualització de la impressió s'utilitzarà la impressora predeterminada del sistema operatiu com a opció de destinació predeterminada.</translation>
-<translation id="285627849510728211">Estableix la configuració de dia al mode avançat de càrrega de la bateria</translation>
+<translation id="285627849510728211">Estableix la configuració de dia per al mode avançat de càrrega de la bateria</translation>
 <translation id="2856674246949497058">Torna a la versió de destinació si la versió del sistema operatiu és més recent que la de destinació. Executa la funció Powerwash durant el procés.</translation>
 <translation id="2872961005593481000">Apaga</translation>
 <translation id="2873651257716068683">Substitueix la mida de la pàgina d'impressió predeterminada. Si la mida de la pàgina no està disponible, aquesta política s'ignora.</translation>
@@ -1119,7 +1119,7 @@
 <translation id="316778957754360075">Aquesta versió no està disponible des de la versió 29 de <ph name="PRODUCT_NAME" />. La manera recomanada de definir col·leccions d'aplicacions/extensions allotjades per una organització és incloure el lloc que allotja els paquets CRX a ExtensionInstallSources i col·locar enllaços de baixada directa als paquets en una pàgina web. Es pot crear un menú d'aplicacions per a la pàgina web mitjançant la política ExtensionInstallForcelist.</translation>
 <translation id="3168968618972302728">Polítiques relacionades amb l'autenticació de Kerberos.</translation>
 <translation id="3171369832001535378">Plantilla per al nom d'amfitrió de la xarxa del dispositiu</translation>
-<translation id="3177802893484440532">Requereix comprovacions OCSP/CRL en línia per a ancoratges de confiança locals</translation>
+<translation id="3177802893484440532">Requereix als ancoratges de confiança locals que duguin a terme comprovacions OCSP/CRL en línia</translation>
 <translation id="3185009703220253572">des de la versió <ph name="SINCE_VERSION" /></translation>
 <translation id="3187220842205194486">Les aplicacions per a Android no poden obtenir accés a les claus corporatives. Aquesta política no hi té cap efecte.</translation>
 <translation id="3205825995289802549">Maximitza la primera finestra del navegador en iniciar-lo per primera vegada</translation>
@@ -1129,7 +1129,7 @@
 <translation id="3220624000494482595">Si l'aplicació de quiosc és per a Android, no controlarà la versió <ph name="PRODUCT_OS_NAME" />, tot i que aquesta política s'estableixi en "<ph name="TRUE" />".</translation>
 <translation id="3236046242843493070">Patrons d'URL per permetre la instal·lació d'extensions, d'aplicacions i de scripts d'usuari des de</translation>
 <translation id="3240609035816615922">Política d'accés a la configuració de la impressora</translation>
-<translation id="3240655340884151271">Adreça MAC del NIC integrat de la base</translation>
+<translation id="3240655340884151271">Adreça MAC de la targeta de xarxa integrada a la base</translation>
 <translation id="3243309373265599239">Indica el temps sense activitat per part de l'usuari després del qual la pantalla s'atenua quan el dispositiu funciona amb alimentació.
 
           Quan aquesta política es defineix en un valor superior a zero, indica el temps que l'usuari ha de romandre inactiu abans <ph name="PRODUCT_OS_NAME" /> no atenuï la pantalla.
@@ -1370,11 +1370,11 @@
 <translation id="3826475866868158882">S'han activat els serveis d'ubicació de Google</translation>
 <translation id="3831054243924627613">Aquesta política controla l'estat inicial del servei de còpia de seguretat i restauració d'Android.
 
-      Quan aquesta política no es configura o s'estableix en "<ph name="BR_DISABLED" />", el servei de còpia de seguretat i restauració d'Android està desactivat des d'un principi.
+      Quan aquesta política no es configura o s'estableix en "<ph name="BR_DISABLED" />", el servei de còpia de seguretat i restauració d'Android es desactiva en un primer moment.
 
-      Quan aquesta política s'estableix en "<ph name="BR_ENABLED" />", el servei de còpia de seguretat i restauració d'Android està activat des d'un principi.
+      Quan aquesta política s'estableix en "<ph name="BR_ENABLED" />", el servei de còpia de seguretat i restauració d'Android s'activa en un primer moment.
 
-      Quan aquesta política s'estableix en "<ph name="BR_UNDER_USER_CONTROL" />", es demana a l'usuari que triï si vol utilitzar el servei de còpia de seguretat i restauració d'Android. Si l'usuari activa el servei de còpia de seguretat i restauració, les dades de l'aplicació d'Android es carreguen als servidors de còpia de seguretat d'Android, des d'on es restauraran quan es tornin a instal·lar aplicacions compatibles.
+      Quan aquesta política s'estableix en "<ph name="BR_UNDER_USER_CONTROL" />", es demana a l'usuari que triï si vol utilitzar el servei de còpia de seguretat i restauració d'Android. Si l'usuari activa el servei de còpia de seguretat i restauració, les dades de l'aplicació d'Android es pengen als servidors de còpia de seguretat d'Android, des d'on es restauraran quan es tornin a instal·lar aplicacions compatibles.
 
       Tingues en compte que aquesta política controla l'estat del servei de còpia de seguretat i restauració d'Android només durant la configuració inicial. L'usuari pot obrir la configuració d'Android més endavant i activar o desactivar aquest servei.</translation>
 <translation id="3831376478177535007">Quan s'activa aquesta opció de configuració, <ph name="PRODUCT_NAME" /> permet que es confiï en els certificats emesos per les operacions de PKI heretades de Symantec Corporation, sempre que puguin validar correctament un certificat de CA reconegut i s'hi puguin encadenar.
@@ -1679,7 +1679,7 @@
       Utilitza el caràcter comodí "*" per cercar coincidències amb zero o més caràcters arbitraris. El caràcter d'escapada és "\", per tant, col·loca'l davant de "*" o "\" per obtenir instàncies reals d'aquests caràcters.
 
      Si aquesta política no es defineix, es podran veure tots els comptes de Google del dispositiu a <ph name="PRODUCT_NAME" />.</translation>
-<translation id="4363057787588706121">Permet combinar les polítiques de llista que provinguin de fonts diferents</translation>
+<translation id="4363057787588706121">Permet combinar polítiques de llista de fonts diferents</translation>
 <translation id="436581050240847513">Informe de les interfícies de xarxa del dispositiu</translation>
 <translation id="4372704773119750918">No permetis que l'usuari d'empresa formi part dels perfils múltiples (com a usuari principal o secundari)</translation>
 <translation id="4377599627073874279">Permet que tots els llocs mostrin totes les imatges</translation>
@@ -1944,11 +1944,11 @@
 <translation id="5105313908130842249">Retard del bloqueig de pantalla quan s'utilitza bateria</translation>
 <translation id="5108031557082757679">Impressores desactivades per a dispositius d'empresa</translation>
 <translation id="5124368997194894978">Activa l'inici amb alimentació (corrent altern)</translation>
-<translation id="5131211790949066746">Permet la combinació de les polítiques de llista per a la instal·lació d'extensions <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />, <ph name="EXTENSION_INSTALL_WHITELIST_POLICY_NAME" /> i <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" />.
+<translation id="5131211790949066746">Permet la combinació de les polítiques <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />, <ph name="EXTENSION_INSTALL_WHITELIST_POLICY_NAME" /> i <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" />de les llistes d'instal·lació d'extensions.
 
-      Si actives aquesta opció de configuració, els valors de la política de la plataforma de l'ordinador, de la política al núvol de l'ordinador i de la política de la plataforma de l'usuari es combinen en una sola llista i es fan servir conjuntament en lloc d'utilitzar-se només els valors d'una sola font amb la prioritat més alta.
+      Si actives aquesta opció de configuració, els valors de la política de la plataforma de l'ordinador, la política del núvol de l'ordinador i la política de la plataforma de l'usuari es combinen en una llista única i s'utilitzen conjuntament en lloc de fer servir només els valors de la font de màxima prioritat.
 
-      Si desactives aquesta opció de configuració o la deixes sense establir, només es tindran en compte les entrades de la llista provinent de la font amb una prioritat més alta; les altres es mostraran com a conflictes i s'ignoraran.</translation>
+      Si desactives aquesta opció de configuració o la deixes sense establir, només es tindran en compte les entrades de la llista de la font de màxima prioritat. La resta de fonts es mostraran com a conflictes i s'ignoraran.</translation>
 <translation id="5141670636904227950">Estableix el tipus de lupa predeterminat activat a la pantalla d'inici de sessió</translation>
 <translation id="5142301680741828703">Renderitza sempre els patrons URL següents a <ph name="PRODUCT_FRAME_NAME" /></translation>
 <translation id="5148753489738115745">Us permet especificar els paràmetres especials que s'utilitzen quan <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />.
@@ -2043,7 +2043,7 @@
 
       Si la política no es defineix o es defineix a la cadena buida o en un interval de ports no vàlid, WebRTC pot fer servir qualsevol port UDP local disponible.</translation>
 <translation id="5290940294294002042">Especifica una llista dels connectors que l'usuari pot activar o desactivar</translation>
-<translation id="5306186200045823863">Permet confiar en la infraestructura de PKI heretada de Symantec Corporation</translation>
+<translation id="5306186200045823863">Permet confiar en la infraestructura PKI heretada de Symantec Corporation</translation>
 <translation id="5307432759655324440">Disponibilitat del mode d'incògnit</translation>
 <translation id="5318185076587284965">Permet que l'amfitrió d'accés remot pugui utilitzar els servidors de tramesa</translation>
 <translation id="5323128137188992869">Permet que s'emeti el contingut al dispositiu mitjançant <ph name="PRODUCT_NAME" />.
@@ -2207,11 +2207,11 @@
 
           Aquesta opció de configuració afegeix a la llista blanca els tipus d'extensions i d'aplicacions admesos que es poden instal·lar a <ph name="PRODUCT_NAME" /> i els amfitrions amb què poden interaccionar. El valor és una llista de cadenes, cadascuna de les quals hauria de ser una de les següents: "extension", "theme", "user_script", "hosted_app", "legacy_packaged_app", "platform_app". Consulta la documentació de les extensions de <ph name="PRODUCT_NAME" /> per obtenir-ne més informació.
 
-          Tingues en compte que aquesta política també afecta les extensions i les aplicacions que s'hauran d'instal·lar de manera forçada mitjançant ExtensionInstallForcelist.
+          Tingues en compte que aquesta política també força les extensions i les aplicacions perquè s'instal·lin obligatòriament mitjançant ExtensionInstallForcelist.
 
-          Si aquesta opció de configuració es configura, no s'instal·laran els tipus d'extensions o d'aplicacions que no aparegui a la llista.
+          Si es configura aquesta opció, no s'instal·laran les extensions o les aplicacions d'un tipus que no aparegui a la llista.
 
-          Si aquesta opció de configuració no es configura, no s'aplicarà cap restricció als tipus d'extensions i d'aplicacions acceptables.
+          Si no es configura aquesta opció, no s'aplicarà cap restricció als tipus d'extensions i d'aplicacions acceptables.
 
           Abans de la versió 75, no s'admet l'ús de diversos identificadors d'extensions separats per comes i s'ometran. La resta de la política es continuarà aplicant.</translation>
 <translation id="5645779841392247734">Permet les galetes en aquests llocs</translation>
@@ -2330,7 +2330,7 @@
 
       Si s'estableix en "false", no hi ha limitació.
       Si s'estableix en "true", s'estableix una limitació al sistema per aconseguir les velocitats de pujada i baixada proporcionades (en kb/s).</translation>
-<translation id="591088232153082363">Carrega la bateria de manera adaptativa en funció del patró d'ús de la bateria.</translation>
+<translation id="591088232153082363">Carrega la bateria de manera flexible en funció del patró d'ús de la bateria.</translation>
 <translation id="5921713479449475707">Permet les baixades d'actualització automàtica mitjançant HTTP</translation>
 <translation id="5921888683953999946">Establiu l'estat predeterminat de la funció d'accessibilitat del cursor gran a la pantalla d'inici de sessió.
 
@@ -2353,7 +2353,7 @@
 <translation id="5950205771952201658">Com que les comprovacions de revocació en línia "soft-fail" no proporcionen cap avantatge concret en termes de seguretat, estan desactivades de manera predeterminada a <ph name="PRODUCT_NAME" /> versió 19 i versions posteriors. En establir aquesta política en true, es restaurarà el comportament anterior i es realitzaran les comprovacions OCSP/CRL en línia.
 
       Si la política no s'estableix o si s'estableix en false, <ph name="PRODUCT_NAME" /> no realitzarà cap comprovació de revocació en línia a <ph name="PRODUCT_NAME" /> 19 ni versions posteriors.</translation>
-<translation id="5961137303188584693">Adreça MAC del NIC integrat al dispositiu</translation>
+<translation id="5961137303188584693">Adreça MAC de la targeta de xarxa integrada al dispositiu</translation>
 <translation id="5966615072639944554">Autoritza les extensions a utilitzar l'API de testimoni remot.</translation>
 <translation id="5983708779415553259">Comportament predeterminat per a llocs no inclosos en paquets de contingut</translation>
 <translation id="5997543603646547632">Ús del rellotge de 24 hores de manera predeterminada</translation>
@@ -2477,7 +2477,7 @@
 
         Si una política és a la llista i es produeix un conflicte entre dos fonts i també entre diferents abasts o nivells, s'aplicarà la política que tingui una prioritat més alta.
 
-        Si una política no és a la llista i es produeix un conflicte entre fonts, abast o nivell, s'aplicarà la política que tingui una prioritat més alta.</translation>
+        Si una política no és a la llista i es produeix un conflicte entre fonts, abasts o nivells, s'aplicarà la política que tingui una prioritat més alta.</translation>
 <translation id="6258193603492867656">Especifica si l'SPN de Kerberos que es genera ha d'incloure un port no estàndard. Si activeu aquest paràmetre i introduïu un port no estàndard (p. ex. un port diferent de 80 o de 443), s'inclourà a l'SPN de Kerberos que es generi. Si desactiveu aquest paràmetre o no el definiu, l'SPN del Kerberos que es generi no inclourà cap port en cap cas.</translation>
 <translation id="6261643884958898336">Proporciona informació d'identificació de l'ordinador</translation>
 <translation id="6281043242780654992">Configura les polítiques per a la missatgeria nativa. Només es permetran els amfitrions de missatgeria nativa afegits a la llista negra si també apareixen a la llista blanca.</translation>
@@ -2760,7 +2760,7 @@
       Quan la pantalla està a punt d'atenuar-se, el model d'atenuació intel·ligent avalua si cal ajornar l'atenuació de la pantalla. Si l'ajorna, amplia el temps que passa fins que s'atenua la pantalla. En aquest cas, els retards per desactivar la pantalla, bloquejar-la i considerar-la inactiva s'ajusten per mantenir les mateixes distàncies amb el retard per atenuar la pantalla que es van configurar en un principi.
 
       Si aquesta política es defineix en "true" o es deixa sense definir, s'activarà el model d'atenuació intel·ligent i es permetrà que ampliï els temps fins que s'atenua la pantalla. Si aquesta política es defineix en "false", el model d'atenuació intel·ligent no tindrà cap efecte sobre l'atenuació de la pantalla.</translation>
-<translation id="6967394885063085697">Activa la política de gestió de l'alimentació al mode avançat de càrrega de la bateria.
+<translation id="6967394885063085697">Activa la política de gestió de l'alimentació per al mode avançat de càrrega de la bateria.
 
           El mode avançat de càrrega de la bateria permet a l'usuari millorar l'estat de la bateria. En el mode avançat de càrrega, el sistema fa servir un algoritme de càrrega estàndard i altres tècniques fora de l'horari laboral per millorar l'estat de la bateria. Durant l'horari laboral, es fa servir una càrrega exprés. Aquesta càrrega exprés permet que la bateria es carregui més ràpidament i, per tant, la bateria es carrega completament més de pressa. L'hora d'inici i la durada especifiquen per a cada dia l'hora en què es farà un ús més intensiu del sistema.
 
@@ -3077,9 +3077,9 @@
       Si el valor d'aquesta política és 0, s'utilitzarà la mida de memòria cau predeterminada, però l'usuari no podrà canviar-la.
 
       Si no definiu aquesta política, s'utilitzarà la mida de memòria cau predeterminada i els usuaris podran substituir-la amb la marca "--disk-cache-size".</translation>
-<translation id="759389052790680884">Estableix quan vols que la bateria deixi de carregar-se en percentatge.
+<translation id="759389052790680884">Estableix l'aturada personalitzada de la càrrega de la bateria en percentatge.
 
-          La bateria deixa de carregar-se quan s'assoleix el valor personalitzat de l'aturada de la càrrega.
+          La bateria deixa de carregar-se quan s'assoleix el valor en què s'ha establert l'aturada personalitzada de la càrrega de la bateria.
 
           El valor de DeviceBatteryChargeCustomStartCharging ha de ser inferior al de DeviceBatteryChargeCustomStopCharging.
 
@@ -3159,15 +3159,15 @@
 <translation id="7712109699186360774">Demana permís cada vegada que un lloc vulgui accedir a la càmera o al micròfon</translation>
 <translation id="7713608076604149344">Restriccions de baixada</translation>
 <translation id="7715711044277116530">Percentatge que permet ajustar el retard d'inactivitat de la pantalla en mode de presentació</translation>
-<translation id="7716781462866245042">Estableix la configuració de dia al mode avançat de càrrega de la bateria.
+<translation id="7716781462866245042">Estableix la configuració de dia per al mode avançat de càrrega de la bateria.
 
           Aquesta política només es fa servir si DeviceAdvancedBatteryChargeModeEnabled s'estableix en "true".
 
           Si aquesta política no es configura o es deixa sense establir, el mode avançat de càrrega de bateria estarà sempre desactivat.
 
-          Nota: el valor del camp <ph name="CHARGE_START_TIME_FIELD_NAME" /> ha de ser inferior al del camp <ph name="CHARGE_END_TIME_FIELD_NAME" />.
+          Nota: el valor de <ph name="CHARGE_START_TIME_FIELD_NAME" /> ha de ser inferior al de <ph name="CHARGE_END_TIME_FIELD_NAME" />.
 
-          Nota: els valors permesos per al camp <ph name="MINUTE_FIELD_NAME" /> a <ph name="CHARGE_START_TIME_FIELD_NAME" /> i a <ph name="CHARGE_END_TIME_FIELD_NAME" /> són "0", "15", "30" i "45".</translation>
+          Nota: els valors que s'admeten al camp <ph name="MINUTE_FIELD_NAME" /> corresponent a <ph name="CHARGE_START_TIME_FIELD_NAME" /> i a <ph name="CHARGE_END_TIME_FIELD_NAME" /> són 0, 15, 30 i 45.</translation>
 <translation id="7717938661004793600">Permet configurar les funcions d'accessibilitat de <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="7724994675283793633">Aquesta política activa la compatibilitat amb HTTP/0.9 als ports que no són 80 per a HTTP ni 443 per a HTTPS.
 
@@ -3264,9 +3264,9 @@
 <translation id="7941975817681987555">No prediguis accions de xarxa en cap connexió de xarxa</translation>
 <translation id="7952007677054834789">Configura a <ph name="PRODUCT_NAME" /> les pàgines que es carregaran en iniciar, la pàgina d'inici predeterminada i la pàgina de pestanya nova predeterminada, i impedeix que els usuaris les canviïn.
 
-      La configuració de la pàgina d'inici de l'usuari només es bloqueja completament si selecciones que sigui la pàgina de pestanya nova o si l'estableixes perquè sigui un URL i especifiquis un URL per a la pàgina d'inici. Si no especifiques l'URL de la pàgina d'inici, l'usuari podrà establir la pàgina d'inici com a pàgina de la pestanya nova especificant "chrome://newtab".
+      La configuració de la pàgina d'inici de l'usuari només es bloqueja completament si selecciones que sigui la pàgina de pestanya nova o si l'estableixes perquè sigui un URL i especifiques un URL per a la pàgina d'inici. Si no especifiques l'URL de la pàgina d'inici, l'usuari podrà establir la pàgina d'inici com a pàgina de pestanya nova especificant "chrome://newtab".
 
-      La política "URL que s'han d'obrir en iniciar" s'ignora tret que seleccionis "Obre una llista d'URL" a "Acció en iniciar".</translation>
+      La política "URL que s'han d'obrir a l'inici" s'ignora tret que seleccionis "Obre una llista d'URL" a "Acció a l'inici".</translation>
 <translation id="7953256619080733119">Amfitrions d'excepcions manuals d'usuari gestionat</translation>
 <translation id="7961779417826583251">Desactiva l'aplicació de la Transparència de certificats a les autoritats certificadores heretades incloses en una llista</translation>
 <translation id="7974114691960514888">Aquesta política ja no és compatible. Activa l'ús de servidors STUN i de relé quan us connecteu a un client remot. Si s'activa aquest paràmetre, aquest equip pot descobrir i connectar-se a equips amfitrions remots, fins i tot si estan separats per un tallafoc. Si es desactiva aquest paràmetre i el tallafoc filtra les connexions UDP de sortida, aquest equip només es podrà connectar als equips amfitrions de la xarxa local.</translation>
@@ -3556,7 +3556,7 @@
       Si no s'estableix, s'utilitza el període predeterminat de 345.600.000 mil·lisegons (4 dies) per a dispositius amb <ph name="PRODUCT_OS_NAME" /> i 604.800.000 mil·lisegons (1 setmana) per a <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8685024486845674965">L'advertiment sobre la protecció de contrasenyes s'activa quan es reutilitza una contrasenya</translation>
 <translation id="8693243869659262736">Utilitza el client DNS integrat</translation>
-<translation id="8698286761337647563">Amb quants dies d'antel·lació es notifica als usuaris de SAML que la seva contrasenya caducarà aviat</translation>
+<translation id="8698286761337647563">Amb quants dies d'antelació es notifica als usuaris de SAML que la seva contrasenya caducarà</translation>
 <translation id="8703488928438047864">Informa de l'estat del tauler</translation>
 <translation id="8703872185032220081">Estableix la configuració diària per al canvi d'alimentació en els pics d'ús.
 
@@ -3600,7 +3600,7 @@
       Si aquesta opció de configuració està desactivada o no s'estableix, el servei de protecció de contrasenyes enviarà els usuaris a https://myaccounts.google.com perquè canviïn la contrasenya.
       Aquesta política només està disponible en instàncies de Windows que s'hagin unit a un domini de <ph name="MS_AD_NAME" /> o instàncies de Windows 10 Pro o Enterprise que s'hagin inscrit per a la gestió de dispositius.</translation>
 <translation id="8798099450830957504">Predeterminat</translation>
-<translation id="8800453707696044281">Estableix la parada de la càrrega personalitzada de la bateria en percentatge</translation>
+<translation id="8800453707696044281">Estableix l'aturada personalitzada de la càrrega de la bateria en percentatge</translation>
 <translation id="8801680448782904838">Notifica a un usuari que es recomana o que és necessari reiniciar el navegador o el dispositiu</translation>
 <translation id="8818173863808665831">Informeu de la ubicació geogràfica d'un dispositiu.
 
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index e71ef59..900ed79 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -1038,6 +1038,7 @@
       Ako je pravilo AutoplayAllowed postavljeno na False, svi uzorci URL-a postavljeni u ovom pravilu i dalje će se moći reproducirati.
 
       Ako se <ph name="PRODUCT_NAME" /> izvodi, a pravilo se promijeni, pravilo će se primjenjivati samo na nove otvorene kartice. Zato će se neke kartice možda i dalje ponašati u skladu s prethodnim pravilom.</translation>
+<translation id="284288632677954003">URL XML datoteke koja sadrži URL-ove koji nikada ne bi trebali pokrenuti promjenu preglednika.</translation>
 <translation id="285480231336205327">Omogućavanje načina visokog kontrasta</translation>
 <translation id="2854919890879212089">Određuje da <ph name="PRODUCT_NAME" /> u Pregledu ispisa upotrebljava zadani pisač sustava, a ne pisač koji je upotrijebljen zadnji put.
 
@@ -1208,6 +1209,15 @@
 <translation id="3096595567015595053">Popis omogućenih dodataka</translation>
 <translation id="3101501961102569744">Odaberi način određivanja postavki proxy poslužitelja</translation>
 <translation id="3101709781009526431">Datum i vrijeme</translation>
+<translation id="3114411414586006215">To pravilo određuje popis web-lokacija koje nikad neće uzrokovati promjenu preglednika.
+
+      Tom se popisu elementi mogu dodati i pomoću pravila <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" />.
+
+      Ako se pravilo ne postavi, web-lokacije neće se dodavati na popis.
+
+      Ako se pravilo postavi, svaka se stavka tretira kao pravilo. To je slično pravilu <ph name="URL_LIST_POLICY_NAME" />, samo što je logika je obrnuta: podudarna pravila neće otvoriti zamjenski preglednik.
+
+      Za razliku od pravila <ph name="URL_LIST_POLICY_NAME" />, pravila se primjenjuju u oba smjera. To znači da kada je prisutan i omogućen dodatak Internet Explorera, ono također određuje treba li <ph name="IE_PRODUCT_NAME" /> otvoriti te URL-ove u pregledniku <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3117676313396757089">Upozorenje: DHE potpuno će se ukloniti iz preglednika <ph name="PRODUCT_NAME" /> nakon verzije 57 (oko ožujka 2017.) i ovo će pravilo tada prestati funkcionirati.
 
       Ako se to pravilo ne postavi ili se postavi na "False", DHE paketi šifri u TLS-u neće biti omogućeni. U protivnom se može postaviti na "True" radi omogućivanja DHE paketa šifri i održanja kompatibilnosti sa zastarjelim poslužiteljem. To je privremena mjera i poslužitelj se treba ponovo konfigurirati.
@@ -1399,6 +1409,17 @@
 <translation id="3550875587920006460">Omogućuje postavljanje prilagođenog rasporeda za traženje ažuriranja. Primjenjuje se na sve korisnike i sva sučelja na uređaju. Kada se postavi, uređaj će provjeravati ima li ažuriranja prema tom rasporedu. Pravilo se mora ukloniti da bi se otkazala daljnja primjena rasporeda za traženje ažuriranja.</translation>
 <translation id="355118380775352753">Web-lokacije koje se trebaju otvoriti u zamjenskom pregledniku</translation>
 <translation id="3554984410014457319">Dopustite Google asistentu da osluškuje izraze za glasovnu aktivaciju.</translation>
+<translation id="3557208865710006939">Prisilno omogućuje jezike provjere pravopisa. Jezici na popisu koji nisu prepoznati zanemarit će se.
+
+      Ako omogućite to pravilo, provjera pravopisa bit će omogućena za navedene jezike, kao i za one jezike za koje korisnik omogući provjeru pravopisa.
+
+      Ako to pravilo ne postavite ili ga onemogućite, korisnikove postavke provjere pravopisa neće se promijeniti.
+
+      Ako se pravilo <ph name="SPELLCHECK_ENABLED_POLICY_NAME" /> postavi na false, neće se primjenjivati.
+
+      Ako je jezik naveden i u ovom pravilu i u pravilu <ph name="SPELLCHECK_LANGUAGE_BLACKLIST_POLICY_NAME" />, prioritet će imati ovo pravilo i jezik za provjeru pravopisa bit će omogućen.
+
+      Trenutačno su podržani sljedeći jezici: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="356579196325389849">Korisnici mogu konfigurirati kanal izdanja OS-a Chrome</translation>
 <translation id="3575011234198230041">HTTP autentifikacija</translation>
 <translation id="3577251398714997599">Postavke oglasa za web-lokacije s ometajućim oglasima</translation>
@@ -1748,6 +1769,9 @@
           Ako postavite to pravilo, korisnici ga neće moći promijeniti niti nadjačati.
 
           Ako se pravilo ne postavi, ljepljive tipke u početku su onemogućene, ali ih korisnici mogu omogućiti kad god žele.</translation>
+<translation id="4171331498167688968">Ako je pravilo postavljeno na false, softver treće strane moći će ubaciti izvršni kôd u Chromeove procese. Ako pravilo nije postavljeno ili je postavljeno na true, softver treće strane neće moći ubaciti izvršni kôd u Chromeove procese.
+
+      Neovisno o vrijednosti pravila, preglednik softveru treće strane trenutačno neće onemogućiti ubacivanje izvršnog koda u svoje procese na stroju koji je pridružen domeni <ph name="MS_AD_NAME" />.</translation>
 <translation id="4183229833636799228">Zadana postavka za dodatak <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="4192388905594723944">URL za validaciju tokena za autentifikaciju klijenta za daljinski pristup</translation>
 <translation id="4203389617541558220">Ograniči aktivno vrijeme uređaja određivanjem vremena za automatska ponovna pokretanja.
@@ -2105,6 +2129,7 @@
           Pravilo je dostupno samo na instancama Windowsa koje su pridružene domeni <ph name="MS_AD_NAME" /> ili instancama Windowsa 10 Pro ili Enterprise prijavljenim za upravljanje uređajima.</translation>
 <translation id="5085647276663819155">Onemogući pregled ispisa</translation>
 <translation id="5090209345759901501">Proširi postavku Flash sadržaja na sav sadržaj</translation>
+<translation id="5090791951240382356">Dopusti spajanje pravila rječnika koja potječu iz različitih izvora</translation>
 <translation id="5093540029655764852">Određuje stopu (u danima) po kojoj klijent mijenja zaporku računa na računalu. Klijent tu zaporku generira nasumično i korisnik je ne može vidjeti.
 
       Zaporke računa na računalu trebale bi se jednako redovito mijenjati kao i korisničke. Ako se to pravilo onemogući ili postavi na veliki broj dana, to može negativno utjecati na sigurnost jer potencijalnim napadačima daje više vremena za pronalaženje zaporke računa uređaja i njezinu upotrebu.
@@ -3017,6 +3042,17 @@
       </translation>
 <translation id="6922884955650325312">Blokiraj dodatak <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">Određuje naziv zadanog davatelja usluga pretraživanja. Ako naziv ostane prazan ili nije postavljen, upotrebljavat će se naziv hosta određen URL-om pretraživanja. Ovo će pravilo biti uzeto u obzir samo ako je omogućeno pravilo "DefaultSearchProviderEnabled".</translation>
+<translation id="6924223708804692571">Prisilno onemogućuje jezike provjere pravopisa. Jezici na popisu koji nisu prepoznati zanemarit će se.
+
+      Ako omogućite to pravilo, za navedene jezike neće biti omogućena provjera pravopisa. Za jezike koji nisu navedeni na popisu korisnik će moći omogućiti ili onemogućiti provjeru pravopisa.
+
+      Ako to pravilo ne postavite ili ga onemogućite, korisnikove postavke provjere pravopisa neće se promijeniti.
+
+      Ako se pravilo <ph name="SPELLCHECK_ENABLED_POLICY_NAME" /> postavi na false, neće se primjenjivati.
+
+      Ako je jezik naveden i u ovom pravilu i u pravilu <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME" />, prioritet će imati potonje pravilo i jezik za provjeru pravopisa bit će omogućen.
+
+      Trenutačno su podržani sljedeći jezici: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Omogući dvostrani ispis po dužem rubu</translation>
 <translation id="6931242315485576290">Onemogući sinkronizaciju podataka s Googleom</translation>
 <translation id="6936894225179401731">Određuje maksimalni broj simultanih veza proxy poslužitelja.
@@ -3153,6 +3189,15 @@
       Ako se to pravilo konfigurira, utvrđuje se skupina aplikacija i korisnik ih ne može mijenjati.
 
       Ako se to pravilo ne postavi, korisnik može mijenjati popis prikvačenih aplikacija u pokretaču.</translation>
+<translation id="713121532817834879">To je pravilo URL koji usmjerava na XML datoteku u istom formatu kao i pravilo <ph name="IEEM_SITELIST_POLICY" /> u Internet Exploreru. Ono učitava pravila iz XML datoteke i pritom ih ne dijeli s Internet Explorerom.
+
+      Pravila u toj XML datoteci primjenjuju se na isti način kao i pravilo <ph name="GREYLIST_POLICY_NAME" />. Odnosno, ta pravila onemogućavaju pregledniku <ph name="PRODUCT_NAME" /> otvaranje nekog drugog preglednika te onemogućavaju drugom pregledniku da otvori preglednik <ph name="PRODUCT_NAME" />.
+
+      Ako se to pravilo ne postavi ili se ne postavi na važeći URL, <ph name="PRODUCT_NAME" /> neće ga upotrebljavati kao izvor pravila koja ne pokreću promjenu preglednika.
+
+      Ako se to pravilo postavi na važeći URL, <ph name="PRODUCT_NAME" /> s tog će URL-a preuzeti popis web-lokacija i primijeniti pravila kao da su konfigurirana pravilom <ph name="SITELIST_POLICY_NAME" />.
+
+      Više informacija o pravilu <ph name="IEEM_SITELIST_POLICY" /> dostupno je na stranici: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
 <translation id="7132877481099023201">URL-ovi koji će dobiti pristup uređajima za videosnimanje bez postavljanja upita</translation>
 <translation id="7138678301420049075">Ostalo</translation>
 <translation id="7140629953254369759">Upućuje <ph name="PRODUCT_OS_NAME" /> na korištenje konfiguracije alata za zakazivanje zadataka koji se prepoznaje po navedenom imenu.
@@ -3197,6 +3242,15 @@
           Automatska reprodukcija dopuštena je samo za domene koje su izričito navedene u pravilu <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" />. Ako želite omogućiti automatsku reprodukciju za sve web-lokacije, razmislite o dodavanju http://* i https://* na taj popis.
 
           Ako se to pravilo ne postavi, korisnik će tu postavku moći promijeniti ručno.</translation>
+<translation id="7222749588229362483">Omogućuje spajanje odabranih pravila istog opsega i razine kada potječu iz različitih izvora.
+
+        Spajanje se sastoji od spajanja ključeva prve razine rječnika iz svakog izvora. U slučaju sukoba među ključevima primijenit će se ključ koji potječe iz izvora najvišeg prioriteta.
+
+        Ako za pravilo na popisu postoji sukob između dva izvora, vrijednosti će se spojiti u novi rječnik pravila pod uvjetom da su izvori istog opsega i razine.
+
+        Ako za pravilo na popisu postoji sukob između dva izvora, ali i između njihovih opsega i/ili razine, primijenit će se pravilo najvišeg prioriteta.
+
+        Ako postoji sukob između izvora, opsega i/ili razine za pravilo koje nije navedeno na popisu, primijenit će se pravilo najvišeg prioriteta.</translation>
 <translation id="7229975860249300121">Sadrži regularni izraz koji se upotrebljava za određivanje Google računa koji se mogu postaviti kao primarni računi preglednika <ph name="PRODUCT_NAME" /> (to je račun koji se odabire prilikom tijeka uključivanja sinkronizacije).
 
       Prikazuje se odgovarajuća pogreška ako se korisnik pokuša prijaviti korisničkim imenom koje se ne podudara s uzorkom.
@@ -3819,6 +3873,12 @@
 
       Ako se pravilo postavki na "Zamijeni", korisnička pravila u GPO-ovima korisnika zamjenjuju se korisničkim pravilima u GPO-ovima računala (GPO-ovi korisnika zanemaruju se).</translation>
 <translation id="8465065632133292531">Parametri za URL usluge Instant koji upotrebljava POST</translation>
+<translation id="8465746466645315861">Ako se to pravilo ne postavi, korisnik može omogućiti ili onemogućiti provjeru pravopisa u postavkama jezika.
+
+      Ako se pravilo postavi na true, provjera pravopisa je omogućena i korisnik je ne može onemogućiti. Na sustavima <ph name="MS_WIN_NAME" />, <ph name="PRODUCT_OS_NAME" /> i <ph name="LINUX_OS_NAME" /> jezici provjere pravopisa mogu se pojedinačno uključiti ili isključiti kako bi korisnik ipak mogao onemogućiti provjeru pravopisa isključivanjem svih jezika provjere pravopisa. Da bi se to izbjeglo, možete upotrijebiti pravilo <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME" /> za prisilno omogućavanje određenih jezika provjere pravopisa.
+
+      Ako se to pravilo postavi na false, provjera pravopisa je onemogućena i korisnik je ne može omogućiti. Pravila <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME" /> i <ph name="SPELLCHECK_LANGUAGE_BLACKLIST_POLICY_NAME" /> ne primjenjuju se ako je pravilo postavljeno na false.
+      </translation>
 <translation id="847472800012384958">Ne dopusti web-lokacijama prikazivanje skočnih prozora</translation>
 <translation id="8477885780684655676">TLS 1.0</translation>
 <translation id="8483004350080020634">Uklanja osjetljive dijelove https:// URL-ova koji se odnose na privatnost i sigurnost prije nego što se URL-ovi proslijede PAC skriptama (Proxy Auto Config) kojima se <ph name="PRODUCT_NAME" /> koristi tijekom razrješavanja proxyja.
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb
index d15e605..0e28915 100644
--- a/components/policy/resources/policy_templates_iw.xtb
+++ b/components/policy/resources/policy_templates_iw.xtb
@@ -52,7 +52,7 @@
       אם המדיניות הזו מוגדרת, מסך הכניסה יוצג תמיד לפי המקום שסופק על-ידי הערך הראשון במדיניות הזו (המדיניות מוגדרת כרשימה כדי להתאים לגרסאות עתידיות). אם המדיניות לא מוגדרת או אם הוגדרה רשימה ריקה, מסך הכניסה יוצג לפי המקום בהפעלת המשתמש האחרונה. אם המדיניות הזו מוגדרת כערך שאינו מקום חוקי, מסך הכניסה יוצג לפי מקום שהוגדר כברירת מחדל (נכון לעכשיו זהו en-US).</translation>
 <translation id="1052499923181221200">‏למדיניות הזו אין השפעה אלא אם הערך של SamlInSessionPasswordChangeEnabled הוא True.
       אם הערך של המדיניות הזו הוא True והיא מוגדרת למשל לערך 14, פירוש הדבר שמשתמשי SAML יקבלו התראה 14 ימים מראש על כך שתוקף הסיסמה שלהם עומד לפוג בתאריך מסוים.
-      אחרי שיקבלו את ההתראה, הם יוכלו מיד לטפל בעניין ולבצע שינוי סיסמה במהלך הסשן. כך יוכלו לעדכן את הסיסמה לפני שיפוג תוקפה.
+      אחרי שיקבלו את ההתראה, הם יוכלו מיד לטפל בעניין ולשנות את הסיסמה במהלך הסשן. כך יוכלו לעדכן את הסיסמה לפני שיפוג תוקפה.
       אבל, ההתראות האלה מוצגות רק אם ספק הזהויות שולח למכשיר את פרטי תפוגת הסיסמה במהלך תהליך ההתחברות ב-SAML.
       אם מגדירים את המדיניות הזו לאפס, פירוש הדבר שהמשתמשים לא יקבלו התראה מראש — אלא רק אחרי שתוקף הסיסמה כבר יפוג.
 
@@ -326,9 +326,9 @@
 
           אם בוחרים את 'DeviceDockMacAddress' או אם לא מגדירים את המדיניות, נעשה שימוש בכתובת ה-MAC הייעודית לעגינה של המכשיר.
 
-          אם בוחרים את 'DeviceNicMacAddress', נעשה שימוש ב-NIC (כרטיס הרשת) או בכתובת ה-MAC של המכשיר.
+          אם בוחרים את 'DeviceNicMacAddress', נעשה שימוש בכתובת ה-MAC של כרטיס הרשת של המכשיר.
 
-          אם בוחרים את 'DockNicMacAddress', נעשה שימוש בכתובת ה-MAC של ה-NIC של אביזר העגינה.
+          אם בוחרים את 'DockNicMacAddress', נעשה שימוש בכתובת ה-MAC של כרטיס הרשת של אביזר העגינה.
 
           המשתמש לא יכול לשנות את ההגדרה הזו.</translation>
 <translation id="1507957856411744193">‏אם המדיניות מקבלת את הערך true, ‏<ph name="PRODUCT_NAME" /> יתחבר למכשירי העברה בכל כתובת IP, ולא רק בכתובות פרטיות מסוג RFC1918/RFC4193.
@@ -764,7 +764,7 @@
 
           אם מגדירים את המדיניות הזו, מצב טעינת הסוללה מיושם אם הוא נתמך במכשיר.
 
-          אם לא מגדירים את המדיניות הזו והיא נתמכת במכשיר, מיושם המצב של טעינת סוללה רגילה והמשתמש לא יכול לשנות אותו.
+          אם לא מגדירים את המדיניות הזו והיא נתמכת במכשיר, מיושם המצב הרגיל של טעינת הסוללה והמשתמש לא יכול לשנות אותו.
 
           הערה: <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> מבטלת את המדיניות הזו אם מציינים את האפשרות הראשונה.</translation>
 <translation id="237494535617297575">‏מאפשר לך להגדיר רשימה של דפוסי כתובות אתר המפרטת אתרים עם אישור להציג התראות. אם מדיניות זו לא הוגדרה, המערכת תשתמש בערך ברירת המחדל הכללי עבור כל האתרים לפי המדיניות 'DefaultNotificationsSetting' במקרה שהוגדרה, או לפי התצורה האישית שקבע המשתמש במקרה שלא הוגדרה.</translation>
@@ -1242,7 +1242,7 @@
 <translation id="3220624000494482595">‏אם אפליקציית הקיוסק היא של Android, לא תהיה לה שליטה על הגרסה של <ph name="PRODUCT_OS_NAME" />, גם אם המדיניות הזו תוגדר כ-<ph name="TRUE" />.</translation>
 <translation id="3236046242843493070">דפוסי כתובת אתר מאפשרים התקנות של תוספים, יישומים וסקריפטים של משתמשים מאת</translation>
 <translation id="3240609035816615922">מדיניות גישה אל תצורת מדפסות.</translation>
-<translation id="3240655340884151271">‏כתובת ה-MAC המובנית של ה-NIC של אביזר העגינה</translation>
+<translation id="3240655340884151271">‏כתובת ה-MAC המובנית של כרטיס הרשת של אביזר העגינה</translation>
 <translation id="3243309373265599239">מציינת את משך הזמן ללא קלט משתמש שלאחריו המסך מעומעם כשנעשה שימוש בשקע חשמל.
 
           כשהמדיניות הזו מוגדרת לערך גדול מאפס, היא מציינת את משך הזמן שבו המשתמש צריך להיות במצב לא פעיל לפני ש-<ph name="PRODUCT_OS_NAME" /> מעמעם את המסך.
@@ -1509,11 +1509,11 @@
 <translation id="3826475866868158882">‏שירותי המיקום של Google מופעלים</translation>
 <translation id="3831054243924627613">‏מדיניות זו קובעת את המצב ההתחלתי של הגיבוי והשחזור של Android.
 
-      אם המדיניות הזו לא מוגדרת או אם היא מקבלת את הערך <ph name="BR_DISABLED" />, הגיבוי והשחזור של Android מושבת בשלב ההתחלתי.
+      אם המדיניות הזו לא מוגדרת, או אם היא מקבלת את הערך <ph name="BR_DISABLED" />, שירות הגיבוי והשחזור של Android מושבת בשלב ההתחלתי.
 
-      אם המדיניות הזו מקבלת את הערך <ph name="BR_ENABLED" />, הגיבוי והשחזור של Android מופעל בשלב ההתחלתי.
+      אם המדיניות הזו מקבלת את הערך <ph name="BR_ENABLED" />, שירות הגיבוי והשחזור של Android מופעל בשלב ההתחלתי.
 
-      אם המדיניות הזו מקבלת את הערך <ph name="BR_UNDER_USER_CONTROL" />, המשתמש מתבקש לבחור אם הוא רוצה להשתמש בגיבוי ובשחזור של Android. אם המשתמש מפעיל את הגיבוי והשחזור, נתוני האפליקציות ב-Android מועלים לשרתי הגיבוי של Android ומשוחזרים מתוכם כשמתקינים מחדש אפליקציות, כדי לקבל אפליקציות תואמות.
+      אם המדיניות הזו מקבלת את הערך <ph name="BR_UNDER_USER_CONTROL" />, המשתמש מתבקש לבחור אם הוא רוצה להשתמש בשירות הגיבוי והשחזור של Android. אם המשתמש מפעיל את הגיבוי והשחזור, נתוני האפליקציות ב-Android מועלים לשרתי הגיבוי של Android ומשוחזרים מתוכם כשמתקינים מחדש אפליקציות, כדי לקבל אפליקציות תואמות.
 
       חשוב לדעת שהמדיניות הזו קובעת את מצב הגיבוי והשחזור של Android רק במהלך ההגדרה הראשונית. בהמשך, המשתמש יכול לפתוח את הגדרות Android ולהשבית או להפעיל את הגיבוי והשחזור של Android.</translation>
 <translation id="3831376478177535007">‏כשהמדיניות הזו פועלת, <ph name="PRODUCT_NAME" /> מתיר מתן אמון באישורים שהונפקו על-ידי פעולות ה-PKI מדור קודם של Symantec Corporation, אם מתבצע אימות מוצלח שלהם בדרך אחרת והם מקשרים אל אישור CA מוכר.
@@ -1604,7 +1604,7 @@
 
           נעשה שימוש במדיניות הזו רק אם DeviceBatteryChargeMode מוגדר להתאמה אישית.
 
-          אם המדיניות הזו לא מוגדרת או לא מקבלת שום ערך, מיושם המצב הרגיל של טעינת סוללה.</translation>
+          אם המדיניות הזו לא מוגדרת או לא מקבלת שום ערך, מיושם המצב הרגיל של טעינת הסוללה.</translation>
 <translation id="3925377537407648234">הגדרה של רזולוציית המסך ושל אחוז שינוי הגודל</translation>
 <translation id="3939893074578116847">‏שליחת מנות רשת לשרת הניהול כדי לנטר את הסטטוס המקוון וכדי
       שהשרת יוכל לזהות אם המכשיר נמצא במצב לא מקוון.
@@ -2127,7 +2127,7 @@
 <translation id="5105313908130842249">השהיה של נעילת מסך בזמן שימוש בסוללה</translation>
 <translation id="5108031557082757679">מדפסות ארגוניות מושבתות הקשורות למכשירים</translation>
 <translation id="5124368997194894978">‏הפעלה של 'הפעלה לאחר חיבור לזרם AC (זרם חילופין)'</translation>
-<translation id="5131211790949066746">המדיניות הזו מאפשרת שילוב של מדיניות הרשימה <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />, מדיניות הרשימה <ph name="EXTENSION_INSTALL_WHITELIST_POLICY_NAME" /> ומדיניות הרשימה <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> בנושא רשימת תוספים להתקנה.
+<translation id="5131211790949066746">המדיניות הזו מאפשרת מיזוג של מדיניות הרשימה <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />, מדיניות הרשימה <ph name="EXTENSION_INSTALL_WHITELIST_POLICY_NAME" /> ומדיניות הרשימה <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> בנושא רשימת תוספים להתקנה.
 
       אם מפעילים את ההגדרה הזו, הערכים ממדיניות הפלטפורמה למחשב, מדיניות הענן למחשב ומדיניות הפלטפורמה למשתמש ממוזגים ויוצרים רשימה אחת. לאחר מכן נעשה שימוש בערכים האלה יחד, במקום להשתמש בערכים רק מהמקור שקיבל את העדיפות הגבוהה ביותר.
 
@@ -2450,17 +2450,17 @@
           אם המדיניות הזו מופעלת או לא מוגדרת, משתמשים יכולים להציג את הסיסמאות שלהם בטקסט רגיל במנהל הסיסמאות.</translation>
 <translation id="5620392548325769024">הפעלת ההצגה של דף קבלת הפנים בפעם הראשונה שבה הדפדפן מופעל אחרי שדרוג מערכת ההפעלה.</translation>
 <translation id="5630352020869108293">שחזר את ההפעלה האחרונה</translation>
-<translation id="5643906875497889108">‏המדיניות קובעת אילו סוגים של אפליקציות/תוספים מותר להתקין ומגבילה את הגישה לזמן הריצה
+<translation id="5643906875497889108">‏המדיניות קובעת אילו סוגים של אפליקציות או תוספים מותר להתקין, ומגבילה את הגישה לזמן הריצה.
 
-          הגדרה זו יוצרת רשימת היתרים של סוגי האפליקציות/התוספים שמותר להתקין ב-<ph name="PRODUCT_NAME" /> ומציינת את המארחים שיכולה להיות להם אינטראקציה איתם. הערך הוא רשימה של מחרוזות, שכל אחת מהן צריכה להיות אחת מהבאות: "extension"‏, "theme"‏, "user_script"‏, "hosted_app"‏, "legacy_packaged_app"‏, "platform_app". למידע נוסף על הסוגים האלה, ניתן לעיין בתיעוד התוספים של <ph name="PRODUCT_NAME" />.
+          הגדרה זו יוצרת רשימת היתרים של סוגי האפליקציות או התוספים שמותר להתקין ב-<ph name="PRODUCT_NAME" />, ומציינת את המארחים שיכולה להיות להם אינטראקציה איתם. הערך הוא רשימה של מחרוזות, שכל אחת מהן צריכה להיות אחת מהבאות: "extension"‏, "theme"‏, "user_script"‏, "hosted_app"‏, "legacy_packaged_app"‏, "platform_app". למידע נוסף על הסוגים האלה, ניתן לעיין בתיעוד התוספים של <ph name="PRODUCT_NAME" />.
 
           חשוב לדעת שהמדיניות הזו משפיעה גם על תוספים ואפליקציות שצריך להתקין בהגדרת מנהל מערכת דרך ExtensionInstallForcelist.
 
-          אם נקבע ערך עבור ההגדרה הזו, תוספים/אפליקציות מסוג שלא נכלל ברשימה לא מותקנים.
+          אם נקבע ערך עבור ההגדרה הזו, תוספים או אפליקציות מסוג שלא נכלל ברשימה לא מותקנים.
 
-          אם לא נקבע ערך עבור ההגדרה הזו, אין הגבלה על סוגי התוספים/האפליקציות שמותר להתקין.
+          אם לא נקבע ערך עבור ההגדרה הזו, אין הגבלה על סוגי התוספים או האפליקציות שמותר להתקין.
 
-          גרסאות שקודמות לגרסה 75 לא תומכות בשימוש במזהי תוספים מרובים המופרדים באמצעות פסיקים והמערכת מדלגת בהן על הסעיף הזה. יתר סעיפי המדיניות ממשיכים להיות מיושמים.</translation>
+          גרסאות שהמספר שלהן קטן מ-75 לא תומכות בשימוש במזהי תוספים מרובים המופרדים באמצעות פסיקים והמערכת מדלגת בהן על הסעיף הזה. היישום של שאר סעיפי המדיניות נמשך.</translation>
 <translation id="5645779841392247734">‏אפשר קובצי Cookie באתרים אלה</translation>
 <translation id="5689430183304951538">גודל הדף המוגדר כברירת מחדל להדפסה</translation>
 <translation id="5693469654327063861">אפשר העברת נתונים</translation>
@@ -2510,7 +2510,7 @@
 <translation id="5765780083710877561">תיאור:</translation>
 <translation id="5770738360657678870">‏Dev channel (יכול להיות לא יציב)</translation>
 <translation id="5774856474228476867">כתובת אתר של ספק חיפוש המוגדר כברירת מחדל</translation>
-<translation id="5775235485119094648">הסוללה נטענת כשהיא נמצאת בטווח שנקבע.</translation>
+<translation id="5775235485119094648">הסוללה נטענת כששיעור הטעינה שלה הוא בטווח שנקבע.</translation>
 <translation id="5776485039795852974">שאל בכל פעם שאתר רוצה להציג התראות בשולחן העבודה</translation>
 <translation id="5781412041848781654">‏המדיניות מציינת את ספריית GSSAPI לשימוש לאימות HTTP. ניתן להגדיר שם ספרייה בלבד או נתיב מלא.
 
@@ -2611,7 +2611,7 @@
 <translation id="5950205771952201658">‏לאור העובדה שבדיקות ביטול מקוונות מסוג soft-fail אינן מספקות יתרון אבטחה אפקטיבי, הן מושבתות כברירת מחדל ב-<ph name="PRODUCT_NAME" /> מגרסה 19 ואילך. על ידי הגדרת מדיניות זו כ-true, ההתנהגות הקודמת תשוחזר ויבוצעו בדיקות OCSP/CRL מקוונות.
 
       אם המדיניות לא תוגדר, או תוגדר כ-false‏, <ph name="PRODUCT_NAME" /> לא יבצע בדיקות ביטול מקוונות בגרסה 19 ואילך של <ph name="PRODUCT_NAME" />.</translation>
-<translation id="5961137303188584693">‏כתובת ה-MAC המובנית של ה-NIC של המכשיר</translation>
+<translation id="5961137303188584693">‏כתובת ה-MAC של כרטיס הרשת המובנה במכשיר</translation>
 <translation id="5966615072639944554">‏תוספים המורשים להשתמש בממשק ה-API של הזדהות מרחוק</translation>
 <translation id="5983708779415553259">ברירת מחדל של אופן פעולה עבור אתרים שאינם כלולים בחבילת תוכן כלשהי</translation>
 <translation id="5997543603646547632">השתמש בשעון של 24 שעות כברירת מחדל</translation>
@@ -3387,7 +3387,7 @@
 
           נעשה שימוש במדיניות הזו רק אם DeviceBatteryChargeMode מוגדר להתאמה אישית.
 
-          אם המדיניות הזו לא מוגדרת או לא מקבלת שום ערך, מיושם המצב הרגיל של טעינת סוללה.</translation>
+          אם המדיניות הזו לא מוגדרת או לא מקבלת שום ערך, מיושם המצב הרגיל של טעינת הסוללה.</translation>
 <translation id="759957074386651883">הגדרות גלישה בטוחה</translation>
 <translation id="7604169113182304895">‏אפליקציות Android עשויות לפעול בהתאם לרשימה הזו. אין אפשרות לאכוף זאת.</translation>
 <translation id="7612157962821894603">סימונים כלל-מערכתיים שיוחלו בעת ההפעלה של <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index 04c278a..fc6e401a 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -3487,7 +3487,7 @@
           ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ ಅಥವಾ ಹೊಂದಿಸದಿದ್ದರೆ, ಜನರು ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಪುಟದಲ್ಲಿರುವ Kerberos ಖಾತೆಗಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಮೂಲಕ Kerberos ಖಾತೆಗಳನ್ನು ಸೇರಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು ತಾವು ಸೇರಿಸಿರುವ ಖಾತೆಗಳ ಮೇಲೆ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಹೊಂದಿರುತ್ತಾರೆ ಮತ್ತು ಅವುಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಅಥವಾ ತೆಗೆದುಹಾಕಲು ಅವರಿಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ.
 
           ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಬಳಕೆದಾರರು Kerberos ಖಾತೆಗಳನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗದಿರಬಹುದು 'Kerberos ಖಾತೆಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ' ಕಾರ್ಯನೀತಿಯ ಮೂಲಕ ಮಾತ್ರವೇ ಖಾತೆಗಳನ್ನು ಸೇರಿಸಬಹುದಾಗಿದೆ. ಇದು ಖಾತೆಗಳನ್ನು ಲಾಕ್ ಮಾಡಲು ಒಂದು ಪರಿಣಾಮಕಾರಿ ಮಾರ್ಗವಾಗಿದೆ.</translation>
-<translation id="7895553628261067384">ರಿಮೋಟ್ ಪ್ರವೇಶ</translation>
+<translation id="7895553628261067384">ದೂರದ ಸ್ಥಳದಿಂದ ಪ್ರವೇಶ</translation>
 <translation id="7902255855035461275">ಈ ಪಟ್ಟಿಯಲ್ಲಿನ ವಿನ್ಯಾಸಗಳನ್ನು, ವಿನಂತಿಸುವ URL ನ ಸುರಕ್ಷತಾ ಮೂಲಕ್ಕೆ ಹೊಂದಾಣಿಕೆ ಮಾಡಲಾಗುತ್ತದೆ.   ಹೊಂದಾಣಿಕೆ ಕಂಡುಬಂದರೆ, ಪ್ರಾಂಪ್ಟ್ ಮಾಡದೆಯೇ, ವೀಡಿಯೊ ಸೆರೆಹಿಡಿಯುವ ಸಾಧನಗಳಿಗೆ ಪ್ರವೇಶ ಒದಗಿಸಲಾಗುತ್ತದೆ.
       
       ಗಮನಿಸಿ: ಆವೃತ್ತಿ 45 ರವರೆಗೆ, ಈ ಕಾರ್ಯನೀತಿಗೆ ಕಿಯೋಸ್ಕ್ ಮೋಡ್‌ನಲ್ಲಿ ಮಾತ್ರ ಬೆಂಬಲವಿತ್ತು.</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 682d188..ae5fca2 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -824,7 +824,7 @@
 
       정책이 False로 설정된 경우, zero-delay 자동 로그인(구성 시)을 우회할 수 없습니다.</translation>
 <translation id="2454228136871844693">안정성에 최적화합니다.</translation>
-<translation id="2463034609187171371">TLS DHE 암호화 기술을 사용 설정합니다.</translation>
+<translation id="2463034609187171371">TLS에서 DHE 암호화 기술을 사용 설정합니다.</translation>
 <translation id="2463365186486772703">애플리케이션 언어</translation>
 <translation id="2466131534462628618">캡티브 포털 승인에서 프록시를 무시함</translation>
 <translation id="2482676533225429905">기본 메시지</translation>
@@ -1214,7 +1214,7 @@
 
       프린터 설정은 프린터 최초 사용 시 완료됩니다.  프린터가 사용될 때까지 PPD는 다운로드되지 않습니다.  이후 자주 사용되는 PPD가 캐시됩니다.
 
-      이 정책은 사용자가 개별 기기에서 프린터를 설정할 수 있는지에는 영향을 미치지 않습니다.  이 정책은 개별 사용자의 프린터 설정을 보완하기 위한 것입니다.
+      이 정책은 사용자가 개별 기기에서 프린터를 설정할 수 있는지 여부에는 영향을 미치지 않습니다.  이 정책은 개별 사용자의 프린터 설정을 보완하기 위한 것입니다.
 
       Active Directory 관리 대상 기기에서는 이 정책을 통해 <ph name="MACHINE_NAME_VARIABLE" />을(를) Active Directory 컴퓨터 이름 또는 관련 하위 문자열로 확장할 수 있습니다. 예를 들어, 컴퓨터 이름이 <ph name="MACHINE_NAME_EXAMPLE" />(이)라면 <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />이(가) 6번째 위치 이후에 시작되는 4자로 대체되어 <ph name="MACHINE_NAME_PART_EXAMPLE" />이(가) 됩니다. 이 위치는 0을 기준으로 합니다.
       </translation>
@@ -1305,7 +1305,7 @@
       이 설정을 사용중지하면 사용자는 프록시를 사용할 수 없으며 컴퓨터는 <ph name="CLOUD_PRINT_NAME" />와(과)의 프린터 공유를 허용하지 않습니다.</translation>
 <translation id="3312206664202507568">SAML 사용자가 세션 중에 SAML 비밀번호를 변경할 수 있도록 허용하는 chrome://password-change 페이지를 사용합니다. 이를 통해 SAML 비밀번호 및 기기 잠금 화면 비밀번호가 지속적으로 동기화됩니다.
 
-      또한 이 정책을 통해 SAML 비밀번호가 곧 만료될 예정일 때 세션 중에 비밀번호를 변경하여 즉시 대처할 수 있도록 SAML 사용자에게 경고 알림을 표시하게 설정할 수 있습니다.
+      또한 이 정책을 통해 SAML 비밀번호가 곧 만료될 예정일 때 세션 중에 비밀번호를 변경하여 즉시 대처할 수 있도록 SAML 사용자에게 경고 알림을 표시할 수 있습니다.
       하지만 이러한 알림은 SAML 로그인 절차 중에 SAML ID 공급업체에서 기기로 비밀번호 만료 정보를 전송한 경우에만 표시됩니다.
 
       이 정책을 설정하면 사용자는 변경하거나 재정의할 수 없습니다.</translation>
@@ -1394,7 +1394,7 @@
 
           이 정책이 false로 설정되거나 설정되지 않으면 세션이 시작되자마자 즉시 전원 관리 지연 및 세션 길이 제한이 실행됩니다.</translation>
 <translation id="3478024346823118645">로그아웃 시 사용자 데이터 삭제</translation>
-<translation id="3480961938508521469">일반적인 속도로 완전히 충전된 배터리입니다.</translation>
+<translation id="3480961938508521469">배터리를 일반 속도로 완전히 충전합니다.</translation>
 <translation id="348495353354674884">가상 키보드 사용</translation>
 <translation id="3487623755010328395">
         이 정책을 설정하면 <ph name="PRODUCT_NAME" />에서 모든 프로필에 직접 제품을 등록하고 관련 클라우드 정책을 적용하려 합니다.
@@ -1692,11 +1692,11 @@
 
           모든 확장 프로그램의 소스 코드는 사용자가 개발자 도구를 통해 변경할 수 있습니다(확장 프로그램의 오작동을 야기할 수 있음). 이 부분이 걱정된다면 <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> 정책을 설정해야 합니다.
 
-          정책의 각 항목은 확장 프로그램 ID 및 선택적으로 ‘업데이트’ URL을 세미콜론(<ph name="SEMICOLON" />)으로 구분해 놓은 문자열입니다. 확장 프로그램 ID는 개발자 모드일 때 <ph name="CHROME_EXTENSIONS_LINK" />에서 확인되는 것과 같은 32자의 문자열입니다. ‘업데이트’ URL은 지정된 경우 <ph name="LINK_TO_EXTENSION_DOC1" />에서 설명한 것처럼 업데이트 매니페스트 XML 문서로 연결되어야 합니다. 기본적으로 Chrome 웹 스토어의 업데이트 URL(현재 ‘https://clients2.google.com/service/update2/crx’)이 사용됩니다. 이 정책에서 설정된 ‘업데이트’ URL은 초기 설치용으로만 사용되며, 이후 확장 프로그램의 업데이트는 확장 프로그램의 매니페스트에 있는 업데이트 URL을 사용합니다. 또한 ‘업데이트’ URL을 명시적으로 지정하는 것은 <ph name="PRODUCT_NAME" /> 버전 67 이상에서 필수입니다.
+          정책의 각 항목은 확장 프로그램 ID 및 선택적으로 ‘업데이트’ URL을 세미콜론(<ph name="SEMICOLON" />)으로 구분해 놓은 문자열입니다. 확장 프로그램 ID는 개발자 모드일 때 <ph name="CHROME_EXTENSIONS_LINK" />에서 확인되는 것과 같은 32자의 문자열입니다. ‘업데이트’ URL은 지정된 경우 <ph name="LINK_TO_EXTENSION_DOC1" />에서 설명한 것처럼 업데이트 매니페스트 XML 문서로 연결되어야 합니다. 기본적으로 Chrome 웹 스토어의 업데이트 URL(현재 ‘https://clients2.google.com/service/update2/crx’)이 사용됩니다. 이 정책에서 설정된 ‘업데이트’ URL은 초기 설치용으로만 사용되며, 이후 확장 프로그램의 업데이트는 확장 프로그램의 매니페스트에 있는 업데이트 URL을 사용합니다. 또한 ‘업데이트’ URL을 명시적으로 지정하는 것은 <ph name="PRODUCT_NAME" /> 버전 67 이하에서 필수입니다.
 
           예를 들어 <ph name="EXTENSION_POLICY_EXAMPLE" />은(는) 표준 Chrome 웹 스토어 ‘업데이트’ URL에서 <ph name="EXTENSION_ID_SAMPLE" /> ID로 확장 프로그램을 설치합니다. 확장 프로그램 호스팅에 관한 정보는 <ph name="LINK_TO_EXTENSION_DOC2" /> 페이지를 참조하세요.
 
-          이 정책이 설정되지 않으면 어떠한 앱 또는 확장 프로그램도 자동 설치되지 않고 사용자는 <ph name="PRODUCT_NAME" />의 모든 앱 또는 확장 프로그램을 제거할 수 있습니다.
+          이 정책이 설정되지 않으면 어떠한 앱 또는 확장 프로그램도 자동 설치되지 않으며 사용자는 <ph name="PRODUCT_NAME" />의 모든 앱 또는 확장 프로그램을 제거할 수 있습니다.
 
           이 정책은 시크릿 모드에는 적용되지 않습니다.</translation>
 <translation id="4008507541867797979">이 정책을 True로 설정하거나 구성하지 않으면 <ph name="PRODUCT_OS_NAME" />은(는) 기존의 사용자 이름을 로그인 화면에 표시하여 선택할 수 있도록 합니다.
@@ -2306,7 +2306,7 @@
 
       정책이 설정되지 않았거나 빈 문자열 또는 유효하지 않은 포트 범위로 설정된 경우 WebRTC는 사용 가능한 로컬 UDP 포트를 사용하도록 허용됩니다.</translation>
 <translation id="5290940294294002042">사용자가 사용할 수 있거나 사용할 수 없는 플러그인 목록 지정</translation>
-<translation id="5306186200045823863">Symantec Corporation의 Legacy PKI 인프라를 사용 설정합니다.</translation>
+<translation id="5306186200045823863">Symantec Corporation의 Legacy PKI 인프라에서 트러스트를 사용 설정합니다.</translation>
 <translation id="5307432759655324440">시크릿 모드 사용 가능 여부</translation>
 <translation id="5318185076587284965">원격 액세스 호스트에 의한 릴레이 서버 사용 설정</translation>
 <translation id="5323128137188992869"><ph name="PRODUCT_NAME" />을(를) 사용하여 콘텐츠를 기기로 전송할 수 있도록 허용합니다.
@@ -2664,7 +2664,7 @@
       이 정책이 True로 설정되면 클라우드 정책이 플랫폼 정책과 충돌할 때 클라우드 정책이 우선 적용됩니다.
       이 정책을 False로 설정하거나 설정하지 않으면, 클라우드 정책이 플랫폼 정책과 충돌할 때 플랫폼 정책이 우선 적용됩니다.
 
-      이 정책은 필수 머신 플랫폼으로만 사용할 수 있으며 머신 범위 클라우드 정책에만 영향을 줍니다.
+      이 정책은 필수 머신 플랫폼 정책으로만 사용할 수 있으며 머신 범위 클라우드 정책에만 영향을 줍니다.
       </translation>
 <translation id="5905473632148429217">온라인 OCSP/CRL 확인을 사용합니다.</translation>
 <translation id="5906199912611534122">네트워크 조절을 사용 또는 사용 중지하도록 허용합니다.
@@ -3136,7 +3136,7 @@
       이 정책이 True로 설정되거나 설정되지 않으면 스마트 밝기 낮추기 모델이 사용되며 화면이 어두워질 때까지의 시간을 연장하도록 허용됩니다. 이 정책이 False로 설정되면 스마트 밝기 낮추기 모델이 화면 밝기 낮추기에 영향을 주지 않습니다.</translation>
 <translation id="6967394885063085697">고급 배터리 충전 모드 전력 관리 정책을 사용합니다.
 
-          고급 배터리 충전 모드를 사용하면 사용자가 배터리의 상태를 최적화할 수 있습니다. 고급 충전 모드에서 시스템은 근무 시간이 아닐 때 표준 충전 알고리즘 및 기타 기법을 사용해 배터리의 상태를 최적화합니다. 근무 시간 동안에는 급속 충전이 사용됩니다. 급속 충전을 사용하면 배터리가 빠르게 충전되기 때문에 완전히 충전되기까지 걸리는 시간이 짧습니다. 매일 시스템 사용량이 가장 큰 시간대가 시작 시간 및 길이로 지정됩니다.
+          고급 배터리 충전 모드를 사용하면 사용자가 배터리의 상태를 최적화할 수 있습니다. 고급 충전 모드에서 시스템은 근무 시간이 아닐 때 표준 충전 알고리즘 및 기타 기법을 사용해 배터리의 상태를 최적화합니다. 근무 시간 동안에는 급속 충전이 사용됩니다. 급속 충전을 사용하면 배터리가 빠르게 충전되기 때문에 완전히 충전되기까지 걸리는 시간이 짧습니다. 매일 시스템 사용량이 가장 큰 시간대가 시작 시간 및 지속 시간으로 지정됩니다.
 
           이 정책이 True로 설정되고 DeviceAdvancedBatteryChargeModeDayConfig가 설정된 경우 기기에서 지원될 때 고급 배터리 충전 모드가 항상 사용됩니다.
 
@@ -3224,7 +3224,7 @@
       이 정책을 설정하지 않은 경우 사용자가 기기 잠금을 해제할 때 비밀번호를 확인할지 여부를 선택할 수 있습니다.</translation>
 <translation id="7107148737865880402">USB 전력 공유 전력 관리 정책을 사용합니다.
 
-          일부 기기에는 번개 모양 또는 배터리 아이콘으로 표시된 특정 USB 포트가 장착되어 있으며 이러한 USB 포트는 시스템 배터리를 사용해 모바일 휴대전화와 같은 기기를 충전하는 데 사용할 수 있습니다. 이 정책은 시스템이 절전 모드 또는 종료 모드일 때 이 포트가 보여 주는 충전 행동에 영향을 미칩니다. 이 정책은 다른 USB 포트 및 시스템이 활성화 상태일 때의 충전 행동에는 영향을 주지 않습니다.
+          일부 기기에는 번개 모양 또는 배터리 아이콘으로 표시된 특정 USB 포트가 장착되어 있으며 이러한 USB 포트는 시스템 배터리를 사용해 모바일 휴대전화와 같은 기기를 충전하는 데 사용할 수 있습니다. 이 정책은 시스템이 절전 모드 또는 종료 모드일 때 이 포트에서 기기를 충전하는 방식에 영향을 미칩니다. 이 정책은 다른 USB 포트 및 시스템이 활성화 상태일 때의 충전 방식에는 영향을 주지 않습니다.
 
           시스템이 활성화 상태일 때 USB 포트는 항상 전력을 제공합니다.
 
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb
index 24b4796..f60f940 100644
--- a/components/policy/resources/policy_templates_ms.xtb
+++ b/components/policy/resources/policy_templates_ms.xtb
@@ -337,9 +337,9 @@
 
           Jika 'DeviceDockMacAddress' dipilih atau dasar ini dibiarkan tanpa ditetapkan, alamat MAC dok peranti yang ditetapkan akan digunakan.
 
-          Jika 'DeviceNicMacAddress' dipilih, alamat NIC (pengawal antara muka rangkaian) MAC peranti akan digunakan.
+          Jika 'DeviceNicMacAddress' dipilih, alamat MAC NIC (pengawal antara muka rangkaian) peranti akan digunakan.
 
-          Jika 'DockNicMacAddress' dipilih, alamat NIC MAC dok akan digunakan.
+          Jika 'DockNicMacAddress' dipilih, alamat MAC NIC dok akan digunakan.
 
           Tetapan ini tidak boleh diubah oleh pengguna.</translation>
 <translation id="1507957856411744193">Jika dasar ini ditetapkan kepada benar, <ph name="PRODUCT_NAME" /> akan menyambung ke peranti Cast pada semua alamat IP, bukan alamat peribadi RFC1918/RFC4193 semata-mata.
@@ -1224,9 +1224,9 @@
 
       Jika anda menetapkan dasar ini kepada 'Migrate', direktori laman utama yang disulitkan dengan ecryptfs akan dihijrahkan kepada penyulitan ext4 secara automatik pada log masuk tanpa meminta persetujuan pengguna.
 
-      Jika anda menetapkan dasar ini kepada 'Wipe', direktori laman utama yang disulitkan dengan ecryptfs akan dipadamkan pada log masuk, sebaliknya direktori laman utama baharu yang disulitkan dengan ext4 akan dibuat. Amaran: Tindakan ini mengalih keluar data setempat pengguna.
+      Jika anda menetapkan dasar ini kepada 'Wipe', direktori laman utama yang disulitkan dengan ecryptfs akan dipadamkan pada log masuk, sebaliknya direktori laman utama baharu yang disulitkan dengan ext4 akan dibuat. Amaran: Tindakan ini akan mengalih keluar data setempat pengguna.
 
-      Jika anda menetapkan dasar ini kepada 'MinimalMigrate', direktori laman utama yang disulitkan dengan ecryptfs akan dipadamkan pada log masuk, sebaliknya direktori laman utama baharu yang disulitkan dengan ext4 akan dibuat. Walau bagaimanapun dasar ini akan cuba mengekalkan token log masuk supaya pengguna tidak perlu log masuk semula. Amaran: Tindakan ini mengalih keluar data setempat pengguna.
+      Jika anda menetapkan dasar ini kepada 'MinimalMigrate', direktori laman utama yang disulitkan dengan ecryptfs akan dipadamkan pada log masuk, sebaliknya direktori laman utama baharu yang disulitkan dengan ext4 akan dibuat. Walau bagaimanapun, dasar ini akan cuba mengekalkan token log masuk supaya pengguna tidak perlu log masuk semula. Amaran: Tindakan ini akan mengalih keluar data setempat pengguna.
 
       Jika anda menetapkan dasar ini kepada pilihan yang tidak disokong lagi ('AskUser' atau 'AskForEcryptfsArcUsers'), dasar ini akan dikendalikan seolah-olah anda telah memilih 'Migrate'.
 
@@ -1436,7 +1436,7 @@
       Jika dasar ini ditetapkan kepada 'DeveloperToolsAllowed' (nilai 1), Alat Pembangun dan konsol JavaScript boleh diakses dan digunakan dalam semua konteks, termasuk konteks sambungan yang dipasang oleh dasar perusahaan.
       Jika dasar ini ditetapkan kepada 'DeveloperToolsDisallowed' (nilai 2), Alat Pembangun tidak boleh diakses dan unsur tapak web tidak boleh disemak lagi. Sebarang pintasan papan kekunci dan mana-mana menu atau masukan menu konteks untuk membuka Alat Pembangun atau Konsol JavaScript akan dilumpuhkan.</translation>
 <translation id="3547954654003013442">Tetapan proksi</translation>
-<translation id="3550875587920006460">Membolehkan penetapan jadual tersuai untuk menyemak kemas kini. Dasar ini digunakan pada semua pengguna dan semua antara muka pada peranti. Apabila ditetapkan, peranti akan menyemak kemas kini mengikut jadual tersebut. Dasar ini mesti dialih keluar untuk membatalkan sebarang semakan kemas kini berjadual lagi.</translation>
+<translation id="3550875587920006460">Membolehkan penetapan jadual tersuai untuk menyemak kemas kini. Dasar ini digunakan pada semua pengguna dan semua antara muka pada peranti. Setelah ditetapkan, peranti akan menyemak kemas kini mengikut jadual tersebut. Dasar ini mesti dialih keluar untuk membatalkan sebarang semakan kemas kini berjadual lagi.</translation>
 <translation id="355118380775352753">Tapak web untuk dibuka dalam penyemak imbas alternatif</translation>
 <translation id="3554984410014457319">Benarkan Google Assistant mendengar ungkapan pengaktifan suara</translation>
 <translation id="356579196325389849">Pengguna boleh mengkonfigurasi saluran keluaran OS Chrome</translation>
@@ -1549,7 +1549,7 @@
 
       Apabila dasar ini ditetapkan kepada <ph name="BR_ENABLED" />, sandaran dan pemulihan Android didayakan pada awalnya.
 
-      Apabila dasar ini ditetapkan kepada <ph name="BR_UNDER_USER_CONTROL" />, pengguna diminta untuk memilih sama ada hendak menggunakan sandaran dan pemulihan Android. Jika pengguna mendayakan sandaran dan pemulihan, data apl Android dimuat naik ke pelayan sandaran Android dan dipulihkan daripada pelayan tersebut apabila pemasangan semula apl dilakukan untuk apl yang serasi.
+      Apabila dasar ini ditetapkan kepada <ph name="BR_UNDER_USER_CONTROL" />, pengguna akan diminta untuk memilih sama ada hendak menggunakan sandaran dan pemulihan Android. Jika pengguna mendayakan sandaran dan pemulihan, data apl Android dimuat naik ke pelayan sandaran Android dan dipulihkan daripada pelayan tersebut apabila pemasangan semula apl dilakukan untuk apl yang serasi.
 
       Ambil perhatian bahawa dasar ini mengawal keadaan sandaran dan pemulihan Android semasa penyediaan awal sahaja. Pengguna boleh membuka tetapan Android kemudian dan menghidupkan/mematikan sandaran dan pemulihan Android.</translation>
 <translation id="3831376478177535007">Apabila tetapan ini didayakan, <ph name="PRODUCT_NAME" /> membenarkan sijil yang dikeluarkan oleh operasi PKI Lama Symantec Corporation untuk dipercayai jika sijil ini berjaya disahkan dan dikaitkan dengan sijil CA yang dicam.
@@ -1686,9 +1686,9 @@
 
           Untuk tika Windows yang tidak dihubungkan ke domain <ph name="MS_AD_NAME" />, pemasangan paksa adalah terhad kepada apl dan sambungan yang disenaraikan di Gedung Web Chrome.
 
-          Sila ambil perhatian bahawa kod sumber mana-mana sambungan mungkin diubah oleh pengguna melalui Alatan Pembangun (berkemungkinan menyebabkan disfungsi pada sambungan). Jika perkara ini menimbulkan kebimbangan, maka dasar  <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> harus ditetapkan.
+          Sila ambil perhatian bahawa kod sumber mana-mana sambungan mungkin diubah oleh pengguna melalui Alatan Pembangun (berkemungkinan menyebabkan disfungsi pada sambungan). Jika perkara ini menimbulkan kebimbangan, maka dasar <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> harus ditetapkan.
 
-          Setiap item senarai dasar ini ialah rentetan yang mengandungi ID sambungan dan, sebagai pilihan, URL "kemas kini" yang dipisahkan oleh koma bertitik (<ph name="SEMICOLON" />). ID sambungan ialah rentetan 32 huruf yang didapati, contohnya, pada <ph name="CHROME_EXTENSIONS_LINK" /> apabila dalam mod pembangun. URL "kemas kini", jika dinyatakan, harus menunjuk kepada dokumen XML Manifes Kemas Kini seperti yang dihuraikan di  <ph name="LINK_TO_EXTENSION_DOC1" />. Secara lalai, URL kemas kini Gedung Web Chrome digunakan (pada masa ini ialah "https://clients2.google.com/service/update2/crx"). Sila ambil perhatian bahawa URL "kemas kini" yang ditetapkan dalam dasar ini hanya digunakan untuk pemasangan awal; kemas kini sambungan yang berikutnya menggunakan URL kemas kini yang ditunjukkan dalam manifes sambungan tersebut. Sila ambil perhatian juga bahawa menyatakan URL "kemas kini" secara jelas adalah mandatori dalam <ph name="PRODUCT_NAME" /> sehingga dan merangkumi versi 67.
+          Setiap item senarai dasar ini ialah rentetan yang mengandungi ID sambungan dan, sebagai pilihan, URL "kemas kini" yang dipisahkan oleh koma bertitik (<ph name="SEMICOLON" />). ID sambungan ialah rentetan 32 huruf yang didapati, contohnya, pada <ph name="CHROME_EXTENSIONS_LINK" /> apabila dalam mod pembangun. URL "kemas kini", jika dinyatakan, harus menunjuk kepada dokumen XML Manifes Kemas Kini seperti yang dihuraikan di <ph name="LINK_TO_EXTENSION_DOC1" />. Secara lalai, URL kemas kini Gedung Web Chrome digunakan (pada masa ini ialah "https://clients2.google.com/service/update2/crx"). Sila ambil perhatian bahawa URL "kemas kini" yang ditetapkan dalam dasar ini hanya digunakan untuk pemasangan awal; kemas kini sambungan yang berikutnya menggunakan URL kemas kini yang ditunjukkan dalam manifes sambungan tersebut. Sila ambil perhatian juga bahawa menyatakan URL "kemas kini" secara jelas adalah mandatori dalam <ph name="PRODUCT_NAME" /> sehingga dan merangkumi versi 67.
 
           Contohnya, <ph name="EXTENSION_POLICY_EXAMPLE" /> memasang sambungan dengan id <ph name="EXTENSION_ID_SAMPLE" /> daripada URL "kemas kini" standard Gedung Web Chrome. Untuk mendapatkan maklumat lanjut tentang mengehoskan sambungan, lihat: <ph name="LINK_TO_EXTENSION_DOC2" />.
 
@@ -2692,7 +2692,7 @@
 <translation id="5950205771952201658">Berasaskan fakta bahawa semakan pembatalan dalam talian gagal-lembut tidak memberikan sebarang manfaat keselamatan yang berkesan, semakan ini dilumpuhkan secara lalai dalam <ph name="PRODUCT_NAME" /> versi 19 dan yang lebih baharu. Dengan menetapkan dasar ini kepada benar, gelagat sebelumnya dipulihkan dan semakan OCSP/CRL dalam talian akan dilaksanakan.
 
       Jika dasar ini tidak ditetapkan atau ditetapkan kepada palsu, maka <ph name="PRODUCT_NAME" /> tidak akan melaksanakan semakan pembatalan dalam talian dalam <ph name="PRODUCT_NAME" /> 19 dan yang lebih baharu.</translation>
-<translation id="5961137303188584693">Alamat NIC MAC terbina dalam peranti</translation>
+<translation id="5961137303188584693">Alamat MAC NIC terbina dalam peranti</translation>
 <translation id="5966615072639944554">Sambungan dibenarkan untuk mengguna API pembuktian jauh</translation>
 <translation id="5983708779415553259">Gelagat lalai untuk tapak yang tidak didapati dalam mana-mana pek kandungan</translation>
 <translation id="5997543603646547632">Gunakan jam 24 jam secara lalai</translation>
@@ -2708,7 +2708,7 @@
 <translation id="6034341625190551415">Mengawal jenis akaun sesi awam dan kios.</translation>
 <translation id="6034603289689965535">Membenarkan halaman memaparkan tetingkap timbul semasa penyahmuatannya</translation>
 <translation id="6036523166753287175">Dayakan penyusuran tembok api daripada hos akses jauh</translation>
-<translation id="605475635122964053">Mengehadkan mod pencetakan PIN. Dasar yang tidak ditetapkan akan dianggap sebagai tiada sekatan. Jika mod tidak tersedia, dasar ini akan diabaikan. Sila ambil perhatian bahawa ciri pencetakan PIN didayakan hanya untuk pencetak yang menggunakan salah satu protokol IPPS, USB atau IPP melalui USB </translation>
+<translation id="605475635122964053">Sekat mod pencetakan PIN. Dasar yang tidak ditetapkan akan dianggap sebagai tiada sekatan. Jika mod tidak tersedia, dasar ini akan diabaikan. Sila ambil perhatian bahawa ciri pencetakan PIN didayakan hanya untuk pencetak yang menggunakan salah satu protokol IPPS, USB atau IPP melalui USB </translation>
 <translation id="6070667616071269965">Reka letak papan kekunci skrin log masuk peranti</translation>
 <translation id="6074963268421707432">Jangan benarkan mana-mana tapak untuk memaparkan pemberitahuan desktop</translation>
 <translation id="6074964551275531965">Tetapkan tempoh waktu untuk pemberitahuan kemas kini</translation>
@@ -3219,7 +3219,7 @@
       Jika dasar dibiarkan tanpa ditetapkan, pengguna boleh memilih sama ada mereka ingin diminta memberikan kata laluan untuk membuka kunci peranti atau tidak.</translation>
 <translation id="7107148737865880402">Dayakan dasar pengurusan kuasa perkongsian kuasa USB.
 
-          Sesetengah peranti mempunyai port USB khusus yang ditandai dengan ikon panahan petir atau bateri yang boleh digunakan untuk mengecas peranti seperti telefon mudah alih menggunakan bateri sistem. Dasar ini mempengaruhi gelagat pengecasan port ini semasa sistem dalam mod tidur atau tutup. Dasar ini tidak mempengaruhi port USB lain dan gelagat pengecasan semasa sistem dalam mod jaga.
+          Sesetengah peranti mempunyai port USB khusus yang ditandakan dengan ikon panahan petir atau bateri yang boleh digunakan untuk mengecas peranti seperti telefon mudah alih menggunakan bateri sistem. Dasar ini mempengaruhi gelagat pengecasan port ini semasa sistem dalam mod tidur atau tutup. Dasar ini tidak mempengaruhi port USB lain dan gelagat pengecasan semasa sistem dalam mod jaga.
 
           Semasa dalam mod jaga, port USB akan sentiasa membekalkan kuasa.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index d859be5a..85b9521 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -754,7 +754,7 @@
 <translation id="2303795211377219696">Ativar o preenchimento automático para cartões de crédito</translation>
 <translation id="2309390639296060546">Configuração padrão de geolocalização</translation>
 <translation id="2327252517317514801">Definir os domínios autorizados a acessar o G Suite</translation>
-<translation id="2356878440219553005">Especifica a política de gerenciamento de energia para o modo avançado de carregamento de bateria.
+<translation id="2356878440219553005">Especifica a política de gerenciamento de energia para o modo de carregamento de bateria.
 
           Controle dinamicamente o carregamento da bateria para minimizar o desgaste devido ao estresse e aumentar a vida útil.
 
@@ -764,7 +764,7 @@
 
           Se esta política não for definida e a política for compatível com o dispositivo, o modo padrão de carregamento da bateria será aplicado e não poderá ser alterado pelo usuário.
 
-          Observação: Se <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> for especificada, ela substituirá esta política.</translation>
+          Observação: se <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_NAME" /> for especificada, ela substituirá esta política.</translation>
 <translation id="237494535617297575">Permite que você defina uma lista de padrões de URL que especificam sites com permissão para exibir notificações. Se esta política for deixada sem definição, o valor padrão global será utilizado para todos os sites a partir da política "DefaultNotificationsSetting", caso esta tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.</translation>
 <translation id="2386362615870139244">Permitir bloqueios de ativação da tela</translation>
 <translation id="2411817661175306360">O aviso de proteção de senha está desativado</translation>
@@ -1201,7 +1201,7 @@
           Se esta política não for definida, o valor global padrão será usado para todos os sites da política "DefaultImagesSetting", caso ela tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.
 
           Esta política foi erroneamente ativada no Android no passado, mas esta funcionalidade nunca foi completamente compatível com essa plataforma.</translation>
-<translation id="3091832372132789233">Carregar a bateria de dispositivos que estejam conectados a uma fonte de energia externa.</translation>
+<translation id="3091832372132789233">Carregar a bateria de dispositivos que ficam a maior parte do tempo conectados a uma fonte de energia externa.</translation>
 <translation id="3096595567015595053">Lista de plug-ins ativados</translation>
 <translation id="3101501961102569744">Escolher o modo de especificar as configurações do servidor proxy</translation>
 <translation id="3101709781009526431">Data e hora</translation>
@@ -1626,21 +1626,21 @@
       Se essa política for definida como "true" ou não for definida, os usuários terão permissão para resgatar ofertas por meio do registro do Chrome OS.
 
       Se essa política for definida como "false", os usuários não terão permissão para resgatar ofertas.</translation>
-<translation id="4008233182078913897">Especifica uma lista de apps e extensões que são instalados silenciosamente, sem interação do usuário e que não podem ser desinstalados ou desativados pelo usuário. Todas as permissões solicitadas pelos apps/extensões são concedidas implicitamente, sem interação do usuário, incluindo permissões extras solicitadas por futuras versões do app/extensão. Além disso, são concedidas permissões para as APIs de extensão enterprise.deviceAttributes e enterprise.platformKeys. Essas duas APIs não estão disponíveis para apps/extensões que não tenham sido instalados forçadamente.
+<translation id="4008233182078913897">Especifica uma lista de apps e extensões que são instalados silenciosamente, sem qualquer interação do usuário e sem permitir a desinstalação nem a desativação feita por ele. Todas as permissões solicitadas pelos apps/extensões são concedidas implicitamente, sem interação do usuário, incluindo as permissões solicitadas por versões futuras do app/extensão. Além disso, são concedidas permissões para as APIs de extensão enterprise.deviceAttributes e enterprise.platformKeys. Essas duas APIs não estão disponíveis para apps/extensões que não tenham sido instalados à força.
 
-          Esta política tem precedência sobre uma política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> potencialmente conflitante. Se um app ou extensão anteriormente instalado de modo forçado for removido dessa lista, ele será automaticamente desinstalado pelo <ph name="PRODUCT_NAME" />.
+          Esta política tem precedência sobre uma política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> possivelmente conflitante. Se um app ou extensão que anteriormente foi instalado à força for removido dessa lista, ele será automaticamente desinstalado pelo <ph name="PRODUCT_NAME" />.
 
-          Em instâncias do Windows não vinculadas a um domínio do <ph name="MS_AD_NAME" />, a instalação forçada limita-se a apps e extensões listados na Chrome Web Store.
+Em instâncias do Windows não vinculadas a um domínio do <ph name="MS_AD_NAME" />, a instalação forçada se limita a apps e extensões listados na Chrome Web Store.
 
           Observe que o código-fonte de qualquer extensão pode ser alterado pelos usuários por meio das Ferramentas para Desenvolvedores (possivelmente tornando a extensão defeituosa). Se essa preocupação existir, será preciso definir a política <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
 
-          Cada item da lista da política é uma string que contém um código de extensão e, opcionalmente, um URL de "atualização" separados por ponto e vírgula (<ph name="SEMICOLON" />). O código da extensão é a string de 32 letras encontrada, por exemplo, em <ph name="CHROME_EXTENSIONS_LINK" /> no modo de desenvolvedor. O URL de "atualização", se especificado, precisa apontar para um documento XML de manifesto de atualização, conforme descrito em <ph name="LINK_TO_EXTENSION_DOC1" />. Por padrão, é usado o URL de "atualização" da Chrome Web Store (atualmente, "https://clients2.google.com/service/update2/crx"). Observe que o URL de "atualização" definido nesta política só é usado na instalação inicial. As atualizações subsequentes da extensão empregam o URL de atualização indicado no manifesto da extensão. Observe também que especificar o URL de "atualização" era uma etapa obrigatória nas versões do <ph name="PRODUCT_NAME" /> até a 67.
+          Cada item da lista da política é uma string que contém um código de extensão e, opcionalmente, um URL de "atualização" separados por ponto e vírgula (<ph name="SEMICOLON" />). O código da extensão é a string de 32 letras encontrada, por exemplo, em <ph name="CHROME_EXTENSIONS_LINK" /> no modo de desenvolvedor. O URL de "atualização", se especificado, precisa apontar para um documento XML de manifesto de atualização, conforme descrito em <ph name="LINK_TO_EXTENSION_DOC1" />. Por padrão, é usado o URL de atualização da Chrome Web Store (atualmente, "https://clients2.google.com/service/update2/crx"). Observe que o URL de "atualização" definido nesta política só é usado na instalação inicial. As atualizações subsequentes da extensão empregam o URL de atualização indicado no manifesto da extensão. Observe também que especificar o URL de "atualização" era uma etapa obrigatória nas versões do <ph name="PRODUCT_NAME" /> até a 67.
 
-          Por exemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala a extensão com código <ph name="EXTENSION_ID_SAMPLE" /> por meio do URL de "atualização" padrão da Chrome Web Store. Para ver mais informações sobre a hospedagem de extensões, consulte: <ph name="LINK_TO_EXTENSION_DOC2" />.
+          Por exemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala a extensão com código <ph name="EXTENSION_ID_SAMPLE" /> por meio do URL padrão de "atualização" da Chrome Web Store. Para ver mais informações sobre hospedagem de extensões, consulte: <ph name="LINK_TO_EXTENSION_DOC2" />.
 
-          Se esta política não for definida, nenhum app ou extensão será instalado automaticamente, e o usuário poderá desinstalar apps ou extensões no <ph name="PRODUCT_NAME" />.
+Se esta política não for definida, nenhum app ou extensão será instalado automaticamente, e o usuário poderá desinstalar apps ou extensões no <ph name="PRODUCT_NAME" />.
 
-          Observe que esta política não se aplica ao modo de navegação anônima.</translation>
+Observe que esta política não se aplica ao modo de navegação anônima.</translation>
 <translation id="4008507541867797979">Se esta política for definida como verdadeira ou não for configurada, o <ph name="PRODUCT_OS_NAME" /> mostrará os usuários existentes na tela de login, permitindo escolher um deles.
 
       Se esta política for definida como falsa, o <ph name="PRODUCT_OS_NAME" /> não mostrará os usuários existentes na tela de login. A tela de login normal (que solicita o e-mail e a senha ou o número de telefone do usuário) ou a tela intersticial SAML (se tiver sido ativada por meio da política <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />) será mostrada, a menos que uma sessão gerenciada tenha sido configurada. Se uma sessão gerenciada tiver sido configurada, apenas as contas da sessão gerenciada serão mostradas, permitindo escolher uma delas.
@@ -2219,7 +2219,7 @@
 
       Se a política não for configurada ou for definida para a string em branco ou um alcance de porta inválido, o WebRTC terá permissão para usar qualquer porta UDP local disponível.</translation>
 <translation id="5290940294294002042">Especificar uma lista de plug-ins que podem ser ativados ou desativados pelo usuário</translation>
-<translation id="5306186200045823863">Ativar confiança na infraestrutura PKI legada da Symantec Corporation</translation>
+<translation id="5306186200045823863">Ativar confiança na infraestrutura de ICP legada da Symantec Corporation</translation>
 <translation id="5307432759655324440">Disponibilidade do modo de navegação anônima</translation>
 <translation id="5318185076587284965">Ativar o uso de servidores relay pelo host de acesso remoto</translation>
 <translation id="5323128137188992869">Permite que o conteúdo seja transmitido usando o <ph name="PRODUCT_NAME" />.
@@ -2550,10 +2550,12 @@
 <translation id="5897913798715600338">Carregar a bateria usando tecnologia de carregamento rápido.</translation>
 <translation id="5898486742390981550">Quando vários usuários estão conectados, somente o usuário principal pode usar os apps Android.</translation>
 <translation id="5901427587865226597">Apenas impressão duplex</translation>
-<translation id="5903898512448364160">Se a política for definida como verdadeira, a política da nuvem terá precedência caso haja conflito com a da plataforma.
-      Se a política for definida como falsa ou não for configurada, a política da plataforma terá precedência caso haja conflito com a política da nuvem.
+<translation id="5903898512448364160">
+      Se a política for definida como verdadeira, a política da nuvem terá precedência caso haja conflito com a da plataforma.
+      Se a política for definida como falsa ou não for configurada, a política da plataforma terá precedência caso haja conflito com a da nuvem.
 
-      Esta política está disponível apenas como uma política de plataforma de máquina obrigatória e só afeta as políticas da nuvem no escopo da máquina.</translation>
+      Esta política só está disponível como uma política da plataforma de máquina obrigatória e só afeta políticas da nuvem do escopo de máquina.
+      </translation>
 <translation id="5905473632148429217">Ativar verificações OCSP/CRL on-line</translation>
 <translation id="5906199912611534122">Permite ativar ou desativar a limitação da rede.
       Essa opção se aplica a todos os usuários e todas as interfaces no dispositivo. Depois que a política é definida,
@@ -2637,7 +2639,7 @@
 
       Quando esta política estiver configurada como <ph name="GLS_UNDER_USER_CONTROL" />, o usuário poderá optar por usar ou não os Serviços de localização do Google. Isso permitirá que apps Android usem os serviços para consultar a localização do dispositivo e também ativará o envio de dados de local anônimos para o Google.
 
-      Observe que esta política controla o estado dos Serviços de localização do Google apenas durante a configuração inicial. O usuário pode abrir as configurações do Android posteriormente e ativar ou desativar esse recurso.
+      Esta política controla o estado dos Serviços de localização do Google apenas durante a configuração inicial. O usuário pode abrir as configurações do Android posteriormente e ativar ou desativar esse recurso.
 
       Observe que esta política será ignorada e os Serviços de localização do Google estarão sempre desativados quando a política <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> estiver configurada como <ph name="BLOCK_GEOLOCATION_SETTING" />.</translation>
 <translation id="6141402445226505817">Sempre usar detecção de fuso horário aproximada</translation>
@@ -3092,7 +3094,7 @@
 
           Alguns dispositivos têm uma porta USB específica marcada com um ícone de raio ou de bateria, que pode ser usada para carregar dispositivos como um smartphone usando a bateria do sistema. Esta política afeta o comportamento de carregamento dessa porta enquanto o sistema está no modo de suspensão ou de encerramento. Esta política não afeta outras portas USB e o comportamento do carregamento enquanto o sistema está ativo.
 
-          Quando estiver ativado, a porta USB sempre fornecerá energia.
+          Quando estiver ativo, a porta USB sempre fornecerá energia.
 
           Quando em suspensão, se esta política for definida como verdadeira, a energia será fornecida à porta USB quando o dispositivo for conectado ao carregador de tomada ou se o nível da bateria estiver acima de 50%. Caso contrário, não será fornecida nenhuma energia.
 
@@ -3944,7 +3946,7 @@
       Se essa configuração estiver desativada ou não for definida, o serviço de proteção de senhas encaminhará os usuários para https://myaccounts.google.com para a alteração da senha.
       Esta política está disponível apenas em instâncias do Windows associadas a um domínio <ph name="MS_AD_NAME" /> ou instâncias do Windows 10 Pro ou Enterprise inscritas no gerenciamento de dispositivos.</translation>
 <translation id="8798099450830957504">Padrão</translation>
-<translation id="8800453707696044281">Configurar a parada personalizada do carregamento da bateria, em porcentagem.</translation>
+<translation id="8800453707696044281">Configurar a parada personalizada do carregamento da bateria, em porcentagem</translation>
 <translation id="8801680448782904838">Notifica um usuário de que a reinicialização do navegador ou do dispositivo é recomendada ou obrigatória</translation>
 <translation id="8818173863808665831">Informar a localização geográfica do dispositivo. 
 
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb
index 50b3755..b259d19 100644
--- a/components/policy/resources/policy_templates_ta.xtb
+++ b/components/policy/resources/policy_templates_ta.xtb
@@ -770,7 +770,7 @@
       இந்தக் கொள்கை அமைக்கப்படவில்லை என்றால் அல்லது ‘சரி’ என்பதற்கு அமைக்கப்பட்டால், பயனர்கள் ‘நெட்வொர்க் கோப்புப் பகிர்வுகள்’ அம்சத்தைப் பயன்படுத்தலாம்.
 
       இந்தக் கொள்கை ‘தவறு’ என்பதற்கு அமைக்கப்பட்டால், பயனர்களால் ‘நெட்வொர்க் கோப்புப் பகிர்வுகள்’ அம்சத்தைப் பயன்படுத்த முடியாது.</translation>
-<translation id="2438609638493026652">Android பயன்பாட்டின் நிறுவலின் போது, முக்கிய நிகழ்வுகளை Googleளுக்கு அறிக்கையிடுவதை இயக்கும். கொள்கை வழியாகத் தூண்டப்பட்டு நிறுவிய பயன்பாடுகளுக்கு மட்டுமே நிகழ்வுகள் பதிவுசெய்யப்படும்.
+<translation id="2438609638493026652">Android ஆப்ஸின் நிறுவலின் போது, முக்கிய நிகழ்வுகளை Googleளுக்கு அறிக்கையிடுவதை இயக்கும். கொள்கை வழியாகத் தூண்டப்பட்டு நிறுவிய பயன்பாடுகளுக்கு மட்டுமே நிகழ்வுகள் பதிவுசெய்யப்படும்.
 
       கொள்கை "சரி" என அமைக்கப்பட்டால், நிகழ்வுகள் பதிவுசெய்யப்படும்.
       கொள்கை "தவறு" என அமைக்கப்பட்டாலோ அல்லது அமைக்கப்படவில்லை என்றாலோ, நிகழ்வுகள் பதிவுசெய்யப்படாது.</translation>
@@ -781,7 +781,7 @@
       இந்தக் கொள்கை 'தவறு' என்று அமைக்கப்பட்டால், தாமதமற்ற தானியங்கு உள்நுழைவை (உள்ளமைக்கப்பட்டிருந்தால்) புறக்கணிக்க முடியாது.</translation>
 <translation id="2454228136871844693">நிலைப்புத்தன்மைக்காக மேம்படுத்துதல்</translation>
 <translation id="2463034609187171371">TLSஸில் உள்ள DHE சைஃபர் சூட்களை இயக்கும்</translation>
-<translation id="2463365186486772703">பயன்பாட்டின் மொழி</translation>
+<translation id="2463365186486772703">ஆப்ஸின் மொழி</translation>
 <translation id="2466131534462628618">கேப்டிவ் போர்டல் அங்கீகாரம் ப்ராக்ஸியை நிராகரிக்கும்</translation>
 <translation id="2482676533225429905">நேட்டிவ் செய்தியிடல்</translation>
 <translation id="2483146640187052324">எந்தவொரு நெட்வொர்க் இணைப்பிலும் நெட்வொர்க் செயல்பாடுகளை யூகிக்கும்</translation>
@@ -1703,7 +1703,7 @@
 
       தானியங்கு மறுதொடக்கமானது தேர்ந்தெடுக்கப்பட்ட நேரத்தில் திட்டமிடப்படும், ஆனால் சாதனத்தைப் பயனர் தற்போது பயன்படுத்தினால், 24 மணிநேரம் வரையில் தாமதமாகலாம்.
 
-      குறிப்பு: தற்போது, உள்நுழைவுத் திரை காண்பிக்கப்படும்போதும் அல்லது கியோஸ்க் பயன்பாட்டின் அமர்வு செயலில் இருக்கும்போதும் மட்டுமே தானியங்கு மறுதொடக்கங்கள் இயக்கப்படும். இது எதிர்காலத்தில் மாற்றப்படும், ஆனால் குறிப்பிட்ட வகையிலான அமர்வு செயலில் இருந்தாலும் அல்லது இல்லை என்றாலும் கொள்கை எப்போதும் பயன்படுத்தப்படும்.
+      குறிப்பு: தற்போது, உள்நுழைவுத் திரை காண்பிக்கப்படும்போதும் அல்லது கியோஸ்க் ஆப்ஸின் அமர்வு செயலில் இருக்கும்போதும் மட்டுமே தானியங்கு மறுதொடக்கங்கள் இயக்கப்படும். இது எதிர்காலத்தில் மாற்றப்படும், ஆனால் குறிப்பிட்ட வகையிலான அமர்வு செயலில் இருந்தாலும் அல்லது இல்லை என்றாலும் கொள்கை எப்போதும் பயன்படுத்தப்படும்.
 
       கொள்கையின் மதிப்பானது வினாடிகளில் குறிப்பிடப்படும். மதிப்புகள் குறைந்தது 3600 (ஒரு மணிநேரம்) க்கு அமைக்கப்படும்.</translation>
 <translation id="4203879074082863035">ஏற்புப் பட்டியலில் உள்ள பிரிண்டர்கள் மட்டுமே பயனர்களுக்குக் காட்டப்படும்</translation>
@@ -1750,15 +1750,15 @@
       தேர்ந்தெடுத்த குறிப்பெடுக்கும் பயன்பாடானது லாக் ஸ்கிரீனில் இயக்கப்பட்டால், தேர்ந்தெடுத்த குறிப்பெடுக்கும் ஆப்ஸைத் தொடங்குவதற்கான பயனர் இடைமுக உறுப்பானது லாக் ஸ்கிரீனில் காட்டப்படும்.
       ஆப்ஸைத் தொடங்கும் போது, அதனால் லாக் ஸ்கிரீனின் மேற்பகுதியில் பயன்பாட்டுச் சாளரத்தை உருவாக்க முடியும். மேலும், லாக் ஸ்கிரீன் சூழலில் தரவு உருப்படிகளை (குறிப்புகளை) உருவாக்கும். அமர்வு திறக்கப்பட்டிருக்கும் போது, உருவாக்கிய குறிப்புகளைப் பயனரின் முதன்மை அமர்விற்கு, பயன்பாட்டால் இறக்க முடியும். தற்போது, Chrome இன் குறிப்பெடுக்கும் பயன்பாடுகள் மட்டுமே லாக் ஸ்கிரீனில் ஆதரிக்கப்படுகின்றன.
 
-      கொள்கை அமைக்கப்பட்டால், கொள்கையின் பட்டியல் மதிப்பில் பயன்பாட்டின் நீட்டிப்பு ஐடி இருந்தால் மட்டுமே லாக் ஸ்கிரீனில் ஆப்ஸை இயக்குவதற்கு, பயனர் அனுமதிக்கப்படுவார்.
+      கொள்கை அமைக்கப்பட்டால், கொள்கையின் பட்டியல் மதிப்பில் ஆப்ஸின் நீட்டிப்பு ஐடி இருந்தால் மட்டுமே லாக் ஸ்கிரீனில் ஆப்ஸை இயக்குவதற்கு, பயனர் அனுமதிக்கப்படுவார்.
       அதன் விளைவாக, இந்தக் கொள்கையைக் காலிப் பட்டியலுடன் அமைத்தால், லாக் ஸ்கிரீன் முழுவதும் குறிப்பெடுக்கும் பயன்பாடுகள் முடக்கப்படும்.
-      கொள்கையில் பயன்பாட்டின் ஐடி இருப்பதாலேயே, பயனரால் ஒரு ஆப்ஸைக் குறிப்பெடுக்கும் பயன்பாடாகப் லாக் ஸ்கிரீனில் இயக்க முடியாது. எடுத்துக்காட்டாக, Chrome 61 இல் கிடைக்கக்கூடிய பயன்பாடுகளின் தொகுப்பை இயங்குதளமானது கூடுதலாகக் கட்டுப்படுத்துகிறது.
+      கொள்கையில் ஆப்ஸின் ஐடி இருப்பதாலேயே, பயனரால் ஒரு ஆப்ஸைக் குறிப்பெடுக்கும் பயன்பாடாகப் லாக் ஸ்கிரீனில் இயக்க முடியாது. எடுத்துக்காட்டாக, Chrome 61 இல் கிடைக்கக்கூடிய பயன்பாடுகளின் தொகுப்பை இயங்குதளமானது கூடுதலாகக் கட்டுப்படுத்துகிறது.
 
       கொள்கை அமைக்கப்படவில்லை எனில், லாக் ஸ்கிரீனில் பயனர் இயக்கக்கூடிய பயன்பாடுகளின் தொகுப்பின் மீது கொள்கை விதிக்கும் எந்தக் கட்டுப்பாடுகளும் இருக்காது.</translation>
 <translation id="4313767483634435271">சாதனத்தின் குறிப்பிடப்பட்டுள்ள டாக் MAC முகவரி</translation>
 <translation id="4322842393287974810"><ph name="PRODUCT_OS_NAME" /> பதிப்பைக் கட்டுப்படுத்த, தாமதமின்றி தானாகத் துவங்கும் கியோஸ்க் ஆப்ஸை அனுமதிக்கவும்</translation>
 <translation id="4325690621216251241">கணினி ட்ரேயில் வெளியேறு பொத்தனைச் சேர்க்கவும்</translation>
-<translation id="4332177773549877617">Android பயன்பாட்டின் நிறுவல்களுக்காக, நிகழ்வுகளைப் பதிவுசெய்</translation>
+<translation id="4332177773549877617">Android ஆப்ஸின் நிறுவல்களுக்காக, நிகழ்வுகளைப் பதிவுசெய்</translation>
 <translation id="4335292026668105285">AC மின்சக்தியில் இயங்கும்போது எச்சரிக்கை உரையாடல் காண்பிக்கப்பட்டதற்கு பிறகு, பயனரின் உள்ளீடு இல்லாத நேரத்தின் நீளத்தைக் குறிக்கும்.
 
           இந்தக் கொள்கை அமைக்கப்படும்போது, இது செயலற்ற நிலைக்கான நடவடிக்கை மேற்கொள்ளவுள்ளது என்ற எச்சரிக்கை உரையாடலை <ph name="PRODUCT_OS_NAME" /> பயனருக்குக் காட்டுவதற்கு முன்பாக, எவ்வளவு நேரம் பயனர் செயலற்ற நிலையில் இருக்க வேண்டும் என்பதைக் குறிப்பிடும்.
@@ -3343,7 +3343,7 @@
       இந்தக் கொள்கை அமைக்கப்படாவிட்டால் உபநிலைப் பயனரின் சாதனத்தில் 'முதல்நிலை அணுகல் குறியீட்டைச்’ சரிபார்க்க முடியாது.</translation>
 <translation id="7625444193696794922">இந்த சாதனம் பூட்டப்பட வேண்டிய வெளியீட்டு சேனலைக் குறிப்பிடுகிறது.</translation>
 <translation id="7632724434767231364">GSSAPI லைப்ரரி பெயர்</translation>
-<translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> இல் பயன்பாட்டின் மொழியை உள்ளமைக்கிறது மற்றும் பயனர்கள் அதை மாற்றுவதைத் தடுக்கிறது. நீங்கள் இந்த அமைப்பை இயக்கினால், <ph name="PRODUCT_NAME" /> ஆனது குறிப்பிடப்பட்ட மொழியைப் பயன்படுத்தும். உள்ளமைக்கப்பட்ட மொழியானது ஆதரிக்கப்படவில்லை என்றால், அதற்கு மாற்றாக 'en-US' பயன்படுத்தப்படும். இந்த அமைப்பு முடக்கப்பட்டிருந்தால் அல்லது உள்ளமைக்கப்படவில்லை என்றால், <ph name="PRODUCT_NAME" /> ஆனது பயனர் குறிப்பிட்ட மொழியைப் பயன்படுத்தும் (உள்ளமைக்கப்பட்டால்), கணினியின் மொழியைப் பயன்படுத்தும் அல்லது 'en-US' க்கு மீட்டமைக்கப்படும்.</translation>
+<translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> இல் ஆப்ஸின் மொழியை உள்ளமைக்கிறது மற்றும் பயனர்கள் அதை மாற்றுவதைத் தடுக்கிறது. நீங்கள் இந்த அமைப்பை இயக்கினால், <ph name="PRODUCT_NAME" /> ஆனது குறிப்பிடப்பட்ட மொழியைப் பயன்படுத்தும். உள்ளமைக்கப்பட்ட மொழியானது ஆதரிக்கப்படவில்லை என்றால், அதற்கு மாற்றாக 'en-US' பயன்படுத்தப்படும். இந்த அமைப்பு முடக்கப்பட்டிருந்தால் அல்லது உள்ளமைக்கப்படவில்லை என்றால், <ph name="PRODUCT_NAME" /> ஆனது பயனர் குறிப்பிட்ட மொழியைப் பயன்படுத்தும் (உள்ளமைக்கப்பட்டால்), கணினியின் மொழியைப் பயன்படுத்தும் அல்லது 'en-US' க்கு மீட்டமைக்கப்படும்.</translation>
 <translation id="7641363659597330616">பாதுகாப்பு தொடர்பான விருப்பங்களைப் பயனர்கள் மீறிச் செயல்படுவதை அனுமதிக்காமல், <ph name="PRODUCT_NAME" /> முற்றிலும் தடுக்கும் பதிவிறக்கங்களின் வகையை உள்ளமைக்கும்.
 
       இந்தக் கொள்கையை அமைத்தால், <ph name="PRODUCT_NAME" /> சில வகையான பதிவிறக்கங்களைத் தடுப்பதோடு, பாதுகாப்பு எச்சரிக்கைகளை மீறிப் பதிவிறக்கவும் பயனரை அனுமதிக்காது.
@@ -3391,7 +3391,7 @@
 
       இந்தக் கொள்கையை நீங்கள் அமைத்தால், பயனர்கள் அதை மாற்றவோ அல்லது மேலெழுதவோ முடியாது.
 
-      குறிப்பு: தற்போது, உள்நுழைவுத் திரை காண்பிக்கப்படும்போதும் அல்லது கியோஸ்க் பயன்பாட்டின் அமர்வு செயலில் இருக்கும்போதும் மட்டுமே தானியங்கு மறுதொடக்கங்கள் இயக்கப்படும். இது எதிர்காலத்தில் மாற்றப்படும், ஆனால் குறிப்பிட்ட வகையிலான அமர்வு செயலில் இருந்தாலும் அல்லது இல்லை என்றாலும் கொள்கை எப்போதும் பயன்படுத்தப்படும்.</translation>
+      குறிப்பு: தற்போது, உள்நுழைவுத் திரை காண்பிக்கப்படும்போதும் அல்லது கியோஸ்க் ஆப்ஸின் அமர்வு செயலில் இருக்கும்போதும் மட்டுமே தானியங்கு மறுதொடக்கங்கள் இயக்கப்படும். இது எதிர்காலத்தில் மாற்றப்படும், ஆனால் குறிப்பிட்ட வகையிலான அமர்வு செயலில் இருந்தாலும் அல்லது இல்லை என்றாலும் கொள்கை எப்போதும் பயன்படுத்தப்படும்.</translation>
 <translation id="7701341006446125684">பயன்பாடுகளுக்கும் நீட்டிப்புகளுக்கும் தற்காலிகச் சேமிப்பு அளவை அமைக்கும் (பைட்களில்)</translation>
 <translation id="7709537117200051035">ஹோஸ்ட்டுக்கான அணுகலை அனுமதிக்க வேண்டுமா (சரி) அல்லது தடுக்க வேண்டுமா (தவறு) என்பதைக் குறிப்பிடும் பூலியன் கொடிக்கான அகராதியைப் பொருத்தும் ஹோஸ்ட்பெயர்கள்.
 
@@ -4038,7 +4038,7 @@
 <translation id="9105265795073104888">Android பயன்பாடுகளுக்கு ப்ராக்ஸி உள்ளமைவின் துணைக்குழு விருப்பங்கள் மட்டுமே கிடைக்கும்படி செய்யப்படும். Android பயன்பாடுகள் தானாகவே ப்ராக்ஸியைப் பயன்படுத்துவதற்குத் தேர்வுசெய்யலாம். அவை ப்ராக்ஸியைப் பயன்படுத்த வேண்டும் என நீங்கள் கட்டாயப்படுத்த முடியாது.</translation>
 <translation id="9106865192244721694">இந்தத் தளங்களில் WebUSBஐ அனுமதி</translation>
 <translation id="9112727953998243860">நிறுவனப் பிரிண்டரின் உள்ளமைவுக் கோப்பு</translation>
-<translation id="9112897538922695510">நெறிமுறை ஹேண்ட்லர்களின் பட்டியலைப் பதிவுசெய்ய உங்களை அனுமதிக்கிறது. இது மட்டும் தான் பரிந்துரைக்கப்பட்ட கொள்கையாகும். |protocol| பண்புக்கூறு "இதற்கு அனுப்பு" போன்ற அமைப்பிற்கும், |url| பண்புக்கூறு அமைப்பைச் செயல்படுத்தும் பயன்பாட்டின் URL அமைப்பிற்கும் அமைக்கப்பட்டிருக்க வேண்டும். '%s' ஆனது செயல்படுத்தப்பட்ட URL க்குப் பதிலாக மாற்றியமைக்கப்படும் படி இருந்தால், அமைப்பில் அதைச் சேர்க்கலாம்.
+<translation id="9112897538922695510">நெறிமுறை ஹேண்ட்லர்களின் பட்டியலைப் பதிவுசெய்ய உங்களை அனுமதிக்கிறது. இது மட்டும் தான் பரிந்துரைக்கப்பட்ட கொள்கையாகும். |protocol| பண்புக்கூறு "இதற்கு அனுப்பு" போன்ற அமைப்பிற்கும், |url| பண்புக்கூறு அமைப்பைச் செயல்படுத்தும் ஆப்ஸின் URL அமைப்பிற்கும் அமைக்கப்பட்டிருக்க வேண்டும். '%s' ஆனது செயல்படுத்தப்பட்ட URL க்குப் பதிலாக மாற்றியமைக்கப்படும் படி இருந்தால், அமைப்பில் அதைச் சேர்க்கலாம்.
 
           கொள்கை மூலம் பதிவுசெய்யப்பட்ட நெறிமுறை ஹேண்ட்லர்கள் பயனர் மூலம் பதிவுசெய்யப்பட்ட ஒன்றுடன் இணைக்கப்படும், மேலும் அவை இரண்டும் பயன்படுத்துவதற்குக் கிடைக்கும். புதிய இயல்புநிலை ஹேண்ட்லரை நிறுவுவதன் மூலம், பயனர் கொள்கையினால் நிறுவப்பட்ட நெறிமுறை ஹேண்ட்லர்களில் மேலெழுதலாம், ஆனால் கொள்கை மூலம் பதிவுசெய்யப்பட்ட நெறிமுறை ஹேண்ட்லரை அகற்ற முடியாது.</translation>
 <translation id="9123211093995421438">குறிப்பிட்ட ஏதேனும் நேரத்தில், நிலையான பதிப்பில் இருந்து, எத்தனை <ph name="PRODUCT_OS_NAME" /> மைல்ஸ்டோன்களுக்கு பின்னோக்கி மீட்டமைக்க அனுமதிக்கப்படும் என்ற எண்ணிக்கையைக் குறிப்பிடும்.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 52c4c0f..910eb2c3 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -55,7 +55,7 @@
 
       Nếu chính sách này được đặt, màn hình đăng nhập sẽ luôn được hiển thị bằng ngôn ngữ được cung cấp theo giá trị đầu tiên của chính sách (chính sách được định nghĩa là danh sách về khả năng tương thích chuyển tiếp).  Nếu chính sách này chưa được đặt hoặc được đặt thành danh sách trống, màn hình đăng nhập sẽ được hiển thị bằng ngôn ngữ của phiên người dùng cuối cùng.  Nếu chính sách này được đặt thành giá trị không phải là ngôn ngữ hợp lệ, màn hình đăng nhập sẽ được hiển thị bằng ngôn ngữ dự phòng (hiện tại là en-US).</translation>
 <translation id="1052499923181221200">Chính sách này không có hiệu lực trừ khi chính sách SamlInSessionPasswordChangeEnabled là true.
-      Nếu chính sách đó là true và chính sách này được đặt thành 14 chẳng hạn, thì điều đó có nghĩa là người dùng SAML sẽ nhận được thông báo trước 14 ngày rằng mật khẩu của họ sắp hết hạn vào một ngày nhất định.
+      Nếu chính sách đó là true và chính sách này được đặt thành 14 chẳng hạn, thì điều đó có nghĩa là người dùng SAML sẽ nhận được thông báo trước 14 ngày rằng mật khẩu của họ sẽ hết hạn vào một ngày nhất định.
       Sau đó, họ có thể giải quyết ngay vấn đề này bằng cách đổi mật khẩu ngay trong phiên đăng nhập và cập nhật mật khẩu trước khi hết hạn.
       Tuy nhiên, các thông báo này sẽ chỉ hiển thị nếu nhà cung cấp danh tính SAML gửi thông tin hết hạn mật khẩu tới thiết bị trong quy trình đăng nhập SAML.
       Nếu bạn đặt chính sách này thành 0, thì người dùng sẽ không nhận được thông báo trước. Họ sẽ chỉ nhận được thông báo khi mật khẩu đã hết hạn.
@@ -332,15 +332,15 @@
 <translation id="1502843533062797703">Cho phép chặn phần mềm bên thứ ba thêm mã thực thi</translation>
 <translation id="1504431521196476721">Chứng thực từ xa</translation>
 <translation id="1507382822467487898">
-          Định cấu hình địa chỉ MAC (kiểm soát truy cập nội dung đa phương tiện) sẽ được sử dụng khi kết nối đế sạc với thiết bị.
+          Định cấu hình địa chỉ MAC (điều khiển truy cập phương tiện) sẽ được sử dụng khi kết nối đế sạc với thiết bị.
 
-          Khi kết nối đế sạc với một số kiểu thiết bị, địa chỉ MAC cho đế sạc chỉ định của thiết bị sẽ được dùng để xác định thiết bị trên Ethernet theo mặc định. Chính sách này cho phép quản trị viên thay đổi nguồn của địa chỉ MAC khi được gắn vào đế sạc.
+          Khi kết nối đế sạc với một số kiểu thiết bị, địa chỉ MAC chỉ định cho đế sạc của thiết bị sẽ được dùng để xác định thiết bị trên Ethernet theo mặc định. Chính sách này cho phép quản trị viên thay đổi nguồn của địa chỉ MAC khi được gắn vào đế sạc.
 
-          Nếu bạn chọn 'DeviceDockMacAddress' hoặc không đặt chính sách này, thì địa chỉ MAC cho đế sạc chỉ định của thiết bị sẽ được sử dụng.
+          Nếu bạn chọn 'DeviceDockMacAddress' hoặc không đặt chính sách này, thì địa chỉ MAC chỉ định cho đế sạc của thiết bị sẽ được sử dụng.
 
-          Nếu bạn chọn 'DeviceNicMacAddress', thì địa chỉ NIC (bộ điều khiển giao diện mạng) MAC của thiết bị sẽ được sử dụng.
+          Nếu bạn chọn 'DeviceNicMacAddress', thì địa chỉ MAC trên NIC (bộ điều khiển giao diện mạng) của thiết bị sẽ được sử dụng.
 
-          Nếu bạn chọn 'DockNicMacAddress', thì địa chỉ NIC MAC của đế sạc sẽ được sử dụng.
+          Nếu bạn chọn 'DockNicMacAddress', thì địa chỉ MAC trên NIC của đế sạc sẽ được sử dụng.
 
           Người dùng không thể thay đổi tùy chọn cài đặt này.</translation>
 <translation id="1507957856411744193">Nếu bạn đặt chính sách này thành true, thì <ph name="PRODUCT_NAME" /> sẽ kết nối với Thiết bị truyền trên tất cả các địa chỉ IP, chứ không chỉ các địa chỉ riêng RFC1918/RFC4913.
@@ -1214,15 +1214,15 @@
 <translation id="3072045631333522102">Trình bảo vệ màn hình được sử dụng trên màn hình đăng nhập ở chế độ bán lẻ</translation>
 <translation id="3072847235228302527">Đặt Điều khoản dịch vụ cho một tài khoản cục bộ trên thiết bị</translation>
 <translation id="3077183141551274418">Bật hoặc tắt tính năng chu kỳ sử dụng tab</translation>
-<translation id="3079417254871857650">Chỉ định hành động cần thực hiện khi thư mục gốc của người dùng được tạo bằng loại mã hóa ecryptfs.
+<translation id="3079417254871857650">Chỉ định hành động cần được thực hiện khi thư mục gốc của người dùng được tạo bằng loại mã hóa ecryptfs.
 
-      Nếu bạn đặt chính sách này thành 'DisallowArc', thì các ứng dụng Android sẽ tắt đối với người dùng và quá trình di chuyển từ loại mã hóa ecryptfs sang ext4 sẽ không diễn ra. Các ứng dụng Android sẽ vẫn chạy trong trường hợp thư mục gốc đã được mã hóa ext4.
+      Nếu bạn đặt chính sách này thành 'DisallowArc', thì người dùng sẽ không thể sử dụng được các ứng dụng Android và quá trình di chuyển từ loại mã hóa ecryptfs sang ext4 sẽ không diễn ra. Các ứng dụng Android sẽ vẫn chạy trong trường hợp thư mục gốc đã được mã hóa ext4.
 
       Nếu bạn đặt chính sách này thành 'Migrate', thì các thư mục gốc đã mã hóa ecryptfs sẽ tự động di chuyển sang loại mã hóa ext4 khi đăng nhập mà không cần xin phép người dùng.
 
-      Nếu bạn đặt chính sách này thành 'Wipe', thì các thư mục gốc đã mã hóa ecryptfs sẽ bị xóa khi đăng nhập. Thay vào đó, các thư mục gốc mới đã mã hóa ext4 sẽ được tạo. Cảnh báo: Thao tác này sẽ xóa dữ liệu trên máy của người dùng.
+      Nếu bạn đặt chính sách này thành 'Wipe', thì các thư mục gốc đã mã hóa ecryptfs sẽ bị xóa khi đăng nhập và các thư mục gốc mới đã mã hóa ext4 sẽ được tạo. Cảnh báo: Thao tác này sẽ xóa dữ liệu trên máy của người dùng.
 
-      Nếu bạn đặt chính sách này thành 'MinimalMigrate', thì các thư mục gốc đã mã hóa ecryptfs sẽ bị xóa khi đăng nhập. Thay vào đó, các thư mục gốc mới đã mã hóa ext4 sẽ được tạo. Tuy nhiên, hệ thống sẽ cố bảo toàn mã thông báo đăng nhập để người dùng không phải đăng nhập lại. Cảnh báo: Thao tác này sẽ xóa dữ liệu trên máy của người dùng.
+      Nếu bạn đặt chính sách này thành 'MinimalMigrate', thì các thư mục gốc đã mã hóa ecryptfs sẽ bị xóa khi đăng nhập và các thư mục gốc mới đã mã hóa ext4 sẽ được tạo. Tuy nhiên, hệ thống sẽ cố bảo toàn mã đăng nhập để người dùng không phải đăng nhập lại. Cảnh báo: Thao tác này sẽ xóa dữ liệu trên máy của người dùng.
 
       Nếu bạn đặt chính sách này thành một tùy chọn không được hỗ trợ nữa ('AskUser' hoặc 'AskForEcryptfsArcUsers'), thì chính sách này sẽ được xử lý như thể bạn đã chọn 'Migrate'.
 
@@ -1260,7 +1260,7 @@
           Nếu bạn tắt tùy chọn cài đặt này, <ph name="PRODUCT_NAME" />sẽ chỉ sử dụng các máy chủ Nhắn tin gốc được cài đặt ở cấp hệ thống.
 
           Nếu bạn không đặt tùy chọn cài đặt này, <ph name="PRODUCT_NAME" /> sẽ cho phép sử dụng các máy chủ Nhắn tin gốc ở cấp người dùng.</translation>
-<translation id="3177802893484440532">Cần phải kiểm tra OCSP/CRL trực tuyến đối với điểm kết nối tin cậy cục bộ</translation>
+<translation id="3177802893484440532">Cần phải kiểm tra OCSP/CRL trực tuyến đối với neo tin cậy cục bộ</translation>
 <translation id="3185009703220253572">kể từ phiên bản <ph name="SINCE_VERSION" /></translation>
 <translation id="3187220842205194486">Các ứng dụng Android không thể truy cập vào khóa công ty. Chính sách này không ảnh hưởng đến các ứng dụng đó.</translation>
 <translation id="3205825995289802549">Mở tối đa cửa sổ trình duyệt đầu tiên trong lần chạy đầu tiên</translation>
@@ -1296,9 +1296,9 @@
       Nếu cài đặt này được bật hoặc không được định cấu hình, người dùng có thể bật proxy máy in máy chủ ảo bằng cách xác thực bằng tài khoản Google của họ.
 
       Nếu cài đặt này được bật, người dùng không thể bật proxy và máy sẽ không được phép chia sẻ máy in với <ph name="CLOUD_PRINT_NAME" />.</translation>
-<translation id="3312206664202507568">Bật một trang tại chrome://password-change cho phép người dùng SAML đổi mật khẩu SAML ngay trong phiên đăng nhập. Điều này đảm bảo rằng mật khẩu SAML và mật khẩu màn hình khóa của thiết bị luôn đồng bộ.
+<translation id="3312206664202507568">Cho phép một trang tại chrome://password-change cho phép người dùng SAML đổi mật khẩu SAML ngay trong phiên đăng nhập. Điều này đảm bảo rằng mật khẩu SAML và mật khẩu màn hình khóa của thiết bị luôn đồng bộ.
 
-      Chính sách này cũng cho phép các thông báo cảnh báo người dùng SAML khi mật khẩu SAML sắp hết hạn để họ có thể giải quyết vấn đề này ngay lập tức bằng cách đổi mật khẩu ngay trong phiên đăng nhập.
+      Chính sách này cũng cho phép các thông báo cảnh báo người dùng SAML khi mật khẩu SAML của họ sắp hết hạn để họ có thể giải quyết vấn đề này ngay lập tức bằng cách đổi mật khẩu ngay trong phiên đăng nhập.
       Tuy nhiên, các thông báo này sẽ chỉ hiển thị nếu nhà cung cấp danh tính SAML gửi thông tin hết hạn mật khẩu tới thiết bị trong quy trình đăng nhập SAML.
 
       Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi hoặc ghi đè chính sách.</translation>
@@ -1540,15 +1540,15 @@
 <translation id="382476126209906314">Định cấu hình tiền tố TalkGadget cho máy chủ truy cập từ xa</translation>
 <translation id="3824972131618513497">Kiểm soát các tùy chọn cài đặt liên quan đến quản lý nguồn và khởi động lại.</translation>
 <translation id="3826475866868158882">Đã bật Dịch vụ vị trí của Google</translation>
-<translation id="3831054243924627613">Chính sách này kiểm soát trạng thái ban đầu của dịch vụ sao lưu và khôi phục trên Android.
+<translation id="3831054243924627613">Chính sách này kiểm soát trạng thái ban đầu của dịch vụ sao lưu và khôi phục của Android.
 
-      Khi bạn không định cấu hình chính sách này hoặc đặt chính sách thành <ph name="BR_DISABLED" />, dịch vụ sao lưu và khôi phục trên Android sẽ tắt lúc ban đầu.
+      Khi bạn không định cấu hình chính sách này hoặc đặt chính sách thành <ph name="BR_DISABLED" />, dịch vụ sao lưu và khôi phục của Android sẽ tắt ngay từ đầu.
 
-      Khi bạn đặt chính sách này thành <ph name="BR_ENABLED" />, dịch vụ sao lưu và khôi phục trên Android sẽ bật lúc ban đầu.
+      Khi bạn đặt chính sách này thành <ph name="BR_ENABLED" />, dịch vụ sao lưu và khôi phục của Android sẽ bật ngay từ đầu.
 
-      Khi bạn đặt chính sách này thành <ph name="BR_UNDER_USER_CONTROL" />, người dùng sẽ được yêu cầu chọn xem có sử dụng dịch vụ sao lưu và khôi phục trên Android hay không. Nếu người dùng bật dịch vụ sao lưu và khôi phục, thì dữ liệu ứng dụng Android sẽ được tải lên máy chủ sao lưu của Android và được khôi phục từ các máy chủ đó khi cài đặt lại ứng dụng cho các ứng dụng tương thích.
+      Khi bạn đặt chính sách này thành <ph name="BR_UNDER_USER_CONTROL" />, người dùng sẽ được yêu cầu chọn xem có sử dụng dịch vụ sao lưu và khôi phục của Android hay không. Nếu người dùng bật dịch vụ sao lưu và khôi phục, thì dữ liệu ứng dụng Android sẽ được tải lên máy chủ sao lưu của Android và được khôi phục từ các máy chủ đó khi cài đặt lại các ứng dụng tương thích.
 
-      Xin lưu ý rằng chính sách này chỉ kiểm soát trạng thái của dịch vụ sao lưu và khôi phục trên Android trong quá trình thiết lập ban đầu. Sau đó, người dùng có thể mở phần cài đặt của Android rồi bật/tắt dịch vụ sao lưu và khôi phục trên Android.</translation>
+      Xin lưu ý rằng chính sách này chỉ kiểm soát trạng thái của dịch vụ sao lưu và khôi phục của Android trong quá trình thiết lập ban đầu. Sau đó, người dùng có thể mở phần cài đặt của Android rồi bật/tắt dịch vụ sao lưu và khôi phục của Android.</translation>
 <translation id="3831376478177535007">Khi bạn bật cài đặt này, <ph name="PRODUCT_NAME" /> sẽ cho phép tin cậy các chứng chỉ do hoạt động của Cơ sở hạ tầng khóa công khai (PKI) cũ của Symantec Corporation phát hành nếu các chứng chỉ xác thực thành công và liên kết với một chứng chỉ CA được công nhận.
 
       Lưu ý rằng chính sách này phụ thuộc vào việc hệ điều hành vẫn công nhận các chứng chỉ từ hạ tầng cũ của Symantec. Nếu bản cập nhật hệ điều hành thay đổi cách xử lý các chứng chỉ đó của hệ điều hành, thì chính sách này sẽ không còn hiệu lực nữa.  Ngoài ra, chính sách này có vai trò là giải pháp tạm thời để cho các doanh nghiệp có thêm thời gian di chuyển đổi chứng chỉ Symantec cũ. Chính sách này sẽ bị loại bỏ vào đúng hoặc khoảng ngày 01 tháng 01 năm 2019.
@@ -1852,7 +1852,7 @@
       Lưu ý rằng chính sách chứa ID ứng dụng không nhất thiết có nghĩa là người dùng sẽ có thể bật ứng dụng làm ứng dụng ghi chú trên màn hình khóa - ví dụ: trên Chrome 61, tập hợp các ứng dụng hiện có bị nền tảng hạn chế thêm.
 
       Nếu không đặt chính sách thì sẽ không có hạn chế nào được chính sách áp dụng cho tập hợp các ứng dụng mà người dùng có thể bật trên màn hình khóa.</translation>
-<translation id="4313767483634435271">Địa chỉ MAC cho đế sạc chỉ định của thiết bị</translation>
+<translation id="4313767483634435271">Địa chỉ MAC chỉ định cho đế sạc của thiết bị</translation>
 <translation id="4322842393287974810">Cho phép ứng dụng kiosk tự động khởi chạy với độ trễ bằng không kiểm soát phiên bản <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="4325690621216251241">Thêm một nút đăng xuất vào khay hệ thống</translation>
 <translation id="4332177773549877617">Ghi lại các sự kiện cho lượt cài đặt ứng dụng Android</translation>
@@ -2400,7 +2400,7 @@
       Nếu các quy tắc mâu thuẫn với nhau thì <ph name="PRODUCT_NAME" /> sử dụng quy tắc cụ thể nhất.</translation>
 <translation id="5475361623548884387">Bật tính năng in</translation>
 <translation id="547601067149622666">Không cho phép quảng cáo trên các trang web chứa quảng cáo xâm nhập</translation>
-<translation id="5483065054530244863">Cho phép các chứng chỉ đã ký SHA-1 do điểm kết nối tin cậy cục bộ cấp</translation>
+<translation id="5483065054530244863">Cho phép các chứng chỉ SHA-1 có chữ ký do neo tin cậy cục bộ phát hành</translation>
 <translation id="5483777239978559943">Chính sách này không còn dùng nữa. Vui lòng sử dụng <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> để kiểm soát tính sẵn có của plugin Flash và <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> để kiểm soát xem có phải dùng trình xem PDF tích hợp để mở tệp PDF hay không.
 
       Chỉ định danh sách các plugin mà người dùng có thể bật hoặc tắt trong <ph name="PRODUCT_NAME" />.
@@ -2578,7 +2578,7 @@
 <translation id="5765780083710877561">Mô tả:</translation>
 <translation id="5770738360657678870">Kênh nhà phát triển (có thể không ổn định)</translation>
 <translation id="5774856474228476867">URL tìm kiếm nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
-<translation id="5775235485119094648">Sạc pin khi thiết bị nằm trong phạm vi cố định.</translation>
+<translation id="5775235485119094648">Sạc pin khi thiết bị ở trong phạm vi cố định.</translation>
 <translation id="5776485039795852974">Hỏi mỗi lần trang web muốn hiển thị thông báo trên màn hình</translation>
 <translation id="5781412041848781654">Chỉ định thư viện GSSAPI nào được sử dụng để xác thực HTTP. Bạn có thể chỉ đặt tên thư viện hoặc đường dẫn đầy đủ.
 
@@ -2685,7 +2685,7 @@
 <translation id="5950205771952201658">Vì các kiểm tra lỗi phần mềm, thu hồi trực tuyến không mang lại lợi ích bảo mật hiệu quả nên chúng bị tắt theo mặc định trong <ph name="PRODUCT_NAME" /> phiên bản 19 trở lên. Bằng cách đặt chính sách này thành true, hoạt động trước đó được khôi phục và các kiểm tra OCSP/CRL trực tuyến sẽ được thực hiện.
 
       Nếu chính sách không được đặt hoặc được đặt thành false, khi đó <ph name="PRODUCT_NAME" /> sẽ không thực hiện các kiểm tra thu hồi trực tuyến trong <ph name="PRODUCT_NAME" /> 19 và cao hơn.</translation>
-<translation id="5961137303188584693">Địa chỉ NIC MAC tích hợp sẵn của thiết bị</translation>
+<translation id="5961137303188584693">Địa chỉ MAC trên NIC tích hợp của thiết bị</translation>
 <translation id="5966615072639944554">Tiện ích được phép sử dụng API chứng thực từ xa</translation>
 <translation id="5983708779415553259">Thao tác mặc định cho trang web không nằm trong bất kỳ gói nội dung nào</translation>
 <translation id="5997543603646547632">Sử dụng đồng hồ 24 giờ theo mặc định</translation>
@@ -2732,9 +2732,9 @@
 <translation id="6133088669883929098">Cho phép tất cả các trang web sử dụng tạo khóa</translation>
 <translation id="6136537398661737682">Chính sách này kiểm soát trạng thái ban đầu của Dịch vụ vị trí của Google.
 
-      Khi bạn không định cấu hình chính sách này hoặc đặt chính sách thành <ph name="GLS_DISABLED" />, Dịch vụ vị trí của Google sẽ tắt lúc ban đầu.
+      Khi bạn không định cấu hình chính sách này hoặc đặt chính sách thành <ph name="GLS_DISABLED" />, Dịch vụ vị trí của Google sẽ tắt ngay từ đầu.
 
-      Khi bạn đặt chính sách này thành <ph name="GLS_ENABLED" />, Dịch vụ vị trí của Google sẽ bật lúc ban đầu.
+      Khi bạn đặt chính sách này thành <ph name="GLS_ENABLED" />, Dịch vụ vị trí của Google sẽ bật ngay từ đầu.
 
       Khi bạn đặt chính sách này thành <ph name="GLS_UNDER_USER_CONTROL" />, người dùng sẽ được yêu cầu chọn có sử dụng Dịch vụ vị trí của Google hay không. Điều này sẽ cho phép các ứng dụng Android dùng dịch vụ này để truy vấn vị trí thiết bị, đồng thời cho phép gửi dữ liệu vị trí ẩn danh tới Google.
 
@@ -2816,7 +2816,7 @@
      Nếu tắt, dữ liệu biểu mẫu tự động điền sẽ không được nhập.
 
       Nếu chính sách này không được đặt, người dùng có thể được hỏi có nhập hay không hoặc quá trình nhập có thể diễn ra tự động.</translation>
-<translation id="6221175752766085998">Cho phép các chứng chỉ cấp bởi điểm kết nối tin cậy cục bộ không có tiện ích subjectAlternativeName</translation>
+<translation id="6221175752766085998">Cho phép các chứng chỉ do các neo tin cậy cục bộ phát hành mà không có tiện ích subjectAlternativeName</translation>
 <translation id="6224304369267200483">URL/miền đã tự động cho phép chứng thực Khóa bảo mật trực tiếp</translation>
 <translation id="6233173491898450179">Đặt thư mục tải xuống</translation>
 <translation id="6244210204546589761">Các URL sẽ mở khi khởi động</translation>
@@ -3039,7 +3039,7 @@
       Chuỗi này có thể chứa các biến ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, ${MACHINE_NAME} mà sẽ được thay thế bằng các giá trị trên thiết bị trước khi sử dụng làm tên máy chủ. Giá trị thay thế thu được sẽ là tên máy chủ hợp lệ (theo RFC 1035, mục 3.1).
 
       Nếu bạn không đặt chính sách này hoặc giá trị sau khi thay thế không phải là tên máy chủ hợp lệ thì tên máy chủ sẽ không được đặt trong yêu cầu DHCP. </translation>
-<translation id="6833988859168635883">Khởi động, Trang chủ và trang Tab mới</translation>
+<translation id="6833988859168635883">Trang Khởi động, Trang chủ và trang Tab mới</translation>
 <translation id="6835883744948188639">Nên hiển thị lời nhắc định kỳ cho người dùng cho biết cần chạy lại</translation>
 <translation id="6837480141980366278">Kiểm soát xem ứng dụng DNS tích hợp có được dùng trong <ph name="PRODUCT_NAME" /> hay không.
 
@@ -3209,15 +3209,15 @@
       Nếu bạn bật hoặc tắt cài đặt này, người dùng không thể thay đổi hoặc ghi đè cài đặt này.
 
       Nếu không đặt chính sách này, người dùng có thể chọn liệu họ có muốn được yêu cầu cung cấp mật khẩu để mở khóa thiết bị hay không.</translation>
-<translation id="7107148737865880402">Bật chính sách quản lý nguồn cho tính năng sạc pin qua USB.
+<translation id="7107148737865880402">Bật chính sách quản lý điện chia sẻ điện qua USB.
 
-          Một số thiết bị có cổng USB đặc trưng được đánh dấu bằng biểu tượng pin hoặc tia chớp. Có thể dùng cổng USB này để sạc các thiết bị như điện thoại di động sử dụng pin hệ thống. Chính sách này ảnh hưởng đến hoạt động sạc của cổng này khi hệ thống ở chế độ ngủ và tắt. Chính sách này không ảnh hưởng đến các cổng USB khác và hoạt động sạc khi hệ thống ở chế độ bật.
+          Một số thiết bị có cổng USB đặc trưng được đánh dấu bằng biểu tượng pin hoặc tia chớp, mà có thể dùng để sạc các thiết bị như điện thoại di động bằng cách sử dụng pin của hệ thống. Chính sách này ảnh hưởng đến hoạt động sạc của cổng này khi hệ thống ở chế độ ngủ và tắt. Chính sách này không ảnh hưởng đến các cổng USB khác và hoạt động sạc khi hệ thống ở chế độ thức giấc.
 
-          Khi ở chế độ bật, cổng USB sẽ luôn cấp nguồn điện.
+          Khi ở chế độ thức giấc, cổng USB sẽ luôn cấp điện.
 
-          Khi ở chế độ ngủ, nếu bạn đặt chính sách này thành true, thì nguồn điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường hoặc khi mức pin &gt; 50%. Nếu không, nguồn điện sẽ không được cấp.
+          Khi ở chế độ ngủ, nếu bạn đặt chính sách này thành true, thì điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường hoặc khi mức pin &gt; 50%. Nếu không, điện sẽ không được cấp.
 
-          Khi ở chế độ tắt, nếu bạn đặt chính sách này thành true, thì nguồn điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường. Nếu không, nguồn điện sẽ không được cấp.
+          Khi ở chế độ tắt, nếu bạn đặt chính sách này thành true, thì điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường. Nếu không, điện sẽ không được cấp.
 
           Nếu bạn không đặt chính sách này, thì chính sách sẽ bật và người dùng không thể tắt được.</translation>
 <translation id="7115494316187648452">Xác định xem liệu có khởi động quá trình <ph name="PRODUCT_NAME" /> khi đăng nhập hệ điều hành và tiếp tục chạy khi cửa sổ trình duyệt cuối cùng đóng hay không, để cho phép các ứng dụng nền và phiên duyệt web hiện tại vẫn hiện hoạt, bao gồm bất kỳ cookie phiên nào. Quá trình nền hiển thị một biểu tượng trong khay hệ thống và luôn có thể được đóng từ đó.
@@ -3821,7 +3821,7 @@
 <translation id="8176035528522326671">Cho phép người dùng doanh nghiệp trở thành người dùng chính duy nhất có nhiều hồ sơ (Hành vi mặc định cho người dùng do doanh nghiệp quản lý)</translation>
 <translation id="8214600119442850823">Định cấu hình trình quản lý mật khẩu.</translation>
 <translation id="8217516105848565518">Chính sách này không còn dùng nữa. Thay vào đó, hãy sử dụng RemoteAccessHostDomainList.</translation>
-<translation id="8244171102276095471">Bật bộ mã hóa RC4 trong TLS</translation>
+<translation id="8244171102276095471">Bật bộ mật mã RC4 trong TLS</translation>
 <translation id="8244525275280476362">Độ trễ tìm nạp tối đa sau khi hủy hiệu lực chính sách</translation>
 <translation id="8256688113167012935">Kiểm soát tên tài khoản <ph name="PRODUCT_OS_NAME" /> hiển thị trên màn hình đăng nhập cho tài khoản trong thiết bị tương ứng.
 
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge.cc b/components/send_tab_to_self/send_tab_to_self_bridge.cc
index de3acfb7..9aa757d6 100644
--- a/components/send_tab_to_self/send_tab_to_self_bridge.cc
+++ b/components/send_tab_to_self/send_tab_to_self_bridge.cc
@@ -145,6 +145,11 @@
     std::unique_ptr<syncer::MetadataChangeList> metadata_change_list,
     syncer::EntityChangeList entity_changes) {
   std::vector<const SendTabToSelfEntry*> added;
+
+  // The opened vector will accumulate both added entries that are already
+  // opened as well as existing entries that have been updated to be marked as
+  // opened.
+  std::vector<const SendTabToSelfEntry*> opened;
   std::vector<std::string> removed;
   std::unique_ptr<ModelTypeStore::WriteBatch> batch =
       store_->CreateWriteBatch();
@@ -158,28 +163,40 @@
         removed.push_back(change->storage_key());
       }
     } else {
-      // syncer::EntityChange::ACTION_UPDATE is not supported by this bridge
-      DCHECK(change->type() == syncer::EntityChange::ACTION_ADD);
 
       const sync_pb::SendTabToSelfSpecifics& specifics =
           change->data().specifics.send_tab_to_self();
 
-      std::unique_ptr<SendTabToSelfEntry> entry =
+      std::unique_ptr<SendTabToSelfEntry> remote_entry =
           SendTabToSelfEntry::FromProto(specifics, clock_->Now());
-      if (!entry) {
+      if (!remote_entry) {
         continue;  // Skip invalid entries.
       }
-      // This entry is new. Add it to the model if it hasn't expired.
-      if (entry->IsExpired(clock_->Now())) {
+      if (remote_entry->IsExpired(clock_->Now())) {
         // Remove expired data from server.
         change_processor()->Delete(guid, batch->GetMetadataChangeList());
       } else {
-        added.push_back(entry.get());
-        SendTabToSelfLocal entry_pb = entry->AsLocalProto();
-        entries_[entry->GetGUID()] = std::move(entry);
+        SendTabToSelfEntry* local_entry =
+            GetMutableEntryByGUID(remote_entry->GetGUID());
+        SendTabToSelfLocal remote_entry_pb = remote_entry->AsLocalProto();
+
+        if (local_entry == nullptr) {
+          // This remote_entry is new. Add it to the model.
+          added.push_back(remote_entry.get());
+          if (remote_entry->IsOpened()) {
+            opened.push_back(remote_entry.get());
+          }
+          entries_[remote_entry->GetGUID()] = std::move(remote_entry);
+        } else {
+          // Update existing model if entries have been opened.
+          if (remote_entry->IsOpened() && !local_entry->IsOpened()) {
+            local_entry->MarkOpened();
+            opened.push_back(local_entry);
+          }
+        }
 
         // Write to the store.
-        batch->WriteData(guid, entry_pb.SerializeAsString());
+        batch->WriteData(guid, remote_entry_pb.SerializeAsString());
       }
     }
   }
@@ -193,6 +210,9 @@
   if (!added.empty()) {
     NotifyRemoteSendTabToSelfEntryAdded(added);
   }
+  if (!opened.empty()) {
+    NotifyRemoteSendTabToSelfEntryOpened(opened);
+  }
 
   return base::nullopt;
 }
@@ -357,6 +377,7 @@
   if (!entry) {
     return;
   }
+
   entry->SetNotificationDismissed(true);
 
   std::unique_ptr<ModelTypeStore::WriteBatch> batch =
@@ -366,6 +387,29 @@
   Commit(std::move(batch));
 }
 
+void SendTabToSelfBridge::MarkEntryOpened(const std::string& guid) {
+  SendTabToSelfEntry* entry = GetMutableEntryByGUID(guid);
+  // Assure that an entry with that guid exists.
+  if (!entry) {
+    return;
+  }
+
+  DCHECK(change_processor()->IsTrackingMetadata());
+
+  entry->MarkOpened();
+
+  std::unique_ptr<ModelTypeStore::WriteBatch> batch =
+      store_->CreateWriteBatch();
+
+  auto entity_data = CopyToEntityData(entry->AsLocalProto().specifics());
+
+  change_processor()->Put(guid, std::move(entity_data),
+                          batch->GetMetadataChangeList());
+
+  batch->WriteData(guid, entry->AsLocalProto().SerializeAsString());
+  Commit(std::move(batch));
+}
+
 void SendTabToSelfBridge::OnURLsDeleted(
     history::HistoryService* history_service,
     const history::DeletionInfo& deletion_info) {
@@ -446,6 +490,13 @@
   }
 }
 
+void SendTabToSelfBridge::NotifyRemoteSendTabToSelfEntryOpened(
+    const std::vector<const SendTabToSelfEntry*>& opened_entries) {
+  for (SendTabToSelfModelObserver& observer : observers_) {
+    observer.EntriesOpenedRemotely(opened_entries);
+  }
+}
+
 void SendTabToSelfBridge::NotifySendTabToSelfModelLoaded() {
   for (SendTabToSelfModelObserver& observer : observers_) {
     observer.SendTabToSelfModelLoaded();
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge.h b/components/send_tab_to_self/send_tab_to_self_bridge.h
index c99353be..b8c0aa57 100644
--- a/components/send_tab_to_self/send_tab_to_self_bridge.h
+++ b/components/send_tab_to_self/send_tab_to_self_bridge.h
@@ -80,6 +80,7 @@
       const std::string& target_device_cache_guid) override;
   void DeleteEntry(const std::string& guid) override;
   void DismissEntry(const std::string& guid) override;
+  void MarkEntryOpened(const std::string& guid) override;
   bool IsReady() override;
   std::map<std::string, TargetDeviceInfo> GetTargetDeviceNameToCacheInfoMap()
       override;
@@ -97,7 +98,7 @@
   using SendTabToSelfEntries =
       std::map<std::string, std::unique_ptr<SendTabToSelfEntry>>;
 
-  // Notify all observers of any added |entries| when they are added the the
+  // Notify all observers of any added |new_entries| when they are added the the
   // model via sync.
   void NotifyRemoteSendTabToSelfEntryAdded(
       const std::vector<const SendTabToSelfEntry*>& new_entries);
@@ -107,6 +108,11 @@
   void NotifyRemoteSendTabToSelfEntryDeleted(
       const std::vector<std::string>& guids);
 
+  // Notify all observers when any new or existing |opened_entries| have been
+  // marked as opened in the model via sync.
+  void NotifyRemoteSendTabToSelfEntryOpened(
+      const std::vector<const SendTabToSelfEntry*>& opened_entries);
+
   // Notify all observers that the model is loaded;
   void NotifySendTabToSelfModelLoaded();
 
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc b/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc
index 43c7741a..d4c5638 100644
--- a/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc
+++ b/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc
@@ -35,6 +35,7 @@
 namespace {
 
 using testing::_;
+using testing::AllOf;
 using testing::ElementsAre;
 using testing::IsEmpty;
 using testing::Pair;
@@ -77,10 +78,16 @@
   MOCK_METHOD0(SendTabToSelfModelLoaded, void());
   MOCK_METHOD1(EntriesAddedRemotely,
                void(const std::vector<const SendTabToSelfEntry*>&));
+  MOCK_METHOD1(EntriesOpenedRemotely,
+               void(const std::vector<const SendTabToSelfEntry*>&));
 
   MOCK_METHOD1(EntriesRemovedRemotely, void(const std::vector<std::string>&));
 };
 
+MATCHER_P(GuidIs, e, "") {
+  return testing::ExplainMatchResult(e, arg->GetGUID(), result_listener);
+}
+
 // TODO(crbug.com/958016): Extract into its own file.
 // Mock DeviceInfoTracker class for setting device info.
 class TestDeviceInfoTracker : public syncer::DeviceInfoTracker {
@@ -860,6 +867,45 @@
                                    Pair("new_name", device_info_2)));
 }
 
+TEST_F(SendTabToSelfBridgeTest, NotifyRemoteSendTabToSelfEntryOpened) {
+  base::test::ScopedFeatureList scoped_features;
+  scoped_features.InitWithFeatures(
+      /*enabled_features=*/{kSendTabToSelfShowSendingUI,
+                            kSendTabToSelfBroadcast},
+      /*disabled_features=*/{});
+
+  InitializeBridge();
+  SetLocalDeviceCacheGuid("Device1");
+
+  // Add on entry targeting this device and another targeting another device.
+  syncer::EntityChangeList remote_input;
+  SendTabToSelfEntry entry1("guid1", GURL("http://www.example.com/"), "title",
+                            AdvanceAndGetTime(), AdvanceAndGetTime(), "device",
+                            "Device1");
+  SendTabToSelfEntry entry2("guid2", GURL("http://www.example.com/"), "title",
+                            AdvanceAndGetTime(), AdvanceAndGetTime(), "device",
+                            "Device2");
+  remote_input.push_back(
+      syncer::EntityChange::CreateAdd("guid1", MakeEntityData(entry1)));
+  remote_input.push_back(
+      syncer::EntityChange::CreateAdd("guid2", MakeEntityData(entry2)));
+
+  entry1.MarkOpened();
+  remote_input.push_back(
+      syncer::EntityChange::CreateUpdate("guid1", MakeEntityData(entry1)));
+
+  auto metadata_change_list =
+      std::make_unique<syncer::InMemoryMetadataChangeList>();
+
+  // an entry with "guid1" should be sent to the observers.
+  EXPECT_CALL(*mock_observer(), EntriesOpenedRemotely(AllOf(
+                                    SizeIs(1), ElementsAre(GuidIs("guid1")))));
+  bridge()->MergeSyncData(std::move(metadata_change_list),
+                          std::move(remote_input));
+
+  EXPECT_EQ(2ul, bridge()->GetAllGuids().size());
+}
+
 }  // namespace
 
 }  // namespace send_tab_to_self
diff --git a/components/send_tab_to_self/send_tab_to_self_entry.cc b/components/send_tab_to_self/send_tab_to_self_entry.cc
index 30d63b1..ffac4e2fd 100644
--- a/components/send_tab_to_self/send_tab_to_self_entry.cc
+++ b/components/send_tab_to_self/send_tab_to_self_entry.cc
@@ -45,7 +45,8 @@
       target_device_sync_cache_guid_(target_device_sync_cache_guid),
       shared_time_(shared_time),
       original_navigation_time_(original_navigation_time),
-      notification_dismissed_(false) {
+      notification_dismissed_(false),
+      opened_(false) {
   DCHECK(!guid_.empty());
   DCHECK(url_.is_valid());
   DCHECK(base::IsStringUTF8(guid_));
@@ -84,6 +85,14 @@
   return target_device_sync_cache_guid_;
 }
 
+bool SendTabToSelfEntry::IsOpened() const {
+  return opened_;
+}
+
+void SendTabToSelfEntry::MarkOpened() {
+  opened_ = true;
+}
+
 void SendTabToSelfEntry::SetNotificationDismissed(bool notification_dismissed) {
   notification_dismissed_ = notification_dismissed;
 }
@@ -104,6 +113,7 @@
       TimeToProtoTime(GetOriginalNavigationTime()));
   pb_entry->set_device_name(GetDeviceName());
   pb_entry->set_target_device_sync_cache_guid(GetTargetDeviceSyncCacheGuid());
+  pb_entry->set_opened(IsOpened());
   local_entry.set_notification_dismissed(GetNotificationDismissed());
 
   return local_entry;
@@ -133,10 +143,17 @@
     navigation_time = ProtoTimeToTime(pb_entry.navigation_time_usec());
   }
 
+  bool opened = pb_entry.opened();
+
   // Protobuf parsing enforces utf8 encoding for all strings.
-  return std::make_unique<SendTabToSelfEntry>(
+  auto entry = std::make_unique<SendTabToSelfEntry>(
       guid, url, pb_entry.title(), shared_time, navigation_time,
       pb_entry.device_name(), pb_entry.target_device_sync_cache_guid());
+
+  if (opened) {
+    entry->MarkOpened();
+  }
+  return entry;
 }
 
 std::unique_ptr<SendTabToSelfEntry> SendTabToSelfEntry::FromLocalProto(
diff --git a/components/send_tab_to_self/send_tab_to_self_entry.h b/components/send_tab_to_self/send_tab_to_self_entry.h
index 549c8a0..b7656ccc 100644
--- a/components/send_tab_to_self/send_tab_to_self_entry.h
+++ b/components/send_tab_to_self/send_tab_to_self_entry.h
@@ -54,6 +54,10 @@
   const std::string& GetDeviceName() const;
   // The cache guid of of the device that this tab is shared with.
   const std::string& GetTargetDeviceSyncCacheGuid() const;
+  // The opened state of the entry.
+  bool IsOpened() const;
+  // Sets the opened state of the entry to true.
+  void MarkOpened();
 
   // The state of this entry's notification: if it has been |dismissed|.
   void SetNotificationDismissed(bool notification_dismissed);
@@ -93,6 +97,7 @@
   base::Time shared_time_;
   base::Time original_navigation_time_;
   bool notification_dismissed_;
+  bool opened_;
 
   DISALLOW_COPY_AND_ASSIGN(SendTabToSelfEntry);
 };
diff --git a/components/send_tab_to_self/send_tab_to_self_entry_unittest.cc b/components/send_tab_to_self/send_tab_to_self_entry_unittest.cc
index 6743a52..196daab 100644
--- a/components/send_tab_to_self/send_tab_to_self_entry_unittest.cc
+++ b/components/send_tab_to_self/send_tab_to_self_entry_unittest.cc
@@ -157,6 +157,33 @@
       SendTabToSelfEntry::FromProto(*pb_entry, base::Time::FromTimeT(10)));
 }
 
+// Tests that the send tab to self entry is correctly encoded to
+// sync_pb::SendTabToSelfSpecifics.
+TEST(SendTabToSelfEntry, MarkAsOpened) {
+  SendTabToSelfEntry entry("1", GURL("http://example.com"), "bar",
+                           base::Time::FromTimeT(10), base::Time::FromTimeT(10),
+                           "device", "device2");
+  EXPECT_FALSE(entry.IsOpened());
+  entry.MarkOpened();
+  EXPECT_TRUE(entry.IsOpened());
+
+  std::unique_ptr<sync_pb::SendTabToSelfSpecifics> pb_entry =
+      std::make_unique<sync_pb::SendTabToSelfSpecifics>();
+  pb_entry->set_guid("1");
+  pb_entry->set_url("http://example.com/");
+  pb_entry->set_title("title");
+  pb_entry->set_device_name("device");
+  pb_entry->set_target_device_sync_cache_guid("device");
+  pb_entry->set_shared_time_usec(1);
+  pb_entry->set_navigation_time_usec(1);
+  pb_entry->set_opened(true);
+
+  std::unique_ptr<SendTabToSelfEntry> entry2(
+      SendTabToSelfEntry::FromProto(*pb_entry, base::Time::FromTimeT(10)));
+
+  EXPECT_TRUE(entry2->IsOpened());
+}
+
 }  // namespace
 
 }  // namespace send_tab_to_self
diff --git a/components/send_tab_to_self/send_tab_to_self_model.h b/components/send_tab_to_self/send_tab_to_self_model.h
index 3330d425..4497384a 100644
--- a/components/send_tab_to_self/send_tab_to_self_model.h
+++ b/components/send_tab_to_self/send_tab_to_self_model.h
@@ -50,10 +50,14 @@
   // of the model as driven by user behaviors.
   virtual void DeleteEntry(const std::string& guid) = 0;
 
-  // Dismiss entry with |guid| from entries. Allows clients to modify the state
+  // Dismiss entry with key |guid|. Allows clients to modify the state
   // of the model as driven by user behaviors.
   virtual void DismissEntry(const std::string& guid) = 0;
 
+  // Mark entry with key |guid| as opened. Allows clients to modify the state
+  // of the model as driven by user behaviors.
+  virtual void MarkEntryOpened(const std::string& guid) = 0;
+
   // Guarantee that the model is operational and syncing, i.e., the local
   // database is started and the initial data has been downloaded.
   // This call and SendTabToSelfModelObserver::SendTabToSelfModelLoaded overlap,
diff --git a/components/send_tab_to_self/send_tab_to_self_model_observer.h b/components/send_tab_to_self/send_tab_to_self_model_observer.h
index 75394a31..a26475b 100644
--- a/components/send_tab_to_self/send_tab_to_self_model_observer.h
+++ b/components/send_tab_to_self/send_tab_to_self_model_observer.h
@@ -26,15 +26,19 @@
   // have a way to ensure that the model is active before interacting with it.
   virtual void SendTabToSelfModelLoaded() = 0;
 
-  // Invoked when elements of the model are added or removed. This is the
-  // mechanism for the sync server to push changes in the state of the model to
-  // clients.
+  // Invoked when elements of the model are added, removed, or updated. This is
+  // the mechanism for the sync server to push changes in the state of the model
+  // to clients.
   // TODO(crbug.com/945396) move EntriesAddedRemotely to use const refs to
   // clarify ownership.
   virtual void EntriesAddedRemotely(
       const std::vector<const SendTabToSelfEntry*>& new_entries) = 0;
   virtual void EntriesRemovedRemotely(
       const std::vector<std::string>& guids) = 0;
+  // This observer will>>>>>>>> notify listeners of new and existing entries
+  // that have been marked as opened.
+  virtual void EntriesOpenedRemotely(
+      const std::vector<const SendTabToSelfEntry*>& opened_entries) {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(SendTabToSelfModelObserver);
diff --git a/components/send_tab_to_self/test_send_tab_to_self_model.cc b/components/send_tab_to_self/test_send_tab_to_self_model.cc
index c9a4f7f..294b3ce 100644
--- a/components/send_tab_to_self/test_send_tab_to_self_model.cc
+++ b/components/send_tab_to_self/test_send_tab_to_self_model.cc
@@ -29,6 +29,8 @@
 
 void TestSendTabToSelfModel::DismissEntry(const std::string& guid) {}
 
+void TestSendTabToSelfModel::MarkEntryOpened(const std::string& guid) {}
+
 bool TestSendTabToSelfModel::IsReady() {
   return false;
 }
diff --git a/components/send_tab_to_self/test_send_tab_to_self_model.h b/components/send_tab_to_self/test_send_tab_to_self_model.h
index 32a1108..80e8853 100644
--- a/components/send_tab_to_self/test_send_tab_to_self_model.h
+++ b/components/send_tab_to_self/test_send_tab_to_self_model.h
@@ -33,6 +33,8 @@
                                      const std::string& device_id) override;
   void DeleteEntry(const std::string& guid) override;
   void DismissEntry(const std::string& guid) override;
+  void MarkEntryOpened(const std::string& guid) override;
+
   bool IsReady() override;
   std::map<std::string, TargetDeviceInfo> GetTargetDeviceNameToCacheInfoMap()
       override;
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 863d13d..6185944 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -908,7 +908,6 @@
 <translation id="5975083100439434680">አሳንስ</translation>
 <translation id="5980920751713728343">መረጃ ጠቋሚ-3x5</translation>
 <translation id="598637245381783098">የክፍያ መተግበሪያን መክፈት አይቻልም</translation>
-<translation id="5988826871883769516">የእርስዎ መሣሪያ በ<ph name="ENROLLMENT_DOMAIN" /> ነው የሚተዳደረው።</translation>
 <translation id="5989320800837274978">ቋሚ ተኪ አገልጋዮችም ሆኑ የ.pac ስክሪፕት ዩአርኤል አልተገለጹም።</translation>
 <translation id="5990559369517809815">ወደ አገልጋዩ የተላኩ ጥያቄዎች በአንድ ቅጥያ ታግደዋል።</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1184,7 +1183,6 @@
 <translation id="7554791636758816595">አዲስ ትር</translation>
 <translation id="7564049878696755256">የ<ph name="ORG_NAME" /> መለያዎን መዳረሻ ሊያጡ ወይም የማንነት ስርቆት ሊያጋጥመዎት ይችላሉ። Chrome የይለፍ ቃልዎን አሁን እንዲቀይሩ ይመክራል።</translation>
 <translation id="7567204685887185387">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በተጭበረበረ ሁኔታ ተሰጥቶ ሊሆን ይችላል። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation>
-<translation id="7568105740864181217">ይህ አሳሽ በኩባንያ፣ ትምህርት ቤት ወይም በሌላ ድርጅት የሚተዳደር ነው። የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ እንዲሁም ከChrome ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">ክሬዲት ካርድ ከChrome ይወገድ?</translation>
 <translation id="7569983096843329377">ጥቁር</translation>
 <translation id="7578104083680115302">Google ላይ ያስቀመጧቸውን ካርዶች በመጠቀም በሁሉም መሣሪያዎች ላይ በጣቢያዎችና መተግበሪያዎች ላይ በፍጥነት ይክፈሉ።</translation>
@@ -1318,7 +1316,6 @@
 <translation id="825929999321470778">ሁሉንም የተቀመጡ የይለፍ ቃላትን አሳይ</translation>
 <translation id="8261506727792406068">ሰርዝ</translation>
 <translation id="8267698848189296333">እንደ <ph name="USERNAME" /> በመግባት ላይ</translation>
-<translation id="8278457561961988242">ይህ አሳሽ በ<ph name="ENROLLMENT_DOMAIN" /> የሚተዳደር ነው። የእርስዎ አስተዳዳሪ የአሳሽዎን ውቅረት በርቀት ሊቀይሩት ይችላሉ። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ እንዲሁም ከChrome ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">ትልቅ-ፎቶ</translation>
 <translation id="8286036467436129157">ግባ</translation>
 <translation id="8288807391153049143">የእውቅና ማረጋገጫን አሳይ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 9422bcd..5b0cc09 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">تصغير</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">لا يمكن فتح تطبيق الدفع</translation>
-<translation id="5988826871883769516">يدير حسابك <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">‏لم يتم تحديد أي من الخوادم الوكيلة الثابتة ولا عنوان URL للنص البرمجي pac.</translation>
 <translation id="5990559369517809815">تم حظر الطلبات المقدمة إلى الخادم بواسطة إحدى الإضافات.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">علامة تبويب جديدة</translation>
 <translation id="7564049878696755256">‏قد تفقد إمكانية الوصول إلى حسابك على <ph name="ORG_NAME" /> أو تتعرض لسرقة هويتك. لذا يوصي Chrome بتغيير كلمة مرورك الآن.</translation>
 <translation id="7567204685887185387">هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ بل إنه شهادة أمان تم إصدارها عن طريق الاحتيال. وربما يكون سبب ذلك خطأ في التكوين أو مهاجمًا يعترض اتصالك.</translation>
-<translation id="7568105740864181217">‏تتم إدارة هذا المتصفِّح من خلال شركة أو مؤسسة تعليمية أو مؤسسة أخرى. يمكن لمشرفك تغيير إعداد المتصفِّح عن بُعد. قد تتم أيضًا إدارة النشاط على هذا الجهاز خارج Chrome. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">‏هل تريد إزالة بطاقة الائتمان من Chrome؟</translation>
 <translation id="7569983096843329377">أسود</translation>
 <translation id="7578104083680115302">‏الدفع سريعًا على المواقع والتطبيقات على جميع الأجهزة باستخدام البطاقات التي حفظتها في Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">عرض جميع كلمات المرور المحفوظة</translation>
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8267698848189296333">تسجيل الدخول باسم <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">‏تتم إدارة هذا المتصفِّح من خلال <ph name="ENROLLMENT_DOMAIN" />. ويمكن لمشرفك تغيير إعداد المتصفِّح عن بُعد. قد تتم أيضًا إدارة النشاط على هذا الجهاز خارج Chrome. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">تسجيل الدخول</translation>
 <translation id="8288807391153049143">عرض الشهادة</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index a4f76e6..408524e 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Намаляване на мащаба</translation>
 <translation id="5980920751713728343">Index-3 x 5</translation>
 <translation id="598637245381783098">Приложението за плащане не може да се отвори</translation>
-<translation id="5988826871883769516">Устройството ви се управлява от <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Не са посочени нито фиксирани прокси сървъри, нито URL адрес на скрипт във формат .pac.</translation>
 <translation id="5990559369517809815">Заявките към сървъра са блокирани от разширение.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Нов раздел</translation>
 <translation id="7564049878696755256">Възможно е да загубите достъп до профила си в/ъв <ph name="ORG_NAME" /> или самоличността ви да бъде открадната. Chrome препоръчва да промените паролата си сега.</translation>
 <translation id="7567204685887185387">Сървърът не можа да докаже, че е <ph name="DOMAIN" />; възможно е сертификатът му за сигурност да е издаден измамнически. Това може да се дължи на неправилно конфигуриране или на прихващане на връзката ви от атакуващ.</translation>
-<translation id="7568105740864181217">Този браузър се управлява от дружество, учебно заведение или друга организация. Администраторът ви може отдалечено да променя настройките на браузъра. Възможно е активността на това устройство да се управлява и извън Chrome. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Кредитната карта да се премахне ли от Chrome?</translation>
 <translation id="7569983096843329377">черно</translation>
 <translation id="7578104083680115302">Извършвайте бързи плащания в сайтове и приложения от всякакви устройства посредством картите, които сте запазили в Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Показване на всички запазени пароли</translation>
 <translation id="8261506727792406068">Изтриване</translation>
 <translation id="8267698848189296333">Влизате като <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Този браузър се управлява от <ph name="ENROLLMENT_DOMAIN" />. Администраторът ви може да променя отдалечено настройките му. Възможно е активността на това устройство да се управлява и извън Chrome. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Вход</translation>
 <translation id="8288807391153049143">Показване на сертификата</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index d22e84c..f5d30ba0 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -916,7 +916,6 @@
 <translation id="5975083100439434680">ছোট করুন</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">পেমেন্ট অ্যাপ খোলা যাচ্ছে না</translation>
-<translation id="5988826871883769516">আপনার ডিভাইস <ph name="ENROLLMENT_DOMAIN" /> ম্যানেজ করে।</translation>
 <translation id="5989320800837274978">কোনো নির্ধারিত প্রক্সি সার্ভার অথবা একটি.pac স্ক্রিপ্ট UR সুর্নিদিষ্টভাবে উল্লেখ করা হয়নি৷</translation>
 <translation id="5990559369517809815">সার্ভারে অনুরোধগুলি একটি এক্সটেনশন দিয়ে ব্লক করা আছে৷</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">নতুন ট্যাব</translation>
 <translation id="7564049878696755256">আপনি নিজের <ph name="ORG_NAME" /> অ্যাকাউন্টের অ্যাক্সেস হারাতে পারেন অথবা আপনার পরিচয় চুরি হয়ে যেতে পারে। Chrome এখনই আপনার পাসওয়ার্ড পরিবর্তন করার আর্জি জানাচ্ছে।</translation>
 <translation id="7567204685887185387">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা সার্টিফিকেট প্রতারণাপূর্ণভাবে ইস্যু করা হয়ে থাকতে পারে। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation>
-<translation id="7568105740864181217">এই ব্রাউজারটি কোনও কোম্পানি, স্কুল বা অন্য কোনও সংস্থা ম্যানেজ করে। আপনার অ্যাডমিনিস্ট্রেটর রিমোট লোকেশন থেকে আপনার ব্রাউজারের সেট-আপ পরিবর্তন করতে পারেন। এই ডিভাইসের অ্যাক্টিভিটি Chrome-এর বাইরে থেকে ম্যানেজ করা হতে পারে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome থেকে ক্রেডিট কার্ড সরাবেন?</translation>
 <translation id="7569983096843329377">কালো</translation>
 <translation id="7578104083680115302">আপনি Google এর সাথে সংরক্ষণ করেছেন এমন কার্ড ব্যবহার করে ডিভাইস জুড়ে সাইট এবং অ্যাপ্লিকেশানগুলিতে দ্রুত অর্থ পরিশোধ করুন।</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">সেভ করা সমস্ত পাসওয়ার্ড দেখান</translation>
 <translation id="8261506727792406068">মুছুন</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> হিসেবে প্রবেশ করুন করছেন</translation>
-<translation id="8278457561961988242">এই ব্রাউজারটি <ph name="ENROLLMENT_DOMAIN" /> ম্যানেজ করছে। আপনার অ্যাডমিনিস্ট্রেটর রিমোট লোকেশন থেকে আপনার ব্রাউজারের সেট-আপ পরিবর্তন করতে পারেন। এই ডিভাইসের অ্যাক্টিভিটি Chrome-এর বাইরে থেকে ম্যানেজ করা হতে পারে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">সাইন-ইন করুন</translation>
 <translation id="8288807391153049143">সার্টিফিকেট দেখান</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 17f8b22b..20705a2 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">Redueix</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">No es pot obrir l'aplicació de pagament</translation>
-<translation id="5988826871883769516"><ph name="ENROLLMENT_DOMAIN" /> gestiona el teu dispositiu.</translation>
 <translation id="5989320800837274978">No s'especifiquen servidors intermediaris ni URL d'script .pac.</translation>
 <translation id="5990559369517809815">Una extensió ha bloquejat les peticions al servidor.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">Pestanya nova</translation>
 <translation id="7564049878696755256">Podries perdre l'accés al compte de <ph name="ORG_NAME" /> o tenir problemes de suplantació d'identitat. Chrome et recomana que canviïs la contrasenya ara.</translation>
 <translation id="7567204685887185387">Aquest servidor no ha pogut comprovar que sigui <ph name="DOMAIN" /> perquè és possible que el seu certificat de seguretat s'hagi emès de manera fraudulenta. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió.</translation>
-<translation id="7568105740864181217">Una empresa, un centre educatiu o una altra organització gestiona aquest navegador. L'administrador pot modificar la configuració del navegador de manera remota. És possible que l'activitat d'aquest dispositiu també es gestioni fora de Chrome. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Voleu suprimir la targeta de crèdit de Chrome?</translation>
 <translation id="7569983096843329377">Negre</translation>
 <translation id="7578104083680115302">Agilitzeu els pagaments en llocs i en aplicacions des de qualsevol dispositiu mitjançant les targetes que hàgiu desat a Google.</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">Mostra totes les contrasenyes desades</translation>
 <translation id="8261506727792406068">Suprimeix</translation>
 <translation id="8267698848189296333">S'està iniciant la sessió com a <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242"><ph name="ENROLLMENT_DOMAIN" /> gestiona el navegador. L'administrador pot modificar la configuració del navegador de manera remota. És possible que l'activitat d'aquest dispositiu també es gestioni fora de Chrome. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Inicia la sessió</translation>
 <translation id="8288807391153049143">Mostra el certificat</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index cf1b3b9..d849d10 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -903,7 +903,6 @@
 <translation id="5975083100439434680">Oddálit</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Platební aplikaci nelze otevřít</translation>
-<translation id="5988826871883769516">Toto zařízení spravuje organizace <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nejsou určeny pevně dané servery proxy ani adresa URL skriptu PAC.</translation>
 <translation id="5990559369517809815">Žádosti na tento server jsou blokovány rozšířením.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1177,7 +1176,6 @@
 <translation id="7554791636758816595">Nová karta</translation>
 <translation id="7564049878696755256">Mohli byste ztratit přístup k účtu <ph name="ORG_NAME" /> nebo by mohlo dojít k odcizení vaší identity. Doporučujeme vám okamžitě změnit heslo.</translation>
 <translation id="7567204685887185387">Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Jeho bezpečnostní certifikát byl zřejmě vydán podvodně. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník.</translation>
-<translation id="7568105740864181217">Tento prohlížeč spravuje společnost, škola nebo jiná organizace. Administrátor může nastavení prohlížeče vzdáleně změnit. Aktivita na tomto zařízení může být spravována také mimo Chrome. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Odstranit platební kartu z Chromu?</translation>
 <translation id="7569983096843329377">Černá</translation>
 <translation id="7578104083680115302">Plaťte na webech a v aplikacích v různých zařízeních rychle pomocí karet uložených na Googlu.</translation>
@@ -1311,7 +1309,6 @@
 <translation id="825929999321470778">Zobrazit všechna uložená hesla</translation>
 <translation id="8261506727792406068">Smazat</translation>
 <translation id="8267698848189296333">Přihlašování pomocí účtu <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Tento prohlížeč je spravován organizací <ph name="ENROLLMENT_DOMAIN" />. Administrátor může nastavení prohlížeče vzdáleně změnit. Aktivita na tomto zařízení může být spravována také mimo Chrome. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Přihlásit se</translation>
 <translation id="8288807391153049143">Zobrazit certifikát</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index ff315be..1b67618a 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Zoom ud</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Betalingsappen kan ikke åbnes</translation>
-<translation id="5988826871883769516">Din enhed administreres af <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Der er hverken angivet faste proxyservere eller en .pac-scriptwebadresse.</translation>
 <translation id="5990559369517809815">Anmodninger til serveren er blokeret af en udvidelse.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Ny fane</translation>
 <translation id="7564049878696755256">Du kan miste adgangen til din <ph name="ORG_NAME" />-konto eller udsættes for identitetstyveri. Chrome anbefaler, at du skifter din adgangskode nu.</translation>
 <translation id="7567204685887185387">Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da sikkerhedscertifikatet er udstedt på ulovlig vis. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse.</translation>
-<translation id="7568105740864181217">Denne browser administreres af en virksomhed, skole eller en anden organisation. Din administrator kan ændre konfigurationen af din browser via fjernadgang. Aktivitet på denne enhed administreres muligvis også uden for Chrome. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Vil du fjerne kreditkortet fra Chrome?</translation>
 <translation id="7569983096843329377">Sort</translation>
 <translation id="7578104083680115302">Betal hurtigt på websites og i apps på alle enheder ved hjælp af kort, du har gemt med Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Se alle gemte adgangskoder</translation>
 <translation id="8261506727792406068">Slet</translation>
 <translation id="8267698848189296333">Logger ind som <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Denne browser administreres af <ph name="ENROLLMENT_DOMAIN" />. Din administrator kan ændre konfigurationen af din browser via fjernadgang. Aktivitet på denne enhed administreres muligvis også uden for Chrome. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Log ind</translation>
 <translation id="8288807391153049143">Vis certifikat</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 548f307..20c9839 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -905,7 +905,6 @@
 <translation id="5975083100439434680">Verkleinern</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Fehler beim Öffnen der Zahlungs-App</translation>
-<translation id="5988826871883769516">Ihr Gerät wird von <ph name="ENROLLMENT_DOMAIN" /> verwaltet.</translation>
 <translation id="5989320800837274978">Weder feste Proxyserver noch eine PAC-Skript-URL sind festgelegt.</translation>
 <translation id="5990559369517809815">Anfragen an den Server wurden durch eine Erweiterung blockiert.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1181,7 +1180,6 @@
 <translation id="7554791636758816595">Neuer Tab</translation>
 <translation id="7564049878696755256">Sie könnten den Zugriff auf Ihr <ph name="ORG_NAME" />-Konto verlieren oder zum Opfer von Identitätsdiebstahl werden. Chrome empfiehlt Ihnen, Ihr Passwort jetzt zu ändern.</translation>
 <translation id="7567204685887185387">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat wurde möglicherweise in betrügerischer Absicht ausgegeben. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.</translation>
-<translation id="7568105740864181217">Dieser Browser wird von einem Unternehmen, einer Bildungseinrichtung oder einer anderen Organisation verwaltet. Ihr Administrator kann die Browsereinstellungen per Remotezugriff ändern. Aktivitäten auf diesem Gerät können auch außerhalb von Chrome verwaltet werden. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Kreditkarte aus Chrome entfernen?</translation>
 <translation id="7569983096843329377">Schwarz</translation>
 <translation id="7578104083680115302">Mit Karten, die Sie bei Google gespeichert haben, können Sie schnell und geräteübergreifend auf Websites und in Apps bezahlen.</translation>
@@ -1315,7 +1313,6 @@
 <translation id="825929999321470778">Alle gespeicherten Passwörter anzeigen</translation>
 <translation id="8261506727792406068">Löschen</translation>
 <translation id="8267698848189296333">Als <ph name="USERNAME" /> anmelden</translation>
-<translation id="8278457561961988242">Dieser Browser wird von <ph name="ENROLLMENT_DOMAIN" /> verwaltet. Ihr Administrator kann die Browsereinstellungen per Remotezugriff ändern. Aktivitäten auf diesem Gerät können auch außerhalb von Chrome verwaltet werden. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Anmelden</translation>
 <translation id="8288807391153049143">Zertifikat anzeigen</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index ee2382e1..02ea62a 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -916,7 +916,6 @@
 <translation id="5975083100439434680">Σμίκρυνση</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Δεν είναι δυνατό το άνοιγμα της εφαρμογής πληρωμής</translation>
-<translation id="5988826871883769516">Η διαχείριση της συσκευής σας γίνεται από τον τομέα <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Δεν προσδιορίζονται ούτε οι σταθεροί διακομιστές μεσολάβησης ούτε μια διεύθυνση URL σεναρίου .pac.</translation>
 <translation id="5990559369517809815">Τα αιτήματα για τον διακομιστή έχουν αποκλειστεί από μια επέκταση.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1195,7 +1194,6 @@
 <translation id="7554791636758816595">Νέα καρτέλα</translation>
 <translation id="7564049878696755256">Μπορεί να χάσετε την πρόσβαση στον λογαριασμό σας <ph name="ORG_NAME" /> ή να πέσετε θύμα κλοπής στοιχείων ταυτότητας. Το Chrome συνιστά να αλλάξετε τον κωδικό πρόσβασής σας τώρα.</translation>
 <translation id="7567204685887185387">Ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του μπορεί να εκδόθηκε παράνομα. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation>
-<translation id="7568105740864181217">Η διαχείριση αυτού του προγράμματος περιήγησης πραγματοποιείται από μια εταιρεία, κάποιο σχολείο ή άλλον οργανισμό. Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησής σας απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chrome. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Κατάργηση πιστωτικής κάρτας από το Chrome;</translation>
 <translation id="7569983096843329377">Μαύρο</translation>
 <translation id="7578104083680115302">Κάντε γρήγορες πληρωμές σε ιστότοπους και εφαρμογές σε διαφορετικές συσκευές χρησιμοποιώντας κάρτες που έχετε αποθηκεύσει στο Google.</translation>
@@ -1329,7 +1327,6 @@
 <translation id="825929999321470778">Εμφάνιση όλων των αποθηκευμένων κωδικών πρόσβασης</translation>
 <translation id="8261506727792406068">Διαγραφή</translation>
 <translation id="8267698848189296333">Σύνδεση ως <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Αυτό το πρόγραμμα περιήγησης είναι διαχειριζόμενο από τον τομέα <ph name="ENROLLMENT_DOMAIN" />. Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησης απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chrome. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Σύνδεση</translation>
 <translation id="8288807391153049143">Εμφάνιση πιστοποιητικού</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 1d35b04..c4b526df 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">Zoom out</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Can’t open payment app</translation>
-<translation id="5988826871883769516">Your device is managed by <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Neither fixed proxy servers nor a .pac script URL are specified.</translation>
 <translation id="5990559369517809815">Requests to the server have been blocked by an extension.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">New Tab</translation>
 <translation id="7564049878696755256">You could lose access to your <ph name="ORG_NAME" /> account or experience identity theft. Chrome recommends changing your password now.</translation>
 <translation id="7567204685887185387">This server could not prove that it is <ph name="DOMAIN" />; its security certificate might have been issued fraudulently. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation>
-<translation id="7568105740864181217">This browser is managed by a company, school or other organisation. Your administrator can change your browser setup remotely. Activity on this device may also be managed outside of Chrome. <ph name="BEGIN_LINK" />Find out more<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Remove credit card from Chrome?</translation>
 <translation id="7569983096843329377">Black</translation>
 <translation id="7578104083680115302">Pay quickly on sites and apps across devices using cards that you have saved with Google.</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">Show All Saved Passwords</translation>
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8267698848189296333">Signing in as <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">This browser is managed by <ph name="ENROLLMENT_DOMAIN" />. Your administrator can change your browser setup remotely. Activity on this device may also be managed outside of Chrome. <ph name="BEGIN_LINK" />Find out more<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Sign In</translation>
 <translation id="8288807391153049143">Show certificate</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 343f4c0b..9b4b984d 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -916,7 +916,6 @@
 <translation id="5975083100439434680">Alejar</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">No se puede abrir la app de pago</translation>
-<translation id="5988826871883769516"><ph name="ENROLLMENT_DOMAIN" /> administra tu dispositivo.</translation>
 <translation id="5989320800837274978">No se especifican servidores proxy fijos ni URL de secuencias de comandos .pac.</translation>
 <translation id="5990559369517809815">Una extensión bloqueó las solicitudes al servidor.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1195,7 +1194,6 @@
 <translation id="7554791636758816595">Nueva pestaña</translation>
 <translation id="7564049878696755256">Es posible que hayas perdido el acceso a tu cuenta de <ph name="ORG_NAME" /> o sufrido un robo de identidad. Chrome te recomienda que cambies la contraseña ahora.</translation>
 <translation id="7567204685887185387">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; el certificado de seguridad podría haberse emitido de forma fraudulenta. Es posible que esto se deba a una configuración incorrecta o a que un atacante interceptó la conexión.</translation>
-<translation id="7568105740864181217">Este navegador está administrado por una empresa, institución educativa o alguna otra organización. Tu administrador puede cambiar la configuración de tu navegador de forma remota. Es posible que la actividad en este dispositivo también se administre fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">¿Confirmas que quieres quitar la tarjeta de crédito de Chrome?</translation>
 <translation id="7569983096843329377">Negro</translation>
 <translation id="7578104083680115302">Paga con rapidez en sitios y apps a través de varios dispositivos con tarjetas que guardaste en Google.</translation>
@@ -1329,7 +1327,6 @@
 <translation id="825929999321470778">Mostrar todas las contraseñas guardadas</translation>
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8267698848189296333">Acceder como <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242"><ph name="ENROLLMENT_DOMAIN" /> administra este navegador. Tu administrador puede cambiar la configuración de tu navegador de forma remota. Es posible que la actividad en este dispositivo también se administre fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Iniciar sesión</translation>
 <translation id="8288807391153049143">Mostrar certificado</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 1b441a01..5257fcf 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">Reducir</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">No se ha podido abrir la aplicación de pago</translation>
-<translation id="5988826871883769516">Tu dispositivo está administrado por <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">No se han especificado servidores proxy fijos ni una URL de secuencia de comandos .pac.</translation>
 <translation id="5990559369517809815">Una extensión ha bloqueado el envío de solicitudes al servidor.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">Nueva pestaña</translation>
 <translation id="7564049878696755256">Podrías perder el acceso a tu cuenta de <ph name="ORG_NAME" /> o tener problemas de suplantación de identidad. Chrome te recomienda que cambies tu contraseña ahora.</translation>
 <translation id="7567204685887185387">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, su certificado de seguridad podría haberse emitido de forma fraudulenta. El problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation>
-<translation id="7568105740864181217">Este navegador lo administra una empresa, un centro educativo u otra organización. El administrador puede modificar la configuración del navegador de manera remota. Es posible que también se administre la actividad de este dispositivo fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">¿Eliminar tarjeta de crédito de Chrome?</translation>
 <translation id="7569983096843329377">Negro</translation>
 <translation id="7578104083680115302">Paga rápidamente en aplicaciones y sitios web desde tus dispositivos utilizando las tarjetas que has guardado en Google.</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">Mostrar todas las contraseñas guardadas</translation>
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8267698848189296333">Iniciando sesión como <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Este navegador lo administra <ph name="ENROLLMENT_DOMAIN" />. El administrador puede modificar la configuración del navegador de forma remota. Es posible que también se administre la actividad de este dispositivo fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Iniciar sesión</translation>
 <translation id="8288807391153049143">Mostrar certificado</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 4f22962d..286d4394 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Suumib välja</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Makserakendust ei saa avada</translation>
-<translation id="5988826871883769516">Teie seadet haldab <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Määratud ei ole fikseeritud puhverservereid ega pac-skriptiga URL-i.</translation>
 <translation id="5990559369517809815">Laiendus blokeeris serverisse saadetavad päringud.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Uus vaheleht</translation>
 <translation id="7564049878696755256">Võite kaotada juurdepääsu oma teenuse <ph name="ORG_NAME" /> kontole või teie identiteet võidakse varastada. Chrome soovitab teil kohe oma parooli muuta.</translation>
 <translation id="7567204685887185387">Server ei suutnud tõestada, et see on domeen <ph name="DOMAIN" />, selle turvasertifikaat võib olla väljastatud pettuse teel. Selle põhjuseks võib olla vale seadistus või ründaja, kes on sekkunud teie ühendusse.</translation>
-<translation id="7568105740864181217">Seda brauserit haldab ettevõte, kool või muu organisatsioon. Teie administraator saab brauseri seadistust kaugühenduse kaudu muuta. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Kas eemaldada Chrome'ist krediitkaart?</translation>
 <translation id="7569983096843329377">Must</translation>
 <translation id="7578104083680115302">Google'i salvestatud kaartide abil saate eri seadmetes saitidel ja rakendustes kiirelt maksta.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Kuva kõik salvestatud paroolid</translation>
 <translation id="8261506727792406068">Kustuta</translation>
 <translation id="8267698848189296333">Sisselogimine kasutajana <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Seda brauserit haldab <ph name="ENROLLMENT_DOMAIN" />. Teie administraator saab brauseri seadistust kaugühenduse kaudu muuta. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Logi sisse</translation>
 <translation id="8288807391153049143">Kuva sertifikaat</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 3a6d9bbe..71aa87f0 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">دورنمایی کردن</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">برنامه پرداخت باز نشد</translation>
-<translation id="5988826871883769516">دستگاهتان توسط <ph name="ENROLLMENT_DOMAIN" /> مدیریت می‌شود.</translation>
 <translation id="5989320800837274978">‏سرور پروکسی ثابت و URL اسکریپت pac. تعیین نشده‌اند.</translation>
 <translation id="5990559369517809815">درخواست‌های ارسالی به سرور توسط یک برنامهٔ افزودنی مسدود شد.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">برگهٔ جدید</translation>
 <translation id="7564049878696755256">‏ممکن است دسترسی به حساب <ph name="ORG_NAME" /> را از دست بدهید یا به سرقت هویت دچار شوید. Chrome توصیه می‌کند هم‌اکنون گذرواژه‌تان را تغییر دهید.</translation>
 <translation id="7567204685887185387">این سرور نتوانست اثبات کند که این <ph name="DOMAIN" /> است؛ ممکن است گواهی امنیتی آن به صورت تقلبی صادر شده باشد. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصال شما را قطع کرده است.</translation>
-<translation id="7568105740864181217">‏این مرورگر توسط شرکت، مدرسه یا سازمان دیگری مدیریت می‌شود. سرپرستتان می‌تواند تنظیم مرورگرتان را ازراه‌دور تغییر دهد. همچنین ممکن است فعالیت در این دستگاه خارج از Chrome مدیریت شود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">‏کارت اعتباری از Chrome پاک شود؟</translation>
 <translation id="7569983096843329377">سیاه</translation>
 <translation id="7578104083680115302">‏با استفاده از کارت‌هایی که با Google ذخیره کرده‌اید به‌سرعت در همه دستگاه‌هایتان پرداخت‌های سایت‌ها و برنامه‌ها را انجام دهید.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">نمایش همه گذرواژه‌های ذخیره‌شده</translation>
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8267698848189296333">ورود به سیستم به‌عنوان <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">‏این دستگاه توسط <ph name="ENROLLMENT_DOMAIN" /> مدیریت می‌شود. سرپرستتان می‌تواند تنظیم مرورگرتان را ازراه‌دور تغییر دهد. همچنین ممکن است فعالیت در این دستگاه خارج از Chrome مدیریت شود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">ورود به سیستم</translation>
 <translation id="8288807391153049143">نمایش گواهی</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 6a1e543..1c18630 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -916,7 +916,6 @@
 <translation id="5975083100439434680">Loitonna</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Maksusovelluksen avaaminen ei onnistu.</translation>
-<translation id="5988826871883769516">Laitettasi ylläpitää <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Kiinteitä välityspalvelimia tai .pac-URL-osoitetta ei ole määritetty.</translation>
 <translation id="5990559369517809815">Laajennus esti palvelinpyynnöt.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1195,7 +1194,6 @@
 <translation id="7554791636758816595">Uusi välilehti</translation>
 <translation id="7564049878696755256">Saatat menettää <ph name="ORG_NAME" />-tilisi käyttöoikeuden tai joutua identiteettivarkauden uhriksi. Chrome suosittelee salasanan vaihtamista välittömästi.</translation>
 <translation id="7567204685887185387">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne on ehkä luotu vilpillisesti. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation>
-<translation id="7568105740864181217">Yritys, koulu tai muu organisaatio ylläpitää tätä selainta. Järjestelmänvalvoja voi muuttaa selaimen määrityksiä etäyhteydellä. Toimintaa tällä laitteella saatetaan ylläpitää myös Chromen ulkopuolelta. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Poistetaanko luottokortti Chromen tiedoista?</translation>
 <translation id="7569983096843329377">Musta</translation>
 <translation id="7578104083680115302">Voit maksaa sivustoilla ja sovelluksissa nopeasti eri laitteillasi käyttämällä Googleen tallennettuja kortteja.</translation>
@@ -1329,7 +1327,6 @@
 <translation id="825929999321470778">Näytä kaikki tallennetut salasanat</translation>
 <translation id="8261506727792406068">Poista</translation>
 <translation id="8267698848189296333">Kirjaudutaan käyttäjänä <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Tämän selaimen ylläpitäjä on <ph name="ENROLLMENT_DOMAIN" />. Järjestelmänvalvoja voi muuttaa selaimen määrityksiä etäyhteydellä. Toimintaa tällä laitteella saatetaan ylläpitää myös Chromen ulkopuolelta. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Suuri kuva</translation>
 <translation id="8286036467436129157">Kirjaudu sisään</translation>
 <translation id="8288807391153049143">Näytä varmenne</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 5d478a5b..f18a0fac 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Mag-zoom out</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Hindi mabuksan ang app sa pagbabayad</translation>
-<translation id="5988826871883769516">Pinapamahalaan ng <ph name="ENROLLMENT_DOMAIN" /> ang iyong device.</translation>
 <translation id="5989320800837274978">Hindi tunukoy ang alinman sa mga hindi nababagong proxy server o isang .pac script URL.</translation>
 <translation id="5990559369517809815">Na-block ng isang extension ang mga kahilingan sa server.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Bagong Tab</translation>
 <translation id="7564049878696755256">Maaari kang mawalan ng access sa iyong account sa <ph name="ORG_NAME" /> o manakawan ng pagkakakilanlan. Inirerekomenda ng Chrome na palitan ang iyong password ngayon.</translation>
 <translation id="7567204685887185387">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; maaaring mapanlokong ibinigay ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation>
-<translation id="7568105740864181217">Pinapamahalaan ng kumpanya, paaralan, o iba pang organisasyon ang browser na ito. Mababago ng iyong administrator ang setup ng browser mo nang malayuan. Maaari ding pamahalaan sa labas ng Chrome ang aktibidad sa device na ito. <ph name="BEGIN_LINK" />Matuto Pa<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Alisin ang credit card sa Chrome?</translation>
 <translation id="7569983096843329377">Itim</translation>
 <translation id="7578104083680115302">Magbayad nang mabilis sa mga site at app sa iba't ibang device gamit ang mga card na na-save mo sa Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Ipakita ang Lahat ng Naka-save na Password</translation>
 <translation id="8261506727792406068">I-delete</translation>
 <translation id="8267698848189296333">Nagsa-sign in bilang <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Pinapamahalaan ng <ph name="ENROLLMENT_DOMAIN" /> ang browser na ito. Maaaring baguhin ng iyong administrator ang setup ng browser mo nang malayuan. Maaari ding pamahalaan sa labas ng Chrome ang aktibidad sa device na ito. <ph name="BEGIN_LINK" />Matuto Pa<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Mag-sign In</translation>
 <translation id="8288807391153049143">Ipakita ang certificate</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index e872241..868a433b 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">Zoom arrière</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Impossible d'ouvrir l'application de paiement</translation>
-<translation id="5988826871883769516">Votre appareil est géré par <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Aucun serveur proxy déterminé ou URL de script .pac n'a été indiqué.</translation>
 <translation id="5990559369517809815">Les requêtes vers le serveur ont été bloquées par une extension.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">Nouvel onglet</translation>
 <translation id="7564049878696755256">Vous risquez de perdre l'accès à votre compte <ph name="ORG_NAME" /> ou d'être victime d'usurpation d'identité. L'équipe Chrome vous recommande de modifier votre mot de passe maintenant.</translation>
 <translation id="7567204685887185387">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />. Il se peut que son certificat de sécurité ait été émis de manière frauduleuse. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation>
-<translation id="7568105740864181217">Ce navigateur est géré par une entreprise, un établissement scolaire ou une autre organisation. Votre administrateur peut modifier sa configuration à distance. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chrome. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Supprimer les données de carte de paiement de Chrome ?</translation>
 <translation id="7569983096843329377">Noir</translation>
 <translation id="7578104083680115302">Payez rapidement sur des sites et dans des applications sur tous vos appareils au moyen de cartes que vous avez enregistrées sur Google.</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">Afficher tous les mots de passe enregistrés</translation>
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8267698848189296333">Connexion en tant que <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Ce navigateur est géré par <ph name="ENROLLMENT_DOMAIN" />. Votre administrateur peut modifier sa configuration à distance. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chrome. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Connexion</translation>
 <translation id="8288807391153049143">Afficher le certificat</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 0bc17a46..9fa093d 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -914,7 +914,6 @@
 <translation id="5975083100439434680">ઝૂમ ઘટાડો</translation>
 <translation id="5980920751713728343">અનુક્રમણિકા-3x5</translation>
 <translation id="598637245381783098">ચુકવણી ઍપ્લિકેશન ખોલી શકાતી નથી</translation>
-<translation id="5988826871883769516">તમારું ઉપકરણ <ph name="ENROLLMENT_DOMAIN" /> દ્વારા મેનેજ થાય છે.</translation>
 <translation id="5989320800837274978">ફિક્સ્ડ પ્રૉક્સી સર્વર કે .pac સ્ક્રિપ્ટ URL, બેમાંથી કોઈનો પણ ઉલ્લેખ કરેલો નથી.</translation>
 <translation id="5990559369517809815">સર્વર પરની વિનંતિઓને એક્સ્ટેંશન દ્વારા અવરોધિત કરવામાં આવી છે.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">નવું ટૅબ</translation>
 <translation id="7564049878696755256">તમે તમારા <ph name="ORG_NAME" /> એકાઉન્ટનો ઍક્સેસ ગુમાવી શકો છો અથવા તમને ઓળખ ચોરીનો અનુભવ થઈ શકે છે. Chrome તમને હમણાં જ તમારો પાસવર્ડ બદલવાની ભલામણ કરે છે.</translation>
 <translation id="7567204685887185387">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર કપટપૂર્વક રજૂ કરવામાં આવેલ હોઈ શકે છે. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation>
-<translation id="7568105740864181217">આ બ્રાઉઝર એક કંપની, શાળા અથવા અન્ય સંસ્થા દ્વારા મેનેજ કરવામાં આવે છે. તમારા વ્યવસ્થાપક તમારા બ્રાઉઝર સેટઅપને રિમોટલી બદલી શકે છે. આ ડિવાઇસ પરની પ્રવૃત્તિ Chromeની બહારથી પણ મેનેજ કરી શકાય છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome માંથી ક્રેડિટ કાર્ડ દૂર કરીએ?</translation>
 <translation id="7569983096843329377">શ્યામ</translation>
 <translation id="7578104083680115302">તમે Google સાથે સાચવ્યાં છે તે કાર્ડ્સનો ઉપયોગ કરીને સમગ્ર ઉપકરણોમાં સાઇટ્સ અને ઍપ્લિકેશનો પર ઝડપથી ચુકવણી કરો.</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">બધા સાચવેલા પાસવર્ડ બતાવો</translation>
 <translation id="8261506727792406068">ડિલીટ કરો</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> તરીકે સાઇન ઇન કરી રહ્યાં છે</translation>
-<translation id="8278457561961988242">આ બ્રાઉઝર <ph name="ENROLLMENT_DOMAIN" /> દ્વારા મેનેજ કરવામાં આવે છે. તમારા વ્યવસ્થાપક તમારા બ્રાઉઝર સેટઅપને રિમોટલી બદલી શકે છે. આ ડિવાઇસ પરની પ્રવૃત્તિ Chromeની બહારથી પણ મેનેજ કરી શકાય છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">મોટો-ફોટો</translation>
 <translation id="8286036467436129157">સાઇન ઇન કરો</translation>
 <translation id="8288807391153049143">પ્રમાણપત્ર બતાવો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index abc2cd9..734da82 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -913,7 +913,6 @@
 <translation id="5975083100439434680">ज़ूम आउट</translation>
 <translation id="5980920751713728343">इंडेक्स-3x5</translation>
 <translation id="598637245381783098">भुगतान ऐप्लिकेशन नहीं खुल सका</translation>
-<translation id="5988826871883769516">आपके डिवाइस का प्रबंधन <ph name="ENROLLMENT_DOMAIN" /> करता है.</translation>
 <translation id="5989320800837274978">न तो कोई फ़िक्‍स्‍ड प्रॉक्‍सी सर्वर और न ही कोई .pac स्क्रिप्ट URL साफ़ तौर पर बताया गया है.</translation>
 <translation id="5990559369517809815">सर्वर से किए गए अनुरोधों को एक्‍सटेंशन द्वारा ब्लॉक कर दिया गया है.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1192,7 +1191,6 @@
 <translation id="7554791636758816595">नया टैब</translation>
 <translation id="7564049878696755256">आपके <ph name="ORG_NAME" /> खाते का एक्सेस खो सकता है या पहचान चोरी हो सकती है. Chrome आपको अभी अपना पासवर्ड बदलने का सुझाव देता है.</translation>
 <translation id="7567204685887185387">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; हो सकता है इसका सुरक्षा प्रमाणपत्र धोखे से जारी किया गया हो. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation>
-<translation id="7568105740864181217">कंपनी, स्कूल या दूसरा संगठन, इस ब्राउज़र को प्रबंधित करता है. आपका एडमिन किसी दूसरे डिवाइस से आपके ब्राउज़र का सेटअप बदल सकता है. शायद इस डिवाइस की गतिविधि को भी Chrome से बाहर प्रबंधित किया जाए. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome से क्रेडिट कार्ड निकालें?</translation>
 <translation id="7569983096843329377">काला</translation>
 <translation id="7578104083680115302">Google के साथ सहेजे गए कार्ड का उपयोग करके डिवाइसों में मौजूद साइटों और ऐप्‍स पर तुरंत भुगतान करें.</translation>
@@ -1326,7 +1324,6 @@
 <translation id="825929999321470778">सेव किए गए सभी पासवर्ड दिखाएं</translation>
 <translation id="8261506727792406068">मिटाएं</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> के रूप में प्रवेश करना</translation>
-<translation id="8278457561961988242">इस ब्राउज़र को <ph name="ENROLLMENT_DOMAIN" /> प्रबंधित करता है. आपका एडमिन किसी दूसरे डिवाइस से आपके ब्राउज़र का सेटअप बदल सकता है. शायद इस डिवाइस की गतिविधि को भी Chrome से बाहर प्रबंधित किया जाए. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">बड़े आकार वाली फ़ोटो</translation>
 <translation id="8286036467436129157">साइन इन करें</translation>
 <translation id="8288807391153049143">प्रमाणपत्र दिखाएं</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index bba6e9a..ead2a307 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -29,6 +29,7 @@
 <translation id="1113869188872983271">&amp;Poništi promjenu rasporeda</translation>
 <translation id="1125573121925420732">Upozorenja mogu biti uobičajena dok web-lokacije ažuriraju sigurnost. To bi se uskoro trebalo poboljšati.</translation>
 <translation id="1126551341858583091">Veličina na lokalnoj pohrani iznosi <ph name="CRASH_SIZE" />.</translation>
+<translation id="1127259989763091435">Želite li potvrditi i spremiti karticu na Google račun?</translation>
 <translation id="112840717907525620">Predmemorija pravila ispravna je</translation>
 <translation id="1131264053432022307">Slika koju ste kopirali</translation>
 <translation id="1150979032973867961">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; operativni sustav vašeg računala smatra da njegov sigurnosni certifikat nije pouzdan. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation>
@@ -145,6 +146,7 @@
 <translation id="1656489000284462475">Preuzimanje</translation>
 <translation id="1662550410081243962">Spremi i popuni načine plaćanja</translation>
 <translation id="1663943134801823270">Kartice i adrese dolaze iz Chromea. Njima možete upravljati u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
+<translation id="1669987054044193553">Potvrdite i spremite</translation>
 <translation id="1671391448414634642">Odsad će se <ph name="SOURCE_LANGUAGE" /> prevoditi na <ph name="TARGET_LANGUAGE" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> obično upotrebljava enkripciju radi zaštite vaših podataka. Prilikom ovog pokušaja povezivanja Google Chromea s web-lokacijom <ph name="SITE" /> ta je web-lokacija vratila neuobičajene i netočne vjerodajnice. To može značiti da se neki napadač pokušava predstaviti kao <ph name="SITE" /> ili je zaslon za prijavu na Wi-Fi prekinuo vezu. Vaši su podaci još uvijek sigurni jer je Google Chrome zaustavio povezivanje prije razmjene podataka.</translation>
 <translation id="168841957122794586">Certifikat poslužitelja sadrži slab kriptografski ključ!</translation>
@@ -206,6 +208,7 @@
     pružio nevažeće pravilo i preglednik zbog toga ne može
     ispuniti vaš zahtjev za <ph name="SITE" />.</translation>
 <translation id="2025186561304664664">Proxy je postavljen na automatsko konfiguriranje.</translation>
+<translation id="202813660234680402">Ne, nemoj dodati</translation>
 <translation id="2030481566774242610">Jeste li mislili <ph name="LINK" />?</translation>
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />provjerite proxy i vatrozid<ph name="END_LINK" /></translation>
 <translation id="2053111141626950936">Neće se prevoditi <ph name="LANGUAGE" />.</translation>
@@ -371,6 +374,7 @@
 <translation id="2934466151127459956">Government-Letter</translation>
 <translation id="2941952326391522266">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; njegov je sigurnosni certifikat s domene <ph name="DOMAIN2" />. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation>
 <translation id="2948083400971632585">Možete onemogućiti sve proxyje konfigurirane za vezu sa stranice postavki.</translation>
+<translation id="295526156371527179">Upozorenje: pravilo nije spojeno kao rječnik prema uputama u pravilu jer se ne radi o rječniku.</translation>
 <translation id="2955913368246107853">Zatvori traku za traženje</translation>
 <translation id="2969319727213777354">Za uspostavu sigurne veze sat mora biti točno postavljen jer certifikati pomoću kojih se web-lokacije međusobno identificiraju vrijede samo određeno vrijeme. Budući da vaš sat nije točan, Chrome ne može potvrditi te certifikate.</translation>
 <translation id="2970515157925768593">može daljinski promijeniti postavke uređaja i računa.</translation>
@@ -690,6 +694,7 @@
 <translation id="4738601419177586157">Prijedlog za pretraživanje <ph name="TEXT" /></translation>
 <translation id="4742407542027196863">Upravljaj zaporkama…</translation>
 <translation id="4744603770635761495">Izvršna putanja</translation>
+<translation id="47454865135383664">Želite li dodati karticu na Google račun?</translation>
 <translation id="4750917950439032686">Vaši podaci (na primjer, zaporke i brojevi kreditnih kartica) privatni su kada se šalju na tu web-lokaciju.</translation>
 <translation id="4756388243121344051">&amp;Povijest</translation>
 <translation id="4758311279753947758">Dodaj pod. za kontakt</translation>
@@ -785,6 +790,7 @@
 <translation id="5251803541071282808">Oblak</translation>
 <translation id="5252000469029418751">C7 (omotnica)</translation>
 <translation id="5254958791078852567">E1</translation>
+<translation id="5273658854610202413">Upozorenje: pravilo nije spojeno prema uputama u pravilu PolicyDictionaryMultipleSourceMergeList jer ne pripada pravilima rječnika koja se mogu spajati.</translation>
 <translation id="5283044957620376778">B1</translation>
 <translation id="528468243742722775">Završi</translation>
 <translation id="5284909709419567258">Mrežne adrese</translation>
@@ -908,13 +914,13 @@
 <translation id="5922853866070715753">Skoro gotovo</translation>
 <translation id="5932224571077948991">Web-lokacija prikazuje ometajuće ili obmanjujuće oglase</translation>
 <translation id="5946937721014915347">Otvaranje web-lokacije <ph name="SITE_NAME" />…</translation>
+<translation id="5947933617628957894">Da, dodaj</translation>
 <translation id="5951495562196540101">Prijava s računom potrošača nije moguća (dostupna je paketna licenca).</translation>
 <translation id="5967592137238574583">Uredite podatke za kontakt</translation>
 <translation id="5967867314010545767">Ukloni iz povijesti</translation>
 <translation id="5975083100439434680">Smanji</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Aplikacija za plaćanje ne može se otvoriti</translation>
-<translation id="5988826871883769516">Vašim uređajem upravlja <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nisu određeni fiksni proxy poslužitelji ni URL .pac skripte.</translation>
 <translation id="5990559369517809815">Zahtjevi poslužitelju blokirani su proširenjem.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -986,6 +992,7 @@
 <translation id="6414888972213066896">Pitao si roditelja smiješ li otvoriti tu web-lokaciju</translation>
 <translation id="6415778972515849510">Chromium vam može pomoći da zaštitite svoj Google račun i promijenite zaporku.</translation>
 <translation id="6417515091412812850">Nije moguće provjeriti je li certifikat opozvan.</translation>
+<translation id="6431585503458005759">Nemoj pohraniti</translation>
 <translation id="6433490469411711332">Uređivanje podataka za kontakt</translation>
 <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> odbio je povezivanje.</translation>
 <translation id="6434309073475700221">Odbaci</translation>
@@ -999,7 +1006,9 @@
 <translation id="6489534406876378309">Pokreni prijenos rušenja</translation>
 <translation id="6499038740797743453">Želite li poništiti zaporku?</translation>
 <translation id="6507833130742554667">Prihvaćaju se kreditne i debitne kartice.</translation>
+<translation id="650855688985305916">Da, pohrani</translation>
 <translation id="6508722015517270189">Ponovo pokrenite Chrome</translation>
+<translation id="6517596291481585650">Upozorenje: pravilo nije spojeno kao popis prema uputama u pravilima jer se ne radi o popisu.</translation>
 <translation id="6529602333819889595">&amp;Ponovi brisanje</translation>
 <translation id="6534179046333460208">Prijedlozi Fizičkog weba</translation>
 <translation id="6554795675067793129">Vašim računom upravlja <ph name="ENROLLMENT_DOMAIN" />.</translation>
@@ -1025,6 +1034,7 @@
 <translation id="6670613747977017428">Natrag u sigurnost.</translation>
 <translation id="6671697161687535275">Želite li ukloniti prijedlog iz Chromiuma?</translation>
 <translation id="6685834062052613830">Odjavite se i dovršite postavljanje</translation>
+<translation id="6689271823431384964">Chrome vam nudi spremanje vaših kartica na vaš Google račun jer ste prijavljeni. To ponašanje možete promijeniti u postavkama. Ime nositelja kartice preuzeto je s vašeg računa.</translation>
 <translation id="6710213216561001401">Prethodno</translation>
 <translation id="6710594484020273272">&lt;Upišite pojam za pretraživanje&gt;</translation>
 <translation id="671076103358959139">Oznaka za prijavu:</translation>
@@ -1134,6 +1144,7 @@
 <translation id="7313965965371928911">Upozorenja <ph name="BEGIN_LINK" />Sigurnog pregledavanja<ph name="END_LINK" /></translation>
 <translation id="7319430975418800333">A3</translation>
 <translation id="7320336641823683070">Pomoć za povezivanje</translation>
+<translation id="733354035281974745">Nadjačavanje lokalnog računa na uređaju</translation>
 <translation id="7334320624316649418">&amp;Ponovi promjenu rasporeda</translation>
 <translation id="733923710415886693">Certifikat poslužitelja nije otkriven putem Transparentnosti certifikata.</translation>
 <translation id="734600844861828519">11x15</translation>
@@ -1193,7 +1204,6 @@
 <translation id="7554791636758816595">Nova kartica</translation>
 <translation id="7564049878696755256">Mogli biste izgubiti pristup svojem <ph name="ORG_NAME" /> računu ili bi netko mogao ukrasti vaš identitet. Chrome preporučuje da odmah promijenite zaporku.</translation>
 <translation id="7567204685887185387">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; njegov sigurnosni certifikat možda je lažan. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation>
-<translation id="7568105740864181217">Preglednikom upravlja vaša tvrtka, škola ili druga organizacija. Vaš administrator može daljinski promijeniti postavke preglednika. Aktivnostima na tom uređaju može se upravljati i izvan Chromea. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Želite li s Chromea ukloniti kreditnu karticu?</translation>
 <translation id="7569983096843329377">Crna</translation>
 <translation id="7578104083680115302">Plaćajte brzo na web-lokacijama i u aplikacijama na više uređaja karticama koje ste spremili na Google.</translation>
@@ -1327,7 +1337,6 @@
 <translation id="825929999321470778">Prikaži sve spremljene zaporke</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8267698848189296333">Prijavljujete se kao <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Preglednikom upravlja <ph name="ENROLLMENT_DOMAIN" />. Vaš administrator može daljinski promijeniti postavke preglednika. Aktivnostima na tom uređaju može se upravljati i izvan Chromea. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Prijava</translation>
 <translation id="8288807391153049143">Prikaz certifikata</translation>
@@ -1341,6 +1350,7 @@
 <translation id="8340095855084055290"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="834457929814110454">Ako ste svjesni sigurnosnih rizika, možete <ph name="BEGIN_LINK" />posjetiti ovu web-lokaciju<ph name="END_LINK" /> prije uklanjanja štetnih programa.</translation>
 <translation id="8349305172487531364">Traka oznaka</translation>
+<translation id="836241887727198552">Želite li pohraniti karticu na Google račun?</translation>
 <translation id="8363502534493474904">isključite način rada u zrakoplovu</translation>
 <translation id="8364627913115013041">Nije postavljeno.</translation>
 <translation id="8368476060205742148">Google Play usluge</translation>
@@ -1383,6 +1393,7 @@
 <translation id="8620436878122366504">Roditelji je još nisu odobrili</translation>
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8625384913736129811">Spremi tu karticu na ovaj uređaj</translation>
+<translation id="8626112503828625890">Želite li pohraniti podatke o naplati na Google račun?</translation>
 <translation id="8663226718884576429">Sažetak narudžbe, <ph name="TOTAL_LABEL" />, više pojedinosti</translation>
 <translation id="8680536109547170164"><ph name="QUERY" />, odgovor, <ph name="ANSWER" /></translation>
 <translation id="8685155993131031756">Prc-16K</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index ae29d4e..88a3021a 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -913,7 +913,6 @@
 <translation id="5975083100439434680">Kicsinyítés</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nem sikerült megnyitni a fizetőalkalmazást</translation>
-<translation id="5988826871883769516">Az eszközét a következő kezeli: <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Sem fix proxyszerver, sem pedig .pac típusú szkript URL-címe nincs megadva.</translation>
 <translation id="5990559369517809815">A szerver felé irányuló kéréseket egy bővítmény blokkolja.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1192,7 +1191,6 @@
 <translation id="7554791636758816595">Új lap</translation>
 <translation id="7564049878696755256">Elveszítheti hozzáférést <ph name="ORG_NAME" />-fiókjához, vagy visszaélhetnek személyes adataival. A Chrome azt javasolja, hogy azonnal módosítsa jelszavát.</translation>
 <translation id="7567204685887185387">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványát csalással állíthatták ki. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation>
-<translation id="7568105740864181217">Ezt a böngészőt egy cég, iskola vagy más szervezet kezeli. A rendszergazda távolról tudja módosítani a böngészőbeállításokat. Az is lehetséges, hogy az eszközön végzett tevékenységeket a Chrome-on kívülről felügyelik. <ph name="BEGIN_LINK" />További információ.<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Eltávolítja a hitelkártyát a Chrome-ból?</translation>
 <translation id="7569983096843329377">Fekete</translation>
 <translation id="7578104083680115302">A Google rendszerében mentett kártyákkal gyorsan fizethet webhelyeken és alkalmazásokban bármelyik eszközén.</translation>
@@ -1326,7 +1324,6 @@
 <translation id="825929999321470778">Az összes mentett jelszó megjelenítése</translation>
 <translation id="8261506727792406068">Törlés</translation>
 <translation id="8267698848189296333">Bejelentkezés mint <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Ezt a böngészőt a(z) <ph name="ENROLLMENT_DOMAIN" /> kezeli. Rendszergazdája távolról módosíthatja a böngészőbeállításokat. Az is lehetséges, hogy az eszközön végzett tevékenységeket a Chrome-on kívülről felügyelik. <ph name="BEGIN_LINK" />További információ.<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Bejelentkezés</translation>
 <translation id="8288807391153049143">Tanúsítvány megjelenítése</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index ac48e42..8aec6224 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -914,7 +914,6 @@
 <translation id="5975083100439434680">Perkecil</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Tidak dapat membuka aplikasi pembayaran</translation>
-<translation id="5988826871883769516">Perangkat Anda dikelola oleh <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Baik proxy server tetap ataupun URL skrip .pac tidak ditentukan.</translation>
 <translation id="5990559369517809815">Permintaan ke server telah dicekal oleh ekstensi.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1191,7 +1190,6 @@
 <translation id="7554791636758816595">Tab Baru</translation>
 <translation id="7564049878696755256">Anda dapat kehilangan akses ke akun <ph name="ORG_NAME" /> atau mengalami pencurian identitas. Chrome menyarankan Anda untuk mengubah sandi sekarang.</translation>
 <translation id="7567204685887185387">Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; sertifikat keamanannya mungkin telah dikeluarkan dengan curang. Hal ini disebabkan oleh kesalahan konfigurasi atau penyerang memotong sambungan Anda.</translation>
-<translation id="7568105740864181217">Browser ini dikelola oleh sebuah perusahaan, sekolah, atau organisasi lain. Administrator dapat mengubah penyiapan browser Anda dari jarak jauh. Aktivitas di perangkat ini juga dapat dikelola di luar Chrome. <ph name="BEGIN_LINK" />Pelajari Lebih Lanjut<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Hapus kartu kredit dari Chrome?</translation>
 <translation id="7569983096843329377">Hitam</translation>
 <translation id="7578104083680115302">Bayar di situs dan aplikasi di semua perangkat dengan cepat menggunakan kartu yang disimpan dengan Google.</translation>
@@ -1325,7 +1323,6 @@
 <translation id="825929999321470778">Tampilkan Semua Sandi Tersimpan</translation>
 <translation id="8261506727792406068">Hapus</translation>
 <translation id="8267698848189296333">Login sebagai <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Browser ini dikelola oleh <ph name="ENROLLMENT_DOMAIN" />. Administrator dapat mengubah penyiapan browser Anda dari jarak jauh. Aktivitas di perangkat ini juga dapat dikelola di luar Chrome. <ph name="BEGIN_LINK" />Pelajari Lebih Lanjut<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Login</translation>
 <translation id="8288807391153049143">Tampilkan sertifikat</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 248785b9..80e967e 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -912,7 +912,6 @@
 <translation id="5975083100439434680">Diminuisci lo zoom</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Impossibile aprire l'app per i pagamenti</translation>
-<translation id="5988826871883769516">Il dispositivo è gestito da <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Non sono stati specificati né server proxy fissi né un URL script .pac.</translation>
 <translation id="5990559369517809815">Le richieste al server sono state bloccate da un'estensione.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1190,7 +1189,6 @@
 <translation id="7554791636758816595">Nuova scheda</translation>
 <translation id="7564049878696755256">Potresti non riuscire più ad accedere al tuo account <ph name="ORG_NAME" /> o subire un furto d'identità. Chrome ti consiglia di cambiare subito la password.</translation>
 <translation id="7567204685887185387">Questo server non è riuscito a dimostrare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza potrebbe essere stato emesso in modo fraudolento. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione.</translation>
-<translation id="7568105740864181217">Il browser in uso è gestito da un'azienda, una scuola o un'altra organizzazione. L'amministratore può modificare da remoto la configurazione del browser. L'attività svolta su questo dispositivo potrebbe essere gestita anche al di fuori di Chrome. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Rimuovere la carta di credito da Chrome?</translation>
 <translation id="7569983096843329377">Nero</translation>
 <translation id="7578104083680115302">Paga velocemente su siti e app su più dispositivi utilizzando le carte salvate su Google.</translation>
@@ -1324,7 +1322,6 @@
 <translation id="825929999321470778">Mostra tutte le password salvate</translation>
 <translation id="8261506727792406068">Elimina</translation>
 <translation id="8267698848189296333">Accesso come <ph name="USERNAME" /> in corso</translation>
-<translation id="8278457561961988242">Il browser in uso è gestito da <ph name="ENROLLMENT_DOMAIN" />. L'amministratore può modificare da remoto la configurazione del browser. L'attività svolta su questo dispositivo potrebbe essere gestita anche al di fuori di Chrome. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Accedi</translation>
 <translation id="8288807391153049143">Mostra certificato</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 82e4f007..0d8885c 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -912,7 +912,6 @@
 <translation id="5975083100439434680">התרחק</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">לא ניתן לפתוח את אפליקציית התשלומים</translation>
-<translation id="5988826871883769516">המכשיר שלך מנוהל על-ידי <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">‏לא צוינו שרתי Proxy קבועים ולא כתובת אתר של סקריפט ‎.pac</translation>
 <translation id="5990559369517809815">בקשות שנשלחו לשרת נחסמו על ידי תוסף.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1188,7 +1187,6 @@
 <translation id="7554791636758816595">כרטיסייה חדשה</translation>
 <translation id="7564049878696755256">‏הגישה שלך לחשבון <ph name="ORG_NAME" /> עשויה להישלל והזהות שלך עשויה להיגנב. ההמלצה של Chrome היא לשנות את הסיסמה עכשיו.</translation>
 <translation id="7567204685887185387">השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. ייתכן שאישור האבטחה שלו נופק כהונאה. הסיבה לכך עשויה להיות הגדרה שגויה או תוקף המיירט את החיבור שלך.</translation>
-<translation id="7568105740864181217">‏הדפדפן הזה מנוהל על ידי חברה, בית ספר או ארגון אחר. מנהל המערכת יכול לשנות את הגדרת הדפדפן שלך מרחוק. בנוסף, ניתן לנהל את הפעילות במכשיר הזה מחוץ ל-Chrome. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">‏האם להסיר את כרטיס האשראי מ-Chrome?</translation>
 <translation id="7569983096843329377">שחור</translation>
 <translation id="7578104083680115302">‏ניתן לשלם במהירות באתרים ובאפליקציות בכל המכשירים באמצעות כרטיסים ששמרת ב-Google.</translation>
@@ -1322,7 +1320,6 @@
 <translation id="825929999321470778">הצגת כל הסיסמאות השמורות</translation>
 <translation id="8261506727792406068">מחיקה</translation>
 <translation id="8267698848189296333">נכנס כ-<ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">‏דפדפן זה מנוהל על ידי <ph name="ENROLLMENT_DOMAIN" />. מנהל המערכת יכול לשנות את הגדרת הדפדפן מרחוק. בנוסף, ניתן לנהל את הפעילות במכשיר הזה מחוץ ל-Chrome. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">כניסה</translation>
 <translation id="8288807391153049143">הצגת אישור</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index afe501f..6adf4229 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">縮小する</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">お支払いアプリを開けません</translation>
-<translation id="5988826871883769516">このデバイスは <ph name="ENROLLMENT_DOMAIN" /> で管理されています。</translation>
 <translation id="5989320800837274978">固定プロキシ サーバーと .pac スクリプト URL のどちらも指定されていません。</translation>
 <translation id="5990559369517809815">サーバーへのリクエストは拡張機能によってブロックされています。</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">新しいタブ</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> アカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。今すぐパスワードを変更することをおすすめします。</translation>
 <translation id="7567204685887185387">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は不正に発行されたものである可能性があります。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation>
-<translation id="7568105740864181217">このブラウザは、会社、学校、その他の組織によって管理されています。管理者はブラウザの設定をリモートで変更できます。このデバイスでのアクティビティは、Chrome 以外でも管理されている可能性があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome からクレジット カードを削除してもよろしいですか?</translation>
 <translation id="7569983096843329377">黒</translation>
 <translation id="7578104083680115302">どのデバイスでも、Google に保存したカードを使ってサイトやアプリの支払いをすばやく行うことができます。</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">保存したパスワードをすべて表示</translation>
 <translation id="8261506727792406068">削除</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> としてログイン</translation>
-<translation id="8278457561961988242">このブラウザは <ph name="ENROLLMENT_DOMAIN" /> によって管理されています。管理者はブラウザの設定をリモートで変更できます。このデバイスでのアクティビティは、Chrome 以外でも管理されている可能性があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">ログイン</translation>
 <translation id="8288807391153049143">証明書を表示</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 2d31072..5e5cb520 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -910,7 +910,6 @@
 <translation id="5975083100439434680">ಝೂಮ್ ಔಟ್</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">ಪಾವತಿ ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
-<translation id="5988826871883769516">ನಿಮ್ಮ ಸಾಧನವನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ.</translation>
 <translation id="5989320800837274978">ಹೊಂದಿಸಿದ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್‌ಗಳು ಆಗಲಿ ಅಥವಾ .pac ಸ್ಕ್ರಿಪ್ಟ್ URL ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿಲ್ಲ.</translation>
 <translation id="5990559369517809815">ಸರ್ವರ್‌ಗಳ ವಿನಂತಿಗಳನ್ನು ವಿಸ್ತರಣೆಯಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1187,7 +1186,6 @@
 <translation id="7554791636758816595">ಹೊಸ ಟ್ಯಾಬ್</translation>
 <translation id="7564049878696755256">ನಿಮ್ಮ <ph name="ORG_NAME" /> ಖಾತೆಗೆ ನೀವು ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು ಅಥವಾ ಗುರುತು ಕಳ್ಳತನಕ್ಕೆ ಒಳಗಾಗಬಹುದು. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಇದೀಗ ಬದಲಾಯಿಸುವಂತೆ Chrome ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="7567204685887185387">ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರವನ್ನು ವಂಚನೆಯಿಂದ ನೀಡಿರಬಹುದು. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್‌ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು.</translation>
-<translation id="7568105740864181217">ಈ ಬ್ರೌಸರ್ ಅನ್ನು ಕಂಪನಿ, ಶಾಲೆ ಅಥವಾ ಇತರ ಸಂಸ್ಥೆಯು ನಿರ್ವಹಿಸುತ್ತಿದೆ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ದೂರದಿಂದಲೇ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟಪ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನಿಂದ ಹೊರಗೂ ನಿರ್ವಹಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome ನಿಂದ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ತೆಗೆದುಹಾಕುವುದೇ?</translation>
 <translation id="7569983096843329377">ಕಪ್ಪು</translation>
 <translation id="7578104083680115302">Google ನೊಂದಿಗೆ ನೀವು ಉಳಿಸಲಾದ ಕಾರ್ಡ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಾಧನಗಳಾದ್ಯಂತ ಸೈಟ್‌ಗಳು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ತ್ವರಿತವಾಗಿ ಪಾವತಿಸಿ.</translation>
@@ -1321,7 +1319,6 @@
 <translation id="825929999321470778">ಉಳಿಸಿದ ಎಲ್ಲ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> ನಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
-<translation id="8278457561961988242">ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತಿದೆ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ದೂರದಿಂದಲೇ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟಪ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನಿಂದ ಹೊರಗೂ ನಿರ್ವಹಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">ಸೈನ್ ಇನ್</translation>
 <translation id="8288807391153049143">ಪ್ರಮಾಣಪತ್ರವನ್ನು ತೋರಿಸಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 7864c39..6b70f077 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">축소</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">결제 앱을 열 수 없습니다.</translation>
-<translation id="5988826871883769516"><ph name="ENROLLMENT_DOMAIN" />에서 관리하는 기기입니다.</translation>
 <translation id="5989320800837274978">고정 프록시 서버와 .pac 스크립트 URL이 모두 지정되지 않았습니다.</translation>
 <translation id="5990559369517809815">서버에 대한 요청이 확장 프로그램에 의해 차단되었습니다.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">새 탭</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> 계정에 액세스할 수 없게 되거나 신원 도용이 발생할 수도 있습니다. 따라서 지금 비밀번호를 변경하는 것이 좋습니다.</translation>
 <translation id="7567204685887185387">이 서버가 <ph name="DOMAIN" />임을 입증할 수 없으며 서버의 보안 인증서가 부정한 방식으로 발행되었을 수 있습니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다.</translation>
-<translation id="7568105740864181217">이 브라우저는 회사, 학교 또는 기타 조직에서 관리합니다. 관리자가 원격으로 브라우저 설정을 변경할 수 있습니다. 이 기기의 활동은 Chrome 외부에서 관리될 수도 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome에서 신용카드를 삭제하시겠습니까?</translation>
 <translation id="7569983096843329377">검정색</translation>
 <translation id="7578104083680115302">Google에 저장한 카드를 사용하여 어떤 기기에서든지 사이트 및 앱에서 빠르게 지불할 수 있습니다.</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">저장된 비밀번호 모두 표시</translation>
 <translation id="8261506727792406068">삭제</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" />(으)로 로그인</translation>
-<translation id="8278457561961988242">이 브라우저는 <ph name="ENROLLMENT_DOMAIN" />에서 관리합니다. 관리자가 브라우저 설정을 원격으로 변경할 수 있습니다. 이 기기의 활동은 Chrome 외부에서 관리될 수도 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">로그인</translation>
 <translation id="8288807391153049143">인증서 표시</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index ac122289..129bc8ecf 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -916,7 +916,6 @@
 <translation id="5975083100439434680">Tolinti</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nepavyksta atidaryti mokėjimo programos</translation>
-<translation id="5988826871883769516">Įrenginį tvarko <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nenurodyti nei fiksuoti įgaliotieji serveriai, nei .pac scenarijaus URL.</translation>
 <translation id="5990559369517809815">Plėtinys užblokavo serveriui teikiamas užklausas.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1195,7 +1194,6 @@
 <translation id="7554791636758816595">Naujas skirtukas</translation>
 <translation id="7564049878696755256">Galite prarasti galimybę pasiekti „<ph name="ORG_NAME" />“ paskyrą arba gali būti pavogta tapatybė. „Chrome“ rekomenduoja pakeisti slaptažodį dabar.</translation>
 <translation id="7567204685887185387">Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikatas gali būti neteisėtai išduotas. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užgrobėjo.</translation>
-<translation id="7568105740864181217">Šią naršyklę tvarko įmonė, mokykla arba kita organizacija. Administratorius gali nuotoliniu būdu keisti naršyklės nustatymą. Veiklą šiame įrenginyje taip pat galima tvarkyti ne naršyklėje „Chrome“. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Pašalinti kredito kortelės informaciją iš „Chrome“?</translation>
 <translation id="7569983096843329377">Juoda</translation>
 <translation id="7578104083680115302">Greitai mokėkite svetainėse ir programose įvairiuose įrenginiuose naudodami korteles, kurias išsaugojote „Google“.</translation>
@@ -1329,7 +1327,6 @@
 <translation id="825929999321470778">Rodyti visus išsaugotus slaptažodžius</translation>
 <translation id="8261506727792406068">Ištrinti</translation>
 <translation id="8267698848189296333">Prisijungiama kaip <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Ši naršyklė tvarkoma <ph name="ENROLLMENT_DOMAIN" />. Administratorius gali nuotoliniu būdu keisti naršyklės nustatymą. Veiklą šiame įrenginyje taip pat galima tvarkyti ne naršyklėje „Chrome“. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Prisijungti</translation>
 <translation id="8288807391153049143">Rodyti sertifikatą</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 13d6ff1..e29e4a6 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -907,7 +907,6 @@
 <translation id="5975083100439434680">Tālināt</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nevar atvērt maksājumu lietotni</translation>
-<translation id="5988826871883769516">Jūsu ierīci pārvalda <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nav norādīti nedz fiksēti starpniekserveri, nedz .pac skripta URL.</translation>
 <translation id="5990559369517809815">Paplašinājums ir bloķējis pieprasījumus serverim.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1183,7 +1182,6 @@
 <translation id="7554791636758816595">Jauna cilne</translation>
 <translation id="7564049878696755256">Varat zaudēt piekļuvi savam <ph name="ORG_NAME" /> kontam, vai jūsu identitāte var tikt nozagta. Chrome iesaka nekavējoties nomainīt paroli.</translation>
 <translation id="7567204685887185387">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tās drošības sertifikāts, iespējams, ir izveidots krāpnieciski. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ir ļaunprātīgi izmantojis jūsu savienojumu.</translation>
-<translation id="7568105740864181217">Šo pārlūku pārvalda uzņēmums, skola vai cita organizācija. Jūsu administrators var attālināti mainīt jūsu pārlūka iestatījumus. Darbību šajā ierīcē var pārvaldīt arī ārpus Chrome. <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Vai noņemt kredītkarti no pārlūka Chrome?</translation>
 <translation id="7569983096843329377">Melna</translation>
 <translation id="7578104083680115302">Ātri apmaksājiet pirkumus vietnēs un lietotnēs no dažādām ierīcēm, izmantojot kartes, ko esat saglabājis Google sistēmā.</translation>
@@ -1317,7 +1315,6 @@
 <translation id="825929999321470778">Rādīt visas saglabātās paroles</translation>
 <translation id="8261506727792406068">Dzēst</translation>
 <translation id="8267698848189296333">Notiek pierakstīšanās lietotāja <ph name="USERNAME" /> kontā</translation>
-<translation id="8278457561961988242">Šo pārlūku pārvalda domēns <ph name="ENROLLMENT_DOMAIN" />. Jūsu administrators var attālināti mainīt pārlūka iestatījumus. Darbību šajā ierīcē var pārvaldīt arī ārpus Chrome. <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Pierakstīties</translation>
 <translation id="8288807391153049143">Rādīt sertifikātu</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index c291341..1b5ea6d 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -906,7 +906,6 @@
 <translation id="5975083100439434680">സൂം ഔട്ട്</translation>
 <translation id="5980920751713728343">സൂചിക-3x5</translation>
 <translation id="598637245381783098">പേയ്‌മെന്‍റ് ആപ്പ് തുറക്കാനായില്ല</translation>
-<translation id="5988826871883769516">നിങ്ങളുടെ ഉപകരണം മാനേജ് ചെയ്യുന്നത് <ph name="ENROLLMENT_DOMAIN" /> ആണ്.</translation>
 <translation id="5989320800837274978">ഒരു സ്ഥിരമായ പ്രോക്സി സെർവർ അല്ലെങ്കിൽ ഒരു .pac സ്‌ക്രിപ്റ്റ് URL വ്യക്തമാക്കിയിട്ടില്ല.</translation>
 <translation id="5990559369517809815">സെർവറിലേക്കുള്ള അഭ്യർത്ഥനകൾ ഒരു വിപുലീകരണം തടഞ്ഞു.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1180,7 +1179,6 @@
 <translation id="7554791636758816595">പുതിയ ടാബ്</translation>
 <translation id="7564049878696755256">നിങ്ങളുടെ <ph name="ORG_NAME" /> അക്കൗണ്ടിലേക്കുള്ള ആക്‌സസ് നഷ്‌ടമാകാനോ ഐഡന്‍റിറ്റി മോഷ്ടിക്കപ്പെടാനോ സാധ്യതയുണ്ട്. ഇപ്പോൾ തന്നെ പാസ്‍വേഡ് മാറ്റാൻ Chrome ശുപാർശ ചെയ്യുന്നു.</translation>
 <translation id="7567204685887185387">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; സെർവറിന്റെ സുരക്ഷ സർട്ടിഫിക്കറ്റ് വഞ്ചനാപരമായി ഇഷ്യൂ ചെയ്‌തിരിക്കാം. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation>
-<translation id="7568105740864181217">ഈ ബ്രൗസർ മാനേജ് ചെയ്യുന്നത് ഒരു കമ്പനിയോ സ്‌കൂളോ മറ്റേതെങ്കിലും സ്ഥാപനമോ ആണ്. നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർക്ക് വിദൂരമായി ബ്രൗസർ സജ്ജീകരണം മാറ്റാം. ഈ ഉപകരണത്തിലെ ആക്‌റ്റിവിറ്റി Chrome-ന് പുറത്തും മാനേജ് ചെയ്യുന്നുണ്ടാകാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome-ൽ നിന്ന് ക്രെഡിറ്റ് കാർഡ് നീക്കംചെയ്യണോ?</translation>
 <translation id="7569983096843329377">കറുപ്പ്</translation>
 <translation id="7578104083680115302">നിങ്ങൾ Google-ൽ സംരക്ഷിച്ച കാർഡുകൾ ഉപയോഗിച്ച് ഉപകരണങ്ങളിലുടനീളമുള്ള സൈറ്റുകളിലും ആപ്‌സിലും പെട്ടെന്ന് പണമടയ്‌ക്കുക.</translation>
@@ -1314,7 +1312,6 @@
 <translation id="825929999321470778">സംരക്ഷിച്ച എല്ലാ പാസ്‌വേഡുകളും കാണിക്കുക</translation>
 <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> എന്നയാളായി സൈൻ ഇൻ ചെയ്യുന്നു</translation>
-<translation id="8278457561961988242">ഈ ബ്രൗസർ മാനേജ് ചെയ്യുന്നത് <ph name="ENROLLMENT_DOMAIN" /> ആണ്. നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർക്ക് വിദൂരമായി ബ്രൗസർ സജ്ജീകരണം മാറ്റാം. ഈ ഉപകരണത്തിലെ ആക്‌റ്റിവിറ്റി Chrome-ന് പുറത്തും മാനേജ് ചെയ്യുന്നുണ്ടാകാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">വലിയ-ഫോട്ടോ</translation>
 <translation id="8286036467436129157">സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="8288807391153049143">സർട്ടിഫിക്കറ്റ് കാണിക്കുക</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index db48dfb8..248b622 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -914,7 +914,6 @@
 <translation id="5975083100439434680">झूम कमी करा</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">पेमेंट ॲप उघडू शकत नाही</translation>
-<translation id="5988826871883769516">तुमचे डिव्हाइस <ph name="ENROLLMENT_DOMAIN" /> द्वारे व्यवस्थापित केले आहे.</translation>
 <translation id="5989320800837274978">निश्चित प्रॉक्‍सी सर्व्हर किंवा .pac स्क्रिप्ट URL देखील निर्दिष्‍ट केलेली नाही.</translation>
 <translation id="5990559369517809815">सर्व्हरला केल्या जाणारी विनंती एका एक्स्टेंशनने ब्लॉक केली आहे.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">नवीन टॅब</translation>
 <translation id="7564049878696755256">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="7567204685887185387">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट कदाचित लबाडीने जारी केले असावे. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
-<translation id="7568105740864181217">हा ब्राउझर कंपनी, शाळा किंवा अन्य संस्थेद्वारे व्यवस्थापित केला आहे. तुमचा अ‍ॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचे सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी कदाचित Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome मधून क्रेडिट कार्ड काढून टाकायचे?</translation>
 <translation id="7569983096843329377">काळा</translation>
 <translation id="7578104083680115302">तुम्ही Google सह सेव्ह केलेल्या कार्डचा वापर करून डिव्‍हाइसेसवरून द्रुतपणे साइट आणि ॲप्सवर पेमेंट करा.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">सेव्ह केलेले सर्व पासवर्ड दाखवा</translation>
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> म्हणून साइन इन करीत आहे</translation>
-<translation id="8278457561961988242">हा ब्राउझर <ph name="ENROLLMENT_DOMAIN" /> द्वारे व्यवस्थापित केला आहे. तुमचा अ‍ॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचे सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी कदाचित Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">साइन इन</translation>
 <translation id="8288807391153049143">सर्टिफिकेट दाखवा</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 9cf202ec..2ed8c5e 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -909,7 +909,6 @@
 <translation id="5975083100439434680">Zum keluar</translation>
 <translation id="5980920751713728343">Indeks-3x5</translation>
 <translation id="598637245381783098">Tidak dapat membuka apl pembayaran</translation>
-<translation id="5988826871883769516">Peranti anda diurus oleh <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Pelayan proksi tetap begitu juga URL skrip .pac, kedua-duanya tidak ditetapkan.</translation>
 <translation id="5990559369517809815">Permintaan pada pelayan telah disekat oleh sambungan.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1185,7 +1184,6 @@
 <translation id="7554791636758816595">Tab Baharu</translation>
 <translation id="7564049878696755256">Anda boleh kehilangan akses kepada akaun <ph name="ORG_NAME" /> anda atau mengalami kecurian identiti. Chrome mengesyorkan supaya kata laluan anda ditukar sekarang.</translation>
 <translation id="7567204685887185387">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya mungkin telah dikeluarkan melalui penipuan. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation>
-<translation id="7568105740864181217">Penyemak imbas ini diurus oleh syarikat, sekolah atau organisasi lain. Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini mungkin turut diurus di luar Chrome. <ph name="BEGIN_LINK" />Ketahui Lebih Lanjut<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Alih keluar kad kredit daripada Chrome?</translation>
 <translation id="7569983096843329377">Hitam</translation>
 <translation id="7578104083680115302">Bayar dengan cepat di tapak dan apl merentas peranti menggunakan kad yang telah disimpan dengan Google.</translation>
@@ -1319,7 +1317,6 @@
 <translation id="825929999321470778">Tunjukkan Semua Kata Laluan yang Disimpan</translation>
 <translation id="8261506727792406068">Padam</translation>
 <translation id="8267698848189296333">Log masuk sebagai <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Penyemak imbas ini diurus oleh <ph name="ENROLLMENT_DOMAIN" />. Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini mungkin turut diurus di luar Chrome. <ph name="BEGIN_LINK" />Ketahui Lebih Lanjut<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Foto-Besar</translation>
 <translation id="8286036467436129157">Log Masuk</translation>
 <translation id="8288807391153049143">Tunjukkan sijil</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 8eec3743..329007bc 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -902,7 +902,6 @@
 <translation id="5975083100439434680">Uitzoomen</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Kan betaal-app niet openen</translation>
-<translation id="5988826871883769516">Je apparaat wordt beheerd door <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Er worden geen vaste proxyservers en geen pac-script-URL gespecificeerd.</translation>
 <translation id="5990559369517809815">Verzoeken aan de server zijn door een extensie geblokkeerd.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1177,7 +1176,6 @@
 <translation id="7554791636758816595">Nieuw tabblad</translation>
 <translation id="7564049878696755256">Je kunt de toegang tot je account van <ph name="ORG_NAME" /> kwijtraken of slachtoffer worden van identiteitsdiefstal. Chrome raadt je aan je wachtwoord nu te wijzigen.</translation>
 <translation id="7567204685887185387">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server is mogelijk frauduleus verstrekt. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation>
-<translation id="7568105740864181217">Deze browser wordt beheerd door een bedrijf, school of andere organisatie. Je beheerder kan je browserinstellingen op afstand wijzigen. Activiteit op dit apparaat kan ook buiten Chrome worden beheerd. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Creditcard verwijderen uit Chrome?</translation>
 <translation id="7569983096843329377">Zwart</translation>
 <translation id="7578104083680115302">Betaal op verschillende apparaten snel op sites en in apps met passen die je hebt opgeslagen via Google.</translation>
@@ -1311,7 +1309,6 @@
 <translation id="825929999321470778">Alle opgeslagen wachtwoorden weergeven</translation>
 <translation id="8261506727792406068">Verwijderen</translation>
 <translation id="8267698848189296333">Inloggen als <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Deze browser wordt beheerd door <ph name="ENROLLMENT_DOMAIN" />. Je beheerder kan je browserinstellingen op afstand wijzigen. Activiteit op dit apparaat kan ook buiten Chrome worden beheerd. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Grote foto</translation>
 <translation id="8286036467436129157">Inloggen</translation>
 <translation id="8288807391153049143">Certificaat weergeven</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 702be0f..f7706b2 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Zoom ut</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Kan ikke åpne betalingsappen</translation>
-<translation id="5988826871883769516">Enheten administreres av <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Verken statiske proxytjenere eller en nettadresse med .pac-skript er angitt.</translation>
 <translation id="5990559369517809815">Forespørsler til tjeneren har blitt blokkert av en utvidelse.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">Ny fane</translation>
 <translation id="7564049878696755256">Du kan miste tilgangen til <ph name="ORG_NAME" />-kontoen din eller bli utsatt for identitetstyveri. Chrome anbefaler at du endrer passordet ditt nå.</translation>
 <translation id="7567204685887185387">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Tjenerens sikkerhetssertifikat kan ha blitt utstedt på uredelig vis. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din.</translation>
-<translation id="7568105740864181217">Denne nettleseren administreres av et selskap, en skole eller en annen organisasjon. Administratoren kan endre nettleseroppsettet eksternt. Aktiviteten på denne enheten kan også administreres utenfor Chrome. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Vil du fjerne kredittkortet fra Chrome?</translation>
 <translation id="7569983096843329377">Svart</translation>
 <translation id="7578104083680115302">Når du lagrer kort med Google, kan du bruke dem til å betale raskt på nettsteder og i apper – uansett hvilken enhet du bruker.</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">Vis alle lagrede passord</translation>
 <translation id="8261506727792406068">Slett</translation>
 <translation id="8267698848189296333">Logger på som <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Denne nettleseren administreres av <ph name="ENROLLMENT_DOMAIN" />. Administratoren kan endre nettleseroppsettet eksternt. Aktiviteten på denne enheten kan også administreres utenfor Chrome. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Logg på</translation>
 <translation id="8288807391153049143">Vis sertifikat</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 274ca023..1004a69 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Pomniejsz</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nie można otworzyć aplikacji do płatności</translation>
-<translation id="5988826871883769516">Twoim urządzeniem zarządza <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nie określono ani stałych serwerów proxy, ani adresu URL skryptu PAC.</translation>
 <translation id="5990559369517809815">Żądania do serwera zostały zablokowane przez rozszerzenie.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Nowa karta</translation>
 <translation id="7564049878696755256">Możesz stracić dostęp do swojego konta <ph name="ORG_NAME" /> lub paść ofiarą kradzieży tożsamości. Chrome zaleca natychmiastową zmianę hasła.</translation>
 <translation id="7567204685887185387">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa mógł zostać wydany w celu oszustwa. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation>
-<translation id="7568105740864181217">Ta przeglądarka jest zarządzana przez firmę, szkołę lub inną organizację. Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chrome. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Usunąć tę kartę kredytową z Chrome?</translation>
 <translation id="7569983096843329377">Czarny</translation>
 <translation id="7578104083680115302">Używaj swoich kart zapisanych w Google, by łatwiej dokonywać płatności na stronach i w aplikacjach na różnych urządzeniach.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Pokaż wszystkie zapisane hasła</translation>
 <translation id="8261506727792406068">Usuń</translation>
 <translation id="8267698848189296333">Logujesz się jako <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Ta przeglądarka jest zarządzana przez <ph name="ENROLLMENT_DOMAIN" />. Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chrome. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Zaloguj się</translation>
 <translation id="8288807391153049143">Pokaż certyfikat</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 74a4e3d..b8b0f22d 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Diminuir zoom</translation>
 <translation id="5980920751713728343">76 mm x 127 mm</translation>
 <translation id="598637245381783098">Não foi possível abrir app de pagamento</translation>
-<translation id="5988826871883769516">Seu dispositivo é gerenciado por <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nem os servidores proxy fixos nem o URL de script .pac foram especificados.</translation>
 <translation id="5990559369517809815">Solicitações ao servidor foram bloqueadas por uma extensão.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Nova guia</translation>
 <translation id="7564049878696755256">Você pode perder o acesso à sua conta de <ph name="ORG_NAME" /> ou ter sua identidade roubada. O Chrome recomenda que sua senha seja alterada agora.</translation>
 <translation id="7567204685887185387">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança pode ter sido emitido de forma fraudulenta. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation>
-<translation id="7568105740864181217">Este navegador é gerenciado por uma empresa, escola ou outra organização. O administrador pode alterar as configurações do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Remover cartão de crédito do Chrome?</translation>
 <translation id="7569983096843329377">Preto</translation>
 <translation id="7578104083680115302">Pague rapidamente em sites e aplicativos em vários dispositivos usando os cards que você salvou com o Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Mostrar todas as senhas salvas</translation>
 <translation id="8261506727792406068">Excluir</translation>
 <translation id="8267698848189296333">Fazendo login como <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Este navegador é gerenciado por <ph name="ENROLLMENT_DOMAIN" />. Seu administrador pode alterar a configuração do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large photo</translation>
 <translation id="8286036467436129157">Fazer login</translation>
 <translation id="8288807391153049143">Mostrar certificado</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index a5a2653..40d9565a 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Reduzir</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Não é possível abrir a aplicação de pagamento</translation>
-<translation id="5988826871883769516">O seu dispositivo é gerido por <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Não foram especificados servidores proxy fixos nem um URL de script .pac.</translation>
 <translation id="5990559369517809815">Os pedidos para o servidor foram bloqueados por uma extensão.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">Novo separador</translation>
 <translation id="7564049878696755256">Pode perder o acesso à sua conta do serviço <ph name="ORG_NAME" /> ou ser vítima de roubo de identidade. O Chrome recomenda a alteração da palavra-passe agora.</translation>
 <translation id="7567204685887185387">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o respetivo certificado de segurança poderá ter sido emitido de forma fraudulenta. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation>
-<translation id="7568105740864181217">Este navegador é gerido por uma empresa, escola ou outra entidade. O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Pretende remover o cartão de crédito do Chrome?</translation>
 <translation id="7569983096843329377">Preto</translation>
 <translation id="7578104083680115302">Pague rapidamente em sites e aplicações em todos os dispositivos com cartões que tenha guardado com o Google.</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">Mostrar todas as palavras-passe guardadas</translation>
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8267698848189296333">A iniciar sessão como <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Este navegador é gerido por <ph name="ENROLLMENT_DOMAIN" />. O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Iniciar Sessão</translation>
 <translation id="8288807391153049143">Mostrar certificado</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 344e5b1..ce28e6e3 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Micșorează</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nu se poate deschide aplicația de plată</translation>
-<translation id="5988826871883769516">Dispozitivul este gestionat de <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nu sunt specificate nici servere proxy fixe și nici o adresă URL pentru scripturi .pac.</translation>
 <translation id="5990559369517809815">Solicitările trimise la server au fost blocate de o extensie.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Filă nouă</translation>
 <translation id="7564049878696755256">Este posibil să pierzi accesul la contul <ph name="ORG_NAME" /> sau să fii victima unui furt de identitate. Chrome îți recomandă să îți schimbi acum parola.</translation>
 <translation id="7567204685887185387">Acest server nu a putut dovedi că este <ph name="DOMAIN" />; este posibil ca certificatul său de securitate să fi fost emis fraudulos. Cauza poate fi o configurare greșită sau interceptarea conexiunii de către un atacator.</translation>
-<translation id="7568105740864181217">Browserul este gestionat de o companie, școală sau altă organizație. Administratorul poate schimba configurația browserului de la distanță. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată și din afara Chrome. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Elimini cardul de credit din Chrome?</translation>
 <translation id="7569983096843329377">Negru</translation>
 <translation id="7578104083680115302">Plătește rapid pe site-uri și în aplicații pe diferite dispozitive folosind cardurile pe care le-ai salvat pe Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Afișează toate parolele salvate</translation>
 <translation id="8261506727792406068">Șterge</translation>
 <translation id="8267698848189296333">Te conectezi ca <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Browserul este gestionat de <ph name="ENROLLMENT_DOMAIN" />. Administratorul tău poate schimba configurarea browserului de la distanță. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată și din afara Chrome. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Fotografie-Mare</translation>
 <translation id="8286036467436129157">Conectați-vă</translation>
 <translation id="8288807391153049143">Afișează certificatul</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 39d802d..482f107 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -906,7 +906,6 @@
 <translation id="5975083100439434680">Уменьшить</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Не удалось открыть Payments</translation>
-<translation id="5988826871883769516">Ваше устройство находится под управлением домена <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Ни фиксированные прокси-серверы, ни URL PAC-скриптов не указаны.</translation>
 <translation id="5990559369517809815">Расширение заблокировало отправку запроса на сервер.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1182,7 +1181,6 @@
 <translation id="7554791636758816595">Новая вкладка</translation>
 <translation id="7564049878696755256">Кто-то посторонний мог получить доступ к вашим личным данным или аккаунту в домене <ph name="ORG_NAME" />. Рекомендуем немедленно сменить пароль.</translation>
 <translation id="7567204685887185387">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности мог быть выдан обманным путем. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation>
-<translation id="7568105740864181217">Этим браузером управляет компания, учебное заведение или другая организация. Администратор может удаленно менять настройки браузера и выполнять другие действия вне браузера Chrome на этом устройстве. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Удалить кредитную карту из Chrome?</translation>
 <translation id="7569983096843329377">Черный</translation>
 <translation id="7578104083680115302">Быстро оплачивайте покупки на сайтах и в приложениях с помощью карт, сохраненных в Google Payments. Настройка будет действовать на всех ваших устройствах.</translation>
@@ -1316,7 +1314,6 @@
 <translation id="825929999321470778">Показать все сохраненные пароли</translation>
 <translation id="8261506727792406068">Удалить</translation>
 <translation id="8267698848189296333">Вход в аккаунт <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">У администратора <ph name="ENROLLMENT_DOMAIN" /> есть право удаленно менять настройки этого браузера и выполнять другие действия вне браузера Chrome на этом устройстве. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Вход</translation>
 <translation id="8288807391153049143">Показать сертификат</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 2f2b1109..a5c398a 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -903,7 +903,6 @@
 <translation id="5975083100439434680">Oddialiť</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Nie je možné otvoriť platobnú aplikáciu</translation>
-<translation id="5988826871883769516">Vaše zariadenie spravuje <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Nie sú určené pevne dané servery proxy ani skript PAC webovej adresy.</translation>
 <translation id="5990559369517809815">Žiadosti odoslané serveru boli zablokované rozšírením.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1178,7 +1177,6 @@
 <translation id="7554791636758816595">Nová karta</translation>
 <translation id="7564049878696755256">Môžete stratiť prístup do účtu <ph name="ORG_NAME" /> alebo vám niekto môže ukradnúť identitu. Chrome odporúča, aby ste si ihneď zmenili heslo.</translation>
 <translation id="7567204685887185387">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, bol zrejme vydaný falošný bezpečnostný certifikát. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation>
-<translation id="7568105740864181217">Tento prehliadač spravuje spoločnosť, škola alebo iná organizácia. Nastavenia prehliadača môže vzdialene zmeniť správca. Aktivita v tomto zariadení môže byť tiež spravovaná mimo Chromu. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chcete kreditnú kartu odstrániť z prehliadača Chrome?</translation>
 <translation id="7569983096843329377">Čierna</translation>
 <translation id="7578104083680115302">Zaplaťte rýchlejšie na stránkach a v aplikáciách v rôznych službách pomocou kariet, ktoré ste si uložili na Googli.</translation>
@@ -1312,7 +1310,6 @@
 <translation id="825929999321470778">Zobraziť všetky uložené heslá</translation>
 <translation id="8261506727792406068">Odstrániť</translation>
 <translation id="8267698848189296333">Prihlasovanie pomocou účtu <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Tento prehliadač spravuje <ph name="ENROLLMENT_DOMAIN" />. Jeho nastavenie môže vzdialene zmeniť váš správca. Aktivita v tomto zariadení môže byť tiež spravovaná mimo Chromu. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Veľká fotka</translation>
 <translation id="8286036467436129157">Prihlásenie</translation>
 <translation id="8288807391153049143">Zobraziť certifikát</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index e652aa87..395876ae 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Pomanjšaj</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Plačilne aplikacije ni mogoče odpreti</translation>
-<translation id="5988826871883769516">Napravo upravlja domena <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Določeni niso ne stalni strežniki proxy ne URL skripta .pac.</translation>
 <translation id="5990559369517809815">Zahteve za strežnik je blokirala razširitev.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Nov zavihek</translation>
 <translation id="7564049878696755256">Izgubite lahko dostop do računa za <ph name="ORG_NAME" /> ali postanete žrtev kraje identitete. Chrome priporoča, da spremenite geslo.</translation>
 <translation id="7567204685887185387">Strežniku ni uspelo dokazati, da je <ph name="DOMAIN" />; njegovo varnostno potrdilo je bilo morda izdano z goljufijo. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave.</translation>
-<translation id="7568105740864181217">Ta brskalnik upravlja podjetje, šola ali druga organizacija. Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chroma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Želite odstraniti kreditno kartico iz Chroma?</translation>
 <translation id="7569983096843329377">Črna</translation>
 <translation id="7578104083680115302">Hitro plačevanje na spletnih mestih in v aplikacijah v vseh napravah s karticami, ki ste jih shranili v Googlu.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Prikaz vseh shranjenih gesel</translation>
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8267698848189296333">Prijava kot: <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Ta brskalnik upravlja domena <ph name="ENROLLMENT_DOMAIN" />. Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chroma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Prijava</translation>
 <translation id="8288807391153049143">Prikaz potrdila</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 764e94e9..75148985 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Умањивање</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Отварање апликације за плаћање није успело</translation>
-<translation id="5988826871883769516">Уређајем управља <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Нису наведени ни фиксни прокси сервери нити URL адреса .pac скрипте.</translation>
 <translation id="5990559369517809815">Додатак је блокирао захтеве упућене серверу.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">Нова картица</translation>
 <translation id="7564049878696755256">Можете да изгубите приступ налогу за <ph name="ORG_NAME" /> или би могло да дође до крађе идентитета. Chrome вам препоручује да одмах промените лозинку.</translation>
 <translation id="7567204685887185387">Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је можда лажно издат. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу.</translation>
-<translation id="7568105740864181217">Овим прегледачем управља компанија, школа или нека друга организација. Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају се можда управља и ван Chrome-а. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Желите ли да уклоните кредитну картицу из Chrome-а?</translation>
 <translation id="7569983096843329377">Црна</translation>
 <translation id="7578104083680115302">Плаћајте брзо на сајтовима и у апликацијама на свим уређајима помоћу картица које сте сачували на Google-у.</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">Прикажи све сачуване лозинке</translation>
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8267698848189296333">Пријављујете се као <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Овим прегледачем управља <ph name="ENROLLMENT_DOMAIN" />. Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају се можда управља и ван Chrome-а. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Пријави ме</translation>
 <translation id="8288807391153049143">Прикажи сертификат</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index d5c28c3..9d083a1f 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Zooma ut</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Det gick inte att öppna betalningsappen</translation>
-<translation id="5988826871883769516">Enheten hanteras av <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Varken fasta proxyservrar eller en webbadress med PAC-skript har angetts.</translation>
 <translation id="5990559369517809815">Förfrågningar till servern har blockerats av ett tillägg.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Ny flik</translation>
 <translation id="7564049878696755256">Du kan förlora åtkomsten till kontot på <ph name="ORG_NAME" /> eller bli utsatt för identitetsstöld. Du rekommenderas att ändra lösenordet nu.</translation>
 <translation id="7567204685887185387">Servern kunde inte bevisa att den är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat kan ha utfärdats utan behörighet. Detta kan orsakas av en felaktig konfigurering eller att någon spärrar anslutningen.</translation>
-<translation id="7568105740864181217">Den här webbläsaren hanteras av ett företag, en skola eller någon annan organisation. Administratören kan ändra webbläsarinställningarna på distans. Aktiviteter på den här enheten kan också hanteras utanför Chrome. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Vill du ta bort kreditkortet från Chrome?</translation>
 <translation id="7569983096843329377">Svart</translation>
 <translation id="7578104083680115302">Betala snabbt på webbplatser och i appar på olika enheter med kort som du har sparat hos Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Visa alla sparade lösenord</translation>
 <translation id="8261506727792406068">Radera</translation>
 <translation id="8267698848189296333">Loggar in som <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Den här webbläsaren hanteras av <ph name="ENROLLMENT_DOMAIN" />. Din administratör kan ändra dina webbläsarinställningar på distans. Aktiviteter på den här enheten kan också hanteras utanför Chrome. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Logga in</translation>
 <translation id="8288807391153049143">Visa certifikat</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index c3908f02..58de466 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Fifiza</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Imeshindwa kufungua programu ya kulipa</translation>
-<translation id="5988826871883769516">Kifaa chako kinasimamiwa na <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Siyo seva proksi za kudumu wala URL ya hati ya .pac zimebainishwa.</translation>
 <translation id="5990559369517809815">Maombi katika seva yamezuiwa kwa kiendelezi.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1192,7 +1191,6 @@
 <translation id="7554791636758816595">Kichupo Kipya</translation>
 <translation id="7564049878696755256">Unaweza kupoteza uwezo wa kufikia Akaunti yako ya <ph name="ORG_NAME" /> au kuibiwa utambulisho. Chrome inapendekeza ubadilishe nenosiri lako sasa.</translation>
 <translation id="7567204685887185387">Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; huenda cheti chake cha usalama kimetolewa kwa njia ya ulaghai. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako.</translation>
-<translation id="7568105740864181217">Kivinjari hiki kinadhibitiwa na kampuni, shule au shirika lingine. Msimamizi wako anaweza kubadilisha mipangilio ya kuweka kivinjari kwa mbali. Shughuli kwenye kifaa hiki huenda zikadhibitiwa nje ya Chrome. <ph name="BEGIN_LINK" />Pata Maelezo Zaidi<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Ungependa kuondoa kadi ya malipo kutoka kwenye Chrome?</translation>
 <translation id="7569983096843329377">Nyeusi</translation>
 <translation id="7578104083680115302">Lipa haraka kwenye tovuti na programu katika vifaa vyote ukitumia kadi ulizohifadhi kwenye Google.</translation>
@@ -1326,7 +1324,6 @@
 <translation id="825929999321470778">Onyesha Manenosiri Yote Yaliyohifadhiwa</translation>
 <translation id="8261506727792406068">Futa</translation>
 <translation id="8267698848189296333">Ingia katika akaunti ukitumia <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Kivinjari hiki kinadhibitiwa na <ph name="ENROLLMENT_DOMAIN" />. Msimamizi wako anaweza kubadilisha mipangilio ya kuweka kivinjari chako kwa mbali. Shughuli kwenye kifaa hiki huenda zikadhibitiwa nje ya Chrome. <ph name="BEGIN_LINK" />Pata Maelezo Zaidi<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Ingia</translation>
 <translation id="8288807391153049143">Onyesha cheti</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 073afef..36feb74 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -126,7 +126,7 @@
 <translation id="1559528461873125649">இதுபோன்ற கோப்பு அல்லது கோப்பகம் எதுவுமில்லை</translation>
 <translation id="1559572115229829303">&lt;p&gt;உங்கள் சாதனத்தின் தேதி மற்றும் நேரம் (<ph name="DATE_AND_TIME" />) தவறாக இருப்பதால் <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> என்கிற டொமைனிற்குத் தனிப்பட்ட இணைப்பை ஏற்படுத்த முடியவில்லை.&lt;/p&gt;
 
-      &lt;p&gt;தேதி மற்றும் நேரத்தை &lt;strong&gt;அமைப்புகள்&lt;/strong&gt; பயன்பாட்டின் &lt;strong&gt;பொது&lt;/strong&gt; என்கிற பகுதியில் மாற்றவும்.&lt;/p&gt;</translation>
+      &lt;p&gt;தேதி மற்றும் நேரத்தை &lt;strong&gt;அமைப்புகள்&lt;/strong&gt; ஆப்ஸின் &lt;strong&gt;பொது&lt;/strong&gt; என்கிற பகுதியில் மாற்றவும்.&lt;/p&gt;</translation>
 <translation id="1569487616857761740">காலாவதித் தேதியை உள்ளிடவும்</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">இந்த இணையப்பக்கத்தைக் காட்டும்போது ஏதோ தவறு ஏற்பட்டது.</translation>
@@ -392,7 +392,7 @@
 <translation id="3037605927509011580">அச்சச்சோ!</translation>
 <translation id="3041612393474885105">சான்றிதழ் தகவல்</translation>
 <translation id="3060227939791841287">C9 (என்வலப்)</translation>
-<translation id="3064966200440839136">வெளிப்புறப் பயன்பாட்டின் மூலம் பணத்தை செலுத்த, மறைநிலையிலிருந்து வெளியேறுகிறீர்கள். தொடரவா?</translation>
+<translation id="3064966200440839136">வெளிப்புற ஆப்ஸின் மூலம் பணத்தை செலுத்த, மறைநிலையிலிருந்து வெளியேறுகிறீர்கள். தொடரவா?</translation>
 <translation id="3083099961703215236">{COUNT,plural, =0{ஏதுமில்லை}=1{1 கடவுச்சொல்}other{# கடவுச்சொற்கள்}}</translation>
 <translation id="3095940652251934233">Statement</translation>
 <translation id="3096100844101284527">பிக்அப் முகவரியைச் சேர்</translation>
@@ -910,7 +910,6 @@
 <translation id="5975083100439434680">சிறிதாக்கு</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">பேமெண்ட் பயன்பாட்டைத் திறக்க முடியவில்லை</translation>
-<translation id="5988826871883769516">உங்கள் சாதனம் <ph name="ENROLLMENT_DOMAIN" /> மூலம் நிர்வகிக்கப்படுகிறது.</translation>
 <translation id="5989320800837274978">ப்ராக்ஸி சேவையகம் சரிசெய்யப்படவும் இல்லை .pac ஸ்கிரிப்ட் URL குறிப்பிடப்படவுமில்லை.</translation>
 <translation id="5990559369517809815">சேவையகத்திற்கான கோரிக்கைகள் நீட்டிப்பினால் தடுக்கப்பட்டது.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1188,7 +1187,6 @@
 <translation id="7554791636758816595">புதிய தாவல்</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> கணக்கிற்கான அணுகலை நீங்கள் இழக்கக்கூடும் அல்லது அடையாளத் திருட்டை எதிர்கொள்ளக்கூடும். இப்போதே உங்கள் கடவுச்சொல்லை மாற்றும்படி Chrome பரிந்துரைக்கிறது.</translation>
 <translation id="7567204685887185387">இது <ph name="DOMAIN" /> தான் என்பதை இந்தச் சேவையகம் உறுதிப்படுத்தவில்லை; இதன் பாதுகாப்புச் சான்றிதழில் மோசடி செய்யப்பட்டிருக்கலாம். இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம்.</translation>
-<translation id="7568105740864181217">இந்த உலாவி ஒரு நிறுவனம், பள்ளி அல்லது பிற அமைப்பால் நிர்வகிக்கப்படுகிறது. உங்கள் உலாவியின் அமைவை உங்கள் நிர்வாகியால் தொலைநிலையிலிருந்து மாற்ற முடியும். இந்தச் சாதனத்தின் செயல்பாடுகளை Chromeமுக்கு வெளியிலிருந்தும் நிர்வகிக்கலாம். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome இலிருந்து கிரெடிட் கார்டை அகற்றவா?</translation>
 <translation id="7569983096843329377">கருப்பு</translation>
 <translation id="7578104083680115302">Google இல் நீங்கள் சேமித்துள்ள கார்டுகளைப் பயன்படுத்தி பல தளங்களிலும் பயன்பாடுகளிலும் உங்களுடைய  சாதனங்களில் அனைத்திலும் விரைவாகப் பணம் செலுத்தலாம்.</translation>
@@ -1322,7 +1320,6 @@
 <translation id="825929999321470778">சேமித்த எல்லாக் கடவுச்சொற்களையும் காட்டு</translation>
 <translation id="8261506727792406068">நீக்கு</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> ஆக உள்நுழைகிறீர்கள்</translation>
-<translation id="8278457561961988242">இந்த உலாவியை <ph name="ENROLLMENT_DOMAIN" /> நிர்வகிக்கிறது. உங்கள் உலாவியின் அமைவை உங்கள் நிர்வாகியால் தொலைநிலையிலிருந்து மாற்ற முடியும். இந்தச் சாதனத்தின் செயல்பாடுகளை Chromeமுக்கு வெளியிலிருந்தும் நிர்வகிக்கலாம். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">உள்நுழை</translation>
 <translation id="8288807391153049143">சான்றிதழைக் காட்டும்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 5d7132dc..8f94cde4 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -909,7 +909,6 @@
 <translation id="5975083100439434680">దూరంగా జూమ్ చెయ్యి</translation>
 <translation id="5980920751713728343">సూచిక-3x5</translation>
 <translation id="598637245381783098">చెల్లింపు యాప్‌ను తెరవడం సాధ్యం కాదు</translation>
-<translation id="5988826871883769516">మీ పరికరం <ph name="ENROLLMENT_DOMAIN" /> నిర్వహణలో ఉంది.</translation>
 <translation id="5989320800837274978">స్థిర ప్రాక్సీ సర్వర్‌లు లేదా ఒక .pac స్క్రిప్ట్ URL పేర్కొనబడలేదు.</translation>
 <translation id="5990559369517809815">సర్వర్‌కు అభ్యర్థనలను ఒక ఎక్సటెన్షన్ బ్లాక్ చేయబడ్డాయి.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1185,7 +1184,6 @@
 <translation id="7554791636758816595">కొత్త ట్యాబ్</translation>
 <translation id="7564049878696755256">మీరు మీ <ph name="ORG_NAME" /> ఖాతాకు యాక్సెస్‌ని కోల్పోవచ్చు లేదా గుర్తింపు చోరీకి గురి కావచ్చు. మీ పాస్‌వర్డ్‌ని ఇప్పుడే రీసెట్ చేయాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="7567204685887185387">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం మోసపూరితంగా జారీ అయ్యి ఉండవచ్చు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
-<translation id="7568105740864181217">ఈ బ్రౌజర్ కంపెనీ, పాఠశాల లేదా ఇతర సంస్థ ద్వారా నిర్వహించబడుతోంది. మీ నిర్వాహకుడు మీ బ్రౌజర్ సెటప్‌ను రిమోట్ విధానంలో మార్చవచ్చు. ఈ పరికరంలోని కార్యకలాపం Chrome వెలుపల కూడా నిర్వహిస్తుండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Chrome నుండి క్రెడిట్ కార్డ్‌ను తీసివేయాలా?</translation>
 <translation id="7569983096843329377">నలుపు</translation>
 <translation id="7578104083680115302">మీరు Googleతో సేవ్ చేసిన కార్డ్‌లను ఉపయోగించి పరికరాల్లోని సైట్‌లు మరియు అనువర్తనాల్లో శీఘ్రంగా చెల్లించండి.</translation>
@@ -1319,7 +1317,6 @@
 <translation id="825929999321470778">సేవ్ చేసిన అన్ని పాస్‌వర్డ్‌లను చూపండి</translation>
 <translation id="8261506727792406068">తొలగించు</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" />గా సైన్ ఇన్ చేస్తోంది</translation>
-<translation id="8278457561961988242">ఈ బ్రౌజర్ <ph name="ENROLLMENT_DOMAIN" /> ద్వారా నిర్వహించబడుతోంది. మీ నిర్వాహకుడు మీ బ్రౌజర్ సెటప్‌ను రిమోట్ విధానంలో మార్చవచ్చు. ఈ పరికరంలోని కార్యకలాపం Chrome వెలుపల కూడా నిర్వహిస్తుండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">పెద్ద-ఫోటో</translation>
 <translation id="8286036467436129157">సైన్ ఇన్ చేయండి</translation>
 <translation id="8288807391153049143">సర్టిఫికేట్‌ను చూపు</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 99e9ffc7..885c0d7 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -914,7 +914,6 @@
 <translation id="5975083100439434680">ย่อ</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">ไม่สามารถเปิดแอปการชำระเงิน</translation>
-<translation id="5988826871883769516">อุปกรณ์นี้จัดการโดย <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="5989320800837274978">ไม่มีการระบุทั้งพร็อกซีเซิร์ฟเวอร์แบบคงที่หรือ URL สคริปต์ .pac</translation>
 <translation id="5990559369517809815">คำขอไปยังเซิร์ฟเวอร์ถูกบล็อกโดยส่วนขยาย</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1193,7 +1192,6 @@
 <translation id="7554791636758816595">แท็บใหม่</translation>
 <translation id="7564049878696755256">คุณอาจเข้าถึงบัญชี <ph name="ORG_NAME" /> ไม่ได้หรือถูกโจรกรรมข้อมูลประจำตัว Chrome ขอแนะนำให้เปลี่ยนรหัสผ่านตอนนี้เลย</translation>
 <translation id="7567204685887185387">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะอาจมีการออกใบรับรองความปลอดภัยปลอม โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation>
-<translation id="7568105740864181217">เบราว์เซอร์นี้จัดการโดยบริษัท โรงเรียน หรือองค์กรอื่นๆ ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ได้ด้วย <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">นำบัตรเครดิตออกจาก Chrome ไหม</translation>
 <translation id="7569983096843329377">สีดำ</translation>
 <translation id="7578104083680115302">ชำระเงินบนเว็บไซต์และแอปในอุปกรณ์ต่างๆ ได้อย่างรวดเร็วด้วยบัตรที่คุณได้บันทึกไว้กับ Google</translation>
@@ -1327,7 +1325,6 @@
 <translation id="825929999321470778">แสดงรหัสผ่านที่บันทึกไว้ทั้งหมด</translation>
 <translation id="8261506727792406068">ลบ</translation>
 <translation id="8267698848189296333">ลงชื่อเข้าใช้ด้วย <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">เบราว์เซอร์นี้จัดการโดย <ph name="ENROLLMENT_DOMAIN" /> ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ได้ด้วย <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">รูปภาพขนาดใหญ่</translation>
 <translation id="8286036467436129157">ลงชื่อเข้าใช้</translation>
 <translation id="8288807391153049143">แสดงใบรับรอง</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 503047e..641651f 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Uzaklaştır</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Ödeme uygulaması açılamıyor</translation>
-<translation id="5988826871883769516">Cihazınız <ph name="ENROLLMENT_DOMAIN" /> tarafından yönetiliyor.</translation>
 <translation id="5989320800837274978">Sabit proxy sunucular veya bir .pac komut dosyası URL'si belirtilmedi.</translation>
 <translation id="5990559369517809815">Sunucuya gönderilen istekler bir uzantı tarafından engellendi.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Yeni Sekme</translation>
 <translation id="7564049878696755256"><ph name="ORG_NAME" /> hesabınıza erişimi kaybedebilir veya kimlik hırsızlığına maruz kalabilirsiniz. Chrome, şifrenizi hemen değiştirmenizi önerir.</translation>
 <translation id="7567204685887185387">Bu sunucu <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikası hileli bir şekilde yayınlanmış olabilir. Bu durum, bir yanlış yapılandırmadan veya bağlantıya müdahale eden bir saldırgandan kaynaklanıyor olabilir.</translation>
-<translation id="7568105740864181217">Bu tarayıcı bir şirket, okul veya başka bir kuruluş tarafından yönetilmektedir. Yöneticiniz, tarayıcınızın kurulumunu uzaktan değiştirebilir. Bu cihazdaki etkinlikler Chrome dışında da yönetilebilir. <ph name="BEGIN_LINK" />Daha Fazla Bilgi<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Kredi kartı Chrome'dan kaldırılsın mı?</translation>
 <translation id="7569983096843329377">Siyah</translation>
 <translation id="7578104083680115302">Google'a kaydettiğiniz kartları kullanarak farklı cihazlardan sitelerde ve uygulamalarda ödemelerinizi hızla yapabilirsiniz.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Tüm Kayıtlı Şifreleri Göster</translation>
 <translation id="8261506727792406068">Sil</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> olarak oturum açılıyor</translation>
-<translation id="8278457561961988242">Bu tarayıcı, <ph name="ENROLLMENT_DOMAIN" /> tarafından yönetilmektedir. Yöneticiniz, tarayıcınızın kurulumunu uzaktan değiştirebilir. Bu cihazdaki etkinlikler Chrome dışında da yönetilebilir. <ph name="BEGIN_LINK" />Daha Fazla Bilgi<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Oturum Aç</translation>
 <translation id="8288807391153049143">Sertifikayı göster</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 8503fa8..e0e8270 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Зменшити масштаб</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Неможливо відкрити додаток для платежів</translation>
-<translation id="5988826871883769516">Вашим пристроєм керує <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="5989320800837274978">Не вказано ні фіксованих проксі-серверів, ні URL-адрес сценарію .pac.</translation>
 <translation id="5990559369517809815">Надсилання запитів на сервер заблоковано розширенням.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Нова вкладка</translation>
 <translation id="7564049878696755256">Ви можете втратити доступ до облікового запису, який вам надає <ph name="ORG_NAME" />, або хтось може викрасти вашу особисту інформацію. Chrome радить змінити пароль.</translation>
 <translation id="7567204685887185387">Цей сервер не зміг довести, що він – домен <ph name="DOMAIN" />. Можливо, його сертифікат безпеки видали шахраї. Імовірні причини: неправильна конфігурація або хтось намагається перехопити ваше з’єднання.</translation>
-<translation id="7568105740864181217">Цим веб-переглядачем керує адміністратор компанії, навчального закладу чи іншої організації. Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chrome. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Видалити дані кредитної картки з Chrome?</translation>
 <translation id="7569983096843329377">Чорний</translation>
 <translation id="7578104083680115302">Зберігайте картки в Google, щоб швидко платити на сайтах і в додатках на всіх своїх пристроях.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Показати всі збережені паролі</translation>
 <translation id="8261506727792406068">Видалити</translation>
 <translation id="8267698848189296333">Ви входите як <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">Цим веб-переглядачем керує домен <ph name="ENROLLMENT_DOMAIN" />. Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chrome. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Вхід</translation>
 <translation id="8288807391153049143">Показати сертифікат</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 68655770..78795b4a 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -345,7 +345,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2784949926578158345">Kết nối đã được đặt lại.</translation>
 <translation id="2788784517760473862">Thẻ tín dụng được chấp nhận</translation>
-<translation id="2792012897584536778">Các quản trị viên của thiết bị này đã thiết lập các chứng chỉ bảo mật cho phép họ xem nội dung của những trang web bạn truy cập.</translation>
+<translation id="2792012897584536778">Các quản trị viên của thiết bị này đã thiết lập các chứng chỉ bảo mật có thể cho phép họ xem nội dung của những trang web bạn truy cập.</translation>
 <translation id="2794233252405721443">Trang web đã bị chặn</translation>
 <translation id="2799020568854403057">Trang web bạn sắp truy cập chứa ứng dụng có hại</translation>
 <translation id="2799223571221894425">Chạy lại</translation>
@@ -722,7 +722,7 @@
 <translation id="4926159001844873046"><ph name="SITE" /> cho biết</translation>
 <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation>
 <translation id="4943872375798546930">Không tìm thấy kết quả nào</translation>
-<translation id="4945672369594656571">Kiểm soát cách Google xử lý dữ liệu tài khoản và thiết bị của bạn. Google chỉ xử lý dữ liệu tài khoản và thiết bị của bạn theo chỉ dẫn của người quản lý tài khoản và thiết bị, cũng như chỉ cho các mục đích mà người quản lý tài khoản và thiết bị chỉ định.</translation>
+<translation id="4945672369594656571">Kiểm soát cách Google xử lý dữ liệu tài khoản và thiết bị của bạn. Google xử lý dữ liệu tài khoản và thiết bị của bạn hoàn toàn theo chỉ dẫn của người quản lý tài khoản và thiết bị của bạn, và chỉ cho các mục đích mà người quản lý tài khoản và thiết bị của bạn chỉ định.</translation>
 <translation id="4950898438188848926">Nút chuyển đổi tab, nhấn phím Enter để chuyển sang tab đang mở, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation>
 <translation id="495170559598752135">Tác vụ</translation>
 <translation id="4955242332710481440">A5-Extra</translation>
@@ -736,7 +736,7 @@
 <translation id="5017554619425969104">Văn bản bạn đã sao chép</translation>
 <translation id="5018422839182700155">Không thể mở trang này</translation>
 <translation id="5019198164206649151">Không thể lưu trữ do chương trình phụ trợ ở trạng thái xấu</translation>
-<translation id="5020154601324912079">Kiểm soát cách Google xử lý dữ liệu thiết bị của bạn. Google chỉ xử lý dữ liệu thiết bị của bạn theo chỉ dẫn của người quản lý thiết bị và chỉ cho các mục đích mà người quản lý thiết bị chỉ định.</translation>
+<translation id="5020154601324912079">Kiểm soát cách Google xử lý dữ liệu thiết bị của bạn. Google xử lý dữ liệu thiết bị của bạn hoàn toàn theo chỉ dẫn của người quản lý thiết bị và chỉ cho các mục đích mà người quản lý thiết bị chỉ định.</translation>
 <translation id="5023310440958281426">Kiểm tra chính sách của quản trị viên của bạn</translation>
 <translation id="5029568752722684782">Xóa bản sao</translation>
 <translation id="503069730517007720">Cần có chứng chỉ gốc cho "<ph name="SOFTWARE_NAME" />" nhưng chứng chỉ này chưa được cài đặt. Hãy yêu cầu quản trị viên CNTT của bạn xem hướng dẫn cấu hình cho "<ph name="SOFTWARE_NAME" />" để khắc phục sự cố này. <ph name="FURTHER_EXPLANATION" /></translation>
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">Thu nhỏ</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">Không thể mở ứng dụng thanh toán</translation>
-<translation id="5988826871883769516">Thiết bị của bạn do <ph name="ENROLLMENT_DOMAIN" /> quản lý.</translation>
 <translation id="5989320800837274978">Cả máy chủ proxy cố định và URL tập lệnh .pac đều chưa được chỉ định.</translation>
 <translation id="5990559369517809815">Tiện ích đã chặn yêu cầu tới máy chủ.</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1160,7 +1159,7 @@
 <translation id="741007362987735528">Wide-Format</translation>
 <translation id="7416351320495623771">Quản lý mật khẩu…</translation>
 <translation id="7419106976560586862">Đường dẫn cấu hình</translation>
-<translation id="7424427397225027541">Kiểm soát cách Google xử lý dữ liệu tài khoản của bạn. Google chỉ xử lý dữ liệu tài khoản của bạn theo chỉ dẫn của người quản lý tài khoản và chỉ cho các mục đích mà người quản lý tài khoản chỉ định.</translation>
+<translation id="7424427397225027541">Kiểm soát cách Google xử lý dữ liệu tài khoản của bạn. Google xử lý dữ liệu tài khoản của bạn hoàn toàn theo chỉ dẫn của người quản lý tài khoản của bạn và chỉ cho các mục đích mà người quản lý tài khoản của bạn chỉ định.</translation>
 <translation id="7437289804838430631">Thêm thông tin liên hệ</translation>
 <translation id="7440140511386898319">Khám phá khi không có mạng</translation>
 <translation id="7441627299479586546">Chủ đề chính sách sai</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">Tab mới</translation>
 <translation id="7564049878696755256">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. Chrome khuyên bạn nên thay đổi mật khẩu ngay bây giờ.</translation>
 <translation id="7567204685887185387">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ó thể đã bị gian lận khi phát hành. Đ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="7568105740864181217">Một công ty, trường học hoặc tổ chức khác quản lý trình duyệt này. Quản trị viên có thể thay đổi quy trình thiết lập trình duyệt của bạn từ xa. Hoạt động trên thiết bị này cũng có thể được quản lý bên ngoài Chrome. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">Xóa thẻ tín dụng khỏi Chrome?</translation>
 <translation id="7569983096843329377">Đen</translation>
 <translation id="7578104083680115302">Thanh toán nhanh trên các trang web và ứng dụng trong mọi thiết bị nhờ sử dụng thẻ bạn đã lưu với Google.</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">Hiển thị tất cả các mật khẩu đã lưu</translation>
 <translation id="8261506727792406068">Xóa</translation>
 <translation id="8267698848189296333">Đăng nhập với tên <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242"><ph name="ENROLLMENT_DOMAIN" /> quản lý trình duyệt này. Quản trị viên có thể thay đổi quy trình thiết lập trình duyệt của bạn từ xa. Hoạt động trên thiết bị này cũng có thể được quản lý bên ngoài Chrome. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">Đăng nhập</translation>
 <translation id="8288807391153049143">Hiển thị chứng chỉ</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index fcd656b..1dc4359 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -903,7 +903,6 @@
 <translation id="5975083100439434680">缩小</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">无法打开付款应用</translation>
-<translation id="5988826871883769516">您的设备由 <ph name="ENROLLMENT_DOMAIN" /> 管理。</translation>
 <translation id="5989320800837274978">固定代理服务器和 .pac 脚本网址均未指定。</translation>
 <translation id="5990559369517809815">对服务器的请求已遭到某个扩展程序的阻止。</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1178,7 +1177,6 @@
 <translation id="7554791636758816595">新标签页</translation>
 <translation id="7564049878696755256">您可能会无法再访问自己的 <ph name="ORG_NAME" /> 帐号,或者身份信息遭到盗用。Chrome 建议您立即更改密码。</translation>
 <translation id="7567204685887185387">此服务器无法证明它是<ph name="DOMAIN" />;其安全证书可能是由骗子发出的。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation>
-<translation id="7568105740864181217">此浏览器由某个公司、学校或其他组织管理。您的管理员可以远程更改您的浏览器设置。此设备上的活动也可能会在 Chrome 外部受管理。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">从 Chrome 中移除信用卡信息?</translation>
 <translation id="7569983096843329377">黑色</translation>
 <translation id="7578104083680115302">通过各种设备在网站和应用中购物时,您都可以使用 Google 为您保存的银行卡信息快速付款。</translation>
@@ -1312,7 +1310,6 @@
 <translation id="825929999321470778">显示所有已保存的密码</translation>
 <translation id="8261506727792406068">删除</translation>
 <translation id="8267698848189296333">目前登录的帐号是 <ph name="USERNAME" /></translation>
-<translation id="8278457561961988242">此浏览器由 <ph name="ENROLLMENT_DOMAIN" /> 管理。您的管理员可以远程更改您的浏览器设置。此设备上的活动也可能会在 Chrome 外部受管理。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">登录</translation>
 <translation id="8288807391153049143">显示证书</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 1b523200..71069eab 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -915,7 +915,6 @@
 <translation id="5975083100439434680">縮小</translation>
 <translation id="5980920751713728343">Index-3x5</translation>
 <translation id="598637245381783098">無法開啟付款應用程式</translation>
-<translation id="5988826871883769516">你的裝置是由 <ph name="ENROLLMENT_DOMAIN" /> 管理。</translation>
 <translation id="5989320800837274978">沒有指定固定的 Proxy 伺服器和 .pac 指令碼網址。</translation>
 <translation id="5990559369517809815">擴充功能已封鎖要傳送至伺服器的要求。</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1194,7 +1193,6 @@
 <translation id="7554791636758816595">新增分頁</translation>
 <translation id="7564049878696755256">你可能會失去 <ph name="ORG_NAME" /> 帳戶存取權,或身分遭到冒用。Chrome 建議你立即變更密碼。</translation>
 <translation id="7567204685887185387">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證是以欺詐方式發行。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation>
-<translation id="7568105740864181217">這個瀏覽器是由公司、學校或其他組織管理。你的系統管理員可以遠端變更瀏覽器設定。這部裝置上的活動也可透過 Chrome 以外的服務管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="7569952961197462199">要從 Chrome 中移除信用卡嗎?</translation>
 <translation id="7569983096843329377">黑色</translation>
 <translation id="7578104083680115302">在不同的裝置上透過各個網站和應用程式消費時,使用您讓 Google 儲存的信用卡資料即可快速付款。</translation>
@@ -1328,7 +1326,6 @@
 <translation id="825929999321470778">顯示所有已儲存的密碼</translation>
 <translation id="8261506727792406068">刪除</translation>
 <translation id="8267698848189296333">正在以 <ph name="USERNAME" /> 的身分登入</translation>
-<translation id="8278457561961988242">這個瀏覽器是由 <ph name="ENROLLMENT_DOMAIN" /> 所管理。你的系統管理員可以遠端變更瀏覽器設定。這部裝置上的活動也可透過 Chrome 以外的服務管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">登入</translation>
 <translation id="8288807391153049143">顯示憑證</translation>
diff --git a/components/sync/protocol/send_tab_to_self_specifics.proto b/components/sync/protocol/send_tab_to_self_specifics.proto
index 2aad0d8..53d6f0cc 100644
--- a/components/sync/protocol/send_tab_to_self_specifics.proto
+++ b/components/sync/protocol/send_tab_to_self_specifics.proto
@@ -35,4 +35,6 @@
   // The stable Device_id of the device that this tab was shared with.
   // Required.
   optional string target_device_sync_cache_guid = 7;
+  // A boolean to designate if the shared tab been opened on the target device.
+  optional bool opened = 8;
 }
diff --git a/components/test/data/payments/change_payment_method.html b/components/test/data/payments/change_payment_method.html
index a22f618..097db81d 100644
--- a/components/test/data/payments/change_payment_method.html
+++ b/components/test/data/payments/change_payment_method.html
@@ -32,6 +32,11 @@
     <div>
       <button onclick="testDetails()" id="testDetails">Test Details</button>
     </div>
+    <div>
+      <button onclick="basicCardMethodName()" id="basicCardMethodName">
+        Use Basic Card
+      </button>
+    </div>
     <pre id="result"></pre>
     <script src="util.js"></script>
     <script src="change_payment_method.js"></script>
diff --git a/components/test/data/payments/change_payment_method.js b/components/test/data/payments/change_payment_method.js
index c396e99..3909fc8d 100644
--- a/components/test/data/payments/change_payment_method.js
+++ b/components/test/data/payments/change_payment_method.js
@@ -4,7 +4,13 @@
  * found in the LICENSE file.
  */
 
-const methodName = window.location.origin;
+let methodName = window.location.origin + '/pay';
+let request = undefined;
+
+/** Switches to the basic-card method name. */
+function basicCardMethodName() {  // eslint-disable-line no-unused-vars
+  methodName = 'basic-card';
+}
 
 /** Installs the payment handler. */
 function install() {  // eslint-disable-line no-unused-vars
@@ -73,17 +79,32 @@
     });
 }
 
+/** @return {PaymentRequest} The Payment Request object for testNoHandler(). */
+function initTestNoHandler() {
+  request = new PaymentRequest([{supportedMethods: methodName}], {
+    total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
+  });
+  return request;
+}
+
 /**
  * Verifies that PaymentRequestEvent.changePaymentMethod() returns null if there
  * is no handler for the "paymentmethodchange" event in PaymentRequest.
  */
 function testNoHandler() {  // eslint-disable-line no-unused-vars
   // Intentionally do not respond to the 'paymentmethodchange' event.
-  outputChangePaymentMethodReturnValue(
-    new PaymentRequest([{supportedMethods: methodName}], {
-      total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
-    })
-  );
+  outputChangePaymentMethodReturnValue(initTestNoHandler());
+}
+
+/** @return {PaymentRequest} The Payment Request object for testReject(). */
+function initTestReject() {
+  request = new PaymentRequest([{supportedMethods: methodName}], {
+    total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
+  });
+  request.addEventListener('paymentmethodchange', (event) => {
+    event.updateWith(Promise.reject('Error for test'));
+  });
+  return request;
 }
 
 /**
@@ -91,21 +112,12 @@
  * PaymentMethodChangeEvent.updateWith() is rejected.
  */
 function testReject() {  // eslint-disable-line no-unused-vars
-  const request = new PaymentRequest([{supportedMethods: methodName}], {
-    total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
-  });
-  request.addEventListener('paymentmethodchange', (event) => {
-    event.updateWith(Promise.reject('Error for test'));
-  });
-  outputChangePaymentMethodReturnValue(request);
+  outputChangePaymentMethodReturnValue(initTestReject());
 }
 
-/**
- * Verifies that PaymentRequest.show() is rejected if there is an exception in
- * the promised passed into PaymentMethodChangeEvent.updateWith().
- */
-function testThrow() {  // eslint-disable-line no-unused-vars
-  const request = new PaymentRequest([{supportedMethods: methodName}], {
+/** @return {PaymentRequest} The Payment Request object for testThrow(). */
+function initTestThrow() {
+  request = new PaymentRequest([{supportedMethods: methodName}], {
     total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
   });
   request.addEventListener('paymentmethodchange', (event) => {
@@ -115,15 +127,20 @@
       })
     );
   });
-  outputChangePaymentMethodReturnValue(request);
+  return request;
 }
 
 /**
- * Verifies that PaymentRequestEvent.changePaymentMethod() returns a subset of
- * details passed into PaymentMethodChangeEvent.updateWith() method.
+ * Verifies that PaymentRequest.show() is rejected if there is an exception in
+ * the promised passed into PaymentMethodChangeEvent.updateWith().
  */
-function testDetails() {  // eslint-disable-line no-unused-vars
-  const request = new PaymentRequest([{supportedMethods: methodName}], {
+function testThrow() {  // eslint-disable-line no-unused-vars
+  outputChangePaymentMethodReturnValue(initTestThrow());
+}
+
+/** @return {PaymentRequest} The Payment Request object for testDetails(). */
+function initTestDetails() {
+  request = new PaymentRequest([{supportedMethods: methodName}], {
     total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
   });
   request.addEventListener('paymentmethodchange', (event) => {
@@ -146,7 +163,7 @@
           ],
         },
         {
-          supportedMethods: methodName + '/2',
+          supportedMethods: methodName + '2',
           data: {soup: 'tomato'},
           total: {
             label: 'Modified total #2',
@@ -176,5 +193,13 @@
       ],
     });
   });
-  outputChangePaymentMethodReturnValue(request);
+  return request;
+}
+
+/**
+ * Verifies that PaymentRequestEvent.changePaymentMethod() returns a subset of
+ * details passed into PaymentMethodChangeEvent.updateWith() method.
+ */
+function testDetails() {  // eslint-disable-line no-unused-vars
+  outputChangePaymentMethodReturnValue(initTestDetails());
 }
diff --git a/components/url_formatter/top_domains/make_top_domain_list_for_edit_distance.cc b/components/url_formatter/top_domains/make_top_domain_list_for_edit_distance.cc
index 95a641f..31e6ef7 100644
--- a/components/url_formatter/top_domains/make_top_domain_list_for_edit_distance.cc
+++ b/components/url_formatter/top_domains/make_top_domain_list_for_edit_distance.cc
@@ -52,7 +52,8 @@
       *base::CommandLine::ForCurrentProcess();
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
 #if defined(OS_WIN)
diff --git a/components/url_formatter/top_domains/top_domain_generator.cc b/components/url_formatter/top_domains/top_domain_generator.cc
index f15692b..32dbee2 100644
--- a/components/url_formatter/top_domains/top_domain_generator.cc
+++ b/components/url_formatter/top_domains/top_domain_generator.cc
@@ -54,7 +54,8 @@
       *base::CommandLine::ForCurrentProcess();
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
 #if defined(OS_WIN)
diff --git a/components/viz/service/compositor_frame_fuzzer/compositor_frame_fuzzer.cc b/components/viz/service/compositor_frame_fuzzer/compositor_frame_fuzzer.cc
index fb58292..79f5918 100644
--- a/components/viz/service/compositor_frame_fuzzer/compositor_frame_fuzzer.cc
+++ b/components/viz/service/compositor_frame_fuzzer/compositor_frame_fuzzer.cc
@@ -33,7 +33,8 @@
     // Re-initialize logging in order to pick up any command-line parameters
     // (such as --v=1 to enable verbose logging).
     logging::LoggingSettings settings;
-    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+    settings.logging_dest =
+        logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
     logging::InitLogging(settings);
 
     browser_process = std::make_unique<viz::FuzzerBrowserProcess>(png_dir_path);
diff --git a/components/wifi/wifi_test.cc b/components/wifi/wifi_test.cc
index 98c87a3..e4c57793 100644
--- a/components/wifi/wifi_test.cc
+++ b/components/wifi/wifi_test.cc
@@ -258,7 +258,8 @@
 int main(int argc, const char* argv[]) {
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   wifi::WiFiTest wifi_test;
diff --git a/components/zucchini/zucchini_main.cc b/components/zucchini/zucchini_main.cc
index adff154e1..ab2c3e7 100644
--- a/components/zucchini/zucchini_main.cc
+++ b/components/zucchini/zucchini_main.cc
@@ -18,7 +18,8 @@
 
 void InitLogging() {
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   settings.log_file = nullptr;
   settings.lock_log = logging::DONT_LOCK_LOG_FILE;
   settings.delete_old = logging::APPEND_TO_OLD_LOG_FILE;
diff --git a/content/app/android/library_loader_hooks.cc b/content/app/android/library_loader_hooks.cc
index 393a41c..dd6a687b 100644
--- a/content/app/android/library_loader_hooks.cc
+++ b/content/app/android/library_loader_hooks.cc
@@ -40,7 +40,8 @@
   TRACE_EVENT0("jni", "JNI_OnLoad continuation");
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
   // To view log output with IDs and timestamps use "adb logcat -v threadtime".
   logging::SetLogItems(false,    // Process ID
diff --git a/content/app/strings/translations/content_strings_hr.xtb b/content/app/strings/translations/content_strings_hr.xtb
index 837e5b6..71c5fe19 100644
--- a/content/app/strings/translations/content_strings_hr.xtb
+++ b/content/app/strings/translations/content_strings_hr.xtb
@@ -36,6 +36,7 @@
 <translation id="2148716181193084225">Danas</translation>
 <translation id="2158401438286456825">popis stranica</translation>
 <translation id="2226276347425096477">Skratite taj tekst na <ph name="MAX_CHARACTERS" /> znakova ili manje (trenutačno upotrebljavate <ph name="CURRENT_LENGTH" /> znakova).</translation>
+<translation id="2246498165605549352">Lokalna datoteka</translation>
 <translation id="2247351761944213033"><ph name="WEEKNUMBER" />. tjedan, <ph name="YEAR" />. godina</translation>
 <translation id="2277199496770840904">Zapis <ph name="NUMBER" /></translation>
 <translation id="2291999235780842123">potvrdni okvir</translation>
diff --git a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
index 2ff4266..2a8894d 100644
--- a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
+++ b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
@@ -117,16 +117,16 @@
   VLOG(1) << tree->ToString();
 
   EXPECT_EQ(ax::mojom::Role::kRootWebArea, root->data().role);
-  ASSERT_EQ(2, root->GetUnignoredChildCount());
+  ASSERT_EQ(2, root->child_count());
 
-  const ui::AXNode* live_region = root->GetUnignoredChildAtIndex(0);
-  ASSERT_EQ(1, live_region->GetUnignoredChildCount());
+  const ui::AXNode* live_region = root->ChildAtIndex(0);
+  ASSERT_EQ(1, live_region->child_count());
   EXPECT_EQ(ax::mojom::Role::kGenericContainer, live_region->data().role);
 
-  const ui::AXNode* para = live_region->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* para = live_region->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kParagraph, para->data().role);
 
-  const ui::AXNode* button = root->GetUnignoredChildAtIndex(1);
+  const ui::AXNode* button = root->ChildAtIndex(1);
   EXPECT_EQ(ax::mojom::Role::kButton, button->data().role);
 }
 
diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
index eb98c7c..26dd7e3 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
@@ -181,7 +181,6 @@
   AddPropertyFilter(property_filters, "flowtoIds*");
   AddPropertyFilter(property_filters, "detailsIds*");
   AddPropertyFilter(property_filters, "invalidState=*");
-  AddPropertyFilter(property_filters, "ignored*");
   AddPropertyFilter(property_filters, "invalidState=false",
                     PropertyFilter::DENY);  // Don't show false value
   AddPropertyFilter(property_filters, "roleDescription=*");
@@ -203,9 +202,8 @@
     const BrowserAccessibility& node) const {
   if (node.HasStringAttribute(ax::mojom::StringAttribute::kChildTreeId))
     return node.PlatformChildCount();
-  // We don't want to use InternalGetChild as we want to include
-  // ignored nodes in the tree for tests.
-  return node.node()->child_count();
+  else
+    return node.InternalChildCount();
 }
 
 BrowserAccessibility* AccessibilityTreeFormatterBlink::GetChild(
@@ -213,11 +211,8 @@
     uint32_t i) const {
   if (node.HasStringAttribute(ax::mojom::StringAttribute::kChildTreeId))
     return node.PlatformGetChild(i);
-  // We don't want to use InternalGetChild as we want to include
-  // ignored nodes in the tree for tests.
-  ui::AXNode* child_node = node.node()->ChildAtIndex(i);
-  DCHECK(child_node);
-  return node.manager()->GetFromAXNode(child_node);
+  else
+    return node.InternalGetChild(i);
 }
 
 void AccessibilityTreeFormatterBlink::AddProperties(
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 3fe6a2b..ba4c6e54 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -101,7 +101,7 @@
   if (!instance_active())
     return nullptr;
 
-  ui::AXNode* parent = node_->GetUnignoredParent();
+  ui::AXNode* parent = node_->parent();
   if (parent)
     return manager_->GetFromAXNode(parent);
 
@@ -307,26 +307,25 @@
 uint32_t BrowserAccessibility::InternalChildCount() const {
   if (!node_ || !manager_)
     return 0;
-  return node_->GetUnignoredChildCount();
+  return static_cast<uint32_t>(node_->child_count());
 }
 
 BrowserAccessibility* BrowserAccessibility::InternalGetChild(
     uint32_t child_index) const {
-  if (!node_ || !manager_)
+  if (!node_ || !manager_ || child_index >= InternalChildCount())
     return nullptr;
-  auto* child_node = node_->GetUnignoredChildAtIndex(child_index);
-  if (child_node)
-    return manager_->GetFromAXNode(child_node);
 
-  return nullptr;
+  auto* child_node = node_->ChildAtIndex(child_index);
+  DCHECK(child_node);
+  return manager_->GetFromAXNode(child_node);
 }
 
 BrowserAccessibility* BrowserAccessibility::InternalGetParent() const {
   if (!node_ || !manager_)
     return nullptr;
-  auto* child_node = node_->GetUnignoredParent();
-  if (child_node)
-    return manager_->GetFromAXNode(child_node);
+  ui::AXNode* parent = node_->parent();
+  if (parent)
+    return manager_->GetFromAXNode(parent);
 
   return nullptr;
 }
@@ -1390,7 +1389,7 @@
 }
 
 int BrowserAccessibility::GetIndexInParent() const {
-  return node_ ? node_->GetUnignoredIndexInParent() : -1;
+  return node_ ? node_->index_in_parent() : -1;
 }
 
 gfx::AcceleratedWidget
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index fbbb490a..574447b 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -244,9 +244,9 @@
   bool instance_active() const { return node_ && manager_; }
   ui::AXNode* node() const { return node_; }
 
-  // These access the internal unignored accessibility tree, which doesn't
-  // necessarily reflect the accessibility tree that should be exposed on each
-  // platform. Use PlatformChildCount and PlatformGetChild to implement platform
+  // These access the internal accessibility tree, which doesn't necessarily
+  // reflect the accessibility tree that should be exposed on each platform.
+  // Use PlatformChildCount and PlatformGetChild to implement platform
   // accessibility APIs.
   uint32_t InternalChildCount() const;
   BrowserAccessibility* InternalGetChild(uint32_t child_index) const;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 9fa9a025..8c257b6 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -1200,6 +1200,7 @@
   BrowserAccessibility* wrapper = factory_->Create();
   id_wrapper_map_[node->id()] = wrapper;
   wrapper->Init(this, node);
+  wrapper->OnDataChanged();
 }
 
 void BrowserAccessibilityManager::OnNodeReparented(ui::AXTree* tree,
@@ -1211,6 +1212,7 @@
     id_wrapper_map_[node->id()] = wrapper;
   }
   wrapper->Init(this, node);
+  wrapper->OnDataChanged();
 }
 
 void BrowserAccessibilityManager::OnNodeChanged(ui::AXTree* tree,
@@ -1244,25 +1246,6 @@
   // we're properly connected.
   if (ax_tree_id_changed || root_changed)
     connected_to_parent_tree_node_ = false;
-
-  // Calls OnDataChanged on newly created or reparented nodes.
-  for (const auto change : changes) {
-    ui::AXNode* node = change.node;
-    BrowserAccessibility* wrapper = GetFromAXNode(node);
-    if (wrapper) {
-      switch (change.type) {
-        case NODE_CREATED:
-        case NODE_REPARENTED:
-          wrapper->OnDataChanged();
-          break;
-          // Unhandled.
-        case NODE_CHANGED:
-        case SUBTREE_CREATED:
-        case SUBTREE_REPARENTED:
-          break;
-      }
-    }
-  }
 }
 
 ui::AXNode* BrowserAccessibilityManager::GetNodeFromTree(
diff --git a/content/browser/accessibility/browser_accessibility_unittest.cc b/content/browser/accessibility/browser_accessibility_unittest.cc
index f01e138..873b961a 100644
--- a/content/browser/accessibility/browser_accessibility_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_unittest.cc
@@ -100,11 +100,11 @@
 TEST_F(BrowserAccessibilityTest, TestGetDescendants) {
   // Set up ax tree with the following structure:
   //
-  // root_____________________
-  // |               |       |
-  // para1____       text3   para2____ (hidden)
-  // |       |               |       |
-  // text1   text2           text4   text5 (visible)
+  // root____________
+  // |               |
+  // para1___        text3
+  // |       |
+  // text1   text2
   ui::AXNodeData text1;
   text1.id = 111;
   text1.role = ax::mojom::Role::kStaticText;
@@ -120,41 +120,21 @@
   text3.role = ax::mojom::Role::kStaticText;
   text3.SetName("Three four five.");
 
-  ui::AXNodeData text4;
-  text4.id = 114;
-  text4.role = ax::mojom::Role::kStaticText;
-  text4.SetName("four five six.");
-  text4.AddState(ax::mojom::State::kIgnored);
-
-  ui::AXNodeData text5;
-  text5.id = 115;
-  text5.role = ax::mojom::Role::kStaticText;
-  text5.SetName("five six seven.");
-
   ui::AXNodeData para1;
   para1.id = 11;
   para1.role = ax::mojom::Role::kParagraph;
   para1.child_ids.push_back(text1.id);
   para1.child_ids.push_back(text2.id);
 
-  ui::AXNodeData para2;
-  para2.id = 12;
-  para2.role = ax::mojom::Role::kParagraph;
-  para2.child_ids.push_back(text4.id);
-  para2.child_ids.push_back(text5.id);
-  para2.AddState(ax::mojom::State::kIgnored);
-
   ui::AXNodeData root;
   root.id = 1;
   root.role = ax::mojom::Role::kRootWebArea;
   root.child_ids.push_back(para1.id);
   root.child_ids.push_back(text3.id);
-  root.child_ids.push_back(para2.id);
 
   std::unique_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          MakeAXTreeUpdate(root, para1, text1, text2, text3, para2, text4,
-                           text5),
+          MakeAXTreeUpdate(root, para1, text1, text2, text3),
           test_browser_accessibility_delegate_.get(),
           new BrowserAccessibilityFactory()));
 
@@ -163,9 +143,6 @@
   BrowserAccessibility* text1_obj = manager->GetFromID(111);
   BrowserAccessibility* text2_obj = manager->GetFromID(112);
   BrowserAccessibility* text3_obj = manager->GetFromID(113);
-  BrowserAccessibility* para2_obj = manager->GetFromID(12);
-  BrowserAccessibility* text4_obj = manager->GetFromID(114);
-  BrowserAccessibility* text5_obj = root_obj->PlatformGetChild(2);
 
   // Leaf nodes should have no children.
   std::vector<gfx::NativeViewAccessible> descendants =
@@ -179,16 +156,6 @@
   descendants = text3_obj->GetDescendants();
   EXPECT_NATIVE_VIEW_ACCESSIBLE_VECTOR_EQ(descendants, expected_descendants);
 
-  descendants = text4_obj->GetDescendants();
-  EXPECT_NATIVE_VIEW_ACCESSIBLE_VECTOR_EQ(descendants, expected_descendants);
-
-  descendants = text5_obj->GetDescendants();
-  EXPECT_NATIVE_VIEW_ACCESSIBLE_VECTOR_EQ(descendants, expected_descendants);
-
-  descendants = para2_obj->GetDescendants();
-  expected_descendants = {text5_obj->GetNativeViewAccessible()};
-  EXPECT_NATIVE_VIEW_ACCESSIBLE_VECTOR_EQ(descendants, expected_descendants);
-
   // Verify that para1 has two children (text1 and tex2).
   descendants = para_obj->GetDescendants();
   expected_descendants = {text1_obj->GetNativeViewAccessible(),
@@ -197,13 +164,11 @@
 
   // Calling GetChildNodeIds on the root should encompass the entire
   // right and left subtrees (para1, text1, text2, and text3).
-  // para2 and its subtree should be ignored, except for text5
   descendants = root_obj->GetDescendants();
   expected_descendants = {para_obj->GetNativeViewAccessible(),
                           text1_obj->GetNativeViewAccessible(),
                           text2_obj->GetNativeViewAccessible(),
-                          text3_obj->GetNativeViewAccessible(),
-                          text5_obj->GetNativeViewAccessible()};
+                          text3_obj->GetNativeViewAccessible()};
   EXPECT_NATIVE_VIEW_ACCESSIBLE_VECTOR_EQ(descendants, expected_descendants);
 
   manager.reset();
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
index bcabb28..a34d8ab9 100644
--- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
+++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -188,8 +188,8 @@
   EXPECT_EQ(ax::mojom::Role::kRootWebArea, root->data().role);
 
   // Check properties of the BODY element.
-  ASSERT_EQ(1, root->GetUnignoredChildCount());
-  const ui::AXNode* body = root->GetUnignoredChildAtIndex(0);
+  ASSERT_EQ(1, root->child_count());
+  const ui::AXNode* body = root->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kGenericContainer, body->data().role);
   EXPECT_STREQ("body",
                GetAttr(body, ax::mojom::StringAttribute::kHtmlTag).c_str());
@@ -197,9 +197,9 @@
                GetAttr(body, ax::mojom::StringAttribute::kDisplay).c_str());
 
   // Check properties of the two children of the BODY element.
-  ASSERT_EQ(2, body->GetUnignoredChildCount());
+  ASSERT_EQ(2, body->child_count());
 
-  const ui::AXNode* button = body->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* button = body->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kButton, button->data().role);
   EXPECT_STREQ("input",
                GetAttr(button, ax::mojom::StringAttribute::kHtmlTag).c_str());
@@ -213,7 +213,7 @@
   EXPECT_STREQ("value", button->data().html_attributes[1].first.c_str());
   EXPECT_STREQ("push", button->data().html_attributes[1].second.c_str());
 
-  const ui::AXNode* checkbox = body->GetUnignoredChildAtIndex(1);
+  const ui::AXNode* checkbox = body->ChildAtIndex(1);
   EXPECT_EQ(ax::mojom::Role::kCheckBox, checkbox->data().role);
   EXPECT_STREQ("input",
                GetAttr(checkbox, ax::mojom::StringAttribute::kHtmlTag).c_str());
@@ -238,10 +238,10 @@
 
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  ASSERT_EQ(1, root->GetUnignoredChildCount());
-  const ui::AXNode* body = root->GetUnignoredChildAtIndex(0);
-  ASSERT_EQ(1, body->GetUnignoredChildCount());
-  const ui::AXNode* text = body->GetUnignoredChildAtIndex(0);
+  ASSERT_EQ(1, root->child_count());
+  const ui::AXNode* body = root->ChildAtIndex(0);
+  ASSERT_EQ(1, body->child_count());
+  const ui::AXNode* text = body->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kTextField, text->data().role);
   EXPECT_STREQ("input",
                GetAttr(text, ax::mojom::StringAttribute::kHtmlTag).c_str());
@@ -269,10 +269,10 @@
 
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  ASSERT_EQ(1, root->GetUnignoredChildCount());
-  const ui::AXNode* body = root->GetUnignoredChildAtIndex(0);
-  ASSERT_EQ(1, body->GetUnignoredChildCount());
-  const ui::AXNode* text = body->GetUnignoredChildAtIndex(0);
+  ASSERT_EQ(1, root->child_count());
+  const ui::AXNode* body = root->ChildAtIndex(0);
+  ASSERT_EQ(1, body->child_count());
+  const ui::AXNode* text = body->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kTextField, text->data().role);
   EXPECT_STREQ("input",
                GetAttr(text, ax::mojom::StringAttribute::kHtmlTag).c_str());
@@ -323,33 +323,33 @@
 
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  ASSERT_EQ(1, root->GetUnignoredChildCount());
-  const ui::AXNode* body = root->GetUnignoredChildAtIndex(0);
-  ASSERT_EQ(3, body->GetUnignoredChildCount());
+  ASSERT_EQ(1, root->child_count());
+  const ui::AXNode* body = root->ChildAtIndex(0);
+  ASSERT_EQ(3, body->child_count());
 
-  const ui::AXNode* button1 = body->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* button1 = body->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kButton, button1->data().role);
   EXPECT_STREQ("Button 1",
                GetAttr(button1, ax::mojom::StringAttribute::kName).c_str());
 
-  const ui::AXNode* iframe = body->GetUnignoredChildAtIndex(1);
+  const ui::AXNode* iframe = body->ChildAtIndex(1);
   EXPECT_STREQ("iframe",
                GetAttr(iframe, ax::mojom::StringAttribute::kHtmlTag).c_str());
-  ASSERT_EQ(1, iframe->GetUnignoredChildCount());
+  ASSERT_EQ(1, iframe->child_count());
 
-  const ui::AXNode* sub_document = iframe->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* sub_document = iframe->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kWebArea, sub_document->data().role);
-  ASSERT_EQ(1, sub_document->GetUnignoredChildCount());
+  ASSERT_EQ(1, sub_document->child_count());
 
-  const ui::AXNode* sub_body = sub_document->GetUnignoredChildAtIndex(0);
-  ASSERT_EQ(1, sub_body->GetUnignoredChildCount());
+  const ui::AXNode* sub_body = sub_document->ChildAtIndex(0);
+  ASSERT_EQ(1, sub_body->child_count());
 
-  const ui::AXNode* button2 = sub_body->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* button2 = sub_body->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kButton, button2->data().role);
   EXPECT_STREQ("Button 2",
                GetAttr(button2, ax::mojom::StringAttribute::kName).c_str());
 
-  const ui::AXNode* button3 = body->GetUnignoredChildAtIndex(2);
+  const ui::AXNode* button3 = body->ChildAtIndex(2);
   EXPECT_EQ(ax::mojom::Role::kButton, button3->data().role);
   EXPECT_STREQ("Button 3",
                GetAttr(button3, ax::mojom::StringAttribute::kName).c_str());
@@ -396,24 +396,18 @@
 
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  const ui::AXNode* table = root->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* table = root->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kTable, table->data().role);
-  ASSERT_GE(table->GetUnignoredChildCount(), 2);
-  EXPECT_EQ(ax::mojom::Role::kRow,
-            table->GetUnignoredChildAtIndex(0)->data().role);
-  EXPECT_EQ(ax::mojom::Role::kRow,
-            table->GetUnignoredChildAtIndex(1)->data().role);
+  ASSERT_GE(table->child_count(), 2);
+  EXPECT_EQ(ax::mojom::Role::kRow, table->ChildAtIndex(0)->data().role);
+  EXPECT_EQ(ax::mojom::Role::kRow, table->ChildAtIndex(1)->data().role);
   EXPECT_EQ(3, GetIntAttr(table, ax::mojom::IntAttribute::kTableColumnCount));
   EXPECT_EQ(2, GetIntAttr(table, ax::mojom::IntAttribute::kTableRowCount));
 
-  const ui::AXNode* cell1 =
-      table->GetUnignoredChildAtIndex(0)->GetUnignoredChildAtIndex(0);
-  const ui::AXNode* cell2 =
-      table->GetUnignoredChildAtIndex(0)->GetUnignoredChildAtIndex(1);
-  const ui::AXNode* cell3 =
-      table->GetUnignoredChildAtIndex(1)->GetUnignoredChildAtIndex(0);
-  const ui::AXNode* cell4 =
-      table->GetUnignoredChildAtIndex(1)->GetUnignoredChildAtIndex(1);
+  const ui::AXNode* cell1 = table->ChildAtIndex(0)->ChildAtIndex(0);
+  const ui::AXNode* cell2 = table->ChildAtIndex(0)->ChildAtIndex(1);
+  const ui::AXNode* cell3 = table->ChildAtIndex(1)->ChildAtIndex(0);
+  const ui::AXNode* cell4 = table->ChildAtIndex(1)->ChildAtIndex(1);
 
   EXPECT_EQ(0,
             GetIntAttr(cell1, ax::mojom::IntAttribute::kTableCellColumnIndex));
@@ -446,8 +440,8 @@
   NavigateToURL(shell(), url);
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  ASSERT_EQ(1, root->GetUnignoredChildCount());
-  const ui::AXNode* textbox = root->GetUnignoredChildAtIndex(0);
+  ASSERT_EQ(1, root->child_count());
+  const ui::AXNode* textbox = root->ChildAtIndex(0);
   EXPECT_TRUE(textbox->data().HasAction(ax::mojom::Action::kSetValue));
 }
 
@@ -468,17 +462,17 @@
 
   const ui::AXTree& tree = GetAXTree();
   const ui::AXNode* root = tree.root();
-  const ui::AXNode* table = root->GetUnignoredChildAtIndex(0);
+  const ui::AXNode* table = root->ChildAtIndex(0);
   EXPECT_EQ(ax::mojom::Role::kTable, table->data().role);
-  EXPECT_EQ(1, table->GetUnignoredChildCount());
-  const ui::AXNode* row = table->GetUnignoredChildAtIndex(0);
-  EXPECT_EQ(5, row->GetUnignoredChildCount());
+  EXPECT_EQ(1, table->child_count());
+  const ui::AXNode* row = table->ChildAtIndex(0);
+  EXPECT_EQ(5, row->child_count());
 
-  const ui::AXNode* header1 = row->GetUnignoredChildAtIndex(0);
-  const ui::AXNode* header2 = row->GetUnignoredChildAtIndex(1);
-  const ui::AXNode* header3 = row->GetUnignoredChildAtIndex(2);
-  const ui::AXNode* header4 = row->GetUnignoredChildAtIndex(3);
-  const ui::AXNode* header5 = row->GetUnignoredChildAtIndex(4);
+  const ui::AXNode* header1 = row->ChildAtIndex(0);
+  const ui::AXNode* header2 = row->ChildAtIndex(1);
+  const ui::AXNode* header3 = row->ChildAtIndex(2);
+  const ui::AXNode* header4 = row->ChildAtIndex(3);
+  const ui::AXNode* header5 = row->ChildAtIndex(4);
 
   EXPECT_EQ(static_cast<int>(ax::mojom::SortDirection::kAscending),
             GetIntAttr(header1, ax::mojom::IntAttribute::kSortDirection));
diff --git a/content/browser/accessibility/snapshot_ax_tree_browsertest.cc b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
index f32a8cf..912294f 100644
--- a/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
+++ b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
@@ -52,7 +52,7 @@
             node->data().GetStringAttribute(ax::mojom::StringAttribute::kName) +
             "'";
   *dst += "\n";
-  for (int i = 0; i < node->GetUnignoredChildCount(); ++i)
+  for (int i = 0; i < node->child_count(); ++i)
     DumpRolesAndNamesAsText(node->children()[i], indent + 1, dst);
 }
 
@@ -87,9 +87,9 @@
   ui::AXNode* root = tree.root();
   ASSERT_NE(nullptr, root);
   ASSERT_EQ(ax::mojom::Role::kRootWebArea, root->data().role);
-  ui::AXNode* group = root->GetUnignoredChildAtIndex(0);
+  ui::AXNode* group = root->ChildAtIndex(0);
   ASSERT_EQ(ax::mojom::Role::kGenericContainer, group->data().role);
-  ui::AXNode* button = group->GetUnignoredChildAtIndex(0);
+  ui::AXNode* button = group->ChildAtIndex(0);
   ASSERT_EQ(ax::mojom::Role::kButton, button->data().role);
 }
 
diff --git a/content/browser/background_fetch/background_fetch_event_dispatcher.cc b/content/browser/background_fetch/background_fetch_event_dispatcher.cc
index 519871e..12022bd 100644
--- a/content/browser/background_fetch/background_fetch_event_dispatcher.cc
+++ b/content/browser/background_fetch/background_fetch_event_dispatcher.cc
@@ -26,7 +26,7 @@
 namespace {
 
 // Returns the histogram suffix for the given |event| type.
-std::string EventTypeToString(ServiceWorkerMetrics::EventType event) {
+std::string HistogramSuffixForEventType(ServiceWorkerMetrics::EventType event) {
   switch (event) {
     case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_ABORT:
       return "AbortEvent";
@@ -42,12 +42,29 @@
   }
 }
 
+// Returns a human-readable string for the given |event| type.
+std::string EventTypeToString(ServiceWorkerMetrics::EventType event) {
+  switch (event) {
+    case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_ABORT:
+      return "BackgroundFetchAbortEvent";
+    case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_CLICK:
+      return "BackgroundFetchClickEvent";
+    case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_FAIL:
+      return "BackgroundFetchFailEvent";
+    case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_SUCCESS:
+      return "BackgroundFetchSuccessEvent";
+    default:
+      NOTREACHED();
+      return std::string();
+  }
+}
+
 // Records the result of a dispatched Background Fetch event.
 void RecordDispatchResult(
     ServiceWorkerMetrics::EventType event,
     BackgroundFetchEventDispatcher::DispatchResult result) {
-  std::string histogram_name =
-      "BackgroundFetch.EventDispatchResult." + EventTypeToString(event);
+  std::string histogram_name = "BackgroundFetch.EventDispatchResult." +
+                               HistogramSuffixForEventType(event);
 
   // Used because the |histogram_name| is not a constant.
   base::UmaHistogramEnumeration(
@@ -59,7 +76,7 @@
 void RecordFailureResult(ServiceWorkerMetrics::EventType event,
                          const char* metric_name,
                          blink::ServiceWorkerStatusCode service_worker_status) {
-  std::string event_type = EventTypeToString(event);
+  std::string event_type = HistogramSuffixForEventType(event);
   std::string histogram_name =
       base::StringPrintf("BackgroundFetch.EventDispatchFailure.%s.%s",
                          metric_name, event_type.c_str());
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
index 4bccc509..943d276f 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
@@ -1019,11 +1019,14 @@
 
   query_cache_recursive_depth_ += 1;
   auto cleanup = base::ScopedClosureRunner(base::BindOnce(
-      [](LegacyCacheStorageCache* self) {
+      [](CacheStorageCacheHandle handle) {
+        LegacyCacheStorageCache* self = From(handle);
+        if (!self)
+          return;
         DCHECK(self->query_cache_recursive_depth_ > 0);
         self->query_cache_recursive_depth_ -= 1;
       },
-      base::Unretained(this)));
+      CreateHandle()));
 
   if (!query_cache_context->backend_iterator) {
     // Iteration is complete.
diff --git a/content/browser/devtools/devtools_background_services_context_impl.cc b/content/browser/devtools/devtools_background_services_context_impl.cc
index 21ba92eb..1c1331c 100644
--- a/content/browser/devtools/devtools_background_services_context_impl.cc
+++ b/content/browser/devtools/devtools_background_services_context_impl.cc
@@ -60,8 +60,7 @@
     BrowserContext* browser_context,
     scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
     : browser_context_(browser_context),
-      service_worker_context_(std::move(service_worker_context)),
-      weak_ptr_factory_(this) {
+      service_worker_context_(std::move(service_worker_context)) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   auto expiration_times =
@@ -148,7 +147,7 @@
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&DevToolsBackgroundServicesContextImpl::
                          GetLoggedBackgroundServiceEventsOnIO,
-                     weak_ptr_factory_.GetWeakPtr(), service,
+                     weak_ptr_factory_io_.GetWeakPtr(), service,
                      std::move(callback)));
 }
 
@@ -161,7 +160,7 @@
   service_worker_context_->GetUserDataForAllRegistrationsByKeyPrefix(
       CreateEntryKeyPrefix(service),
       base::BindOnce(&DevToolsBackgroundServicesContextImpl::DidGetUserData,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+                     weak_ptr_factory_io_.GetWeakPtr(), std::move(callback)));
 }
 
 void DevToolsBackgroundServicesContextImpl::DidGetUserData(
@@ -209,7 +208,7 @@
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&DevToolsBackgroundServicesContextImpl::
                          ClearLoggedBackgroundServiceEventsOnIO,
-                     weak_ptr_factory_.GetWeakPtr(), service));
+                     weak_ptr_factory_io_.GetWeakPtr(), service));
 }
 
 void DevToolsBackgroundServicesContextImpl::
@@ -234,7 +233,7 @@
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(
           &DevToolsBackgroundServicesContextImpl::LogBackgroundServiceEventOnIO,
-          weak_ptr_factory_.GetWeakPtr(), service_worker_registration_id,
+          weak_ptr_factory_io_.GetWeakPtr(), service_worker_registration_id,
           origin, service, event_name, instance_id, event_metadata));
 }
 
@@ -257,7 +256,7 @@
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(
             &DevToolsBackgroundServicesContextImpl::OnRecordingTimeExpired,
-            weak_ptr_factory_.GetWeakPtr(), ServiceToProtoEnum(service)));
+            weak_ptr_factory_ui_.GetWeakPtr(), ServiceToProtoEnum(service)));
     return;
   }
 
@@ -281,7 +280,7 @@
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(
           &DevToolsBackgroundServicesContextImpl::NotifyEventObservers,
-          weak_ptr_factory_.GetWeakPtr(), std::move(event)));
+          weak_ptr_factory_ui_.GetWeakPtr(), std::move(event)));
 }
 
 void DevToolsBackgroundServicesContextImpl::NotifyEventObservers(
diff --git a/content/browser/devtools/devtools_background_services_context_impl.h b/content/browser/devtools/devtools_background_services_context_impl.h
index 2a5b560..c378fb54 100644
--- a/content/browser/devtools/devtools_background_services_context_impl.h
+++ b/content/browser/devtools/devtools_background_services_context_impl.h
@@ -136,7 +136,10 @@
 
   base::ObserverList<EventObserver> observers_;
 
-  base::WeakPtrFactory<DevToolsBackgroundServicesContextImpl> weak_ptr_factory_;
+  base::WeakPtrFactory<DevToolsBackgroundServicesContextImpl>
+      weak_ptr_factory_ui_{this};
+  base::WeakPtrFactory<DevToolsBackgroundServicesContextImpl>
+      weak_ptr_factory_io_{this};
 
   DISALLOW_COPY_AND_ASSIGN(DevToolsBackgroundServicesContextImpl);
 };
diff --git a/content/browser/devtools/protocol/background_service_handler.cc b/content/browser/devtools/protocol/background_service_handler.cc
index 17b91e8..d5a174a 100644
--- a/content/browser/devtools/protocol/background_service_handler.cc
+++ b/content/browser/devtools/protocol/background_service_handler.cc
@@ -22,6 +22,12 @@
   } else if (service_name ==
              BackgroundService::ServiceNameEnum::BackgroundSync) {
     return devtools::proto::BackgroundService::BACKGROUND_SYNC;
+  } else if (service_name ==
+             BackgroundService::ServiceNameEnum::PushMessaging) {
+    return devtools::proto::BackgroundService::PUSH_MESSAGING;
+  } else if (service_name ==
+             BackgroundService::ServiceNameEnum::Notifications) {
+    return devtools::proto::BackgroundService::NOTIFICATIONS;
   }
   return devtools::proto::BackgroundService::UNKNOWN;
 }
@@ -32,6 +38,10 @@
       return BackgroundService::ServiceNameEnum::BackgroundFetch;
     case devtools::proto::BackgroundService::BACKGROUND_SYNC:
       return BackgroundService::ServiceNameEnum::BackgroundSync;
+    case devtools::proto::BackgroundService::PUSH_MESSAGING:
+      return BackgroundService::ServiceNameEnum::PushMessaging;
+    case devtools::proto::BackgroundService::NOTIFICATIONS:
+      return BackgroundService::ServiceNameEnum::Notifications;
     default:
       NOTREACHED();
   }
diff --git a/content/browser/devtools/protocol/target_auto_attacher.cc b/content/browser/devtools/protocol/target_auto_attacher.cc
index 053ea04e..97a14a1 100644
--- a/content/browser/devtools/protocol/target_auto_attacher.cc
+++ b/content/browser/devtools/protocol/target_auto_attacher.cc
@@ -211,16 +211,23 @@
 
   FrameTreeNode* frame_tree_node = navigation_handle->frame_tree_node();
   RenderFrameHostImpl* new_host = navigation_handle->GetRenderFrameHost();
+
+  // |new_host| can be nullptr for navigation that doesn't commmit
+  // (e.g. download). Skip possibly detaching the old agent host so the DevTools
+  // message logged via the old RFH can be seen.
+  if (!new_host)
+    return nullptr;
+
   scoped_refptr<DevToolsAgentHost> agent_host =
       RenderFrameDevToolsAgentHost::FindForDangling(frame_tree_node);
 
   bool old_cross_process = !!agent_host;
   bool is_portal_main_frame =
-      frame_tree_node->IsMainFrame() && new_host &&
+      frame_tree_node->IsMainFrame() &&
       static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(new_host))
           ->IsPortal();
   bool new_cross_process =
-      (new_host && new_host->IsCrossProcessSubframe()) || is_portal_main_frame;
+      new_host->IsCrossProcessSubframe() || is_portal_main_frame;
 
   if (old_cross_process == new_cross_process)
     return nullptr;
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index e89a2121..a0d29a29 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -1245,9 +1245,9 @@
 
   // Check if the response should be sent to a renderer.
   response_should_be_rendered_ =
-      !is_download_ && (!response->head.headers.get() ||
-                        (response->head.headers->response_code() != 204 &&
-                         response->head.headers->response_code() != 205));
+      !is_download && (!response->head.headers.get() ||
+                       (response->head.headers->response_code() != 204 &&
+                        response->head.headers->response_code() != 205));
 
   // Response that will not commit should be marked as aborted in the
   // NavigationHandle.
@@ -1393,8 +1393,8 @@
   // know how to display the content.  We follow Firefox here and show our
   // own error page instead of intercepting the request as a stream or a
   // download.
-  if (is_download_ && (response->head.headers.get() &&
-                       (response->head.headers->response_code() / 100 != 2))) {
+  if (is_download && (response->head.headers.get() &&
+                      (response->head.headers->response_code() / 100 != 2))) {
     OnRequestFailedInternal(
         network::URLLoaderCompletionStatus(net::ERR_INVALID_RESPONSE),
         false /* skip_throttles */, base::nullopt /* error_page_content */,
diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc
index 344aa3a..d1a17e07 100644
--- a/content/browser/media/media_internals.cc
+++ b/content/browser/media/media_internals.cc
@@ -12,9 +12,11 @@
 #include "base/bind.h"
 #include "base/containers/adapters.h"
 #include "base/feature_list.h"
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
@@ -33,6 +35,7 @@
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/service_manager_connection.h"
+#include "media/audio/audio_features.h"
 #include "media/base/audio_parameters.h"
 #include "media/base/media_log_event.h"
 #include "media/filters/gpu_video_decoder.h"
@@ -705,8 +708,25 @@
         base::Value(base::FeatureList::IsEnabled(feature) ? "Enabled"
                                                           : "Disabled"));
   };
+
   set_feature_data(features::kAudioServiceAudioStreams);
   set_feature_data(features::kAudioServiceOutOfProcess);
+
+  std::string feature_value_string;
+  if (base::FeatureList::IsEnabled(
+          features::kAudioServiceOutOfProcessKillAtHang)) {
+    std::string timeout_value = base::GetFieldTrialParamValueByFeature(
+        features::kAudioServiceOutOfProcessKillAtHang, "timeout_seconds");
+    if (timeout_value.empty())
+      timeout_value = "<undefined>";
+    feature_value_string =
+        base::StrCat({"Enabled, timeout = ", timeout_value, " seconds"});
+  } else {
+    feature_value_string = "Disabled";
+  }
+  audio_info_data.SetKey(features::kAudioServiceOutOfProcessKillAtHang.name,
+                         base::Value(feature_value_string));
+
   set_feature_data(features::kAudioServiceLaunchOnStartup);
   set_feature_data(service_manager::features::kAudioServiceSandbox);
   set_feature_data(features::kWebRtcApmInAudioService);
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index c1ec9d0..c6f096b 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1801,6 +1801,8 @@
   *success = true;
   if (!GetCachedFirstRectForCharacterRange(requested_range, rect,
                                            actual_range)) {
+    // https://crbug.com/121917
+    base::ScopedAllowBlocking allow_wait;
     *rect = TextInputClientMac::GetInstance()->GetFirstRectForRange(
         GetFocusedWidget(), requested_range);
     // TODO(thakis): Pipe |actualRange| through TextInputClientMac machinery.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm b/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm
index a3a01867..4c51146 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm
@@ -63,4 +63,24 @@
   EXPECT_EQ(base::ASCIIToUTF16("Hello\nWorld"), waiter.text());
 }
 
+// Test that -firstRectForCharacterRange:actualRange: works when the range
+// isn't in the active selection, which requres a sync IPC to the renderer.
+IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewMacTest,
+                       GetFirstRectForCharacterRangeUncached) {
+  GURL url("data:text/html,Hello");
+  EXPECT_TRUE(NavigateToURL(shell(), url));
+
+  RenderWidgetHostView* rwhv =
+      shell()->web_contents()->GetMainFrame()->GetView();
+  RenderWidgetHostViewMac* rwhv_mac =
+      static_cast<RenderWidgetHostViewMac*>(rwhv);
+
+  NSRect rect =
+      [rwhv_mac->cocoa_view() firstRectForCharacterRange:NSMakeRange(2, 1)
+                                             actualRange:nullptr];
+  EXPECT_GT(NSMinX(rect), 0);
+  EXPECT_GT(NSWidth(rect), 0);
+  EXPECT_GT(NSHeight(rect), 0);
+}
+
 }  // namespace content
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 160d89d..32584efb 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -505,6 +505,12 @@
 
   WebRuntimeFeatures::EnableFormControlsRefresh(
       features::IsFormControlsRefreshEnabled());
+
+  if (base::FeatureList::IsEnabled(
+      blink::features::kAudioWorkletRealtimeThread)) {
+    WebRuntimeFeatures::EnableFeatureFromString(
+        "AudioWorkletRealtimeThread", true);
+  }
 }
 
 }  // namespace
diff --git a/content/common/throttling_url_loader.cc b/content/common/throttling_url_loader.cc
index de3cff5..a2c6e144 100644
--- a/content/common/throttling_url_loader.cc
+++ b/content/common/throttling_url_loader.cc
@@ -276,7 +276,13 @@
                                       int32_t intra_priority_value) {
   if (!url_loader_) {
     if (!loader_completed_) {
-      DCHECK_EQ(DEFERRED_START, deferred_stage_);
+      // Only check |deferred_stage_| if this resource has not been redirected
+      // by a throttle.
+      if (throttle_will_start_redirect_url_.is_empty() &&
+          throttle_will_redirect_redirect_url_.is_empty()) {
+        DCHECK_EQ(DEFERRED_START, deferred_stage_);
+      }
+
       priority_info_ =
           std::make_unique<PriorityInfo>(priority, intra_priority_value);
     }
diff --git a/content/public/common/url_loader_throttle.h b/content/public/common/url_loader_throttle.h
index 35fc259..f6a7094 100644
--- a/content/public/common/url_loader_throttle.h
+++ b/content/public/common/url_loader_throttle.h
@@ -113,8 +113,7 @@
   // asynchronously touching the pointer in defer case is not valid)
   // When |request->url| is modified it will make an internal redirect, which
   // might have some side-effects: drop upload streams data might be dropped,
-  // redirect count may be reached, and cross-origin redirect are not supported
-  // (at least until we have the demand).
+  // redirect count may be reached.
   //
   // Implementations should be aware that throttling can happen multiple times
   // for the same |request|, even after one instance of the same throttle
diff --git a/content/renderer/accessibility/ax_image_annotator.cc b/content/renderer/accessibility/ax_image_annotator.cc
index 07e88d51..ef669e56 100644
--- a/content/renderer/accessibility/ax_image_annotator.cc
+++ b/content/renderer/accessibility/ax_image_annotator.cc
@@ -178,7 +178,7 @@
   blink::WebAXObject parent = image.ParentObject();
   for (int ancestor_count = 0; !parent.IsDetached() && ancestor_count < 2;
        parent = parent.ParentObject()) {
-    if (parent.AccessibilityIsIncludedInTree()) {
+    if (!parent.AccessibilityIsIgnored()) {
       ++ancestor_count;
       if (parent.Role() == ax::mojom::Role::kLink ||
           parent.Role() == ax::mojom::Role::kRootWebArea) {
diff --git a/content/renderer/accessibility/blink_ax_enum_conversion.cc b/content/renderer/accessibility/blink_ax_enum_conversion.cc
index 7892d1f5..cca4b0d 100644
--- a/content/renderer/accessibility/blink_ax_enum_conversion.cc
+++ b/content/renderer/accessibility/blink_ax_enum_conversion.cc
@@ -71,7 +71,8 @@
   else if (o.Orientation() == blink::kWebAXOrientationHorizontal)
     dst->AddState(ax::mojom::State::kHorizontal);
 
-  DCHECK(!o.AccessibilityIsIgnored());
+  if (o.IsVisited())
+    dst->AddState(ax::mojom::State::kVisited);
 }
 
 }  // namespace content.
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index cc38608..f2f3b9d 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -161,7 +161,7 @@
 
 WebAXObject ParentObjectUnignored(WebAXObject child) {
   WebAXObject parent = child.ParentObject();
-  while (!parent.IsDetached() && !parent.AccessibilityIsIncludedInTree())
+  while (!parent.IsDetached() && parent.AccessibilityIsIgnored())
     parent = parent.ParentObject();
   return parent;
 }
@@ -488,7 +488,7 @@
     if (node.Equals(root()))
       return WebAXObject();
     node = node.ParentObject();
-  } while (!node.IsDetached() && !node.AccessibilityIsIncludedInTree());
+  } while (!node.IsDetached() && node.AccessibilityIsIgnored());
 
   return node;
 }
diff --git a/content/shell/test_runner/web_ax_object_proxy.cc b/content/shell/test_runner/web_ax_object_proxy.cc
index abf42f7..0e03fabc 100644
--- a/content/shell/test_runner/web_ax_object_proxy.cc
+++ b/content/shell/test_runner/web_ax_object_proxy.cc
@@ -1657,8 +1657,7 @@
 v8::Local<v8::Object> WebAXObjectProxy::ParentElement() {
   accessibility_object_.UpdateLayoutAndCheckValidity();
   blink::WebAXObject parent_object = accessibility_object_.ParentObject();
-  while (!parent_object.IsNull() &&
-         !parent_object.AccessibilityIsIncludedInTree())
+  while (parent_object.AccessibilityIsIgnored())
     parent_object = parent_object.ParentObject();
   return factory_->GetOrCreate(parent_object);
 }
diff --git a/content/test/gpu/gpu_tests/cloud_storage_integration_test_base.py b/content/test/gpu/gpu_tests/cloud_storage_integration_test_base.py
index 60d31ec..dd541f53 100644
--- a/content/test/gpu/gpu_tests/cloud_storage_integration_test_base.py
+++ b/content/test/gpu/gpu_tests/cloud_storage_integration_test_base.py
@@ -426,8 +426,7 @@
     return 'None' if num == None else self.ToHex(num)
 
   def _UploadTestResultToSkiaGold(self, image_name, screenshot,
-                                  tab, page,
-                                  is_check_mode=True, build_id_args=None):
+                                  tab, page, build_id_args=None):
     if build_id_args is None:
       raise Exception('Requires build args to be specified, including --commit')
     if self._skia_gold_temp_dir is None:
@@ -447,7 +446,7 @@
       'msaa': str(ref_img_params.msaa),
       'model_name': str(ref_img_params.model_name),
     }
-    mode = ['--passfail'] if is_check_mode else []
+    mode = ['--passfail']
     json_temp_file = tempfile.NamedTemporaryFile(suffix='.json').name
     failure_file = tempfile.NamedTemporaryFile(suffix='.txt').name
     with open(json_temp_file, 'w+') as f:
@@ -499,8 +498,6 @@
         self._UploadTestResultToSkiaGold(
           image_name, screenshot,
           tab, page,
-          # Always upload because we already did the check locally.
-          is_check_mode=False,
           build_id_args=build_id_args)
       else:
         self._WriteErrorImages(
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py
index b96e8e3..5e87c0d 100644
--- a/content/test/gpu/gpu_tests/pixel_integration_test.py
+++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -287,7 +287,6 @@
           self._UploadTestResultToSkiaGold(
             image_name, screenshot,
             tab, page,
-            is_check_mode=True,
             build_id_args=build_id_args)
         except CalledProcessError:
           self.fail('Gold said the test failed, so fail.')
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
index 59f9fa1..217b1c9 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -311,6 +311,7 @@
 crbug.com/709351 [ mac ] conformance2/glsl3/vector-dynamic-indexing-swizzled-lvalue.html [ Failure ]
 crbug.com/630800 [ intel mac ] conformance2/rendering/framebuffer-completeness-unaffected.html [ Failure ]
 crbug.com/630800 [ nvidia mac ] conformance2/rendering/framebuffer-completeness-unaffected.html [ Failure ]
+crbug.com/965209 [ mac ] conformance2/textures/canvas/tex-2d-rgb16f-rgb-half_float.html [ RetryOnFailure ]
 crbug.com/630800 [ intel mac ] deqp/functional/gles3/fbocompleteness.html [ Failure ]
 crbug.com/630800 [ nvidia mac ] deqp/functional/gles3/fbocompleteness.html [ Failure ]
 crbug.com/811614 [ amd mac ] deqp/functional/gles3/negativeshaderapi.html [ Failure ]
diff --git a/courgette/courgette_tool.cc b/courgette/courgette_tool.cc
index 8a835bc..0aade2ff 100644
--- a/courgette/courgette_tool.cc
+++ b/courgette/courgette_tool.cc
@@ -406,7 +406,8 @@
 
   logging::LoggingSettings settings;
   if (command_line.HasSwitch("nologfile")) {
-    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+    settings.logging_dest =
+        logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   } else {
     settings.logging_dest = logging::LOG_TO_ALL;
     settings.log_file = FILE_PATH_LITERAL("courgette.log");
diff --git a/extensions/browser/extension_protocols.cc b/extensions/browser/extension_protocols.cc
index e00a9cff6..0065675 100644
--- a/extensions/browser/extension_protocols.cc
+++ b/extensions/browser/extension_protocols.cc
@@ -277,8 +277,9 @@
     seek_position_ = result;
     // TODO(asargent) - we'll need to add proper support for range headers.
     // crbug.com/369895.
-    if (result > 0 && verify_job_.get())
-      verify_job_ = NULL;
+    const bool is_seek_contiguous = result == bytes_read_;
+    if (result > 0 && verify_job_.get() && !is_seek_contiguous)
+      verify_job_ = nullptr;
   }
 
   void OnReadComplete(net::IOBuffer* buffer, int result) override {
@@ -702,7 +703,8 @@
     seek_position_ = result;
     // TODO(asargent) - we'll need to add proper support for range headers.
     // crbug.com/369895.
-    if (result > 0 && verify_job_.get())
+    const bool is_seek_contiguous = result == bytes_read_;
+    if (result > 0 && verify_job_.get() && !is_seek_contiguous)
       verify_job_ = nullptr;
   }
 
diff --git a/extensions/common/constants.cc b/extensions/common/constants.cc
index 296456d..d3055c5b 100644
--- a/extensions/common/constants.cc
+++ b/extensions/common/constants.cc
@@ -120,11 +120,11 @@
 
 #if defined(OS_CHROMEOS)
 const char kHighlightsAppId[] = "lpmakjfjcconjeehbidjclhdlpjmfjjj";
-const char kHighlightsAlt1AppId[] = "iggildboghmjpbjcpmobahnkmoefkike";
-const char kHighlightsAlt2AppId[] = "elhbopodaklenjkeihkdhhfaghalllba";
+const char kHighlightsEveAppId[] = "iggildboghmjpbjcpmobahnkmoefkike";
+const char kHighlightsNocturneAppId[] = "elhbopodaklenjkeihkdhhfaghalllba";
 const char kScreensaverAppId[] = "mnoijifedipmbjaoekhadjcijipaijjc";
-const char kScreensaverAlt1AppId[] = "gdobaoeekhiklaljmhladjfdfkigampc";
-const char kScreensaverAlt2AppId[] = "lminefdanffajachfahfpmphfkhahcnj";
+const char kScreensaverEveAppId[] = "gdobaoeekhiklaljmhladjfdfkigampc";
+const char kScreensaverNocturneAppId[] = "lminefdanffajachfahfpmphfkhahcnj";
 
 bool IsSystemUIApp(base::StringPiece extension_id) {
   static const char* const kApps[] = {
@@ -133,11 +133,11 @@
       kChromeVoxExtensionId,
       kFeedbackExtensionId,
       kFilesManagerAppId,
-      kHighlightsAlt1AppId,
-      kHighlightsAlt2AppId,
+      kHighlightsEveAppId,
+      kHighlightsNocturneAppId,
       kHighlightsAppId,
-      kScreensaverAlt1AppId,
-      kScreensaverAlt2AppId,
+      kScreensaverEveAppId,
+      kScreensaverNocturneAppId,
       kScreensaverAppId,
       // clang-format on
   };
diff --git a/extensions/common/constants.h b/extensions/common/constants.h
index 6e978dd7..9703ae7 100644
--- a/extensions/common/constants.h
+++ b/extensions/common/constants.h
@@ -251,20 +251,20 @@
 // The extension id of the default Demo Mode Highlights app.
 extern const char kHighlightsAppId[];
 
-// The extension id of an alternate Demo Mode Highlights app.
-extern const char kHighlightsAlt1AppId[];
+// The extension id of the eve Demo Mode Highlights app.
+extern const char kHighlightsEveAppId[];
 
-// The extension id of an alternate Demo Mode Highlights app.
-extern const char kHighlightsAlt2AppId[];
+// The extension id of the nocturne Demo Mode Highlights app.
+extern const char kHighlightsNocturneAppId[];
 
 // The extension id of the default Demo Mode screensaver app.
 extern const char kScreensaverAppId[];
 
-// The extension id of an alternate Demo Mode screensaver app.
-extern const char kScreensaverAlt1AppId[];
+// The extension id of the eve Demo Mode screensaver app.
+extern const char kScreensaverEveAppId[];
 
-// The extension id of an alternate Demo Mode screensaver app.
-extern const char kScreensaverAlt2AppId[];
+// The extension id of the nocturne Demo Mode screensaver app.
+extern const char kScreensaverNocturneAppId[];
 
 // Returns true if this app is part of the "system UI". Generally this is UI
 // that that on other operating systems would be considered part of the OS,
diff --git a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc
index fc73a8a..eab32eb 100644
--- a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc
+++ b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc
@@ -43,7 +43,7 @@
       return api::automation::EVENT_TYPE_EXPANDEDCHANGED;
     case ax::mojom::Event::kFocus:
     case ax::mojom::Event::kFocusContext:
-      return api::automation::EVENT_TYPE_FOCUS;
+      return api::automation::EVENT_TYPE_NONE;
     case ax::mojom::Event::kHide:
       return api::automation::EVENT_TYPE_HIDE;
     case ax::mojom::Event::kHitTestResult:
@@ -267,13 +267,19 @@
     return child_tree_ids.count(pair.first);
   });
 
+  // Unserialize all incoming data.
   for (const auto& update : event_bundle.updates) {
-    event_generator_.set_event_from(update.event_from);
+    // If any updates in this bundle was part of an action, consider all updates
+    // as part of a user action.
+    if (event_generator_.event_from() != ax::mojom::EventFrom::kAction)
+      event_generator_.set_event_from(update.event_from);
     deleted_node_ids_.clear();
     did_send_tree_change_during_unserialization_ = false;
 
-    if (!tree_.Unserialize(update))
+    if (!tree_.Unserialize(update)) {
+      event_generator_.ClearEvents();
       return false;
+    }
 
     if (is_active_profile) {
       owner_->SendNodesRemovedEvent(&tree_, deleted_node_ids_);
@@ -289,49 +295,46 @@
     }
   }
 
+  // Refresh child tree id  mappings.
   for (const ui::AXTreeID& tree_id : tree_.GetAllChildTreeIds()) {
     DCHECK(!base::ContainsKey(child_tree_id_reverse_map, tree_id));
     child_tree_id_reverse_map.insert(std::make_pair(tree_id, this));
   }
 
   // Exit early if this isn't the active profile.
-  if (!is_active_profile)
+  if (!is_active_profile) {
+    event_generator_.ClearEvents();
     return true;
-
-  // Send all blur and focus events first. This ensures we correctly dispatch
-  // these events, which gets re-targetted in the js bindings and ensures it
-  // receives the correct value for |event_from|.
-  for (const auto& event : event_bundle.events) {
-    if (event.event_type != ax::mojom::Event::kFocus &&
-        event.event_type != ax::mojom::Event::kBlur)
-      continue;
-
-    api::automation::EventType automation_event_type =
-        ToAutomationEvent(event.event_type);
-    owner_->SendAutomationEvent(event_bundle.tree_id,
-                                event_bundle.mouse_location, event,
-                                automation_event_type);
   }
 
+  // Perform language detection first thing if we see a load complete event.
+  // We have to run *before* we send the load complete event to javascript
+  // otherwise code which runs immediately on load complete will not be able
+  // to see the results of language detection.
+  //
+  // Currently language detection only runs once for initial load complete, any
+  // content loaded after this will not have language detection performed for
+  // it.
+  for (const auto& targeted_event : event_generator_) {
+    if (targeted_event.event_params.event ==
+        ui::AXEventGenerator::Event::LOAD_COMPLETE) {
+      DetectLanguageForSubtree(tree_.root(), &tree_);
+      if (!LabelLanguageForSubtree(tree_.root(), &tree_))
+        LOG(FATAL) << "Language detection failed at step: Label";
+
+      break;
+    }
+  }
+
+  // Send all blur and focus events first.
+  owner_->MaybeSendFocusAndBlur(this, event_generator_.event_from(),
+                                event_bundle);
+
   // Send auto-generated AXEventGenerator events.
   for (const auto& targeted_event : event_generator_) {
     api::automation::EventType event_type =
         ToAutomationEvent(targeted_event.event_params.event);
 
-    // Perform language detection first thing if we see a load complete event.
-    // We have to run *before* we send the load complete event to javascript
-    // otherwise code which runs immediately on load complete will not be able
-    // to see the results of language detection.
-    //
-    // Currently language detection only runs once for initial load complete,
-    // any content loaded after this will not have language detection performed
-    // for it.
-    if (event_type == api::automation::EVENT_TYPE_LOADCOMPLETE) {
-      DetectLanguageForSubtree(tree_.root(), &tree_);
-      if (!LabelLanguageForSubtree(tree_.root(), &tree_))
-        LOG(FATAL) << "Language detection failed at step: Label";
-    }
-
     if (IsEventTypeHandledByAXEventGenerator(event_type)) {
       ui::AXEvent generated_event;
       generated_event.id = targeted_event.node->id();
@@ -400,7 +403,10 @@
 
     child_of_ancestor = ancestor;
   }
-  return false;
+
+  // The only way we end up here is if the tree is detached from any desktop.
+  // This can occur in tabs-only mode.
+  return true;
 }
 
 // static
diff --git a/extensions/renderer/api/automation/automation_ax_tree_wrapper.h b/extensions/renderer/api/automation/automation_ax_tree_wrapper.h
index b49266fd..904f4e68 100644
--- a/extensions/renderer/api/automation/automation_ax_tree_wrapper.h
+++ b/extensions/renderer/api/automation/automation_ax_tree_wrapper.h
@@ -76,6 +76,7 @@
   // changes outside of unserialization do not get reflected here. The value is
   // reset after unserialization.
   bool did_send_tree_change_during_unserialization_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(AutomationAXTreeWrapper);
 };
 
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
index 6b55c54..c351e92 100644
--- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
+++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -1990,6 +1990,54 @@
       "automationInternal.onAccessibilityEvent", &args, nullptr, context());
 }
 
+void AutomationInternalCustomBindings::MaybeSendFocusAndBlur(
+    AutomationAXTreeWrapper* tree,
+    ax::mojom::EventFrom event_from,
+    const ExtensionMsg_AccessibilityEventBundleParams& event_bundle) {
+  // Get the root-most tree.
+  AutomationAXTreeWrapper* root_tree = tree;
+  while (
+      (tree = AutomationAXTreeWrapper::GetParentOfTreeId(root_tree->tree_id())))
+    root_tree = tree;
+
+  ui::AXNode* new_node = nullptr;
+  AutomationAXTreeWrapper* new_wrapper = nullptr;
+  if (!GetFocusInternal(root_tree, &new_wrapper, &new_node))
+    return;
+
+  ui::AXNode* old_node = nullptr;
+  AutomationAXTreeWrapper* old_wrapper =
+      GetAutomationAXTreeWrapperFromTreeID(focus_tree_id_);
+  if (old_wrapper)
+    old_node = old_wrapper->tree()->GetFromId(focus_id_);
+
+  if (new_wrapper == old_wrapper && new_node == old_node)
+    return;
+
+  // Blur previous focus.
+  if (old_node) {
+    ui::AXEvent blur_event;
+    blur_event.id = old_node->id();
+    blur_event.event_from = event_from;
+    SendAutomationEvent(old_wrapper->tree_id(), event_bundle.mouse_location,
+                        blur_event, api::automation::EVENT_TYPE_BLUR);
+
+    focus_id_ = -1;
+    focus_tree_id_ = ui::AXTreeIDUnknown();
+  }
+
+  // New focus.
+  if (new_node) {
+    ui::AXEvent focus_event;
+    focus_event.id = new_node->id();
+    focus_event.event_from = event_from;
+    SendAutomationEvent(new_wrapper->tree_id(), event_bundle.mouse_location,
+                        focus_event, api::automation::EVENT_TYPE_FOCUS);
+    focus_id_ = new_node->id();
+    focus_tree_id_ = new_wrapper->tree_id();
+  }
+}
+
 void AutomationInternalCustomBindings::SendChildTreeIDEvent(
     ui::AXTreeID child_tree_id) {
   base::ListValue args;
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.h b/extensions/renderer/api/automation/automation_internal_custom_bindings.h
index db2433c..ab070ec 100644
--- a/extensions/renderer/api/automation/automation_internal_custom_bindings.h
+++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.h
@@ -87,6 +87,11 @@
                            const ui::AXEvent& event,
                            api::automation::EventType event_type);
 
+  void MaybeSendFocusAndBlur(
+      AutomationAXTreeWrapper* tree,
+      ax::mojom::EventFrom event_from,
+      const ExtensionMsg_AccessibilityEventBundleParams& event_bundle);
+
  private:
   // ObjectBackedNativeHandler overrides:
   void Invalidate() override;
@@ -216,6 +221,12 @@
   NativeExtensionBindingsSystem* bindings_system_;
   bool should_ignore_context_;
 
+  // The global focused tree id.
+  ui::AXTreeID focus_tree_id_;
+
+  // The global focused node id.
+  int32_t focus_id_ = -1;
+
   DISALLOW_COPY_AND_ASSIGN(AutomationInternalCustomBindings);
 };
 
diff --git a/extensions/renderer/resources/automation/automation_custom_bindings.js b/extensions/renderer/resources/automation/automation_custom_bindings.js
index 7350bea..d692b92 100644
--- a/extensions/renderer/resources/automation/automation_custom_bindings.js
+++ b/extensions/renderer/resources/automation/automation_custom_bindings.js
@@ -58,43 +58,6 @@
  */
 automationUtil.nextTreeChangeObserverId = 1;
 
-/**
- * @type {AutomationNode} The current focused node. This is only updated
- *   when calling automationUtil.updateFocusedNode.
- */
-automationUtil.focusedNode = null;
-
-/**
- * Gets the currently focused AutomationNode.
- * @return {AutomationNode}
- */
-automationUtil.getFocus = function() {
-  if (desktopId === undefined)
-    return;
-
-  var focusedNodeInfo = GetFocusNative(desktopId);
-  if (!focusedNodeInfo)
-    return null;
-  var tree = AutomationRootNode.getOrCreate(focusedNodeInfo.treeId);
-  if (tree)
-    return privates(tree).impl.get(focusedNodeInfo.nodeId);
-};
-
-/**
- * Update automationUtil.focusedNode to be the node that currently has focus.
- */
-automationUtil.updateFocusedNode = function() {
-  automationUtil.focusedNode = automationUtil.getFocus();
-};
-
-/**
- * Updates the focus on blur.
- */
-automationUtil.updateFocusedNodeOnBlur = function() {
-  var focus = automationUtil.getFocus();
-  automationUtil.focusedNode = focus ? focus.root : null;
-};
-
 apiBridge.registerCustomHook(function(bindingsAPI) {
   var apiFunctions = bindingsAPI.apiFunctions;
 
@@ -155,7 +118,19 @@
   });
 
   apiFunctions.setHandleRequest('getFocus', function(callback) {
-    callback(automationUtil.getFocus());
+    if (desktopId === undefined)
+      return;
+
+    var focusedNodeInfo = GetFocusNative(desktopId);
+    if (!focusedNodeInfo) {
+      callback(null);
+      return;
+    }
+    var tree = AutomationRootNode.getOrCreate(focusedNodeInfo.treeId);
+    if (tree) {
+      callback(privates(tree).impl.get(focusedNodeInfo.nodeId));
+      return;
+    }
   });
 
   function removeTreeChangeObserver(observer) {
@@ -257,51 +232,18 @@
 
 /**
  * Dispatch accessibility events fired on individual nodes to its
- * corresponding AutomationNode. Handle focus events specially
- * (see below).
+ * corresponding AutomationNode.
  */
 automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
   var id = eventParams.treeID;
   var targetTree = AutomationRootNode.getOrCreate(id);
-  if (eventParams.eventType == 'blur') {
-    // Work around an issue where Chrome sends us 'blur' events on the
-    // root node when nothing has focus, we need to treat those as focus
-    // events but otherwise not handle blur events specially.
-    var node = privates(targetTree).impl.get(eventParams.targetID);
-    if (!node)
-      return;
-
-    if (node == node.root)
-      automationUtil.updateFocusedNodeOnBlur();
-  } else if (eventParams.eventType == 'mediaStartedPlaying' ||
+  if (eventParams.eventType == 'mediaStartedPlaying' ||
       eventParams.eventType == 'mediaStoppedPlaying') {
     // These events are global to the tree.
     eventParams.targetID = privates(targetTree).impl.id;
-  } else {
-    var previousFocusedNode = automationUtil.focusedNode;
-    automationUtil.updateFocusedNode();
-
-    // Fire focus events if necessary.
-    if (automationUtil.focusedNode &&
-        automationUtil.focusedNode != previousFocusedNode) {
-      var eventParamsCopy = {};
-      for (var key in eventParams)
-        eventParamsCopy[key] = eventParams[key];
-      eventParamsCopy['eventType'] = 'focus';
-      eventParamsCopy['treeID'] =
-          privates(automationUtil.focusedNode.root).impl.treeID;
-      eventParamsCopy['targetID'] =
-          privates(automationUtil.focusedNode).impl.id;
-      privates(automationUtil.focusedNode.root)
-          .impl.onAccessibilityEvent(eventParamsCopy);
-    }
   }
 
-  // Note that focus type events have already been handled above if there was a
-  // focused node. All other events, even non-focus events that triggered a
-  // focus dispatch, still need to have their original event fired.
-  if ((!automationUtil.focusedNode || eventParams.eventType != 'focus') &&
-      !privates(targetTree).impl.onAccessibilityEvent(eventParams))
+  if (!privates(targetTree).impl.onAccessibilityEvent(eventParams))
     return;
 
   // If we're not waiting on a callback to getTree(), we can early out here.
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc
index f1f75b1..b64dc29 100644
--- a/google_apis/gcm/tools/mcs_probe.cc
+++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -438,7 +438,8 @@
 
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   mojo::core::Init();
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
index f7436560..ae077ab 100644
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -3274,6 +3274,14 @@
       "features": [
         "disable_direct_composition_layers"
       ]
+    },
+    {
+      "id": 305,
+      "description": "Disable MESA_framebuffer_flip_y until passing WebGL 2.0 Conformance tests",
+      "cr_bugs": [964010],
+      "disabled_extensions": [
+        "GL_MESA_framebuffer_flip_y"
+      ]
     }
   ]
 }
diff --git a/gpu/ipc/client/BUILD.gn b/gpu/ipc/client/BUILD.gn
index 5a9ee4b..ad92416 100644
--- a/gpu/ipc/client/BUILD.gn
+++ b/gpu/ipc/client/BUILD.gn
@@ -37,7 +37,7 @@
     "//gpu/command_buffer/common:common_sources",
     "//gpu/config:config_sources",
     "//gpu/ipc/common:ipc_common_sources",
-    "//media/filters:jpeg_parser",
+    "//media/parsers",
     "//mojo/public/cpp/system",
     "//ui/gfx:color_space",
     "//ui/gfx/geometry",
diff --git a/gpu/ipc/client/DEPS b/gpu/ipc/client/DEPS
index 7a79c6ac..88b89ed 100644
--- a/gpu/ipc/client/DEPS
+++ b/gpu/ipc/client/DEPS
@@ -11,7 +11,7 @@
     "+components/viz/test/test_gpu_memory_buffer_manager.h",
   ],
   "image_decode_accelerator_proxy.cc": [
-    "+media/filters/jpeg_parser.h",
+    "+media/parsers/jpeg_parser.h",
   ],
   "raster_in_process_context_tests.cc": [
     "+components/viz/common/resources/resource_format.h",
diff --git a/gpu/ipc/client/image_decode_accelerator_proxy.cc b/gpu/ipc/client/image_decode_accelerator_proxy.cc
index ef7442f..098a2cf2 100644
--- a/gpu/ipc/client/image_decode_accelerator_proxy.cc
+++ b/gpu/ipc/client/image_decode_accelerator_proxy.cc
@@ -17,7 +17,7 @@
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "gpu/ipc/common/command_buffer_id.h"
 #include "gpu/ipc/common/gpu_messages.h"
-#include "media/filters/jpeg_parser.h"
+#include "media/parsers/jpeg_parser.h"
 #include "ui/gfx/color_space.h"
 #include "ui/gfx/geometry/size.h"
 
diff --git a/gpu/ipc/service/direct_composition_child_surface_win.cc b/gpu/ipc/service/direct_composition_child_surface_win.cc
index ee825178d..54c063f 100644
--- a/gpu/ipc/service/direct_composition_child_surface_win.cc
+++ b/gpu/ipc/service/direct_composition_child_surface_win.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/trace_event/trace_event.h"
+#include "base/trace_event/traced_value.h"
 #include "base/win/windows_version.h"
 #include "ui/display/display_switches.h"
 #include "ui/gfx/native_widget_types.h"
@@ -19,6 +20,7 @@
 #include "ui/gl/gl_angle_util_win.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_surface_egl.h"
+#include "ui/gl/gl_switches.h"
 #include "ui/gl/scoped_make_current.h"
 
 #ifndef EGL_ANGLE_flexible_surface_compatibility
@@ -87,7 +89,26 @@
 }
 }  // namespace
 
-DirectCompositionChildSurfaceWin::DirectCompositionChildSurfaceWin() = default;
+DirectCompositionChildSurfaceWin::PendingFrame::PendingFrame(
+    uint32_t present_count,
+    uint32_t target_refresh_count,
+    PresentationCallback callback)
+    : present_count(present_count),
+      target_refresh_count(target_refresh_count),
+      callback(std::move(callback)) {}
+DirectCompositionChildSurfaceWin::PendingFrame::PendingFrame(
+    PendingFrame&& other) = default;
+DirectCompositionChildSurfaceWin::PendingFrame::~PendingFrame() = default;
+DirectCompositionChildSurfaceWin::PendingFrame&
+DirectCompositionChildSurfaceWin::PendingFrame::operator=(
+    PendingFrame&& other) = default;
+
+// static
+bool DirectCompositionChildSurfaceWin::UseSwapChainFrameStatistics() {
+  return base::FeatureList::IsEnabled(features::kSwapChainFrameStatistics);
+}
+
+DirectCompositionChildSurfaceWin::DirectCompositionChildSurfaceWin() {}
 
 DirectCompositionChildSurfaceWin::~DirectCompositionChildSurfaceWin() {
   Destroy();
@@ -138,6 +159,7 @@
   if (draw_texture_) {
     draw_texture_.Reset();
     if (dcomp_surface_) {
+      TRACE_EVENT0("gpu", "DirectCompositionChildSurfaceWin::EndDraw");
       HRESULT hr = dcomp_surface_->EndDraw();
       if (FAILED(hr)) {
         DLOG(ERROR) << "EndDraw failed with error " << std::hex << hr;
@@ -145,6 +167,7 @@
       }
       dcomp_surface_serial_++;
     } else if (!will_discard) {
+      TRACE_EVENT0("gpu", "DirectCompositionChildSurfaceWin::PresentSwapChain");
       bool allow_tearing = IsSwapChainTearingSupported();
       UINT interval = first_swap_ || !vsync_enabled_ || allow_tearing ? 0 : 1;
       UINT flags = allow_tearing ? DXGI_PRESENT_ALLOW_TEARING : 0;
@@ -180,6 +203,10 @@
 }
 
 void DirectCompositionChildSurfaceWin::Destroy() {
+  for (auto& frame : pending_frames_)
+    std::move(frame.callback).Run(gfx::PresentationFeedback::Failure());
+  pending_frames_.clear();
+
   if (default_surface_) {
     if (!eglDestroySurface(GetDisplay(), default_surface_)) {
       DLOG(ERROR) << "eglDestroySurface failed with error "
@@ -220,12 +247,21 @@
     PresentationCallback callback) {
   TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::SwapBuffers", "size",
                size_.ToString());
-  // PresentationCallback is handled by DirectCompositionSurfaceWin. The child
-  // surface doesn't need provide presentation feedback.
-  DCHECK(!callback);
-  if (!ReleaseDrawTexture(false /* will_discard */))
-    return gfx::SwapResult::SWAP_FAILED;
-  return gfx::SwapResult::SWAP_ACK;
+
+  bool succeeded = ReleaseDrawTexture(false /* will_discard */);
+
+  if (UseSwapChainFrameStatistics()) {
+    CheckPendingFrames();
+    // Enqueue callback after retiring previous callbacks so that it's called
+    // after SwapBuffers() returns.
+    EnqueuePendingFrame(std::move(callback));
+  } else {
+    // PresentationCallback is handled by DirectCompositionSurfaceWin. The child
+    // surface doesn't need to provide presentation feedback.
+    DCHECK(!callback);
+  }
+
+  return succeeded ? gfx::SwapResult::SWAP_ACK : gfx::SwapResult::SWAP_FAILED;
 }
 
 bool DirectCompositionChildSurfaceWin::FlipsVertically() const {
@@ -287,7 +323,10 @@
 
   DXGI_FORMAT dxgi_format = gl::ColorSpaceUtils::GetDXGIFormat(color_space_);
 
-  if (enable_dc_layers_ && !dcomp_surface_) {
+  bool force_swap_chain = UseSwapChainFrameStatistics();
+  bool use_swap_chain = force_swap_chain || !enable_dc_layers_;
+
+  if (!dcomp_surface_ && !use_swap_chain) {
     TRACE_EVENT2("gpu", "DirectCompositionChildSurfaceWin::CreateSurface",
                  "width", size_.width(), "height", size_.height());
     swap_chain_.Reset();
@@ -300,7 +339,7 @@
       DLOG(ERROR) << "CreateSurface failed with error " << std::hex << hr;
       return false;
     }
-  } else if (!enable_dc_layers_ && !swap_chain_) {
+  } else if (!swap_chain_ && use_swap_chain) {
     TRACE_EVENT2("gpu", "DirectCompositionChildSurfaceWin::CreateSwapChain",
                  "width", size_.width(), "height", size_.height());
     dcomp_surface_.Reset();
@@ -325,8 +364,9 @@
     desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
     desc.Scaling = DXGI_SCALING_STRETCH;
     desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
-    desc.AlphaMode =
-        has_alpha_ ? DXGI_ALPHA_MODE_PREMULTIPLIED : DXGI_ALPHA_MODE_IGNORE;
+    desc.AlphaMode = (has_alpha_ || enable_dc_layers_)
+                         ? DXGI_ALPHA_MODE_PREMULTIPLIED
+                         : DXGI_ALPHA_MODE_IGNORE;
     desc.Flags =
         IsSwapChainTearingSupported() ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0;
     HRESULT hr = dxgi_factory->CreateSwapChainForComposition(
@@ -348,6 +388,7 @@
   draw_offset_ = gfx::Vector2d();
 
   if (dcomp_surface_) {
+    TRACE_EVENT0("gpu", "DirectCompositionChildSurfaceWin::BeginDraw");
     POINT update_offset;
     const RECT rect = rectangle.ToRECT();
     HRESULT hr = dcomp_surface_->BeginDraw(&rect, IID_PPV_ARGS(&draw_texture_),
@@ -358,6 +399,7 @@
     }
     draw_offset_ = gfx::Point(update_offset) - rectangle.origin();
   } else {
+    TRACE_EVENT0("gpu", "DirectCompositionChildSurfaceWin::GetBuffer");
     swap_chain_->GetBuffer(0, IID_PPV_ARGS(&draw_texture_));
   }
   DCHECK(draw_texture_);
@@ -427,6 +469,7 @@
       return true;
     DLOG(ERROR) << "ResizeBuffers failed with error 0x" << std::hex << hr;
   }
+  ClearPendingFrames();
   // Next SetDrawRectangle call will recreate the swap chain or surface.
   swap_chain_.Reset();
   dcomp_surface_.Reset();
@@ -437,12 +480,114 @@
   if (enable_dc_layers_ == enable)
     return true;
   enable_dc_layers_ = enable;
-  // Next SetDrawRectangle call will recreate the swap chain or surface.
   if (!ReleaseDrawTexture(true /* will_discard */))
     return false;
+  ClearPendingFrames();
+  // Next SetDrawRectangle call will recreate the swap chain or surface.
   swap_chain_.Reset();
   dcomp_surface_.Reset();
   return true;
 }
 
+void DirectCompositionChildSurfaceWin::UpdateVSyncParameters(
+    base::TimeTicks vsync_time,
+    base::TimeDelta vsync_interval) {
+  last_vsync_time_ = vsync_time;
+  last_vsync_interval_ = vsync_interval;
+}
+
+bool DirectCompositionChildSurfaceWin::HasPendingFrames() const {
+  return !pending_frames_.empty();
+}
+
+void DirectCompositionChildSurfaceWin::CheckPendingFrames() {
+  DCHECK(UseSwapChainFrameStatistics());
+
+  // Check if swap chain has already been destroyed e.g. due to Resize().
+  if (!swap_chain_ || pending_frames_.empty())
+    return;
+
+  TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::CheckPendingFrames",
+               "num_pending_frames", pending_frames_.size());
+
+  // The stats indicate that the present corresponding to |stats.PresentCount|
+  // was displayed at the vblank corresponding to |stats.PresentRefreshCount|
+  // with presentation time |stats.SyncQPCTime|.
+  DXGI_FRAME_STATISTICS stats = {};
+  if (SUCCEEDED(swap_chain_->GetFrameStatistics(&stats))) {
+    auto present_time =
+        base::TimeTicks::FromQPCValue(stats.SyncQPCTime.QuadPart);
+
+    auto traced_stats = std::make_unique<base::trace_event::TracedValue>();
+    traced_stats->SetInteger("PresentCount", stats.PresentCount);
+    traced_stats->SetInteger("PresentRefreshCount", stats.PresentRefreshCount);
+    traced_stats->SetInteger("SyncRefreshCount", stats.SyncRefreshCount);
+    traced_stats->SetDouble("SyncQPCTime",
+                            present_time.since_origin().InMillisecondsF());
+    TRACE_EVENT_INSTANT1("gpu", "Swap chain frame statistics",
+                         TRACE_EVENT_SCOPE_THREAD, "DXGI_FRAME_STATISTICS",
+                         std::move(traced_stats));
+    // Retire presentation callbacks for presents up to |stats.PresentCount|.
+    uint32_t last_refresh_count = 0;
+    while (!pending_frames_.empty()) {
+      auto& frame = pending_frames_.front();
+      // Subtraction will underflow if stats.PresentCount > frame.present_count
+      // including when present count wraps around.
+      if (stats.PresentCount - frame.present_count > 0x80000000u)
+        break;
+      std::move(frame.callback)
+          .Run(gfx::PresentationFeedback(
+              present_time, last_vsync_interval_,
+              gfx::PresentationFeedback::kVSync |
+                  gfx::PresentationFeedback::kHWClock |
+                  gfx::PresentationFeedback::kHWCompletion));
+      last_refresh_count = frame.target_refresh_count;
+      pending_frames_.pop_front();
+    }
+    // Glitch detection doesn't work correctly for the first few frames after
+    // a pause in presentation since we don't know how old the stats are.
+    if (last_refresh_count > 0 &&
+        last_refresh_count != stats.PresentRefreshCount) {
+      uint32_t num_frames = stats.PresentRefreshCount - last_refresh_count;
+      TRACE_EVENT_INSTANT1("gpu", "Swap chain presentation glitch",
+                           TRACE_EVENT_SCOPE_THREAD, "num_frames", num_frames);
+    }
+    // Update target refresh count for remaining frames.
+    uint32_t next_refresh_count = stats.PresentRefreshCount + 1;
+    for (auto& frame : pending_frames_)
+      frame.target_refresh_count = next_refresh_count++;
+  } else {
+    ClearPendingFrames();
+  }
+}
+
+void DirectCompositionChildSurfaceWin::EnqueuePendingFrame(
+    PresentationCallback callback) {
+  DCHECK(UseSwapChainFrameStatistics());
+
+  uint32_t next_refresh_count = 0;
+  if (!pending_frames_.empty())
+    next_refresh_count = pending_frames_.back().target_refresh_count + 1;
+
+  UINT present_count = 0;
+  DCHECK(swap_chain_);
+  swap_chain_->GetLastPresentCount(&present_count);
+
+  pending_frames_.emplace_back(present_count, next_refresh_count,
+                               std::move(callback));
+}
+
+void DirectCompositionChildSurfaceWin::ClearPendingFrames() {
+  if (pending_frames_.empty())
+    return;
+  TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::ClearPendingFrames",
+               "num_pending_frames", pending_frames_.size());
+  for (auto& frame : pending_frames_) {
+    std::move(frame.callback)
+        .Run(gfx::PresentationFeedback(last_vsync_time_, last_vsync_interval_,
+                                       gfx::PresentationFeedback::kVSync));
+  }
+  pending_frames_.clear();
+}
+
 }  // namespace gpu
diff --git a/gpu/ipc/service/direct_composition_child_surface_win.h b/gpu/ipc/service/direct_composition_child_surface_win.h
index 3ee8dcc..f956ce0 100644
--- a/gpu/ipc/service/direct_composition_child_surface_win.h
+++ b/gpu/ipc/service/direct_composition_child_surface_win.h
@@ -20,6 +20,8 @@
  public:
   DirectCompositionChildSurfaceWin();
 
+  static bool UseSwapChainFrameStatistics();
+
   // GLSurfaceEGL implementation.
   bool Initialize(gl::GLSurfaceFormat format) override;
   void Destroy() override;
@@ -40,6 +42,11 @@
               bool has_alpha) override;
   bool SetEnableDCLayers(bool enable) override;
 
+  void UpdateVSyncParameters(base::TimeTicks vsync_time,
+                             base::TimeDelta vsync_interval);
+  bool HasPendingFrames() const;
+  void CheckPendingFrames();
+
   const Microsoft::WRL::ComPtr<IDCompositionSurface>& dcomp_surface() const {
     return dcomp_surface_;
   }
@@ -54,6 +61,29 @@
   ~DirectCompositionChildSurfaceWin() override;
 
  private:
+  struct PendingFrame {
+    PendingFrame(uint32_t present_count,
+                 uint32_t target_refresh_count,
+                 PresentationCallback callback);
+    PendingFrame(PendingFrame&& other);
+    ~PendingFrame();
+    PendingFrame& operator=(PendingFrame&& other);
+
+    // Identifies a particular Present() call.
+    uint32_t present_count;
+
+    // Identifies the target vblank for a Present() call.
+    uint32_t target_refresh_count;
+
+    // Presentation callback enqueued in SwapBuffers().
+    PresentationCallback callback;
+  };
+  void EnqueuePendingFrame(PresentationCallback callback);
+  void ClearPendingFrames();
+
+  // Queue of pending presentation callbacks.
+  base::circular_deque<PendingFrame> pending_frames_;
+
   // Release the texture that's currently being drawn to. If will_discard is
   // true then the surface should be discarded without swapping any contents
   // to it. Returns false if this fails.
@@ -81,6 +111,9 @@
   // be called on the device.
   uint64_t dcomp_surface_serial_ = 0;
 
+  base::TimeTicks last_vsync_time_;
+  base::TimeDelta last_vsync_interval_ = base::TimeDelta::FromSecondsD(1. / 60);
+
   Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_;
   Microsoft::WRL::ComPtr<IDCompositionDevice2> dcomp_device_;
   Microsoft::WRL::ComPtr<IDCompositionSurface> dcomp_surface_;
diff --git a/gpu/ipc/service/direct_composition_surface_win.cc b/gpu/ipc/service/direct_composition_surface_win.cc
index e196793..4171c83b 100644
--- a/gpu/ipc/service/direct_composition_surface_win.cc
+++ b/gpu/ipc/service/direct_composition_surface_win.cc
@@ -10,9 +10,12 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
+#include "base/trace_event/traced_value.h"
 #include "base/win/windows_version.h"
 #include "gpu/ipc/service/dc_layer_tree.h"
 #include "gpu/ipc/service/direct_composition_child_surface_win.h"
@@ -186,6 +189,7 @@
     const Settings& settings)
     : gl::GLSurfaceEGL(),
       child_window_(parent_window),
+      task_runner_(base::ThreadTaskRunnerHandle::Get()),
       root_surface_(new DirectCompositionChildSurfaceWin()),
       layer_tree_(std::make_unique<DCLayerTree>(
           settings.disable_nv12_dynamic_textures,
@@ -193,7 +197,8 @@
       vsync_provider_(std::move(vsync_provider)),
       vsync_callback_(std::move(vsync_callback)),
       presentation_helper_(std::make_unique<gl::GLSurfacePresentationHelper>(
-          vsync_provider_.get())) {}
+          vsync_provider_.get())),
+      weak_ptr_factory_(this) {}
 
 DirectCompositionSurfaceWin::~DirectCompositionSurfaceWin() {
   Destroy();
@@ -406,22 +411,32 @@
   }
   window_ = child_window_.window();
 
-  if (SupportsGpuVSync() && vsync_callback_) {
-    vsync_thread_ = std::make_unique<gl::VSyncThreadWin>(window_, d3d11_device_,
-                                                         vsync_callback_);
-  }
-
   if (!layer_tree_->Initialize(window_, d3d11_device_, dcomp_device_))
     return false;
 
   if (!root_surface_->Initialize(gl::GLSurfaceFormat()))
     return false;
 
+  if (root_surface_->UseSwapChainFrameStatistics()) {
+    // Save weak ptr on main thread before any use on vsync thread.
+    main_thread_vsync_callback_ = base::BindRepeating(
+        &DirectCompositionSurfaceWin::HandleVSyncOnMainThread,
+        weak_ptr_factory_.GetWeakPtr());
+  }
+
+  if ((SupportsGpuVSync() && vsync_callback_) || main_thread_vsync_callback_) {
+    vsync_thread_ = std::make_unique<gl::VSyncThreadWin>(
+        window_, d3d11_device_,
+        base::BindRepeating(
+            &DirectCompositionSurfaceWin::HandleVSyncOnVSyncThread,
+            base::Unretained(this)));
+  }
+
   return true;
 }
 
 void DirectCompositionSurfaceWin::Destroy() {
-  // Destroy vsync thread because joining it could call OnVSync.
+  // Destroy vsync thread because joining it could issue callbacks.
   vsync_thread_ = nullptr;
   // Destroy presentation helper first because its dtor calls GetHandle.
   presentation_helper_ = nullptr;
@@ -456,16 +471,30 @@
 gfx::SwapResult DirectCompositionSurfaceWin::SwapBuffers(
     PresentationCallback callback) {
   TRACE_EVENT0("gpu", "DirectCompositionSurfaceWin::SwapBuffers");
-  gl::GLSurfacePresentationHelper::ScopedSwapBuffers scoped_swap_buffers(
-      presentation_helper_.get(), std::move(callback));
 
-  gfx::SwapResult swap_result =
-      root_surface_->SwapBuffers(PresentationCallback());
+  base::Optional<gl::GLSurfacePresentationHelper::ScopedSwapBuffers>
+      scoped_swap_buffers;
+  if (!root_surface_->UseSwapChainFrameStatistics()) {
+    scoped_swap_buffers.emplace(presentation_helper_.get(),
+                                std::move(callback));
+    callback.Reset();
+  }
 
-  if (!layer_tree_->CommitAndClearPendingOverlays(root_surface_.get()))
+  gfx::SwapResult swap_result = root_surface_->SwapBuffers(std::move(callback));
+
+  if (swap_result == gfx::SwapResult::SWAP_ACK &&
+      layer_tree_->CommitAndClearPendingOverlays(root_surface_.get())) {
+    if (vsync_thread_) {
+      vsync_thread_->SetEnabled(root_surface_->HasPendingFrames() ||
+                                vsync_callback_enabled_);
+    }
+  } else {
     swap_result = gfx::SwapResult::SWAP_FAILED;
+  }
 
-  scoped_swap_buffers.set_result(swap_result);
+  if (scoped_swap_buffers)
+    scoped_swap_buffers->set_result(swap_result);
+
   return swap_result;
 }
 
@@ -539,7 +568,34 @@
 
 void DirectCompositionSurfaceWin::SetGpuVSyncEnabled(bool enabled) {
   DCHECK(vsync_thread_);
-  vsync_thread_->SetEnabled(enabled);
+  if (vsync_callback_enabled_ == enabled)
+    return;
+  vsync_callback_enabled_ = enabled;
+  vsync_thread_->SetEnabled(root_surface_->HasPendingFrames() ||
+                            vsync_callback_enabled_);
+}
+
+void DirectCompositionSurfaceWin::HandleVSyncOnVSyncThread(
+    base::TimeTicks vsync_time,
+    base::TimeDelta vsync_interval) {
+  if (vsync_callback_)
+    vsync_callback_.Run(vsync_time, vsync_interval);
+
+  if (main_thread_vsync_callback_) {
+    task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(main_thread_vsync_callback_, vsync_time,
+                                  vsync_interval));
+  }
+}
+
+void DirectCompositionSurfaceWin::HandleVSyncOnMainThread(
+    base::TimeTicks vsync_time,
+    base::TimeDelta vsync_interval) {
+  // Check pending frames in root surface in case client stops issuing swaps.
+  root_surface_->UpdateVSyncParameters(vsync_time, vsync_interval);
+  root_surface_->CheckPendingFrames();
+  vsync_thread_->SetEnabled(root_surface_->HasPendingFrames() ||
+                            vsync_callback_enabled_);
 }
 
 scoped_refptr<base::TaskRunner>
diff --git a/gpu/ipc/service/direct_composition_surface_win.h b/gpu/ipc/service/direct_composition_surface_win.h
index cf0be64a..50874327 100644
--- a/gpu/ipc/service/direct_composition_surface_win.h
+++ b/gpu/ipc/service/direct_composition_surface_win.h
@@ -133,19 +133,33 @@
   ~DirectCompositionSurfaceWin() override;
 
  private:
+  void HandleVSyncOnVSyncThread(base::TimeTicks vsync_time,
+                                base::TimeDelta vsync_interval);
+
+  void HandleVSyncOnMainThread(base::TimeTicks vsync_time,
+                               base::TimeDelta vsync_interval);
+
   HWND window_ = nullptr;
   ChildWindowWin child_window_;
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
-  std::unique_ptr<gl::VSyncThreadWin> vsync_thread_;
   scoped_refptr<DirectCompositionChildSurfaceWin> root_surface_;
   std::unique_ptr<DCLayerTree> layer_tree_;
+
+  std::unique_ptr<gl::VSyncThreadWin> vsync_thread_;
   std::unique_ptr<gfx::VSyncProvider> vsync_provider_;
+
   const VSyncCallback vsync_callback_;
+  bool vsync_callback_enabled_ = false;
+
   std::unique_ptr<gl::GLSurfacePresentationHelper> presentation_helper_;
 
   Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_;
   Microsoft::WRL::ComPtr<IDCompositionDevice2> dcomp_device_;
 
+  VSyncCallback main_thread_vsync_callback_;
+  base::WeakPtrFactory<DirectCompositionSurfaceWin> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(DirectCompositionSurfaceWin);
 };
 
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 37b2d21..20de0f1 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -4,6 +4,7 @@
 
 #include "headless/lib/headless_content_main_delegate.h"
 
+#include <cstdint>
 #include <memory>
 #include <utility>
 
@@ -178,7 +179,7 @@
   base::FilePath log_filename(FILE_PATH_LITERAL("chrome_debug.log"));
   if (command_line.GetSwitchValueASCII(::switches::kEnableLogging) ==
       "stderr") {
-    log_mode = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+    log_mode = logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   } else {
     base::FilePath custom_filename(
         command_line.GetSwitchValuePath(::switches::kEnableLogging));
diff --git a/infra/config/cr-buildbucket.cfg b/infra/config/cr-buildbucket.cfg
index c239b96..c810b90 100644
--- a/infra/config/cr-buildbucket.cfg
+++ b/infra/config/cr-buildbucket.cfg
@@ -2039,6 +2039,10 @@
       mixins: "win-gpu-fyi-ci"
     }
     builders {
+      name: "GPU FYI XR Win Builder"
+      mixins: "win-gpu-fyi-ci"
+    }
+    builders {
       name: "Win10 FYI Debug (NVIDIA)"
       mixins: "win-gpu-fyi-ci"
     }
diff --git a/infra/config/luci-milo.cfg b/infra/config/luci-milo.cfg
index f995fe4..595dd2e 100644
--- a/infra/config/luci-milo.cfg
+++ b/infra/config/luci-milo.cfg
@@ -2742,6 +2742,11 @@
     short_name: "x64"
   }
   builders {
+    name: "buildbucket/luci.chromium.ci/GPU FYI XR Win Builder"
+    category: "Windows|Builder|Release"
+    short_name: "xr"
+  }
+  builders {
     name: "buildbucket/luci.chromium.ci/Win10 FYI Debug (NVIDIA)"
     category: "Windows|10|Nvidia"
     short_name: "dbg"
diff --git a/infra/config/luci-scheduler.cfg b/infra/config/luci-scheduler.cfg
index fd659614..6b889ab11 100644
--- a/infra/config/luci-scheduler.cfg
+++ b/infra/config/luci-scheduler.cfg
@@ -164,6 +164,7 @@
   triggers: "GPU FYI Win x64 Builder (dbg)"
   triggers: "GPU FYI Win x64 Builder"
   triggers: "GPU FYI Win x64 dEQP Builder"
+  triggers: "GPU FYI XR Win Builder"
   triggers: "GPU Linux Builder (dbg)"
   triggers: "GPU Linux Builder"
   triggers: "GPU Mac Builder (dbg)"
@@ -2725,6 +2726,16 @@
 }
 
 job {
+  id: "GPU FYI XR Win Builder"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "GPU FYI XR Win Builder"
+  }
+}
+
+job {
   id: "Optional Win10 Release (Intel HD 630)"
   # Triggered by "GPU FYI Win Builder"
   acl_sets: "triggered-by-parent-builders"
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 47428dc..13eb66f 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -798,6 +798,15 @@
       <message name="IDS_IOS_INFOBAR_BADGES_PASSWORD_HINT" desc="The iOS infobar badge item for saving password credentials [Length:Unlimited]">
         Options to Save Password
       </message>
+      <message name="IDS_IOS_INFOBAR_MODAL_PASSWORD_SETTINGS_HINT" desc="Accessibility hint that indicates to the user that they can access the Password Settings. [Length:Unlimited]">
+        Access password settings
+      </message>
+      <message name="IDS_IOS_INFOBAR_MODAL_PASSWORD_REVEAL_PASSWORD_HINT" desc="Accessibility hint that indicates to the user that they can reveal the hidden/masked password. [Length:Unlimited]">
+        Reveal Password
+      </message>
+      <message name="IDS_IOS_INFOBAR_MODAL_PASSWORD_HIDE_PASSWORD_HINT" desc="Accessibility hint that indicates to the user that then can hide/mask the password. [Length:Unlimited]">
+        Hide Password
+      </message>
       <message name="IDS_IOS_INSPECT_UI_CONSOLE_NOTICE" desc="The message at the top of the debugging page which displays JavaScript console logs [iOS only].">
         Tap the "Start Logging" button to collect future JavaScript console logs and errors from all tabs. Logs will be collected (and stored only in memory) until this page is closed or "Stop Logging" is tapped.
       </message>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
index f9bf5ef..79697a9 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
@@ -5,6 +5,7 @@
 <translation id="1185134272377778587">O pregledniku Chromium</translation>
 <translation id="1289966288285062467">Obavijest o privatnosti za Chromium</translation>
 <translation id="1472013873724362412">Vaš račun ne funkcionira na Chromiumu. Obratite se administratoru domene ili se prijavite običnim Google računom.</translation>
+<translation id="1507010443238049608">Pomozite poboljšati Chromiumove značajke i izvedbu</translation>
 <translation id="1617663976202781617">Podaci sinkronizacije Chromiuma</translation>
 <translation id="1736662517232558588">Podaci Chromiuma izbrisani su</translation>
 <translation id="1838412507805038478">Chromium je potvrdio da je <ph name="ISSUER" /> izdao certifikat web-lokacije.</translation>
@@ -14,6 +15,7 @@
 <translation id="2168108852149185974">Neki programski dodaci uzrokuju rušenje Chromiuma. Deinstalirajte:</translation>
 <translation id="2178608107313874732">Chromium trenutačno ne može upotrebljavati vaš fotoaparat</translation>
 <translation id="2195025571279539885">Želite li da Chromium sljedeći put ponudi prijevod stranica s te web-lokacije za <ph name="LANGUAGE_NAME" />?</translation>
+<translation id="2590893390871230428">Sinkroniziraj podatke iz Chromiuma</translation>
 <translation id="2647554856022461007">Chromium može upotrebljavati web-usluge za poboljšanje vašeg doživljaja pregledavanja. Ako želite, možete onemogućiti te usluge. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="2730884209570016437">Chromium ne može upotrebljavati vaš fotoaparat jer ga upotrebljava neka druga aplikacija</translation>
 <translation id="2915596697727466327">Chromium upotrebljava Face ID radi sprječavanja neovlaštenog pristupa vašim zaporkama.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
index 817d828..cd5c86a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
@@ -1,7 +1,9 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
+<translation id="1282031177488366470">Pomozite poboljšati Chromeove značajke i izvedbu</translation>
 <translation id="1326317727527857210">Da bi se prikazale kartice s vaših ostalih uređaja, prijavite se na Chrome.</translation>
+<translation id="1682483655351012182">Sinkroniziraj podatke iz Chromea</translation>
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1816764564654397850">Obavijest o privatnosti za Google Chrome</translation>
 <translation id="1863312987075920112">Upotrebom ove aplikacije prihvaćate Chromeove <ph name="BEGIN_LINK_TOS" />uvjete pružanja usluge<ph name="END_LINK_TOS" /> i <ph name="BEGIN_LINK_PRIVACY" />obavijest o privatnosti<ph name="END_LINK_PRIVACY" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 0a1386a..20105af 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -404,7 +404,7 @@
 <translation id="7136892417564438900">La càmera no està disponible</translation>
 <translation id="7159472599653637159">Sol·licita lloc web per a mòbils</translation>
 <translation id="7167621057293532233">Tipus de dades</translation>
-<translation id="7173114856073700355">Obre la configuració</translation>
+<translation id="7173114856073700355">Obre Configuració</translation>
 <translation id="7189598951263744875">Comparteix...</translation>
 <translation id="7192050974311852563">Inicia el registre</translation>
 <translation id="7203585745079012652">Pronuncia les respostes</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index c6d139c..36d5ecaf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -15,6 +15,7 @@
 <translation id="1165039591588034296">Pogreška</translation>
 <translation id="1172898394251786223">Sljedeće polje</translation>
 <translation id="1176932207622159128">Nije moguće spremiti sliku</translation>
+<translation id="1180526666083833456">Sinkronizacija i prilagodba na svim uređajima.</translation>
 <translation id="1181037720776840403">Ukloni</translation>
 <translation id="1201530049782216880">Nova anonimna kartica</translation>
 <translation id="1209206284964581585">Sakrij za sad</translation>
@@ -37,6 +38,7 @@
 <translation id="1400642268715879018">Protekla 4 tjedna</translation>
 <translation id="1407135791313364759">Otvori sve</translation>
 <translation id="1430915738399379752">Ispis</translation>
+<translation id="1436290164580597469">Unesite šifru za pokretanje sinkronizacije.</translation>
 <translation id="145015347812617860">Broj stavki: <ph name="COUNT" /></translation>
 <translation id="1491277525950327607">Dodirnite dvaput da biste promijenili postavku</translation>
 <translation id="152234381334907219">Nikad spremljeno</translation>
@@ -105,8 +107,10 @@
 <translation id="2435457462613246316">Pokaži zaporku</translation>
 <translation id="2481538920734869610">DODAJ RAČUN</translation>
 <translation id="2497852260688568942">Administrator je onemogućio sinkronizaciju</translation>
+<translation id="2500374554657206846">Opcije za spremanje zaporki</translation>
 <translation id="2523363575747517183">Ova web-lokacija opetovano pokušava otvoriti neku drugu aplikaciju.</translation>
 <translation id="2529021024822217800">Otvori sve</translation>
+<translation id="2570206273416014374">Zadanoj tražilici šalje neke kolačiće i pretraživanja iz adresne trake i okvira za pretraživanje.</translation>
 <translation id="2572712655377361602">Pravila za uređaje blokirala su pristup fotografijama</translation>
 <translation id="2584132361465095047">Dodaj račun…</translation>
 <translation id="2625189173221582860">Zaporka je kopirana</translation>
@@ -178,6 +182,7 @@
 <translation id="3533202363250687977">Zatvori sve anonimne kartice</translation>
 <translation id="3533436815740441613">Nova kartica</translation>
 <translation id="3551320343578183772">Zatvori karticu</translation>
+<translation id="3581564640715911333">Ponudi prevođenje stranica na druge jezike</translation>
 <translation id="3588820906588687999">Otvori sliku u novoj kartici</translation>
 <translation id="3603009562372709545">Kopiraj URL veze</translation>
 <translation id="3607167657931203000">Podaci automatskog popunjavanja</translation>
@@ -185,6 +190,7 @@
 <translation id="3638472932233958418">Već učitane stranice</translation>
 <translation id="3691593122358196899">Oznaka dodana u mapu <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Anonimne kartice</translation>
+<translation id="3775743491439407556">Sinkronizacija ne funkcionira</translation>
 <translation id="3779810277399252432">Nema internetske veze.</translation>
 <translation id="3783017676699494206">Spremi sliku</translation>
 <translation id="3789841737615482174">Instaliraj</translation>
@@ -219,11 +225,13 @@
 <translation id="4272631900155121838">Da biste skenirali QR kod, omogućite fotoaparat u postavkama</translation>
 <translation id="4281844954008187215">Uvjeti upotrebe usluge</translation>
 <translation id="430793432425771671">Sinkroniziraj sve</translation>
+<translation id="4338650699862464074">Šalje Googleu URL-ove stranica koje posjećujete.</translation>
 <translation id="4359125752503270327">Stranica će se otvoriti u nekoj drugoj aplikaciji.</translation>
 <translation id="4370827530403103842">Sinkronizacija ne radi. Dodirnite za ispravak.</translation>
 <translation id="4375040482473363939">Pretraživanje QR kodova</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="441868831736628555">Obavijest o privatnosti</translation>
+<translation id="4454246407045105932">Dodaj jezik</translation>
 <translation id="4476574785019001431">Postavke</translation>
 <translation id="4496373720959965247">Dodajte kartice i prebacujte se između stranica</translation>
 <translation id="4508750114462689118">Zatvori promociju za prijavu</translation>
@@ -234,6 +242,7 @@
 <translation id="461440297010471931">Pretraživanje putem Googlea</translation>
 <translation id="4619615317237390068">Kartice s drugih uređaja</translation>
 <translation id="4620246317052452550">Stranice koje ste pročitali</translation>
+<translation id="4630540211544979320">Prijevod stranica</translation>
 <translation id="4636930964841734540">Informacije</translation>
 <translation id="4659667755519643272">Otvori prekidač za prebacivanje između kartica</translation>
 <translation id="4666531726415300315">Prijavljeni ste kao <ph name="EMAIL" />.
@@ -248,7 +257,9 @@
 
 Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation>
 <translation id="4807020197310989387">Jedan nepročitani članak na popisu za čitanje.</translation>
+<translation id="4818522717893377262">Dodaj jezik...</translation>
 <translation id="481968316161811770">Kolačići, podaci web-lokacije</translation>
+<translation id="4833786495304741580">Automatski šalje Googleu statistiku upotrebe i izvješća o padu programa.</translation>
 <translation id="4840495572919996524">Vaše oznake, povijest, zaporke i druge stavke više se neće sinkronizirati s vašim Google računom.</translation>
 <translation id="4854345657858711387">Postavite šifru zaporke</translation>
 <translation id="4860895144060829044">Poziv</translation>
@@ -289,6 +300,7 @@
 <translation id="5548760955356983418">Handoff vam omogućuje da počnete pregledavati web-lokaciju na ovom uređaju i nastavite na Macu. Trenutačno otvorena web-lokacija pojavit će se u Docku na vašem Macu.
 
 Handoff mora biti omogućen i u odjeljku Općenito u Postavkama, a vaši uređaji moraju upotrebljavati isti iCloud račun.</translation>
+<translation id="5551897871312988470">Ponudi prijevod</translation>
 <translation id="5556459405103347317">Ponovno učitaj</translation>
 <translation id="5614553682702429503">Želite li spremiti zaporku?</translation>
 <translation id="5626245204502895507">Datoteka se trenutačno ne može preuzeti.</translation>
@@ -336,6 +348,7 @@
 <translation id="6187302354554850004">Posljednja sinkr.: <ph name="LAST_USED_TIME" /></translation>
 <translation id="6189413832092199491">Nepročitano</translation>
 <translation id="6196207969502475924">Glasovno pretraživanje</translation>
+<translation id="6219688215832490856">Nikad ne prevodi</translation>
 <translation id="6254066287920239840">Otvaranje veza u aplikaciji, a ne u pregledniku.</translation>
 <translation id="6255097610484507482">Uredi kreditnu karticu</translation>
 <translation id="6303969859164067831">Odjava i isključivanje sinkronizacije</translation>
@@ -390,6 +403,7 @@
 <translation id="6945221475159498467">Odaberi</translation>
 <translation id="6973630695168034713">Mape</translation>
 <translation id="6979158407327259162">Google disk</translation>
+<translation id="6988572888918530647">Upravljajte svojim Google računom</translation>
 <translation id="7004499039102548441">Nedavne kartice</translation>
 <translation id="7006788746334555276">Postavke sadržaja</translation>
 <translation id="7015203776128479407">Početno postavljanje sinkronizacije nije dovršeno. Sinkronizacija je isključena.</translation>
@@ -460,6 +474,7 @@
 <translation id="8059533439631660104">Sažima odjeljak.</translation>
 <translation id="806745655614357130">Moje podatke čuvaj zasebno</translation>
 <translation id="8073670137947914548">Preuzimanje je dovršeno</translation>
+<translation id="8073872304774253879">Poboljšajte pretraživanje i pregledavanje</translation>
 <translation id="8076014560081431679">Spremljene postavke web-lokacije neće se izbrisati i mogu odražavati vaše navike prilikom pregledavanja. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation>
 <translation id="8131740175452115882">Potvrdi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index f4a2aa9..14cf2c19 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -295,7 +295,7 @@
 <translation id="5659593005791499971">E-mel</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versi <ph name="PRODUCT_VERSION" /></translation>
-<translation id="5711039611392265845">Untuk mendapatkan lebih banyak tetapan yang berkaitan dengan privasi, keselamatan dan pengumpulan data, lihat <ph name="BEGIN_LINK" />Penyegerakan dan Perkhidmatan Google<ph name="END_LINK" />.</translation>
+<translation id="5711039611392265845">Untuk mendapatkan pelbagai lagi tetapan yang berkaitan dengan privasi, keselamatan dan pengumpulan data, lihat <ph name="BEGIN_LINK" />Penyegerakan dan Perkhidmatan Google<ph name="END_LINK" />.</translation>
 <translation id="5728700505257787410">Maaf, terdapat masalah untuk log masuk ke akaun anda.</translation>
 <translation id="5737974891429562743">Butiran log masuk akaun sudah lapuk. Sila kemas kini untuk memulakan penyegerakan.</translation>
 <translation id="5738887413654608789">Langkah ini membolehkan anda menemui halaman web yang berkaitan berdasarkan persekitaran anda.</translation>
diff --git a/ios/chrome/browser/browsing_data/browsing_data_features.cc b/ios/chrome/browser/browsing_data/browsing_data_features.cc
index 4b585cc..991ec07 100644
--- a/ios/chrome/browser/browsing_data/browsing_data_features.cc
+++ b/ios/chrome/browser/browsing_data/browsing_data_features.cc
@@ -5,7 +5,7 @@
 #include "ios/chrome/browser/browsing_data/browsing_data_features.h"
 
 const base::Feature kNewClearBrowsingDataUI{"NewClearBrowsingDataUI",
-                                            base::FEATURE_DISABLED_BY_DEFAULT};
+                                            base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kWebClearBrowsingData{"WebClearBrowsingData",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ios_chrome_field_trials.cc b/ios/chrome/browser/ios_chrome_field_trials.cc
index 3ba4cd26..d2afe96 100644
--- a/ios/chrome/browser/ios_chrome_field_trials.cc
+++ b/ios/chrome/browser/ios_chrome_field_trials.cc
@@ -4,6 +4,18 @@
 
 #include "ios/chrome/browser/ios_chrome_field_trials.h"
 
+#include "base/path_service.h"
+#include "components/metrics/persistent_histograms.h"
+#include "ios/chrome/browser/chrome_paths.h"
+
+void IOSChromeFieldTrials::SetupFieldTrials() {
+  // Persistent histograms must be enabled as soon as possible.
+  base::FilePath user_data_dir;
+  if (base::PathService::Get(ios::DIR_USER_DATA, &user_data_dir)) {
+    InstantiatePersistentHistograms(user_data_dir);
+  }
+}
+
 void IOSChromeFieldTrials::SetupFeatureControllingFieldTrials(
     bool has_seed,
     base::FeatureList* feature_list) {
diff --git a/ios/chrome/browser/ios_chrome_field_trials.h b/ios/chrome/browser/ios_chrome_field_trials.h
index 68c2b05b..25c35fa 100644
--- a/ios/chrome/browser/ios_chrome_field_trials.h
+++ b/ios/chrome/browser/ios_chrome_field_trials.h
@@ -16,7 +16,7 @@
   ~IOSChromeFieldTrials() override {}
 
   // variations::PlatformFieldTrials:
-  void SetupFieldTrials() override {}
+  void SetupFieldTrials() override;
   void SetupFeatureControllingFieldTrials(
       bool has_seed,
       base::FeatureList* feature_list) override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
index 3c348d8..5af6fe2d 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
@@ -45,6 +45,14 @@
   // Updates the credentials being saved with |username| and |password|.
   void UpdateCredentials(NSString* username, NSString* password);
 
+  // Informs the delegate that the Infobar has been presented. If |automatic|
+  // YES the Infobar was presented automatically (e.g. The banner was
+  // presented), if NO the user triggered it  (e.g. Tapped on the badge).
+  void InfobarPresenting(bool automatic);
+
+  // Informs the delegate that the Infobar has been dismissed.
+  void InfobarDismissed();
+
   // true if password is being updated at the moment the InfobarModal is
   // created.
   bool IsPasswordUpdate() const;
@@ -72,6 +80,9 @@
   // change throughout the life of the delegate.
   const PasswordInfobarType infobar_type_;
 
+  // YES if an Infobar is being presented by this delegate.
+  bool infobar_presenting_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(IOSChromeSavePasswordInfoBarDelegate);
 };
 
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
index abc12d5..2af864f 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
@@ -24,6 +24,96 @@
 #error "This file requires ARC support."
 #endif
 
+namespace {
+
+// Records Presentation Metrics for the Infobar Delegate.
+// |current_password_saved| is true if the Infobar is on read-only mode after a
+// Save/Update action has occured.
+// |update_infobar| is YES if presenting an Update Infobar, NO if presenting a
+// Save Infobar.
+// |automatic| is YES the Infobar was presented automatically(e.g. The banner
+// was presented), NO if the user triggered it  (e.g. Tapped onthe badge).
+void RecordPresentationMetrics(
+    password_manager::PasswordFormManagerForUI* form_to_save,
+    bool current_password_saved,
+    bool update_infobar,
+    bool automatic) {
+  if (current_password_saved) {
+    // Password was already saved or updated.
+    form_to_save->GetMetricsRecorder()->RecordPasswordBubbleShown(
+        form_to_save->GetCredentialSource(),
+        password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS);
+    password_manager::metrics_util::LogUIDisplayDisposition(
+        password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS);
+    return;
+  }
+
+  if (update_infobar) {
+    // Update Password.
+    if (automatic) {
+      form_to_save->GetMetricsRecorder()->RecordPasswordBubbleShown(
+          form_to_save->GetCredentialSource(),
+          password_manager::metrics_util::
+              AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE);
+      password_manager::metrics_util::LogUIDisplayDisposition(
+          password_manager::metrics_util::
+              AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE);
+    } else {
+      form_to_save->GetMetricsRecorder()->RecordPasswordBubbleShown(
+          form_to_save->GetCredentialSource(),
+          password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE);
+      password_manager::metrics_util::LogUIDisplayDisposition(
+          password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE);
+    }
+  } else {
+    // Save Password.
+    if (automatic) {
+      form_to_save->GetMetricsRecorder()->RecordPasswordBubbleShown(
+          form_to_save->GetCredentialSource(),
+          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING);
+      password_manager::metrics_util::LogUIDisplayDisposition(
+          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING);
+    } else {
+      form_to_save->GetMetricsRecorder()->RecordPasswordBubbleShown(
+          form_to_save->GetCredentialSource(),
+          password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING);
+      password_manager::metrics_util::LogUIDisplayDisposition(
+          password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING);
+    }
+  }
+}
+
+// Records Dismissal Metrics for the Infobar Delegate.
+// |infobar_response| is the action that was taken in order to dismiss the
+// Infobar.
+// |update_infobar| is YES if presenting an Update Infobar, NO if presenting a
+// Save Infobar.
+void RecordDismissalMetrics(
+    password_manager::PasswordFormManagerForUI* form_to_save,
+    password_manager::metrics_util::UIDismissalReason infobar_response,
+    bool update_infobar) {
+  form_to_save->GetMetricsRecorder()->RecordUIDismissalReason(infobar_response);
+
+  if (update_infobar) {
+    password_manager::metrics_util::LogUpdateUIDismissalReason(
+        infobar_response);
+  } else {
+    password_manager::metrics_util::LogSaveUIDismissalReason(infobar_response);
+  }
+}
+
+bool IsUpdateInfobar(PasswordInfobarType infobar_type) {
+  switch (infobar_type) {
+    case PasswordInfobarType::kPasswordInfobarTypeUpdate: {
+      return YES;
+    }
+    case PasswordInfobarType::kPasswordInfobarTypeSave:
+      return NO;
+  }
+}
+
+}  // namespace
+
 using password_manager::PasswordFormManagerForUI;
 
 IOSChromeSavePasswordInfoBarDelegate::IOSChromeSavePasswordInfoBarDelegate(
@@ -36,33 +126,24 @@
       infobar_type_(password_update
                         ? PasswordInfobarType::kPasswordInfobarTypeUpdate
                         : PasswordInfobarType::kPasswordInfobarTypeSave) {
-  if (password_update) {
-    form_to_save()->GetMetricsRecorder()->RecordPasswordBubbleShown(
-        form_to_save()->GetCredentialSource(),
-        password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE);
-
-  } else {
-    form_to_save()->GetMetricsRecorder()->RecordPasswordBubbleShown(
-        form_to_save()->GetCredentialSource(),
-        password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING);
+  if (!IsInfobarUIRebootEnabled()) {
+    RecordPresentationMetrics(form_to_save(), false /*current_password_saved*/,
+                              false /*update_infobar*/, true /*automatic*/);
   }
 }
 
 IOSChromeSavePasswordInfoBarDelegate::~IOSChromeSavePasswordInfoBarDelegate() {
-  switch (infobar_type_) {
-    case PasswordInfobarType::kPasswordInfobarTypeUpdate: {
-      DCHECK(IsInfobarUIRebootEnabled());
-      password_manager::metrics_util::LogUpdateUIDismissalReason(
-          infobar_response());
-      break;
+  if (IsInfobarUIRebootEnabled()) {
+    // If by any reason this delegate gets dealloc before the Infobar is
+    // dismissed, record the dismissal metrics.
+    if (infobar_presenting_) {
+      RecordDismissalMetrics(form_to_save(), infobar_response(),
+                             IsUpdateInfobar(infobar_type_));
     }
-    case PasswordInfobarType::kPasswordInfobarTypeSave:
-      password_manager::metrics_util::LogSaveUIDismissalReason(
-          infobar_response());
-      break;
+  } else {
+    RecordDismissalMetrics(form_to_save(), infobar_response(),
+                           false /*update_infobar*/);
   }
-  form_to_save()->GetMetricsRecorder()->RecordUIDismissalReason(
-      infobar_response());
 }
 
 infobars::InfoBarDelegate::InfoBarIdentifier
@@ -141,6 +222,26 @@
                                         form_to_save());
 }
 
+void IOSChromeSavePasswordInfoBarDelegate::InfobarPresenting(bool automatic) {
+  DCHECK(IsInfobarUIRebootEnabled());
+  DCHECK(!infobar_presenting_);
+
+  RecordPresentationMetrics(form_to_save(), current_password_saved_,
+                            IsUpdateInfobar(infobar_type_), automatic);
+  infobar_presenting_ = YES;
+}
+
+void IOSChromeSavePasswordInfoBarDelegate::InfobarDismissed() {
+  DCHECK(IsInfobarUIRebootEnabled());
+  DCHECK(infobar_presenting_);
+
+  RecordDismissalMetrics(form_to_save(), infobar_response(),
+                         IsUpdateInfobar(infobar_type_));
+  // After the metrics have been recorded we can reset the response.
+  set_infobar_response(password_manager::metrics_util::NO_DIRECT_INTERACTION);
+  infobar_presenting_ = NO;
+}
+
 bool IOSChromeSavePasswordInfoBarDelegate::IsPasswordUpdate() const {
   DCHECK(IsInfobarUIRebootEnabled());
   return password_update_;
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
index 652ea3b..4058d7e0 100644
--- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn
+++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -46,6 +46,7 @@
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:feature_flags",
     "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/collection_view/cells",
@@ -116,6 +117,7 @@
     "resources:ntp_search_icon",
     "//base",
     "//components/strings",
+    "//ios/chrome/browser/signin:feature_flags",
     "//ios/chrome/browser/ui/collection_view",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/content_suggestions/cells:cells_ui",
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h
index d83dee71..4c32e46 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h
@@ -15,6 +15,9 @@
 // Returns the toolbar view.
 @property(nonatomic, readonly) UIView* toolBarView;
 
+// The Identity Disc showing the current user's avatar on NTP.
+@property(nonatomic, strong) UIView* identityDiscView;
+
 // Voice search button.
 @property(nonatomic, strong, readonly) UIButton* voiceSearchButton;
 
@@ -38,6 +41,13 @@
 // Can only be added once.
 - (void)addToolbarView:(UIView*)toolbarView;
 
+// Adjusts the autolayout constraints for |identityDiscView| when
+// UIViewController changes size. When an iPhone is rotated from portrait
+// (no top toolbar) to landscape (with top toolbar), the placement of Identity
+// Disc has to be shifted down below the top toolbar. Otherwise, the Identity
+// Disc may be obscured by the top toolbar in landscape mode.
+- (void)adjustIdentityDiscConstraints;
+
 // Returns the progress of the search field position along
 // |ntp_header::kAnimationDistance| as the offset changes.
 - (CGFloat)searchFieldProgressForOffset:(CGFloat)offset
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm
index 82f8403..dff74e6 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm
@@ -6,9 +6,12 @@
 
 #import <UIKit/UIKit.h>
 
+#include "base/feature_list.h"
 #include "base/logging.h"
 #include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/signin/feature_flags.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
+#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_header_constants.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_constants.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_container_view.h"
@@ -49,6 +52,12 @@
       [UIApplication sharedApplication].preferredContentSizeCategory);
 }
 
+// Returns the amount of vertical space to allow for the existence of a top
+// toolbar when iPhone is in landscape orientation.
+CGFloat IdentityDiscToolbarOffset() {
+  return IsCompactHeight() ? ToolbarHeight() : 0;
+}
+
 }  // namespace
 
 @interface ContentSuggestionsHeaderView ()
@@ -64,6 +73,9 @@
 @property(nonatomic, strong) NSLayoutConstraint* fakeToolbarTopConstraint;
 @property(nonatomic, strong) NSLayoutConstraint* hintLabelLeadingConstraint;
 @property(nonatomic, strong) NSLayoutConstraint* voiceSearchTrailingConstraint;
+// Layout constraints for Identity Disc that need to be adjusted based on
+// device size class changes.
+@property(nonatomic, strong) NSLayoutConstraint* identityDiscTopConstraint;
 
 @end
 
@@ -91,6 +103,38 @@
   ]];
 }
 
+- (void)setIdentityDiscView:(UIView*)identityDiscView {
+  DCHECK(identityDiscView);
+  _identityDiscView = identityDiscView;
+  [self addSubview:_identityDiscView];
+
+  // Sets the layout constraints for size of Identity Disc and the placement
+  // based on whether there is a top toolbar or not.
+  self.identityDiscView.translatesAutoresizingMaskIntoConstraints = NO;
+  id<LayoutGuideProvider> layoutGuide = self.safeAreaLayoutGuide;
+  self.identityDiscTopConstraint = [self.identityDiscView.topAnchor
+      constraintEqualToAnchor:layoutGuide.topAnchor
+                     constant:IdentityDiscToolbarOffset()];
+  CGFloat dimension =
+      ntp_home::kIdentityAvatarDimension + 2 * ntp_home::kIdentityAvatarMargin;
+  [NSLayoutConstraint activateConstraints:@[
+    [self.identityDiscView.heightAnchor constraintEqualToConstant:dimension],
+    [self.identityDiscView.widthAnchor constraintEqualToConstant:dimension],
+    [self.identityDiscView.trailingAnchor
+        constraintEqualToAnchor:layoutGuide.trailingAnchor],
+    self.identityDiscTopConstraint
+  ]];
+}
+
+- (void)adjustIdentityDiscConstraints {
+  // identityDiscView may not be set.
+  if (!self.identityDiscView)
+    return;
+
+  DCHECK(base::FeatureList::IsEnabled(kIdentityDisc));
+  self.identityDiscTopConstraint.constant = IdentityDiscToolbarOffset();
+}
+
 - (void)addViewsToSearchField:(UIView*)searchField {
   // Fake Toolbar.
   ToolbarButtonFactory* buttonFactory =
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
index 9f17523..6067f4e 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
@@ -4,12 +4,14 @@
 
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h"
 
+#include "base/feature_list.h"
 #include "base/ios/ios_util.h"
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/metrics/user_metrics.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
+#import "ios/chrome/browser/signin/feature_flags.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h"
@@ -18,6 +20,7 @@
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
+#import "ios/chrome/browser/ui/content_suggestions/user_account_image_update_delegate.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_controller_delegate.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_header_constants.h"
 #import "ios/chrome/browser/ui/toolbar/public/fakebox_focuser.h"
@@ -37,7 +40,8 @@
 
 using base::UserMetricsAction;
 
-@interface ContentSuggestionsHeaderViewController ()
+@interface ContentSuggestionsHeaderViewController () <
+    UserAccountImageUpdateDelegate>
 
 // If YES the animations of the fake omnibox triggered when the collection is
 // scrolled (expansion) are disabled. This is used for the fake omnibox focus
@@ -67,6 +71,7 @@
 @property(nonatomic, strong) ContentSuggestionsHeaderView* headerView;
 @property(nonatomic, strong) UIButton* fakeOmnibox;
 @property(nonatomic, strong) UIButton* accessibilityButton;
+@property(nonatomic, strong) UIButton* identityDiscButton;
 @property(nonatomic, strong) NSLayoutConstraint* doodleHeightConstraint;
 @property(nonatomic, strong) NSLayoutConstraint* doodleTopMarginConstraint;
 @property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxWidthConstraint;
@@ -223,6 +228,8 @@
     self.headerView =
         base::mac::ObjCCastStrict<ContentSuggestionsHeaderView>(self.view);
     [self addFakeTapView];
+    if (base::FeatureList::IsEnabled(kIdentityDisc))
+      [self addIdentityDisc];
     [self addFakeOmnibox];
 
     [self.headerView addSubview:self.logoVendor.view];
@@ -258,6 +265,20 @@
   return self.headerView;
 }
 
+#pragma mark - UIViewController
+
+- (void)viewWillTransitionToSize:(CGSize)size
+       withTransitionCoordinator:
+           (id<UIViewControllerTransitionCoordinator>)coordinator {
+  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
+  [coordinator
+      animateAlongsideTransition:^(
+          id<UIViewControllerTransitionCoordinatorContext> context) {
+        [self.headerView adjustIdentityDiscConstraints];
+      }
+                      completion:nil];
+}
+
 #pragma mark - Private
 
 // Initialize and add a search field tap target and a voice search button.
@@ -317,6 +338,22 @@
           forControlEvents:UIControlEventTouchUpInside];
 }
 
+- (void)addIdentityDisc {
+  // Set up a button. Details for the button will be set through delegate
+  // implementation of UserAccountImageUpdateDelegate.
+  self.identityDiscButton = [UIButton buttonWithType:UIButtonTypeCustom];
+  self.identityDiscButton.accessibilityLabel =
+      l10n_util::GetNSString(IDS_ACCNAME_PARTICLE_DISC);
+  self.identityDiscButton.imageEdgeInsets = UIEdgeInsetsMake(
+      ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin,
+      ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin);
+  // TODO(crbug.com/961120): Set action on button to launch into Settings.
+  [self.headerView setIdentityDiscView:self.identityDiscButton];
+
+  // Register to receive the avatar of the currently signed in user.
+  [self.delegate registerImageUpdater:self];
+}
+
 - (void)loadVoiceSearch:(id)sender {
   [self.commandHandler dismissModals];
 
@@ -542,4 +579,12 @@
   [self shiftTilesDown];
 }
 
+#pragma mark - UserAccountImageUpdateDelegate
+
+- (void)updateAccountImage:(UIImage*)image {
+  [self.identityDiscButton setImage:image forState:UIControlStateNormal];
+  self.identityDiscButton.imageView.layer.cornerRadius = image.size.width / 2;
+  self.identityDiscButton.imageView.layer.masksToBounds = YES;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h b/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h
index 8a9594f6..1fc427b7 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h
@@ -42,6 +42,11 @@
 // Height of the first suggestions peeking at the bottom of the screen.
 extern const CGFloat kSuggestionPeekingHeight;
 
+// Dimension of user's identity avatar as a square image.
+extern const CGFloat kIdentityAvatarDimension;
+// Margin around user's identity avatar.
+extern const CGFloat kIdentityAvatarMargin;
+
 // The background color of the NTP.
 UIColor* kNTPBackgroundColor();
 
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.mm
index c118ec5..17801a9 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_constant.mm
@@ -18,6 +18,9 @@
 const CGFloat kMostVisitedBottomMarginIPhone = 60;
 const CGFloat kSuggestionPeekingHeight = 60;
 
+const CGFloat kIdentityAvatarDimension = 32;
+const CGFloat kIdentityAvatarMargin = 16;
+
 UIColor* kNTPBackgroundColor() {
   return [UIColor colorWithWhite:0.98 alpha:1.0];
 }
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
index 5a56f8a7..c4765850d 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.mm
@@ -80,6 +80,14 @@
       base::SysUTF16ToNSString(self.confirmInfobarDelegate->GetMessageText());
 }
 
+- (void)infobarBannerWasPresented {
+  // NO-OP.
+}
+
+- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner {
+  // NO-OP.
+}
+
 - (void)dismissBannerWhenInteractionIsFinished {
   [self.bannerViewController dismissWhenInteractionIsFinished];
 }
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
index 2b27b879..2fbf2bf 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
@@ -98,6 +98,7 @@
                                       completion:^{
                                         weakSelf.presentingInfobarBanner = YES;
                                         weakSelf.bannerWasPresented = YES;
+                                        [weakSelf infobarBannerWasPresented];
                                         if (completion)
                                           completion();
                                       }];
@@ -112,6 +113,7 @@
     self.modalTransitionDriver.modalPositioner = self;
     [self presentInfobarModalFrom:self.baseViewController
                            driver:self.modalTransitionDriver];
+    [self infobarModalPresentedFromBanner:NO];
   };
 
   // Dismiss InfobarBanner first if being presented.
@@ -161,6 +163,7 @@
   self.modalTransitionDriver.modalPositioner = self;
   [self presentInfobarModalFrom:self.bannerViewController
                          driver:self.modalTransitionDriver];
+  [self infobarModalPresentedFromBanner:YES];
 }
 
 - (void)dismissInfobarBanner:(id)sender
@@ -279,6 +282,14 @@
   NOTREACHED() << "Subclass must implement.";
 }
 
+- (void)infobarBannerWasPresented {
+  NOTREACHED() << "Subclass must implement.";
+}
+
+- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner {
+  NOTREACHED() << "Subclass must implement.";
+}
+
 - (void)dismissBannerWhenInteractionIsFinished {
   NOTREACHED() << "Subclass must implement.";
 }
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h
index e452e43a..b4184ec 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h
@@ -16,6 +16,12 @@
 // the InfobarCoordinator.
 - (void)configureModalViewController;
 
+// Performs any actions related to an Infobar Banner presentation.
+- (void)infobarBannerWasPresented;
+
+// Performs any actions related to an Infobar Modal presentation.
+- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner;
+
 // Dismisses the InfobarBanner once there's no interaction in progress. An
 // interaction is any user initiated behavior with the Banner.
 - (void)dismissBannerWhenInteractionIsFinished;
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
index 9534fe3..1ec93e9 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_password_coordinator.mm
@@ -139,6 +139,19 @@
   [self recordModalPresentationMetricsUsingModalType:infobarModalType];
 }
 
+- (void)infobarBannerWasPresented {
+  self.passwordInfoBarDelegate->InfobarPresenting(YES /*automatic*/);
+}
+
+- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner {
+  // If the modal is being expanded from the banner we count that as the same
+  // presentation from infobarBannerWasPresented.
+  if (presentedFromBanner)
+    return;
+
+  self.passwordInfoBarDelegate->InfobarPresenting(NO /*automatic*/);
+}
+
 - (void)dismissBannerWhenInteractionIsFinished {
   [self.bannerViewController dismissWhenInteractionIsFinished];
 }
@@ -151,6 +164,10 @@
   // Release these strong ViewControllers at the time of infobar dismissal.
   self.bannerViewController = nil;
   self.modalViewController = nil;
+  // While navigating away the Infobar delegate might be niled before the banner
+  // has been dismissed. Check that the delegate still exists.
+  if (self.passwordInfoBarDelegate)
+    self.passwordInfoBarDelegate->InfobarDismissed();
 }
 
 - (CGFloat)infobarModalContentHeight {
diff --git a/ios/chrome/browser/ui/infobars/modals/infobar_password_table_view_controller.mm b/ios/chrome/browser/ui/infobars/modals/infobar_password_table_view_controller.mm
index ea02651..b5d6450 100644
--- a/ios/chrome/browser/ui/infobars/modals/infobar_password_table_view_controller.mm
+++ b/ios/chrome/browser/ui/infobars/modals/infobar_password_table_view_controller.mm
@@ -115,6 +115,8 @@
               style:UIBarButtonItemStylePlain
              target:self
              action:@selector(presentPasswordSettings)];
+  settingsButton.accessibilityLabel =
+      l10n_util::GetNSString(IDS_IOS_INFOBAR_MODAL_PASSWORD_SETTINGS_HINT);
   self.navigationItem.leftBarButtonItem = cancelButton;
   self.navigationItem.rightBarButtonItem = settingsButton;
   self.navigationController.navigationBar.prefersLargeTitles = NO;
@@ -174,6 +176,8 @@
   self.passwordItem.identifyingIcon =
       [UIImage imageNamed:@"infobar_reveal_password_icon"];
   self.passwordItem.identifyingIconEnabled = YES;
+  self.passwordItem.identifyingIconAccessibilityLabel = l10n_util::GetNSString(
+      IDS_IOS_INFOBAR_MODAL_PASSWORD_REVEAL_PASSWORD_HINT);
   [model addItem:self.passwordItem
       toSectionWithIdentifier:SectionIdentifierContent];
 
@@ -341,10 +345,16 @@
     self.passwordItem.identifyingIcon =
         [UIImage imageNamed:@"infobar_reveal_password_icon"];
     self.passwordItem.textFieldValue = self.maskedPassword;
+    self.passwordItem.identifyingIconAccessibilityLabel =
+        l10n_util::GetNSString(
+            IDS_IOS_INFOBAR_MODAL_PASSWORD_REVEAL_PASSWORD_HINT);
   } else {
     self.passwordItem.identifyingIcon =
         [UIImage imageNamed:@"infobar_hide_password_icon"];
     self.passwordItem.textFieldValue = self.unmaskedPassword;
+    self.passwordItem.identifyingIconAccessibilityLabel =
+        l10n_util::GetNSString(
+            IDS_IOS_INFOBAR_MODAL_PASSWORD_HIDE_PASSWORD_HINT);
   }
   [self reconfigureCellsForItems:@[ self.passwordItem ]];
 }
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h
index 60a358c..fa604cb3 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h
@@ -25,6 +25,9 @@
 // If YES the identifyingIcon will be enabled as a button. Disabled by default.
 @property(nonatomic, assign) BOOL identifyingIconEnabled;
 
+// If set the String will be used as the identifyingIcon button A11y label.
+@property(nonatomic, copy) NSString* identifyingIconAccessibilityLabel;
+
 // Whether to hide or display the trailing edit icon.
 @property(nonatomic, assign) BOOL hideEditIcon;
 
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.mm
index cf8e748..afe1105 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.mm
@@ -58,9 +58,6 @@
   }
 
   cell.textField.enabled = self.textFieldEnabled;
-  // If the TextField is enabled, the cell shouldn't be an A11y element in order
-  // to make its TextField accessible to voice over.
-  cell.isAccessibilityElement = !self.textFieldEnabled;
 
   if (self.hideEditIcon) {
     cell.textField.textColor =
@@ -78,8 +75,19 @@
   cell.textField.returnKeyType = self.returnKeyType;
   cell.textField.keyboardType = self.keyboardType;
   cell.textField.autocapitalizationType = self.autoCapitalizationType;
+
   [cell setIdentifyingIcon:self.identifyingIcon];
   cell.identifyingIconButton.enabled = self.identifyingIconEnabled;
+  if ([self.identifyingIconAccessibilityLabel length]) {
+    cell.identifyingIconButton.accessibilityLabel =
+        self.identifyingIconAccessibilityLabel;
+  }
+
+  // If the TextField or IconButton are enabled, the cell needs to make its
+  // inner TextField or button accessible to voice over. In order to achieve
+  // this the cell can't be an A11y element.
+  cell.isAccessibilityElement =
+      !(self.textFieldEnabled || self.identifyingIconEnabled);
 }
 
 #pragma mark Actions
diff --git a/ios/chrome/browser/ui/webui/password_manager_internals_ui_ios.mm b/ios/chrome/browser/ui/webui/password_manager_internals_ui_ios.mm
index 3458451..b78f9800 100644
--- a/ios/chrome/browser/ui/webui/password_manager_internals_ui_ios.mm
+++ b/ios/chrome/browser/ui/webui/password_manager_internals_ui_ios.mm
@@ -68,7 +68,7 @@
   base::Value text_string_value(net::EscapeForHTML(no_quotes));
 
   std::vector<const base::Value*> args{&text_string_value};
-  web_ui()->CallJavascriptFunction("addSavePasswordProgressLog", args);
+  web_ui()->CallJavascriptFunction("addLog", args);
 }
 
 void PasswordManagerInternalsUIIOS::PageLoaded(
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn
index 29101e4..4ed5920 100644
--- a/ios/chrome/test/earl_grey/BUILD.gn
+++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -344,6 +344,7 @@
     "//ios/chrome/browser/ui/bookmarks:bookmarks_ui",
     "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant",
     "//ios/chrome/browser/ui/content_suggestions:content_suggestions_ui",
+    "//ios/chrome/browser/ui/history:constants",
     "//ios/chrome/browser/ui/location_bar:location_bar",
     "//ios/chrome/browser/ui/omnibox:omnibox_internal",
     "//ios/chrome/browser/ui/payments:payments_ui",
@@ -383,6 +384,8 @@
     "chrome_earl_grey.h",
     "chrome_earl_grey.mm",
     "chrome_earl_grey_app_interface.h",
+    "chrome_earl_grey_ui.h",
+    "chrome_earl_grey_ui.mm",
     "chrome_egtest_bundle_main.h",
     "chrome_egtest_bundle_main.mm",
     "chrome_error_util.h",
@@ -395,7 +398,10 @@
     "//base",
     "//base/test:test_support",
     "//components/content_settings/core/common:common",
+    "//components/strings",
     "//components/sync/base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/popup_menu:constants",
     "//ios/testing:nserror_support",
     "//ios/testing/earl_grey:eg_test_support+eg2",
     "//ios/third_party/earl_grey2:test_lib",
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
index 9d68b4d..8829e08 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
@@ -4,24 +4,12 @@
 
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 
-#import <EarlGrey/EarlGrey.h>
-
 #import "base/test/ios/wait_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/ui/history/history_ui_constants.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
-#import "ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_ui_constants.h"
-#import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.h"
-#import "ios/chrome/browser/ui/settings/privacy_table_view_controller.h"
-#import "ios/chrome/browser/ui/settings/settings_table_view_controller.h"
-#import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h"
-#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
-#import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
-#import "ios/testing/nserror_util.h"
-#import "ios/web/public/test/earl_grey/js_test_util.h"
-#import "ios/web/public/test/earl_grey/web_view_matchers.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -44,6 +32,24 @@
   CGFloat const kMenuScrollDisplacement = 150;
   return grey_scrollInDirection(kGREYDirectionDown, kMenuScrollDisplacement);
 }
+
+bool IsAppCompactWidth() {
+#if defined(CHROME_EARL_GREY_1)
+  UIApplication* application = [UIApplication sharedApplication];
+  UIWindow* keyWindow = application.keyWindow;
+  UIUserInterfaceSizeClass sizeClass =
+      keyWindow.traitCollection.horizontalSizeClass;
+#elif defined(CHROME_EARL_GREY_2)
+  UIApplication* remoteApplication =
+      [GREY_REMOTE_CLASS_IN_APP(UIApplication) sharedApplication];
+  UIWindow* remoteKeyWindow = remoteApplication.keyWindow;
+  UIUserInterfaceSizeClass sizeClass =
+      remoteKeyWindow.traitCollection.horizontalSizeClass;
+#endif
+
+  return sizeClass == UIUserInterfaceSizeClassCompact;
+}
+
 }  // namespace
 
 @implementation ChromeEarlGreyUIImpl
@@ -55,8 +61,7 @@
       selectElementWithMatcher:grey_allOf(chrome_test_util::ToolsMenuButton(),
                                           grey_sufficientlyVisible(), nil)]
          usingSearchAction:grey_swipeSlowInDirection(kGREYDirectionDown)
-      onElementWithMatcher:web::WebViewScrollView(
-                               chrome_test_util::GetCurrentWebState())]
+      onElementWithMatcher:chrome_test_util::WebStateScrollViewMatcher()]
       performAction:grey_tap()];
   // TODO(crbug.com/639517): Add webViewScrollView matcher so we don't have
   // to always find it.
@@ -94,9 +99,8 @@
 
 - (void)openAndClearBrowsingDataFromHistory {
   // Open Clear Browsing Data Button
-  [[EarlGrey
-      selectElementWithMatcher:
-          grey_accessibilityID(kHistoryToolbarClearBrowsingButtonIdentifier)]
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::
+                                          HistoryClearBrowsingDataButton()]
       performAction:grey_tap()];
 
   // Uncheck "Cookies, Site Data" and "Cached Images and Files," which are
@@ -105,8 +109,8 @@
       performAction:grey_tap()];
   [[EarlGrey selectElementWithMatcher:chrome_test_util::ClearCacheButton()]
       performAction:grey_tap()];
-  [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
-                                          kClearBrowsingDataButtonIdentifier)]
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::ClearBrowsingDataButton()]
       performAction:grey_tap()];
   [[EarlGrey selectElementWithMatcher:chrome_test_util::
                                           ConfirmClearBrowsingDataButton()]
@@ -133,7 +137,7 @@
       assertWithMatcher:grey_notNil()];
 
   id<GREYMatcher> historyEntryMatcher =
-      grey_allOf(grey_kindOfClass([TableViewURLCell class]),
+      grey_allOf(grey_kindOfClassName(@"TableViewURLCell"),
                  grey_sufficientlyVisible(), nil);
   [[EarlGrey selectElementWithMatcher:historyEntryMatcher]
       assertWithMatcher:grey_nil()];
@@ -144,14 +148,14 @@
       grey_allOf(buttonMatcher, grey_interactable(), nil);
   [[[EarlGrey selectElementWithMatcher:interactableButtonMatcher]
          usingSearchAction:ScrollDown()
-      onElementWithMatcher:grey_accessibilityID(kPrivacyTableViewId)]
+      onElementWithMatcher:chrome_test_util::SettingsPrivacyTableView()]
       performAction:grey_tap()];
 }
 
 - (void)tapAccountsMenuButton:(id<GREYMatcher>)buttonMatcher {
   [[[EarlGrey selectElementWithMatcher:buttonMatcher]
          usingSearchAction:ScrollDown()
-      onElementWithMatcher:grey_accessibilityID(kSettingsAccountsTableViewId)]
+      onElementWithMatcher:chrome_test_util::SettingsAccountsCollectionView()]
       performAction:grey_tap()];
 }
 
@@ -190,7 +194,7 @@
 
 - (void)reload {
   // On iPhone Reload button is a part of tools menu, so open it.
-  if (IsCompactWidth()) {
+  if (IsAppCompactWidth()) {
     [self openToolsMenu];
   }
   [[EarlGrey selectElementWithMatcher:chrome_test_util::ReloadButton()]
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.h b/ios/chrome/test/earl_grey/chrome_matchers.h
index d68d0b1..7854b58 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers.h
+++ b/ios/chrome/test/earl_grey/chrome_matchers.h
@@ -188,6 +188,9 @@
 // Returns matcher for the Keep Data Separate cell in switch sync account view.
 id<GREYMatcher> SettingsImportDataContinueButton();
 
+// Returns matcher for the privacy settings table view.
+id<GREYMatcher> SettingsPrivacyTableView();
+
 // Returns matcher for the Manage Synced Data button in sync setting view.
 id<GREYMatcher> SettingsSyncManageSyncedDataButton();
 
@@ -272,6 +275,11 @@
 // Returns a matcher for the current WebView.
 id<GREYMatcher> WebViewMatcher();
 
+// Returns a matcher for the current WebState's scroll view.
+id<GREYMatcher> WebStateScrollViewMatcher();
+
+// Returns a matcher for the Clear Browsing Data button in the History UI.
+id<GREYMatcher> HistoryClearBrowsingDataButton();
 }
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_MATCHERS_H_
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.mm b/ios/chrome/test/earl_grey/chrome_matchers.mm
index 5020318..a07b9097 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers.mm
+++ b/ios/chrome/test/earl_grey/chrome_matchers.mm
@@ -237,6 +237,10 @@
   return [ChromeMatchersAppInterface settingsImportDataContinueButton];
 }
 
+id<GREYMatcher> SettingsPrivacyTableView() {
+  return [ChromeMatchersAppInterface settingsPrivacyTableView];
+}
+
 id<GREYMatcher> SettingsSyncManageSyncedDataButton() {
   return [ChromeMatchersAppInterface settingsSyncManageSyncedDataButton];
 }
@@ -345,4 +349,12 @@
   return [ChromeMatchersAppInterface webViewMatcher];
 }
 
+id<GREYMatcher> WebStateScrollViewMatcher() {
+  return [ChromeMatchersAppInterface webStateScrollViewMatcher];
+}
+
+id<GREYMatcher> HistoryClearBrowsingDataButton() {
+  return [ChromeMatchersAppInterface historyClearBrowsingDataButton];
+}
+
 }  // namespace chrome_test_util
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
index 92800073..08ef23d 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
+++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
@@ -190,6 +190,9 @@
 // view.
 + (id<GREYMatcher>)settingsImportDataContinueButton;
 
+// Returns matcher for the privacy table view.
++ (id<GREYMatcher>)settingsPrivacyTableView;
+
 // Returns matcher for the Manage Synced Data button in sync setting view.
 + (id<GREYMatcher>)settingsSyncManageSyncedDataButton;
 
@@ -274,6 +277,12 @@
 // Returns a matcher for the current WebView.
 + (id<GREYMatcher>)webViewMatcher;
 
+// Returns a matcher for the current WebState's scroll view.
++ (id<GREYMatcher>)webStateScrollViewMatcher;
+
+// Returns a matcher for the Clear Browsing Data button in the History UI.
++ (id<GREYMatcher>)historyClearBrowsingDataButton;
+
 @end
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_MATCHERS_APP_INTERFACE_H_
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
index ed72e089..5cf17bd 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
+++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
@@ -12,6 +12,7 @@
 #import "ios/chrome/browser/ui/bookmarks/bookmark_ui_constants.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
+#import "ios/chrome/browser/ui/history/history_ui_constants.h"
 #import "ios/chrome/browser/ui/location_bar/location_bar_steady_view.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.h"
 #import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
@@ -27,6 +28,7 @@
 #import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.h"
 #import "ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.h"
 #import "ios/chrome/browser/ui/settings/import_data_table_view_controller.h"
+#import "ios/chrome/browser/ui/settings/privacy_table_view_controller.h"
 #import "ios/chrome/browser/ui/settings/settings_table_view_controller.h"
 #import "ios/chrome/browser/ui/settings/sync/sync_settings_table_view_controller.h"
 #import "ios/chrome/browser/ui/static_content/static_html_view_controller.h"
@@ -430,6 +432,10 @@
   return grey_accessibilityID(kImportDataContinueButtonId);
 }
 
++ (id<GREYMatcher>)settingsPrivacyTableView {
+  return grey_accessibilityID(kPrivacyTableViewId);
+}
+
 + (id<GREYMatcher>)settingsSyncManageSyncedDataButton {
   return grey_accessibilityID(kSettingsSyncId);
 }
@@ -568,4 +574,12 @@
   return web::WebViewInWebState(chrome_test_util::GetCurrentWebState());
 }
 
++ (id<GREYMatcher>)webStateScrollViewMatcher {
+  return web::WebViewScrollView(chrome_test_util::GetCurrentWebState());
+}
+
++ (id<GREYMatcher>)historyClearBrowsingDataButton {
+  return grey_accessibilityID(kHistoryToolbarClearBrowsingButtonIdentifier);
+}
+
 @end
diff --git a/ios/chrome/test/earl_grey2/smoke_egtest.mm b/ios/chrome/test/earl_grey2/smoke_egtest.mm
index d0f2abfb..204df80 100644
--- a/ios/chrome/test/earl_grey2/smoke_egtest.mm
+++ b/ios/chrome/test/earl_grey2/smoke_egtest.mm
@@ -8,6 +8,7 @@
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_error_util.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey2/chrome_earl_grey_edo.h"
@@ -102,4 +103,9 @@
       performAction:grey_tap()];
 }
 
+// Tests that helpers in chrome_earl_grey_ui.h are available for use in tests.
+- (void)testReload {
+  [ChromeEarlGreyUI reload];
+}
+
 @end
diff --git a/ios/testing/earl_grey/BUILD.gn b/ios/testing/earl_grey/BUILD.gn
index e3d7ade..7a5367b 100644
--- a/ios/testing/earl_grey/BUILD.gn
+++ b/ios/testing/earl_grey/BUILD.gn
@@ -25,6 +25,7 @@
     "earl_grey_app.h",
     "earl_grey_app.mm",
     "earl_grey_test.h",
+    "earl_grey_test.mm",
     "matchers.h",
     "matchers.mm",
   ]
@@ -66,11 +67,13 @@
     "coverage_utils_stub.mm",
     "disabled_test_macros.h",
     "earl_grey_test.h",
+    "earl_grey_test.mm",
     "matchers.h",
     "matchers.mm",
   ]
 
   deps = [
+    "//base",
     "//ios/third_party/earl_grey2:test_lib",
     "//testing/gtest:gtest",
   ]
diff --git a/ios/testing/earl_grey/earl_grey_test.h b/ios/testing/earl_grey/earl_grey_test.h
index 5255743c..c9db3d8 100644
--- a/ios/testing/earl_grey/earl_grey_test.h
+++ b/ios/testing/earl_grey/earl_grey_test.h
@@ -15,6 +15,8 @@
 typedef DescribeToBlock GREYDescribeToBlock;
 typedef MatchesBlock GREYMatchesBlock;
 
+id<GREYMatcher> grey_kindOfClassName(NSString* name);
+
 #elif defined(CHROME_EARL_GREY_2)
 
 #import "ios/third_party/earl_grey2/src/TestLib/EarlGreyImpl/EarlGrey.h"  // nogncheck
diff --git a/ios/testing/earl_grey/earl_grey_test.mm b/ios/testing/earl_grey/earl_grey_test.mm
new file mode 100644
index 0000000..cd7432d
--- /dev/null
+++ b/ios/testing/earl_grey/earl_grey_test.mm
@@ -0,0 +1,21 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/testing/earl_grey/earl_grey_test.h"
+
+#include "base/logging.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+#if defined(CHROME_EARL_GREY_1)
+
+id<GREYMatcher> grey_kindOfClassName(NSString* name) {
+  Class klass = NSClassFromString(name);
+  DCHECK(klass);
+  return grey_kindOfClass(klass);
+}
+
+#endif
diff --git a/ios/web/BUILD.gn b/ios/web/BUILD.gn
index 8e41d817..c6b9b11 100644
--- a/ios/web/BUILD.gn
+++ b/ios/web/BUILD.gn
@@ -205,6 +205,7 @@
     "//ios/web/download:download_unittests",
     "//ios/web/find_in_page:find_in_page_unittests",
     "//ios/web/interstitials:interstitials_unittests",
+    "//ios/web/security:unittests",
     "//ios/web/web_view:unittests",
   ]
 
@@ -322,11 +323,11 @@
     "//ios/web/public",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
+    "//ios/web/security",
     "//ios/web/test:mojo_bindings",
     "//ios/web/test:test_constants",
     "//ios/web/test:test_support",
     "//ios/web/test/fakes",
-    "//ios/web/web_state:wk_web_view_security_util",
     "//net:test_support",
     "//services/service_manager/public/cpp",
     "//testing/gmock",
@@ -418,6 +419,7 @@
     "//ios/web/public",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
+    "//ios/web/security",
     "//ios/web/test:mojo_bindings",
     "//ios/web/test:test_constants",
     "//ios/web/test:test_support",
@@ -428,7 +430,6 @@
     "//ios/web/web_state:session_certificate_policy_cache",
     "//ios/web/web_state:web_frame",
     "//ios/web/web_state:web_view_internal_creation_util",
-    "//ios/web/web_state:wk_web_view_security_util",
     "//net:test_support",
     "//services/service_manager/public/cpp",
     "//testing/gmock",
@@ -454,7 +455,6 @@
     "web_state/web_state_policy_decider_bridge_unittest.mm",
     "web_state/web_state_unittest.mm",
     "web_state/web_view_internal_creation_util_unittest.mm",
-    "web_state/wk_web_view_security_util_unittest.mm",
   ]
 }
 
@@ -517,12 +517,12 @@
     "//ios/web/public",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
+    "//ios/web/security",
     "//ios/web/test:mojo_bindings",
     "//ios/web/test:test_constants",
     "//ios/web/test:test_support",
     "//ios/web/test/fakes:fakes",
     "//ios/web/web_state:context_menu",
-    "//ios/web/web_state:wk_web_view_security_util",
     "//ios/web/web_state/js",
     "//ios/web/web_state/js:script_util",
     "//ios/web/web_state/ui:crw_context_menu_controller",
diff --git a/ios/web/net/BUILD.gn b/ios/web/net/BUILD.gn
index cce1d23..ac53edf 100644
--- a/ios/web/net/BUILD.gn
+++ b/ios/web/net/BUILD.gn
@@ -14,7 +14,7 @@
     "//ios/web/navigation:navigation_manager_util",
     "//ios/web/navigation:wk_navigation_util",
     "//ios/web/public",
-    "//ios/web/web_state:wk_web_view_security_util",
+    "//ios/web/security",
     "//net",
   ]
 
diff --git a/ios/web/net/crw_cert_verification_controller.mm b/ios/web/net/crw_cert_verification_controller.mm
index cbe6d320..5294d400 100644
--- a/ios/web/net/crw_cert_verification_controller.mm
+++ b/ios/web/net/crw_cert_verification_controller.mm
@@ -16,7 +16,7 @@
 #include "ios/web/public/certificate_policy_cache.h"
 #include "ios/web/public/web_task_traits.h"
 #include "ios/web/public/web_thread.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #include "net/cert/cert_verify_proc_ios.h"
 #include "net/cert/x509_util.h"
 #include "net/cert/x509_util_ios.h"
diff --git a/ios/web/net/crw_cert_verification_controller_unittest.mm b/ios/web/net/crw_cert_verification_controller_unittest.mm
index 15c9704..60f60536 100644
--- a/ios/web/net/crw_cert_verification_controller_unittest.mm
+++ b/ios/web/net/crw_cert_verification_controller_unittest.mm
@@ -8,7 +8,7 @@
 #import "base/test/ios/wait_util.h"
 #include "ios/web/public/test/web_test.h"
 #include "ios/web/public/web_thread.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #include "net/cert/x509_certificate.h"
 #include "net/cert/x509_util.h"
 #include "net/cert/x509_util_ios_and_mac.h"
diff --git a/ios/web/net/crw_ssl_status_updater.mm b/ios/web/net/crw_ssl_status_updater.mm
index 0bad5467..c9da727 100644
--- a/ios/web/net/crw_ssl_status_updater.mm
+++ b/ios/web/net/crw_ssl_status_updater.mm
@@ -9,7 +9,7 @@
 #import "ios/web/navigation/navigation_manager_impl.h"
 #include "ios/web/navigation/navigation_manager_util.h"
 #include "ios/web/public/ssl_status.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #include "net/cert/x509_certificate.h"
 #include "url/gurl.h"
 
diff --git a/ios/web/net/crw_ssl_status_updater_unittest.mm b/ios/web/net/crw_ssl_status_updater_unittest.mm
index f68a2f7..b73def4e8 100644
--- a/ios/web/net/crw_ssl_status_updater_unittest.mm
+++ b/ios/web/net/crw_ssl_status_updater_unittest.mm
@@ -14,8 +14,8 @@
 #import "ios/web/public/navigation_item.h"
 #include "ios/web/public/ssl_status.h"
 #include "ios/web/public/test/web_test.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #import "ios/web/test/fakes/fake_navigation_manager_delegate.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
 #include "net/cert/x509_util_ios_and_mac.h"
 #include "net/test/cert_test_util.h"
 #include "net/test/test_data_directory.h"
diff --git a/ios/web/security/BUILD.gn b/ios/web/security/BUILD.gn
new file mode 100644
index 0000000..c0e4333
--- /dev/null
+++ b/ios/web/security/BUILD.gn
@@ -0,0 +1,38 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//ios/build/config.gni")
+
+source_set("security") {
+  sources = [
+    "wk_web_view_security_util.h",
+    "wk_web_view_security_util.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//ios/web/public",
+    "//net",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("unittests") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  deps = [
+    ":security",
+    "//base",
+    "//base/test:test_support",
+    "//crypto",
+    "//ios/web/public",
+    "//net",
+    "//testing/gtest",
+  ]
+
+  sources = [
+    "wk_web_view_security_util_unittest.mm",
+  ]
+}
diff --git a/ios/web/web_state/wk_web_view_security_util.h b/ios/web/security/wk_web_view_security_util.h
similarity index 92%
rename from ios/web/web_state/wk_web_view_security_util.h
rename to ios/web/security/wk_web_view_security_util.h
index 1755608..b60977c 100644
--- a/ios/web/web_state/wk_web_view_security_util.h
+++ b/ios/web/security/wk_web_view_security_util.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_WEB_WEB_STATE_WK_WEB_VIEW_SECURITY_UTIL_H_
-#define IOS_WEB_WEB_STATE_WK_WEB_VIEW_SECURITY_UTIL_H_
+#ifndef IOS_WEB_SECURITY_WK_WEB_VIEW_SECURITY_UTIL_H_
+#define IOS_WEB_SECURITY_WK_WEB_VIEW_SECURITY_UTIL_H_
 
 #import <Foundation/Foundation.h>
 #include <Security/Security.h>
@@ -58,4 +58,4 @@
 
 }  // namespace web
 
-#endif // IOS_WEB_WEB_STATE_WK_WEB_VIEW_SECURITY_UTIL_H_
+#endif  // IOS_WEB_SECURITY_WK_WEB_VIEW_SECURITY_UTIL_H_
diff --git a/ios/web/web_state/wk_web_view_security_util.mm b/ios/web/security/wk_web_view_security_util.mm
similarity index 98%
rename from ios/web/web_state/wk_web_view_security_util.mm
rename to ios/web/security/wk_web_view_security_util.mm
index c4d1057..0a78a25 100644
--- a/ios/web/web_state/wk_web_view_security_util.mm
+++ b/ios/web/security/wk_web_view_security_util.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/web/web_state/wk_web_view_security_util.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 
 #include "base/mac/scoped_cftyperef.h"
 #include "base/strings/sys_string_conversions.h"
@@ -46,7 +46,6 @@
 
 }  // namespace
 
-
 namespace web {
 
 scoped_refptr<net::X509Certificate> CreateCertFromChain(NSArray* certs) {
diff --git a/ios/web/web_state/wk_web_view_security_util_unittest.mm b/ios/web/security/wk_web_view_security_util_unittest.mm
similarity index 99%
rename from ios/web/web_state/wk_web_view_security_util_unittest.mm
rename to ios/web/security/wk_web_view_security_util_unittest.mm
index d9ca55a..14345671 100644
--- a/ios/web/web_state/wk_web_view_security_util_unittest.mm
+++ b/ios/web/security/wk_web_view_security_util_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/web/web_state/wk_web_view_security_util.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 
 #import <Foundation/Foundation.h>
 #include <Security/Security.h>
diff --git a/ios/web/web_state/BUILD.gn b/ios/web/web_state/BUILD.gn
index e8bdc5b..798f7a0e 100644
--- a/ios/web/web_state/BUILD.gn
+++ b/ios/web/web_state/BUILD.gn
@@ -9,7 +9,6 @@
     ":context_menu",
     ":session_certificate_policy_cache",
     ":web_state_impl_header",
-    ":wk_web_view_security_util",
     "//base",
     "//ios/web/common",
     "//ios/web/interstitials",
@@ -17,6 +16,7 @@
     "//ios/web/navigation:core",
     "//ios/web/navigation:wk_navigation_util",
     "//ios/web/public",
+    "//ios/web/security",
     "//ios/web/web_state/ui",
     "//ios/web/web_state/ui:crw_web_view_navigation_proxy",
     "//ios/web/webui",
@@ -42,20 +42,6 @@
   configs += [ "//build/config/compiler:enable_arc" ]
 }
 
-source_set("wk_web_view_security_util") {
-  deps = [
-    "//base",
-    "//ios/web/public",
-  ]
-
-  sources = [
-    "wk_web_view_security_util.h",
-    "wk_web_view_security_util.mm",
-  ]
-
-  configs += [ "//build/config/compiler:enable_arc" ]
-}
-
 source_set("web_state_impl_header") {
   deps = [
     "//base",
diff --git a/ios/web/web_state/ui/BUILD.gn b/ios/web/web_state/ui/BUILD.gn
index aecf877..07508d8 100644
--- a/ios/web/web_state/ui/BUILD.gn
+++ b/ios/web/web_state/ui/BUILD.gn
@@ -25,6 +25,7 @@
     "//ios/web/net:net",
     "//ios/web/public",
     "//ios/web/public/download",
+    "//ios/web/security",
     "//ios/web/web_state:context_menu",
     "//ios/web/web_state:error_translation_util",
     "//ios/web/web_state:page_viewport_state",
@@ -33,7 +34,6 @@
     "//ios/web/web_state:web_frame",
     "//ios/web/web_state:web_state_impl_header",
     "//ios/web/web_state:web_view_internal_creation_util",
-    "//ios/web/web_state:wk_web_view_security_util",
     "//ios/web/web_state/js",
     "//ios/web/web_state/ui:wk_web_view_configuration_provider",
     "//ios/web/web_view",
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 85c7f3e..a50ebde2 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -90,6 +90,7 @@
 #include "ios/web/public/web_state/web_state_interface_provider.h"
 #import "ios/web/public/web_state/web_state_policy_decider.h"
 #include "ios/web/public/webui/web_ui_ios.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #import "ios/web/web_state/error_translation_util.h"
 #import "ios/web/web_state/page_viewport_state.h"
 #import "ios/web/web_state/session_certificate_policy_cache_impl.h"
@@ -110,7 +111,6 @@
 #import "ios/web/web_state/web_frames_manager_impl.h"
 #import "ios/web/web_state/web_state_impl.h"
 #import "ios/web/web_state/web_view_internal_creation_util.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
 #import "ios/web/web_view/wk_web_view_util.h"
 #import "ios/web/webui/mojo_facade.h"
 #import "net/base/mac/url_conversions.h"
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm
index 93ece91..ed39638 100644
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -43,6 +43,7 @@
 #import "ios/web/public/web_state/ui/crw_native_content_provider.h"
 #include "ios/web/public/web_state/url_verification_constants.h"
 #include "ios/web/public/web_state/web_state_observer.h"
+#import "ios/web/security/wk_web_view_security_util.h"
 #import "ios/web/test/fakes/crw_fake_back_forward_list.h"
 #import "ios/web/test/fakes/crw_fake_wk_frame_info.h"
 #import "ios/web/test/fakes/crw_fake_wk_navigation_action.h"
@@ -55,7 +56,6 @@
 #import "ios/web/web_state/ui/crw_web_controller_container_view.h"
 #import "ios/web/web_state/ui/web_view_js_utils.h"
 #import "ios/web/web_state/web_state_impl.h"
-#import "ios/web/web_state/wk_web_view_security_util.h"
 #import "net/base/mac/url_conversions.h"
 #include "net/cert/x509_util_ios_and_mac.h"
 #include "net/ssl/ssl_info.h"
diff --git a/media/BUILD.gn b/media/BUILD.gn
index f9ae1d9..125c6d6 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -149,6 +149,7 @@
     "//media/learning:unit_tests",
     "//media/mojo:unit_tests",
     "//media/muxers:unit_tests",
+    "//media/parsers:unit_tests",
     "//media/renderers:unit_tests",
     "//media/test:pipeline_integration_tests",
     "//media/test:run_all_unittests",
@@ -314,18 +315,6 @@
   }
 }
 
-fuzzer_test("media_jpeg_parser_picture_fuzzer") {
-  sources = [
-    "filters/jpeg_parser_picture_fuzzertest.cc",
-  ]
-  deps = [
-    ":test_support",
-    "//base",
-  ]
-  seed_corpus = "test/data"
-  dict = "test/jpeg.dict"
-}
-
 fuzzer_test("media_vp8_parser_fuzzer") {
   sources = [
     "filters/vp8_parser_fuzzertest.cc",
diff --git a/media/audio/audio_features.cc b/media/audio/audio_features.cc
index cfb0b53..e5fdc299 100644
--- a/media/audio/audio_features.cc
+++ b/media/audio/audio_features.cc
@@ -6,6 +6,11 @@
 
 namespace features {
 
+// When the audio service in a separate process, kill it when a hang is
+// detected. It will be restarted when needed.
+const base::Feature kAudioServiceOutOfProcessKillAtHang{
+    "AudioServiceOutOfProcessKillAtHang", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // If enabled, base::DumpWithoutCrashing is called whenever an audio service
 // hang is detected.
 const base::Feature kDumpOnAudioServiceHang{"DumpOnAudioServiceHang",
diff --git a/media/audio/audio_features.h b/media/audio/audio_features.h
index abf4c66..70e228d 100644
--- a/media/audio/audio_features.h
+++ b/media/audio/audio_features.h
@@ -11,6 +11,7 @@
 
 namespace features {
 
+MEDIA_EXPORT extern const base::Feature kAudioServiceOutOfProcessKillAtHang;
 MEDIA_EXPORT extern const base::Feature kDumpOnAudioServiceHang;
 
 #if defined(OS_CHROMEOS)
diff --git a/media/audio/audio_thread_hang_monitor.cc b/media/audio/audio_thread_hang_monitor.cc
index 7e94838..727e198 100644
--- a/media/audio/audio_thread_hang_monitor.cc
+++ b/media/audio/audio_thread_hang_monitor.cc
@@ -8,10 +8,12 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/callback.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/power_monitor/power_monitor.h"
+#include "base/process/process.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
@@ -28,7 +30,9 @@
 // caught (e.g., the system suspends before a OnSuspend() event can be fired).
 constexpr int kMaxFailedPingsCount = 3;
 
-constexpr base::TimeDelta kHungDeadline = base::TimeDelta::FromMinutes(1);
+// The default deadline after which we consider the audio thread hung.
+constexpr base::TimeDelta kDefaultHangDeadline =
+    base::TimeDelta::FromMinutes(3);
 
 }  // namespace
 
@@ -37,7 +41,8 @@
 
 // static
 AudioThreadHangMonitor::Ptr AudioThreadHangMonitor::Create(
-    bool dump_on_hang,
+    HangAction hang_action,
+    base::Optional<base::TimeDelta> hang_deadline,
     const base::TickClock* clock,
     scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner,
     scoped_refptr<base::SequencedTaskRunner> monitor_task_runner) {
@@ -45,7 +50,7 @@
     monitor_task_runner = base::CreateSequencedTaskRunnerWithTraits({});
 
   auto monitor =
-      Ptr(new AudioThreadHangMonitor(dump_on_hang, clock,
+      Ptr(new AudioThreadHangMonitor(hang_action, hang_deadline, clock,
                                      std::move(audio_thread_task_runner)),
           base::OnTaskRunnerDeleter(monitor_task_runner));
 
@@ -65,13 +70,19 @@
 }
 
 AudioThreadHangMonitor::AudioThreadHangMonitor(
-    bool dump_on_hang,
+    HangAction hang_action,
+    base::Optional<base::TimeDelta> hang_deadline,
     const base::TickClock* clock,
     scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner)
     : clock_(clock),
       alive_flag_(base::MakeRefCounted<SharedAtomicFlag>()),
       audio_task_runner_(std::move(audio_thread_task_runner)),
-      dump_on_hang_(dump_on_hang),
+      hang_action_(hang_action),
+      ping_interval_((hang_deadline ? hang_deadline.value().is_zero()
+                                          ? kDefaultHangDeadline
+                                          : hang_deadline.value()
+                                    : kDefaultHangDeadline) /
+                     kMaxFailedPingsCount),
       timer_(clock_) {
   DETACH_FROM_SEQUENCE(monitor_sequence_);
 }
@@ -88,7 +99,7 @@
 
   // |this| owns |timer_|, so Unretained is safe.
   timer_.Start(
-      FROM_HERE, kHungDeadline,
+      FROM_HERE, ping_interval_,
       base::BindRepeating(&AudioThreadHangMonitor::CheckIfAudioThreadIsAlive,
                           base::Unretained(this)));
 }
@@ -112,7 +123,7 @@
   // An unexpected |time_since_last_check| may indicate that the system has been
   // in sleep mode, in which case the audio thread may have had insufficient
   // time to respond to the ping. In such a case, skip the check for now.
-  if (time_since_last_check > kHungDeadline + base::TimeDelta::FromSeconds(1))
+  if (time_since_last_check > ping_interval_ + base::TimeDelta::FromSeconds(1))
     return;
 
   const bool audio_thread_responded_to_last_ping = alive_flag_->flag_;
@@ -138,8 +149,13 @@
       audio_thread_status_ = ThreadStatus::kHung;
       LogHistogramThreadStatus();
 
-      if (dump_on_hang_) {
-        base::debug::DumpWithoutCrashing();
+      if (hang_action_ == HangAction::kDump ||
+          hang_action_ == HangAction::kDumpAndTerminateCurrentProcess) {
+        DumpWithoutCrashing();
+      }
+      if (hang_action_ == HangAction::kTerminateCurrentProcess ||
+          hang_action_ == HangAction::kDumpAndTerminateCurrentProcess) {
+        TerminateCurrentProcess();
       }
     }
   }
@@ -158,4 +174,25 @@
                             audio_thread_status_.load());
 }
 
+void AudioThreadHangMonitor::SetHangActionCallbacksForTesting(
+    base::RepeatingClosure dump_callback,
+    base::RepeatingClosure terminate_process_callback) {
+  dump_callback_ = std::move(dump_callback);
+  terminate_process_callback_ = std::move(terminate_process_callback);
+}
+
+void AudioThreadHangMonitor::DumpWithoutCrashing() {
+  if (!dump_callback_.is_null())
+    dump_callback_.Run();
+  else
+    base::debug::DumpWithoutCrashing();
+}
+
+void AudioThreadHangMonitor::TerminateCurrentProcess() {
+  if (!terminate_process_callback_.is_null())
+    terminate_process_callback_.Run();
+  else
+    base::Process::TerminateCurrentProcessImmediately(1);
+}
+
 }  // namespace media
diff --git a/media/audio/audio_thread_hang_monitor.h b/media/audio/audio_thread_hang_monitor.h
index bcd9d51..363dd69 100644
--- a/media/audio/audio_thread_hang_monitor.h
+++ b/media/audio/audio_thread_hang_monitor.h
@@ -10,9 +10,12 @@
 #include <atomic>
 #include <memory>
 
+#include "base/callback_forward.h"
+#include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/optional.h"
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
 #include "base/time/time.h"
@@ -48,10 +51,25 @@
     kMaxValue = kRecovered
   };
 
+  enum class HangAction {
+    // Do nothing. (UMA logging is always done.)
+    kDoNothing,
+    // A crash dump will be collected the first time the thread is detected as
+    // hung (note that no actual crashing is involved).
+    kDump,
+    // Terminate the current process with exit code 0.
+    kTerminateCurrentProcess,
+    // Terminate the current process with exit code 1, which yields a crash
+    // dump.
+    kDumpAndTerminateCurrentProcess
+  };
+
   // |monitor_task_runner| may be set explicitly by tests only. Other callers
-  // should use the default.
+  // should use the default. If |hang_deadline| is not provided, or if it's
+  // zero, a default value is used.
   static Ptr Create(
-      bool dump_on_hang,
+      HangAction hang_action,
+      base::Optional<base::TimeDelta> hang_deadline,
       const base::TickClock* clock,
       scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner,
       scoped_refptr<base::SequencedTaskRunner> monitor_task_runner = nullptr);
@@ -62,6 +80,8 @@
   bool IsAudioThreadHung() const;
 
  private:
+  friend class AudioThreadHangMonitorTest;
+
   class SharedAtomicFlag final
       : public base::RefCountedThreadSafe<SharedAtomicFlag> {
    public:
@@ -75,7 +95,8 @@
   };
 
   AudioThreadHangMonitor(
-      bool dump_on_hang,
+      HangAction hang_action,
+      base::Optional<base::TimeDelta> hang_deadline,
       const base::TickClock* clock,
       scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner);
 
@@ -94,6 +115,16 @@
   // LogHistogramThreadStatus logs |thread_status_| to a histogram.
   void LogHistogramThreadStatus();
 
+  // For tests. See below functions.
+  void SetHangActionCallbacksForTesting(
+      base::RepeatingClosure dump_callback,
+      base::RepeatingClosure terminate_process_callback);
+
+  // Thin wrapper functions that either executes the default or runs a callback
+  // set with SetHangActioncallbacksForTesting(), for testing purposes.
+  void DumpWithoutCrashing();
+  void TerminateCurrentProcess();
+
   const base::TickClock* const clock_;
 
   // This flag is set to false on the monitor sequence and then set to true on
@@ -103,9 +134,15 @@
   // |audio_task_runner_| is the task runner of the audio thread.
   const scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_;
 
-  // If |dump_on_hang_| is set, a crash dump will be collected the first time
-  // the thread is detected as hung (note that no actual crashing is involved).
-  const bool dump_on_hang_;
+  // Which action(s) to take when detected hung thread.
+  const HangAction hang_action_;
+
+  // At which interval to ping and see if the thread is running.
+  const base::TimeDelta ping_interval_;
+
+  // For testing. See DumpWithoutCrashing() and TerminateCurrentProcess().
+  base::RepeatingClosure dump_callback_;
+  base::RepeatingClosure terminate_process_callback_;
 
   std::atomic<ThreadStatus> audio_thread_status_ = {ThreadStatus::kStarted};
 
diff --git a/media/audio/audio_thread_hang_monitor_unittest.cc b/media/audio/audio_thread_hang_monitor_unittest.cc
index c90d4f6..364edb7 100644
--- a/media/audio/audio_thread_hang_monitor_unittest.cc
+++ b/media/audio/audio_thread_hang_monitor_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/optional.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -16,6 +17,7 @@
 
 using testing::ElementsAre;
 using testing::Test;
+using HangAction = media::AudioThreadHangMonitor::HangAction;
 
 namespace media {
 
@@ -28,6 +30,9 @@
 constexpr int kRecovered =
     static_cast<int>(AudioThreadHangMonitor::ThreadStatus::kRecovered);
 
+constexpr base::TimeDelta kShortHangDeadline = base::TimeDelta::FromSeconds(5);
+constexpr base::TimeDelta kLongHangDeadline = base::TimeDelta::FromMinutes(30);
+
 }  // namespace
 
 class AudioThreadHangMonitorTest : public Test {
@@ -42,8 +47,8 @@
     // runner since ScopedTaskEnvironment::FastForwardBy only works for the main
     // thread.
     hang_monitor_ = AudioThreadHangMonitor::Create(
-        false, task_env_.GetMockTickClock(), audio_thread_.task_runner(),
-        task_env_.GetMainThreadTaskRunner());
+        HangAction::kDoNothing, base::nullopt, task_env_.GetMockTickClock(),
+        audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
   }
 
   ~AudioThreadHangMonitorTest() override {
@@ -51,6 +56,14 @@
     task_env_.RunUntilIdle();
   }
 
+  void SetHangActionCallbacksForTesting() {
+    hang_monitor_->SetHangActionCallbacksForTesting(
+        base::BindRepeating(&AudioThreadHangMonitorTest::HangActionDump,
+                            base::Unretained(this)),
+        base::BindRepeating(&AudioThreadHangMonitorTest::HangActionTerminate,
+                            base::Unretained(this)));
+  }
+
   void RunUntilIdle() { task_env_.RunUntilIdle(); }
 
   void FlushAudioThread() {
@@ -70,6 +83,9 @@
         base::BindOnce(&base::WaitableEvent::Wait, base::Unretained(&event_)));
   }
 
+  MOCK_METHOD0(HangActionDump, void());
+  MOCK_METHOD0(HangActionTerminate, void());
+
   base::WaitableEvent event_;
   base::test::ScopedTaskEnvironment task_env_;
   base::HistogramTester histograms_;
@@ -109,6 +125,95 @@
               ElementsAre(base::Bucket(kStarted, 1), base::Bucket(kHung, 1)));
 }
 
+TEST_F(AudioThreadHangMonitorTest, DoesNotLogThreadHungWithShortDeadline) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDoNothing, kShortHangDeadline, task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  RunUntilIdle();
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(kShortHangDeadline / 2);
+  event_.Signal();
+
+  // Two started events, one for the originally created hang monitor and one for
+  // the new created here.
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2)));
+}
+
+TEST_F(AudioThreadHangMonitorTest, LogsThreadHungWithShortDeadline) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDoNothing, kShortHangDeadline, task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  RunUntilIdle();
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(kShortHangDeadline * 2);
+  event_.Signal();
+
+  // Two started events, one for the originally created hang monitor and one for
+  // the new created here.
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
+TEST_F(AudioThreadHangMonitorTest, DoesNotLogThreadHungWithLongDeadline) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDoNothing, kLongHangDeadline, task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  RunUntilIdle();
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(kLongHangDeadline / 2);
+  event_.Signal();
+
+  // Two started events, one for the originally created hang monitor and one for
+  // the new created here.
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2)));
+}
+
+TEST_F(AudioThreadHangMonitorTest, LogsThreadHungWithLongDeadline) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDoNothing, kLongHangDeadline, task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  RunUntilIdle();
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(kLongHangDeadline * 2);
+  event_.Signal();
+
+  // Two started events, one for the originally created hang monitor and one for
+  // the new created here.
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
+// Zero deadline means that the default deadline should be used.
+TEST_F(AudioThreadHangMonitorTest, ZeroDeadlineMeansDefaultDeadline) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDoNothing, base::TimeDelta(), task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  RunUntilIdle();
+
+  for (int i = 0; i < 10; ++i) {
+    // Flush the audio thread, then advance the clock. The audio thread should
+    // register as "alive" every time.
+    FlushAudioThread();
+    task_env_.FastForwardBy(base::TimeDelta::FromMinutes(1));
+  }
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2)));
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(base::TimeDelta::FromMinutes(10));
+  event_.Signal();
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
 TEST_F(AudioThreadHangMonitorTest,
        LogsRecoveredWhenAudioThreadIsBlockedThenRecovers) {
   RunUntilIdle();
@@ -129,4 +234,74 @@
                           base::Bucket(kRecovered, 1)));
 }
 
+TEST_F(AudioThreadHangMonitorTest, NoHangActionWhenOk) {
+  SetHangActionCallbacksForTesting();
+  RunUntilIdle();
+
+  for (int i = 0; i < 10; ++i) {
+    // Flush the audio thread, then advance the clock. The audio thread should
+    // register as "alive" every time.
+    FlushAudioThread();
+    task_env_.FastForwardBy(base::TimeDelta::FromMinutes(1));
+  }
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 1)));
+}
+
+TEST_F(AudioThreadHangMonitorTest, DumpsWhenAudioThreadIsBlocked) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDump, base::nullopt, task_env_.GetMockTickClock(),
+      audio_thread_.task_runner(), task_env_.GetMainThreadTaskRunner());
+  SetHangActionCallbacksForTesting();
+  RunUntilIdle();
+
+  EXPECT_CALL(*this, HangActionDump).Times(1);
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(base::TimeDelta::FromMinutes(10));
+  event_.Signal();
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
+TEST_F(AudioThreadHangMonitorTest, TerminatesProcessWhenAudioThreadIsBlocked) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kTerminateCurrentProcess, base::nullopt,
+      task_env_.GetMockTickClock(), audio_thread_.task_runner(),
+      task_env_.GetMainThreadTaskRunner());
+  SetHangActionCallbacksForTesting();
+  RunUntilIdle();
+
+  EXPECT_CALL(*this, HangActionTerminate).Times(1);
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(base::TimeDelta::FromMinutes(10));
+  event_.Signal();
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
+TEST_F(AudioThreadHangMonitorTest,
+       DumpsAndTerminatesProcessWhenAudioThreadIsBlocked) {
+  hang_monitor_ = AudioThreadHangMonitor::Create(
+      HangAction::kDumpAndTerminateCurrentProcess, base::nullopt,
+      task_env_.GetMockTickClock(), audio_thread_.task_runner(),
+      task_env_.GetMainThreadTaskRunner());
+  SetHangActionCallbacksForTesting();
+  RunUntilIdle();
+
+  EXPECT_CALL(*this, HangActionDump).Times(1);
+  EXPECT_CALL(*this, HangActionTerminate).Times(1);
+
+  BlockAudioThreadUntilEvent();
+  task_env_.FastForwardBy(base::TimeDelta::FromMinutes(10));
+  event_.Signal();
+
+  EXPECT_THAT(histograms_.GetAllSamples("Media.AudioThreadStatus"),
+              ElementsAre(base::Bucket(kStarted, 2), base::Bucket(kHung, 1)));
+}
+
 }  // namespace media
diff --git a/media/audio/audio_thread_impl.cc b/media/audio/audio_thread_impl.cc
index e1bdc11d..c3dfddf 100644
--- a/media/audio/audio_thread_impl.cc
+++ b/media/audio/audio_thread_impl.cc
@@ -4,6 +4,7 @@
 
 #include "media/audio/audio_thread_impl.h"
 
+#include "base/optional.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "build/build_config.h"
@@ -37,7 +38,8 @@
   // https://crbug.com/946968: The hang monitor possibly causes crashes on
   // Android
   hang_monitor_ = AudioThreadHangMonitor::Create(
-      false, base::DefaultTickClock::GetInstance(), task_runner_);
+      AudioThreadHangMonitor::HangAction::kDoNothing, base::nullopt,
+      base::DefaultTickClock::GetInstance(), task_runner_);
 #endif
 }
 
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 8f63d767..5d956d8 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -799,7 +799,10 @@
     video_locked_when_paused_when_hidden_ = true;
 
   pipeline_controller_->SetPlaybackRate(0.0);
-  paused_time_ = pipeline_controller_->GetMediaTime();
+
+  // For states <= kReadyStateHaveMetadata, we may not have a renderer yet.
+  if (highest_ready_state_ > WebMediaPlayer::kReadyStateHaveMetadata)
+    paused_time_ = pipeline_controller_->GetMediaTime();
 
   if (observer_)
     observer_->OnPaused();
@@ -1053,7 +1056,6 @@
 
 base::TimeDelta WebMediaPlayerImpl::GetCurrentTimeInternal() const {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
-  DCHECK_NE(ready_state_, WebMediaPlayer::kReadyStateHaveNothing);
 
   base::TimeDelta current_time;
   if (Seeking())
@@ -1775,7 +1777,6 @@
 
   pipeline_metadata_ = metadata;
 
-  SetReadyState(WebMediaPlayer::kReadyStateHaveMetadata);
   UMA_HISTOGRAM_ENUMERATION(
       "Media.VideoRotation",
       metadata.video_decoder_config.video_transformation().rotation,
@@ -1829,6 +1830,10 @@
   CreateVideoDecodeStatsReporter();
 
   UpdatePlayState();
+
+  // This may trigger all sorts of calls into this class (e.g., Play(), Pause())
+  // so do it last to avoid unexpected states during the calls.
+  SetReadyState(WebMediaPlayer::kReadyStateHaveMetadata);
 }
 
 void WebMediaPlayerImpl::ActivateSurfaceLayerForVideo() {
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn
index c5c9c5d..6b12ed4 100644
--- a/media/capture/BUILD.gn
+++ b/media/capture/BUILD.gn
@@ -86,6 +86,7 @@
     "//media/capture/mojom:image_capture",
     "//media/capture/mojom:image_capture_types",
     "//media/mojo/interfaces:interfaces",
+    "//media/parsers",
     "//third_party/libyuv",
     "//ui/gfx",
   ]
diff --git a/media/capture/video/file_video_capture_device.cc b/media/capture/video/file_video_capture_device.cc
index 06f4527..18d506a 100644
--- a/media/capture/video/file_video_capture_device.cc
+++ b/media/capture/video/file_video_capture_device.cc
@@ -18,7 +18,7 @@
 #include "media/capture/mojom/image_capture_types.h"
 #include "media/capture/video/blob_utils.h"
 #include "media/capture/video_capture_types.h"
-#include "media/filters/jpeg_parser.h"
+#include "media/parsers/jpeg_parser.h"
 
 namespace media {
 
diff --git a/media/cast/test/utility/in_process_receiver.cc b/media/cast/test/utility/in_process_receiver.cc
index 493dbcc6..4087487 100644
--- a/media/cast/test/utility/in_process_receiver.cc
+++ b/media/cast/test/utility/in_process_receiver.cc
@@ -61,9 +61,13 @@
                               FROM_HERE,
                               base::Bind(&InProcessReceiver::StartOnMainThread,
                                          base::Unretained(this)));
+  stopped_ = false;
 }
 
 void InProcessReceiver::Stop() {
+  if (stopped_) {
+    return;
+  }
   base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                             base::WaitableEvent::InitialState::NOT_SIGNALED);
   if (cast_environment_->CurrentlyOn(CastEnvironment::MAIN)) {
@@ -76,6 +80,7 @@
                                            &event));
     event.Wait();
   }
+  stopped_ = true;
 }
 
 void InProcessReceiver::StopOnMainThread(base::WaitableEvent* event) {
diff --git a/media/cast/test/utility/in_process_receiver.h b/media/cast/test/utility/in_process_receiver.h
index 11841ff7..5f440cf7 100644
--- a/media/cast/test/utility/in_process_receiver.h
+++ b/media/cast/test/utility/in_process_receiver.h
@@ -76,10 +76,14 @@
 
   // Begin delivering any received audio/video frames to the OnXXXFrame()
   // methods.
+  //
+  // Start() and Stop() must only be called from one thread.
   virtual void Start();
 
   // Destroy the sub-compontents of this class.
   // After this call, it is safe to destroy this object on any thread.
+  //
+  // Start() and Stop() must only be called from one thread.
   virtual void Stop();
 
  protected:
@@ -131,6 +135,9 @@
   std::unique_ptr<CastTransport> transport_;
   std::unique_ptr<CastReceiver> cast_receiver_;
 
+  // Boolean gate to avoid stopping if stopped.
+  bool stopped_ = true;
+
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<InProcessReceiver> weak_factory_;
 
diff --git a/media/cast/test/utility/udp_proxy_main.cc b/media/cast/test/utility/udp_proxy_main.cc
index 9b22a7a..759f7845 100644
--- a/media/cast/test/utility/udp_proxy_main.cc
+++ b/media/cast/test/utility/udp_proxy_main.cc
@@ -134,7 +134,8 @@
   base::AtExitManager at_exit;
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   InitLogging(settings);
 
   if (argc != 5 && argc != 3) {
diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
index 1324da9..eec20a7 100644
--- a/media/filters/BUILD.gn
+++ b/media/filters/BUILD.gn
@@ -89,10 +89,6 @@
     "//media:subcomponent_config",
   ]
 
-  public_deps = [
-    ":jpeg_parser",
-  ]
-
   deps = [
     "//cc/base",  # For MathUtil.
     "//gpu/command_buffer/common",
@@ -226,34 +222,6 @@
   }
 }
 
-# This component allows other targets to use the JPEG parser as a standalone,
-# general-purpose utility without having to pull all of //media as a dependency
-# (which could potentially result in cycles).
-component("jpeg_parser") {
-  output_name = "media_filters_jpeg_parser"
-  sources = [
-    "jpeg_parser.cc",
-    "jpeg_parser.h",
-  ]
-  defines = [ "IS_JPEG_PARSER_IMPL" ]
-  deps = [
-    "//base",
-  ]
-}
-
-source_set("jpeg_parser_unit_tests") {
-  testonly = true
-  sources = [
-    "jpeg_parser_unittest.cc",
-  ]
-  deps = [
-    ":jpeg_parser",
-    "//base",
-    "//media:test_support",
-    "//testing/gtest",
-  ]
-}
-
 source_set("perftests") {
   testonly = true
   sources = []
@@ -328,7 +296,6 @@
   ]
 
   deps = [
-    ":jpeg_parser_unit_tests",
     "//base/test:test_support",
     "//media:test_support",
     "//testing/gmock",
diff --git a/media/gpu/test/video_test_environment.cc b/media/gpu/test/video_test_environment.cc
index 365cab6..3d1a2ad 100644
--- a/media/gpu/test/video_test_environment.cc
+++ b/media/gpu/test/video_test_environment.cc
@@ -33,7 +33,8 @@
 
   // Needed to enable DVLOG through --vmodule.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   LOG_ASSERT(logging::InitLogging(settings));
 
   // Setting up a task environment will create a task runner for the current
diff --git a/media/gpu/v4l2/BUILD.gn b/media/gpu/v4l2/BUILD.gn
index 03fcb34..d756ef22 100644
--- a/media/gpu/v4l2/BUILD.gn
+++ b/media/gpu/v4l2/BUILD.gn
@@ -91,6 +91,7 @@
     deps += [
       "//components/chromeos_camera:jpeg_encode_accelerator",
       "//components/chromeos_camera:mjpeg_decode_accelerator",
+      "//media/parsers",
     ]
   }
 }
diff --git a/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.h b/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.h
index c337ec6b..cc73b5c 100644
--- a/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.h
+++ b/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.h
@@ -21,9 +21,9 @@
 #include "media/base/bitstream_buffer.h"
 #include "media/base/unaligned_shared_memory.h"
 #include "media/base/video_frame.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/media_gpu_export.h"
 #include "media/gpu/v4l2/v4l2_device.h"
+#include "media/parsers/jpeg_parser.h"
 
 namespace {
 
diff --git a/media/gpu/v4l2/v4l2_mjpeg_decode_accelerator.cc b/media/gpu/v4l2/v4l2_mjpeg_decode_accelerator.cc
index 8aea744..d1f4194 100644
--- a/media/gpu/v4l2/v4l2_mjpeg_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_mjpeg_decode_accelerator.cc
@@ -16,8 +16,8 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/macros.h"
+#include "media/parsers/jpeg_parser.h"
 #include "third_party/libyuv/include/libyuv.h"
 
 #define IOCTL_OR_ERROR_RETURN_VALUE(type, arg, value, type_name)    \
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn
index ab95283..3ed99a13 100644
--- a/media/gpu/vaapi/BUILD.gn
+++ b/media/gpu/vaapi/BUILD.gn
@@ -94,6 +94,7 @@
     deps += [
       "//components/chromeos_camera:jpeg_encode_accelerator",
       "//components/chromeos_camera:mjpeg_decode_accelerator",
+      "//media/parsers",
     ]
   }
 
@@ -160,6 +161,7 @@
     ":vaapi_utils_unittest",
     "//base",
     "//media:test_support",
+    "//media/parsers",
     "//skia",
     "//testing/gtest",
     "//third_party/libyuv:libyuv",
diff --git a/media/gpu/vaapi/vaapi_jpeg_decoder.cc b/media/gpu/vaapi/vaapi_jpeg_decoder.cc
index 4fe95603..364a874f 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decoder.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_decoder.cc
@@ -17,11 +17,11 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/stl_util.h"
 #include "media/base/video_types.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/macros.h"
 #include "media/gpu/vaapi/va_surface.h"
 #include "media/gpu/vaapi/vaapi_utils.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
+#include "media/parsers/jpeg_parser.h"
 
 namespace media {
 
diff --git a/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc b/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc
index 14304a73..9a5b262 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc
@@ -26,10 +26,10 @@
 #include "base/strings/string_util.h"
 #include "media/base/test_data_util.h"
 #include "media/base/video_types.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/vaapi/vaapi_jpeg_decoder.h"
 #include "media/gpu/vaapi/vaapi_utils.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
+#include "media/parsers/jpeg_parser.h"
 #include "third_party/libyuv/include/libyuv.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
diff --git a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
index ad547de..fe2fb53 100644
--- a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
@@ -18,9 +18,9 @@
 #include "base/trace_event/trace_event.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_frame.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_jpeg_encoder.h"
+#include "media/parsers/jpeg_parser.h"
 
 namespace media {
 
diff --git a/media/gpu/vaapi/vaapi_jpeg_encoder.cc b/media/gpu/vaapi/vaapi_jpeg_encoder.cc
index e4bd4f1..ebfaa37 100644
--- a/media/gpu/vaapi/vaapi_jpeg_encoder.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_encoder.cc
@@ -13,9 +13,9 @@
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/stl_util.h"
-#include "media/filters/jpeg_parser.h"
 #include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
+#include "media/parsers/jpeg_parser.h"
 
 namespace media {
 
diff --git a/media/gpu/video_decode_accelerator_unittest.cc b/media/gpu/video_decode_accelerator_unittest.cc
index 8fa9e36..f9b2361 100644
--- a/media/gpu/video_decode_accelerator_unittest.cc
+++ b/media/gpu/video_decode_accelerator_unittest.cc
@@ -1752,7 +1752,8 @@
 
   // Needed to enable DVLOG through --vmodule.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   LOG_ASSERT(logging::InitLogging(settings));
 
   const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc
index 463137e..1fb16ed 100644
--- a/media/gpu/video_encode_accelerator_unittest.cc
+++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -2978,7 +2978,8 @@
 
   // Needed to enable DVLOG through --vmodule.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   LOG_ASSERT(logging::InitLogging(settings));
 
   const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
diff --git a/media/mojo/services/main.cc b/media/mojo/services/main.cc
index b8d4318..92f643f 100644
--- a/media/mojo/services/main.cc
+++ b/media/mojo/services/main.cc
@@ -10,7 +10,8 @@
 
 void ServiceMain(service_manager::mojom::ServiceRequest request) {
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   base::MessageLoop message_loop;
diff --git a/media/parsers/BUILD.gn b/media/parsers/BUILD.gn
new file mode 100644
index 0000000..4b2fab19
--- /dev/null
+++ b/media/parsers/BUILD.gn
@@ -0,0 +1,48 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//media/media_options.gni")
+
+component("parsers") {
+  sources = [
+    "jpeg_parser.cc",
+    "jpeg_parser.h",
+    "media_parsers_export.h",
+  ]
+  defines = [ "IS_MEDIA_PARSER_IMPL" ]
+  deps = [
+    "//base",
+  ]
+
+  # This target is used in GPU IPC code and cannot depend on any //media code.
+  assert_no_deps = [
+    "//media",
+    "//media:shared_memory_support",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "jpeg_parser_unittest.cc",
+  ]
+  deps = [
+    ":parsers",
+    "//base",
+    "//media:test_support",
+    "//testing/gtest",
+  ]
+}
+
+fuzzer_test("media_jpeg_parser_picture_fuzzer") {
+  sources = [
+    "jpeg_parser_picture_fuzzertest.cc",
+  ]
+  deps = [
+    ":parsers",
+    "//base",
+  ]
+  seed_corpus = "//media/test/data"
+  dict = "//media/test/jpeg.dict"
+}
diff --git a/media/filters/jpeg_parser.cc b/media/parsers/jpeg_parser.cc
similarity index 99%
rename from media/filters/jpeg_parser.cc
rename to media/parsers/jpeg_parser.cc
index e2b94321..344f7c3 100644
--- a/media/filters/jpeg_parser.cc
+++ b/media/parsers/jpeg_parser.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 "media/filters/jpeg_parser.h"
+#include "media/parsers/jpeg_parser.h"
 
 #include "base/big_endian.h"
 #include "base/logging.h"
diff --git a/media/filters/jpeg_parser.h b/media/parsers/jpeg_parser.h
similarity index 93%
rename from media/filters/jpeg_parser.h
rename to media/parsers/jpeg_parser.h
index 0717756..faab7e92 100644
--- a/media/filters/jpeg_parser.h
+++ b/media/parsers/jpeg_parser.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-#ifndef MEDIA_FILTERS_JPEG_PARSER_H_
-#define MEDIA_FILTERS_JPEG_PARSER_H_
+#ifndef MEDIA_PARSERS_JPEG_PARSER_H_
+#define MEDIA_PARSERS_JPEG_PARSER_H_
 
 #include <stddef.h>
 #include <stdint.h>
 
-#include "base/component_export.h"
+#include "media/parsers/media_parsers_export.h"
 
 namespace media {
 
@@ -81,11 +81,11 @@
 };
 
 // K.3.3.1 "Specification of typical tables for DC difference coding"
-COMPONENT_EXPORT(JPEG_PARSER)
+MEDIA_PARSERS_EXPORT
 extern const JpegHuffmanTable kDefaultDcTable[kJpegMaxHuffmanTableNumBaseline];
 
 // K.3.3.2 "Specification of typical tables for AC coefficient coding"
-COMPONENT_EXPORT(JPEG_PARSER)
+MEDIA_PARSERS_EXPORT
 extern const JpegHuffmanTable kDefaultAcTable[kJpegMaxHuffmanTableNumBaseline];
 
 // Parsing result of JPEG DQT marker.
@@ -94,11 +94,11 @@
   uint8_t value[kDctSize];  // baseline only supports 8 bits quantization table
 };
 
-COMPONENT_EXPORT(JPEG_PARSER) extern const uint8_t kZigZag8x8[64];
+MEDIA_PARSERS_EXPORT extern const uint8_t kZigZag8x8[64];
 
 // Table K.1 Luminance quantization table
 // Table K.2 Chrominance quantization table
-COMPONENT_EXPORT(JPEG_PARSER)
+MEDIA_PARSERS_EXPORT
 extern const JpegQuantizationTable kDefaultQuantTable[2];
 
 // Parsing result of a JPEG component.
@@ -146,7 +146,7 @@
 // Parses JPEG picture in |buffer| with |length|.  Returns true iff header is
 // valid and JPEG baseline sequential process is present. If parsed
 // successfully, |result| is the parsed result.
-COMPONENT_EXPORT(JPEG_PARSER)
+MEDIA_PARSERS_EXPORT
 bool ParseJpegPicture(const uint8_t* buffer,
                       size_t length,
                       JpegParseResult* result);
@@ -154,11 +154,11 @@
 // Parses the first image of JPEG stream in |buffer| with |length|.  Returns
 // true iff header is valid and JPEG baseline sequential process is present.
 // If parsed successfully, |result| is the parsed result.
-COMPONENT_EXPORT(JPEG_PARSER)
+MEDIA_PARSERS_EXPORT
 bool ParseJpegStream(const uint8_t* buffer,
                      size_t length,
                      JpegParseResult* result);
 
 }  // namespace media
 
-#endif  // MEDIA_FILTERS_JPEG_PARSER_H_
+#endif  // MEDIA_PARSERS_JPEG_PARSER_H_
diff --git a/media/filters/jpeg_parser_picture_fuzzertest.cc b/media/parsers/jpeg_parser_picture_fuzzertest.cc
similarity index 93%
rename from media/filters/jpeg_parser_picture_fuzzertest.cc
rename to media/parsers/jpeg_parser_picture_fuzzertest.cc
index d41fcb6a..31d9cae7 100644
--- a/media/filters/jpeg_parser_picture_fuzzertest.cc
+++ b/media/parsers/jpeg_parser_picture_fuzzertest.cc
@@ -6,7 +6,7 @@
 #include <stdint.h>
 
 #include "base/logging.h"
-#include "media/filters/jpeg_parser.h"
+#include "media/parsers/jpeg_parser.h"
 
 struct Environment {
   Environment() { logging::SetMinLogLevel(logging::LOG_FATAL); }
diff --git a/media/filters/jpeg_parser_unittest.cc b/media/parsers/jpeg_parser_unittest.cc
similarity index 98%
rename from media/filters/jpeg_parser_unittest.cc
rename to media/parsers/jpeg_parser_unittest.cc
index b29ebad..72b9ae9 100644
--- a/media/filters/jpeg_parser_unittest.cc
+++ b/media/parsers/jpeg_parser_unittest.cc
@@ -8,7 +8,7 @@
 #include "base/files/memory_mapped_file.h"
 #include "base/path_service.h"
 #include "media/base/test_data_util.h"
-#include "media/filters/jpeg_parser.h"
+#include "media/parsers/jpeg_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace media {
diff --git a/media/parsers/media_parsers_export.h b/media/parsers/media_parsers_export.h
new file mode 100644
index 0000000..72277ea7
--- /dev/null
+++ b/media/parsers/media_parsers_export.h
@@ -0,0 +1,12 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_PARSERS_MEDIA_PARSERS_EXPORT_H_
+#define MEDIA_PARSERS_MEDIA_PARSERS_EXPORT_H_
+
+#include "base/component_export.h"
+
+#define MEDIA_PARSERS_EXPORT COMPONENT_EXPORT(MEDIA_PARSER)
+
+#endif  // MEDIA_PARSERS_MEDIA_PARSERS_EXPORT_H_
diff --git a/net/dns/dns_record_fuzzer.cc b/net/dns/dns_record_fuzzer.cc
index 4b48f987a..f96083a 100644
--- a/net/dns/dns_record_fuzzer.cc
+++ b/net/dns/dns_record_fuzzer.cc
@@ -15,7 +15,8 @@
   logging::SetMinLogLevel(logging::LOG_FATAL);
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   settings.log_file = nullptr;
   logging::InitLogging(settings);
 }
diff --git a/net/tools/cert_verify_tool/cert_verify_tool.cc b/net/tools/cert_verify_tool/cert_verify_tool.cc
index 27102de0..6c1c734 100644
--- a/net/tools/cert_verify_tool/cert_verify_tool.cc
+++ b/net/tools/cert_verify_tool/cert_verify_tool.cc
@@ -278,7 +278,8 @@
       base::BindOnce([] { base::ThreadPool::GetInstance()->Shutdown(); }));
   base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   base::CommandLine::StringVector args = command_line.GetArgs();
diff --git a/net/tools/net_watcher/net_watcher.cc b/net/tools/net_watcher/net_watcher.cc
index 860ff93..f88986f 100644
--- a/net/tools/net_watcher/net_watcher.cc
+++ b/net/tools/net_watcher/net_watcher.cc
@@ -150,7 +150,8 @@
   base::AtExitManager exit_manager;
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   // Just make the main message loop the network loop.
diff --git a/net/tools/quic/quic_simple_server_bin.cc b/net/tools/quic/quic_simple_server_bin.cc
index 7429fdae..88d1819 100644
--- a/net/tools/quic/quic_simple_server_bin.cc
+++ b/net/tools/quic/quic_simple_server_bin.cc
@@ -56,7 +56,8 @@
   base::CommandLine* line = base::CommandLine::ForCurrentProcess();
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   CHECK(logging::InitLogging(settings));
 
   if (line->HasSwitch("h") || line->HasSwitch("help")) {
diff --git a/net/tools/stress_cache/stress_cache.cc b/net/tools/stress_cache/stress_cache.cc
index f48d04a7..e385777 100644
--- a/net/tools/stress_cache/stress_cache.cc
+++ b/net/tools/stress_cache/stress_cache.cc
@@ -422,7 +422,8 @@
 #else
   base::CommandLine::Init(argc, argv);
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 #endif
 
diff --git a/net/tools/transport_security_state_generator/transport_security_state_generator.cc b/net/tools/transport_security_state_generator/transport_security_state_generator.cc
index f6d95a8..fd18cf7 100644
--- a/net/tools/transport_security_state_generator/transport_security_state_generator.cc
+++ b/net/tools/transport_security_state_generator/transport_security_state_generator.cc
@@ -204,7 +204,8 @@
       *base::CommandLine::ForCurrentProcess();
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
 #if defined(OS_WIN)
diff --git a/ppapi/nacl_irt/ppapi_dispatcher.cc b/ppapi/nacl_irt/ppapi_dispatcher.cc
index 210ae97..f70ca06 100644
--- a/ppapi/nacl_irt/ppapi_dispatcher.cc
+++ b/ppapi/nacl_irt/ppapi_dispatcher.cc
@@ -179,7 +179,8 @@
         args.switch_names[i], args.switch_values[i]);
   }
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   base::FeatureList::ClearInstanceForTesting();
diff --git a/remoting/host/logging_linux.cc b/remoting/host/logging_linux.cc
index d29086e..ea39538 100644
--- a/remoting/host/logging_linux.cc
+++ b/remoting/host/logging_linux.cc
@@ -11,7 +11,8 @@
 void InitHostLogging() {
   // Write logs to the system debug log.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 }
 
diff --git a/remoting/host/logging_mac.cc b/remoting/host/logging_mac.cc
index d153661..0b8a96d 100644
--- a/remoting/host/logging_mac.cc
+++ b/remoting/host/logging_mac.cc
@@ -90,7 +90,8 @@
 void InitHostLogging() {
   // Write logs to the system debug log.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   // Write logs to syslog as well.
diff --git a/remoting/host/logging_win.cc b/remoting/host/logging_win.cc
index be69773e..5b3a59e4 100644
--- a/remoting/host/logging_win.cc
+++ b/remoting/host/logging_win.cc
@@ -19,7 +19,8 @@
 void InitHostLogging() {
   // Write logs to the system debug log.
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   // Enable trace control and transport through event tracing for Windows.
diff --git a/remoting/host/setup/start_host_main.cc b/remoting/host/setup/start_host_main.cc
index 31181ff..e795b389c 100644
--- a/remoting/host/setup/start_host_main.cc
+++ b/remoting/host/setup/start_host_main.cc
@@ -131,7 +131,8 @@
   base::AtExitManager exit_manager;
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
 
   base::ThreadPool::CreateAndStartWithDefaultParams("RemotingHostSetup");
diff --git a/remoting/resources/remoting_strings_ta.xtb b/remoting/resources/remoting_strings_ta.xtb
index 6f12138..5a6eba0 100644
--- a/remoting/resources/remoting_strings_ta.xtb
+++ b/remoting/resources/remoting_strings_ta.xtb
@@ -83,7 +83,7 @@
 <translation id="2758123043070977469">அங்கீகரிப்பதில் சிக்கல் ஏற்பட்டது. மீண்டும் உள்நுழையவும்.</translation>
 <translation id="2803375539583399270">பின்னை உள்ளிடவும்</translation>
 <translation id="2841013758207633010">நேரம்</translation>
-<translation id="2851754573186462851">Chromium பயன்பாட்டின் அறிவிப்புகள்</translation>
+<translation id="2851754573186462851">Chromium ஆப்ஸின் அறிவிப்புகள்</translation>
 <translation id="2888969873284818612">நெட்வொர்க் பிழை ஏற்பட்டது. உங்கள் சாதனம் மீண்டும் ஆன்லைன் வரும்போது ஆப்ஸை மீண்டும் தொடங்குவோம்.</translation>
 <translation id="2891243864890517178">Macக்கிற்கு (OS X Yosemite 10.10 அல்லது பிந்தையவை)</translation>
 <translation id="289405675947420287">உங்கள் iOS சாதனத்திலிருந்து உங்கள் கம்ப்யூட்டரைப் பாதுகாப்பாக அணுகலாம். இது விரைவானது, எளிதானது மற்றும் இலவசமானது.
@@ -237,7 +237,7 @@
 <translation id="6091564239975589852">விசைகளை அனுப்பு</translation>
 <translation id="6099500228377758828">Chrome தொலைநிலை டெஸ்க்டாப் சேவை</translation>
 <translation id="6122191549521593678">ஆன்லைன்</translation>
-<translation id="6167788864044230298">Chrome பயன்பாட்டின் அறிவிப்புகள்</translation>
+<translation id="6167788864044230298">Chrome ஆப்ஸின் அறிவிப்புகள்</translation>
 <translation id="6173536234069435147">எனது Google இயக்ககக் கோப்புகளைத் திறக்க முடியவில்லை.</translation>
 <translation id="6178645564515549384">தொலைநிலை உதவிக்கான நேட்டிவ் மெசேஜிங் ஹோஸ்ட்</translation>
 <translation id="618120821413932081">சாளரத்துடன் பொருந்தும்படி, தொலைநிலைக் கணினியின் தெளிவுத்திறனை மாற்று</translation>
diff --git a/services/audio/owning_audio_manager_accessor.cc b/services/audio/owning_audio_manager_accessor.cc
index c2998c3..9ecffa35 100644
--- a/services/audio/owning_audio_manager_accessor.cc
+++ b/services/audio/owning_audio_manager_accessor.cc
@@ -9,9 +9,11 @@
 
 #include "base/feature_list.h"
 #include "base/macros.h"
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
 #include "base/single_thread_task_runner.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/threading/thread.h"
 #include "base/time/default_tick_clock.h"
 #include "media/audio/audio_features.h"
@@ -19,10 +21,37 @@
 #include "media/audio/audio_thread.h"
 #include "media/audio/audio_thread_hang_monitor.h"
 
+using HangAction = media::AudioThreadHangMonitor::HangAction;
+
 namespace audio {
 
 namespace {
 
+base::Optional<base::TimeDelta> GetAudioThreadHangDeadline() {
+  if (!base::FeatureList::IsEnabled(
+          features::kAudioServiceOutOfProcessKillAtHang)) {
+    return base::nullopt;
+  }
+  const std::string timeout_string = base::GetFieldTrialParamValueByFeature(
+      features::kAudioServiceOutOfProcessKillAtHang, "timeout_seconds");
+  int timeout_int = 0;
+  if (!base::StringToInt(timeout_string, &timeout_int) || timeout_int == 0)
+    return base::nullopt;
+  return base::TimeDelta::FromSeconds(timeout_int);
+}
+
+HangAction GetAudioThreadHangAction() {
+  const bool dump =
+      base::FeatureList::IsEnabled(features::kDumpOnAudioServiceHang);
+  const bool kill = base::FeatureList::IsEnabled(
+      features::kAudioServiceOutOfProcessKillAtHang);
+  if (dump) {
+    return kill ? HangAction::kDumpAndTerminateCurrentProcess
+                : HangAction::kDump;
+  }
+  return kill ? HangAction::kTerminateCurrentProcess : HangAction::kDoNothing;
+}
+
 // Thread class for hosting owned AudioManager on the main thread of the
 // service, with a separate worker thread (started on-demand) for running things
 // that shouldn't be blocked by main-thread tasks.
@@ -53,7 +82,8 @@
     : task_runner_(base::ThreadTaskRunnerHandle::Get()),
       worker_thread_("AudioWorkerThread"),
       hang_monitor_(media::AudioThreadHangMonitor::Create(
-          base::FeatureList::IsEnabled(features::kDumpOnAudioServiceHang),
+          GetAudioThreadHangAction(),
+          GetAudioThreadHangDeadline(),
           base::DefaultTickClock::GetInstance(),
           task_runner_)) {}
 
diff --git a/services/service_manager/embedder/main.cc b/services/service_manager/embedder/main.cc
index cd12986..9fd1e55 100644
--- a/services/service_manager/embedder/main.cc
+++ b/services/service_manager/embedder/main.cc
@@ -148,7 +148,8 @@
 
 void NonEmbedderProcessInit() {
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
   // To view log output with IDs and timestamps use "adb logcat -v threadtime".
   logging::SetLogItems(true,   // Process ID
diff --git a/services/service_manager/public/cpp/service_executable/main.cc b/services/service_manager/public/cpp/service_executable/main.cc
index dca88ba0..701cbe1 100644
--- a/services/service_manager/public/cpp/service_executable/main.cc
+++ b/services/service_manager/public/cpp/service_executable/main.cc
@@ -70,7 +70,8 @@
 #endif
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   logging::InitLogging(settings);
   // To view log output with IDs and timestamps use "adb logcat -v threadtime".
   logging::SetLogItems(true,   // Process ID
diff --git a/services/service_manager/sandbox/mac/nacl_loader.sb b/services/service_manager/sandbox/mac/nacl_loader.sb
index c8618da7..a5014f76 100644
--- a/services/service_manager/sandbox/mac/nacl_loader.sb
+++ b/services/service_manager/sandbox/mac/nacl_loader.sb
@@ -38,8 +38,8 @@
 )
 
 (if (>= os-version 1014)
-  ; Ordering of these tcsm sysctls matters. See: https://crbug.com/964353
-  (allow sysctl-read (sysctl-name "kern.tcsm_enable"))
-  (allow sysctl-write (sysctl-name "kern.tcsm_enable"))
-  (allow sysctl-read (sysctl-name "kern.tcsm_available"))
-)
+  (begin
+    (allow sysctl-read (sysctl-name "kern.tcsm_enable"))
+    (allow sysctl-write (sysctl-name "kern.tcsm_enable"))
+    (allow sysctl-read (sysctl-name "kern.tcsm_available"))
+))
diff --git a/services/service_manager/sandbox/mac/renderer.sb b/services/service_manager/sandbox/mac/renderer.sb
index 932c6ec3..b316c98f 100644
--- a/services/service_manager/sandbox/mac/renderer.sb
+++ b/services/service_manager/sandbox/mac/renderer.sb
@@ -95,9 +95,8 @@
 
 ; For V8 to use in thread calculations.
 (if (>= os-version 1014)
-  ; Ordering of these tcsm sysctls matters. See: https://crbug.com/964353
-  (allow sysctl-read (sysctl-name "kern.tcsm_enable"))
-  (allow sysctl-write (sysctl-name "kern.tcsm_enable"))
-  (allow sysctl-read (sysctl-name "kern.tcsm_available"))
-
-)
+  (begin
+    (allow sysctl-read (sysctl-name "kern.tcsm_enable"))
+    (allow sysctl-write (sysctl-name "kern.tcsm_enable"))
+    (allow sysctl-read (sysctl-name "kern.tcsm_available"))
+))
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 405c5f3..0a3f0d4 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -14464,146 +14464,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "chrome_public_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 20
-        },
-        "test": "chrome_public_test_apk"
-      },
-      {
-        "args": [
-          "--enable-features=NetworkService",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_chrome_public_test_apk.filter",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "network_service_chrome_public_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "network_service_chrome_public_test_apk",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 20
-        },
-        "test": "chrome_public_test_apk"
-      },
-      {
-        "args": [
-          "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_public_test_vr_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 2
-        },
-        "test": "chrome_public_test_vr_apk"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "components_browsertests"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
@@ -14785,98 +14645,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "content_shell_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 3
-        },
-        "test": "content_shell_test_apk"
-      },
-      {
-        "args": [
-          "--enable-features=NetworkService",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "network_service_content_shell_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "network_service_content_shell_test_apk",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 5
-        },
-        "test": "content_shell_test_apk"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "content_unittests"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
@@ -16552,99 +16320,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "webview_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 7
-        },
-        "test": "webview_instrumentation_test_apk"
-      },
-      {
-        "args": [
-          "--enable-features=NetworkService,NetworkServiceInProcess",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "network_service_webview_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "name": "network_service_webview_instrumentation_test_apk",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "shards": 20
-        },
-        "test": "webview_instrumentation_test_apk"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "wtf_unittests"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index fb58416..0b5061f 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -299,6 +299,9 @@
   # Note: keep experiment percentages the same as
   # network_service_chrome_public_test_apk.
   'chrome_public_test_apk': {
+    'remove_from': [
+      'android-asan',  # https://crbug.com/964562
+    ],
     'modifications': {
       # chromium.android
       'android-kitkat-arm-rel': {
@@ -346,6 +349,8 @@
       # chromium.clang
       'ToTAndroid',
       'ToTAndroidCFI',
+      # chromium.memory
+      'android-asan',  # https://crbug.com/964562
     ],
   },
   'chrome_public_test_vr_apk-vega': {
@@ -442,6 +447,12 @@
       },
     },
   },
+  'content_shell_test_apk': {
+    'remove_from': [
+      # chromium.memory
+      'android-asan',  # https://crbug.com/964562
+    ],
+  },
   'content_unittests': {
     'modifications': {
       # chromium.memory
@@ -883,6 +894,7 @@
       'Marshmallow Tablet Tester',
       'KitKat Phone Tester (dbg)',
       # chromium.memory
+      'android-asan',  # https://crbug.com/964562
       'Android CFI',
       # chromium.clang
       'ToTAndroid',
@@ -952,6 +964,7 @@
       'Marshmallow Tablet Tester',
       'KitKat Phone Tester (dbg)',
       # chromium.memory
+      'android-asan',  # https://crbug.com/964562
       'Android CFI',
       # chromium.clang
       'ToTAndroid',
@@ -1023,6 +1036,7 @@
       'Marshmallow Tablet Tester',
       'KitKat Phone Tester (dbg)',
       # chromium.memory
+      'android-asan',  # https://crbug.com/964562
       'Android CFI',
       # chromium.clang
       'ToTAndroid',
@@ -1906,6 +1920,8 @@
       # chromium.android.fyi
       # chromium.clang; matching chromium.android, the test fails on these.
       'ToTAndroid',
+      # chromium.memory
+      'android-asan',  # https://crbug.com/964562
       # On chromium.swarm, this should possibly be being run (or removed
       # from Android N5X Swarm).
       'Android N5 Swarm',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index ecac1f7f..59e11996 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2998,6 +2998,22 @@
             ]
         }
     ],
+    "MostLikelyDeprecation": [
+        {
+            "platforms": [
+                "android",
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_20190520",
+                    "disable_features": [
+                        "DisplaySuggestionsServiceTiles"
+                    ]
+                }
+            ]
+        }
+    ],
     "NTPLaunchAfterInactivity": [
         {
             "platforms": [
@@ -4849,7 +4865,7 @@
             ]
         }
     ],
-    "SkipTouchEventFilter": [
+    "SkipPassthroughTouchEventQueueFilter": [
         {
             "platforms": [
                 "linux",
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 625676a..bb58e43 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -268,6 +268,9 @@
 const base::Feature kBlockingFocusWithoutUserActivation{
     "BlockingFocusWithoutUserActivation", base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kAudioWorkletRealtimeThread{
+    "AudioWorkletRealtimeThread", base::FEATURE_DISABLED_BY_DEFAULT};
+
 bool IsOffMainThreadSharedWorkerScriptFetchEnabled() {
   // Off-the-main-thread shared worker script fetch depends on PlzSharedWorker
   // (NetworkService).
diff --git a/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html b/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html
new file mode 100644
index 0000000..25972c65
--- /dev/null
+++ b/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html
@@ -0,0 +1,68 @@
+<!doctype HTML>
+<!--
+This test appends 1000 locked items to the page, lays them out,
+and calculates the offsetTop value on 5 of them.
+
+Since the locked elements have been laid out, the offsetTop
+calculations should be fast.
+
+The test works with and without display locking, and they
+should have similar performance.
+-->
+
+<head>
+<script src="../resources/runner.js"></script>
+<style>
+.box {
+  background: blue;
+  overflow: hidden;
+  width: 100px;
+  height: 100px;
+  contain: style layout;
+}
+</style>
+</head>
+<body>
+<template id="template">
+<div class="box">
+  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+  Quisque ante dui, posuere at pretium suscipit, condimentum at augue.
+</div>
+</template>
+<div id="container"></div>
+</body>
+
+<script>
+const NUMBER_OF_ELEMENTS = 1000;
+const NUMBER_OF_QUERIES = 5;
+
+function appendChildren() {
+  while (container.firstChild) {
+    container.removeChild(container.firstChild);
+  }
+  for (let i = 0; i < NUMBER_OF_ELEMENTS; ++i) {
+    const clone = template.content.cloneNode(true).firstElementChild;
+    clone.id = "box" + i;
+    if (clone.displayLock) {
+      clone.displayLock.acquire({ timeout: Infinity, size: [10, 10] });
+    }
+    container.appendChild(clone);
+  }
+  container.offsetTop;
+}
+
+function runTest() {
+  for (let i = 0; i < NUMBER_OF_QUERIES; ++i) {
+    document.getElementById("box" + i).offsetTop;
+  }
+}
+
+PerfTestRunner.measureTime({
+  setup: appendChildren,
+  run: runTest,
+  warmUpCount: 1,
+  iterationCount: 5,
+});
+
+</script>
+
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index d21bc91..6fedece 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -83,6 +83,8 @@
 BLINK_COMMON_EXPORT extern const base::Feature
     kBlockingFocusWithoutUserActivation;
 
+BLINK_COMMON_EXPORT extern const base::Feature kAudioWorkletRealtimeThread;
+
 // Returns true when off-the-main-thread shared worker script fetch is enabled.
 BLINK_COMMON_EXPORT bool IsOffMainThreadSharedWorkerScriptFetchEnabled();
 
diff --git a/third_party/blink/public/web/web_ax_object.h b/third_party/blink/public/web/web_ax_object.h
index 7a4be89..13ac49de6 100644
--- a/third_party/blink/public/web/web_ax_object.h
+++ b/third_party/blink/public/web/web_ax_object.h
@@ -283,7 +283,6 @@
   BLINK_EXPORT bool HasComputedStyle() const;
   BLINK_EXPORT WebString ComputedStyleDisplay() const;
   BLINK_EXPORT bool AccessibilityIsIgnored() const;
-  BLINK_EXPORT bool AccessibilityIsIncludedInTree() const;
   BLINK_EXPORT void Markers(WebVector<ax::mojom::MarkerType>& types,
                             WebVector<int>& starts,
                             WebVector<int>& ends) const;
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
index 28f8395..198126b 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -467,10 +467,10 @@
   // TODO(leszeks): Decrease the priority of these tasks where possible.
   worker_pool::PostTaskWithTraits(
       FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
-      CrossThreadBind(RunScriptStreamingTask,
-                      WTF::Passed(std::move(script_streaming_task)),
-                      WrapCrossThreadPersistent(this),
-                      WTF::CrossThreadUnretained(stream_)));
+      CrossThreadBindOnce(RunScriptStreamingTask,
+                          WTF::Passed(std::move(script_streaming_task)),
+                          WrapCrossThreadPersistent(this),
+                          WTF::CrossThreadUnretained(stream_)));
 
   return true;
 }
diff --git a/third_party/blink/renderer/bindings/modules/v8/generated.gni b/third_party/blink/renderer/bindings/modules/v8/generated.gni
index ff6dc7e..29b74d1 100644
--- a/third_party/blink/renderer/bindings/modules/v8/generated.gni
+++ b/third_party/blink/renderer/bindings/modules/v8/generated.gni
@@ -40,8 +40,8 @@
   "$bindings_modules_v8_output_dir/dom_exception_or_overconstrained_error.h",
   "$bindings_modules_v8_output_dir/double_or_constrain_double_range.cc",
   "$bindings_modules_v8_output_dir/double_or_constrain_double_range.h",
-  "$bindings_modules_v8_output_dir/effect_proxy_or_worklet_group_effect_proxy.cc",
-  "$bindings_modules_v8_output_dir/effect_proxy_or_worklet_group_effect_proxy.h",
+  "$bindings_modules_v8_output_dir/worklet_animation_effect_or_worklet_group_effect.cc",
+  "$bindings_modules_v8_output_dir/worklet_animation_effect_or_worklet_group_effect.h",
   "$bindings_modules_v8_output_dir/float32_array_or_float64_array_or_dom_matrix.cc",
   "$bindings_modules_v8_output_dir/float32_array_or_float64_array_or_dom_matrix.h",
   "$bindings_modules_v8_output_dir/gpu_out_of_memory_error_or_gpu_validation_error.cc",
diff --git a/third_party/blink/renderer/config.gni b/third_party/blink/renderer/config.gni
index 9b140cc..c33b59a 100644
--- a/third_party/blink/renderer/config.gni
+++ b/third_party/blink/renderer/config.gni
@@ -21,9 +21,6 @@
 }
 
 declare_args() {
-  # DEPRECATED: Use blink_symbol_level=0. https://crbug.com/943869
-  remove_webcore_debug_symbols = false
-
   # How many symbols to include in the build of blink. This affects
   # the performance of the build since the symbols are large and dealing with
   # them is slow.
@@ -45,11 +42,6 @@
   support_webgl2_compute_context = !is_android
 }
 
-assert(!remove_webcore_debug_symbols,
-       "The GN arg 'remove_webcore_debug_symbols' has been removed. " +
-           "Please change your args.gn to use 'blink_symbol_level = 0'. " +
-           "https://crbug.com/943869")
-
 # feature_defines_list ---------------------------------------------------------
 
 feature_defines_list = []
diff --git a/third_party/blink/renderer/core/accessibility/apply_dark_mode.cc b/third_party/blink/renderer/core/accessibility/apply_dark_mode.cc
index bde3c0b1..10e1a610 100644
--- a/third_party/blink/renderer/core/accessibility/apply_dark_mode.cc
+++ b/third_party/blink/renderer/core/accessibility/apply_dark_mode.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/core/accessibility/apply_dark_mode.h"
 
 #include "third_party/blink/renderer/core/css/properties/css_property.h"
-#include "third_party/blink/renderer/core/layout/layout_object.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/graphics/color.h"
 #include "third_party/blink/renderer/platform/graphics/dark_mode_color_classifier.h"
@@ -18,8 +17,8 @@
 // background image color. Most sites with dark background images also have a
 // dark background color set, so this is less of a priority than it would be
 // otherwise.
-bool HasLightBackground(const LayoutObject& layout_object) {
-  const ComputedStyle& style = layout_object.StyleRef();
+bool HasLightBackground(const LayoutView& root) {
+  const ComputedStyle& style = root.StyleRef();
   if (style.HasBackground()) {
     Color color = style.VisitedDependentColor(GetCSSPropertyBackgroundColor());
     return IsLight(color, style.Opacity());
@@ -33,11 +32,11 @@
 }  // namespace
 
 DarkModeSettings BuildDarkModeSettings(const Settings& frame_settings,
-                                       const LayoutObject& layout_object) {
+                                       const LayoutView& root) {
   DarkModeSettings dark_mode_settings;
 
   if (!ShouldApplyDarkModeFilterToPage(frame_settings.GetDarkModePagePolicy(),
-                                       layout_object)) {
+                                       root)) {
     // In theory it should be sufficient to set mode to
     // kOff (or to just return the default struct) without also setting
     // image_policy. However, this causes images to be inverted unexpectedly in
@@ -61,15 +60,15 @@
 }
 
 bool ShouldApplyDarkModeFilterToPage(DarkModePagePolicy policy,
-                                     const LayoutObject& root_layout_object) {
-  if (root_layout_object.StyleRef().DarkColorScheme())
+                                     const LayoutView& root) {
+  if (root.StyleRef().DarkColorScheme())
     return false;
 
   switch (policy) {
     case DarkModePagePolicy::kFilterAll:
       return true;
     case DarkModePagePolicy::kFilterByBackground:
-      return HasLightBackground(root_layout_object);
+      return HasLightBackground(root);
   }
 }
 
diff --git a/third_party/blink/renderer/core/accessibility/apply_dark_mode.h b/third_party/blink/renderer/core/accessibility/apply_dark_mode.h
index c156516..8dff511 100644
--- a/third_party/blink/renderer/core/accessibility/apply_dark_mode.h
+++ b/third_party/blink/renderer/core/accessibility/apply_dark_mode.h
@@ -7,24 +7,22 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
-#include "third_party/blink/renderer/core/layout/layout_object.h"
+#include "third_party/blink/renderer/core/layout/layout_view.h"
 #include "third_party/blink/renderer/platform/graphics/dark_mode_settings.h"
 
 namespace blink {
 
 // Extract dark mode settings from |settings| and modify them as needed
-// based on |layout_object|.
-DarkModeSettings CORE_EXPORT
-BuildDarkModeSettings(const Settings& settings,
-                      const LayoutObject& layout_object);
+// based on |root|.
+DarkModeSettings CORE_EXPORT BuildDarkModeSettings(const Settings& settings,
+                                                   const LayoutView& root);
 
-// Determine whether the page with the provided |root_layout_object| should have
-// its colors inverted, based on the provided |policy|.
+// Determine whether the page with the provided |root| should have its colors
+// inverted, based on the provided |policy|.
 //
 // This method does not check whether Dark Mode is enabled overall.
-bool CORE_EXPORT
-ShouldApplyDarkModeFilterToPage(DarkModePagePolicy policy,
-                                const LayoutObject& root_layout_object);
+bool CORE_EXPORT ShouldApplyDarkModeFilterToPage(DarkModePagePolicy policy,
+                                                 const LayoutView& root);
 
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/core/animation/timing.h b/third_party/blink/renderer/core/animation/timing.h
index c1be6ad..b4ddb4b8 100644
--- a/third_party/blink/renderer/core/animation/timing.h
+++ b/third_party/blink/renderer/core/animation/timing.h
@@ -42,7 +42,7 @@
 
 namespace blink {
 
-struct Timing {
+struct CORE_EXPORT Timing {
   USING_FAST_MALLOC(Timing);
 
  public:
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 17a72ea9..0b046f7 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -6673,8 +6673,7 @@
   // Step 5.1. If the Should element's inline behavior be blocked by Content
   // Security Policy? algorithm returns "Blocked" when executed upon element,
   // "script attribute", and value, then return. [CSP] [spec text]
-  if (!ContentSecurityPolicy::ShouldBypassMainWorld(this) &&
-      !GetContentSecurityPolicy()->AllowInline(
+  if (!GetContentSecurityPolicyForWorld()->AllowInline(
           ContentSecurityPolicy::InlineType::kScriptAttribute, element,
           listener->ScriptBody(), String() /* nonce */, context_url,
           context_line))
diff --git a/third_party/blink/renderer/core/editing/selection_modifier_line.cc b/third_party/blink/renderer/core/editing/selection_modifier_line.cc
index 684caad3..80bae8c 100644
--- a/third_party/blink/renderer/core/editing/selection_modifier_line.cc
+++ b/third_party/blink/renderer/core/editing/selection_modifier_line.cc
@@ -41,6 +41,17 @@
 
 namespace {
 
+const RootInlineBox* ComputeContainingLineBox(const VisiblePosition& position) {
+  if (position.IsNull() ||
+      !position.DeepEquivalent().AnchorNode()->GetLayoutObject()) {
+    return nullptr;
+  }
+  const InlineBox* box = ComputeInlineBoxPosition(position).inline_box;
+  if (!box)
+    return nullptr;
+  return &box->Root();
+}
+
 ContainerNode* HighestEditableRootOfNode(const Node& node) {
   return HighestEditableRoot(FirstPositionInOrBeforeNode(node));
 }
@@ -223,10 +234,9 @@
   if (!layout_object)
     return VisiblePosition();
 
-  const RootInlineBox* root = nullptr;
-  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
-  if (box) {
-    root = box->Root().PrevRootBox();
+  const RootInlineBox* root = ComputeContainingLineBox(visible_position);
+  if (root) {
+    root = root->PrevRootBox();
     // We want to skip zero height boxes.
     // This could happen in case it is a TrailingFloatsRootInlineBox.
     if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
@@ -238,15 +248,12 @@
         PreviousRootInlineBoxCandidatePosition(node, visible_position);
     if (position.IsNotNull()) {
       const VisiblePosition candidate = CreateVisiblePosition(position);
-      const InlineBox* inline_box =
-          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
-                                : nullptr;
-      if (!inline_box) {
+      root = ComputeContainingLineBox(candidate);
+      if (!root) {
         // TODO(editing-dev): Investigate if this is correct for null
         // |candidate|.
         return candidate;
       }
-      root = &inline_box->Root();
     }
   }
 
@@ -254,14 +261,13 @@
     // FIXME: Can be wrong for multi-column layout and with transforms.
     LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
         root, line_direction_point);
-    LineLayoutItem line_layout_item =
-        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
-            ->GetLineLayoutItem();
-    Node* node = line_layout_item.GetNode();
+    const LayoutObject* closest_leaf_child =
+        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p));
+    const Node* node = closest_leaf_child->GetNode();
     if (node && EditingIgnoresContent(*node))
       return VisiblePosition::InParentBeforeNode(*node);
     return CreateVisiblePosition(
-        line_layout_item.PositionForPoint(point_in_line));
+        closest_leaf_child->PositionForPoint(point_in_line));
   }
 
   // Could not find a previous line. This means we must already be on the first
@@ -293,10 +299,9 @@
   if (!layout_object)
     return VisiblePosition();
 
-  const RootInlineBox* root = nullptr;
-  const InlineBox* box = ComputeInlineBoxPosition(visible_position).inline_box;
-  if (box) {
-    root = box->Root().NextRootBox();
+  const RootInlineBox* root = ComputeContainingLineBox(visible_position);
+  if (root) {
+    root = root->NextRootBox();
     // We want to skip zero height boxes.
     // This could happen in case it is a TrailingFloatsRootInlineBox.
     if (!root || !root->LogicalHeight() || !root->FirstLeafChild())
@@ -312,15 +317,12 @@
         NextRootInlineBoxCandidatePosition(search_start_node, visible_position);
     if (position.IsNotNull()) {
       const VisiblePosition candidate = CreateVisiblePosition(position);
-      const InlineBox* inline_box =
-          candidate.IsNotNull() ? ComputeInlineBoxPosition(candidate).inline_box
-                                : nullptr;
-      if (!inline_box) {
+      root = ComputeContainingLineBox(candidate);
+      if (!root) {
         // TODO(editing-dev): Investigate if this is correct for null
         // |candidate|.
         return candidate;
       }
-      root = &inline_box->Root();
     }
   }
 
@@ -328,14 +330,13 @@
     // FIXME: Can be wrong for multi-column layout and with transforms.
     LayoutPoint point_in_line = AbsoluteLineDirectionPointToLocalPointInBlock(
         root, line_direction_point);
-    LineLayoutItem line_layout_item =
-        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p))
-            ->GetLineLayoutItem();
-    Node* node = line_layout_item.GetNode();
+    const LayoutObject* closest_leaf_child =
+        root->ClosestLeafChildForPoint(point_in_line, IsEditablePosition(p));
+    const Node* node = closest_leaf_child->GetNode();
     if (node && EditingIgnoresContent(*node))
       return VisiblePosition::InParentBeforeNode(*node);
     return CreateVisiblePosition(
-        line_layout_item.PositionForPoint(point_in_line));
+        closest_leaf_child->PositionForPoint(point_in_line));
   }
 
   // Could not find a next line. This means we must already be on the last line.
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
index 12d5f23..9937ec80b 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -322,9 +322,9 @@
 
     } else {
       worker_pool::PostTask(
-          FROM_HERE,
-          CrossThreadBind(&CanvasAsyncBlobCreator::EncodeImageOnEncoderThread,
-                          WrapCrossThreadPersistent(this), quality));
+          FROM_HERE, CrossThreadBindOnce(
+                         &CanvasAsyncBlobCreator::EncodeImageOnEncoderThread,
+                         WrapCrossThreadPersistent(this), quality));
     }
   } else {
     idle_task_status_ = kIdleTaskNotStarted;
diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third_party/blink/renderer/core/html/html_script_element.cc
index 1f67faa9..b667f998 100644
--- a/third_party/blink/renderer/core/html/html_script_element.cc
+++ b/third_party/blink/renderer/core/html/html_script_element.cc
@@ -239,7 +239,7 @@
     const AtomicString& nonce,
     const WTF::OrdinalNumber& context_line,
     const String& script_content) {
-  return GetDocument().GetContentSecurityPolicy()->AllowInline(
+  return GetDocument().GetContentSecurityPolicyForWorld()->AllowInline(
       ContentSecurityPolicy::InlineType::kScript, this, script_content, nonce,
       GetDocument().Url(), context_line);
 }
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc
index 58e4524..dc286d6 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -1774,8 +1774,8 @@
       ready_state_ = kHaveCurrentData;
   }
 
-  if (old_state > ready_state_maximum_)
-    ready_state_maximum_ = old_state;
+  if (new_state > ready_state_maximum_)
+    ready_state_maximum_ = new_state;
 
   if (network_state_ == kNetworkEmpty)
     return;
@@ -3372,13 +3372,9 @@
 }
 
 bool HTMLMediaElement::PotentiallyPlaying() const {
-  // "pausedToBuffer" means the media engine's rate is 0, but only because it
-  // had to stop playing when it ran out of buffered data. A movie in this state
-  // is "potentially playing", modulo the checks in couldPlayIfEnoughData().
-  bool paused_to_buffer =
-      ready_state_maximum_ >= kHaveFutureData && ready_state_ < kHaveFutureData;
-  return (paused_to_buffer || ready_state_ >= kHaveFutureData) &&
-         CouldPlayIfEnoughData();
+  // Once we've reached the metadata state the WebMediaPlayer is ready to accept
+  // play state changes.
+  return ready_state_ >= kHaveMetadata && CouldPlayIfEnoughData();
 }
 
 bool HTMLMediaElement::CouldPlayIfEnoughData() const {
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.cc b/third_party/blink/renderer/core/html/media/html_video_element.cc
index 311f3664..3912b67 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_video_element.cc
@@ -521,9 +521,10 @@
   if (!GetWebMediaPlayer())
     return false;
 
+  // The ready state maximum is used here instead of the current ready state
+  // since a frame is still available during a seek.
   return GetWebMediaPlayer()->HasVideo() &&
-         GetWebMediaPlayer()->GetReadyState() >=
-             WebMediaPlayer::kReadyStateHaveCurrentData;
+         ready_state_maximum_ >= kHaveCurrentData;
 }
 
 void HTMLVideoElement::webkitEnterFullscreen() {
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
index be5a82a..70230cf 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -1014,11 +1014,11 @@
       std::make_unique<ParsedOptions>(parsed_options);
   worker_pool::PostTask(
       FROM_HERE,
-      CrossThreadBind(&RasterizeImageOnBackgroundThread,
-                      WrapCrossThreadPersistent(resolver),
-                      std::move(paint_record), draw_dst_rect,
-                      !image->WouldTaintOrigin(),
-                      WTF::Passed(std::move(passed_parsed_options))));
+      CrossThreadBindOnce(&RasterizeImageOnBackgroundThread,
+                          WrapCrossThreadPersistent(resolver),
+                          std::move(paint_record), draw_dst_rect,
+                          !image->WouldTaintOrigin(),
+                          WTF::Passed(std::move(passed_parsed_options))));
   return promise;
 }
 
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
index a884b0a..fec9bcc 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
@@ -316,7 +316,7 @@
       Thread::Current()->GetTaskRunner();
   worker_pool::PostTask(
       FROM_HERE,
-      CrossThreadBind(
+      CrossThreadBindOnce(
           &ImageBitmapFactories::ImageBitmapLoader::DecodeImageOnDecoderThread,
           WrapCrossThreadPersistent(this), std::move(task_runner),
           WrapCrossThreadPersistent(array_buffer), options_->premultiplyAlpha(),
diff --git a/third_party/blink/renderer/core/layout/jank_tracker.cc b/third_party/blink/renderer/core/layout/jank_tracker.cc
index 24b5ed9b..372dfdb 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker.cc
+++ b/third_party/blink/renderer/core/layout/jank_tracker.cc
@@ -105,11 +105,13 @@
 JankTracker::JankTracker(LocalFrameView* frame_view)
     : frame_view_(frame_view),
       score_(0.0),
+      score_with_move_distance_(0.0),
       weighted_score_(0.0),
       timer_(frame_view->GetFrame().GetTaskRunner(TaskType::kInternalDefault),
              this,
              &JankTracker::TimerFired),
-      max_distance_(0.0) {}
+      frame_max_distance_(0.0),
+      overall_max_distance_(0.0) {}
 
 void JankTracker::AccumulateJank(const LayoutObject& source,
                                  const PaintLayer& painting_layer,
@@ -161,8 +163,8 @@
   }
 #endif
 
-  max_distance_ =
-      std::max(max_distance_, GetMoveDistance(old_rect, new_rect, source));
+  frame_max_distance_ = std::max(frame_max_distance_,
+                                 GetMoveDistance(old_rect, new_rect, source));
 
   IntRect visible_old_rect = RoundedIntRect(old_rect);
   visible_old_rect.Intersect(viewport);
@@ -262,6 +264,18 @@
 
   score_ += jank_fraction;
 
+  DCHECK_GT(frame_max_distance_, 0.0);
+  double move_distance_factor =
+      (frame_max_distance_ < viewport.Height())
+          ? double(frame_max_distance_) / double(viewport.Height())
+          : 1.0;
+  double jank_fraction_with_move_distance =
+      jank_fraction * move_distance_factor;
+
+  score_with_move_distance_ += jank_fraction_with_move_distance;
+
+  overall_max_distance_ = std::max(overall_max_distance_, frame_max_distance_);
+
   LocalFrame& frame = frame_view_->GetFrame();
 #if DCHECK_IS_ON()
   if (ShouldLog(frame)) {
@@ -272,10 +286,11 @@
   }
 #endif
 
-  TRACE_EVENT_INSTANT2("loading", "FrameLayoutJank", TRACE_EVENT_SCOPE_THREAD,
-                       "data",
-                       PerFrameTraceData(jank_fraction, granularity_scale),
-                       "frame", ToTraceValue(&frame));
+  TRACE_EVENT_INSTANT2(
+      "loading", "FrameLayoutJank", TRACE_EVENT_SCOPE_THREAD, "data",
+      PerFrameTraceData(jank_fraction, jank_fraction_with_move_distance,
+                        granularity_scale),
+      "frame", ToTraceValue(&frame));
 
   double weighted_jank_fraction = jank_fraction * SubframeWeightingFactor();
   if (weighted_jank_fraction > 0) {
@@ -299,6 +314,8 @@
     region_experimental_.Reset();
   else
     region_ = Region();
+
+  frame_max_distance_ = 0.0;
 }
 
 void JankTracker::NotifyInput(const WebInputEvent& event) {
@@ -333,11 +350,17 @@
 
 std::unique_ptr<TracedValue> JankTracker::PerFrameTraceData(
     double jank_fraction,
+    double jank_fraction_with_move_distance,
     double granularity_scale) const {
   auto value = std::make_unique<TracedValue>();
   value->SetDouble("jank_fraction", jank_fraction);
+  value->SetDouble("jank_fraction_with_move_distance",
+                   jank_fraction_with_move_distance);
   value->SetDouble("cumulative_score", score_);
-  value->SetDouble("max_distance", max_distance_);
+  value->SetDouble("cumulative_score_with_move_distance",
+                   score_with_move_distance_);
+  value->SetDouble("overall_max_distance", overall_max_distance_);
+  value->SetDouble("frame_max_distance", frame_max_distance_);
   if (RuntimeEnabledFeatures::JankTrackingSweepLineEnabled())
     RegionToTracedValue(region_experimental_, granularity_scale, *value);
   else
diff --git a/third_party/blink/renderer/core/layout/jank_tracker.h b/third_party/blink/renderer/core/layout/jank_tracker.h
index df0dddc..2d098bc 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker.h
+++ b/third_party/blink/renderer/core/layout/jank_tracker.h
@@ -39,7 +39,7 @@
   bool IsActive();
   double Score() const { return score_; }
   double WeightedScore() const { return weighted_score_; }
-  float MaxDistance() const { return max_distance_; }
+  float OverallMaxDistance() const { return overall_max_distance_; }
   void Dispose() { timer_.Stop(); }
 
  private:
@@ -50,6 +50,7 @@
   void TimerFired(TimerBase*) {}
   std::unique_ptr<TracedValue> PerFrameTraceData(
       double jank_fraction,
+      double jank_fraction_with_move_distance,
       double granularity_scale) const;
   double SubframeWeightingFactor() const;
 
@@ -59,6 +60,12 @@
   // The cumulative jank score for this LocalFrame, unweighted.
   double score_;
 
+  // The cumulative jank score for this LocalFrame, unweighted, with move
+  // distance applied. This is a temporary member needed to understand the
+  // impact of move distance on scores, and will be removed once analysis is
+  // complete.
+  double score_with_move_distance_;
+
   // The cumulative jank score for this LocalFrame, with each increase weighted
   // by the extent to which the LocalFrame visibly occupied the main frame at
   // the time the jank occurred (e.g. x0.5 if the subframe occupied half of the
@@ -74,8 +81,13 @@
   // Tracks the short period after an input event during which we ignore jank.
   TaskRunnerTimer<JankTracker> timer_;
 
-  // The maximum distance any layout object has moved in any frame.
-  float max_distance_;
+  // The maximum distance any layout object has moved in the current animation
+  // frame.
+  float frame_max_distance_;
+
+  // The maximum distance any layout object has moved, across all animation
+  // frames.
+  float overall_max_distance_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/jank_tracker_test.cc b/third_party/blink/renderer/core/layout/jank_tracker_test.cc
index 4f97a76..b5f40da9 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker_test.cc
+++ b/third_party/blink/renderer/core/layout/jank_tracker_test.cc
@@ -45,14 +45,14 @@
   )HTML");
 
   EXPECT_EQ(0.0, GetJankTracker().Score());
-  EXPECT_EQ(0.0, GetJankTracker().MaxDistance());
+  EXPECT_EQ(0.0, GetJankTracker().OverallMaxDistance());
 
   GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
                                                   AtomicString("top: 60px"));
   UpdateAllLifecyclePhases();
   // 300 * (100 + 60) / (default viewport size 800 * 600)
   EXPECT_FLOAT_EQ(0.1, GetJankTracker().Score());
-  EXPECT_FLOAT_EQ(60.0, GetJankTracker().MaxDistance());
+  EXPECT_FLOAT_EQ(60.0, GetJankTracker().OverallMaxDistance());
 }
 
 TEST_F(JankTrackerTest, GranularitySnapping) {
@@ -101,7 +101,7 @@
   GetDocument().getElementById("j")->setAttribute(
       html_names::kStyleAttr, AtomicString("width: 70px; left: 10px"));
   UpdateAllLifecyclePhases();
-  EXPECT_FLOAT_EQ(20.0, GetJankTracker().MaxDistance());
+  EXPECT_FLOAT_EQ(20.0, GetJankTracker().OverallMaxDistance());
 }
 
 TEST_F(JankTrackerTest, SmallMovementIgnored) {
@@ -262,7 +262,7 @@
 
   GetDocument().scrollingElement()->setScrollTop(100);
   EXPECT_EQ(0.0, GetJankTracker().Score());
-  EXPECT_EQ(0.0, GetJankTracker().MaxDistance());
+  EXPECT_EQ(0.0, GetJankTracker().OverallMaxDistance());
 
   GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
                                                   AtomicString("top: 60px"));
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 1ff1c9cc..b5bfa26f 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -2077,26 +2077,30 @@
   UpdateCursorImages(old_style ? old_style->Cursors() : nullptr,
                      new_style ? new_style->Cursors() : nullptr);
 
-  UpdateFirstLineImageObservers(old_style, new_style);
+  UpdateFirstLineImageObservers(new_style);
 }
 
 void LayoutObject::UpdateFirstLineImageObservers(
-    const ComputedStyle* old_style,
     const ComputedStyle* new_style) {
-  bool has_old_first_line_style =
-      old_style && old_style->HasPseudoStyle(kPseudoIdFirstLine);
   bool has_new_first_line_style =
       new_style && new_style->HasPseudoStyle(kPseudoIdFirstLine);
-  if (!has_old_first_line_style && !has_new_first_line_style)
+  if (!bitfields_.RegisteredAsFirstLineImageObserver() &&
+      !has_new_first_line_style)
     return;
 
+  using FirstLineStyleMap =
+      HashMap<const LayoutObject*, scoped_refptr<const ComputedStyle>>;
+  DEFINE_STATIC_LOCAL(FirstLineStyleMap, first_line_style_map, ());
+  DCHECK_EQ(bitfields_.RegisteredAsFirstLineImageObserver(),
+            first_line_style_map.Contains(this));
+  const auto* old_first_line_style =
+      bitfields_.RegisteredAsFirstLineImageObserver()
+          ? first_line_style_map.at(this)
+          : nullptr;
+
   // Don't call CacheFirstLineStyle() which will update the cache, because this
   // function can be called when the object has not been inserted into the tree
   // and we can't update the pseudo style cache which may depend on ancestors.
-  const auto* cached_old_first_line_style =
-      has_old_first_line_style
-          ? old_style->GetCachedPseudoStyle(kPseudoIdFirstLine)
-          : nullptr;
   const auto* cached_new_first_line_style =
       has_new_first_line_style
           ? new_style->GetCachedPseudoStyle(kPseudoIdFirstLine)
@@ -2110,13 +2114,26 @@
         !cached_new_first_line_style);
   }
 
-  if (cached_old_first_line_style || cached_new_first_line_style) {
-    UpdateFillImages(cached_old_first_line_style
-                         ? &cached_old_first_line_style->BackgroundLayers()
+  if (cached_new_first_line_style &&
+      !cached_new_first_line_style->HasBackgroundImage())
+    cached_new_first_line_style = nullptr;
+
+  if (old_first_line_style || cached_new_first_line_style) {
+    UpdateFillImages(old_first_line_style
+                         ? &old_first_line_style->BackgroundLayers()
                          : nullptr,
                      cached_new_first_line_style
                          ? &cached_new_first_line_style->BackgroundLayers()
                          : nullptr);
+    if (cached_new_first_line_style) {
+      bitfields_.SetRegisteredAsFirstLineImageObserver(true);
+      first_line_style_map.Set(this, cached_new_first_line_style);
+    } else {
+      bitfields_.SetRegisteredAsFirstLineImageObserver(false);
+      first_line_style_map.erase(this);
+    }
+    DCHECK_EQ(bitfields_.RegisteredAsFirstLineImageObserver(),
+              first_line_style_map.Contains(this));
   }
 }
 
@@ -3043,8 +3060,9 @@
   if (style_ && !IsText())
     UpdateImageObservers(style_.get(), nullptr);
 
-#if DCHECK_IS_ON()
   // We must have removed all image observers.
+  SECURITY_CHECK(!bitfields_.RegisteredAsFirstLineImageObserver());
+#if DCHECK_IS_ON()
   SECURITY_DCHECK(as_image_observer_count_ == 0u);
 #endif
 
@@ -3377,10 +3395,12 @@
     const ComputedStyle* style) {
   DCHECK(layout_object);
 
-  const LayoutObject* layout_object_for_first_line_style =
-      (layout_object->IsBeforeOrAfterContent() && layout_object->Parent())
-          ? layout_object->Parent()
-          : layout_object;
+  const LayoutObject* layout_object_for_first_line_style = layout_object;
+  if (layout_object->IsBeforeOrAfterContent()) {
+    if (!layout_object->Parent())
+      return nullptr;
+    layout_object_for_first_line_style = layout_object->Parent();
+  }
 
   if (layout_object_for_first_line_style->BehavesLikeBlockContainer()) {
     if (const LayoutBlock* first_line_block =
@@ -3451,8 +3471,7 @@
       bitfields_.PendingUpdateFirstLineImageObservers()) {
     // Update image observers now after we have updated the first line
     // style cache.
-    const_cast<LayoutObject*>(this)->UpdateFirstLineImageObservers(nullptr,
-                                                                   Style());
+    const_cast<LayoutObject*>(this)->UpdateFirstLineImageObservers(Style());
   }
   return cached_pseudo_style;
 }
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index 72382f6..c800e7fac 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -2628,8 +2628,7 @@
 
   void UpdateImageObservers(const ComputedStyle* old_style,
                             const ComputedStyle* new_style);
-  void UpdateFirstLineImageObservers(const ComputedStyle* old_style,
-                                     const ComputedStyle* new_style);
+  void UpdateFirstLineImageObservers(const ComputedStyle* new_style);
 
   void ApplyPseudoStyleChanges(const ComputedStyle* old_style);
   void ApplyFirstLineChanges(const ComputedStyle* old_style);
@@ -2762,6 +2761,7 @@
           is_effective_root_scroller_(false),
           is_global_root_scroller_(false),
           pending_update_first_line_image_observers_(false),
+          registered_as_first_line_image_observer_(false),
           is_html_legend_element_(false),
           has_non_collapsed_border_decoration_(false),
           positioned_state_(kIsStaticallyPositioned),
@@ -3015,6 +3015,10 @@
     // first line style before it is inserted into the tree.
     ADD_BOOLEAN_BITFIELD(pending_update_first_line_image_observers_,
                          PendingUpdateFirstLineImageObservers);
+    // Indicates whether this object has been added as a first line image
+    // observer.
+    ADD_BOOLEAN_BITFIELD(registered_as_first_line_image_observer_,
+                         RegisteredAsFirstLineImageObserver);
 
     // Whether this object's |Node| is a HTMLLegendElement. Used to increase
     // performance of |IsRenderedLegend| which is performance sensitive.
diff --git a/third_party/blink/renderer/core/layout/line/root_inline_box.cc b/third_party/blink/renderer/core/layout/line/root_inline_box.cc
index b574a9b..173c2525 100644
--- a/third_party/blink/renderer/core/layout/line/root_inline_box.cc
+++ b/third_party/blink/renderer/core/layout/line/root_inline_box.cc
@@ -22,6 +22,7 @@
 #include "third_party/blink/renderer/core/css/style_engine.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/editing/editing_utilities.h"
+#include "third_party/blink/renderer/core/layout/api/line_layout_api_shim.h"
 #include "third_party/blink/renderer/core/layout/api/line_layout_block_flow.h"
 #include "third_party/blink/renderer/core/layout/api/line_layout_item.h"
 #include "third_party/blink/renderer/core/layout/hit_test_result.h"
@@ -416,13 +417,14 @@
          HasEditableStyle(*leaf->GetLineLayoutItem().GetNode());
 }
 
-InlineBox* RootInlineBox::ClosestLeafChildForPoint(
+const LayoutObject* RootInlineBox::ClosestLeafChildForPoint(
     const LayoutPoint& point_in_contents,
     bool only_editable_leaves) const {
-  return ClosestLeafChildForLogicalLeftPosition(
+  InlineBox* closest_box = ClosestLeafChildForLogicalLeftPosition(
       Block().IsHorizontalWritingMode() ? point_in_contents.X()
                                         : point_in_contents.Y(),
       only_editable_leaves);
+  return LineLayoutAPIShim::LayoutObjectFrom(closest_box->GetLineLayoutItem());
 }
 
 InlineBox* RootInlineBox::ClosestLeafChildForLogicalLeftPosition(
diff --git a/third_party/blink/renderer/core/layout/line/root_inline_box.h b/third_party/blink/renderer/core/layout/line/root_inline_box.h
index 9540008..a5660d7 100644
--- a/third_party/blink/renderer/core/layout/line/root_inline_box.h
+++ b/third_party/blink/renderer/core/layout/line/root_inline_box.h
@@ -150,8 +150,8 @@
 
   LineLayoutBlockFlow Block() const;
 
-  InlineBox* ClosestLeafChildForPoint(const LayoutPoint&,
-                                      bool only_editable_leaves) const;
+  const LayoutObject* ClosestLeafChildForPoint(const LayoutPoint&,
+                                               bool only_editable_leaves) const;
   InlineBox* ClosestLeafChildForLogicalLeftPosition(
       LayoutUnit,
       bool only_editable_leaves = false) const;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index 3f5c0cda..78ef986 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -349,6 +349,7 @@
   // Even if we have something in-flow, it may just be empty items that
   // shouldn't trigger creation of a line. Exit now if that's the case.
   if (line_info->IsEmptyLine()) {
+    container_builder_.SetIsEmptyBlock();
     container_builder_.SetIsEmptyLineBox();
     container_builder_.SetBaseDirection(line_info->BaseDirection());
     container_builder_.AddChildren(line_box_);
@@ -569,9 +570,8 @@
   bool is_empty_inline = Node().IsEmptyInline();
 
   LayoutUnit bfc_block_offset = line_info.BfcOffset().block_offset;
-  if (is_empty_inline && ConstraintSpace().FloatsBfcBlockOffset()) {
-    bfc_block_offset = *ConstraintSpace().FloatsBfcBlockOffset();
-  }
+  if (is_empty_inline && ConstraintSpace().ForcedBfcBlockOffset())
+    bfc_block_offset = *ConstraintSpace().ForcedBfcBlockOffset();
 
   LayoutUnit bfc_line_offset = container_builder_.BfcLineOffset();
 
@@ -917,6 +917,11 @@
       // TODO(ikilpatrick): Move this into ng_block_layout_algorithm.
       container_builder_.SetBlockSize(
           ComputeContentSize(line_info, exclusion_space, line_height));
+
+      // As we aren't an empty inline we should have correctly placed all
+      // our adjoining floats, and shouldn't propagate this information
+      // to siblings.
+      container_builder_.ResetAdjoiningFloatTypes();
     }
     break;
   }
@@ -957,13 +962,13 @@
             ? kFloatTypeLeft
             : kFloatTypeRight);
 
-    // If we are an empty inline, and don't have the special floats BFC
+    // If we are an empty inline, and don't have the special forced BFC
     // block-offset yet, there is no way to position any floats.
-    if (is_empty_inline && !ConstraintSpace().FloatsBfcBlockOffset())
+    if (is_empty_inline && !ConstraintSpace().ForcedBfcBlockOffset())
       continue;
 
     LayoutUnit origin_bfc_block_offset =
-        is_empty_inline ? *ConstraintSpace().FloatsBfcBlockOffset()
+        is_empty_inline ? *ConstraintSpace().ForcedBfcBlockOffset()
                         : ConstraintSpace().BfcOffset().block_offset;
 
     NGPositionedFloat positioned_float = PositionFloat(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index 316199d..5d8417640 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -71,8 +71,7 @@
 bool ApplyClearance(const NGConstraintSpace& constraint_space,
                     LayoutUnit* bfc_block_offset) {
   if (constraint_space.HasClearanceOffset() &&
-      (*bfc_block_offset < constraint_space.ClearanceOffset() ||
-       constraint_space.ShouldForceClearance())) {
+      *bfc_block_offset < constraint_space.ClearanceOffset()) {
     *bfc_block_offset = constraint_space.ClearanceOffset();
     return true;
   }
@@ -82,32 +81,21 @@
 // Returns if the resulting fragment should be considered an "empty block".
 // There is special casing for fragments like this, e.g. margins "collapse
 // through", etc.
-inline bool IsEmptyBlock(bool is_new_fc, const NGLayoutResult& layout_result) {
-  // TODO(ikilpatrick): This should be a DCHECK.
-  if (is_new_fc)
-    return false;
-
-  if (layout_result.BfcBlockOffset())
-    return false;
-
+inline bool IsEmptyBlock(const NGLayoutResult& layout_result) {
 #if DCHECK_IS_ON()
-  const NGPhysicalFragment& physical_fragment =
-      layout_result.PhysicalFragment();
-  // This just checks that the fragments block size is actually zero. We can
-  // assume that its in the same writing mode as its parent, as a different
-  // writing mode child will be caught by the is_new_fc check.
-  NGFragment fragment(physical_fragment.Style().GetWritingMode(),
-                      physical_fragment);
-  DCHECK_EQ(LayoutUnit(), fragment.BlockSize());
+  if (layout_result.IsEmptyBlock()) {
+    const NGPhysicalFragment& physical_fragment =
+        layout_result.PhysicalFragment();
+    // This just checks that the fragments block size is actually zero. We can
+    // assume that its in the same writing mode as its parent, as a different
+    // writing mode child will be caught by the is_new_fc check.
+    NGFragment fragment(physical_fragment.Style().GetWritingMode(),
+                        physical_fragment);
+    DCHECK_EQ(LayoutUnit(), fragment.BlockSize());
+  }
 #endif
 
-  return true;
-}
-
-// As above; for convenience if you have a child_space.
-inline bool IsEmptyBlock(const NGConstraintSpace& child_space,
-                         const NGLayoutResult& layout_result) {
-  return IsEmptyBlock(child_space.IsNewFormattingContext(), layout_result);
+  return layout_result.IsEmptyBlock();
 }
 
 LayoutUnit LogicalFromBfcLineOffset(LayoutUnit child_bfc_line_offset,
@@ -333,7 +321,7 @@
   LayoutUnit inline_size = container_builder_.Size().inline_size;
   TextDirection direction = ConstraintSpace().Direction();
 
-  if (child_bfc_block_offset) {
+  if (child_bfc_block_offset && container_builder_.BfcBlockOffset()) {
     return LogicalFromBfcOffsets(
         {child_bfc_line_offset, *child_bfc_block_offset}, ContainerBfcOffset(),
         fragment.InlineSize(), inline_size, direction);
@@ -343,10 +331,9 @@
       child_bfc_line_offset, container_builder_.BfcLineOffset(),
       fragment.InlineSize(), inline_size, direction);
 
-  // If we've reached here, both the child and the current layout don't have a
-  // BFC block offset yet. Children in this situation are always placed at a
-  // logical block offset of 0.
-  DCHECK(!container_builder_.BfcBlockOffset());
+  // If we've reached here, either the parent, or the child don't have a BFC
+  // block-offset yet. Children in this situation are always placed at a
+  // logical block-offset of zero.
   return {inline_offset, LayoutUnit()};
 }
 
@@ -397,7 +384,7 @@
     // offset is updated.
     abort_when_bfc_block_offset_updated_ = true;
 
-    container_builder_.AddAdjoiningFloatTypes(float_types);
+    container_builder_.SetAdjoiningFloatTypes(float_types);
   }
 
   // If we are resuming from a break token our start border and padding is
@@ -407,7 +394,7 @@
 
   NGPreviousInflowPosition previous_inflow_position = {
       LayoutUnit(), ConstraintSpace().MarginStrut(),
-      /* empty_block_affected_by_clearance */ false};
+      /* empty_block_had_clearance */ false};
 
   // Do not collapse margins between parent and its child if:
   //
@@ -459,7 +446,7 @@
   if (!container_builder_.BfcBlockOffset()) {
     // New formatting contexts, and where we have an empty block affected by
     // clearance should already have their BFC block offset resolved.
-    DCHECK(!previous_inflow_position.empty_block_affected_by_clearance);
+    DCHECK(!previous_inflow_position.empty_block_had_clearance);
     DCHECK(!ConstraintSpace().IsNewFormattingContext());
   }
 #endif
@@ -569,7 +556,7 @@
   //  - We are a new formatting context.
   // Additionally this fragment produces no end margin strut.
   if (border_scrollbar_padding_.block_end ||
-      previous_inflow_position->empty_block_affected_by_clearance ||
+      previous_inflow_position->empty_block_had_clearance ||
       ConstraintSpace().IsNewFormattingContext()) {
     // If we are a quirky container, we ignore any quirky margins and
     // just consider normal margins to extend our size.  Other UAs
@@ -665,6 +652,25 @@
   container_builder_.SetEndMarginStrut(end_margin_strut);
   container_builder_.SetIntrinsicBlockSize(intrinsic_block_size_);
 
+  if (container_builder_.BfcBlockOffset()) {
+    // If we know our BFC block-offset we should have correctly placed all
+    // adjoining floats, and shouldn't propagate this information to siblings.
+    container_builder_.ResetAdjoiningFloatTypes();
+  } else {
+    // If we don't know our BFC block-offset yet, we know that for
+    // margin-collapsing purposes we are an empty-block.
+    container_builder_.SetIsEmptyBlock();
+
+    // If we've been forced at a particular BFC block-offset, (either from
+    // clearance past adjoining floats, or a re-layout), we can safely set our
+    // BFC block-offset now.
+    if (ConstraintSpace().ForcedBfcBlockOffset()) {
+      DCHECK(unpositioned_floats_.IsEmpty());
+      container_builder_.SetBfcBlockOffset(
+          *ConstraintSpace().ForcedBfcBlockOffset());
+    }
+  }
+
   // We only finalize for fragmentation if the fragment has a BFC block offset.
   // This may occur with a zero block size fragment. We need to know the BFC
   // block offset to determine where the fragmentation line is relative to us.
@@ -833,14 +839,14 @@
 
   // No need to postpone the positioning if we know the correct offset.
   if (container_builder_.BfcBlockOffset() ||
-      ConstraintSpace().FloatsBfcBlockOffset()) {
+      ConstraintSpace().ForcedBfcBlockOffset()) {
     // Adjust origin point to the margins of the last child.
     // Example: <div style="margin-bottom: 20px"><float></div>
     //          <div style="margin-bottom: 30px"></div>
     LayoutUnit origin_block_offset =
         container_builder_.BfcBlockOffset()
             ? NextBorderEdge(previous_inflow_position)
-            : *ConstraintSpace().FloatsBfcBlockOffset();
+            : *ConstraintSpace().ForcedBfcBlockOffset();
     PositionPendingFloats(origin_block_offset);
   }
 }
@@ -857,11 +863,9 @@
 
   const ComputedStyle& child_style = child.Style();
   const TextDirection direction = ConstraintSpace().Direction();
-  bool has_clearance_past_adjoining_floats = HasClearancePastAdjoiningFloats(
-      container_builder_.AdjoiningFloatTypes(), child_style, Style());
-  NGInflowChildData child_data = ComputeChildData(
-      *previous_inflow_position, child, child_break_token,
-      has_clearance_past_adjoining_floats, /* is_new_fc */ true);
+  NGInflowChildData child_data =
+      ComputeChildData(*previous_inflow_position, child, child_break_token,
+                       /* is_new_fc */ true);
 
   LayoutUnit child_origin_line_offset =
       ConstraintSpace().BfcOffset().line_offset +
@@ -895,11 +899,22 @@
   if (!container_builder_.BfcBlockOffset()) {
     had_pending_floats = !unpositioned_floats_.IsEmpty();
 
-    if (ConstraintSpace().FloatsBfcBlockOffset()) {
+    // If this node, or an arbitrary ancestor had clearance past adjoining
+    // floats, we consider the margin "separated". We should *never* attempt to
+    // re-resolve the BFC block-offset in this case.
+    bool has_clearance_past_adjoining_floats =
+        ConstraintSpace().AncestorHasClearancePastAdjoiningFloats() ||
+        HasClearancePastAdjoiningFloats(
+            container_builder_.AdjoiningFloatTypes(), child_style, Style());
+
+    if (has_clearance_past_adjoining_floats) {
+      child_bfc_offset_estimate = NextBorderEdge(*previous_inflow_position);
+      child_margin_got_separated = true;
+    } else if (ConstraintSpace().ForcedBfcBlockOffset()) {
       // This is not the first time we're here. We already have a suggested BFC
       // block offset.
       bfc_offset_already_resolved = true;
-      child_bfc_offset_estimate = *ConstraintSpace().FloatsBfcBlockOffset();
+      child_bfc_offset_estimate = *ConstraintSpace().ForcedBfcBlockOffset();
       // We require that the BFC block offset be the one we'd get with either
       // margins adjoining or margins separated. Anything else is a bug.
       DCHECK(child_bfc_offset_estimate == adjoining_bfc_offset_estimate ||
@@ -908,9 +923,6 @@
       // margin strut or not.
       child_margin_got_separated =
           child_bfc_offset_estimate != adjoining_bfc_offset_estimate;
-    } else if (has_clearance_past_adjoining_floats) {
-      child_bfc_offset_estimate = NextBorderEdge(*previous_inflow_position);
-      child_margin_got_separated = true;
     }
 
     // The BFC block offset of this container gets resolved because of this
@@ -962,8 +974,15 @@
       // re-resolve the BFC block offset without the child's margin.
       LayoutUnit old_offset = *container_builder_.BfcBlockOffset();
       container_builder_.ResetBfcBlockOffset();
+
+      // Re-resolving the BFC block-offset with a different "forced" BFC
+      // block-offset is only safe if an ancestor *never* had clearance past
+      // adjoining floats.
+      DCHECK(!ConstraintSpace().AncestorHasClearancePastAdjoiningFloats());
       ResolveBfcBlockOffset(previous_inflow_position,
-                            non_adjoining_bfc_offset_estimate);
+                            non_adjoining_bfc_offset_estimate,
+                            /* forced_bfc_block_offset */ base::nullopt);
+
       if ((bfc_offset_already_resolved || had_pending_floats) &&
           old_offset != *container_builder_.BfcBlockOffset()) {
         // The first BFC block offset resolution turned out to be wrong, and we
@@ -1064,7 +1083,7 @@
   *previous_inflow_position = ComputeInflowPosition(
       *previous_inflow_position, child, child_data,
       child_bfc_offset.block_offset, logical_offset, *layout_result, fragment,
-      /* empty_block_affected_by_clearance */ false);
+      /* empty_block_had_clearance */ false);
 
   return true;
 }
@@ -1138,8 +1157,8 @@
         (opportunity.rect.InlineSize() - inline_negative_margin + inline_margin)
             .ClampNegativeToZero(),
         child_available_size_.block_size};
-    NGConstraintSpace child_space =
-        CreateConstraintSpaceForChild(child, child_data, child_available_size);
+    NGConstraintSpace child_space = CreateConstraintSpaceForChild(
+        child, child_data, child_available_size, /* is_new_fc */ true);
 
     // All formatting context roots (like this child) should start with an empty
     // exclusion space.
@@ -1193,10 +1212,12 @@
   bool is_non_empty_inline =
       child_inline_node && !child_inline_node->IsEmptyInline();
   bool has_clearance_past_adjoining_floats =
-      child.IsBlock() &&
+      !container_builder_.BfcBlockOffset() && child.IsBlock() &&
       HasClearancePastAdjoiningFloats(container_builder_.AdjoiningFloatTypes(),
                                       child.Style(), Style());
 
+  base::Optional<LayoutUnit> forced_bfc_block_offset;
+
   // If we can separate the previous margin strut from what is to follow, do
   // that. Then we're able to resolve *our* BFC block offset and position any
   // pending floats. There are two situations where this is necessary:
@@ -1208,14 +1229,25 @@
   if (has_clearance_past_adjoining_floats || is_non_empty_inline) {
     if (!ResolveBfcBlockOffset(previous_inflow_position))
       return false;
+
+    // If we had clearance past any adjoining floats, we already know where the
+    // child is going to be (the child's margins won't have any effect).
+    //
+    // Set the forced BFC block-offset to the appropriate clearance offset to
+    // force this placement of this child.
+    if (has_clearance_past_adjoining_floats) {
+      forced_bfc_block_offset = exclusion_space_.ClearanceOffset(
+          ResolvedClear(child.Style(), Style()));
+    }
   }
 
   // Perform layout on the child.
-  NGInflowChildData child_data = ComputeChildData(
-      *previous_inflow_position, child, child_break_token,
-      has_clearance_past_adjoining_floats, /* is_new_fc */ false);
-  NGConstraintSpace child_space =
-      CreateConstraintSpaceForChild(child, child_data, child_available_size_);
+  NGInflowChildData child_data =
+      ComputeChildData(*previous_inflow_position, child, child_break_token,
+                       /* is_new_fc */ false);
+  NGConstraintSpace child_space = CreateConstraintSpaceForChild(
+      child, child_data, child_available_size_, /* is_new_fc */ false,
+      forced_bfc_block_offset, has_clearance_past_adjoining_floats);
   scoped_refptr<const NGLayoutResult> layout_result =
       child.Layout(child_space, child_break_token, inline_child_layout_context);
 
@@ -1223,6 +1255,7 @@
   // above, the rest of this function is continued within |FinishInflow|.
   // However it should be read as one function.
   return FinishInflow(child, child_break_token, child_space,
+                      has_clearance_past_adjoining_floats,
                       std::move(layout_result), &child_data,
                       previous_inflow_position, inline_child_layout_context,
                       previous_inline_break_token);
@@ -1232,6 +1265,7 @@
     NGLayoutInputNode child,
     const NGBreakToken* child_break_token,
     const NGConstraintSpace& child_space,
+    bool has_clearance_past_adjoining_floats,
     scoped_refptr<const NGLayoutResult> layout_result,
     NGInflowChildData* child_data,
     NGPreviousInflowPosition* previous_inflow_position,
@@ -1239,6 +1273,7 @@
     scoped_refptr<const NGInlineBreakToken>* previous_inline_break_token) {
   base::Optional<LayoutUnit> child_bfc_block_offset =
       layout_result->BfcBlockOffset();
+
   // TODO(layout-dev): A more optimal version of this is to set
   // relayout_child_when_bfc_resolved only if the child tree itself _added_ any
   // floats that it failed to position. Currently, we risk relaying out the
@@ -1246,39 +1281,55 @@
   // distinction.
   bool relayout_child_when_bfc_resolved =
       layout_result->AdjoiningFloatTypes() && !child_bfc_block_offset &&
-      !child_space.FloatsBfcBlockOffset();
-  bool is_empty_block = IsEmptyBlock(child_space, *layout_result);
+      !child_space.ForcedBfcBlockOffset();
 
-  bool has_clearance = layout_result->IsPushedByFloats();
+  bool is_empty_block = IsEmptyBlock(*layout_result);
 
-  // A child may have aborted its layout if it resolved its BFC block offset.
-  // If we don't have a BFC block offset yet, we need to propagate the abortion
-  // up to our parent.
+  // Only non-empty children can be pushed by floats in this way.
+  bool non_empty_block_had_clearance = layout_result->IsPushedByFloats();
+  DCHECK(!non_empty_block_had_clearance || !is_empty_block);
+
+  // A child may have aborted its layout if it resolved its BFC block-offset.
+  // If we don't have a BFC block-offset yet, we need to propagate the abort
+  // signal up to our parent.
   if (layout_result->Status() == NGLayoutResult::kBfcBlockOffsetResolved &&
       !container_builder_.BfcBlockOffset()) {
-    // There's no need to do anything apart from resolving the BFC block offset
+    // There's no need to do anything apart from resolving the BFC block-offset
     // here, so make sure that it aborts before trying to position floats or
-    // anything like that, which would just be waste of time. This is simply
-    // propagating an abort up to a node which is able to restart the layout (a
-    // node that has resolved its BFC block offset).
+    // anything like that, which would just be waste of time.
+    //
+    // This is simply propagating an abort up to a node which is able to
+    // restart the layout (a node that has resolved its BFC block-offset).
     DCHECK(child_bfc_block_offset);
     abort_when_bfc_block_offset_updated_ = true;
-    ResolveBfcBlockOffset(previous_inflow_position,
-                          has_clearance
-                              ? NextBorderEdge(*previous_inflow_position)
-                              : *child_bfc_block_offset);
+
+    LayoutUnit bfc_block_offset = *child_bfc_block_offset;
+
+    if (non_empty_block_had_clearance) {
+      // If the child has the same clearance-offset as ourselves it means that
+      // we should *also* resolve ourselves at that offset, (and we also have
+      // been pushed by floats).
+      if (ConstraintSpace().ClearanceOffset() == child_space.ClearanceOffset())
+        container_builder_.SetIsPushedByFloats();
+      else
+        bfc_block_offset = NextBorderEdge(*previous_inflow_position);
+    }
+
+    ResolveBfcBlockOffset(previous_inflow_position, bfc_block_offset);
     return false;
   }
 
   // We have special behaviour for an empty block which gets pushed down due to
-  // clearance, see comment inside ComputeInflowPosition.
-  bool empty_block_affected_by_clearance = false;
+  // clearance, see comment inside |ComputeInflowPosition|.
+  bool empty_block_had_clearance =
+      is_empty_block && has_clearance_past_adjoining_floats;
 
   // We try and position the child within the block formatting context. This
   // may cause our BFC block offset to be resolved, in which case we should
   // abort our layout if needed.
   if (!child_bfc_block_offset) {
-    if (!has_clearance && child_space.HasClearanceOffset() &&
+    DCHECK(is_empty_block);
+    if (child_space.HasClearanceOffset() &&
         child.Style().Clear() != EClear::kNone) {
       // This is an empty block child that we collapsed through, so we have to
       // detect clearance manually. See if the child's hypothetical border edge
@@ -1286,12 +1337,14 @@
       // before it.
       LayoutUnit child_block_offset_estimate =
           BfcBlockOffset() + layout_result->EndMarginStrut().Sum();
-      if (child_block_offset_estimate < child_space.ClearanceOffset() ||
-          child_space.ShouldForceClearance())
-        has_clearance = empty_block_affected_by_clearance = true;
+      if (child_block_offset_estimate < child_space.ClearanceOffset())
+        empty_block_had_clearance = true;
     }
   }
-  if (has_clearance) {
+
+  bool child_had_clearance =
+      empty_block_had_clearance || non_empty_block_had_clearance;
+  if (child_had_clearance) {
     // The child has clearance. Clearance inhibits margin collapsing and acts as
     // spacing before the block-start margin of the child. Our BFC block offset
     // is therefore resolvable, and if it hasn't already been resolved, we'll
@@ -1299,27 +1352,34 @@
     if (!ResolveBfcBlockOffset(previous_inflow_position))
       return false;
   }
+
   if (!child_bfc_block_offset) {
     DCHECK(is_empty_block);
+
     // Layout wasn't able to determine the BFC block offset of the child. This
     // has to mean that the child is empty (block-size-wise).
     if (container_builder_.BfcBlockOffset()) {
       // Since we know our own BFC block offset, though, we can calculate that
       // of the child as well.
-      child_bfc_block_offset = PositionEmptyChildWithParentBfc(
+      child_bfc_block_offset = PositionEmptyBlockWithParentBfc(
           child, child_space, *child_data, *layout_result);
     }
-  } else if (!has_clearance) {
+  } else if (!child_had_clearance) {
     // We shouldn't have any pending floats here, since an in-flow child found
     // its BFC block offset.
     DCHECK(unpositioned_floats_.IsEmpty());
 
-    // The child's BFC block offset is known, and since there's no clearance,
-    // this container will get the same offset, unless it has already been
-    // resolved.
-    if (!ResolveBfcBlockOffset(previous_inflow_position,
-                               *child_bfc_block_offset))
-      return false;
+    // Only non-empty children are allowed resolve the BFC block-offset. We
+    // check the BFC block-offset at the end of layout determine if this
+    // fragment is empty.
+    if (!is_empty_block) {
+      // The child's BFC block offset is known, and since there's no clearance,
+      // this container will get the same offset, unless it has already been
+      // resolved.
+      if (!ResolveBfcBlockOffset(previous_inflow_position,
+                                 *child_bfc_block_offset))
+        return false;
+    }
   }
 
   // We need to re-layout a child if it was affected by clearance in order to
@@ -1337,9 +1397,9 @@
   // relayout with an empty incoming margin strut.
   //
   // The resulting margin strut in the above example will be {40, -30}. See
-  // ComputeInflowPosition for how this end margin strut is used.
-  bool empty_block_affected_by_clearance_needs_relayout = false;
-  if (empty_block_affected_by_clearance) {
+  // |ComputeInflowPosition| for how this end margin strut is used.
+  bool empty_block_had_clearance_needs_relayout = false;
+  if (empty_block_had_clearance) {
     NGMarginStrut margin_strut;
     margin_strut.Append(child_data->margins.block_start,
                         child.Style().HasMarginBeforeQuirk());
@@ -1348,7 +1408,7 @@
     // previous one.
     if (child_data->margin_strut != margin_strut) {
       child_data->margin_strut = margin_strut;
-      empty_block_affected_by_clearance_needs_relayout = true;
+      empty_block_had_clearance_needs_relayout = true;
     }
   }
 
@@ -1358,10 +1418,11 @@
   //  - It was affected by clearance.
   if ((layout_result->Status() == NGLayoutResult::kBfcBlockOffsetResolved ||
        relayout_child_when_bfc_resolved ||
-       empty_block_affected_by_clearance_needs_relayout) &&
+       empty_block_had_clearance_needs_relayout) &&
       child_bfc_block_offset) {
     NGConstraintSpace new_child_space = CreateConstraintSpaceForChild(
-        child, *child_data, child_available_size_, child_bfc_block_offset);
+        child, *child_data, child_available_size_, /* is_new_fc */ false,
+        child_bfc_block_offset);
     layout_result = child.Layout(new_child_space, child_break_token,
                                  inline_child_layout_context);
 
@@ -1374,7 +1435,8 @@
       child_bfc_block_offset = layout_result->BfcBlockOffset();
       DCHECK(child_bfc_block_offset);
       new_child_space = CreateConstraintSpaceForChild(
-          child, *child_data, child_available_size_, child_bfc_block_offset);
+          child, *child_data, child_available_size_, /* is_new_fc */ false,
+          child_bfc_block_offset);
       layout_result = child.Layout(new_child_space, child_break_token,
                                    inline_child_layout_context);
     }
@@ -1383,9 +1445,15 @@
     relayout_child_when_bfc_resolved = false;
   }
 
-  // It is now safe to update our version of the exclusion space.
+  // It is now safe to update our version of the exclusion space, and any
+  // propagated adjoining floats.
   exclusion_space_ = layout_result->ExclusionSpace();
 
+  // Only empty-blocks should have adjoining floats.
+  DCHECK(!layout_result->AdjoiningFloatTypes() || is_empty_block);
+  container_builder_.SetAdjoiningFloatTypes(
+      layout_result->AdjoiningFloatTypes());
+
   // If we don't know our BFC block offset yet, and the child stumbled into
   // something that needs it (unable to position floats when the BFC block
   // offset is unknown), we need abort layout once we manage to resolve it, and
@@ -1425,11 +1493,6 @@
 
   PositionOrPropagateListMarker(*layout_result, &logical_offset);
 
-  if (is_empty_block && !container_builder_.BfcBlockOffset()) {
-    container_builder_.AddAdjoiningFloatTypes(
-        layout_result->AdjoiningFloatTypes());
-  }
-
   container_builder_.AddChild(physical_fragment, logical_offset);
   if (child.IsBlock())
     container_builder_.PropagateBreak(*layout_result);
@@ -1451,8 +1514,7 @@
 
   *previous_inflow_position = ComputeInflowPosition(
       *previous_inflow_position, child, *child_data, child_bfc_block_offset,
-      logical_offset, *layout_result, fragment,
-      empty_block_affected_by_clearance);
+      logical_offset, *layout_result, fragment, empty_block_had_clearance);
 
   *previous_inline_break_token =
       child.IsInline() ? To<NGInlineBreakToken>(physical_fragment.BreakToken())
@@ -1465,7 +1527,6 @@
     const NGPreviousInflowPosition& previous_inflow_position,
     NGLayoutInputNode child,
     const NGBreakToken* child_break_token,
-    bool force_clearance,
     bool is_new_fc) {
   DCHECK(child);
   DCHECK(!child.IsFloating());
@@ -1500,8 +1561,7 @@
           margins.LineLeft(ConstraintSpace().Direction()),
       BfcBlockOffset() + logical_block_offset};
 
-  return {child_bfc_offset,       margin_strut,    margins,
-          margins_fully_resolved, force_clearance, is_new_fc};
+  return {child_bfc_offset, margin_strut, margins, margins_fully_resolved};
 }
 
 NGPreviousInflowPosition NGBlockLayoutAlgorithm::ComputeInflowPosition(
@@ -1512,17 +1572,17 @@
     const LogicalOffset& logical_offset,
     const NGLayoutResult& layout_result,
     const NGFragment& fragment,
-    bool empty_block_affected_by_clearance) {
+    bool empty_block_had_clearance) {
   // Determine the child's end logical offset, for the next child to use.
   LayoutUnit logical_block_offset;
 
-  bool is_empty_block = IsEmptyBlock(child_data.is_new_fc, layout_result);
+  bool is_empty_block = IsEmptyBlock(layout_result);
   if (is_empty_block) {
     // The default behaviour for empty blocks is they just pass through the
     // previous inflow position.
     logical_block_offset = previous_inflow_position.logical_block_offset;
 
-    if (empty_block_affected_by_clearance) {
+    if (empty_block_had_clearance) {
       // If there's clearance, we must have applied that by now and thus
       // resolved our BFC block offset.
       DCHECK(container_builder_.BfcBlockOffset());
@@ -1603,21 +1663,20 @@
   // </div>
   // In the above case #container's size will depend on the end margin strut of
   // #another-zero, even though usually it wouldn't.
-  bool empty_or_sibling_empty_affected_by_clearance =
-      empty_block_affected_by_clearance ||
-      (previous_inflow_position.empty_block_affected_by_clearance &&
-       is_empty_block);
+  bool empty_or_sibling_empty_had_clearance =
+      empty_block_had_clearance ||
+      (previous_inflow_position.empty_block_had_clearance && is_empty_block);
 
   return {logical_block_offset, margin_strut,
-          empty_or_sibling_empty_affected_by_clearance};
+          empty_or_sibling_empty_had_clearance};
 }
 
-LayoutUnit NGBlockLayoutAlgorithm::PositionEmptyChildWithParentBfc(
+LayoutUnit NGBlockLayoutAlgorithm::PositionEmptyBlockWithParentBfc(
     const NGLayoutInputNode& child,
     const NGConstraintSpace& child_space,
     const NGInflowChildData& child_data,
     const NGLayoutResult& layout_result) const {
-  DCHECK(IsEmptyBlock(child_space, layout_result));
+  DCHECK(IsEmptyBlock(layout_result));
 
   // The child must be an in-flow zero-block-size fragment, use its end margin
   // strut for positioning.
@@ -1990,14 +2049,16 @@
     const NGLayoutInputNode child,
     const NGInflowChildData& child_data,
     const LogicalSize child_available_size,
-    const base::Optional<LayoutUnit> floats_bfc_block_offset) {
+    bool is_new_fc,
+    const base::Optional<LayoutUnit> forced_bfc_block_offset,
+    bool has_clearance_past_adjoining_floats) {
   const ComputedStyle& style = Style();
   const ComputedStyle& child_style = child.Style();
   WritingMode child_writing_mode =
       child.IsInline() ? style.GetWritingMode() : child_style.GetWritingMode();
 
   NGConstraintSpaceBuilder builder(ConstraintSpace(), child_writing_mode,
-                                   child_data.is_new_fc);
+                                   is_new_fc);
   SetOrthogonalFallbackInlineSizeIfNeeded(Style(), child, &builder);
 
   if (!IsParallelWritingMode(ConstraintSpace().GetWritingMode(),
@@ -2022,13 +2083,22 @@
   builder.SetBfcOffset(child_data.bfc_offset_estimate)
       .SetMarginStrut(child_data.margin_strut);
 
-  if (!container_builder_.BfcBlockOffset() &&
-      ConstraintSpace().FloatsBfcBlockOffset()) {
-    builder.SetFloatsBfcBlockOffset(*ConstraintSpace().FloatsBfcBlockOffset());
-  }
+  bool has_bfc_block_offset = container_builder_.BfcBlockOffset().has_value();
 
-  if (floats_bfc_block_offset)
-    builder.SetFloatsBfcBlockOffset(floats_bfc_block_offset);
+  // Propagate the |NGConstraintSpace::ForcedBfcBlockOffset| down to our
+  // children.
+  if (!has_bfc_block_offset && ConstraintSpace().ForcedBfcBlockOffset())
+    builder.SetForcedBfcBlockOffset(*ConstraintSpace().ForcedBfcBlockOffset());
+  if (forced_bfc_block_offset)
+    builder.SetForcedBfcBlockOffset(forced_bfc_block_offset);
+
+  // Propagate the |NGConstraintSpace::AncestorHasClearancePastAdjoiningFloats|
+  // flag down to our children.
+  if (!has_bfc_block_offset &&
+      ConstraintSpace().AncestorHasClearancePastAdjoiningFloats())
+    builder.SetAncestorHasClearancePastAdjoiningFloats();
+  if (has_clearance_past_adjoining_floats)
+    builder.SetAncestorHasClearancePastAdjoiningFloats();
 
   LayoutUnit clearance_offset = ConstraintSpace().IsNewFormattingContext()
                                     ? LayoutUnit::Min()
@@ -2049,15 +2119,10 @@
   }
   builder.SetClearanceOffset(clearance_offset);
 
-  // If we were told to force clearance, we need to propagate this down to our
-  // children if we haven't resolved our BFC-block-offset yet.
-  if (child_data.force_clearance || (!container_builder_.BfcBlockOffset() &&
-                                     ConstraintSpace().ShouldForceClearance()))
-    builder.SetShouldForceClearance(true);
-
-  if (!child_data.is_new_fc) {
+  if (!is_new_fc) {
     builder.SetExclusionSpace(exclusion_space_);
-    builder.SetAdjoiningFloatTypes(container_builder_.AdjoiningFloatTypes());
+    if (!has_bfc_block_offset)
+      builder.SetAdjoiningFloatTypes(container_builder_.AdjoiningFloatTypes());
   }
 
   LayoutUnit space_available;
@@ -2066,9 +2131,9 @@
     // If a block establishes a new formatting context we must know our
     // position in the formatting context, and are able to adjust the
     // fragmentation line.
-    if (child_data.is_new_fc) {
+    if (is_new_fc)
       space_available -= child_data.bfc_offset_estimate.block_offset;
-    }
+
     // The policy regarding collapsing block-start margin with the fragmentainer
     // block-start is the same throughout the entire fragmentainer (although it
     // really only matters at the beginning of each fragmentainer, we don't need
@@ -2177,17 +2242,19 @@
 
 bool NGBlockLayoutAlgorithm::ResolveBfcBlockOffset(
     NGPreviousInflowPosition* previous_inflow_position,
-    LayoutUnit bfc_block_offset) {
+    LayoutUnit bfc_block_offset,
+    base::Optional<LayoutUnit> forced_bfc_block_offset) {
   if (container_builder_.BfcBlockOffset()) {
     DCHECK(unpositioned_floats_.IsEmpty());
     return true;
   }
 
+  bfc_block_offset = forced_bfc_block_offset.value_or(bfc_block_offset);
+
   if (ApplyClearance(ConstraintSpace(), &bfc_block_offset))
     container_builder_.SetIsPushedByFloats();
 
   container_builder_.SetBfcBlockOffset(bfc_block_offset);
-  container_builder_.ResetAdjoiningFloatTypes();
 
   if (NeedsAbortOnBfcBlockOffsetChange())
     return false;
@@ -2217,11 +2284,11 @@
   if (!abort_when_bfc_block_offset_updated_)
     return false;
   // If no previous BFC block offset was set, we need to abort.
-  if (!ConstraintSpace().FloatsBfcBlockOffset())
+  if (!ConstraintSpace().ForcedBfcBlockOffset())
     return true;
   // If the previous BFC block offset matches the new one, we can continue.
   // Otherwise, we need to abort.
-  LayoutUnit old_bfc_block_offset = *ConstraintSpace().FloatsBfcBlockOffset();
+  LayoutUnit old_bfc_block_offset = *ConstraintSpace().ForcedBfcBlockOffset();
 
   // In order to determine if the two offsets are equal, we also need to adjust
   // floats offset by the clearance offset.
@@ -2232,7 +2299,7 @@
 void NGBlockLayoutAlgorithm::PositionPendingFloats(
     LayoutUnit origin_block_offset) {
   DCHECK(container_builder_.BfcBlockOffset() ||
-         ConstraintSpace().FloatsBfcBlockOffset())
+         ConstraintSpace().ForcedBfcBlockOffset())
       << "The parent BFC block offset should be known here.";
 
   NGBfcOffset origin_bfc_offset = {
@@ -2242,7 +2309,7 @@
 
   LayoutUnit bfc_block_offset = container_builder_.BfcBlockOffset()
                                     ? *container_builder_.BfcBlockOffset()
-                                    : *ConstraintSpace().FloatsBfcBlockOffset();
+                                    : *ConstraintSpace().ForcedBfcBlockOffset();
 
   NGBfcOffset bfc_offset = {ConstraintSpace().BfcOffset().line_offset,
                             bfc_block_offset};
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
index 7351989..2f54670 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
@@ -29,7 +29,7 @@
 struct NGPreviousInflowPosition {
   LayoutUnit logical_block_offset;
   NGMarginStrut margin_strut;
-  bool empty_block_affected_by_clearance;
+  bool empty_block_had_clearance;
 };
 
 // This strut holds information for the current inflow child. The data is not
@@ -39,8 +39,6 @@
   NGMarginStrut margin_strut;
   NGBoxStrut margins;
   bool margins_fully_resolved;
-  bool force_clearance;
-  bool is_new_fc;
 };
 
 // A class for general block layout (e.g. a <div> with no special style).
@@ -102,13 +100,14 @@
       const NGLayoutInputNode child,
       const NGInflowChildData& child_data,
       const LogicalSize child_available_size,
-      const base::Optional<LayoutUnit> floats_bfc_block_offset = base::nullopt);
+      bool is_new_fc,
+      const base::Optional<LayoutUnit> forced_bfc_block_offset = base::nullopt,
+      bool has_clearance_past_adjoining_floats = false);
 
   // @return Estimated BFC block offset for the "to be layout" child.
   NGInflowChildData ComputeChildData(const NGPreviousInflowPosition&,
                                      NGLayoutInputNode,
                                      const NGBreakToken* child_break_token,
-                                     bool force_clearance,
                                      bool is_new_fc);
 
   NGPreviousInflowPosition ComputeInflowPosition(
@@ -119,16 +118,16 @@
       const LogicalOffset&,
       const NGLayoutResult&,
       const NGFragment&,
-      bool empty_block_affected_by_clearance);
+      bool empty_block_had_clearance);
 
-  // Position an empty child using the parent BFC block offset.
+  // Position an empty-block using the parent BFC block offset.
   // The fragment doesn't know its offset, but we can still calculate its BFC
   // position because the parent fragment's BFC is known.
   // Example:
   //   BFC Offset is known here because of the padding.
   //   <div style="padding: 1px">
   //     <div id="empty-div" style="margin: 1px"></div>
-  LayoutUnit PositionEmptyChildWithParentBfc(
+  LayoutUnit PositionEmptyBlockWithParentBfc(
       const NGLayoutInputNode& child,
       const NGConstraintSpace& child_space,
       const NGInflowChildData& child_data,
@@ -192,6 +191,7 @@
       NGLayoutInputNode child,
       const NGBreakToken* child_break_token,
       const NGConstraintSpace&,
+      bool has_clearance_past_adjoining_floats,
       scoped_refptr<const NGLayoutResult>,
       NGInflowChildData*,
       NGPreviousInflowPosition*,
@@ -246,18 +246,35 @@
 
   // If still unresolved, resolve the fragment's BFC block offset.
   //
-  // This includes applying clearance, so the bfc_block_offset passed won't be
-  // the final BFC block offset, if it wasn't large enough to get past all
-  // relevant floats. The updated BFC block offset can be read out with
-  // ContainerBfcBlockOffset().
+  // This includes applying clearance, so the |bfc_block_offset| passed won't
+  // be the final BFC block-offset, if it wasn't large enough to get past all
+  // relevant floats. The updated BFC block-offset can be read out with
+  // |ContainerBfcBlockOffset()|.
+  //
+  // If the |forced_bfc_block_offset| has a value, it will override the given
+  // |bfc_block_offset|. Typically this comes from the input constraints, when
+  // the current node has clearance past adjoining floats, or has a re-layout
+  // due to a child resolving the BFC block-offset.
   //
   // In addition to resolving our BFC block offset, this will also position
-  // pending floats, and update our in-flow layout state. Returns false if
-  // resolving the BFC block offset resulted in needing to abort layout. It
-  // will always return true otherwise. If the BFC block offset was already
-  // resolved, this method does nothing (and returns true).
-  bool ResolveBfcBlockOffset(NGPreviousInflowPosition*,
-                             LayoutUnit bfc_block_offset);
+  // pending floats, and update our in-flow layout state.
+  //
+  // Returns false if resolving the BFC block-offset resulted in needing to
+  // abort layout. It will always return true otherwise. If the BFC
+  // block-offset was already resolved, this method does nothing (and returns
+  // true).
+  bool ResolveBfcBlockOffset(
+      NGPreviousInflowPosition*,
+      LayoutUnit bfc_block_offset,
+      const base::Optional<LayoutUnit> forced_bfc_block_offset);
+
+  // This passes in the |forced_bfc_block_offset| from the input constraints,
+  // which is almost always desired.
+  bool ResolveBfcBlockOffset(NGPreviousInflowPosition* previous_inflow_position,
+                             LayoutUnit bfc_block_offset) {
+    return ResolveBfcBlockOffset(previous_inflow_position, bfc_block_offset,
+                                 ConstraintSpace().ForcedBfcBlockOffset());
+  }
 
   // A very common way to resolve the BFC block offset is to simply commit the
   // pending margin, so here's a convenience overload for that.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
index d8663099..875b903 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
@@ -240,6 +240,7 @@
   bool did_break_;
   bool has_forced_break_ = false;
   bool is_new_fc_ = false;
+  bool is_empty_block_ = false;
   LayoutUnit used_block_size_;
 
   LayoutUnit minimal_space_shortage_ = LayoutUnit::Max();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
index 410c459..7937d6e 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -66,7 +66,7 @@
     kNewFormattingContext = 1 << 4,
     kAnonymous = 1 << 5,
     kUseFirstLineStyle = 1 << 6,
-    kForceClearance = 1 << 7,
+    kAncestorHasClearancePastAdjoiningFloats = 1 << 7,
 
     // Size of bitfield used to store the flags.
     kNumberOfConstraintSpaceFlags = 8
@@ -276,6 +276,16 @@
   // Also note this is true only when the document has ':first-line' rules.
   bool UseFirstLineStyle() const { return HasFlag(kUseFirstLineStyle); }
 
+  // Returns true if an ancestor had clearance past adjoining floats.
+  //
+  // Typically this can be detected by seeing if a |ForcedBfcBlockOffset| is
+  // set. However new formatting contexts may require additional passes (if
+  // margins are adjoining or not), and without this extra bit of information
+  // can get into a bad state.
+  bool AncestorHasClearancePastAdjoiningFloats() const {
+    return HasFlag(kAncestorHasClearancePastAdjoiningFloats);
+  }
+
   // Some layout modes “stretch” their children to a fixed size (e.g. flex,
   // grid). These flags represented whether a layout needs to produce a
   // fragment that satisfies a fixed constraint in the inline and block
@@ -346,27 +356,28 @@
     return HasRareData() ? rare_data_->bfc_offset : bfc_offset_;
   }
 
-  // If present, and the current layout hasn't resolved its BFC offset yet (see
-  // BfcOffset), the layout should position all of its unpositioned floats at
-  // this offset. This value is the BFC offset that we calculated in the
-  // previous pass, a pass which aborted once the BFC offset got resolved,
-  // because we had walked past content (i.e. floats) that depended on it being
-  // resolved.
+  // If present, and the current layout hasn't resolved its BFC block-offset
+  // yet (see BfcOffset), the layout should position all of its unpositioned
+  // floats at this offset.
   //
-  // This value should be propogated to child layouts if the current layout
+  // This value is present if:
+  //   - An ancestor had clearance past adjoining floats. In this case this
+  //     value is calculated ahead of time.
+  //   - A second layout pass is required as there were unpositioned floats
+  //     within the tree, and an arbitrary sibling determined their BFC
+  //     block-offset.
+  //
+  // This value should be propagated to child layouts if the current layout
   // hasn't resolved its BFC offset yet.
-  //
-  // This value is calculated *after* an initial pass of the tree, and should
-  // only be present during subsequent passes.
-  base::Optional<LayoutUnit> FloatsBfcBlockOffset() const {
-    return HasRareData() ? rare_data_->floats_bfc_block_offset : base::nullopt;
+  base::Optional<LayoutUnit> ForcedBfcBlockOffset() const {
+    return HasRareData() ? rare_data_->forced_bfc_block_offset : base::nullopt;
   }
 
   // Return the types (none, left, right, both) of preceding adjoining
   // floats. These are floats that are added while the in-flow BFC offset is
   // still unknown. The floats may or may not be unpositioned (pending). That
   // depends on which layout pass we're in. They are typically positioned if
-  // FloatsBfcOffset() is known. Adjoining floats should be treated differently
+  // ForcedBfcOffset() is known. Adjoining floats should be treated differently
   // when calculating clearance on a block with adjoining block-start margin.
   // (in such cases we will know up front that the block will need clearance,
   // since, if it doesn't, the float will be pulled along with the block, and
@@ -386,28 +397,6 @@
     return HasRareData() ? rare_data_->clearance_offset : LayoutUnit::Min();
   }
 
-  // Return true if the fragment needs to have clearance applied to it,
-  // regardless of its hypothetical position. The fragment will then go exactly
-  // below the relevant floats. This happens when a cleared child gets separated
-  // from floats that would otherwise be adjoining; example:
-  //
-  // <div id="container">
-  //   <div id="float" style="float:left; width:100px; height:100px;"></div>
-  //   <div id="clearee" style="clear:left; margin-top:12345px;">text</div>
-  // </div>
-  //
-  // Clearance separates #clearee from #container, and #float is positioned at
-  // the block-start content edge of #container. Without clearance, margins
-  // would have been adjoining and the large margin on #clearee would have
-  // pulled both #container and #float along with it. No margin, no matter how
-  // large, would ever be able to pull #clearee below the float then. But we
-  // have clearance, the margins are separated, and in this case we know that we
-  // have clearance even before we have laid out (because of the adjoining
-  // float). So it would just be wrong to check for clearance when we position
-  // #clearee. Nothing can prevent clearance here. A large margin on the cleared
-  // child will be canceled out with negative clearance.
-  bool ShouldForceClearance() const { return HasFlag(kForceClearance); }
-
   const NGBaselineRequestList BaselineRequests() const {
     return NGBaselineRequestList(bitfields_.baseline_requests);
   }
@@ -517,7 +506,7 @@
     NGBfcOffset bfc_offset;
     NGMarginStrut margin_strut;
 
-    base::Optional<LayoutUnit> floats_bfc_block_offset;
+    base::Optional<LayoutUnit> forced_bfc_block_offset;
     LayoutUnit clearance_offset = LayoutUnit::Min();
 
     LayoutUnit fragmentainer_block_size = kIndefiniteSize;
@@ -527,7 +516,7 @@
 
     bool MaySkipLayout(const RareData& other) const {
       return margin_strut == other.margin_strut &&
-             floats_bfc_block_offset == other.floats_bfc_block_offset &&
+             forced_bfc_block_offset == other.forced_bfc_block_offset &&
              fragmentainer_block_size == other.fragmentainer_block_size &&
              fragmentainer_space_at_bfc_start ==
                  other.fragmentainer_space_at_bfc_start &&
@@ -538,7 +527,7 @@
     // Must be kept in sync with members checked within |MaySkipLayout|.
     bool IsInitialForMaySkipLayout() const {
       return margin_strut == NGMarginStrut() &&
-             floats_bfc_block_offset == base::nullopt &&
+             forced_bfc_block_offset == base::nullopt &&
              fragmentainer_block_size == kIndefiniteSize &&
              fragmentainer_space_at_bfc_start == kIndefiniteSize &&
              block_direction_fragmentation_type == kFragmentNone;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
index 8204ec1f..919cc16 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -184,6 +184,11 @@
     return *this;
   }
 
+  NGConstraintSpaceBuilder& SetAncestorHasClearancePastAdjoiningFloats() {
+    SetFlag(NGConstraintSpace::kAncestorHasClearancePastAdjoiningFloats, true);
+    return *this;
+  }
+
   NGConstraintSpaceBuilder& SetAdjoiningFloatTypes(NGFloatTypes floats) {
     if (!is_new_fc_)
       space_.bitfields_.adjoining_floats = static_cast<unsigned>(floats);
@@ -212,15 +217,15 @@
 
     return *this;
   }
-  NGConstraintSpaceBuilder& SetFloatsBfcBlockOffset(
-      const base::Optional<LayoutUnit>& floats_bfc_block_offset) {
+  NGConstraintSpaceBuilder& SetForcedBfcBlockOffset(
+      const base::Optional<LayoutUnit>& forced_bfc_block_offset) {
 #if DCHECK_IS_ON()
-    DCHECK(!is_floats_bfc_block_offset_set_);
-    is_floats_bfc_block_offset_set_ = true;
+    DCHECK(!is_forced_bfc_block_offset_set_);
+    is_forced_bfc_block_offset_set_ = true;
 #endif
-    if (LIKELY(!is_new_fc_ && floats_bfc_block_offset != base::nullopt)) {
-      space_.EnsureRareData()->floats_bfc_block_offset =
-          floats_bfc_block_offset;
+    if (LIKELY(!is_new_fc_ && forced_bfc_block_offset != base::nullopt)) {
+      space_.EnsureRareData()->forced_bfc_block_offset =
+          forced_bfc_block_offset;
     }
 
     return *this;
@@ -237,11 +242,6 @@
     return *this;
   }
 
-  NGConstraintSpaceBuilder& SetShouldForceClearance(bool b) {
-    SetFlag(NGConstraintSpace::kForceClearance, b);
-    return *this;
-  }
-
   NGConstraintSpaceBuilder& SetTableCellChildLayoutPhase(
       NGTableCellChildLayoutPhase table_cell_child_layout_phase) {
     space_.bitfields_.table_cell_child_layout_phase =
@@ -312,7 +312,7 @@
   bool is_fragmentainer_space_at_bfc_start_set_ = false;
   bool is_block_direction_fragmentation_type_set_ = false;
   bool is_margin_strut_set_ = false;
-  bool is_floats_bfc_block_offset_set_ = false;
+  bool is_forced_bfc_block_offset_set_ = false;
   bool is_clearance_offset_set_ = false;
 
   bool to_constraint_space_called_ = false;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
index 8410fe4..c3c91cf 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
@@ -148,6 +148,11 @@
                                              nullptr);
   }
 
+  NGContainerFragmentBuilder& SetIsEmptyBlock() {
+    is_empty_block_ = true;
+    return *this;
+  }
+
   NGContainerFragmentBuilder& SetIsPushedByFloats() {
     is_pushed_by_floats_ = true;
     return *this;
@@ -162,6 +167,10 @@
     adjoining_floats_ |= floats;
     return *this;
   }
+  NGContainerFragmentBuilder& SetAdjoiningFloatTypes(NGFloatTypes floats) {
+    adjoining_floats_ = floats;
+    return *this;
+  }
   NGFloatTypes AdjoiningFloatTypes() const { return adjoining_floats_; }
 
   NGContainerFragmentBuilder& SetHasBlockFragmentation() {
@@ -244,6 +253,7 @@
 
   NGFloatTypes adjoining_floats_ = kFloatTypeNone;
 
+  bool is_empty_block_ = false;
   bool is_pushed_by_floats_ = false;
   bool is_legacy_layout_root_ = false;
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
index aed07c45b..6b7b91e0 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
@@ -67,6 +67,7 @@
       final_break_after_(other.final_break_after_),
       has_valid_space_(other.has_valid_space_),
       has_forced_break_(other.has_forced_break_),
+      is_empty_block_(other.is_empty_block_),
       is_pushed_by_floats_(other.is_pushed_by_floats_),
       adjoining_floats_(other.adjoining_floats_),
       is_initial_block_size_indefinite_(
@@ -87,6 +88,7 @@
       end_margin_strut_(builder->end_margin_strut_),
       has_valid_space_(cache_space && builder->space_),
       has_forced_break_(false),
+      is_empty_block_(builder->is_empty_block_),
       is_pushed_by_floats_(builder->is_pushed_by_floats_),
       adjoining_floats_(builder->adjoining_floats_),
       is_initial_block_size_indefinite_(false),
@@ -147,6 +149,7 @@
 
   DCHECK_EQ(has_valid_space_, other.has_valid_space_);
   DCHECK_EQ(has_forced_break_, other.has_forced_break_);
+  DCHECK_EQ(is_empty_block_, other.is_empty_block_);
   DCHECK_EQ(is_pushed_by_floats_, other.is_pushed_by_floats_);
   DCHECK_EQ(adjoining_floats_, other.adjoining_floats_);
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_result.h b/third_party/blink/renderer/core/layout/ng/ng_layout_result.h
index 3260354..9b91c7b 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_result.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_result.h
@@ -95,6 +95,10 @@
   // Return true if the fragment broke because a forced break before a child.
   bool HasForcedBreak() const { return has_forced_break_; }
 
+  // Returns true if the fragment should be considered empty for margin
+  // collapsing purposes (e.g. margins "collapse through").
+  bool IsEmptyBlock() const { return is_empty_block_; }
+
   // Return true if this fragment got its block offset increased by the presence
   // of floats.
   bool IsPushedByFloats() const { return is_pushed_by_floats_; }
@@ -217,6 +221,7 @@
   unsigned has_valid_space_ : 1;
   unsigned has_forced_break_ : 1;
 
+  unsigned is_empty_block_ : 1;
   unsigned is_pushed_by_floats_ : 1;
   unsigned adjoining_floats_ : 2;  // NGFloatTypes
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
index 6aa70c9..1ab4873 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
@@ -517,8 +517,7 @@
   if (space.IsIntermediateLayout())
     return false;
   // Check that we're done positioning pending floats.
-  return !result.AdjoiningFloatTypes() || result.BfcBlockOffset() ||
-         space.FloatsBfcBlockOffset();
+  return !result.AdjoiningFloatTypes() || result.BfcBlockOffset();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
index b817b8d..4cb444c 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
@@ -56,9 +56,11 @@
   container_builder_.SetIntrinsicBlockSize(result.IntrinsicBlockSize());
   container_builder_.SetUnpositionedListMarker(result.UnpositionedListMarker());
 
-  container_builder_.AddAdjoiningFloatTypes(result.AdjoiningFloatTypes());
+  if (result.IsEmptyBlock())
+    container_builder_.SetIsEmptyBlock();
   if (result.IsPushedByFloats())
     container_builder_.SetIsPushedByFloats();
+  container_builder_.AddAdjoiningFloatTypes(result.AdjoiningFloatTypes());
 
   for (const auto& request : ConstraintSpace().BaselineRequests()) {
     base::Optional<LayoutUnit> baseline = physical_fragment.Baseline(request);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc
index a51ed9a..ba44dfd 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc
@@ -39,7 +39,6 @@
       .SetPercentageResolutionSize(indefinite_size)
       .SetReplacedPercentageResolutionSize(indefinite_size)
       .SetIsIntermediateLayout(true)
-      .SetFloatsBfcBlockOffset(LayoutUnit())
       .ToConstraintSpace();
 }
 
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
index 30aadbd..f6222890 100644
--- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
+++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -3164,7 +3164,8 @@
   context.SetDeviceScaleFactor(device_scale_factor);
 
   Settings* settings = GetLayoutObject().GetFrame()->GetSettings();
-  context.SetDarkMode(BuildDarkModeSettings(*settings, GetLayoutObject()));
+  context.SetDarkMode(
+      BuildDarkModeSettings(*settings, *GetLayoutObject().View()));
 
   if (paint_info.paint_layer->GetCompositingState() !=
       kPaintsIntoGroupedBacking) {
diff --git a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc
index aec3ee2..ba42f4d7 100644
--- a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc
+++ b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc
@@ -204,8 +204,8 @@
 void FirstMeaningfulPaintDetector::RegisterNotifySwapTime(PaintEvent event) {
   ++outstanding_swap_promise_count_;
   paint_timing_->RegisterNotifySwapTime(
-      event, CrossThreadBind(&FirstMeaningfulPaintDetector::ReportSwapTime,
-                             WrapCrossThreadWeakPersistent(this), event));
+      event, CrossThreadBindOnce(&FirstMeaningfulPaintDetector::ReportSwapTime,
+                                 WrapCrossThreadWeakPersistent(this), event));
 }
 
 void FirstMeaningfulPaintDetector::ReportSwapTime(
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.cc b/third_party/blink/renderer/core/paint/image_element_timing.cc
index 64ac720..2dbe0cf 100644
--- a/third_party/blink/renderer/core/paint/image_element_timing.cc
+++ b/third_party/blink/renderer/core/paint/image_element_timing.cc
@@ -126,7 +126,7 @@
   // or fails, and at that time the vector is cleared.
   if (element_timings_.size() == 1) {
     frame->GetChromeClient().NotifySwapTime(
-        *frame, ConvertToBaseCallback(CrossThreadBind(
+        *frame, ConvertToBaseOnceCallback(CrossThreadBindOnce(
                     &ImageElementTiming::ReportImagePaintSwapTime,
                     WrapCrossThreadWeakPersistent(this))));
   }
diff --git a/third_party/blink/renderer/core/paint/paint_timing.cc b/third_party/blink/renderer/core/paint/paint_timing.cc
index 66b6f27b..52b51e23 100644
--- a/third_party/blink/renderer/core/paint/paint_timing.cc
+++ b/third_party/blink/renderer/core/paint/paint_timing.cc
@@ -173,8 +173,8 @@
 
 void PaintTiming::RegisterNotifySwapTime(PaintEvent event) {
   RegisterNotifySwapTime(
-      event, CrossThreadBind(&PaintTiming::ReportSwapTime,
-                             WrapCrossThreadWeakPersistent(this), event));
+      event, CrossThreadBindOnce(&PaintTiming::ReportSwapTime,
+                                 WrapCrossThreadWeakPersistent(this), event));
 }
 
 void PaintTiming::RegisterNotifySwapTime(PaintEvent event,
@@ -185,7 +185,7 @@
   if (!GetFrame() || !GetFrame()->GetPage())
     return;
   GetFrame()->GetPage()->GetChromeClient().NotifySwapTime(
-      *GetFrame(), ConvertToBaseCallback(std::move(callback)));
+      *GetFrame(), ConvertToBaseOnceCallback(std::move(callback)));
 }
 
 void PaintTiming::ReportSwapTime(PaintEvent event,
diff --git a/third_party/blink/renderer/core/paint/paint_timing.h b/third_party/blink/renderer/core/paint/paint_timing.h
index b1da79e0..3279e17 100644
--- a/third_party/blink/renderer/core/paint/paint_timing.h
+++ b/third_party/blink/renderer/core/paint/paint_timing.h
@@ -29,8 +29,8 @@
   USING_GARBAGE_COLLECTED_MIXIN(PaintTiming);
   friend class FirstMeaningfulPaintDetector;
   using ReportTimeCallback =
-      WTF::CrossThreadFunction<void(WebWidgetClient::SwapResult,
-                                    base::TimeTicks)>;
+      WTF::CrossThreadOnceFunction<void(WebWidgetClient::SwapResult,
+                                        base::TimeTicks)>;
 
  public:
   static const char kSupplementName[];
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
index c6cef7b8..4b65567 100644
--- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.cc
@@ -20,6 +20,7 @@
 #include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
 
@@ -116,8 +117,8 @@
       timer_.StartRepeating(kTimerDelay, FROM_HERE);
     if (!awaiting_swap_promise_) {
       RegisterNotifySwapTime(
-          CrossThreadBind(&TextPaintTimingDetector::ReportSwapTime,
-                          WrapCrossThreadWeakPersistent(this)));
+          CrossThreadBindOnce(&TextPaintTimingDetector::ReportSwapTime,
+                              WrapCrossThreadWeakPersistent(this)));
     }
   }
 }
@@ -139,7 +140,7 @@
   if (!frame.GetPage())
     return;
   frame.GetPage()->GetChromeClient().NotifySwapTime(
-      frame, ConvertToBaseCallback(std::move(callback)));
+      frame, ConvertToBaseOnceCallback(std::move(callback)));
   awaiting_swap_promise_ = true;
 }
 
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
index 51985f35..154e672 100644
--- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
+++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
@@ -121,8 +121,8 @@
 class CORE_EXPORT TextPaintTimingDetector final
     : public GarbageCollectedFinalized<TextPaintTimingDetector> {
   using ReportTimeCallback =
-      WTF::CrossThreadFunction<void(WebWidgetClient::SwapResult,
-                                    base::TimeTicks)>;
+      WTF::CrossThreadOnceFunction<void(WebWidgetClient::SwapResult,
+                                        base::TimeTicks)>;
   friend class TextPaintTimingDetectorTest;
 
  public:
diff --git a/third_party/blink/renderer/core/script/pending_script.cc b/third_party/blink/renderer/core/script/pending_script.cc
index b346fae9..b43e498 100644
--- a/third_party/blink/renderer/core/script/pending_script.cc
+++ b/third_party/blink/renderer/core/script/pending_script.cc
@@ -156,12 +156,8 @@
   Script* script = GetSource(document_url);
 
   if (script && !IsExternal()) {
-    bool should_bypass_main_world_csp =
-        ContentSecurityPolicy::ShouldBypassMainWorld(&element_->GetDocument());
-
     AtomicString nonce = element_->GetNonceForElement();
-    if (!should_bypass_main_world_csp &&
-        !element_->AllowInlineScriptForCSP(nonce, StartingPosition().line_,
+    if (!element_->AllowInlineScriptForCSP(nonce, StartingPosition().line_,
                                            script->InlineSourceTextForCSP())) {
       // Consider as if:
       //
diff --git a/third_party/blink/renderer/core/script/script_element_base.h b/third_party/blink/renderer/core/script/script_element_base.h
index 4c589aa..b3d7d91 100644
--- a/third_party/blink/renderer/core/script/script_element_base.h
+++ b/third_party/blink/renderer/core/script/script_element_base.h
@@ -59,6 +59,9 @@
   virtual const AtomicString& GetNonceForElement() const = 0;
   virtual bool ElementHasDuplicateAttributes() const = 0;
 
+  // Whether the inline script is allowed by the CSP. Must be called
+  // synchronously to ensure the correct Javascript world is used for CSP
+  // checks.
   virtual bool AllowInlineScriptForCSP(const AtomicString& nonce,
                                        const WTF::OrdinalNumber&,
                                        const String& script_content) = 0;
diff --git a/third_party/blink/renderer/core/script/script_loader.cc b/third_party/blink/renderer/core/script/script_loader.cc
index bb438c4..8cc196f3 100644
--- a/third_party/blink/renderer/core/script/script_loader.cc
+++ b/third_party/blink/renderer/core/script/script_loader.cc
@@ -212,8 +212,7 @@
     return ShouldFireErrorEvent::kShouldFire;
 
   // https://github.com/WICG/import-maps/issues/105
-  if (!ContentSecurityPolicy::ShouldBypassMainWorld(&element_document) &&
-      !element.AllowInlineScriptForCSP(element.GetNonceForElement(),
+  if (!element.AllowInlineScriptForCSP(element.GetNonceForElement(),
                                        position.line_, import_map_text)) {
     return ShouldFireErrorEvent::kShouldFire;
   }
diff --git a/third_party/blink/renderer/core/svg/svg_script_element.cc b/third_party/blink/renderer/core/svg/svg_script_element.cc
index ade3c08..5d3ac543 100644
--- a/third_party/blink/renderer/core/svg/svg_script_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_script_element.cc
@@ -132,7 +132,7 @@
     const AtomicString& nonce,
     const WTF::OrdinalNumber& context_line,
     const String& script_content) {
-  return GetDocument().GetContentSecurityPolicy()->AllowInline(
+  return GetDocument().GetContentSecurityPolicyForWorld()->AllowInline(
       ContentSecurityPolicy::InlineType::kScript, this, script_content, nonce,
       GetDocument().Url(), context_line);
 }
diff --git a/third_party/blink/renderer/core/timing/event_timing.cc b/third_party/blink/renderer/core/timing/event_timing.cc
index 705b3c2..4d2cb2b 100644
--- a/third_party/blink/renderer/core/timing/event_timing.cc
+++ b/third_party/blink/renderer/core/timing/event_timing.cc
@@ -32,18 +32,19 @@
 }
 
 bool ShouldReportForEventTiming(WindowPerformance* performance) {
+  if (!performance->FirstInputDetected())
+    return true;
+
   if (!RuntimeEnabledFeatures::EventTimingEnabled(
           performance->GetExecutionContext()))
     return false;
 
+  if (performance->HasObserverFor(PerformanceEntry::kEvent))
+    return true;
   if (performance->ShouldBufferEntries() &&
       !performance->IsEventTimingBufferFull()) {
     return true;
   }
-  if (performance->HasObserverFor(PerformanceEntry::kEvent) ||
-      !performance->FirstInputDetected()) {
-    return true;
-  }
 
   return false;
 }
@@ -91,8 +92,6 @@
 }
 
 void EventTiming::DidDispatchEvent(const Event& event) {
-  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(
-      performance_->GetExecutionContext()));
   performance_->RegisterEventTiming(event.type(), event_timestamp_,
                                     processing_start_, CurrentTimeTicks(),
                                     event.cancelable());
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc
index 4f80ea2..4e93cab 100644
--- a/third_party/blink/renderer/core/timing/performance.cc
+++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -632,6 +632,7 @@
 }
 
 void Performance::AddEventTimingBuffer(PerformanceEventTiming& entry) {
+  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
   event_timing_buffer_.push_back(&entry);
 
   if (IsEventTimingBufferFull())
@@ -913,6 +914,8 @@
 }
 
 void Performance::NotifyObserversOfEntry(PerformanceEntry& entry) const {
+  DCHECK(entry.EntryTypeEnum() != PerformanceEntry::kEvent ||
+         RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
   bool observer_found = false;
   for (auto& observer : observers_) {
     if (observer->FilterOptions() & entry.EntryTypeEnum()) {
diff --git a/third_party/blink/renderer/core/timing/performance_event_timing.idl b/third_party/blink/renderer/core/timing/performance_event_timing.idl
index 364422b8..951011e3 100644
--- a/third_party/blink/renderer/core/timing/performance_event_timing.idl
+++ b/third_party/blink/renderer/core/timing/performance_event_timing.idl
@@ -3,10 +3,8 @@
 // found in the LICENSE file.
 
 // https://github.com/wicg/event-timing
-[
-    Exposed=Window,
-    RuntimeEnabled=EventTiming
-] interface PerformanceEventTiming : PerformanceEntry {
+[Exposed=Window]
+interface PerformanceEventTiming : PerformanceEntry {
     readonly attribute DOMHighResTimeStamp processingStart;
     readonly attribute DOMHighResTimeStamp processingEnd;
     readonly attribute boolean cancelable;
diff --git a/third_party/blink/renderer/core/timing/performance_observer.cc b/third_party/blink/renderer/core/timing/performance_observer.cc
index c89f6dc..f549b50a 100644
--- a/third_party/blink/renderer/core/timing/performance_observer.cc
+++ b/third_party/blink/renderer/core/timing/performance_observer.cc
@@ -59,10 +59,9 @@
   if (execution_context->IsDocument()) {
     if (RuntimeEnabledFeatures::ElementTimingEnabled(execution_context))
       supportedEntryTypes.push_back(performance_entry_names::kElement);
-    if (RuntimeEnabledFeatures::EventTimingEnabled(execution_context)) {
+    if (RuntimeEnabledFeatures::EventTimingEnabled(execution_context))
       supportedEntryTypes.push_back(performance_entry_names::kEvent);
-      supportedEntryTypes.push_back(performance_entry_names::kFirstInput);
-    }
+    supportedEntryTypes.push_back(performance_entry_names::kFirstInput);
     if (RuntimeEnabledFeatures::LayoutInstabilityAPIEnabled(execution_context))
       supportedEntryTypes.push_back(performance_entry_names::kLayoutShift);
     supportedEntryTypes.push_back(performance_entry_names::kLongtask);
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc
index 4c7ceb4..93bd818 100644
--- a/third_party/blink/renderer/core/timing/window_performance.cc
+++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -332,8 +332,6 @@
                                             TimeTicks processing_start,
                                             TimeTicks processing_end,
                                             bool cancelable) {
-  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
-
   // |start_time| could be null in some tests that inject input.
   DCHECK(!processing_start.is_null());
   DCHECK(!processing_end.is_null());
@@ -353,17 +351,17 @@
   // not previously empty.
   if (event_timings_.size() == 1) {
     GetFrame()->GetChromeClient().NotifySwapTime(
-        *GetFrame(), ConvertToBaseCallback(
-                         CrossThreadBind(&WindowPerformance::ReportEventTimings,
-                                         WrapCrossThreadWeakPersistent(this))));
+        *GetFrame(), ConvertToBaseOnceCallback(CrossThreadBindOnce(
+                         &WindowPerformance::ReportEventTimings,
+                         WrapCrossThreadWeakPersistent(this))));
   }
 }
 
 void WindowPerformance::ReportEventTimings(WebWidgetClient::SwapResult result,
                                            TimeTicks timestamp) {
-  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
-
   DOMHighResTimeStamp end_time = MonotonicTimeToDOMHighResTimeStamp(timestamp);
+  bool event_timing_enabled =
+      RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext());
   for (const auto& entry : event_timings_) {
     int duration_in_ms = std::round((end_time - entry->startTime()) / 8) * 8;
     entry->SetDuration(duration_in_ms);
@@ -379,7 +377,8 @@
             PerformanceEventTiming::CreateFirstInputTiming(entry));
       }
     }
-    if (duration_in_ms < kEventTimingDurationThresholdInMs)
+    if (duration_in_ms < kEventTimingDurationThresholdInMs ||
+        !event_timing_enabled)
       continue;
 
     if (HasObserverFor(PerformanceEntry::kEvent)) {
@@ -418,8 +417,6 @@
 
 void WindowPerformance::DispatchFirstInputTiming(
     PerformanceEventTiming* entry) {
-  DCHECK(RuntimeEnabledFeatures::EventTimingEnabled(GetExecutionContext()));
-
   if (!entry)
     return;
   DCHECK_EQ("firstInput", entry->entryType());
diff --git a/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js b/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
index 181729d..0052ded 100644
--- a/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
+++ b/third_party/blink/renderer/devtools/front_end/cookie_table/CookiesTable.js
@@ -50,7 +50,7 @@
     const columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([
       {
         id: 'name',
-        title: Common.UIString('Name'),
+        title: ls`Name`,
         sortable: true,
         disclosure: editable,
         sort: DataGrid.DataGrid.Order.Ascending,
@@ -58,31 +58,14 @@
         weight: 24,
         editable: editable
       },
-      {id: 'value', title: Common.UIString('Value'), sortable: true, longText: true, weight: 34, editable: editable},
-      {id: 'domain', title: Common.UIString('Domain'), sortable: true, weight: 7, editable: editable},
-      {id: 'path', title: Common.UIString('Path'), sortable: true, weight: 7, editable: editable},
-      {id: 'expires', title: Common.UIString('Expires / Max-Age'), sortable: true, weight: 7, editable: editable},
-      {id: 'size', title: Common.UIString('Size'), sortable: true, align: DataGrid.DataGrid.Align.Right, weight: 7}, {
-        id: 'httpOnly',
-        title: Common.UIString('HTTP'),
-        sortable: true,
-        align: DataGrid.DataGrid.Align.Center,
-        weight: 7
-      },
-      {
-        id: 'secure',
-        title: Common.UIString('Secure'),
-        sortable: true,
-        align: DataGrid.DataGrid.Align.Center,
-        weight: 7
-      },
-      {
-        id: 'sameSite',
-        title: Common.UIString('SameSite'),
-        sortable: true,
-        align: DataGrid.DataGrid.Align.Center,
-        weight: 7
-      }
+      {id: 'value', title: ls`Value`, sortable: true, longText: true, weight: 34, editable: editable},
+      {id: 'domain', title: ls`Domain`, sortable: true, weight: 7, editable: editable},
+      {id: 'path', title: ls`Path`, sortable: true, weight: 7, editable: editable},
+      {id: 'expires', title: ls`Expires / Max-Age`, sortable: true, weight: 7, editable: editable},
+      {id: 'size', title: ls`Size`, sortable: true, align: DataGrid.DataGrid.Align.Right, weight: 7},
+      {id: 'httpOnly', title: ls`HttpOnly`, sortable: true, align: DataGrid.DataGrid.Align.Center, weight: 7},
+      {id: 'secure', title: ls`Secure`, sortable: true, align: DataGrid.DataGrid.Align.Center, weight: 7},
+      {id: 'sameSite', title: ls`SameSite`, sortable: true, align: DataGrid.DataGrid.Align.Center, weight: 7}
     ]);
 
     if (editable) {
diff --git a/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js b/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
index eedc90d..c2cc71c 100644
--- a/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/blink/renderer/devtools/front_end/network/NetworkLogView.js
@@ -1691,8 +1691,13 @@
        */
       function escapeCharacter(x) {
         const code = x.charCodeAt(0);
-        // Add leading zero when needed to not care about the next character.
-        return code < 16 ? '\\u0' + code.toString(16) : '\\u' + code.toString(16);
+        let hexString = code.toString(16);
+        // Zero pad to four digits to comply with ANSI-C Quoting:
+        // http://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
+        while (hexString.length < 4)
+          hexString = '0' + hexString;
+
+        return '\\u' + hexString;
       }
 
       if (/[\u0000-\u001f\u007f-\u009f!]|\'/.test(str)) {
diff --git a/third_party/blink/renderer/devtools/front_end/network/networkLogView.css b/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
index 937c2422..92379f5 100644
--- a/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
+++ b/third_party/blink/renderer/devtools/front_end/network/networkLogView.css
@@ -42,6 +42,7 @@
     white-space: nowrap;
     text-overflow: ellipsis;
     overflow: hidden;
+    user-select: text;
 }
 
 .panel.network .toolbar.network-summary-bar {
diff --git a/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js b/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js
index 426e7833..6369715 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js
+++ b/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js
@@ -1687,6 +1687,7 @@
     super(storagePanel, cookieDomain ? cookieDomain : Common.UIString('Local Files'), false);
     this._target = frame.resourceTreeModel().target();
     this._cookieDomain = cookieDomain;
+    this.tooltip = ls`cookies used by frames from ` + cookieDomain;
     const icon = UI.Icon.create('mediumicon-cookie', 'resource-tree-item');
     this.setLeadingIcons([icon]);
   }
@@ -1825,10 +1826,16 @@
     this._emptyWidget.show(this.element);
   }
 
+  /**
+   * @param {string} text
+   */
   setText(text) {
     this._emptyWidget.text = text;
   }
 
+  /**
+   * @param {?string} link
+   */
   setLink(link) {
     if (link && !this._linkElement)
       this._linkElement = this._emptyWidget.appendLink(link);
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/CookieModel.js b/third_party/blink/renderer/devtools/front_end/sdk/CookieModel.js
index cf3ab19..44e6823 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/CookieModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/CookieModel.js
@@ -102,6 +102,7 @@
   }
 
   /**
+   * Returns cookies needed by current page's frames whose security origins are |domain|.
    * @param {?string} domain
    * @return {!Promise<!Array<!SDK.Cookie>>}
    */
@@ -111,8 +112,8 @@
      * @param {!SDK.Resource} resource
      */
     function populateResourceURLs(resource) {
-      const url = resource.documentURL.asParsedURL();
-      if (url && (!domain || url.securityOrigin() === domain))
+      const documentURL = resource.documentURL.asParsedURL();
+      if (documentURL && (!domain || documentURL.securityOrigin() === domain))
         resourceURLs.push(resource.url);
     }
     const resourceTreeModel = this.target().model(SDK.ResourceTreeModel);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index 0f19dc56..4eb08cc 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -2724,7 +2724,7 @@
            layout_text->FirstAbstractInlineTextBox();
        box.get(); box = box->NextInlineTextBox()) {
     AXObject* ax_object = AXObjectCache().GetOrCreate(box.get());
-    if (ax_object->AccessibilityIsIncludedInTree())
+    if (!ax_object->AccessibilityIsIgnored())
       children_.push_back(ax_object);
   }
 }
@@ -3448,7 +3448,7 @@
       // Find out where the last layout sibling is located within m_children.
       if (AXObject* child_object =
               AXObjectCache().Get(child.GetLayoutObject())) {
-        if (!child_object->AccessibilityIsIncludedInTree()) {
+        if (child_object->AccessibilityIsIgnored()) {
           const auto& children = child_object->Children();
           child_object = children.size() ? children.back().Get() : nullptr;
         }
@@ -3487,7 +3487,7 @@
       AXImageMapLink* area_object = ToAXImageMapLink(obj);
       area_object->SetParent(this);
       DCHECK_NE(area_object->AXObjectID(), 0U);
-      if (area_object->AccessibilityIsIncludedInTree())
+      if (!area_object->AccessibilityIsIgnored())
         children_.push_back(area_object);
       else
         AXObjectCache().Remove(area_object->AXObjectID());
@@ -3529,7 +3529,7 @@
 
   root->SetParent(this);
 
-  if (!root->AccessibilityIsIncludedInTree()) {
+  if (root->AccessibilityIsIgnored()) {
     for (const auto& child : root->Children())
       children_.push_back(child);
   } else {
@@ -3550,7 +3550,7 @@
       if (HTMLTableCaptionElement* caption =
               ToHTMLTableElement(table_node)->caption()) {
         AXObject* caption_object = ax_cache.GetOrCreate(caption);
-        if (caption_object && caption_object->AccessibilityIsIncludedInTree())
+        if (caption_object && !caption_object->AccessibilityIsIgnored())
           children_.push_front(caption_object);
       }
     }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc b/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
index caaeda8..cdd8977 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
@@ -78,7 +78,7 @@
     return;
 
   ToAXMockObject(popup)->SetParent(this);
-  if (!popup->AccessibilityIsIncludedInTree()) {
+  if (popup->AccessibilityIsIgnored()) {
     cache.Remove(popup->AXObjectID());
     return;
   }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
index 1e54ed4..b52ef87 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -1486,7 +1486,7 @@
     for (AXObject* child : parent->Children()) {
       DCHECK(child);
       if (child->RoleValue() == ax::mojom::Role::kRadioButton &&
-          child->AccessibilityIsIncludedInTree()) {
+          !child->AccessibilityIsIgnored()) {
         radio_buttons.push_back(child);
       }
     }
@@ -2364,7 +2364,7 @@
   // getting children, ensure data is not stale.
   child->ClearChildren();
 
-  if (!child->AccessibilityIsIncludedInTree()) {
+  if (child->AccessibilityIsIgnored()) {
     const auto& children = child->Children();
     wtf_size_t length = children.size();
     for (wtf_size_t i = 0; i < length; ++i)
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 20f30f97..e3f3d9c 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -888,12 +888,6 @@
   return cached_is_ignored_;
 }
 
-// TODO(janewman) AccessibilityIsIncludedInTree should be true for all nodes
-// that should be included in the tree, ignored or not.
-bool AXObject::AccessibilityIsIncludedInTree() const {
-  return !AccessibilityIsIgnored();
-}
-
 void AXObject::UpdateCachedAttributeValuesIfNeeded() const {
   if (IsDetached())
     return;
@@ -910,8 +904,7 @@
   cached_is_descendant_of_disabled_node_ = !!DisabledAncestor();
   cached_has_inherited_presentational_role_ =
       !!InheritsPresentationalRoleFrom();
-  IgnoredReasons ignored_reasons;
-  cached_is_ignored_ = ComputeAccessibilityIsIgnored(&ignored_reasons);
+  cached_is_ignored_ = ComputeAccessibilityIsIgnored();
   cached_is_editable_root_ = ComputeIsEditableRoot();
   // Compute live region root, which can be from any ARIA live value, including
   // "off", or from an automatic ARIA live value, e.g. from role="status".
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h
index cbedc3b6..633f429 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -561,13 +561,8 @@
   virtual bool CanSetFocusAttribute() const;
   bool CanSetValueAttribute() const;
 
-  // Whether objects are ignored, i.e. hidden in the tree for most ATs
+  // Whether objects are ignored, i.e. not included in the tree.
   bool AccessibilityIsIgnored() const;
-
-  // Whether objects are included in the tree. A node may be Ignored,
-  // but allowed to pass into the tree, e.g. a hidden node referenced
-  // by labeled-by.
-  bool AccessibilityIsIncludedInTree() const;
   typedef HeapVector<IgnoredReason> IgnoredReasons;
   virtual bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const {
     return true;
@@ -1112,7 +1107,6 @@
   mutable int last_modification_count_;
   mutable RGBA32 cached_background_color_;
   mutable bool cached_is_ignored_ : 1;
-
   mutable bool cached_is_inert_or_aria_hidden_ : 1;
   mutable bool cached_is_descendant_of_leaf_node_ : 1;
   mutable bool cached_is_descendant_of_disabled_node_ : 1;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index 2c689c0..0ac1c5b 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -219,7 +219,7 @@
 
   // the HTML element, for example, is focusable but has an AX object that is
   // ignored
-  if (!obj->AccessibilityIsIncludedInTree())
+  if (obj->AccessibilityIsIgnored())
     obj = obj->ParentObjectUnignored();
 
   return obj;
@@ -1437,8 +1437,7 @@
     return nullptr;
 
   AXObject* accessible_object = GetOrCreate(node->GetLayoutObject());
-  while (accessible_object &&
-         !accessible_object->AccessibilityIsIncludedInTree()) {
+  while (accessible_object && accessible_object->AccessibilityIsIgnored()) {
     node = NodeTraversal::Next(*node);
 
     while (node && !node->GetLayoutObject())
@@ -1616,7 +1615,7 @@
   AXObject* obj = GetOrCreate(anchor_node->GetLayoutObject());
   if (!obj)
     return;
-  if (!obj->AccessibilityIsIncludedInTree())
+  if (obj->AccessibilityIsIgnored())
     obj = obj->ParentObjectUnignored();
   PostNotification(obj, ax::mojom::Event::kScrolledToAnchor);
 }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_slider.cc b/third_party/blink/renderer/modules/accessibility/ax_slider.cc
index 05a3e36..8dc379b2 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_slider.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_slider.cc
@@ -87,7 +87,7 @@
 
   // Before actually adding the value indicator to the hierarchy,
   // allow the platform to make a final decision about it.
-  if (!thumb->AccessibilityIsIncludedInTree())
+  if (thumb->AccessibilityIsIgnored())
     cache.Remove(thumb->AXObjectID());
   else
     children_.push_back(thumb);
diff --git a/third_party/blink/renderer/modules/animationworklet/BUILD.gn b/third_party/blink/renderer/modules/animationworklet/BUILD.gn
index ba91053..8a6521a0 100644
--- a/third_party/blink/renderer/modules/animationworklet/BUILD.gn
+++ b/third_party/blink/renderer/modules/animationworklet/BUILD.gn
@@ -20,13 +20,15 @@
     "animator_definition.h",
     "css_animation_worklet.cc",
     "css_animation_worklet.h",
-    "effect_proxy.cc",
-    "effect_proxy.h",
     "worklet_animation.cc",
     "worklet_animation.h",
+    "worklet_animation_effect.cc",
+    "worklet_animation_effect.h",
+    "worklet_animation_effect_timings.cc",
+    "worklet_animation_effect_timings.h",
     "worklet_animation_options.cc",
     "worklet_animation_options.h",
-    "worklet_group_effect_proxy.cc",
-    "worklet_group_effect_proxy.h",
+    "worklet_group_effect.cc",
+    "worklet_group_effect.h",
   ]
 }
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.cc
index d239644..39dc7d1d 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.cc
@@ -15,6 +15,7 @@
 #include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/worker_thread.h"
 #include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h"
 #include "third_party/blink/renderer/modules/animationworklet/worklet_animation_options.h"
 #include "third_party/blink/renderer/platform/bindings/callback_method_retriever.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
@@ -70,10 +71,11 @@
     const String& name,
     WorkletAnimationOptions options,
     scoped_refptr<SerializedScriptValue> serialized_state,
-    const std::vector<base::Optional<TimeDelta>>& local_times) {
+    const std::vector<base::Optional<TimeDelta>>& local_times,
+    const WTF::Vector<Timing>& timings) {
   DCHECK(!animators_.at(animation_id));
   Animator* animator =
-      CreateInstance(name, options, serialized_state, local_times);
+      CreateInstance(name, options, serialized_state, local_times, timings);
   if (!animator)
     return nullptr;
   animators_.Set(animation_id, animator);
@@ -104,10 +106,18 @@
           *(static_cast<WorkletAnimationOptions*>(animation.options.get()));
     }
 
-    std::vector<base::Optional<TimeDelta>> local_times(animation.num_effects,
-                                                       base::nullopt);
+    // Down casting to blink type
+    WTF::Vector<Timing> timings = (static_cast<WorkletAnimationEffectTimings*>(
+                                       animation.effect_timings.get()))
+                                      ->GetTimings()
+                                      ->data;
+    DCHECK_GE(timings.size(), 1u);
+
+    std::vector<base::Optional<TimeDelta>> local_times(
+        static_cast<int>(timings.size()), base::nullopt);
+
     CreateAnimatorFor(id, name, options, nullptr /* serialized_state */,
-                      local_times);
+                      local_times, timings);
   }
 }
 
@@ -233,7 +243,8 @@
     const String& name,
     WorkletAnimationOptions options,
     scoped_refptr<SerializedScriptValue> serialized_state,
-    const std::vector<base::Optional<TimeDelta>>& local_times) {
+    const std::vector<base::Optional<TimeDelta>>& local_times,
+    const WTF::Vector<Timing>& timings) {
   DCHECK(IsContextThread());
   AnimatorDefinition* definition = animator_definitions_.at(name);
   if (!definition)
@@ -263,7 +274,8 @@
   }
 
   return MakeGarbageCollected<Animator>(isolate, definition, instance.V8Value(),
-                                        name, std::move(options), local_times);
+                                        name, std::move(options), local_times,
+                                        timings);
 }
 
 bool AnimationWorkletGlobalScope::IsAnimatorStateful(int animation_id) {
@@ -318,7 +330,7 @@
 
     target_global_scope->CreateAnimatorFor(
         animation_id, animator->name(), animator->options(), serialized_state,
-        animator->GetLocalTimes());
+        animator->GetLocalTimes(), animator->GetTimings());
   }
   animators_.clear();
 }
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.h b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.h
index d7c81417..b50fbb6 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.h
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.h
@@ -67,13 +67,15 @@
       const String& name,
       WorkletAnimationOptions options,
       scoped_refptr<SerializedScriptValue> serialized_state,
-      const std::vector<base::Optional<TimeDelta>>& local_times);
+      const std::vector<base::Optional<TimeDelta>>& local_times,
+      const Vector<Timing>& timings);
   Animator* CreateAnimatorFor(
       int animation_id,
       const String& name,
       WorkletAnimationOptions options,
       scoped_refptr<SerializedScriptValue> serialized_state,
-      const std::vector<base::Optional<TimeDelta>>& local_times);
+      const std::vector<base::Optional<TimeDelta>>& local_times,
+      const Vector<Timing>& timings);
   typedef HeapHashMap<String, Member<AnimatorDefinition>> DefinitionMap;
   DefinitionMap animator_definitions_;
 
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.idl b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.idl
index c24290f..23c9a649 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.idl
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope.idl
@@ -16,6 +16,6 @@
 // https://wicg.github.io/animation-worklet/#create-a-new-animator-instance
 callback AnimatorConstructor = any (any options, any state);
 // https://wicg.github.io/animation-worklet/#run-animators
-callback AnimateCallback = void (double currentTime, (EffectProxy or WorkletGroupEffectProxy) effect);
+callback AnimateCallback = void (double currentTime, (WorkletAnimationEffect or WorkletGroupEffect) effect);
 // https://drafts.css-houdini.org/css-animationworklet/#stateful-animator-desc
 callback StateCallback = any ();
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
index f6bd94a..a991fc2e 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
@@ -59,6 +59,12 @@
   return output;
 }
 
+std::unique_ptr<WorkletAnimationEffectTimings> CreateEffectTimings() {
+  auto timings = base::MakeRefCounted<base::RefCountedData<Vector<Timing>>>();
+  timings->data.push_back(Timing());
+  return std::make_unique<WorkletAnimationEffectTimings>(std::move(timings));
+}
+
 }  // namespace
 
 class AnimationWorkletGlobalScopeTest : public PageTestBase {
@@ -204,8 +210,10 @@
     // worklet to create and animate an animator.
     cc::WorkletAnimationId animation_id = {1, 1};
     AnimationWorkletInput state;
-    state.added_and_updated_animations.emplace_back(animation_id, "test", 5000,
-                                                    nullptr, 1);
+    std::unique_ptr<WorkletAnimationEffectTimings> effect_timings =
+        CreateEffectTimings();
+    state.added_and_updated_animations.emplace_back(
+        animation_id, "test", 5000, nullptr, std::move(effect_timings));
 
     std::unique_ptr<AnimationWorkletOutput> output =
         ProxyClientMutate(state, global_scope);
@@ -304,8 +312,10 @@
     // worklet to create and animate an animator.
     cc::WorkletAnimationId animation_id = {1, 1};
     AnimationWorkletInput state;
-    state.added_and_updated_animations.emplace_back(animation_id, "test", 5000,
-                                                    nullptr, 1);
+    std::unique_ptr<WorkletAnimationEffectTimings> effect_timings =
+        CreateEffectTimings();
+    state.added_and_updated_animations.emplace_back(
+        animation_id, "test", 5000, nullptr, std::move(effect_timings));
 
     std::unique_ptr<AnimationWorkletOutput> output =
         ProxyClientMutate(state, global_scope);
@@ -364,8 +374,10 @@
     output = ProxyClientMutate(state, global_scope);
     EXPECT_EQ(global_scope->GetAnimatorsSizeForTest(), 0u);
 
+    std::unique_ptr<WorkletAnimationEffectTimings> effect_timings =
+        CreateEffectTimings();
     state.added_and_updated_animations.push_back(
-        {animation_id, "test", 5000, nullptr, 1});
+        {animation_id, "test", 5000, nullptr, std::move(effect_timings)});
     EXPECT_EQ(state.added_and_updated_animations.size(), 1u);
 
     output = ProxyClientMutate(state, global_scope);
@@ -404,8 +416,10 @@
 
     cc::WorkletAnimationId animation_id = {1, 1};
     AnimationWorkletInput state;
+    std::unique_ptr<WorkletAnimationEffectTimings> effect_timings =
+        CreateEffectTimings();
     state.added_and_updated_animations.push_back(
-        {animation_id, "test", 5000, nullptr, 1});
+        {animation_id, "test", 5000, nullptr, std::move(effect_timings)});
     EXPECT_EQ(state.added_and_updated_animations.size(), 1u);
 
     std::unique_ptr<AnimationWorkletOutput> output =
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
index 80131dda..cf6621d 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
@@ -145,6 +145,12 @@
     waitable_event->Signal();
   }
 
+  std::unique_ptr<WorkletAnimationEffectTimings> CreateEffectTimings() {
+    auto timings = base::MakeRefCounted<base::RefCountedData<Vector<Timing>>>();
+    timings->data.push_back(Timing());
+    return std::make_unique<WorkletAnimationEffectTimings>(std::move(timings));
+  }
+
   void RunMigrateAnimatorsBetweenGlobalScopesOnWorklet(
       AnimationWorkletProxyClient* proxy_client,
       base::WaitableEvent* waitable_event) {
@@ -177,15 +183,19 @@
         std::make_unique<AnimationWorkletInput>();
     cc::WorkletAnimationId first_animation_id = {1, 1};
     cc::WorkletAnimationId second_animation_id = {1, 2};
+    std::unique_ptr<WorkletAnimationEffectTimings> effect_timings =
+        CreateEffectTimings();
     state->added_and_updated_animations.emplace_back(
-        first_animation_id,    // animation id
-        "stateless_animator",  // name associated with the animation
-        5000,                  // animation's current time
-        nullptr,               // options
-        1                      // number of keyframe effects
+        first_animation_id,        // animation id
+        "stateless_animator",      // name associated with the animation
+        5000,                      // animation's current time
+        nullptr,                   // options
+        std::move(effect_timings)  // keyframe effect timings
     );
+    effect_timings = CreateEffectTimings();
     state->added_and_updated_animations.emplace_back(
-        second_animation_id, "stateful_animator", 5000, nullptr, 1);
+        second_animation_id, "stateful_animator", 5000, nullptr,
+        std::move(effect_timings));
 
     // Initialize switch countdown to 1, to force a switch on the second call.
     proxy_client->next_global_scope_switch_countdown_ = 1;
diff --git a/third_party/blink/renderer/modules/animationworklet/animator.cc b/third_party/blink/renderer/modules/animationworklet/animator.cc
index 5d58ed7..ec5a849f 100644
--- a/third_party/blink/renderer/modules/animationworklet/animator.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animator.cc
@@ -5,9 +5,9 @@
 #include "third_party/blink/renderer/modules/animationworklet/animator.h"
 
 #include "base/stl_util.h"
-#include "third_party/blink/renderer/bindings/modules/v8/effect_proxy_or_worklet_group_effect_proxy.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_animate_callback.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_state_callback.h"
+#include "third_party/blink/renderer/bindings/modules/v8/worklet_animation_effect_or_worklet_group_effect.h"
 #include "third_party/blink/renderer/modules/animationworklet/animator_definition.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "v8/include/v8.h"
@@ -19,13 +19,14 @@
                    v8::Local<v8::Value> instance,
                    const String& name,
                    WorkletAnimationOptions options,
-                   const std::vector<base::Optional<TimeDelta>>& local_times)
+                   const std::vector<base::Optional<TimeDelta>>& local_times,
+                   const Vector<Timing>& timings)
     : definition_(definition),
       instance_(isolate, instance),
       name_(name),
       options_(options),
       group_effect_(
-          MakeGarbageCollected<WorkletGroupEffectProxy>(local_times)) {
+          MakeGarbageCollected<WorkletGroupEffect>(local_times, timings)) {
   DCHECK_GE(local_times.size(), 1u);
 }
 
@@ -47,11 +48,11 @@
   if (IsUndefinedOrNull(instance))
     return false;
 
-  EffectProxyOrWorkletGroupEffectProxy effect;
+  WorkletAnimationEffectOrWorkletGroupEffect effect;
   if (group_effect_->getChildren().size() == 1) {
-    effect.SetEffectProxy(group_effect_->getChildren()[0]);
+    effect.SetWorkletAnimationEffect(group_effect_->getChildren()[0]);
   } else {
-    effect.SetWorkletGroupEffectProxy(group_effect_);
+    effect.SetWorkletGroupEffect(group_effect_);
   }
 
   v8::TryCatch try_catch(isolate);
@@ -75,6 +76,15 @@
   return local_times;
 }
 
+Vector<Timing> Animator::GetTimings() const {
+  Vector<Timing> timings;
+  timings.ReserveInitialCapacity(group_effect_->getChildren().size());
+  for (const auto& effect : group_effect_->getChildren()) {
+    timings.push_back(effect->SpecifiedTiming());
+  }
+  return timings;
+}
+
 bool Animator::IsStateful() const {
   return definition_->IsStateful();
 }
diff --git a/third_party/blink/renderer/modules/animationworklet/animator.h b/third_party/blink/renderer/modules/animationworklet/animator.h
index 50eb460..c006031 100644
--- a/third_party/blink/renderer/modules/animationworklet/animator.h
+++ b/third_party/blink/renderer/modules/animationworklet/animator.h
@@ -5,8 +5,10 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_ANIMATOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_ANIMATOR_H_
 
+#include "third_party/blink/renderer/core/animation/timing.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h"
 #include "third_party/blink/renderer/modules/animationworklet/worklet_animation_options.h"
-#include "third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_group_effect.h"
 #include "third_party/blink/renderer/platform/bindings/name_client.h"
 #include "third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h"
 #include "third_party/blink/renderer/platform/graphics/animation_worklet_mutators_state.h"
@@ -29,7 +31,8 @@
            v8::Local<v8::Value> instance,
            const String& name,
            WorkletAnimationOptions options,
-           const std::vector<base::Optional<TimeDelta>>& local_times);
+           const std::vector<base::Optional<TimeDelta>>& local_times,
+           const Vector<Timing>& timings);
   ~Animator();
   void Trace(blink::Visitor*);
   const char* NameInHeapSnapshot() const override { return "Animator"; }
@@ -42,11 +45,11 @@
                AnimationWorkletDispatcherOutput::AnimationState* output);
   v8::Local<v8::Value> State(v8::Isolate*, ExceptionState&);
   std::vector<base::Optional<TimeDelta>> GetLocalTimes() const;
+  Vector<Timing> GetTimings() const;
   bool IsStateful() const;
 
   const String& name() const { return name_; }
   WorkletAnimationOptions options() { return options_; }
-  int num_effects() const { return group_effect_->getChildren().size(); }
 
  private:
   // This object keeps the definition object, and animator instance alive.
@@ -61,7 +64,7 @@
   String name_;
   WorkletAnimationOptions options_;
 
-  Member<WorkletGroupEffectProxy> group_effect_;
+  Member<WorkletGroupEffect> group_effect_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/effect_proxy.h b/third_party/blink/renderer/modules/animationworklet/effect_proxy.h
deleted file mode 100644
index 24b3913..0000000
--- a/third_party/blink/renderer/modules/animationworklet/effect_proxy.h
+++ /dev/null
@@ -1,32 +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 THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_EFFECT_PROXY_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_EFFECT_PROXY_H_
-
-#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
-#include "third_party/blink/renderer/modules/modules_export.h"
-#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
-
-#include "third_party/blink/renderer/platform/wtf/time.h"
-
-namespace blink {
-
-class MODULES_EXPORT EffectProxy : public ScriptWrappable {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  explicit EffectProxy(base::Optional<TimeDelta> local_time);
-
-  void setLocalTime(double time_ms, bool is_null);
-  double localTime(bool& is_null) const;
-  base::Optional<WTF::TimeDelta> local_time() const;
-
- private:
-  base::Optional<WTF::TimeDelta> local_time_;
-};
-
-}  // namespace blink
-
-#endif
diff --git a/third_party/blink/renderer/modules/animationworklet/effect_proxy.idl b/third_party/blink/renderer/modules/animationworklet/effect_proxy.idl
deleted file mode 100644
index 60fab65..0000000
--- a/third_party/blink/renderer/modules/animationworklet/effect_proxy.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://wicg.github.io/animation-worklet/#worklet-group-effect
-// TODO(majidvp): Get rid of this in favor using KeyframeEffect interface directly.
-[
-    Exposed=AnimationWorklet,
-    RuntimeEnabled=AnimationWorklet
-] interface EffectProxy {
-  attribute double? localTime;
-};
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
index b6ac9b0..5d24a8d 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
@@ -249,11 +249,17 @@
       effect_needs_restart_(false) {
   DCHECK(IsMainThread());
 
+  auto timings = base::MakeRefCounted<base::RefCountedData<Vector<Timing>>>();
+  timings->data.ReserveInitialCapacity(effects_.size());
+
+  DCHECK_GE(effects_.size(), 1u);
   for (auto& effect : effects_) {
     AnimationEffect* target_effect = effect;
     target_effect->Attach(this);
     local_times_.push_back(base::nullopt);
+    timings->data.push_back(target_effect->SpecifiedTiming());
   }
+  effect_timings_ = std::make_unique<WorkletAnimationEffectTimings>(timings);
 
   if (timeline_->IsScrollTimeline())
     ToScrollTimeline(timeline_)->AttachAnimation();
@@ -568,7 +574,7 @@
     compositor_animation_ = CompositorAnimation::CreateWorkletAnimation(
         id_, animator_name_, playback_rate_,
         scroll_timeline_util::ToCompositorScrollTimeline(timeline_),
-        std::move(options_));
+        std::move(options_), std::move(effect_timings_));
     compositor_animation_->SetAnimationDelegate(this);
   }
 
@@ -796,10 +802,13 @@
 
   if (!was_active && is_active) {
     input_state->Add({id_, std::string(animator_name_.Utf8().data()),
-                      current_time_ms, CloneOptions(), effects_.size()});
+                      current_time_ms, CloneOptions(), CloneEffectTimings()});
   } else if (was_active && is_active) {
     // Skip if the input time is not changed.
     if (did_time_change)
+      // TODO(jortaylo): EffectTimings need to be sent to the worklet during
+      // updates, otherwise the timing info will become outdated.
+      // https://crbug.com/915344.
       input_state->Update({id_, current_time_ms});
   } else if (was_active && !is_active) {
     input_state->Remove(id_);
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
index 07545e6c..b7c6d144 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/core/animation/animation_effect_owner.h"
 #include "third_party/blink/renderer/core/animation/keyframe_effect.h"
 #include "third_party/blink/renderer/core/animation/worklet_animation_base.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h"
 #include "third_party/blink/renderer/modules/animationworklet/worklet_animation_options.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/animation/compositor_animation.h"
@@ -182,6 +183,10 @@
     return options_ ? options_->Clone() : nullptr;
   }
 
+  std::unique_ptr<cc::AnimationEffectTimings> CloneEffectTimings() const {
+    return effect_timings_ ? effect_timings_->Clone() : nullptr;
+  }
+
   Animation::AnimationPlayState PlayState() const { return play_state_; }
   void SetPlayState(const Animation::AnimationPlayState& state) {
     play_state_ = state;
@@ -219,6 +224,7 @@
   HeapVector<Member<KeyframeEffect>> effects_;
   Member<AnimationTimeline> timeline_;
   std::unique_ptr<WorkletAnimationOptions> options_;
+  std::unique_ptr<WorkletAnimationEffectTimings> effect_timings_;
 
   std::unique_ptr<CompositorAnimation> compositor_animation_;
   bool running_on_main_thread_;
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.cc
new file mode 100644
index 0000000..a4d0932
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.cc
@@ -0,0 +1,70 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.h"
+
+namespace blink {
+
+WorkletAnimationEffect::WorkletAnimationEffect(
+    base::Optional<TimeDelta> local_time,
+    const Timing& specified_timing)
+    : local_time_(local_time), specified_timing_(specified_timing) {
+  specified_timing_.AssertValid();
+}
+
+EffectTiming* WorkletAnimationEffect::getTiming() const {
+  EffectTiming* effect_timing = EffectTiming::Create();
+
+  // This logic mirrors the blink side logic contained in
+  // third_party\blink\renderer\core\animation\animation_effect.cc
+
+  // TODO(jortaylo): Extract this logic to Timing.h aso that it can be
+  // shared between blink and animation worklet (https://crbug.com/915344).
+  effect_timing->setDelay(specified_timing_.start_delay * 1000);
+  effect_timing->setEndDelay(specified_timing_.end_delay * 1000);
+  effect_timing->setFill(Timing::FillModeString(specified_timing_.fill_mode));
+  effect_timing->setIterationStart(specified_timing_.iteration_start);
+  effect_timing->setIterations(specified_timing_.iteration_count);
+  UnrestrictedDoubleOrString duration;
+  if (specified_timing_.iteration_duration) {
+    duration.SetUnrestrictedDouble(
+        specified_timing_.iteration_duration->InMillisecondsF());
+  } else {
+    duration.SetString("auto");
+  }
+  effect_timing->setDuration(duration);
+  effect_timing->setDirection(
+      Timing::PlaybackDirectionString(specified_timing_.direction));
+  effect_timing->setEasing(specified_timing_.timing_function->ToString());
+
+  return effect_timing;
+}
+
+void WorkletAnimationEffect::setLocalTime(double time_ms, bool is_null) {
+  if (is_null) {
+    local_time_.reset();
+    return;
+  }
+  DCHECK(!std::isnan(time_ms));
+  // Convert double to TimeDelta because cc/animation expects TimeDelta.
+  //
+  // Note on precision loss: TimeDelta has microseconds precision which is
+  // also the precision recommended by the web animation specification as well
+  // [1]. If the input time value has a bigger precision then the conversion
+  // causes precision loss. Doing the conversion here ensures that reading the
+  // value back provides the actual value we use in further computation which
+  // is the least surprising path.
+  // [1] https://drafts.csswg.org/web-animations/#precision-of-time-values
+  local_time_ = WTF::TimeDelta::FromMillisecondsD(time_ms);
+}
+
+double WorkletAnimationEffect::localTime(bool& is_null) const {
+  is_null = !local_time_.has_value();
+  return local_time_.value_or(base::TimeDelta()).InMillisecondsF();
+}
+
+base::Optional<WTF::TimeDelta> WorkletAnimationEffect::local_time() const {
+  return local_time_;
+}
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.h
new file mode 100644
index 0000000..2582c71
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.h
@@ -0,0 +1,44 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_H_
+
+#include "third_party/blink/renderer/core/animation/effect_timing.h"
+#include "third_party/blink/renderer/core/animation/timing.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/wtf/time.h"
+
+namespace blink {
+
+class MODULES_EXPORT WorkletAnimationEffect : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  WorkletAnimationEffect(base::Optional<TimeDelta> local_time,
+                         const Timing& timing);
+
+  // This function is named getTiming() as opposed to getEffectTiming() because
+  // that is how it is defined in worklet_animation_effect.idl
+  EffectTiming* getTiming() const;
+  // Because getTiming is already used above, SpecifiedTiming will be used to
+  // return the specified Timing object given at initialization
+  const Timing& SpecifiedTiming() { return specified_timing_; }
+
+  void setLocalTime(double time_ms, bool is_null);
+  double localTime(bool& is_null) const;
+  base::Optional<WTF::TimeDelta> local_time() const;
+
+ private:
+  base::Optional<WTF::TimeDelta> local_time_;
+  // We chose to not call this variable "timing_" to avoid confusion with the
+  // above function call getTiming() which returns a pointer to an EffectTiming
+  // object, as is defined in worklet_animation_effect.idl.
+  const Timing specified_timing_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_H_
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.idl b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.idl
new file mode 100644
index 0000000..2e9de22
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.idl
@@ -0,0 +1,13 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://drafts.css-houdini.org/css-animationworklet/#worklet-group-effect
+// TODO(majidvp): Get rid of this in favor using KeyframeEffect interface directly.
+[
+    Exposed=AnimationWorklet,
+    RuntimeEnabled=AnimationWorklet
+] interface WorkletAnimationEffect {
+  EffectTiming getTiming();
+  attribute double? localTime;
+};
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.cc
new file mode 100644
index 0000000..852ec23
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.cc
@@ -0,0 +1,20 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h"
+
+namespace blink {
+
+WorkletAnimationEffectTimings::WorkletAnimationEffectTimings(
+    scoped_refptr<base::RefCountedData<Vector<Timing>>> timings)
+    : timings_(timings) {}
+
+std::unique_ptr<cc::AnimationEffectTimings>
+WorkletAnimationEffectTimings::Clone() const {
+  return std::make_unique<WorkletAnimationEffectTimings>(timings_);
+}
+
+WorkletAnimationEffectTimings::~WorkletAnimationEffectTimings() {}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h
new file mode 100644
index 0000000..c71c4d64
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h
@@ -0,0 +1,34 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_TIMINGS_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_TIMINGS_H_
+
+#include "third_party/blink/renderer/core/animation/timing.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/animation/compositor_animation.h"
+
+namespace blink {
+
+class MODULES_EXPORT WorkletAnimationEffectTimings final
+    : public cc::AnimationEffectTimings {
+ public:
+  explicit WorkletAnimationEffectTimings(
+      scoped_refptr<base::RefCountedData<Vector<Timing>>>);
+
+  std::unique_ptr<cc::AnimationEffectTimings> Clone() const override;
+
+  ~WorkletAnimationEffectTimings() override;
+
+  const scoped_refptr<base::RefCountedData<Vector<Timing>>>& GetTimings() {
+    return timings_;
+  }
+
+ private:
+  scoped_refptr<base::RefCountedData<Vector<Timing>>> timings_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_ANIMATION_EFFECT_TIMINGS_H_
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.cc b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.cc
new file mode 100644
index 0000000..e350d55
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.cc
@@ -0,0 +1,27 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/animationworklet/worklet_group_effect.h"
+
+namespace blink {
+
+WorkletGroupEffect::WorkletGroupEffect(
+    const std::vector<base::Optional<TimeDelta>>& local_times,
+    const Vector<Timing>& timings) {
+  DCHECK_GE(local_times.size(), 1u);
+  DCHECK_EQ(local_times.size(), timings.size());
+
+  effects_.ReserveInitialCapacity(timings.size());
+  for (int i = 0; i < static_cast<int>(local_times.size()); i++) {
+    effects_.push_back(MakeGarbageCollected<WorkletAnimationEffect>(
+        local_times[i], timings[i]));
+  }
+}
+
+void WorkletGroupEffect::Trace(blink::Visitor* visitor) {
+  visitor->Trace(effects_);
+  ScriptWrappable::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.h b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.h
new file mode 100644
index 0000000..07650af
--- /dev/null
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.h
@@ -0,0 +1,34 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_H_
+
+#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect.h"
+#include "third_party/blink/renderer/modules/animationworklet/worklet_animation_effect_timings.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+
+namespace blink {
+
+class MODULES_EXPORT WorkletGroupEffect : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  explicit WorkletGroupEffect(
+      const std::vector<base::Optional<TimeDelta>>& local_times,
+      const Vector<Timing>& timings);
+  const HeapVector<Member<WorkletAnimationEffect>>& getChildren() {
+    return effects_;
+  }
+  void Trace(blink::Visitor*) override;
+
+ private:
+  HeapVector<Member<WorkletAnimationEffect>> effects_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_H_
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.idl b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.idl
similarity index 73%
rename from third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.idl
rename to third_party/blink/renderer/modules/animationworklet/worklet_group_effect.idl
index eb2deb0b..c230f7f 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.idl
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect.idl
@@ -4,6 +4,6 @@
 [
     Exposed=AnimationWorklet,
     RuntimeEnabled=AnimationWorklet
-] interface WorkletGroupEffectProxy {
-  sequence<EffectProxy> getChildren();
+] interface WorkletGroupEffect {
+  sequence<WorkletAnimationEffect> getChildren();
 };
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.cc b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.cc
deleted file mode 100644
index 05cbf4a9..0000000
--- a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.h"
-
-namespace blink {
-
-WorkletGroupEffectProxy::WorkletGroupEffectProxy(
-    const std::vector<base::Optional<TimeDelta>>& local_times) {
-  DCHECK_GE(local_times.size(), 1u);
-  for (auto& local_time : local_times) {
-    effects_.push_back(MakeGarbageCollected<EffectProxy>(local_time));
-  }
-}
-
-void WorkletGroupEffectProxy::Trace(blink::Visitor* visitor) {
-  visitor->Trace(effects_);
-  ScriptWrappable::Trace(visitor);
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.h b/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.h
deleted file mode 100644
index f912bedd..0000000
--- a/third_party/blink/renderer/modules/animationworklet/worklet_group_effect_proxy.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_PROXY_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_PROXY_H_
-
-#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
-#include "third_party/blink/renderer/modules/animationworklet/effect_proxy.h"
-#include "third_party/blink/renderer/modules/modules_export.h"
-#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
-
-namespace blink {
-
-class MODULES_EXPORT WorkletGroupEffectProxy : public ScriptWrappable {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  explicit WorkletGroupEffectProxy(
-      const std::vector<base::Optional<TimeDelta>>& local_times);
-  HeapVector<Member<EffectProxy>>& getChildren() { return effects_; }
-  void Trace(blink::Visitor*) override;
-
- private:
-  HeapVector<Member<EffectProxy>> effects_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_ANIMATIONWORKLET_WORKLET_GROUP_EFFECT_PROXY_H_
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
index 699e28e..35da714 100644
--- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
+++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
@@ -165,7 +165,7 @@
 
   worker_pool::PostTask(
       FROM_HERE,
-      CrossThreadBind(
+      CrossThreadBindOnce(
           &BackgroundFetchIconLoader::DecodeAndResizeImageOnBackgroundThread,
           WrapCrossThreadPersistent(this), std::move(task_runner),
           SegmentReader::CreateFromSharedBuffer(std::move(data_))));
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
index 6b4fdcb5..23f44c3 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
@@ -152,12 +152,12 @@
 
   worker_pool::PostTask(
       FROM_HERE,
-      CrossThreadBind(&ClipboardWriter::DecodeOnBackgroundThread,
-                      /* This unretained is safe because the ClipboardWriter
-                         will wait for Decode to finish and return back to this
-                         thread before deallocating. */
-                      CrossThreadUnretained(this), clipboard_task_runner_,
-                      WrapCrossThreadPersistent(array_buffer)));
+      CrossThreadBindOnce(&ClipboardWriter::DecodeOnBackgroundThread,
+                          /* This unretained is safe because the ClipboardWriter
+                             will wait for Decode to finish and return back to
+                             this thread before deallocating. */
+                          CrossThreadUnretained(this), clipboard_task_runner_,
+                          WrapCrossThreadPersistent(array_buffer)));
 }
 
 void ClipboardWriter::DidFail(FileErrorCode error_code) {
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc
index 4829781..84ec4bb2 100644
--- a/third_party/blink/renderer/modules/exported/web_ax_object.cc
+++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -1231,13 +1231,6 @@
   return private_->AccessibilityIsIgnored();
 }
 
-bool WebAXObject::AccessibilityIsIncludedInTree() const {
-  if (IsDetached())
-    return false;
-
-  return private_->AccessibilityIsIncludedInTree();
-}
-
 int WebAXObject::AriaColumnCount() const {
   if (IsDetached())
     return 0;
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
index f612579..67d56cb 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
@@ -18,11 +18,21 @@
 #include "media/capture/video_capture_types.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util_video_device.h"
 #include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/renderer/platform/cross_thread_functional.h"
+#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
+#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 
 namespace blink {
 
 namespace {
-void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) {
+
+// This alias mimics the definition of VideoCaptureDeliverFrameCB.
+using VideoCaptureDeliverFrameInternalCallback =
+    WTF::CrossThreadFunction<void(scoped_refptr<media::VideoFrame> video_frame,
+                                  base::TimeTicks estimated_capture_time)>;
+
+void ResetCallback(
+    std::unique_ptr<VideoCaptureDeliverFrameInternalCallback> callback) {
   // |callback| will be deleted when this exits.
 }
 
@@ -43,17 +53,15 @@
  public:
   using VideoSinkId = WebMediaStreamSink*;
 
-  FrameDeliverer(
-      scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
-      base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)>
-          frame_dropped_cb,
-      bool enabled);
+  FrameDeliverer(scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+                 base::WeakPtr<MediaStreamVideoTrack> media_stream_video_track,
+                 bool enabled);
 
   void SetEnabled(bool enabled);
 
   // Add |callback| to receive video frames on the IO-thread.
   // Must be called on the main render thread.
-  void AddCallback(VideoSinkId id, const VideoCaptureDeliverFrameCB& callback);
+  void AddCallback(VideoSinkId id, VideoCaptureDeliverFrameCB callback);
 
   // Removes |callback| associated with |id| from receiving video frames if |id|
   // has been added. It is ok to call RemoveCallback even if the |id| has not
@@ -70,7 +78,7 @@
   friend class base::RefCountedThreadSafe<FrameDeliverer>;
   virtual ~FrameDeliverer();
   void AddCallbackOnIO(VideoSinkId id,
-                       const VideoCaptureDeliverFrameCB& callback);
+                       VideoCaptureDeliverFrameInternalCallback callback);
   void RemoveCallbackOnIO(
       VideoSinkId id,
       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
@@ -89,15 +97,14 @@
   // Can be null in testing.
   scoped_refptr<base::SingleThreadTaskRunner> main_render_task_runner_;
 
-  base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)>
-      frame_dropped_cb_;
+  base::WeakPtr<MediaStreamVideoTrack> media_stream_video_track_;
 
   bool enabled_;
   scoped_refptr<media::VideoFrame> black_frame_;
   bool emit_frame_drop_events_;
 
   using VideoIdCallbackPair =
-      std::pair<VideoSinkId, VideoCaptureDeliverFrameCB>;
+      std::pair<VideoSinkId, VideoCaptureDeliverFrameInternalCallback>;
   std::vector<VideoIdCallbackPair> callbacks_;
 
   DISALLOW_COPY_AND_ASSIGN(FrameDeliverer);
@@ -105,11 +112,10 @@
 
 MediaStreamVideoTrack::FrameDeliverer::FrameDeliverer(
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
-    base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)>
-        frame_dropped_cb,
+    base::WeakPtr<MediaStreamVideoTrack> media_stream_video_track,
     bool enabled)
     : io_task_runner_(std::move(io_task_runner)),
-      frame_dropped_cb_(std::move(frame_dropped_cb)),
+      media_stream_video_track_(media_stream_video_track),
       enabled_(enabled),
       emit_frame_drop_events_(true) {
   DCHECK(io_task_runner_.get());
@@ -127,25 +133,29 @@
 
 void MediaStreamVideoTrack::FrameDeliverer::AddCallback(
     VideoSinkId id,
-    const VideoCaptureDeliverFrameCB& callback) {
+    VideoCaptureDeliverFrameCB callback) {
   DCHECK_CALLED_ON_VALID_THREAD(main_render_thread_checker_);
-  io_task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(&FrameDeliverer::AddCallbackOnIO, this, id, callback));
+  PostCrossThreadTask(
+      *io_task_runner_, FROM_HERE,
+      CrossThreadBindOnce(&FrameDeliverer::AddCallbackOnIO,
+                          WrapRefCounted(this), CrossThreadUnretained(id),
+                          WTF::Passed(CrossThreadBind(std::move(callback)))));
 }
 
 void MediaStreamVideoTrack::FrameDeliverer::AddCallbackOnIO(
     VideoSinkId id,
-    const VideoCaptureDeliverFrameCB& callback) {
+    VideoCaptureDeliverFrameInternalCallback callback) {
   DCHECK(io_task_runner_->BelongsToCurrentThread());
-  callbacks_.push_back(std::make_pair(id, callback));
+  callbacks_.push_back(std::make_pair(id, std::move(callback)));
 }
 
 void MediaStreamVideoTrack::FrameDeliverer::RemoveCallback(VideoSinkId id) {
   DCHECK_CALLED_ON_VALID_THREAD(main_render_thread_checker_);
-  io_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&FrameDeliverer::RemoveCallbackOnIO, this, id,
-                                base::ThreadTaskRunnerHandle::Get()));
+  PostCrossThreadTask(
+      *io_task_runner_, FROM_HERE,
+      CrossThreadBindOnce(&FrameDeliverer::RemoveCallbackOnIO,
+                          WrapRefCounted(this), CrossThreadUnretained(id),
+                          Thread::Current()->GetTaskRunner()));
 }
 
 void MediaStreamVideoTrack::FrameDeliverer::RemoveCallbackOnIO(
@@ -156,11 +166,13 @@
   for (; it != callbacks_.end(); ++it) {
     if (it->first == id) {
       // Callback is copied to heap and then deleted on the target thread.
-      std::unique_ptr<VideoCaptureDeliverFrameCB> callback;
-      callback.reset(new VideoCaptureDeliverFrameCB(it->second));
+      std::unique_ptr<VideoCaptureDeliverFrameInternalCallback> callback;
+      callback.reset(
+          new VideoCaptureDeliverFrameInternalCallback(std::move(it->second)));
       callbacks_.erase(it);
-      task_runner->PostTask(
-          FROM_HERE, base::BindOnce(&ResetCallback, std::move(callback)));
+      PostCrossThreadTask(
+          *task_runner, FROM_HERE,
+          CrossThreadBindOnce(&ResetCallback, std::move(callback)));
       return;
     }
   }
@@ -168,9 +180,9 @@
 
 void MediaStreamVideoTrack::FrameDeliverer::SetEnabled(bool enabled) {
   DCHECK_CALLED_ON_VALID_THREAD(main_render_thread_checker_);
-  io_task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(&FrameDeliverer::SetEnabledOnIO, this, enabled));
+  PostCrossThreadTask(*io_task_runner_, FROM_HERE,
+                      CrossThreadBindOnce(&FrameDeliverer::SetEnabledOnIO,
+                                          WrapRefCounted(this), enabled));
 }
 
 void MediaStreamVideoTrack::FrameDeliverer::SetEnabledOnIO(bool enabled) {
@@ -189,10 +201,14 @@
   DCHECK(io_task_runner_->BelongsToCurrentThread());
   if (!enabled_ && main_render_task_runner_ && emit_frame_drop_events_) {
     emit_frame_drop_events_ = false;
-    main_render_task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            frame_dropped_cb_,
+
+    // TODO(crbug.com/964947): A weak ptr instance of MediaStreamVideoTrack is
+    // passed to FrameDeliverer in order to avoid the re-binding the instance of
+    // a WTF::CrossThreadFunction.
+    PostCrossThreadTask(
+        *main_render_task_runner_, FROM_HERE,
+        CrossThreadBindOnce(
+            &MediaStreamVideoTrack::OnFrameDropped, media_stream_video_track_,
             media::VideoCaptureFrameDropReason::
                 kVideoTrackFrameDelivererNotEnabledReplacingWithBlackFrame));
   }
@@ -219,8 +235,8 @@
                                         black_frame_->natural_size());
   if (!wrapped_black_frame)
     return nullptr;
-  wrapped_black_frame->AddDestructionObserver(
-      base::BindOnce(&ReleaseOriginalFrame, black_frame_));
+  wrapped_black_frame->AddDestructionObserver(ConvertToBaseOnceCallback(
+      CrossThreadBindOnce(&ReleaseOriginalFrame, black_frame_)));
 
   wrapped_black_frame->set_timestamp(reference_frame.timestamp());
   base::TimeTicks reference_time;
@@ -297,21 +313,18 @@
       weak_factory_(this) {
   frame_deliverer_ =
       base::MakeRefCounted<MediaStreamVideoTrack::FrameDeliverer>(
-          source->io_task_runner(),
-          base::BindRepeating(&MediaStreamVideoTrack::OnFrameDropped,
-                              weak_factory_.GetWeakPtr()),
-          enabled);
-  source->AddTrack(
-      this, VideoTrackAdapterSettings(),
-      base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
-                 frame_deliverer_),
-      media::BindToCurrentLoop(base::BindRepeating(
-          &MediaStreamVideoTrack::SetSizeAndComputedFrameRate,
-          weak_factory_.GetWeakPtr())),
-      media::BindToCurrentLoop(base::BindRepeating(
-          &MediaStreamVideoTrack::set_computed_source_format,
-          weak_factory_.GetWeakPtr())),
-      callback);
+          source->io_task_runner(), weak_factory_.GetWeakPtr(), enabled);
+  source->AddTrack(this, VideoTrackAdapterSettings(),
+                   ConvertToBaseCallback(CrossThreadBind(
+                       &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
+                       frame_deliverer_)),
+                   media::BindToCurrentLoop(WTF::BindRepeating(
+                       &MediaStreamVideoTrack::SetSizeAndComputedFrameRate,
+                       weak_factory_.GetWeakPtr())),
+                   media::BindToCurrentLoop(WTF::BindRepeating(
+                       &MediaStreamVideoTrack::set_computed_source_format,
+                       weak_factory_.GetWeakPtr())),
+                   callback);
 }
 
 MediaStreamVideoTrack::MediaStreamVideoTrack(
@@ -332,21 +345,18 @@
       weak_factory_(this) {
   frame_deliverer_ =
       base::MakeRefCounted<MediaStreamVideoTrack::FrameDeliverer>(
-          source->io_task_runner(),
-          base::BindRepeating(&MediaStreamVideoTrack::OnFrameDropped,
-                              weak_factory_.GetWeakPtr()),
-          enabled);
-  source->AddTrack(
-      this, adapter_settings,
-      base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
-                 frame_deliverer_),
-      media::BindToCurrentLoop(base::BindRepeating(
-          &MediaStreamVideoTrack::SetSizeAndComputedFrameRate,
-          weak_factory_.GetWeakPtr())),
-      media::BindToCurrentLoop(base::BindRepeating(
-          &MediaStreamVideoTrack::set_computed_source_format,
-          weak_factory_.GetWeakPtr())),
-      callback);
+          source->io_task_runner(), weak_factory_.GetWeakPtr(), enabled);
+  source->AddTrack(this, adapter_settings,
+                   ConvertToBaseCallback(CrossThreadBind(
+                       &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
+                       frame_deliverer_)),
+                   media::BindToCurrentLoop(WTF::BindRepeating(
+                       &MediaStreamVideoTrack::SetSizeAndComputedFrameRate,
+                       weak_factory_.GetWeakPtr())),
+                   media::BindToCurrentLoop(WTF::BindRepeating(
+                       &MediaStreamVideoTrack::set_computed_source_format,
+                       weak_factory_.GetWeakPtr())),
+                   callback);
 }
 
 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
diff --git a/third_party/blink/renderer/modules/modules_idl_files.gni b/third_party/blink/renderer/modules/modules_idl_files.gni
index 299aa55d..055caf8 100644
--- a/third_party/blink/renderer/modules/modules_idl_files.gni
+++ b/third_party/blink/renderer/modules/modules_idl_files.gni
@@ -61,9 +61,9 @@
     get_path_info(
         [
           "animationworklet/animation_worklet_global_scope.idl",
-          "animationworklet/effect_proxy.idl",
+          "animationworklet/worklet_animation_effect.idl",
           "animationworklet/worklet_animation.idl",
-          "animationworklet/worklet_group_effect_proxy.idl",
+          "animationworklet/worklet_group_effect.idl",
           "app_banner/before_install_prompt_event.idl",
           "background_fetch/background_fetch_event.idl",
           "background_fetch/background_fetch_manager.idl",
diff --git a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
index af05c226..3af64ee 100644
--- a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
+++ b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
@@ -57,13 +57,13 @@
 
   worker_pool::PostTask(
       FROM_HERE,
-      CrossThreadBind(&AsyncAudioDecoder::DecodeOnBackgroundThread,
-                      WrapCrossThreadPersistent(audio_data), sample_rate,
-                      WrapCrossThreadPersistent(success_callback),
-                      WrapCrossThreadPersistent(error_callback),
-                      WrapCrossThreadPersistent(resolver),
-                      WrapCrossThreadPersistent(context),
-                      std::move(task_runner)));
+      CrossThreadBindOnce(&AsyncAudioDecoder::DecodeOnBackgroundThread,
+                          WrapCrossThreadPersistent(audio_data), sample_rate,
+                          WrapCrossThreadPersistent(success_callback),
+                          WrapCrossThreadPersistent(error_callback),
+                          WrapCrossThreadPersistent(resolver),
+                          WrapCrossThreadPersistent(context),
+                          std::move(task_runner)));
 }
 
 void AsyncAudioDecoder::DecodeOnBackgroundThread(
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc
index 5ecf1cc..e112ab8 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc
@@ -54,7 +54,7 @@
 void AudioWorkletThread::EnsureSharedBackingThread() {
   DCHECK(IsMainThread());
   WorkletThreadHolder<AudioWorkletThread>::EnsureInstance(
-      ThreadCreationParams(WebThreadType::kWebAudioThread));
+      ThreadCreationParams(WebThreadType::kAudioWorkletThread));
 }
 
 void AudioWorkletThread::ClearSharedBackingThread() {
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket.cc b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
index 625f8ee..66971618e 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket.cc
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
@@ -363,9 +363,9 @@
     return;
   }
 
-  if (!ContentSecurityPolicy::ShouldBypassMainWorld(GetExecutionContext()) &&
-      !GetExecutionContext()->GetContentSecurityPolicy()->AllowConnectToSource(
-          url_)) {
+  if (!GetExecutionContext()
+           ->GetContentSecurityPolicyForWorld()
+           ->AllowConnectToSource(url_)) {
     state_ = kClosed;
 
     // Delay the event dispatch until after the current task by suspending and
diff --git a/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.cc b/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.cc
index 472afd8d..df2cf3f 100644
--- a/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.cc
+++ b/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.cc
@@ -93,8 +93,8 @@
     return;
 
   if (!input_source_) {
-    input_source_ = MakeGarbageCollected<XRInputSource>(session_, 0);
-    input_source_->SetTargetRayMode(XRInputSource::kScreen);
+    input_source_ = MakeGarbageCollected<XRInputSource>(session_, 0,
+                                                        XRInputSource::kScreen);
   }
 
   // Get the event location relative to the canvas element.
diff --git a/third_party/blink/renderer/modules/xr/xr_input_source.cc b/third_party/blink/renderer/modules/xr/xr_input_source.cc
index 630d929..6146d0e 100644
--- a/third_party/blink/renderer/modules/xr/xr_input_source.cc
+++ b/third_party/blink/renderer/modules/xr/xr_input_source.cc
@@ -79,6 +79,8 @@
     const device::mojom::blink::XRInputSourceDescriptionPtr& desc =
         state->description;
 
+    // Setting target ray mode and handedness is fine here because earlier in
+    // this function the input source was re-created if necessary.
     updated_source->SetTargetRayMode(
         MojomToBlinkTargetRayMode(desc->target_ray_mode));
     updated_source->SetHandedness(MojomToBlinkHandedness(desc->handedness));
@@ -106,20 +108,22 @@
   return updated_source;
 }
 
-XRInputSource::XRInputSource(XRSession* session, uint32_t source_id)
+XRInputSource::XRInputSource(XRSession* session,
+                             uint32_t source_id,
+                             TargetRayMode target_ray_mode)
     : session_(session),
       source_id_(source_id),
       target_ray_space_(MakeGarbageCollected<XRTargetRaySpace>(session, this)),
       grip_space_(MakeGarbageCollected<XRGripSpace>(session, this)),
       base_timestamp_(session->xr()->NavigationStart()) {
-  SetTargetRayMode(kGaze);
+  SetTargetRayMode(target_ray_mode);
   SetHandedness(kHandNone);
 }
 
 XRInputSource::XRInputSource(
     XRSession* session,
     const device::mojom::blink::XRInputSourceStatePtr& state)
-    : XRInputSource(session, state->source_id) {
+    : XRInputSource(session, state->source_id, kGaze) {
   if (state->gamepad) {
     gamepad_ = MakeGarbageCollected<Gamepad>(this, 0, base_timestamp_,
                                              TimeTicks::Now());
@@ -176,6 +180,20 @@
     return true;
   }
 
+  if (state->description) {
+    Handedness other_handedness =
+        MojomToBlinkHandedness(state->description->handedness);
+    if (other_handedness != handedness_) {
+      return true;
+    }
+
+    TargetRayMode other_mode =
+        MojomToBlinkTargetRayMode(state->description->target_ray_mode);
+    if (other_mode != target_ray_mode_) {
+      return true;
+    }
+  }
+
   return false;
 }
 
diff --git a/third_party/blink/renderer/modules/xr/xr_input_source.h b/third_party/blink/renderer/modules/xr/xr_input_source.h
index f1b545e2..9704436 100644
--- a/third_party/blink/renderer/modules/xr/xr_input_source.h
+++ b/third_party/blink/renderer/modules/xr/xr_input_source.h
@@ -43,7 +43,7 @@
       XRSession* session,
       const device::mojom::blink::XRInputSourceStatePtr& state);
 
-  XRInputSource(XRSession*, uint32_t source_id);
+  XRInputSource(XRSession*, uint32_t source_id, TargetRayMode);
   XRInputSource(XRSession*,
                 const device::mojom::blink::XRInputSourceStatePtr& state);
   XRInputSource(const XRInputSource& other);
@@ -60,7 +60,6 @@
 
   uint32_t source_id() const { return source_id_; }
 
-  void SetTargetRayMode(TargetRayMode);
   void SetPointerTransformMatrix(std::unique_ptr<TransformationMatrix>);
 
   // Gamepad::Client
@@ -83,6 +82,7 @@
   friend class XRTargetRaySpace;
 
   void SetHandedness(Handedness);
+  void SetTargetRayMode(TargetRayMode);
   void SetEmulatedPosition(bool emulated_position);
   void SetBasePoseMatrix(std::unique_ptr<TransformationMatrix>);
 
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc b/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc
index 9f97a4f..deecb6d 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc
@@ -25,9 +25,6 @@
 
 const double kFramebufferMinScale = 0.2;
 
-const double kViewportMinScale = 0.2;
-const double kViewportMaxScale = 1.0;
-
 // Because including base::ClampToRange would be a dependency violation
 double ClampToRange(const double value, const double min, const double max) {
   return std::min(std::max(value, min), max);
@@ -185,24 +182,6 @@
   return right_viewport_;
 }
 
-void XRWebGLLayer::requestViewportScaling(double scale_factor) {
-  if (!session()->immersive()) {
-    // TODO(bajones): For the moment we're just going to ignore viewport changes
-    // in non-immersive mode. This is legal, but probably not what developers
-    // would like to see. Look into making viewport scale apply properly.
-    scale_factor = 1.0;
-  } else {
-    // Clamp the developer-requested viewport size to ensure it's not too
-    // small to see or larger than the framebuffer.
-    scale_factor =
-        ClampToRange(scale_factor, kViewportMinScale, kViewportMaxScale);
-  }
-
-  // Don't set this as the viewport_scale_ directly, since that would allow the
-  // viewports to change mid-frame.
-  requested_viewport_scale_ = scale_factor;
-}
-
 double XRWebGLLayer::getNativeFramebufferScaleFactor(XRSession* session) {
   return session->NativeFramebufferScale();
 }
@@ -216,20 +195,17 @@
   if (session()->immersive()) {
     if (session()->StereoscopicViews()) {
       left_viewport_ = MakeGarbageCollected<XRViewport>(
-          0, 0, framebuffer_width * 0.5 * viewport_scale_,
-          framebuffer_height * viewport_scale_);
+          0, 0, framebuffer_width * 0.5, framebuffer_height);
       right_viewport_ = MakeGarbageCollected<XRViewport>(
-          framebuffer_width * 0.5 * viewport_scale_, 0,
-          framebuffer_width * 0.5 * viewport_scale_,
-          framebuffer_height * viewport_scale_);
+          framebuffer_width * 0.5, 0, framebuffer_width * 0.5,
+          framebuffer_height);
     } else {
       // Phone immersive AR only uses one viewport, but the second viewport is
       // needed for the UpdateLayerBounds mojo call which currently expects
       // exactly two views. This should be revisited as part of a refactor to
       // handle a more general list of viewports, cf. https://crbug.com/928433.
-      left_viewport_ = MakeGarbageCollected<XRViewport>(
-          0, 0, framebuffer_width * viewport_scale_,
-          framebuffer_height * viewport_scale_);
+      left_viewport_ = MakeGarbageCollected<XRViewport>(0, 0, framebuffer_width,
+                                                        framebuffer_height);
       right_viewport_ = nullptr;
     }
 
@@ -279,20 +255,13 @@
                                         FloatPoint(uv_right, uv_bottom));
     }
   } else {
-    left_viewport_ = MakeGarbageCollected<XRViewport>(
-        0, 0, framebuffer_width * viewport_scale_,
-        framebuffer_height * viewport_scale_);
+    left_viewport_ = MakeGarbageCollected<XRViewport>(0, 0, framebuffer_width,
+                                                      framebuffer_height);
   }
 }
 
 void XRWebGLLayer::OnFrameStart(
     const base::Optional<gpu::MailboxHolder>& buffer_mailbox_holder) {
-  // If the requested scale has changed since the last from, update it now.
-  if (viewport_scale_ != requested_viewport_scale_) {
-    viewport_scale_ = requested_viewport_scale_;
-    viewports_dirty_ = true;
-  }
-
   framebuffer_->MarkOpaqueBufferComplete(true);
   framebuffer_->SetContentsChanged(false);
   if (buffer_mailbox_holder) {
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_layer.h b/third_party/blink/renderer/modules/xr/xr_webgl_layer.h
index 1219109..95c3994 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_layer.h
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_layer.h
@@ -58,7 +58,6 @@
   bool ignoreDepthValues() const { return ignore_depth_values_; }
 
   XRViewport* getViewport(XRView*);
-  void requestViewportScaling(double scale_factor);
 
   static double getNativeFramebufferScaleFactor(XRSession* session);
 
@@ -88,8 +87,6 @@
   Member<WebGLFramebuffer> framebuffer_;
 
   double framebuffer_scale_ = 1.0;
-  double requested_viewport_scale_ = 1.0;
-  double viewport_scale_ = 1.0;
   bool viewports_dirty_ = true;
   bool can_mirror_ = false;
   bool is_direct_draw_frame = false;
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_layer.idl b/third_party/blink/renderer/modules/xr/xr_webgl_layer.idl
index d1091dd..3466ba52 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_layer.idl
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_layer.idl
@@ -21,7 +21,6 @@
   [SameObject] readonly attribute WebGLFramebuffer framebuffer;
 
   XRViewport? getViewport(XRView view);
-  void requestViewportScaling(double viewportScaleFactor);
 
   static double getNativeFramebufferScaleFactor(XRSession session);
 };
diff --git a/third_party/blink/renderer/platform/animation/compositor_animation.cc b/third_party/blink/renderer/platform/animation/compositor_animation.cc
index 5d8c808..759903e 100644
--- a/third_party/blink/renderer/platform/animation/compositor_animation.cc
+++ b/third_party/blink/renderer/platform/animation/compositor_animation.cc
@@ -24,10 +24,12 @@
     const String& name,
     double playback_rate,
     std::unique_ptr<CompositorScrollTimeline> scroll_timeline,
-    std::unique_ptr<cc::AnimationOptions> options) {
+    std::unique_ptr<cc::AnimationOptions> options,
+    std::unique_ptr<cc::AnimationEffectTimings> effect_timings) {
   return std::make_unique<CompositorAnimation>(cc::WorkletAnimation::Create(
       worklet_animation_id, std::string(name.Utf8().data()), playback_rate,
-      std::move(scroll_timeline), std::move(options)));
+      std::move(scroll_timeline), std::move(options),
+      std::move(effect_timings)));
 }
 
 CompositorAnimation::CompositorAnimation(
diff --git a/third_party/blink/renderer/platform/animation/compositor_animation.h b/third_party/blink/renderer/platform/animation/compositor_animation.h
index 0f533b472c..10cc086 100644
--- a/third_party/blink/renderer/platform/animation/compositor_animation.h
+++ b/third_party/blink/renderer/platform/animation/compositor_animation.h
@@ -38,7 +38,8 @@
       const String& name,
       double playback_rate,
       std::unique_ptr<CompositorScrollTimeline>,
-      std::unique_ptr<cc::AnimationOptions>);
+      std::unique_ptr<cc::AnimationOptions>,
+      std::unique_ptr<cc::AnimationEffectTimings> effect_timings);
 
   explicit CompositorAnimation(
       scoped_refptr<cc::SingleKeyframeEffectAnimation>);
diff --git a/third_party/blink/renderer/platform/animation/timing_function.h b/third_party/blink/renderer/platform/animation/timing_function.h
index 0923cb3..49b2495 100644
--- a/third_party/blink/renderer/platform/animation/timing_function.h
+++ b/third_party/blink/renderer/platform/animation/timing_function.h
@@ -30,13 +30,14 @@
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
-#include "third_party/blink/renderer/platform/wtf/ref_counted.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 
 namespace blink {
 
-class PLATFORM_EXPORT TimingFunction : public RefCounted<TimingFunction> {
+class PLATFORM_EXPORT TimingFunction
+    : public ThreadSafeRefCounted<TimingFunction> {
  public:
   using Type = cc::TimingFunction::Type;
 
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.cc b/third_party/blink/renderer/platform/bindings/parkable_string.cc
index 2af4525..7bc8a2c 100644
--- a/third_party/blink/renderer/platform/bindings/parkable_string.cc
+++ b/third_party/blink/renderer/platform/bindings/parkable_string.cc
@@ -424,8 +424,9 @@
         this, string_.Bytes(), string_.CharactersSizeInBytes(),
         Thread::Current()->GetTaskRunner());
     worker_pool::PostTask(
-        FROM_HERE, CrossThreadBind(&ParkableStringImpl::CompressInBackground,
-                                   WTF::Passed(std::move(params))));
+        FROM_HERE,
+        CrossThreadBindOnce(&ParkableStringImpl::CompressInBackground,
+                            WTF::Passed(std::move(params))));
     state_ = State::kParkingInProgress;
   }
 }
diff --git a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc
index 22583f6f..4bade23 100644
--- a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc
+++ b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc
@@ -115,10 +115,10 @@
 
 std::unique_ptr<AnimationWorkletDispatcherInput> CreateTestMutatorInput() {
   AnimationWorkletInput::AddAndUpdateState state1{
-      {11, 1}, "test1", 5000, nullptr, 1};
+      {11, 1}, "test1", 5000, nullptr, nullptr};
 
   AnimationWorkletInput::AddAndUpdateState state2{
-      {22, 2}, "test2", 5000, nullptr, 1};
+      {22, 2}, "test2", 5000, nullptr, nullptr};
 
   auto input = std::make_unique<AnimationWorkletDispatcherInput>();
   input->Add(std::move(state1));
@@ -169,11 +169,11 @@
   EXPECT_CALL(*first_mutator, MutateRef(_)).Times(0);
   EXPECT_CALL(*client_, SetMutationUpdateRef(_)).Times(0);
 
-  AnimationWorkletInput::AddAndUpdateState state2{
-      {22, 2}, "test2", 5000, nullptr, 1};
+  AnimationWorkletInput::AddAndUpdateState state{
+      {22, 2}, "test2", 5000, nullptr, nullptr};
 
   auto input = std::make_unique<AnimationWorkletDispatcherInput>();
-  input->Add(std::move(state2));
+  input->Add(std::move(state));
 
   mutator_->MutateSynchronously(std::move(input));
 }
@@ -445,11 +445,11 @@
   mutator_->RegisterAnimationWorkletMutator(first_mutator,
                                             first_thread->GetTaskRunner());
 
-  AnimationWorkletInput::AddAndUpdateState state2{
-      {22, 2}, "test2", 5000, nullptr, 1};
+  AnimationWorkletInput::AddAndUpdateState state{
+      {22, 2}, "test2", 5000, nullptr, nullptr};
 
   auto input = std::make_unique<AnimationWorkletDispatcherInput>();
-  input->Add(std::move(state2));
+  input->Add(std::move(state));
 
   EXPECT_CALL(*first_mutator, GetWorkletId())
       .Times(AtLeast(1))
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 87b4dfa..336e10bf 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -129,6 +129,10 @@
       status: "experimental",
     },
     {
+      name: "AudioWorkletRealtimeThread",
+      status: "experimental",
+    },
+    {
       name: "AutomationControlled",
       settable_from_internals: true,
     },
diff --git a/third_party/blink/renderer/platform/scheduler/common/thread.cc b/third_party/blink/renderer/platform/scheduler/common/thread.cc
index cec9b73..a6ff1ca 100644
--- a/third_party/blink/renderer/platform/scheduler/common/thread.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/thread.cc
@@ -4,9 +4,11 @@
 
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 
+#include "base/feature_list.h"
 #include "base/single_thread_task_runner.h"
 #include "base/synchronization/waitable_event.h"
 #include "build/build_config.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
@@ -92,12 +94,17 @@
 }
 
 std::unique_ptr<Thread> Thread::CreateWebAudioThread() {
-  ThreadCreationParams params(WebThreadType::kWebAudioThread);
+  ThreadCreationParams params(WebThreadType::kAudioWorkletThread);
+  params.supports_gc = true;
+
   // WebAudio uses a thread with |DISPLAY| priority to avoid glitch when the
   // system is under the high pressure. Note that the main browser thread also
   // runs with same priority. (see: crbug.com/734539)
-  params.thread_priority = base::ThreadPriority::DISPLAY;
-  params.supports_gc = true;
+  params.thread_priority =
+      base::FeatureList::IsEnabled(features::kAudioWorkletRealtimeThread)
+          ? base::ThreadPriority::REALTIME_AUDIO
+          : base::ThreadPriority::DISPLAY;
+
   return CreateThread(params);
 }
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
index f272ee6..cad9a8d 100644
--- a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
@@ -11,7 +11,7 @@
 
 namespace worker_pool {
 
-void PostTask(const base::Location& location, CrossThreadClosure closure) {
+void PostTask(const base::Location& location, CrossThreadOnceClosure closure) {
   PostTaskWithTraits(location,
                      {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
                      std::move(closure));
@@ -19,9 +19,9 @@
 
 void PostTaskWithTraits(const base::Location& location,
                         const base::TaskTraits& traits,
-                        CrossThreadClosure closure) {
+                        CrossThreadOnceClosure closure) {
   base::PostTaskWithTraits(location, traits,
-                           ConvertToBaseCallback(std::move(closure)));
+                           ConvertToBaseOnceCallback(std::move(closure)));
 }
 
 }  // namespace worker_pool
diff --git a/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
index 4e3d9398..e34644a6 100644
--- a/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
@@ -25,8 +25,8 @@
   std::unique_ptr<base::WaitableEvent> done_event =
       std::make_unique<base::WaitableEvent>();
   worker_pool::PostTask(
-      FROM_HERE,
-      CrossThreadBind(&PingPongTask, CrossThreadUnretained(done_event.get())));
+      FROM_HERE, CrossThreadBindOnce(&PingPongTask,
+                                     CrossThreadUnretained(done_event.get())));
   // Test passes by not hanging on the following wait().
   done_event->Wait();
 }
diff --git a/third_party/blink/renderer/platform/scheduler/public/worker_pool.h b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
index 56b00b8bc..3366d417 100644
--- a/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
+++ b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
@@ -16,7 +16,7 @@
 namespace worker_pool {
 
 // These are a thin wrapper around base::ThreadPool to ensure that all
-// callers use WTF::CrossThreadBind instead of base::Bind to ensure that
+// callers use WTF::CrossThreadBindOnce instead of base::Bind to ensure that
 // all non-thread-safe objects are copied properly.
 //
 // All tasks that do not care about which thread they are running on
@@ -25,11 +25,11 @@
 // Tasks that have to run on a specific thread (e.g. main thread, compositor
 // thread, dedicated worker thread) should be posted via other means
 // (e.g. FrameScheduler for main thread tasks).
-PLATFORM_EXPORT void PostTask(const base::Location&, CrossThreadClosure);
+PLATFORM_EXPORT void PostTask(const base::Location&, CrossThreadOnceClosure);
 
 PLATFORM_EXPORT void PostTaskWithTraits(const base::Location&,
                                         const base::TaskTraits&,
-                                        CrossThreadClosure);
+                                        CrossThreadOnceClosure);
 
 // TODO(altimin): Expose CreateSequencedTaskRunnerWithTraits when the
 // need arises.
diff --git a/third_party/blink/renderer/platform/wtf/functional.h b/third_party/blink/renderer/platform/wtf/functional.h
index 5fe222e6..d150273 100644
--- a/third_party/blink/renderer/platform/wtf/functional.h
+++ b/third_party/blink/renderer/platform/wtf/functional.h
@@ -467,4 +467,7 @@
 using WTF::CrossThreadFunction;
 using WTF::CrossThreadClosure;
 
+using WTF::CrossThreadOnceClosure;
+using WTF::CrossThreadOnceFunction;
+
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_FUNCTIONAL_H_
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index a94a1e1..9480c6c 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -628,6 +628,7 @@
         ],
         'allowed': [
             'cc::AnimationOptions',
+            'cc::AnimationEffectTimings',
         ],
     },
     {
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a94f0ac9..a87b8480 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1370,8 +1370,6 @@
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/preferred-widths.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/relayout-align-items.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/relpos-with-percentage-top.html [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/scrollbars-auto.html [ Skip ]
-crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/scrollbars.html [ Skip ]
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/stretch-input-in-column.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/stretched-child-shrink-on-relayout.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/css3/flexbox/stretching-orthogonal-flows.html [ Failure ]
@@ -1481,6 +1479,8 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/percentage-heights-quirks-node.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/position-absolute-001.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/position-absolute-002.html [ Failure ]
+crbug.com/845235 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/scrollbars.html [ Failure ]
+crbug.com/845235 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/scrollbars-auto.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/table-as-item-auto-min-width.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-direction-column-reverse.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-flexbox/ttwf-reftest-flex-direction-column.html [ Failure ]
@@ -5631,3 +5631,6 @@
 crbug.com/964158 [ Linux ] external/wpt/payment-handler/change-payment-method.https.html [ Pass Crash ]
 crbug.com/899710 [ Linux ] virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Pass Timeout ]
 crbug.com/964239 external/wpt/css/css-scroll-snap/scroll-margin.html [ Pass Failure ]
+crbug.com/965137 [ Linux ] external/wpt/css/css-overflow/webkit-line-clamp-026.html [ Failure ]
+crbug.com/965134 [ Linux ] fast/events/pointerevents/multi-touch-events.html [ Failure ]
+crbug.com/965134 [ Linux ] virtual/mouseevent_fractional/fast/events/pointerevents/pointer-event-in-slop-region.html [ Failure ]
diff --git a/third_party/blink/web_tests/css3/flexbox/scrollbars-auto-expected.html b/third_party/blink/web_tests/css3/flexbox/scrollbars-auto-expected.html
deleted file mode 100644
index b51f2035..0000000
--- a/third_party/blink/web_tests/css3/flexbox/scrollbars-auto-expected.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html>
-<script src="resources/scrollbars.js"></script>
-<style>
-.horizontal-header {
-  width: 120px;
-}
-.vertical-header {
-  width: 60px;
-}
-.container-row {
-  display: flex;
-  flex-direction: row;
-  align-items: flex-start;
-  justify-content: flex-start;
-}
-.container {
-  flex: none;
-  margin: 5px;
-}
-.ltr {
-  direction: ltr;
-}
-.rtl {
-  direction: rtl;
-}
-.horizontal {
-  writing-mode: horizontal-tb;
-}
-.flipped-blocks {
-  writing-mode: vertical-rl;
-}
-.flipped-lines {
-  writing-mode: vertical-lr;
-}
-.flex {
-  border: 2px solid red;
-  overflow: auto;
-  max-width: 100px;
-  max-height: 100px;
-  white-space: nowrap;
-  font-size: 0;
-}
-.row > div, .row-reverse > div {
-  display: inline-flex;
-  margin: 3px;
-}
-.column > div, .column-reverse > div {
-  display: flex;
-}
-
-/* Adjust margins to account for collapsing. */
-.ltr.horizontal > .row > .leaf3 {
-  margin-right: 0;
-}
-.ltr.flipped-blocks > .row > .leaf3, .ltr.flipped-lines > .row > .leaf3 {
-  margin-bottom: 0;
-}
-.rtl.horizontal > .row > .leaf3 {
-  margin-left: 0;
-}
-.rtl.flipped-blocks > .row > .leaf3, .rtl.flipped-lines > .row > .leaf3 {
-  margin-top: 0;
-}
-
-.ltr.horizontal > .row-reverse > .leaf3 {
-  margin-left: 0;
-}
-.ltr.flipped-blocks > .row-reverse > .leaf3, .ltr.flipped-lines > .row-reverse > .leaf3 {
-  margin-top: 0;
-}
-.rtl.horizontal > .row-reverse > .leaf3 {
-  margin-right: 0;
-}
-.rtl.flipped-blocks > .row-reverse > .leaf3, .rtl.flipped-lines > .row-reverse > .leaf3 {
-  margin-bottom: 0;
-}
-
-.horizontal > .column > .leaf1, .horizontal > .column > .leaf2 {
-  margin: 3px 3px 6px 3px;
-}
-.horizontal > .column > .leaf3 {
-  margin: 3px;
-}
-.flipped-blocks > .column > .leaf1, .flipped-blocks > .column > .leaf2 {
-  margin: 3px 3px 3px 6px;
-}
-.flipped-blocks > .column > .leaf3 {
-  margin: 3px;
-}
-.flipped-lines > .column > .leaf1, .flipped-lines > .column > .leaf2 {
-  margin: 3px 6px 3px 3px;
-}
-.flipped-lines > .column > .leaf3 {
-  margin: 3px;
-}
-
-.horizontal > .column-reverse > .leaf1, .horizontal > .column-reverse > .leaf2 {
-  margin: 6px 3px 3px 3px;
-}
-.horizontal > .column-reverse > .leaf3 {
-  margin: 0 3px 3px 3px;
-}
-.flipped-blocks > .column-reverse > .leaf1, .flipped-blocks > .column-reverse > .leaf2 {
-  margin: 3px 6px 3px 3px;
-}
-.flipped-blocks > .column-reverse > .leaf3 {
-  margin: 3px 0 3px 3px;
-}
-.flipped-lines > .column-reverse > .leaf1, .flipped-lines > .column-reverse > .leaf2 {
-  margin: 3px 3px 3px 6px;
-}
-.flipped-lines > .column-reverse > .leaf3 {
-  margin: 3px 3px 3px 0;
-}
-
-.flex > div {
-  width: 30px;
-  height: 30px;
-  border: 2px solid blue;
-  flex-direction: column;
-  justify-content: center;
-}
-.flex > div > div {
-  font-size: 20px;
-  text-align: center;
-  flex: none;
-}
-</style>
-
-<div class="container-row">
-  <div class="vertical-header ltr horizontal"></div>
-  <div class="horizontal-header ltr horizontal">ltr<br>horizontal-tb</div>
-  <div class="vertical-header ltr flipped-blocks">ltr<br>vertical-rl</div>
-  <div class="vertical-header ltr flipped-blocks">ltr<br>vertical-lr</div>
-  <div class="horizontal-header rtl horizontal">rtl<br>horizontal-tb</div>
-  <div class="vertical-header rtl flipped-blocks">rtl<br>vertical-rl</div>
-  <div class="vertical-header rtl flipped-blocks">rtl<br>vertical-lr</div>
-</div>
-
-<script>
-// Override createContentNode to emulate reverse flow direction.
-createContentNode = (flexDirection, textDirection, writingMode) => {
-  var flexNode = document.createElement("div");
-  flexNode.className = "flex " + flexDirection;
-  flexNode.title = "flex-direction: " + flexDirection + "; direction: " + textDirection + "; writing-mode: " + writingMode;
-  for (var i = 1; i < 4; i++)
-    flexNode.appendChild(createLeafNode(flexDirection.endsWith("reverse") ? 4 - i : i));
-  return flexNode;
-}
-
-flexDirections.forEach((flexDirection) => {
-  var containerRow = createContainerRow(flexDirection);
-  document.body.appendChild(containerRow);
-});
-
-// Scroll all flex containers to the emulated beginning of flow.
-var nodes = document.querySelectorAll(".ltr > .row-reverse");
-for (var i = 0; i < nodes.length; i++) {
-  nodes[i].scrollLeft = 10000;
-  nodes[i].scrollTop = 10000;
-}
-nodes = document.querySelectorAll(".rtl > .row-reverse");
-for (var i = 0; i < nodes.length; i++) {
-  nodes[i].scrollLeft = 0;
-  nodes[i].scrollTop = 0;
-}
-nodes = document.querySelectorAll(".column-reverse");
-for (var i = 0; i < nodes.length; i++) {
-  nodes[i].scrollLeft = 10000;
-  nodes[i].scrollTop = 10000;
-}
-nodes = document.querySelectorAll(".flipped-blocks > .column-reverse");
-for (var i = 0; i < nodes.length; i++) {
-  nodes[i].scrollLeft = 0;
-  nodes[i].scrollTop = 0;
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread-ref.html
new file mode 100644
index 0000000..aad07d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Reference for Animation Worklet should have access to effect timing from within the worklet thread</title>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  background-color: green;
+  transform: translateY(100px);
+}
+</style>
+
+<div id="box"></div>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread.https.html
new file mode 100644
index 0000000..54d1c8b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-get-timing-on-worklet-thread.https.html
@@ -0,0 +1,54 @@
+<html class="reftest-wait">
+<title>Animation Worklet should have access to effect timing from within the worklet thread</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+<meta name="assert" content="Animation Worklet should have access to effect timing from within the worklet thread">
+<link rel="match" href="worklet-animation-get-timing-on-worklet-thread-ref.html">
+
+<script src="/web-animations/testcommon.js"></script>
+<script src="/common/reftest-wait.js"></script>
+<script src="common.js"></script>
+
+<style>
+  #box{
+    height: 100px;
+    width: 100px;
+    background-color: green;
+  }
+</style>
+
+<div id="box"></div>
+
+<script id="get_timing_animator"  type="text/worklet">
+  registerAnimator('get_timing', class {
+    animate(currentTime, effect){
+      effect.localTime = effect.getTiming().delay + (effect.getTiming().duration / 2);
+    }
+  });
+</script>
+
+<script>
+  runInAnimationWorklet(
+    document.getElementById('get_timing_animator').textContent
+  ).then(() => {
+    const box = document.getElementById("box");
+    const effect = new KeyframeEffect(
+      box,
+      [
+        {transform: 'translateY(0)'},
+        {transform: 'translateY(200px)'}
+      ],
+      {
+        delay: 2000,
+        duration: 1000
+      }
+    );
+
+    const animation = new WorkletAnimation('get_timing', effect);
+    animation.play();
+
+    waitForAsyncAnimationFrames(1).then(_ => {
+      takeScreenshot();
+    });
+  });
+</script>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-002.html b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-002.html
new file mode 100644
index 0000000..ed8ffd2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-002.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#flow-control" title="9.5.2 Controlling flow next to floats: the 'clear' property">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<style>
+#container {
+  width: 100px;
+  background: green;
+}
+#left {
+  float: left;
+  width: 25px;
+  height: 10px;
+}
+#right {
+  float: right;
+  width: 25px;
+  height: 20px;
+}
+#clears-left {
+  clear: left;
+}
+#zero {
+  margin-bottom: 40px;
+  margin-top: -20px;
+}
+#nested-float {
+  float: left;
+  width: 25px;
+  height: 20px;
+}
+#new-formatting-context {
+  overflow: hidden;
+  width: 60px;
+  height: 80px;
+  margin-top: -30px;
+}
+</style>
+<p>Test passes if there is a filled green square.</p>
+<div id=container>
+  <div id=left></div>
+  <div id=right></div>
+  <div>
+    <div id=clears-left>
+      <div>
+        <div id=zero></div>
+        <div id=nested-float></div>
+        <!--
+          The margins up to this new formatting context are chosen to hit an
+          edge condition. At this point there are two possible margins:
+           - (adjoining) {-30px, 40px} => 10px
+           - (non-adjoining) {-20px, 40px} => 20px
+
+          The logic for placing this new formatting context however shouldn't
+          check these margins, as there is an ancestor ("clears-left") which
+          has clearance past adjoining floats ("left", and "right").
+
+          And "nested-float" should get placed at "10px".
+
+          However if we didn't have this logic the following would occur.
+           1. We'd try and place the formatting context using the "adjoining"
+              margins.
+           2. The new formatting context doesn't "fit" on the same edge as the
+              floats, so it would trigger a retry using with a new position
+              calculated using the "non-adjoining" margins.
+           3. During the next pass, it still doesn't think the margins have
+              been separated yet as the parent is still using the position
+              calculated by the forced clearance from above.
+           4. It will trigger a retry again (and if an implementation does this
+              in a loop, will timeout).
+        -->
+        <div id=new-formatting-context></div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-003.html b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-003.html
new file mode 100644
index 0000000..4c080d2b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance-003.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#flow-control" title="9.5.2 Controlling flow next to floats: the 'clear' property">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="overflow: hidden; width: 100px; background: red; position: relative;">
+  <div style="float: left; height: 50px; width: 50px; background: green"></div>
+  <div style="height: 40px; background: green;"></div>
+  <div  style="margin-top: 15px; clear: both;">
+    <div style="width: 50px; height: 50px; background: green; float: left;"></div>
+    <div style="margin-top: -10px;">
+      <span style="display: inline-block; width: 50px; height: 40px; background: green;"></span>
+    </div>
+    <div style="position: absolute; width: 50px; height: 10px; right: 0; top: 40px; background: green;"></div>
+    <div style="position: absolute; width: 50px; height: 10px; right: 0; bottom: 0; background: green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto-ref.html
similarity index 97%
rename from third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html
rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto-ref.html
index ff95d5c..e83ba52 100644
--- a/third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto-ref.html
@@ -1,5 +1,8 @@
 <!DOCTYPE html>
-<script src="resources/scrollbars.js"></script>
+<head>
+
+<script src="support/scrollbars.js"></script>
+
 <style>
 .horizontal-header {
   width: 120px;
@@ -34,7 +37,7 @@
 }
 .flex {
   border: 2px solid red;
-  overflow: scroll;
+  overflow: auto;
   max-width: 100px;
   max-height: 100px;
   white-space: nowrap;
@@ -127,6 +130,8 @@
 }
 </style>
 
+</head>
+
 <div class="container-row">
   <div class="vertical-header ltr horizontal"></div>
   <div class="horizontal-header ltr horizontal">ltr<br>horizontal-tb</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/scrollbars-auto.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto.html
similarity index 83%
rename from third_party/blink/web_tests/css3/flexbox/scrollbars-auto.html
rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto.html
index 943f4c7..ed1ffb8 100644
--- a/third_party/blink/web_tests/css3/flexbox/scrollbars-auto.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-auto.html
@@ -1,5 +1,12 @@
 <!DOCTYPE html>
-<script src="resources/scrollbars.js"></script>
+<head>
+<title>Auto scrollbars inside flexbox with direction and writing-mode</title>
+<link rel="author" title="Google, Inc." href="http://www.google.com/">
+<link rel="match" href="scrollbars-auto-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/">
+
+<script src="support/scrollbars.js"></script>
+
 <style>
 .horizontal-header {
   width: 120px;
@@ -68,6 +75,8 @@
 }
 </style>
 
+</head>
+
 <div class="container-row">
   <div class="vertical-header ltr horizontal"></div>
   <div class="horizontal-header ltr horizontal">ltr<br>horizontal-tb</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-ref.html
similarity index 97%
copy from third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html
copy to third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-ref.html
index ff95d5c..32bb610 100644
--- a/third_party/blink/web_tests/css3/flexbox/scrollbars-expected.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars-ref.html
@@ -1,5 +1,8 @@
 <!DOCTYPE html>
-<script src="resources/scrollbars.js"></script>
+<head>
+
+<script src="support/scrollbars.js"></script>
+
 <style>
 .horizontal-header {
   width: 120px;
@@ -127,6 +130,8 @@
 }
 </style>
 
+</head>
+
 <div class="container-row">
   <div class="vertical-header ltr horizontal"></div>
   <div class="horizontal-header ltr horizontal">ltr<br>horizontal-tb</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/scrollbars.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars.html
similarity index 84%
rename from third_party/blink/web_tests/css3/flexbox/scrollbars.html
rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars.html
index 5e52bf85..0eca05bf 100644
--- a/third_party/blink/web_tests/css3/flexbox/scrollbars.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/scrollbars.html
@@ -1,5 +1,12 @@
 <!DOCTYPE html>
-<script src="resources/scrollbars.js"></script>
+<head>
+<title>Scrollbars inside flexbox with direction and writing-mode</title>
+<link rel="author" title="Google, Inc." href="http://www.google.com/">
+<link rel="match" href="scrollbars-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/">
+
+<script src="support/scrollbars.js"></script>
+
 <style>
 .horizontal-header {
   width: 120px;
@@ -68,6 +75,8 @@
 }
 </style>
 
+</head>
+
 <div class="container-row">
   <div class="vertical-header ltr horizontal"></div>
   <div class="horizontal-header ltr horizontal">ltr<br>horizontal-tb</div>
diff --git a/third_party/blink/web_tests/css3/flexbox/resources/scrollbars.js b/third_party/blink/web_tests/external/wpt/css/css-flexbox/support/scrollbars.js
similarity index 100%
rename from third_party/blink/web_tests/css3/flexbox/resources/scrollbars.js
rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/support/scrollbars.js
diff --git a/third_party/blink/web_tests/http/tests/devtools/copy-network-request-expected.txt b/third_party/blink/web_tests/http/tests/devtools/copy-network-request-expected.txt
index 4c3e2d3..2b36784e 100644
--- a/third_party/blink/web_tests/http/tests/devtools/copy-network-request-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/copy-network-request-expected.txt
@@ -19,13 +19,13 @@
 cURL Windows: curl "http://example.org/path" -H "Content-Type: application/binary" --data-binary ^"1234^
 
 00^^^^'^\^"^!^" --compressed
-cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'1234\r\n00\u02\u03\u04\u05\'"\u21' --compressed
+cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'1234\r\n00\u0002\u0003\u0004\u0005\'"\u0021' --compressed
 Powershell: Invoke-WebRequest -Uri "http://example.org/path" -Method "POST" -ContentType "application/binary" -Body ([System.Text.Encoding]::UTF8.GetBytes("1234$([char]13)$([char]10)00$([char]2)$([char]3)$([char]4)$([char]5)'`"!"))
 fetch: fetch("http://example.org/path", {"credentials":"omit","headers":{"content-type":"application/binary"},"body":"1234\r\n00\u0002\u0003\u0004\u0005'\"!","method":"POST","mode":"cors"});
 cURL Windows: curl "http://example.org/path" -H "Content-Type: application/binary" --data-binary ^"1234^
 
 ^00^^^^'^\^"^!^" --compressed
-cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'1234\r\n\u0100\u02\u03\u04\u05\'"\u21' --compressed
+cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'1234\r\n\u000100\u0002\u0003\u0004\u0005\'"\u0021' --compressed
 Powershell: Invoke-WebRequest -Uri "http://example.org/path" -Method "POST" -ContentType "application/binary" -Body ([System.Text.Encoding]::UTF8.GetBytes("1234$([char]13)$([char]10)$([char]1)00$([char]2)$([char]3)$([char]4)$([char]5)'`"!"))
 fetch: fetch("http://example.org/path", {"credentials":"omit","headers":{"content-type":"application/binary"},"body":"1234\r\n\u000100\u0002\u0003\u0004\u0005'\"!","method":"POST","mode":"cors"});
 cURL Windows: curl "http://example.org/path" -H "Content-Type: application/binary" --data-binary ^"^%^OS^%^
@@ -33,7 +33,7 @@
 ^%^%^OS^%^%^
 
 ^\^"^\^\^\^"'^$^&^!^" --compressed
-cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'%OS%\r\n%%OS%%\r\n"\\"\'$&\u21' --compressed
+cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'%OS%\r\n%%OS%%\r\n"\\"\'$&\u0021' --compressed
 Powershell: Invoke-WebRequest -Uri "http://example.org/path" -Method "POST" -ContentType "application/binary" -Body ([System.Text.Encoding]::UTF8.GetBytes("%OS%$([char]13)$([char]10)%%OS%%$([char]13)$([char]10)`"\`"'`$&!"))
 fetch: fetch("http://example.org/path", {"credentials":"omit","headers":{"content-type":"application/binary"},"body":"%OS%\r\n%%OS%%\r\n\"\\\"'$&!","method":"POST","mode":"cors"});
 cURL Windows: curl "http://example.org/path" -H "Content-Type: application/binary" --data-binary ^"^!^@^#^$^%^^^&*()_+~`1234567890-=^[^]^{^};':^\^",./^
@@ -47,11 +47,11 @@
 ^
 
 yuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM^" --compressed
-cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'\u21@#$%^&*()_+~`1234567890-=[]{};\':",./\r<>?\r\nqwer\nt\n\nyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM' --compressed
+cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'\u0021@#$%^&*()_+~`1234567890-=[]{};\':",./\r<>?\r\nqwer\nt\n\nyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM' --compressed
 Powershell: Invoke-WebRequest -Uri "http://example.org/path" -Method "POST" -ContentType "application/binary" -Body ([System.Text.Encoding]::UTF8.GetBytes("!@#`$%^&*()_+~``1234567890-=[]{};':`",./$([char]13)<>?$([char]13)$([char]10)qwer$([char]10)t$([char]10)$([char]10)yuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM"))
 fetch: fetch("http://example.org/path", {"credentials":"omit","headers":{"content-type":"application/binary"},"body":"!@#$%^&*()_+~`1234567890-=[]{};':\",./\r<>?\r\nqwer\nt\n\nyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM","method":"POST","mode":"cors"});
 cURL Windows: curl "http://example.org/path" -H "Content-Type: application/binary" --data-binary "^^€^^ÿ	^܀" --compressed
-cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'\u7f\u80\u90ÿ\u09܀' --compressed
+cURL Unix: curl 'http://example.org/path' -H 'Content-Type: application/binary' --data-binary $'\u007f\u0080\u0090ÿ\u0009܀' --compressed
 Powershell: Invoke-WebRequest -Uri "http://example.org/path" -Method "POST" -ContentType "application/binary" -Body ([System.Text.Encoding]::UTF8.GetBytes("$([char]127)$([char]128)$([char]144)$([char]255)$([char]9)$([char]1792)"))
 fetch: fetch("http://example.org/path", {"credentials":"omit","headers":{"content-type":"application/binary"},"body":"€ÿ\t܀","method":"POST","mode":"cors"});
 cURL Windows: curl "http://labs.ft.com/?querystring=^\[^\]^\{^\}" --compressed
diff --git a/third_party/blink/web_tests/http/tests/devtools/network/network-cookies-pane-expected.txt b/third_party/blink/web_tests/http/tests/devtools/network/network-cookies-pane-expected.txt
index fe1d48414..6e1b4ef3 100644
--- a/third_party/blink/web_tests/http/tests/devtools/network/network-cookies-pane-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/network/network-cookies-pane-expected.txt
@@ -7,7 +7,7 @@
 Path
 Expires / Max-Age
 Size
-HTTP
+HttpOnly
 Secure
 SameSite
 Request Cookies					33
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/background-services/background-services-events-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/background-services/background-services-events-expected.txt
index e2aa1ae7..304db523 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/background-services/background-services-events-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/background-services/background-services-events-expected.txt
@@ -73,7 +73,7 @@
         eventMetadata : [
             [0] : {
                 key : Event Type
-                value : SuccessEvent
+                value : BackgroundFetchSuccessEvent
             }
         ]
         eventName : Background Fetch completed
@@ -157,7 +157,7 @@
         eventMetadata : [
             [0] : {
                 key : Event Type
-                value : FailEvent
+                value : BackgroundFetchFailEvent
             }
             [1] : {
                 key : Failure Reason
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope-expected.txt b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope-expected.txt
index a5f1340..4eda1ba6 100644
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope-expected.txt
+++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope-expected.txt
@@ -7,10 +7,6 @@
 CONSOLE MESSAGE: line 153: interface CountQueuingStrategy
 CONSOLE MESSAGE: line 153:     method constructor
 CONSOLE MESSAGE: line 153:     method size
-CONSOLE MESSAGE: line 153: interface EffectProxy
-CONSOLE MESSAGE: line 153:     getter localTime
-CONSOLE MESSAGE: line 153:     method constructor
-CONSOLE MESSAGE: line 153:     setter localTime
 CONSOLE MESSAGE: line 153: interface ReadableStream
 CONSOLE MESSAGE: line 153:     getter locked
 CONSOLE MESSAGE: line 153:     method cancel
@@ -23,9 +19,14 @@
 CONSOLE MESSAGE: line 153:     getter readable
 CONSOLE MESSAGE: line 153:     getter writable
 CONSOLE MESSAGE: line 153:     method constructor
+CONSOLE MESSAGE: line 153: interface WorkletAnimationEffect
+CONSOLE MESSAGE: line 153:     getter localTime
+CONSOLE MESSAGE: line 153:     method constructor
+CONSOLE MESSAGE: line 153:     method getTiming
+CONSOLE MESSAGE: line 153:     setter localTime
 CONSOLE MESSAGE: line 153: interface WorkletGlobalScope
 CONSOLE MESSAGE: line 153:     method constructor
-CONSOLE MESSAGE: line 153: interface WorkletGroupEffectProxy
+CONSOLE MESSAGE: line 153: interface WorkletGroupEffect
 CONSOLE MESSAGE: line 153:     method constructor
 CONSOLE MESSAGE: line 153:     method getChildren
 CONSOLE MESSAGE: line 153: interface WritableStream
@@ -46,10 +47,6 @@
 CONSOLE MESSAGE: line 153: interface CountQueuingStrategy
 CONSOLE MESSAGE: line 153:     method constructor
 CONSOLE MESSAGE: line 153:     method size
-CONSOLE MESSAGE: line 153: interface EffectProxy
-CONSOLE MESSAGE: line 153:     getter localTime
-CONSOLE MESSAGE: line 153:     method constructor
-CONSOLE MESSAGE: line 153:     setter localTime
 CONSOLE MESSAGE: line 153: interface ReadableStream
 CONSOLE MESSAGE: line 153:     getter locked
 CONSOLE MESSAGE: line 153:     method cancel
@@ -62,9 +59,14 @@
 CONSOLE MESSAGE: line 153:     getter readable
 CONSOLE MESSAGE: line 153:     getter writable
 CONSOLE MESSAGE: line 153:     method constructor
+CONSOLE MESSAGE: line 153: interface WorkletAnimationEffect
+CONSOLE MESSAGE: line 153:     getter localTime
+CONSOLE MESSAGE: line 153:     method constructor
+CONSOLE MESSAGE: line 153:     method getTiming
+CONSOLE MESSAGE: line 153:     setter localTime
 CONSOLE MESSAGE: line 153: interface WorkletGlobalScope
 CONSOLE MESSAGE: line 153:     method constructor
-CONSOLE MESSAGE: line 153: interface WorkletGroupEffectProxy
+CONSOLE MESSAGE: line 153: interface WorkletGroupEffect
 CONSOLE MESSAGE: line 153:     method constructor
 CONSOLE MESSAGE: line 153:     method getChildren
 CONSOLE MESSAGE: line 153: interface WritableStream
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt
index cb824dc..4dd6b84 100644
--- a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt
@@ -1,12 +1,29 @@
-CONSOLE MESSAGE: line 33: Injecting in main world: this should fail.
-CONSOLE ERROR: line 21: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
+CONSOLE MESSAGE: line 48: Injecting in main world: this should fail.
+CONSOLE ERROR: line 17: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
 
-CONSOLE MESSAGE: line 38: Injecting into isolated world without bypass: this should fail.
+CONSOLE ERROR: line 26: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 52: Injecting into isolated world without bypass: this should fail.
 CONSOLE ERROR: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-weyW8ZEkQAD8it2iIcRJESCAdVG/APiGxF6JYEqMvKo='), or a nonce ('nonce-...') is required to enable inline execution.
 
-CONSOLE MESSAGE: line 43: Starting to bypass main world's CSP: this should pass!
-CONSOLE MESSAGE: EXECUTED in isolated world.
-CONSOLE MESSAGE: line 49: Injecting into main world again: this should fail.
-CONSOLE ERROR: line 21: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
 
-This test ensures that scripts run in isolated worlds marked with their own Content Security Policy aren't affected by the page's content security policy. Extensions, for example, should be able to inject inline JavaScript (even though it's probably a bad idea to do so).
+CONSOLE MESSAGE: line 62: Allowing unsafe-inline for the isolated world: this should pass!
+CONSOLE MESSAGE: EXECUTED in isolated world.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 71: Disallowing unsafe-inline for the isolated world.
+CONSOLE MESSAGE: line 72: internals.runtimeFlags.isolatedWorldCSPEnabled is false
+CONSOLE MESSAGE: EXECUTED in isolated world.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 81: Using an empty CSP for the isolated world. This should pass.
+CONSOLE MESSAGE: EXECUTED in isolated world.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 87: Injecting into main world again: this should fail.
+CONSOLE ERROR: line 17: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE ERROR: line 26: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+This tests the behavior of inline scripts in isolated worlds and its interaction with the page and isolated world CSP.
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script.html b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script.html
index 621e950..60c90f4 100644
--- a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script.html
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script.html
@@ -6,10 +6,8 @@
 </head>
 <body>
     <p>
-        This test ensures that scripts run in isolated worlds marked with their
-        own Content Security Policy aren't affected by the page's content
-        security policy. Extensions, for example, should be able to inject
-        inline JavaScript (even though it's probably a bad idea to do so).
+        This tests the behavior of inline scripts in isolated worlds and its
+        interaction with the page and isolated world CSP.
     </p>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/bypass-main-world-csp-for-inline-script.js b/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/bypass-main-world-csp-for-inline-script.js
index 45726275..b2784fe 100644
--- a/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/bypass-main-world-csp-for-inline-script.js
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/bypass-main-world-csp-for-inline-script.js
@@ -3,57 +3,94 @@
     testRunner.waitUntilDone();
 }
 
-tests = 4;
+tests = 6;
 window.addEventListener("message", function(message) {
     tests -= 1;
     test();
 }, false);
 
-// This is needed because isolated worlds are not reset between test runs and a
-// previous test's CSP may interfere with this test. See
-// https://crbug.com/415845.
-testRunner.setIsolatedWorldInfo(1, null, null);
-
 function test() {
     function injectInlineScript(isolated) {
         var script = document.createElement('script');
-        script.innerText = "console.log('EXECUTED in " + (isolated ? "isolated world" : "main world") + ".');";
+        var isolatedStr = isolated ? 'isolated world' : 'main world';
+        script.innerText = `console.log('EXECUTED in ${isolatedStr}.');`;
         document.body.appendChild(script);
         window.postMessage("next", "*");
     }
     function injectInlineEventHandler(isolated) {
-        var div = document.createElement('div');
-        div.innerHTML = "<div onclick='function () {}'></div>";
-        document.body.appendChild(div);
-        window.postMessage("next", "*");
+      // Inline event handlers are evaluated in the main world. See
+      // crbug.com/912069.
+      var div = document.createElement('div');
+      div.innerHTML = '<div onclick=\'console.log(`click`)\'></div>';
+      document.body.appendChild(div);
+      div.firstChild.click();
+      window.postMessage("next", "*");
+    }
+
+    function testInlineScript(isolated, worldId) {
+      if (!isolated) {
+        injectInlineScript(false);
+        injectInlineEventHandler(false);
+        return;
+      }
+
+      testRunner.evaluateScriptInIsolatedWorld(
+          worldId,
+          String(eval('injectInlineScript')) + '\ninjectInlineScript(true);');
+      testRunner.evaluateScriptInIsolatedWorld(
+          worldId,
+          String(eval('injectInlineEventHandler')) +
+              '\injectInlineEventHandler(true);');
     }
 
     switch (tests) {
-        case 4:
-            console.log("Injecting in main world: this should fail.");
-            injectInlineScript(false);
-            injectInlineEventHandler(false);
-            break;
-        case 3:
-            console.log("Injecting into isolated world without bypass: this should fail.");
-            testRunner.evaluateScriptInIsolatedWorld(1, String(eval("injectInlineScript")) + "\ninjectInlineScript(true);");
-            testRunner.evaluateScriptInIsolatedWorld(1, String(eval("injectInlineEventHandler")) + "\injectInlineEventHandler(true);");
-            break;
-        case 2:
-            console.log("Starting to bypass main world's CSP: this should pass!");
-            testRunner.setIsolatedWorldInfo(1, 'chrome-extension://123',  'script-src \'unsafe-inline\' *');
-            testRunner.evaluateScriptInIsolatedWorld(1, String(eval("injectInlineScript")) + "\ninjectInlineScript(true);");
-            testRunner.evaluateScriptInIsolatedWorld(1, String(eval("injectInlineEventHandler")) + "\injectInlineEventHandler(true);");
-            break;
-        case 1:
-            console.log("Injecting into main world again: this should fail.");
-            injectInlineScript(false);
-            injectInlineEventHandler(false);
-            break;
-        case 0:
-            testRunner.setIsolatedWorldInfo(1, null, null);
-            testRunner.notifyDone();
-            break;
+      case 6:
+        console.log('Injecting in main world: this should fail.');
+        testInlineScript(false);
+        break;
+      case 5:
+        console.log(
+            "Injecting into isolated world without bypass: this should fail.");
+        // This is needed because isolated worlds are not reset between test
+        // runs and a previous test's CSP may interfere with this test. See
+        // https://crbug.com/415845.
+        testRunner.setIsolatedWorldInfo(1, null, null);
+
+        testInlineScript(true, 1);
+        break;
+      case 4:
+        console.log(
+            'Allowing unsafe-inline for the isolated world: this should pass!');
+        testRunner.setIsolatedWorldInfo(
+            1, 'chrome-extension://123', 'script-src \'unsafe-inline\'');
+        testInlineScript(true, 1);
+        break;
+      case 3:
+        // This case is dependent on whether the "IsolatedWorldCSP" feature is
+        // enabled.
+        console.log('Disallowing unsafe-inline for the isolated world.');
+        console.log(
+            'internals.runtimeFlags.isolatedWorldCSPEnabled is ' +
+            internals.runtimeFlags.isolatedWorldCSPEnabled);
+
+        testRunner.setIsolatedWorldInfo(
+            1, 'chrome-extension://123', 'script-src \'none\'');
+        testInlineScript(true, 1);
+        break;
+      case 2:
+        console.log(
+            'Using an empty CSP for the isolated world. This should pass.');
+        testRunner.setIsolatedWorldInfo(1, 'chrome-extension://123', '');
+        testInlineScript(true, 1);
+        break;
+      case 1:
+        console.log("Injecting into main world again: this should fail.");
+        testInlineScript(false, 1);
+        break;
+      case 0:
+        testRunner.setIsolatedWorldInfo(1, null, null);
+        testRunner.notifyDone();
+        break;
     }
 }
 
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/no-bypass-main-world-csp-for-delayed-execution.js b/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/no-bypass-main-world-csp-for-delayed-execution.js
index 6b25d29..971b5a75 100644
--- a/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/no-bypass-main-world-csp-for-delayed-execution.js
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/resources/no-bypass-main-world-csp-for-delayed-execution.js
@@ -25,7 +25,7 @@
         window.postMessage("done", "*");
     }
 
-    var permissiveCSP = "script-src: * 'unsafe-eval' 'unsafe-inline'";
+    var permissiveCSP = "script-src * 'unsafe-eval' 'unsafe-inline'";
     var securityOrigin = "chrome-extension://123";
 
     switch (tests) {
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt
new file mode 100644
index 0000000..3a7387b5
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt
@@ -0,0 +1,14 @@
+CONSOLE MESSAGE: line 38: Testing main world. Request should be blocked by main world CSP.
+CONSOLE ERROR: line 2: Refused to connect to 'ws://127.0.0.1:8880/echo' because it violates the following Content Security Policy directive: "connect-src 'none'".
+
+CONSOLE MESSAGE: line 18: PASS: Request blocked by CSP as expected.
+CONSOLE MESSAGE: line 43: Testing isolated world with no csp. Request should be blocked by main world CSP.
+CONSOLE ERROR: Refused to connect to 'ws://127.0.0.1:8880/echo' because it violates the following Content Security Policy directive: "connect-src 'none'".
+
+CONSOLE MESSAGE: PASS: Request blocked by CSP as expected.
+CONSOLE MESSAGE: line 50: Testing isolated world with permissive csp.
+CONSOLE MESSAGE: PASS: Request succeeded as expected.
+CONSOLE MESSAGE: line 56: Testing isolated world with strict csp.
+CONSOLE MESSAGE: line 57: internals.runtimeFlags.isolatedWorldCSPEnabled is false
+CONSOLE MESSAGE: PASS: Request succeeded as expected.
+This tests the interaction of websockets used in the isolated world with the isolated world CSP.
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.html b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.html
new file mode 100644
index 0000000..3f2892ec
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Security-Policy" content="connect-src 'none'">
+<script src="isolated-world-websocket-csp.js"></script>
+</head>
+<body id="body">
+    <p>
+        This tests the interaction of websockets used in the isolated world with
+        the isolated world CSP.
+    </p>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.js b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.js
new file mode 100644
index 0000000..1afb309
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp.js
@@ -0,0 +1,92 @@
+function testWebSocket(expectBlocked) {
+  const ws = new WebSocket('ws://127.0.0.1:8880/echo');
+  ws.onopen = function() {
+    ws.send('data');
+  };
+  ws.onmessage = function(msg) {
+    if (expectBlocked)
+      console.log('FAIL: Request succeeded unexpectedly.');
+    else if (msg.data != 'data')
+      console.log('FAIL: Invalid message received ' + JSON.stringify(msg));
+    else
+      console.log('PASS: Request succeeded as expected.');
+
+    window.postMessage('next', '*');
+  };
+  ws.onerror = function(error) {
+    if (expectBlocked)
+      console.log('PASS: Request blocked by CSP as expected.');
+    else
+      console.log('FAIL: Request failed unexpectedly.');
+
+    window.postMessage('next', '*');
+  };
+}
+
+const isolatedWorldId = 1;
+const isolatedWorldSecurityOrigin = 'chrome-extensions://123';
+
+function testWebSocketInIsolatedWorld(expectBlocked) {
+  const expectBlockedStr = expectBlocked ? 'true' : 'false';
+  testRunner.evaluateScriptInIsolatedWorld(
+      isolatedWorldId,
+      String(eval('testWebSocket')) + `\ntestWebSocket(${expectBlockedStr});`);
+}
+
+const tests = [
+  function() {
+    console.log(
+        'Testing main world. Request should be blocked by main world CSP.');
+    testWebSocket(true);
+  },
+  function() {
+    console.log(
+        'Testing isolated world with no csp. Request should be blocked by ' +
+        'main world CSP.');
+    testRunner.setIsolatedWorldInfo(isolatedWorldId, null, null);
+    testWebSocketInIsolatedWorld(true);
+  },
+  function() {
+    console.log('Testing isolated world with permissive csp.');
+    testRunner.setIsolatedWorldInfo(
+        isolatedWorldId, isolatedWorldSecurityOrigin, 'connect-src *');
+    testWebSocketInIsolatedWorld(false);
+  },
+  function() {
+    console.log('Testing isolated world with strict csp.');
+    console.log(
+        'internals.runtimeFlags.isolatedWorldCSPEnabled is ' +
+        internals.runtimeFlags.isolatedWorldCSPEnabled);
+    const expectBlocked = internals.runtimeFlags.isolatedWorldCSPEnabled;
+    testRunner.setIsolatedWorldInfo(
+        isolatedWorldId, isolatedWorldSecurityOrigin, 'connect-src \'none\'');
+    testWebSocketInIsolatedWorld(expectBlocked);
+
+    // Clear the isolated world data.
+    testRunner.setIsolatedWorldInfo(1, null, null);
+  },
+];
+
+// This test is meaningless without testRunner.
+if (window.testRunner) {
+  testRunner.dumpAsText();
+  testRunner.waitUntilDone();
+  testRunner.dumpPingLoaderCallbacks();
+
+  let currentTest = 0;
+  window.addEventListener('message', function(e) {
+    if (e.data == 'next') {
+      // Move to the next test.
+      currentTest++;
+      if (currentTest == tests.length) {
+        testRunner.notifyDone();
+        return;
+      }
+
+      // Move to the next sub-test.
+      tests[currentTest]();
+    }
+  }, false);
+
+  tests[0]();
+}
diff --git a/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt b/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt
new file mode 100644
index 0000000..eff1116e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/bypass-main-world-csp-for-inline-script-expected.txt
@@ -0,0 +1,30 @@
+CONSOLE MESSAGE: line 48: Injecting in main world: this should fail.
+CONSOLE ERROR: line 17: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE ERROR: line 26: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 52: Injecting into isolated world without bypass: this should fail.
+CONSOLE ERROR: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-weyW8ZEkQAD8it2iIcRJESCAdVG/APiGxF6JYEqMvKo='), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 62: Allowing unsafe-inline for the isolated world: this should pass!
+CONSOLE MESSAGE: EXECUTED in isolated world.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 71: Disallowing unsafe-inline for the isolated world.
+CONSOLE MESSAGE: line 72: internals.runtimeFlags.isolatedWorldCSPEnabled is true
+CONSOLE ERROR: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-weyW8ZEkQAD8it2iIcRJESCAdVG/APiGxF6JYEqMvKo='), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 81: Using an empty CSP for the isolated world. This should pass.
+CONSOLE MESSAGE: EXECUTED in isolated world.
+CONSOLE ERROR: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE MESSAGE: line 87: Injecting into main world again: this should fail.
+CONSOLE ERROR: line 17: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-09Et/dqtUwF1zPoVDKo5ZDj2NUXqkLUxcQfh9UtQQt0='), or a nonce ('nonce-...') is required to enable inline execution.
+
+CONSOLE ERROR: line 26: Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
+
+This tests the behavior of inline scripts in isolated worlds and its interaction with the page and isolated world CSP.
diff --git a/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt b/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt
new file mode 100644
index 0000000..130bee8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/isolated_world_csp/http/tests/security/isolatedWorld/websocket/isolated-world-websocket-csp-expected.txt
@@ -0,0 +1,16 @@
+CONSOLE MESSAGE: line 38: Testing main world. Request should be blocked by main world CSP.
+CONSOLE ERROR: line 2: Refused to connect to 'ws://127.0.0.1:8880/echo' because it violates the following Content Security Policy directive: "connect-src 'none'".
+
+CONSOLE MESSAGE: line 18: PASS: Request blocked by CSP as expected.
+CONSOLE MESSAGE: line 43: Testing isolated world with no csp. Request should be blocked by main world CSP.
+CONSOLE ERROR: Refused to connect to 'ws://127.0.0.1:8880/echo' because it violates the following Content Security Policy directive: "connect-src 'none'".
+
+CONSOLE MESSAGE: PASS: Request blocked by CSP as expected.
+CONSOLE MESSAGE: line 50: Testing isolated world with permissive csp.
+CONSOLE MESSAGE: PASS: Request succeeded as expected.
+CONSOLE MESSAGE: line 56: Testing isolated world with strict csp.
+CONSOLE MESSAGE: line 57: internals.runtimeFlags.isolatedWorldCSPEnabled is true
+CONSOLE ERROR: Refused to connect to 'ws://127.0.0.1:8880/echo' because it violates the following Content Security Policy directive: "connect-src 'none'".
+
+CONSOLE MESSAGE: PASS: Request blocked by CSP as expected.
+This tests the interaction of websockets used in the isolated world with the isolated world CSP.
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 8ddaa66e..91b720791 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -4621,6 +4621,13 @@
     getter startTime
     method constructor
     method toJSON
+interface PerformanceEventTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter cancelable
+    getter processingEnd
+    getter processingStart
+    method constructor
+    method toJSON
 interface PerformanceLongTaskTiming : PerformanceEntry
     attribute @@toStringTag
     getter attribution
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 0862b48..b995799 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -10731,7 +10731,6 @@
     getter ignoreDepthValues
     method constructor
     method getViewport
-    method requestViewportScaling
 interface XSLTProcessor
     attribute @@toStringTag
     method clearParameters
diff --git a/third_party/blink/web_tests/xr/events_input_source_recreation.html b/third_party/blink/web_tests/xr/events_input_source_recreation.html
new file mode 100644
index 0000000..db44c52
--- /dev/null
+++ b/third_party/blink/web_tests/xr/events_input_source_recreation.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/public/mojom/vr_service.mojom.js"></script>
+<script src="../external/wpt/resources/chromium/webxr-test.js"></script>
+<script src="../external/wpt/webxr/resources/webxr_test_constants.js"></script>
+<script src="../xr/resources/xr-internal-device-mocking.js"></script>
+<script src="../xr/resources/xr-test-utils.js"></script>
+<canvas id="webgl-canvas"></canvas>
+
+<script>
+let testName = "Input sources are re-created when handedness or target ray mode changes";
+
+let watcherDone = new Event("watcherdone");
+
+let fakeDeviceInitParams = { supportsImmersive:true };
+
+let requestSessionModes = ['immersive-vr'];
+
+let testFunction = function(session, t, fakeDeviceController) {
+  let eventWatcher = new EventWatcher(t, session, ["watcherdone"]);
+  let eventPromise = eventWatcher.wait_for(["watcherdone"]);
+
+  // Need to have a valid pose or input events don't process.
+  fakeDeviceController.setXRPresentationFrameData(VALID_POSE_MATRIX, [{
+      eye:"left",
+      projectionMatrix: VALID_PROJECTION_MATRIX,
+      viewMatrix: VALID_VIEW_MATRIX
+    }, {
+      eye:"right",
+      projectionMatrix: VALID_PROJECTION_MATRIX,
+      viewMatrix: VALID_VIEW_MATRIX
+    }]);
+
+  let inputChangeEvents = 0;
+  let cached_input_source = null;
+  function onInputSourcesChange(event) {
+    t.step(() => {
+      inputChangeEvents++;
+      assert_equals(event.session, session);
+
+      if (inputChangeEvents == 1) {
+        // The first change event should be adding our controller.
+        validateAdded(event.added, 1);
+        validateRemoved(event.removed, 0);
+        cached_input_source = getInputSources()[0];
+        assert_not_equals(cached_input_source, null);
+        assert_equals(cached_input_source.handedness, "none");
+        assert_equals(cached_input_source.targetRayMode, "gaze");
+      } else if (inputChangeEvents == 2) {
+        // The second event should be replacing the controller with one that has
+        // the updated target ray mode.
+        validateInputSourceChange(event, "none", "tracked-pointer");
+        cached_input_source = getInputSources()[0];
+      } else if (inputChangeEvents == 3) {
+        // The third event should be replacing the controller with one that has
+        // the updated handedness.
+        validateInputSourceChange(event, "left", "tracked-pointer");
+        session.dispatchEvent(watcherDone);
+      }
+    });
+  }
+
+  function validateInputSourceChange(event, expected_hand, expected_mode) {
+    validateAdded(event.added, 1);
+    validateRemoved(event.removed, 1);
+    assert_true(event.removed.includes(cached_input_source));
+    assert_false(event.added.includes(cached_input_source));
+    let source = event.added[0];
+    assert_equals(source.handedness, expected_hand);
+    assert_equals(source.targetRayMode, expected_mode);
+  }
+
+  function validateAdded(added, length) {
+    t.step(() => {
+      assert_not_equals(added, null);
+      assert_equals(added.length, length,
+          "Added length matches expectations");
+
+      let currentSources = getInputSources();
+      added.forEach((source) => {
+        assert_true(currentSources.includes(source),
+          "Every element in added should be in the input source list");
+      });
+    });
+  }
+
+  function validateRemoved(removed, length) {
+    t.step(() => {
+      assert_not_equals(removed, null);
+        assert_equals(removed.length, length,
+            "Removed length matches expectations");
+
+      let currentSources = getInputSources();
+      removed.forEach((source) => {
+        assert_false(currentSources.includes(source),
+          "No element in removed should be in the input source list");
+      });
+    });
+  }
+
+  function getInputSources() {
+    return Array.from(session.inputSources.values());
+  }
+
+  session.addEventListener('inputsourceschange', onInputSourcesChange, false);
+
+  // Session must have a baseLayer or frame requests will be ignored.
+  session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
+
+  // Create our input source and immediately toggle the primary input so that
+  // it appears as already needing to send a click event when it appears.
+  let input_source = new MockXRInputSource();
+  fakeDeviceController.addInputSource(input_source);
+
+  // Make our input source change after one frame, and wait an additional
+  // frame for that change to propogate.
+  session.requestAnimationFrame((time, xrFrame) => {
+    input_source.targetRayMode = "tracked-pointer";
+    session.requestAnimationFrame((time, xrFrame) => {
+      input_source.handedness = "left";
+      session.requestAnimationFrame((time, xrFrame) => {});
+    });
+  });
+
+  return eventPromise;
+};
+
+xr_session_promise_test(
+  testFunction, fakeDeviceInitParams, requestSessionModes, testName);
+</script>
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_viewport_scale.html b/third_party/blink/web_tests/xr/xrWebGLLayer_viewport_scale.html
deleted file mode 100644
index 8b5e910..0000000
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_viewport_scale.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/device/vr/public/mojom/vr_service.mojom.js"></script>
-<script src="../external/wpt/resources/chromium/webxr-test.js"></script>
-<script src="../external/wpt/webxr/resources/webxr_test_constants.js"></script>
-<script src="../xr/resources/xr-test-utils.js"></script>
-<canvas id="webgl-canvas"></canvas>
-
-<script>
-
-let testName = "Ensure viewport scale changes only take effect on the next "
-  + "frame and are properly clamped.";
-
-let fakeDeviceInitParams = { supportsImmersive: true };
-
-let requestSessionModes =  ['immersive-vr'];
-
-let testFunction = function(session, t, fakeDeviceController) {
-  // Session must have a baseLayer or else frame requests will be ignored.
-  let webglLayer = new XRWebGLLayer(session, gl);
-  session.updateRenderState({ baseLayer: webglLayer });
-
-  // Need to have a valid pose or input event's don't process.
-  fakeDeviceController.setXRPresentationFrameData(VALID_POSE_MATRIX, [{
-      eye:"left",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }, {
-      eye:"right",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }]);
-
-  return session.requestReferenceSpace({ type: "stationary", subtype: "eye-level" }).then(
-    (referenceSpace) => new Promise(
-      (resolve) => {
-        let full_viewport;
-
-        function getCurrentViewport(xrFrame) {
-          let pose = xrFrame.getViewerPose(referenceSpace);
-          assert_not_equals(pose, null);
-          assert_not_equals(pose.views, null);
-          assert_greater_than(pose.views.length, 0);
-          return webglLayer.getViewport(pose.views[0]);
-        }
-
-        function onFirstFrame(time, xrFrame) {
-          full_viewport = getCurrentViewport(xrFrame);
-
-          webglLayer.requestViewportScaling(0.5);
-
-          let new_viewport = getCurrentViewport(xrFrame);
-
-          t.step(() => {
-            // Viewport should not change within this frame!
-            assert_equals(full_viewport.x, new_viewport.x);
-            assert_equals(full_viewport.y, new_viewport.y);
-            assert_equals(full_viewport.width, new_viewport.width);
-            assert_equals(full_viewport.height, new_viewport.height);
-          });
-
-          // This should be clamped to some non-zero lower bounds.
-          webglLayer.requestViewportScaling(0.0);
-
-          session.requestAnimationFrame(onSecondFrame);
-        }
-
-        function onSecondFrame(time, xrFrame) {
-          let new_viewport = getCurrentViewport(xrFrame);
-
-          t.step(() => {
-            // Viewport should never be zero width or height.
-            assert_greater_than(new_viewport.width, 0);
-            assert_greater_than(new_viewport.height, 0);
-          });
-
-          // This should be clamped to 1.0
-          webglLayer.requestViewportScaling(10.0);
-
-          session.requestAnimationFrame(onFinalFrame);
-        }
-
-        function onFinalFrame(time, xrFrame) {
-          let new_viewport = getCurrentViewport(xrFrame);
-
-          t.step(() => {
-            // Should be the full viewport again.
-            assert_equals(full_viewport.x, new_viewport.x);
-            assert_equals(full_viewport.y, new_viewport.y);
-            assert_equals(full_viewport.width, new_viewport.width);
-            assert_equals(full_viewport.height, new_viewport.height);
-          });
-
-          resolve();
-        }
-
-        session.requestAnimationFrame(onFirstFrame);
-      }
-    )
-  );
-};
-
-xr_session_promise_test(
-  testFunction, fakeDeviceInitParams, requestSessionModes, testName);
-
-</script>
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium
index 214134e..5ec4bdbc 100644
--- a/third_party/feed/README.chromium
+++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@
 Short name: feed
 URL: https://chromium.googlesource.com/feed
 Version: 0
-Revision: eb5622ba5a63b0e62ee8cc7afd49d087faa107c9
+Revision: 6eeec6bf30698daf8960301a3cb7a418b935449e
 License: Apache 2.0
 License File: LICENSE
 Security Critical: yes
diff --git a/third_party/feed/java_sources.gni b/third_party/feed/java_sources.gni
index 165ffb2..99ab860 100644
--- a/third_party/feed/java_sources.gni
+++ b/third_party/feed/java_sources.gni
@@ -91,7 +91,11 @@
   "src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompleted.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompletedObserver.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter/ProtocolAdapter.java",
+  "src/src/main/java/com/google/android/libraries/feed/api/internal/requestmanager/ActionUploadRequestManager.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/requestmanager/FeedRequestManager.java",
+  "src/src/main/java/com/google/android/libraries/feed/api/internal/scope/ClearAllListener.java",
+  "src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java",
+  "src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedStreamScope.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/FeedSessionManager.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/store/ActionPropertiesMutation.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/store/ContentMutation.java",
@@ -103,10 +107,6 @@
   "src/src/main/java/com/google/android/libraries/feed/api/internal/store/UploadableActionMutation.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/stream/BasicStreamFactory.java",
   "src/src/main/java/com/google/android/libraries/feed/api/internal/stream/StreamFactory.java",
-  "src/src/main/java/com/google/android/libraries/feed/api/requestmanager/ActionUploadRequestManager.java",
-  "src/src/main/java/com/google/android/libraries/feed/api/scope/ClearAllListener.java",
-  "src/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java",
-  "src/src/main/java/com/google/android/libraries/feed/api/scope/FeedStreamScope.java",
   "src/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java",
   "src/src/main/java/com/google/android/libraries/feed/api/stream/NonDismissibleHeader.java",
   "src/src/main/java/com/google/android/libraries/feed/basicstream/BasicStream.java",
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index a0eeb6c2..531e7e1 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-9-1-351
-Revision: 31757f969fba60d75404f31e8f1168bef5011770
+Version: VER-2-9-1-352-g2f4b740ce
+Revision: 2f4b740ce435bc1ad5ef8570bb91ab7cd5682720
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/third_party/metrics_proto/README.chromium b/third_party/metrics_proto/README.chromium
index 8b07105..17d206c 100644
--- a/third_party/metrics_proto/README.chromium
+++ b/third_party/metrics_proto/README.chromium
@@ -1,8 +1,8 @@
 Name: Metrics Protos
 Short Name: metrics_proto
 URL: This is the canonical public repository
-Version: 248273902
-Date: 2019/05/15 UTC
+Version: 249077303
+Date: 2019/05/20 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 755daca2..e4e6398f 100644
--- a/third_party/metrics_proto/extension_install.proto
+++ b/third_party/metrics_proto/extension_install.proto
@@ -16,14 +16,15 @@
 message ExtensionInstallProto {
   // The type of extension item this is.
   enum Type {
-    UNKNOWN_TYPE = 0;         // Unknown (hopefully never used)
-    EXTENSION = 1;            // A browser extension
-    THEME = 2;                // A browser theme
-    USER_SCRIPT = 3;          // An extension converted from a user script
-    HOSTED_APP = 4;           // A hosted app
-    LEGACY_PACKAGED_APP = 5;  // A (deprecated) v1 packaged app
-    PLATFORM_APP = 6;         // A platform app
-    SHARED_MODULE = 7;        // A shared module
+    UNKNOWN_TYPE = 0;            // Unknown (hopefully never used)
+    EXTENSION = 1;               // A browser extension
+    THEME = 2;                   // A browser theme
+    USER_SCRIPT = 3;             // An extension converted from a user script
+    HOSTED_APP = 4;              // A hosted app
+    LEGACY_PACKAGED_APP = 5;     // A (deprecated) v1 packaged app
+    PLATFORM_APP = 6;            // A platform app
+    SHARED_MODULE = 7;           // A shared module
+    LOGIN_SCREEN_EXTENSION = 8;  // An extension running on the login screen
   }
   optional Type type = 1;
 
diff --git a/third_party/metrics_proto/omnibox_event.proto b/third_party/metrics_proto/omnibox_event.proto
index 2daebc55..2f15966 100644
--- a/third_party/metrics_proto/omnibox_event.proto
+++ b/third_party/metrics_proto/omnibox_event.proto
@@ -122,8 +122,10 @@
     // The instant new tab page enum value was deprecated on August 2, 2013.
     OBSOLETE_INSTANT_NTP = 5;
 
-    // The search term replacement enum value was deprecated in August 2016.
-    OBSOLETE_SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT = 6;
+    // The user is on a search result page that does search term replacement.
+    // This means the search terms are shown in the omnibox instead of the URL.
+    // In other words: Query in Omnibox is Active for this SRP.
+    SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT = 6;
 
     // The new tab page in which this omnibox interaction first started
     // with the user having focus in the omnibox.
@@ -133,9 +135,9 @@
     // with the user having focus in the fakebox.
     INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS = 8;
 
-    // The user is on a search result page that's not doing search term
-    // replacement, meaning the URL of the page should've appeared in the
-    // omnibox before the user started editing it, not the search terms.
+    // The user is on a search result page that does not do search term
+    // replacement. This means the URL of the SRP is shown in the omnibox.
+    // In other words: Query in Omnibox is Inactive for this SRP.
     SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT = 9;
 
     // The user is on the home screen.
diff --git a/third_party/metrics_proto/sampled_profile.proto b/third_party/metrics_proto/sampled_profile.proto
index 5cf5650..c5da7e5 100644
--- a/third_party/metrics_proto/sampled_profile.proto
+++ b/third_party/metrics_proto/sampled_profile.proto
@@ -19,7 +19,7 @@
 // Protocol buffer for collected sample-based profiling data.
 // Contains the parameters and data from a single profile collection event.
 
-// Next tag: 15
+// Next tag: 16
 message SampledProfile {
   // Indicates the event that triggered this collection.
   enum TriggerEvent {
@@ -107,4 +107,11 @@
 
   // Perf counter data collected using "perf stat".
   optional PerfStatProto perf_stat = 10;
+
+  // The maximum frequency in MHz reported for each logical CPU on the device.
+  // This is a repeated field, where entry 0 corresponds to core 0, entry 1 to
+  // core 1, and so on. The field is optional and populated only for metrics
+  // that can use the max frequency to compute a CPU utilization metric, e.g.
+  // when measuring CPU cycles.
+  repeated uint32 cpu_max_frequency_mhz = 15;
 }
diff --git a/third_party/rnnoise/BUILD.gn b/third_party/rnnoise/BUILD.gn
index c669179a5..5aa9605 100644
--- a/third_party/rnnoise/BUILD.gn
+++ b/third_party/rnnoise/BUILD.gn
@@ -6,18 +6,10 @@
 
 group("rnnoise") {
   deps = [
-    ":kiss_fft",
     ":rnn_vad",
   ]
 }
 
-source_set("kiss_fft") {
-  sources = [
-    "src/kiss_fft.cc",
-    "src/kiss_fft.h",
-  ]
-}
-
 source_set("rnn_vad") {
   sources = [
     "src/rnn_activations.h",
@@ -25,14 +17,3 @@
     "src/rnn_vad_weights.h",
   ]
 }
-
-test("kiss_fft_unittest") {
-  sources = [
-    "src/kiss_fft_unittest.cc",
-  ]
-  deps = [
-    ":kiss_fft",
-    "//testing/gtest",
-    "//testing/gtest:gtest_main",
-  ]
-}
diff --git a/third_party/rnnoise/DEPS b/third_party/rnnoise/DEPS
deleted file mode 100644
index fca61fc..0000000
--- a/third_party/rnnoise/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
-  "+testing/gtest/include/gtest",
-]
diff --git a/third_party/rnnoise/README.chromium b/third_party/rnnoise/README.chromium
index 8efe059..14fb2895 100644
--- a/third_party/rnnoise/README.chromium
+++ b/third_party/rnnoise/README.chromium
@@ -25,4 +25,5 @@
 * rnn_vad_weights.h: output layer sizes + weights scaling factor
 * removing unwanted extern from constants in rnn_vad_weights.h and using
   constants to declare array sizes
-* Add braces around arrays in unit test.
\ No newline at end of file
+* Add braces around arrays in unit test.
+* KissFFT removed
diff --git a/third_party/rnnoise/src/kiss_fft.cc b/third_party/rnnoise/src/kiss_fft.cc
deleted file mode 100644
index 27b4900..0000000
--- a/third_party/rnnoise/src/kiss_fft.cc
+++ /dev/null
@@ -1,443 +0,0 @@
-/*Copyright (c) 2003-2004, Mark Borgerding
-  Lots of modifications by Jean-Marc Valin
-  Copyright (c) 2005-2007, Xiph.Org Foundation
-  Copyright (c) 2008,      Xiph.Org Foundation, CSIRO
-  Copyright (c) 2018,      The WebRTC project authors
-
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-       this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-       this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-  POSSIBILITY OF SUCH DAMAGE.*/
-
-#include "third_party/rnnoise/src/kiss_fft.h"
-
-#include <cassert>
-#include <cmath>
-#include <utility>
-
-namespace rnnoise {
-namespace {
-
-void kf_bfly2(std::complex<float>* Fout, int m, int N) {
-  if (m == 1) {
-    for (int i = 0; i < N; i++) {
-      const std::complex<float> t = Fout[1];
-      Fout[1] = Fout[0] - t;
-      Fout[0] += t;
-      Fout += 2;
-    }
-  } else {
-    constexpr float tw = 0.7071067812f;
-    // We know that m==4 here because the radix-2 is just after a radix-4.
-    assert(m == 4);
-    for (int i = 0; i < N; i++) {
-      std::complex<float>* Fout2 = Fout + 4;
-      std::complex<float> t = Fout2[0];
-
-      *Fout2 = Fout[0] - t;
-      Fout[0] += t;
-
-      t.real((Fout2[1].real() + Fout2[1].imag()) * tw);
-      t.imag((Fout2[1].imag() - Fout2[1].real()) * tw);
-      Fout2[1] = Fout[1] - t;
-      Fout[1] += t;
-
-      t.real(Fout2[2].imag());
-      t.imag(-Fout2[2].real());
-      Fout2[2] = Fout[2] - t;
-      Fout[2] += t;
-
-      t.real((Fout2[3].imag() - Fout2[3].real()) * tw);
-      t.imag(-(Fout2[3].imag() + Fout2[3].real()) * tw);
-      Fout2[3] = Fout[3] - t;
-      Fout[3] += t;
-      Fout += 8;
-    }
-  }
-}
-
-void kf_bfly4(std::complex<float>* Fout,
-              const size_t fstride,
-              const KissFft::KissFftState* st,
-              int m,
-              int N,
-              int mm) {
-  assert(Fout);
-  assert(st);
-  if (m == 1) {
-    // Degenerate case where all the twiddles are 1.
-    for (int i = 0; i < N; i++) {
-      std::complex<float> scratch0 = Fout[0] - Fout[2];
-      Fout[0] += Fout[2];
-      std::complex<float> scratch1 = Fout[1] + Fout[3];
-      Fout[2] = Fout[0] - scratch1;
-      Fout[0] += scratch1;
-      scratch1 = Fout[1] - Fout[3];
-
-      Fout[1].real(scratch0.real() + scratch1.imag());
-      Fout[1].imag(scratch0.imag() - scratch1.real());
-      Fout[3].real(scratch0.real() - scratch1.imag());
-      Fout[3].imag(scratch0.imag() + scratch1.real());
-      Fout += 4;
-    }
-  } else {
-    std::complex<float> scratch[6];
-    const int m2 = 2 * m;
-    const int m3 = 3 * m;
-    std::complex<float>* Fout_beg = Fout;
-    for (int i = 0; i < N; i++) {
-      Fout = Fout_beg + i * mm;
-      const std::complex<float>* tw1;
-      const std::complex<float>* tw2;
-      const std::complex<float>* tw3;
-      tw3 = tw2 = tw1 = &st->twiddles[0];
-      assert(m % 4 == 0);  // |m| is guaranteed to be a multiple of 4.
-      for (int j = 0; j < m; j++) {
-        scratch[0] = Fout[m] * *tw1;
-        scratch[1] = Fout[m2] * *tw2;
-        scratch[2] = Fout[m3] * *tw3;
-
-        scratch[5] = Fout[0] - scratch[1];
-        Fout[0] += scratch[1];
-        scratch[3] = scratch[0] + scratch[2];
-        scratch[4] = scratch[0] - scratch[2];
-        Fout[m2] = Fout[0] - scratch[3];
-
-        tw1 += fstride;
-        tw2 += fstride * 2;
-        tw3 += fstride * 3;
-        Fout[0] += scratch[3];
-
-        Fout[m].real(scratch[5].real() + scratch[4].imag());
-        Fout[m].imag(scratch[5].imag() - scratch[4].real());
-        Fout[m3].real(scratch[5].real() - scratch[4].imag());
-        Fout[m3].imag(scratch[5].imag() + scratch[4].real());
-        ++Fout;
-      }
-    }
-  }
-}
-
-void kf_bfly3(std::complex<float>* Fout,
-              const size_t fstride,
-              const KissFft::KissFftState* st,
-              int m,
-              int N,
-              int mm) {
-  assert(Fout);
-  assert(st);
-  const size_t m2 = 2 * m;
-  const std::complex<float>*tw1, *tw2;
-  std::complex<float> scratch[5];
-  std::complex<float> epi3;
-
-  std::complex<float>* Fout_beg = Fout;
-  epi3 = st->twiddles[fstride * m];
-  for (int i = 0; i < N; i++) {
-    Fout = Fout_beg + i * mm;
-    tw1 = tw2 = &st->twiddles[0];
-    size_t k = m;
-    do {
-      scratch[1] = Fout[m] * *tw1;
-      scratch[2] = Fout[m2] * *tw2;
-
-      scratch[3] = scratch[1] + scratch[2];
-      scratch[0] = scratch[1] - scratch[2];
-      tw1 += fstride;
-      tw2 += fstride * 2;
-
-      Fout[m] = Fout[0] - 0.5f * scratch[3];
-
-      scratch[0] *= epi3.imag();
-
-      Fout[0] += scratch[3];
-
-      Fout[m2].real(Fout[m].real() + scratch[0].imag());
-      Fout[m2].imag(Fout[m].imag() - scratch[0].real());
-
-      Fout[m].real(Fout[m].real() - scratch[0].imag());
-      Fout[m].imag(Fout[m].imag() + scratch[0].real());
-
-      ++Fout;
-    } while (--k);
-  }
-}
-
-void kf_bfly5(std::complex<float>* Fout,
-              const size_t fstride,
-              const KissFft::KissFftState* st,
-              int m,
-              int N,
-              int mm) {
-  assert(Fout);
-  assert(st);
-  std::complex<float> scratch[13];
-  const std::complex<float>* tw;
-  std::complex<float> ya, yb;
-  std::complex<float>* const Fout_beg = Fout;
-
-  ya = st->twiddles[fstride * m];
-  yb = st->twiddles[fstride * 2 * m];
-  tw = &st->twiddles[0];
-
-  for (int i = 0; i < N; i++) {
-    Fout = Fout_beg + i * mm;
-    std::complex<float>* Fout0 = Fout;
-    std::complex<float>* Fout1 = Fout0 + m;
-    std::complex<float>* Fout2 = Fout0 + 2 * m;
-    std::complex<float>* Fout3 = Fout0 + 3 * m;
-    std::complex<float>* Fout4 = Fout0 + 4 * m;
-
-    // For non-custom modes, m is guaranteed to be a multiple of 4.
-    for (int u = 0; u < m; ++u) {
-      scratch[0] = *Fout0;
-
-      scratch[1] = *Fout1 * tw[u * fstride];
-      scratch[2] = *Fout2 * tw[2 * u * fstride];
-      scratch[3] = *Fout3 * tw[3 * u * fstride];
-      scratch[4] = *Fout4 * tw[4 * u * fstride];
-
-      scratch[7] = scratch[1] + scratch[4];
-      scratch[10] = scratch[1] - scratch[4];
-      scratch[8] = scratch[2] + scratch[3];
-      scratch[9] = scratch[2] - scratch[3];
-
-      Fout0->real(Fout0->real() + scratch[7].real() + scratch[8].real());
-      Fout0->imag(Fout0->imag() + scratch[7].imag() + scratch[8].imag());
-
-      scratch[5].real(scratch[0].real() + scratch[7].real() * ya.real() +
-                      scratch[8].real() * yb.real());
-      scratch[5].imag(scratch[0].imag() + scratch[7].imag() * ya.real() +
-                      scratch[8].imag() * yb.real());
-
-      scratch[6].real(scratch[10].imag() * ya.imag() +
-                      scratch[9].imag() * yb.imag());
-      scratch[6].imag(
-          -(scratch[10].real() * ya.imag() + scratch[9].real() * yb.imag()));
-
-      *Fout1 = scratch[5] - scratch[6];
-      *Fout4 = scratch[5] + scratch[6];
-
-      scratch[11].real(scratch[0].real() + scratch[7].real() * yb.real() +
-                       scratch[8].real() * ya.real());
-      scratch[11].imag(scratch[0].imag() + scratch[7].imag() * yb.real() +
-                       scratch[8].imag() * ya.real());
-      scratch[12].real(scratch[9].imag() * ya.imag() -
-                       scratch[10].imag() * yb.imag());
-      scratch[12].imag(scratch[10].real() * yb.imag() -
-                       scratch[9].real() * ya.imag());
-
-      *Fout2 = scratch[11] + scratch[12];
-      *Fout3 = scratch[11] - scratch[12];
-
-      ++Fout0;
-      ++Fout1;
-      ++Fout2;
-      ++Fout3;
-      ++Fout4;
-    }
-  }
-}
-
-void compute_bitrev_table(int base_index,
-                          const size_t stride,
-                          const int16_t* factors,
-                          const KissFft::KissFftState* st,
-                          const int16_t* bitrev_table_last,
-                          int16_t* bitrev_table) {
-  const int p = *factors++;  // The radix.
-  const int m = *factors++;  // Stage's fft length/p.
-  if (m == 1) {
-    for (int j = 0; j < p; j++) {
-      assert(bitrev_table <= bitrev_table_last);
-      *bitrev_table = base_index + j;
-      bitrev_table += stride;
-    }
-  } else {
-    for (int j = 0; j < p; j++) {
-      compute_bitrev_table(base_index, stride * p, factors, st,
-                           bitrev_table_last, bitrev_table);
-      bitrev_table += stride;
-      base_index += m;
-    }
-  }
-}
-
-// Populates |facbuf| with p1, m1, p2, m2, ... where p[i] * m[i] = m[i-1] and
-// m0 = n.
-bool kf_factor(int n, int16_t* facbuf) {
-  assert(facbuf);
-  int p = 4;
-  int stages = 0;
-  int nbak = n;
-
-  // Factor out powers of 4, powers of 2, then any remaining primes.
-  do {
-    while (n % p) {
-      switch (p) {
-        case 4:
-          p = 2;
-          break;
-        case 2:
-          p = 3;
-          break;
-        default:
-          p += 2;
-          break;
-      }
-      if (p > 32000 || p * p > n)
-        p = n;  // No more factors, skip to end.
-    }
-    n /= p;
-    if (p > 5)
-      return false;
-    facbuf[2 * stages] = p;
-    if (p == 2 && stages > 1) {
-      facbuf[2 * stages] = 4;
-      facbuf[2] = 2;
-    }
-    stages++;
-  } while (n > 1);
-  n = nbak;
-  // Reverse the order to get the radix 4 at the end, so we can use the
-  // fast degenerate case. It turns out that reversing the order also
-  // improves the noise behavior.
-  for (int i = 0; i < stages / 2; i++)
-    std::swap(facbuf[2 * i], facbuf[2 * (stages - i - 1)]);
-  for (int i = 0; i < stages; i++) {
-    n /= facbuf[2 * i];
-    facbuf[2 * i + 1] = n;
-  }
-  return true;
-}
-
-void compute_twiddles(const int nfft, std::complex<float>* twiddles) {
-  constexpr double pi = 3.14159265358979323846264338327;
-  assert(twiddles);
-  for (int i = 0; i < nfft; ++i) {
-    const double phase = (-2 * pi / nfft) * i;
-    twiddles[i].real(std::cos(phase));
-    twiddles[i].imag(std::sin(phase));
-  }
-}
-
-void fft_impl(const KissFft::KissFftState* st, std::complex<float>* fout) {
-  assert(st);
-  assert(fout);
-  int m2, m;
-  int p;
-  int L;
-  int fstride[KissFft::kMaxFactors];
-
-  fstride[0] = 1;
-  L = 0;
-  do {
-    p = st->factors[2 * L];
-    m = st->factors[2 * L + 1];
-    assert(static_cast<size_t>(L + 1) < KissFft::kMaxFactors);
-    fstride[L + 1] = fstride[L] * p;
-    L++;
-  } while (m != 1);
-  m = st->factors[2 * L - 1];
-  for (int i = L - 1; i >= 0; i--) {
-    if (i != 0)
-      m2 = st->factors[2 * i - 1];
-    else
-      m2 = 1;
-    switch (st->factors[2 * i]) {
-      case 2:
-        kf_bfly2(fout, m, fstride[i]);
-        break;
-      case 4:
-        kf_bfly4(fout, fstride[i], st, m, fstride[i], m2);
-        break;
-      case 3:
-        kf_bfly3(fout, fstride[i], st, m, fstride[i], m2);
-        break;
-      case 5:
-        kf_bfly5(fout, fstride[i], st, m, fstride[i], m2);
-        break;
-      default:
-        assert(0);
-        break;
-    }
-    m = m2;
-  }
-}
-
-}  // namespace
-
-KissFft::KissFftState::KissFftState(int num_fft_points)
-    : nfft(num_fft_points), scale(1.f / nfft) {
-  // Factorize |nfft|.
-  // TODO(alessiob): Handle kf_factor fails (invalid nfft).
-  if (!kf_factor(nfft, factors.data()))
-    assert(0);
-  // Twiddles.
-  twiddles.resize(nfft);
-  compute_twiddles(nfft, twiddles.data());
-  // Bit-reverse table.
-  bitrev.resize(nfft);
-  compute_bitrev_table(0, 1, factors.data(), this, &bitrev.back(),
-                       bitrev.data());
-}
-
-KissFft::KissFftState::~KissFftState() = default;
-
-KissFft::KissFft(const int nfft) : state_(nfft) {}
-
-KissFft::~KissFft() = default;
-
-void KissFft::ForwardFft(const size_t in_size,
-                         const std::complex<float>* in,
-                         const size_t out_size,
-                         std::complex<float>* out) {
-  assert(in);
-  assert(out);
-  assert(in != out);  // In-place FFT not supported.
-  assert(state_.nfft == static_cast<int>(in_size));
-  assert(state_.nfft == static_cast<int>(out_size));
-  // Bit-reverse the input.
-  for (int i = 0; i < state_.nfft; i++)
-    out[state_.bitrev[i]] = state_.scale * in[i];
-  fft_impl(&state_, out);
-}
-
-void KissFft::ReverseFft(const size_t in_size,
-                         const std::complex<float>* in,
-                         const size_t out_size,
-                         std::complex<float>* out) {
-  assert(in);
-  assert(out);
-  assert(in != out);  // In-place IFFT not supported.
-  assert(state_.nfft == static_cast<int>(in_size));
-  assert(state_.nfft == static_cast<int>(out_size));
-  // Bit-reverse the input.
-  for (int i = 0; i < state_.nfft; i++)
-    out[state_.bitrev[i]] = in[i];
-  for (int i = 0; i < state_.nfft; i++)
-    out[i].imag(-out[i].imag());
-  fft_impl(&state_, out);
-  for (int i = 0; i < state_.nfft; i++)
-    out[i].imag(-out[i].imag());
-}
-
-}  // namespace rnnoise
diff --git a/third_party/rnnoise/src/kiss_fft.h b/third_party/rnnoise/src/kiss_fft.h
deleted file mode 100644
index b90f77d..0000000
--- a/third_party/rnnoise/src/kiss_fft.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*Copyright (c) 2003-2004, Mark Borgerding
-  Lots of modifications by Jean-Marc Valin
-  Copyright (c) 2005-2007, Xiph.Org Foundation
-  Copyright (c) 2008,      Xiph.Org Foundation, CSIRO
-  Copyright (c) 2018,      The WebRTC project authors
-
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-       this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-       this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-  POSSIBILITY OF SUCH DAMAGE.*/
-
-#ifndef THIRD_PARTY_RNNOISE_SRC_KISS_FFT_H_
-#define THIRD_PARTY_RNNOISE_SRC_KISS_FFT_H_
-
-#include <array>
-#include <complex>
-#include <vector>
-
-namespace rnnoise {
-
-class KissFft {
- public:
-  // Example: an FFT of length 128 has 4 factors as far as kissfft is concerned
-  // (namely, 4*4*4*2).
-  static const size_t kMaxFactors = 8;
-
-  class KissFftState {
-   public:
-    KissFftState(int num_fft_points);
-    KissFftState(const KissFftState&) = delete;
-    KissFftState& operator=(const KissFftState&) = delete;
-    ~KissFftState();
-
-    const int nfft;
-    const float scale;
-    std::array<int16_t, 2 * kMaxFactors> factors;
-    std::vector<int16_t> bitrev;
-    std::vector<std::complex<float>> twiddles;
-  };
-
-  explicit KissFft(const int nfft);
-  KissFft(const KissFft&) = delete;
-  KissFft& operator=(const KissFft&) = delete;
-  ~KissFft();
-  void ForwardFft(const size_t in_size,
-                  const std::complex<float>* in,
-                  const size_t out_size,
-                  std::complex<float>* out);
-  void ReverseFft(const size_t in_size,
-                  const std::complex<float>* in,
-                  const size_t out_size,
-                  std::complex<float>* out);
-
- private:
-  KissFftState state_;
-};
-
-}  // namespace rnnoise
-
-#endif  // THIRD_PARTY_RNNOISE_SRC_KISS_FFT_H_
diff --git a/third_party/rnnoise/src/kiss_fft_unittest.cc b/third_party/rnnoise/src/kiss_fft_unittest.cc
deleted file mode 100644
index f7d1bb01..0000000
--- a/third_party/rnnoise/src/kiss_fft_unittest.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <array>
-#include <cmath>
-#include <limits>
-#include <tuple>
-#include <vector>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/rnnoise/src/kiss_fft.h"
-
-namespace rnnoise {
-namespace test {
-namespace {
-
-const double kPi = std::acos(-1.0);
-
-void FillFftInputBuffer(const size_t num_samples,
-                        const float* samples,
-                        std::complex<float>* input_buf) {
-  for (size_t i = 0; i < num_samples; ++i)
-    input_buf[i].real(samples[i]);
-}
-
-void CheckFftResult(const size_t num_fft_points,
-                    const float* expected_real,
-                    const float* expected_imag,
-                    const std::complex<float>* computed,
-                    const float tolerance) {
-  for (size_t i = 0; i < num_fft_points; ++i) {
-    SCOPED_TRACE(i);
-    EXPECT_NEAR(expected_real[i], computed[i].real(), tolerance);
-    EXPECT_NEAR(expected_imag[i], computed[i].imag(), tolerance);
-  }
-}
-
-}  // namespace
-
-class RnnVadTest
-    : public testing::Test,
-      public ::testing::WithParamInterface<std::tuple<size_t, float, float>> {};
-
-// Check that IFFT(FFT(x)) == x (tolerating round-off errors).
-TEST_P(RnnVadTest, KissFftForwardReverseCheckIdentity) {
-  const auto params = GetParam();
-  const float amplitude = std::get<0>(params);
-  const size_t num_fft = std::get<1>(params);
-  const float tolerance = std::get<2>(params);
-  std::vector<float> samples;
-  std::vector<float> zeros;
-  samples.resize(num_fft);
-  zeros.resize(num_fft);
-  for (size_t i = 0; i < num_fft; ++i) {
-    samples[i] = amplitude * std::sin(2.f * kPi * 10 * i / num_fft);
-    zeros[i] = 0.f;
-  }
-
-  KissFft fft(num_fft);
-  std::vector<std::complex<float>> fft_buf_1;
-  fft_buf_1.resize(num_fft);
-  std::vector<std::complex<float>> fft_buf_2;
-  fft_buf_2.resize(num_fft);
-
-  FillFftInputBuffer(samples.size(), samples.data(), fft_buf_1.data());
-  {
-    // TODO(alessiob): Underflow with non power of 2 frame sizes.
-    // FloatingPointExceptionObserver fpe_observer;
-
-    fft.ForwardFft(fft_buf_1.size(), fft_buf_1.data(), fft_buf_2.size(),
-                   fft_buf_2.data());
-    fft.ReverseFft(fft_buf_2.size(), fft_buf_2.data(), fft_buf_1.size(),
-                   fft_buf_1.data());
-  }
-  CheckFftResult(samples.size(), samples.data(), zeros.data(), fft_buf_1.data(),
-                 tolerance);
-}
-
-INSTANTIATE_TEST_SUITE_P(FftPoints,
-                         RnnVadTest,
-                         ::testing::Values(std::make_tuple(1.f, 240, 3e-7f),
-                                           std::make_tuple(1.f, 256, 3e-7f),
-                                           std::make_tuple(1.f, 480, 3e-7f),
-                                           std::make_tuple(1.f, 512, 3e-7f),
-                                           std::make_tuple(1.f, 960, 4e-7f),
-                                           std::make_tuple(1.f, 1024, 3e-7f),
-                                           std::make_tuple(30.f, 240, 5e-6f),
-                                           std::make_tuple(30.f, 256, 5e-6f),
-                                           std::make_tuple(30.f, 480, 6e-6f),
-                                           std::make_tuple(30.f, 512, 6e-6f),
-                                           std::make_tuple(30.f, 960, 8e-6f),
-                                           std::make_tuple(30.f, 1024, 6e-6f)));
-
-TEST(RnnVadTest, KissFftBitExactness) {
-  constexpr std::array<float, 32> samples = {
-      {0.3524301946163177490234375f,  0.891803801059722900390625f,
-       0.07706542313098907470703125f, 0.699530780315399169921875f,
-       0.3789891898632049560546875f,  0.5438187122344970703125f,
-       0.332781612873077392578125f,   0.449340641498565673828125f,
-       0.105229437351226806640625f,   0.722373783588409423828125f,
-       0.13155306875705718994140625f, 0.340857982635498046875f,
-       0.970204889774322509765625f,   0.53061950206756591796875f,
-       0.91507828235626220703125f,    0.830274522304534912109375f,
-       0.74468600749969482421875f,    0.24320767819881439208984375f,
-       0.743998110294342041015625f,   0.17574800550937652587890625f,
-       0.1834825575351715087890625f,  0.63317775726318359375f,
-       0.11414264142513275146484375f, 0.1612723171710968017578125f,
-       0.80316197872161865234375f,    0.4979794919490814208984375f,
-       0.554282128810882568359375f,   0.67189347743988037109375f,
-       0.06660757958889007568359375f, 0.89568817615509033203125f,
-       0.29327380657196044921875f,    0.3472573757171630859375f}};
-  constexpr std::array<float, 17> expected_real = {
-      {0.4813065826892852783203125f, -0.0246877372264862060546875f,
-       0.04095232486724853515625f, -0.0401695556938648223876953125f,
-       0.00500857271254062652587890625f, 0.0160773508250713348388671875f,
-       -0.011385642923414707183837890625f, -0.008461721241474151611328125f,
-       0.01383177936077117919921875f, 0.0117270611226558685302734375f,
-       -0.0164460353553295135498046875f, 0.0585579685866832733154296875f,
-       0.02038039825856685638427734375f, -0.0209107734262943267822265625f,
-       0.01046995259821414947509765625f, -0.09019653499126434326171875f,
-       -0.0583711564540863037109375f}};
-  constexpr std::array<float, 17> expected_imag = {
-      {0.f, -0.010482530109584331512451171875f, 0.04762755334377288818359375f,
-       -0.0558677613735198974609375f, 0.007908363826572895050048828125f,
-       -0.0071932487189769744873046875f, 0.01322011835873126983642578125f,
-       -0.011227893643081188201904296875f, -0.0400779247283935546875f,
-       -0.0290451310575008392333984375f, 0.01519204117357730865478515625f,
-       -0.09711246192455291748046875f, -0.00136523949913680553436279296875f,
-       0.038602568209171295166015625f, -0.009693108499050140380859375f,
-       -0.0183933563530445098876953125f, 0.f}};
-
-  KissFft fft(32);
-  std::array<std::complex<float>, 32> fft_buf_in;
-  std::array<std::complex<float>, 32> fft_buf_out;
-  FillFftInputBuffer(samples.size(), samples.data(), fft_buf_in.data());
-  fft.ForwardFft(fft_buf_in.size(), fft_buf_in.data(), fft_buf_out.size(),
-                 fft_buf_out.data());
-  CheckFftResult(expected_real.size(), expected_real.data(),
-                 expected_imag.data(), fft_buf_out.data(),
-                 std::numeric_limits<float>::min());
-}
-
-}  // namespace test
-}  // namespace rnnoise
diff --git a/third_party/webxr_test_pages/webxr-samples/index.html b/third_party/webxr_test_pages/webxr-samples/index.html
index 46cdb33b..a3e7398 100644
--- a/third_party/webxr_test_pages/webxr-samples/index.html
+++ b/third_party/webxr_test_pages/webxr-samples/index.html
@@ -139,10 +139,6 @@
               path: 'framebuffer-scaling.html',
               description: 'Demonstrates scaling a layer\'s framebuffer to statically control performance or quality.' },
 
-            { title: 'Viewport Scaling', category: 'Performance',
-              path: 'viewport-scaling.html',
-              description: 'Demonstrates scaling a layer\'s viewports to dynamically control performance or quality.' },
-
             { title: '360 Stereo Photos', category: 'Content',
               path: '360-photos.html',
               description: 'Demonstrates displaying a 360 degree equirectangular stereo photo.' },
diff --git a/third_party/webxr_test_pages/webxr-samples/viewport-scaling.html b/third_party/webxr_test_pages/webxr-samples/viewport-scaling.html
deleted file mode 100644
index b6d0941..0000000
--- a/third_party/webxr_test_pages/webxr-samples/viewport-scaling.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!doctype html>
-<!--
-Copyright 2018 The Immersive Web Community Group
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--->
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'>
-    <meta name='mobile-web-app-capable' content='yes'>
-    <meta name='apple-mobile-web-app-capable' content='yes'>
-
-    <!-- Origin Trial Token, feature = WebXR Device API, origin = https://immersive-web.github.io, expires = 2018-08-28 -->
-<meta http-equiv="origin-trial" data-feature="WebXR Device API" data-expires="2018-08-28" content="AnNpu7ceXvLew05ccD8Zr1OZsdZiB2hLQKK82kTTMDwF7oRKtP3QEJ4RzkeHrmB8Sq0vSV6ZNmszpBCZ0I8p9gAAAABceyJvcmlnaW4iOiJodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvOjQ0MyIsImZlYXR1cmUiOiJXZWJYUkRldmljZSIsImV4cGlyeSI6MTUzNTQxNDQwMH0=">
-
-    <title>Viewport Scaling</title>
-
-    <link href='css/common.css' rel='stylesheet'></link>
-
-    <!--The polyfill is not needed for browser that have native API support,
-        but is linked by these samples for wider compatibility.-->
-    <!--script src='https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.js'></script-->
-    <script src='js/xrray-polyfill.js' type='module'></script>
-    <script src='js/webxr-polyfill.js'></script>
-
-    <script src='js/webxr-button.js'></script>
-  </head>
-  <body>
-    <header>
-      <details open>
-        <summary>Viewport Scaling</summary>
-        <p>
-          This sample demonstrates scaling the viewports used for a WebXR layer
-          at runtime to dynamically adjust the fillrate required and improve
-          performance or quality as needed.
-
-          Viewport scaling should be used to make a performance/quality tradeoff
-          in response to realtime performance monitoring.
-          <a class="back" href="./">Back</a>
-        </p>
-      </details>
-    </header>
-    <script type="module">
-      import {Scene} from './js/cottontail/src/scenes/scene.js';
-      import {Renderer, createWebGLContext} from './js/cottontail/src/core/renderer.js';
-      import {Gltf2Node} from './js/cottontail/src/nodes/gltf2.js';
-      import {QueryArgs} from './js/cottontail/src/util/query-args.js';
-      import {FallbackHelper} from './js/cottontail/src/util/fallback-helper.js';
-      import {CubeSeaNode} from './js/cottontail/src/nodes/cube-sea.js';
-
-      // If requested, initialize the WebXR polyfill
-      if (QueryArgs.getBool('allowPolyfill', false)) {
-        var polyfill = new WebXRPolyfill();
-      }
-
-      // XR globals.
-      let xrButton = null;
-      let xrImmersiveRefSpace = null;
-      let xrNonImmersiveRefSpace = null;
-
-      // WebGL scene globals.
-      let gl = null;
-      let renderer = null;
-      let scene = new Scene();
-      scene.addNode(new CubeSeaNode());
-
-      let resolutionMultiplier = 1.0;
-      let lastAdjustment = Date.now()-1000;
-
-      // Called in the render loop.
-      function adjustViewportScale(session) {
-        // Update the viewport scale every tenth of a second.
-        let t = Date.now();
-        if (t - lastAdjustment < 100)
-          return;
-        lastAdjustment = t;
-
-        // Modify the scale over time on a sin wave. In the real world this
-        // would probably be based on scene complexity.
-        // Oscillates between 1.0 to 0.5.
-        resolutionMultiplier = (Math.sin(t / 1000) * 0.25) + 0.75;
-
-        // This is the only new XRSession call in this sample. It sets a
-        // requested scale to be applied to the viewports reported for each
-        // XRView. The UA is allowed to ignore the request or adjust it as
-        // needed. If the scaling request is honored it will take effect on the
-        // *next* frame, not the current one.
-        session.renderState.baseLayer.requestViewportScaling(resolutionMultiplier);
-      }
-
-      function initXR() {
-        xrButton = new XRDeviceButton({
-          onRequestSession: onRequestSession,
-          onEndSession: onEndSession,
-          supportedSessionTypes: ['immersive-vr']
-        });
-        document.querySelector('header').appendChild(xrButton.domElement);
-
-        if (navigator.xr) {
-          navigator.xr.requestSession('inline').then(onSessionStarted);
-        } else {
-          initFallback();
-        }
-      }
-
-      function initFallback() {
-        initGL();
-        document.body.appendChild(gl.canvas);
-        let fallbackHelper = new FallbackHelper(scene, gl);
-      }
-
-      function initGL() {
-        if (gl)
-          return;
-
-        gl = createWebGLContext({
-          xrCompatible: true
-        });
-
-        gl.clearColor(0.1, 0.2, 0.3, 1.0);
-
-        renderer = new Renderer(gl);
-
-        scene.setRenderer(renderer);
-        scene.inputRenderer.setControllerMesh(new Gltf2Node({url: '../media/gltf/controller/controller.gltf'}));
-      }
-
-      function onRequestSession() {
-        navigator.xr.requestSession('immersive-vr').then((session) => {
-          session.mode = 'immersive-vr';
-          xrButton.setSession(session);
-          onSessionStarted(session);
-        });
-      }
-
-      function onSessionStarted(session) {
-        if (!session.mode)
-          session.mode = 'inline';
-        session.addEventListener('end', onSessionEnded);
-
-        initGL();
-
-        let outputCanvas = document.createElement('canvas');
-        document.body.appendChild(outputCanvas);
-
-        session.updateRenderState({
-            baseLayer: new XRWebGLLayer(session, gl),
-            outputContext: outputCanvas.getContext('xrpresent')
-        });
-
-        session.requestReferenceSpace({ type: 'stationary', subtype: 'eye-level' }).then((refSpace) => {
-          return refSpace;
-        }, (e) => {
-          if (!session.mode.startsWith('immersive')) {
-            // If we're in inline mode, our underlying platform may not support
-            // the stationary reference space, but an identity space is guaranteed.
-            return session.requestReferenceSpace({ type: 'identity' });
-          } else {
-            throw e;
-          }
-        }).then((refSpace) => {
-          if (session.mode.startsWith('immersive')) {
-            xrImmersiveRefSpace = refSpace;
-          } else {
-            xrNonImmersiveRefSpace = refSpace;
-          }
-          session.requestAnimationFrame(onXRFrame);
-        });
-      }
-
-      function onEndSession(session) {
-        session.end();
-      }
-
-      function onSessionEnded(event) {
-        if (event.session.mode.startsWith('immersive')) {
-          xrButton.setSession(null);
-        }
-
-        if (event.session.renderState.outputContext) {
-          document.body.removeChild(event.session.renderState.outputContext.canvas);
-        }
-      }
-
-      function onXRFrame(t, frame) {
-        let session = frame.session;
-        let refSpace = session.mode.startsWith('immersive') ?
-                         xrImmersiveRefSpace :
-                         xrNonImmersiveRefSpace;
-        let pose = frame.getViewerPose(refSpace);
-
-        scene.startFrame();
-
-        // Adjust the viewports if needed.
-        adjustViewportScale(session);
-
-        session.requestAnimationFrame(onXRFrame);
-
-        scene.updateInputSources(frame, refSpace);
-
-        scene.drawXRFrame(frame, pose);
-
-        scene.endFrame();
-      }
-
-      // Start the XR application.
-      initXR();
-    </script>
-  </body>
-</html>
diff --git a/tools/android/forwarder2/daemon.cc b/tools/android/forwarder2/daemon.cc
index 1ec390d..fb5b80b 100644
--- a/tools/android/forwarder2/daemon.cc
+++ b/tools/android/forwarder2/daemon.cc
@@ -41,9 +41,9 @@
 
 void InitLoggingForDaemon(const std::string& log_file) {
   logging::LoggingSettings settings;
-  settings.logging_dest =
-      log_file.empty() ?
-      logging::LOG_TO_SYSTEM_DEBUG_LOG : logging::LOG_TO_FILE;
+  settings.logging_dest = log_file.empty() ? logging::LOG_TO_SYSTEM_DEBUG_LOG |
+                                                 logging::LOG_TO_STDERR
+                                           : logging::LOG_TO_FILE;
   settings.log_file = log_file.c_str();
   settings.lock_log = logging::DONT_LOCK_LOG_FILE;
   CHECK(logging::InitLogging(settings));
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 4093f15..f6ce8aae 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -387,6 +387,7 @@
       'GPU FYI Win x64 Builder': 'gpu_fyi_tests_release_trybot',
       'GPU FYI Win x64 Builder (dbg)': 'gpu_fyi_tests_debug_trybot',
       'GPU FYI Win x64 dEQP Builder': 'deqp_release_trybot',
+      'GPU FYI XR Win Builder': 'gpu_fyi_tests_release_trybot_x86',
       'Linux FYI GPU TSAN Release': 'gpu_fyi_tests_release_trybot_tsan',
       'Mac FYI GPU ASAN Release': 'gpu_fyi_tests_release_trybot_asan',
       'Optional Android Release (Nexus 5X)': 'gpu_tests_android_release_trybot_arm64',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index e8e4e67..b07ac13 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -29323,6 +29323,9 @@
 <enum name="IMESwitchType">
   <int value="0" label="By tray menu">IME switches by tray menu</int>
   <int value="1" label="By accelerator">IME switches by accelerator</int>
+  <int value="2" label="By mode change key">
+    IME switches by mode change key
+  </int>
 </enum>
 
 <enum name="IMEVKLayout">
@@ -34281,6 +34284,7 @@
   <int value="192167036" label="LogJsConsoleMessages:disabled"/>
   <int value="194573877" label="MacViewsNativeDialogs:disabled"/>
   <int value="194895489" label="passive-listeners-default"/>
+  <int value="195335115" label="AudioWorkletRealtimeThread:disabled"/>
   <int value="195570937" label="EnableHomeLauncher:disabled"/>
   <int value="200347243" label="WebVRExperimentalRendering:disabled"/>
   <int value="201343576" label="enable-password-change-support:enabled"/>
@@ -35189,6 +35193,7 @@
   <int value="1593917165" label="SimplifiedNTP:disabled"/>
   <int value="1594247626" label="ContentSuggestionsSettings:enabled"/>
   <int value="1594664550" label="NTPModernLayout:enabled"/>
+  <int value="1595208893" label="AudioWorkletRealtimeThread:enabled"/>
   <int value="1597880096" label="FocusMode:disabled"/>
   <int value="1600850069" label="MobileIdentityConsistency:disabled"/>
   <int value="1600926040" label="TranslateCompactUI:enabled"/>
@@ -38422,6 +38427,16 @@
   <int value="3" label="After first pageload finished"/>
 </enum>
 
+<enum name="ModeChangeKeyAction">
+  <summary>Result of pressing the mode change key</summary>
+  <int value="0" label="Show indicator">
+    Showed the indicator for the current input method.
+  </int>
+  <int value="1" label="Switch to next IME">
+    Switched to the next input method.
+  </int>
+</enum>
+
 <enum name="ModuleBlacklistCacheReadResult">
   <int value="0" label="Success"/>
   <int value="1" label="Failed to open the file"/>
@@ -43490,6 +43505,9 @@
 </enum>
 
 <enum name="PageLoadMetricsAMPViewType">
+  <obsolete>
+    Deprecated 5/2019
+  </obsolete>
   <int value="0" label="None"/>
   <int value="1" label="AMP Cache"/>
   <int value="2" label="Google Search AMP Viewer"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 4af17de..f0e659b 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -47065,6 +47065,12 @@
   </summary>
 </histogram>
 
+<histogram name="InputMethod.ModeChangeKeyAction" enum="ModeChangeKeyAction"
+    expires_after="2019-12-31">
+  <owner>essential-inputs-team@google.com</owner>
+  <summary>The result of the user pressing the mode change key.</summary>
+</histogram>
+
 <histogram name="InputMethod.Mojo.Extension.ActivateIMELatency" units="ms"
     expires_after="2019-06-30">
   <owner>googleo@chromium.org</owner>
@@ -85676,6 +85682,9 @@
 
 <histogram name="PageLoad.Clients.AMP.SameDocumentView"
     enum="PageLoadMetricsAMPViewType" expires_after="M77">
+  <obsolete>
+    Deprecated 5/2019
+  </obsolete>
   <owner>bmcquade@chromium.org</owner>
   <summary>Count of same document page views for AMP pages.</summary>
 </histogram>
@@ -102291,6 +102300,30 @@
   </summary>
 </histogram>
 
+<histogram name="Renderer4.MomentumScrollJankPercentage" units="%">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The percentage of input events which are janks (not processed in the
+    expected frame) during each momentum scroll gesture. Computed by tracking
+    the number of extra coalesced momentum scroll events during a gesture. Extra
+    coalesced event indicates that the events were not handled in the target
+    frame. Logged once after a scroll with momentum events completes.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.MomentumScrollOrderingJankPercentage" units="%"
+    expires_after="2019-07-30">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The percentage of input events which are janks (not processed in the
+    expected frame) during each momentum scroll gesture due to unstable ordering
+    of begin frame with regards to input delivery. Computed by tracking the
+    number of times we coalesce an extra input event close to the point at which
+    we process it. Added to track the impact of https://crbug.com/952930. Logged
+    once after a scroll with momentum events completes.
+  </summary>
+</histogram>
+
 <histogram name="Renderer4.pixelCountCulled_Draw" units="NormalizedPixels">
   <owner>wiltzius@chromium.org</owner>
   <summary>
@@ -153705,6 +153738,9 @@
 
 <histogram_suffixes name="PageLoadMetricsAfterRedirectToNonAmpPage"
     separator=".">
+  <obsolete>
+    Deprecated 5/2019
+  </obsolete>
   <suffix name="RedirectToNonAmpPage"
       label="Limited to redirects to non-AMP pages."/>
   <affected-histogram
@@ -153745,6 +153781,9 @@
 
 <histogram_suffixes name="PageLoadMetricsClientsAmp" separator="."
     ordering="prefix">
+  <obsolete>
+    Deprecated 5/2019
+  </obsolete>
   <suffix name="Clients.AMP"
       label="AMP page load. Same page navigations are not tracked."/>
   <suffix name="Clients.AMP.AmpCache"
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc
index 73dbb03b..4160939 100644
--- a/ui/accessibility/ax_event_generator.cc
+++ b/ui/accessibility/ax_event_generator.cc
@@ -90,6 +90,7 @@
 
 void AXEventGenerator::ClearEvents() {
   tree_events_.clear();
+  event_from_ = ax::mojom::EventFrom::kNone;
 }
 
 void AXEventGenerator::AddEvent(ui::AXNode* node,
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h
index f34480d..1f80d95e 100644
--- a/ui/accessibility/ax_event_generator.h
+++ b/ui/accessibility/ax_event_generator.h
@@ -158,6 +158,8 @@
     event_from_ = event_from;
   }
 
+  ax::mojom::EventFrom event_from() const { return event_from_; }
+
  protected:
   // AXTreeObserver overrides.
   void OnNodeDataWillChange(AXTree* tree,
diff --git a/ui/accessibility/ax_node.cc b/ui/accessibility/ax_node.cc
index b8f23b3..db33d5b 100644
--- a/ui/accessibility/ax_node.cc
+++ b/ui/accessibility/ax_node.cc
@@ -23,22 +23,23 @@
                int32_t index_in_parent)
     : tree_(tree),
       index_in_parent_(index_in_parent),
-      unignored_child_count_(0),
       parent_(parent),
       language_info_(nullptr) {
   data_.id = id;
-  // If this node is the root, use the given index_in_parent to provide
-  // consistency.
-  if (!parent)
-    unignored_index_in_parent_ = index_in_parent_;
-  else
-    unignored_index_in_parent_ = -1;
 }
 
 AXNode::~AXNode() = default;
 
 int AXNode::GetUnignoredChildCount() const {
-  return unignored_child_count_;
+  int count = 0;
+  for (int i = 0; i < child_count(); i++) {
+    AXNode* child = children_[i];
+    if (child->data().HasState(ax::mojom::State::kIgnored))
+      count += child->GetUnignoredChildCount();
+    else
+      count++;
+  }
+  return count;
 }
 
 AXNodeData&& AXNode::TakeData() {
@@ -74,7 +75,15 @@
 }
 
 int AXNode::GetUnignoredIndexInParent() const {
-  return unignored_index_in_parent_;
+  AXNode* parent = GetUnignoredParent();
+  if (parent) {
+    for (int i = 0; i < parent->GetUnignoredChildCount(); ++i) {
+      if (parent->GetUnignoredChildAtIndex(i) == this)
+        return i;
+    }
+  }
+
+  return 0;
 }
 
 bool AXNode::IsText() const {
@@ -108,11 +117,6 @@
   index_in_parent_ = index_in_parent;
 }
 
-void AXNode::UpdateUnignoredCachedValues() {
-  if (!data().HasState(ax::mojom::State::kIgnored))
-    UpdateUnignoredCachedValuesRecursive(0);
-}
-
 void AXNode::SwapChildren(std::vector<AXNode*>& children) {
   children.swap(children_);
 }
@@ -683,21 +687,6 @@
   }
 }
 
-int AXNode::UpdateUnignoredCachedValuesRecursive(int startIndex) {
-  int count = 0;
-  for (int i = 0; i < child_count(); i++) {
-    AXNode* child = children_[i];
-    if (child->data().HasState(ax::mojom::State::kIgnored)) {
-      child->unignored_index_in_parent_ = -1;
-      count += child->UpdateUnignoredCachedValuesRecursive(startIndex + count);
-    } else {
-      child->unignored_index_in_parent_ = startIndex + count++;
-    }
-  }
-  unignored_child_count_ = count;
-  return count;
-}
-
 // Finds ordered set that immediately contains node.
 // Is not required for set's role to match node's role.
 AXNode* AXNode::GetOrderedSet() const {
diff --git a/ui/accessibility/ax_node.h b/ui/accessibility/ax_node.h
index 2fee8f0d..a9e2cb69 100644
--- a/ui/accessibility/ax_node.h
+++ b/ui/accessibility/ax_node.h
@@ -94,9 +94,6 @@
   // Set the index in parent, for example if siblings were inserted or deleted.
   void SetIndexInParent(int index_in_parent);
 
-  // Update the unignored index in parent for unignored children.
-  void UpdateUnignoredCachedValues();
-
   // Swap the internal children vector with |children|. This instance
   // now owns all of the passed children.
   void SwapChildren(std::vector<AXNode*>& children);
@@ -311,15 +308,11 @@
   void IdVectorToNodeVector(std::vector<int32_t>& ids,
                             std::vector<AXNode*>* nodes) const;
 
-  int UpdateUnignoredCachedValuesRecursive(int startIndex);
-
   // Finds and returns a pointer to ordered set containing node.
   AXNode* GetOrderedSet() const;
 
   OwnerTree* tree_;  // Owns this.
   int index_in_parent_;
-  int unignored_index_in_parent_;
-  int unignored_child_count_;
   AXNode* parent_;
   std::vector<AXNode*> children_;
   AXNodeData data_;
diff --git a/ui/accessibility/ax_node_position_unittest.cc b/ui/accessibility/ax_node_position_unittest.cc
index 39a1f7c..368a5f8 100644
--- a/ui/accessibility/ax_node_position_unittest.cc
+++ b/ui/accessibility/ax_node_position_unittest.cc
@@ -1284,6 +1284,68 @@
   EXPECT_EQ(6, test_position->text_offset());
 }
 
+TEST_F(AXPositionTest, CreatePositionAtFormatBoundaryWithTextPosition) {
+  // This test updates the tree structure to test a specific edge case -
+  // CreatePositionAtFormatBoundary when text lies at the beginning and end
+  // of the AX tree.
+  AXNodePosition::SetTreeForTesting(nullptr);
+
+  ui::AXNodeData root_data;
+  root_data.id = 0;
+  root_data.role = ax::mojom::Role::kRootWebArea;
+
+  ui::AXNodeData text_data;
+  text_data.id = 1;
+  text_data.role = ax::mojom::Role::kStaticText;
+  text_data.SetName("some text");
+
+  ui::AXNodeData more_text_data;
+  more_text_data.id = 2;
+  more_text_data.role = ax::mojom::Role::kStaticText;
+  more_text_data.SetName("more text");
+
+  root_data.child_ids = {1, 2};
+
+  ui::AXTreeUpdate update;
+  ui::AXTreeData tree_data;
+  tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
+  update.tree_data = tree_data;
+  update.has_tree_data = true;
+  update.root_id = root_data.id;
+  update.nodes = {root_data, text_data, more_text_data};
+
+  std::unique_ptr<AXTree> new_tree;
+  new_tree.reset(new AXTree(update));
+  AXNodePosition::SetTreeForTesting(new_tree.get());
+
+  // Test CreatePreviousFormatStartPosition at the start of the document.
+  TestPositionType text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, text_data.id, 8 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  TestPositionType test_position =
+      text_position->CreatePreviousFormatStartPosition(
+          AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(text_data.id, test_position->anchor_id());
+  EXPECT_EQ(0, test_position->text_offset());
+
+  // Test CreateNextFormatEndPosition at the end of the document.
+  text_position = AXNodePosition::CreateTextPosition(
+      tree_.data().tree_id, more_text_data.id, 0 /* text_offset */,
+      ax::mojom::TextAffinity::kDownstream);
+  ASSERT_NE(nullptr, text_position);
+  test_position = text_position->CreateNextFormatEndPosition(
+      AXBoundaryBehavior::CrossBoundary);
+  EXPECT_NE(nullptr, test_position);
+  EXPECT_TRUE(test_position->IsTextPosition());
+  EXPECT_EQ(more_text_data.id, test_position->anchor_id());
+  EXPECT_EQ(9, test_position->text_offset());
+
+  AXNodePosition::SetTreeForTesting(&tree_);
+}
+
 TEST_F(AXPositionTest, CreatePositionAtStartOfDocumentWithNullPosition) {
   TestPositionType null_position = AXNodePosition::CreateNullPosition();
   ASSERT_NE(nullptr, null_position);
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index 876fe54..0e03689d 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -220,6 +220,8 @@
     return GetAnchor() && kind_ == AXPositionKind::TEXT_POSITION;
   }
 
+  // TODO(nektar): Update logic of AtStartOfAnchor() for text_offset_ == 0 and
+  // fix related bug.
   bool AtStartOfAnchor() const {
     if (!GetAnchor())
       return false;
@@ -228,7 +230,9 @@
       case AXPositionKind::NULL_POSITION:
         return false;
       case AXPositionKind::TREE_POSITION:
-        if (AnchorChildCount())
+        if (text_offset_ > 0)
+          return false;
+        if (AnchorChildCount() || text_offset_ == 0)
           return child_index_ == 0;
         return child_index_ == BEFORE_TEXT;
       case AXPositionKind::TEXT_POSITION:
@@ -564,9 +568,9 @@
       bool forwards) const {
     // Disallow AXBoundaryBehavior::StopAtAnchorBoundary, as it would be no
     // different than moving by anchor
-    DCHECK(boundary_behavior != AXBoundaryBehavior::StopAtAnchorBoundary);
+    DCHECK_NE(boundary_behavior, AXBoundaryBehavior::StopAtAnchorBoundary);
 
-    if (kind_ == AXPositionKind::NULL_POSITION)
+    if (IsNullPosition())
       return CreateNullPosition();
 
     bool was_tree_position = IsTreePosition();
@@ -577,16 +581,17 @@
 
     // Start or end of document
     if (current_endpoint->IsNullPosition()) {
-      if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary) {
-        current_endpoint =
-            forwards ? initial_endpoint->CreatePositionAtEndOfAnchor()
-                     : initial_endpoint->CreatePositionAtStartOfAnchor();
-        return was_tree_position ? current_endpoint->AsTreePosition()
-                                 : std::move(current_endpoint);
+      if (boundary_behavior == AXBoundaryBehavior::CrossBoundary &&
+          ((forwards && AtEndOfAnchor()) || (!forwards && AtStartOfAnchor()))) {
+        // Expected behavior is to return a null position for cross-boundary
+        // moves that hit the beginning or end of the document
+        return std::move(current_endpoint);
       }
-      // Expected behavior is to return a null position for cross-boundary
-      // moves that hit the beginning or end of the document
-      return std::move(current_endpoint);
+      current_endpoint =
+          forwards ? initial_endpoint->CreatePositionAtEndOfAnchor()
+                   : initial_endpoint->CreatePositionAtStartOfAnchor();
+      return was_tree_position ? current_endpoint->AsTreePosition()
+                               : std::move(current_endpoint);
     }
 
     AXNodeTextStyles initial_styles =
diff --git a/ui/accessibility/ax_table_info.cc b/ui/accessibility/ax_table_info.cc
index 272caaa..7466c2f 100644
--- a/ui/accessibility/ax_table_info.cc
+++ b/ui/accessibility/ax_table_info.cc
@@ -376,13 +376,8 @@
   data.id = id;
   data.role = ax::mojom::Role::kColumn;
   node->SetData(data);
-  for (AXTreeObserver& observer : tree_->observers()) {
+  for (AXTreeObserver& observer : tree_->observers())
     observer.OnNodeCreated(tree_, node);
-    observer.OnAtomicUpdateFinished(
-        tree_, false,
-        {AXTreeObserver::Change(node,
-                                AXTreeObserver::ChangeType::NODE_CREATED)});
-  }
   return node;
 }
 
@@ -394,14 +389,8 @@
   data.id = id;
   data.role = ax::mojom::Role::kTableHeaderContainer;
   node->SetData(data);
-
-  for (AXTreeObserver& observer : tree_->observers()) {
+  for (AXTreeObserver& observer : tree_->observers())
     observer.OnNodeCreated(tree_, node);
-    observer.OnAtomicUpdateFinished(
-        tree_, false,
-        {AXTreeObserver::Change(node,
-                                AXTreeObserver::ChangeType::NODE_CREATED)});
-  }
 
   return node;
 }
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index 97acf858..36e661e 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -132,10 +132,6 @@
   // decisions about when to notify observers of removals or reparenting.
   std::set<int> changed_node_ids;
 
-  // keeps track of parents whose unignored children have changed. Used for
-  // caching unignored relationships.
-  std::unordered_set<int> changed_unignored_parent_ids;
-
   // Keeps track of new nodes created during this update.
   std::set<const AXNode*> new_nodes;
 
@@ -502,12 +498,6 @@
     changes.push_back(AXTreeObserver::Change(node, change));
   }
 
-  for (int parent_id : update_state.changed_unignored_parent_ids) {
-    AXNode* parent = GetFromId(parent_id);
-    if (parent)
-      parent->UpdateUnignoredCachedValues();
-  }
-
   // Tree is no longer updating.
   SetTreeUpdateInProgressState(false);
 
@@ -576,10 +566,6 @@
     else
       observer.OnNodeReparented(this, new_node);
   }
-  AXNode* unignored_parent = new_node->GetUnignoredParent();
-  if (unignored_parent) {
-    update_state->changed_unignored_parent_ids.insert(unignored_parent->id());
-  }
   return new_node;
 }
 
@@ -603,18 +589,10 @@
     if (!update_state->IsNewNode(node) ||
         update_state->IsReparentedNode(node)) {
       auto it = update_state->reparented_node_id_to_data.find(node->id());
-      const AXNodeData& old_data =
-          it != update_state->reparented_node_id_to_data.end() ? it->second
-                                                               : node->data();
-      CallNodeChangeCallbacks(node, old_data, src);
-      if (old_data.HasState(ax::mojom::State::kIgnored) !=
-          src.HasState(ax::mojom::State::kIgnored)) {
-        AXNode* unignored_parent = node->GetUnignoredParent();
-        if (unignored_parent) {
-          update_state->changed_unignored_parent_ids.insert(
-              unignored_parent->id());
-        }
-      }
+      if (it != update_state->reparented_node_id_to_data.end())
+        CallNodeChangeCallbacks(node, it->second, src);
+      else
+        CallNodeChangeCallbacks(node, node->data(), src);
     }
     UpdateReverseRelations(node, src);
     node->SetData(src);
@@ -873,10 +851,6 @@
   for (int i = 0; i < node->child_count(); ++i)
     DestroyNodeAndSubtree(node->ChildAtIndex(i), update_state);
   if (update_state) {
-    AXNode* unignored_parent = node->GetUnignoredParent();
-    if (unignored_parent) {
-      update_state->changed_unignored_parent_ids.insert(unignored_parent->id());
-    }
     update_state->pending_nodes.erase(node);
     update_state->removed_node_ids.insert(node->id());
   }
@@ -997,8 +971,8 @@
   bool node_is_radio_button =
       (original_node.data().role == ax::mojom::Role::kRadioButton);
 
-  for (int i = 0; i < local_parent->GetUnignoredChildCount(); ++i) {
-    const AXNode* child = local_parent->GetUnignoredChildAtIndex(i);
+  for (int i = 0; i < local_parent->child_count(); ++i) {
+    const AXNode* child = local_parent->ChildAtIndex(i);
 
     // Invisible children should not be counted.
     // However, in the collapsed container case (e.g. a combobox), items can
diff --git a/ui/accessibility/ax_tree_observer.h b/ui/accessibility/ax_tree_observer.h
index 7c38cf99..eec7d75 100644
--- a/ui/accessibility/ax_tree_observer.h
+++ b/ui/accessibility/ax_tree_observer.h
@@ -87,8 +87,8 @@
 
   // Called when tree data changes.
   virtual void OnTreeDataChanged(AXTree* tree,
-                                 const ui::AXTreeData& old_data,
-                                 const ui::AXTreeData& new_data) {}
+                                 const AXTreeData& old_data,
+                                 const AXTreeData& new_data) {}
 
   // Called just before a node is deleted. Its id and data will be valid,
   // but its links to parents and children are invalid. This is called
diff --git a/ui/accessibility/ax_tree_unittest.cc b/ui/accessibility/ax_tree_unittest.cc
index 5f87853..3a14156 100644
--- a/ui/accessibility/ax_tree_unittest.cc
+++ b/ui/accessibility/ax_tree_unittest.cc
@@ -1403,124 +1403,6 @@
   EXPECT_EQ(1, root->GetUnignoredChildAtIndex(0)->GetUnignoredParent()->id());
 }
 
-TEST(AXTreeTest, CachedUnignoredValues) {
-  AXTreeUpdate initial_state;
-  initial_state.root_id = 1;
-  initial_state.nodes.resize(5);
-  initial_state.nodes[0].id = 1;
-  initial_state.nodes[0].child_ids = {2, 3};
-  initial_state.nodes[1].id = 2;
-  initial_state.nodes[1].AddState(ax::mojom::State::kIgnored);
-  initial_state.nodes[1].child_ids = {4, 5};
-  initial_state.nodes[2].id = 3;
-  initial_state.nodes[3].id = 4;
-  initial_state.nodes[4].id = 5;
-
-  AXTree tree(initial_state);
-  AXNode* root = tree.root();
-  ASSERT_EQ(2, root->child_count());
-  ASSERT_EQ(2, root->ChildAtIndex(0)->id());
-  ASSERT_EQ(3, root->ChildAtIndex(1)->id());
-
-  EXPECT_EQ(3, root->GetUnignoredChildCount());
-  EXPECT_EQ(4, root->GetUnignoredChildAtIndex(0)->id());
-  EXPECT_EQ(5, root->GetUnignoredChildAtIndex(1)->id());
-  EXPECT_EQ(3, root->GetUnignoredChildAtIndex(2)->id());
-  EXPECT_EQ(0, root->GetUnignoredChildAtIndex(0)->GetUnignoredIndexInParent());
-  EXPECT_EQ(1, root->GetUnignoredChildAtIndex(1)->GetUnignoredIndexInParent());
-  EXPECT_EQ(2, root->GetUnignoredChildAtIndex(2)->GetUnignoredIndexInParent());
-
-  EXPECT_EQ(1, root->GetUnignoredChildAtIndex(0)->GetUnignoredParent()->id());
-
-  EXPECT_EQ(-1, tree.GetFromId(2)->GetUnignoredIndexInParent());
-
-  // Ensure when a node goes from ignored to unignored, its children have their
-  // unignored_index_in_parent updated.
-  AXTreeUpdate update = initial_state;
-  update.nodes[1].RemoveState(ax::mojom::State::kIgnored);
-
-  EXPECT_TRUE(tree.Unserialize(update));
-
-  root = tree.root();
-  EXPECT_EQ(2, root->GetUnignoredChildCount());
-  EXPECT_EQ(2, root->GetUnignoredChildAtIndex(0)->id());
-  EXPECT_EQ(0, tree.GetFromId(4)->GetUnignoredIndexInParent());
-  EXPECT_EQ(1, tree.GetFromId(5)->GetUnignoredIndexInParent());
-
-  // Ensure when a node goes from unignored to unignored, siblings are correctly
-  // updated.
-  AXTreeUpdate update2 = update;
-  update2.nodes[3].AddState(ax::mojom::State::kIgnored);
-
-  EXPECT_TRUE(tree.Unserialize(update2));
-
-  EXPECT_EQ(-1, tree.GetFromId(4)->GetUnignoredIndexInParent());
-  EXPECT_EQ(0, tree.GetFromId(5)->GetUnignoredIndexInParent());
-
-  // Ensure siblings of a deleted node are updated.
-  AXTreeUpdate update3 = update2;
-  update3.nodes.resize(1);
-  update3.nodes[0].id = 1;
-  update3.nodes[0].child_ids = {3};
-
-  EXPECT_TRUE(tree.Unserialize(update3));
-
-  EXPECT_EQ(0, tree.GetFromId(3)->GetUnignoredIndexInParent());
-
-  // Ensure new nodes are correctly updated.
-  AXTreeUpdate update4 = update3;
-  update4.nodes.resize(3);
-  update4.nodes[0].id = 1;
-  update4.nodes[0].child_ids = {3, 6};
-  update4.nodes[1].id = 6;
-  update4.nodes[1].child_ids = {7};
-  update4.nodes[2].id = 7;
-
-  EXPECT_TRUE(tree.Unserialize(update4));
-
-  EXPECT_EQ(0, tree.GetFromId(3)->GetUnignoredIndexInParent());
-  EXPECT_EQ(1, tree.GetFromId(6)->GetUnignoredIndexInParent());
-  EXPECT_EQ(0, tree.GetFromId(7)->GetUnignoredIndexInParent());
-
-  // Ensure reparented nodes are correctly updated.
-  AXTreeUpdate update5 = update4;
-  update5.nodes.resize(2);
-  update5.node_id_to_clear = 6;
-  update5.nodes[0].id = 1;
-  update5.nodes[0].child_ids = {3, 7};
-  update5.nodes[1].id = 7;
-  update5.nodes[1].child_ids = {};
-
-  EXPECT_TRUE(tree.Unserialize(update5));
-
-  EXPECT_EQ(2, tree.GetFromId(1)->GetUnignoredChildCount());
-  EXPECT_EQ(0, tree.GetFromId(3)->GetUnignoredIndexInParent());
-  EXPECT_EQ(1, tree.GetFromId(7)->GetUnignoredIndexInParent());
-
-  AXTreeUpdate update6;
-  update6.nodes.resize(1);
-  update6.nodes[0].id = 7;
-  update6.nodes[0].AddState(ax::mojom::State::kIgnored);
-
-  EXPECT_TRUE(tree.Unserialize(update6));
-
-  EXPECT_EQ(1, tree.GetFromId(1)->GetUnignoredChildCount());
-  EXPECT_EQ(0, tree.GetFromId(3)->GetUnignoredIndexInParent());
-  EXPECT_EQ(-1, tree.GetFromId(7)->GetUnignoredIndexInParent());
-
-  AXTreeUpdate update7 = update6;
-  update7.nodes.resize(2);
-  update7.nodes[0].id = 7;
-  update7.nodes[0].child_ids = {8};
-  update7.nodes[1].id = 8;
-
-  EXPECT_TRUE(tree.Unserialize(update7));
-
-  EXPECT_EQ(2, tree.GetFromId(1)->GetUnignoredChildCount());
-  EXPECT_EQ(0, tree.GetFromId(3)->GetUnignoredIndexInParent());
-  EXPECT_EQ(-1, tree.GetFromId(7)->GetUnignoredIndexInParent());
-}
-
 TEST(AXTreeTest, TestRecursionUnignoredChildCount) {
   AXTreeUpdate tree_update;
   tree_update.root_id = 1;
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
index a63e48c..f4264d9 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -447,10 +447,23 @@
     paragraph3_text_data.SetName(text_content);
     paragraph3_data.child_ids = {15};
 
+    ui::AXNodeData paragraph4_data;
+    paragraph4_data.id = 16;
+    paragraph4_data.role = ax::mojom::Role::kParagraph;
+    paragraph4_data.AddFloatAttribute(ax::mojom::FloatAttribute::kFontSize,
+                                      2.0f);
+
+    ui::AXNodeData paragraph4_text_data;
+    paragraph4_text_data.id = 17;
+    paragraph4_text_data.role = ax::mojom::Role::kStaticText;
+    text_content = "Paragraph 4";
+    paragraph4_text_data.SetName(text_content);
+    paragraph4_data.child_ids = {17};
+
     ui::AXNodeData root_data;
     root_data.id = 1;
     root_data.role = ax::mojom::Role::kRootWebArea;
-    root_data.child_ids = {2, 4, 8, 10, 12, 14};
+    root_data.child_ids = {2, 4, 8, 10, 12, 14, 16};
 
     ui::AXTreeUpdate update;
     ui::AXTreeData tree_data;
@@ -473,6 +486,8 @@
     update.nodes.push_back(paragraph2_text_data);
     update.nodes.push_back(paragraph3_data);
     update.nodes.push_back(paragraph3_text_data);
+    update.nodes.push_back(paragraph4_data);
+    update.nodes.push_back(paragraph4_text_data);
 
     return update;
   }
@@ -880,7 +895,7 @@
   EXPECT_UIA_TEXTRANGE_EQ(
       text_range_provider,
       L"Text with formattingStandalone line with no formattingbold "
-      L"textParagraph 1Paragraph 2Paragraph 3");
+      L"textParagraph 1Paragraph 2Paragraph 3Paragraph 4");
 
   ASSERT_HRESULT_SUCCEEDED(
       text_range_provider->ExpandToEnclosingUnit(TextUnit_Format));
@@ -1187,7 +1202,7 @@
                   /*count*/ 0,
                   /*expected_text*/
                   L"Text with formattingStandalone line with no formattingbold "
-                  L"textParagraph 1Paragraph 2Paragraph 3",
+                  L"textParagraph 1Paragraph 2Paragraph 3Paragraph 4",
                   /*expected_count*/ 0);
 
   // Move forward.
@@ -1203,18 +1218,22 @@
                   /*count*/ 1,
                   /*expected_text*/ L"Paragraph 2Paragraph 3",
                   /*expected_count*/ 1);
+  EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
+                  /*count*/ 1,
+                  /*expected_text*/ L"Paragraph 4",
+                  /*expected_count*/ 1);
 
   // Trying to move past the last format should have no effect.
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
                   /*count*/ 1,
-                  /*expected_text*/ L"Paragraph 2Paragraph 3",
+                  /*expected_text*/ L"Paragraph 4",
                   /*expected_count*/ 0);
 
   // Move backward.
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
-                  /*count*/ -2,
+                  /*count*/ -3,
                   /*expected_text*/ L"bold text",
-                  /*expected_count*/ -2);
+                  /*expected_count*/ -3);
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
                   /*count*/ -1,
                   /*expected_text*/ L"Standalone line with no formatting",
@@ -1232,11 +1251,49 @@
                   L"Text with formatting",
                   /*expected_count*/ 0);
 
+  // Test degenerate range creation at the beginning of the document.
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
+      /*count*/ -1,
+      /*expected_text*/ L"",
+      /*expected_count*/ -1);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
+      /*count*/ 1,
+      /*expected_text*/ L"Text with formatting",
+      /*expected_count*/ 1);
+
+  // Test degenerate range creation at the end of the document.
+  EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
+                  /*count*/ 5,
+                  /*expected_text*/ L"Paragraph 4",
+                  /*expected_count*/ 5);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Format,
+      /*count*/ 1,
+      /*expected_text*/ L"",
+      /*expected_count*/ 1);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Format,
+      /*count*/ -1,
+      /*expected_text*/ L"Paragraph 4",
+      /*expected_count*/ -1);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Format,
+      /*count*/ 1,
+      /*expected_text*/ L"",
+      /*expected_count*/ 1);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Format,
+      /*count*/ -1,
+      /*expected_text*/ L"Paragraph 4",
+      /*expected_count*/ -1);
+
   // Degenerate range moves.
   EXPECT_UIA_MOVE(text_range_provider, TextUnit_Format,
-                  /*count*/ 1,
-                  /*expected_text*/ L"Standalone line with no formatting",
-                  /*expected_count*/ 1);
+                  /*count*/ -5,
+                  /*expected_text*/ L"Text with formatting",
+                  /*expected_count*/ -5);
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
       /*count*/ -1,
@@ -2013,14 +2070,14 @@
   EXPECT_UIA_TEXTRANGE_EQ(
       text_range_provider,
       L"Text with formattingStandalone line with no formattingbold "
-      L"textParagraph 1Paragraph 2Paragraph 3");
+      L"textParagraph 1Paragraph 2Paragraph 3Paragraph 4");
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
-      /*count*/ -1,
+      /*count*/ -2,
       /*expected_text*/
       L"Text with formattingStandalone line with no formattingbold "
       L"textParagraph 1",
-      /*expected_count*/ -1);
+      /*expected_count*/ -2);
 
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
@@ -2051,17 +2108,17 @@
 
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
-      /*count*/ 6,
+      /*count*/ 7,
       /*expected_text*/
       L"Text with formattingStandalone line with no formattingbold "
-      L"textParagraph 1Paragraph 2Paragraph 3",
-      /*expected_count*/ 5);
+      L"textParagraph 1Paragraph 2Paragraph 3Paragraph 4",
+      /*expected_count*/ 6);
 
   EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
       text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Format,
       /*count*/ -8,
       /*expected_text*/ L"",
-      /*expected_count*/ -5);
+      /*expected_count*/ -6);
 
   AXNodePosition::SetTreeForTesting(nullptr);
 }
diff --git a/ui/base/ime/win/tsf_text_store.cc b/ui/base/ime/win/tsf_text_store.cc
index ef5d651d..faf3fb3 100644
--- a/ui/base/ime/win/tsf_text_store.cc
+++ b/ui/base/ime/win/tsf_text_store.cc
@@ -311,7 +311,10 @@
           tmp_rect.set_width(0);
           result_rect = gfx::Rect(tmp_rect);
         } else {
-          return TS_E_NOLAYOUT;
+          // PPAPI flash does not support GetCompositionCharacterBounds. We need
+          // to call GetCaretBounds instead to get correct text bounds info.
+          // TODO(https://crbug.com/963706): Remove this hack.
+          result_rect = gfx::Rect(text_input_client_->GetCaretBounds());
         }
       } else if (text_input_client_->GetCompositionCharacterBounds(
                      start_pos - 1, &tmp_rect)) {
@@ -341,17 +344,20 @@
           // first character bounds instead of returning TS_E_NOLAYOUT.
         }
       } else {
-        return TS_E_NOLAYOUT;
+        // PPAPI flash does not support GetCompositionCharacterBounds. We need
+        // to call GetCaretBounds instead to get correct text bounds info.
+        // TODO(https://crbug.com/963706): Remove this hack.
+        if (start_pos == 0) {
+          result_rect = gfx::Rect(text_input_client_->GetCaretBounds());
+        } else {
+          return TS_E_NOLAYOUT;
+        }
       }
     } else {
-      // Hack for PPAPI flash. PPAPI flash does not support GetCaretBounds, so
-      // it's better to return previous caret rectangle instead.
-      // TODO(nona, kinaba): Remove this hack.
-      if (start_pos == 0) {
-        result_rect = gfx::Rect(text_input_client_->GetCaretBounds());
-      } else {
-        return TS_E_NOLAYOUT;
-      }
+      // Caret Bounds may be incorrect if focus is in flash control and
+      // |start_pos| is not equal to |end_pos|. In this case, it's better to
+      // return previous caret rectangle instead.
+      result_rect = gfx::Rect(text_input_client_->GetCaretBounds());
     }
   }
   *rect = display::win::ScreenWin::DIPToScreenRect(window_handle_, result_rect)
diff --git a/ui/base/ime/win/tsf_text_store_unittest.cc b/ui/base/ime/win/tsf_text_store_unittest.cc
index 9ca7ac2..26d00d86 100644
--- a/ui/base/ime/win/tsf_text_store_unittest.cc
+++ b/ui/base/ime/win/tsf_text_store_unittest.cc
@@ -1344,8 +1344,10 @@
     // GetCompositionCharacterBounds.
     SetInternalState(L"a", 0, 0, 1);
     layout_prepared_character_num_ = 0;
-    has_composition_text_ = false;
     GetTextExtTest(view_cookie, 0, 1, 1, 2, 4, 6);
+    SetInternalState(L"abc", 0, 0, 3);
+    GetTextExtNoLayoutTest(view_cookie, 2, 3);
+
     return S_OK;
   }
 
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index 04e83dd..c530325 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">የChrome መሣሪያ</translation>
 <translation id="1665611772925418501">ይህ ፋይል ሊቀየር አልቻለም።</translation>
 <translation id="1673103856845176271">ይህ ፋይል በደህንነት ምክንያቶች ሊደረስበት አልተቻለም።</translation>
-<translation id="1679806121152819234">PluginVm</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> ንጥሎችን በማመቅ ላይ...</translation>
 <translation id="174173592514158117">ሁሉንም የPlay አቃፊዎችን አሳይ</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ፋይል</translation>
 <translation id="457386861538956877">ተጨማሪ...</translation>
 <translation id="4582497162516204941">ከLinux (ቅድመ ይሁንታ ሙከራ) ጋር ጫን</translation>
-<translation id="4584780943629874245">ከ Plugin VM ጋር አጋራ</translation>
 <translation id="4631887759990505102">አርቲስት</translation>
 <translation id="4656293982926141856">ይህ ኮምፒውተር</translation>
 <translation id="4669606053856530811">እነዚህ ንጥሎች ለእነሱ ካልተጋሩ በስተቀር የ«<ph name="SOURCE_NAME" />» አባላት መዳረሻ ያጣሉ።</translation>
@@ -528,7 +526,6 @@
 <translation id="7339898014177206373">አዲሰ መስኮት</translation>
 <translation id="7348749398828259943">የአሜሪካ ዎርክማን አለምአቀፍ ቁልፍ ሰሌዳ</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> ንጥሎችን በመቅዳት ላይ...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> ከ Plugin VM ጋር የተጋሩ አቃፊዎች</translation>
 <translation id="7389722738210761877">የታይ ቁልፍ ሰሌዳ (TIS 820-2531)</translation>
 <translation id="7396038720194014279">የሂንዲ ቁልፍ ሰሌዳ (ፎነቲክ)</translation>
 <translation id="7417453074306512035">የግዕዝ ቁልፍ ሰሌዳ</translation>
@@ -591,7 +588,6 @@
 <translation id="7969525169268594403">ስሎቪኛ</translation>
 <translation id="7982283708762922719">ቁመት</translation>
 <translation id="7987485481246785146">የሶራኒ ኩርድኛ በአረብኛ ላይ የተመሠረተ ቁልፍ ሰሌዳ</translation>
-<translation id="7990715602172183602">1 አቃፊ ከ Plugin VM ጋር ተጋርቷል</translation>
 <translation id="799547531016638432">አቋራጭ ያስወግዱ</translation>
 <translation id="799923393800005025">ማየት ይችላሉ</translation>
 <translation id="8008366997883261463">ጃክ ራሰል ቴሪየር</translation>
@@ -632,7 +628,6 @@
 <translation id="8342318071240498787">ተመሳሳዩን ስም የያዘ ፋይል ወይም አቃፊ አስቀድሞ አለ።</translation>
 <translation id="8391950649760071442">በቋንቋ ፊደል መጻፍ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">ልኬቶች</translation>
-<translation id="8400874747056634633">የ Plugin VM ማጋራትን ያስተዳድሩ</translation>
 <translation id="8412586565681117057">ፈጣን የግቤት ስልት</translation>
 <translation id="8418113698656761985">የሮማኒያኛ ቁልፍ ሰሌዳ</translation>
 <translation id="8432745813735585631">የአሜሪካ ኮልማክ ቁልፍ ሰሌዳ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
index 0c26537..8248049 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">‏جهاز Chrome</translation>
 <translation id="1665611772925418501">تعذر تعديل على الملف.</translation>
 <translation id="1673103856845176271">تعذر الدخول إلى الملف لأسباب تتعلق بالأمان.</translation>
-<translation id="1679806121152819234">‏الجهاز الافتراضي (VM) للمكوّن الإضافي</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">جارٍ ضغط <ph name="NUMBER_OF_ITEMS" /> من العناصر...</translation>
 <translation id="174173592514158117">‏عرض جميع مجلدات Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">ملف <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">المزيد...</translation>
 <translation id="4582497162516204941">‏التثبيت باستخدام Linux (إصدار تجريبي)</translation>
-<translation id="4584780943629874245">‏المشاركة باستخدام الجهاز الافتراضي (VM) للمكوّن الإضافي</translation>
 <translation id="4631887759990505102">الفنان</translation>
 <translation id="4656293982926141856">هذا الكمبيوتر</translation>
 <translation id="4669606053856530811">سيفقد أعضاء '<ph name="SOURCE_NAME" />' إمكانية الوصول ما لم تتم مشاركة هذه العناصر معهم.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">نافذة جديدة</translation>
 <translation id="7348749398828259943">‏لوحة مفاتيح US Workman الدولية</translation>
 <translation id="7359359531237882347">جارٍ نسخ <ph name="NUMBER_OF_ITEMS" /> من العناصر...</translation>
-<translation id="7379734276381389090">‏<ph name="NUMBER_OF_ITEMS" /> من المجلدات التي تمت مشاركتها باستخدام الجهاز الافتراضي (VM) للمكوّن الإضافي</translation>
 <translation id="7389722738210761877">‏لوحة المفاتيح التايلاندية (TIS 820-2531)</translation>
 <translation id="7396038720194014279">لوحة المفاتيح الهندية (صوتية)</translation>
 <translation id="7417453074306512035">لوحة المفاتيح الإثيوبية</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">السلوفينية</translation>
 <translation id="7982283708762922719">الارتفاع</translation>
 <translation id="7987485481246785146">لوحة مفاتيح اللغة الكردية المدعمة بالعربية</translation>
-<translation id="7990715602172183602">‏تمت مشاركة مجلد واحد باستخدام الجهاز الافتراضي (VM) للمكوّن الإضافي</translation>
 <translation id="799547531016638432">إزالة الاختصار</translation>
 <translation id="799923393800005025">يمكن العرض</translation>
 <translation id="8008366997883261463">كلب</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">هناك ملف أو دليل موجود بهذا الاسم فعلاً.</translation>
 <translation id="8391950649760071442">‏التحويل الصوتي (إيماندي ← ఏమండీ)</translation>
 <translation id="8395901698320285466">الأبعاد</translation>
-<translation id="8400874747056634633">‏إدارة مشاركة الجهاز الافتراضي (VM) للمكوّن الإضافي</translation>
 <translation id="8412586565681117057">أسلوب الإدخال السريع</translation>
 <translation id="8418113698656761985">لوحة المفاتيح الرومانية</translation>
 <translation id="8432745813735585631">‏لوحة المفاتيح الأمريكية Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
index dbc7f4d..c1f36442 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Устройство с Chrome</translation>
 <translation id="1665611772925418501">Файлът не можа да бъде променен.</translation>
 <translation id="1673103856845176271">От съображения за сигурност не можа да бъде осъществен достъп до файла.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> елемента се компресират...</translation>
 <translation id="174173592514158117">Показване на всички папки от Google Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Файл от тип <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Още...</translation>
 <translation id="4582497162516204941">Инсталиране чрез Linux (бета)</translation>
-<translation id="4584780943629874245">Споделяне с Plugin VM</translation>
 <translation id="4631887759990505102">Изпълнител</translation>
 <translation id="4656293982926141856">Този компютър</translation>
 <translation id="4669606053856530811">Членовете на „<ph name="SOURCE_NAME" />“ ще загубят достъп, ако тези елементи не са споделени с тях.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Нов прозорец</translation>
 <translation id="7348749398828259943">Американска (Уъркман) международна клавиатура</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> елемента се копират...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> папки са споделени с Plugin VM</translation>
 <translation id="7389722738210761877">Тайландска клавиатура (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Клавиатура на хинди (фонетична)</translation>
 <translation id="7417453074306512035">Етиопска клавиатура</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">словенски</translation>
 <translation id="7982283708762922719">Височина</translation>
 <translation id="7987485481246785146">Кюрдски (сорани), базирана на арабски клавиатура</translation>
-<translation id="7990715602172183602">1 папка е споделена с Plugin VM</translation>
 <translation id="799547531016638432">Премахване на прекия път</translation>
 <translation id="799923393800005025">Може да преглежда</translation>
 <translation id="8008366997883261463">Джак Ръсел териер</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Вече съществува файл или директория със същото име.</translation>
 <translation id="8391950649760071442">Транслитерация (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Размери</translation>
-<translation id="8400874747056634633">Управление на споделянето с Plugin VM</translation>
 <translation id="8412586565681117057">Бърз метод на въвеждане</translation>
 <translation id="8418113698656761985">Румънска клавиатура</translation>
 <translation id="8432745813735585631">Американска (Коулмак) клавиатура</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index 4e382dc..5a32bca 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome ডিভাইস</translation>
 <translation id="1665611772925418501">ফাইল সংশোধন করা যায়নি৷</translation>
 <translation id="1673103856845176271">নিরাপত্তাজড়িন কারণে ফাইলটিতে অ্যাক্সেস করা যায়নি৷</translation>
-<translation id="1679806121152819234">প্লাগ-ইন VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" />টি আইটেম জিপ করা হচ্ছে…</translation>
 <translation id="174173592514158117">সমস্ত Play ফোল্ডারগুলি দেখান</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ফাইল</translation>
 <translation id="457386861538956877">আরও...</translation>
 <translation id="4582497162516204941">Linux (বিটা) ব্যবহার করে ইনস্টল করুন</translation>
-<translation id="4584780943629874245">প্লাগ-ইন VM-এর মাধ্যমে শেয়ার করুন</translation>
 <translation id="4631887759990505102">শিল্পী</translation>
 <translation id="4656293982926141856">এই কম্পিউটার</translation>
 <translation id="4669606053856530811">এই আইটেমগুলি '<ph name="SOURCE_NAME" />' এর সদস্যদের সাথে শেয়ার না করলে তারা সেগুলি অ্যাক্সেস করতে পারবে না।</translation>
@@ -528,7 +526,6 @@
 <translation id="7339898014177206373">নতুন উইন্ডো</translation>
 <translation id="7348749398828259943">মার্কিন ওয়ার্কম্যান আন্তর্জাতিক কীবোর্ড</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" />টি আইটেম কপি করা হচ্ছে…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" />টি ফোল্ডার প্লাগ-ইন VM-এর সাথে শেয়ার করা হয়েছে</translation>
 <translation id="7389722738210761877">থাই কীবোর্ড (TIS 820-2531)</translation>
 <translation id="7396038720194014279">হিন্দি কীবোর্ড (ফোনেটিক)</translation>
 <translation id="7417453074306512035">ইথিওপিক কীবোর্ড</translation>
@@ -591,7 +588,6 @@
 <translation id="7969525169268594403">স্লোভেনিয়ান</translation>
 <translation id="7982283708762922719">উচ্চতা</translation>
 <translation id="7987485481246785146">সোরানি কুর্দিশ আরবী-নির্ভর কীবোর্ড</translation>
-<translation id="7990715602172183602">১টি ফোল্ডার প্লাগ-ইন VM-এর সাথে শেয়ার করা হয়েছে</translation>
 <translation id="799547531016638432">ডেস্কটপ সরান</translation>
 <translation id="799923393800005025">দেখতে পারবেন</translation>
 <translation id="8008366997883261463">জ্যাক রাসেল ক্ষুদ্রকায় কুকুর</translation>
@@ -632,7 +628,6 @@
 <translation id="8342318071240498787">একই নাম সহ ফাইল অথবা একটি নির্দেশিকা ইতিমধ্যেই বিদ্যমান আছে৷</translation>
 <translation id="8391950649760071442">লিপ্যন্তরকরণ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">আয়তন</translation>
-<translation id="8400874747056634633">প্লাগ-ইন VM শেয়ার করা মার্জ করুন</translation>
 <translation id="8412586565681117057">দ্রুত ইনপুট পদ্ধতি</translation>
 <translation id="8418113698656761985">রোমানিয় কীবোর্ড</translation>
 <translation id="8432745813735585631">ইউএস কোলেম্যাক কীবোর্ড</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index 5c76435..2106df6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositiu Chrome</translation>
 <translation id="1665611772925418501">El fitxer no s'ha pogut modificar.</translation>
 <translation id="1673103856845176271">No s'ha pogut accedir al fitxer per qüestions de seguretat.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Maj</translation>
 <translation id="1722487484194605434">S'estan comprimint <ph name="NUMBER_OF_ITEMS" /> elements...</translation>
 <translation id="174173592514158117">Mostra totes les carpetes de Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Fitxer <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Més...</translation>
 <translation id="4582497162516204941">Instal·la amb Linux (versió beta)</translation>
-<translation id="4584780943629874245">Comparteix amb Plugin VM</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Aquest ordinador</translation>
 <translation id="4669606053856530811">Els membres de l'equip <ph name="SOURCE_NAME" /> ja no podran accedir a aquests elements, tret que es comparteixin amb ells.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Finestra nova</translation>
 <translation id="7348749398828259943">Teclat Workman nord-americà internacional</translation>
 <translation id="7359359531237882347">S'estan copiant <ph name="NUMBER_OF_ITEMS" /> elements...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> carpetes compartides amb Plugin VM</translation>
 <translation id="7389722738210761877">Teclat tailandès (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Teclat hindi (fonètic)</translation>
 <translation id="7417453074306512035">Teclat etíop</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Eslovè</translation>
 <translation id="7982283708762922719">Alçada</translation>
 <translation id="7987485481246785146">Teclat de kurd sorani basat en l'àrab</translation>
-<translation id="7990715602172183602">S'ha compartit una carpeta amb Plugin VM</translation>
 <translation id="799547531016638432">Suprimeix la drecera</translation>
 <translation id="799923393800005025">Pot consultar</translation>
 <translation id="8008366997883261463">Gos</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Ja existeix un fitxer o un directori amb aquest nom.</translation>
 <translation id="8391950649760071442">Transliteració (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensions</translation>
-<translation id="8400874747056634633">Gestiona la compartició amb Plugin VM</translation>
 <translation id="8412586565681117057">Mètode d'introducció ràpida</translation>
 <translation id="8418113698656761985">Teclat romanès</translation>
 <translation id="8432745813735585631">Teclat Colemak nord-americà</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
index d9f1651..fac15d5e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Zařízení Chrome</translation>
 <translation id="1665611772925418501">Soubor se nepodařilo upravit.</translation>
 <translation id="1673103856845176271">Soubor je z bezpečnostních důvodů nedostupný.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Komprimace <ph name="NUMBER_OF_ITEMS" /> položek...</translation>
 <translation id="174173592514158117">Zobrazit všechny složky Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Soubor <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Další...</translation>
 <translation id="4582497162516204941">Instalovat pomocí Linuxu (beta)</translation>
-<translation id="4584780943629874245">Sdílet s nástrojem Plugin VM</translation>
 <translation id="4631887759990505102">Interpret</translation>
 <translation id="4656293982926141856">Tento počítač</translation>
 <translation id="4669606053856530811">Pokud s nimi tyto položky nejsou sdíleny, ztratí k nim členové týmu <ph name="SOURCE_NAME" /> přístup.</translation>
@@ -528,7 +526,6 @@
 <translation id="7339898014177206373">Nové okno</translation>
 <translation id="7348749398828259943">Americká mezinárodní klávesnice s rozložením Workman</translation>
 <translation id="7359359531237882347">Kopírování <ph name="NUMBER_OF_ITEMS" /> položek...</translation>
-<translation id="7379734276381389090">S nástrojem Plugin VM byly sdíleny složky, celkem <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">Thajská klávesnice (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindská klávesnice (fonetická)</translation>
 <translation id="7417453074306512035">Etiopská klávesnice</translation>
@@ -591,7 +588,6 @@
 <translation id="7969525169268594403">slovinština</translation>
 <translation id="7982283708762922719">Výška</translation>
 <translation id="7987485481246785146">Kurdská klávesnice (sorání) s arabským rozložením</translation>
-<translation id="7990715602172183602">S nástrojem Plugin VM byla sdílena 1 složka</translation>
 <translation id="799547531016638432">Odebrat zástupce</translation>
 <translation id="799923393800005025">Může zobrazit</translation>
 <translation id="8008366997883261463">Jack Russell teriér</translation>
@@ -632,7 +628,6 @@
 <translation id="8342318071240498787">Soubor nebo složka s daným názvem již existuje.</translation>
 <translation id="8391950649760071442">Přepis (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Rozměry</translation>
-<translation id="8400874747056634633">Spravovat sdílení s nástrojem Plugin VM</translation>
 <translation id="8412586565681117057">Zrychlená metoda zadávání</translation>
 <translation id="8418113698656761985">Rumunská klávesnice</translation>
 <translation id="8432745813735585631">Americká klávesnice s rozložením Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index 09ebb56..28f9c5a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-enhed</translation>
 <translation id="1665611772925418501">Filen kunne ikke ændres.</translation>
 <translation id="1673103856845176271">Der kunne ikke opnås adgang til filen af sikkerhedsmæssige årsager.</translation>
-<translation id="1679806121152819234">PluginVm</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Komprimerer <ph name="NUMBER_OF_ITEMS" /> elementer...</translation>
 <translation id="174173592514158117">Vis alle Play-mapper</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Flere...</translation>
 <translation id="4582497162516204941">Installer med Linux (beta)</translation>
-<translation id="4584780943629874245">Del med Plugin VM</translation>
 <translation id="4631887759990505102">Kunstner</translation>
 <translation id="4656293982926141856">Denne computer</translation>
 <translation id="4669606053856530811">Medlemmer af "<ph name="SOURCE_NAME" />" mister adgang, medmindre disse elementer deles med dem.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nyt vindue</translation>
 <translation id="7348749398828259943">Internationalt amerikansk Workman-tastatur</translation>
 <translation id="7359359531237882347">Kopierer <ph name="NUMBER_OF_ITEMS" /> elementer...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mapper blev delt med Plugin VM</translation>
 <translation id="7389722738210761877">Thailandsk tastatur (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi-tastatur (fonetisk)</translation>
 <translation id="7417453074306512035">Etiopisk tastatur</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovensk</translation>
 <translation id="7982283708762922719">Højde</translation>
 <translation id="7987485481246785146">Sorani-kurdisk tastatur (arabiskbaseret)</translation>
-<translation id="7990715602172183602">1 mappe blev delt med Plugin VM</translation>
 <translation id="799547531016638432">Fjern genvej</translation>
 <translation id="799923393800005025">Kan se</translation>
 <translation id="8008366997883261463">Jack Russell-terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Der findes allerede en fil eller en mappe med samme navn.</translation>
 <translation id="8391950649760071442">Translitteration (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Mål</translation>
-<translation id="8400874747056634633">Administrer deling med Plugin VM</translation>
 <translation id="8412586565681117057">Hurtig indtastningsmetode</translation>
 <translation id="8418113698656761985">Rumænsk tastatur</translation>
 <translation id="8432745813735585631">Amerikansk (Colemak) tastatur</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 81ec406..c8b47a2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-Gerät</translation>
 <translation id="1665611772925418501">Die Datei konnte nicht geändert werden.</translation>
 <translation id="1673103856845176271">Auf die Datei konnte aus Sicherheitsgründen nicht zugegriffen werden.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Umschalttaste</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> Elemente werden gezippt...</translation>
 <translation id="174173592514158117">Alle Google Play-Ordner anzeigen</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-Datei</translation>
 <translation id="457386861538956877">Mehr...</translation>
 <translation id="4582497162516204941">Installation mit Linux (Beta)</translation>
-<translation id="4584780943629874245">Für VM-Plug-in freigeben</translation>
 <translation id="4631887759990505102">Musiker</translation>
 <translation id="4656293982926141856">Auf diesem Computer</translation>
 <translation id="4669606053856530811">Mitglieder von "<ph name="SOURCE_NAME" />" verlieren den Zugriff, sofern Sie diese Dateien nicht mit ihnen teilen.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Neues Fenster</translation>
 <translation id="7348749398828259943">Internationale US-amerikanische Workman-Tastatur</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> Elemente werden kopiert...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> Ordner für VM-Plug-in freigegeben</translation>
 <translation id="7389722738210761877">Thailändische Tastatur (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi-Tastatur (phonetisch)</translation>
 <translation id="7417453074306512035">Äthiopische Tastatur</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slowenisch</translation>
 <translation id="7982283708762922719">Größe</translation>
 <translation id="7987485481246785146">Sorani-Tastatur nach arabischem Layout</translation>
-<translation id="7990715602172183602">1 Ordner für VM-Plug-in freigegeben</translation>
 <translation id="799547531016638432">Verknüpfung entfernen</translation>
 <translation id="799923393800005025">Darf ansehen</translation>
 <translation id="8008366997883261463">Jack Russell</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Es ist bereits eine Datei oder ein Verzeichnis mit dem gleichen Namen vorhanden.</translation>
 <translation id="8391950649760071442">Transliteration (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Abmessungen</translation>
-<translation id="8400874747056634633">VM-Plug-in-Freigabe verwalten</translation>
 <translation id="8412586565681117057">Schnelle Eingabemethode</translation>
 <translation id="8418113698656761985">Rumänische Tastatur</translation>
 <translation id="8432745813735585631">US-amerikanische Colemak-Tastatur</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index d641a43..c51b31c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -63,7 +63,6 @@
 <translation id="164969095109328410">Συσκευή Chrome</translation>
 <translation id="1665611772925418501">Δεν ήταν δυνατή η τροποποίηση του αρχείου.</translation>
 <translation id="1673103856845176271">Για λόγους ασφαλείας, η πρόσβαση στο αρχείο δεν ήταν δυνατή.</translation>
-<translation id="1679806121152819234">Προσθήκη VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Συμπίεση <ph name="NUMBER_OF_ITEMS" /> στοιχείων...</translation>
 <translation id="174173592514158117">Εμφάνιση όλων των φακέλων του Play</translation>
@@ -295,7 +294,6 @@
 <translation id="4572815280350369984">Αρχείο <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Περισσότερα...</translation>
 <translation id="4582497162516204941">Εγκατάσταση με Linux (beta)</translation>
-<translation id="4584780943629874245">Κοινοποίηση με την προσθήκη VM</translation>
 <translation id="4631887759990505102">Καλλιτέχνης</translation>
 <translation id="4656293982926141856">Αυτός ο υπολογιστής</translation>
 <translation id="4669606053856530811">Τα μέλη του "<ph name="SOURCE_NAME" />" θα χάσουν την πρόσβαση, εκτός εάν αυτά τα στοιχεία είναι κοινόχρηστα για τα συγκεκριμένα μέλη.</translation>
@@ -543,7 +541,6 @@
 <translation id="7339898014177206373">Νέο παράθυρο</translation>
 <translation id="7348749398828259943">Διεθνές πληκτρολόγιο ΗΠΑ Workman</translation>
 <translation id="7359359531237882347">Αντιγραφή <ph name="NUMBER_OF_ITEMS" /> στοιχείων…</translation>
-<translation id="7379734276381389090">Κοινοποίηση <ph name="NUMBER_OF_ITEMS" /> φακέλων με την προσθήκη VM</translation>
 <translation id="7389722738210761877">Πληκτρολόγιο Ταϊλανδικών (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Πληκτρολόγιο χίντι (Φωνητικό)</translation>
 <translation id="7417453074306512035">Πληκτρολόγιο Αιθιοπικών</translation>
@@ -609,7 +606,6 @@
 <translation id="7969525169268594403">Σλοβενικά</translation>
 <translation id="7982283708762922719">Ύψος</translation>
 <translation id="7987485481246785146">Πληκτρολόγιο Σορανί Κουρδικών βασισμένο στα Αραβικά</translation>
-<translation id="7990715602172183602">Κοινοποίηση 1 φακέλου με την προσθήκη VM</translation>
 <translation id="799547531016638432">Κατάργηση συντόμευσης</translation>
 <translation id="799923393800005025">Δυνατότητα προβολής</translation>
 <translation id="8008366997883261463">Τεριέ Τζακ Ράσελ</translation>
@@ -652,7 +648,6 @@
 <translation id="8342318071240498787">Υπάρχει ήδη αρχείο ή κατάλογος με το ίδιο όνομα.</translation>
 <translation id="8391950649760071442">Μεταγραφή (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Διαστάσεις</translation>
-<translation id="8400874747056634633">Διαχείριση κοινοποίησης προσθήκης VM</translation>
 <translation id="8412586565681117057">Μέθοδος εισαγωγής Quick</translation>
 <translation id="8418113698656761985">Πληκτρολόγιο με ρουμανικούς χαρακτήρες</translation>
 <translation id="8432745813735585631">Πληκτρολόγιο Colemak ΗΠΑ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index 46d3d04f..9bafbd725 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome device</translation>
 <translation id="1665611772925418501">The file could not be modified.</translation>
 <translation id="1673103856845176271">The file could not be accessed for security reasons.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Zipping <ph name="NUMBER_OF_ITEMS" /> items…</translation>
 <translation id="174173592514158117">Show all Play folders</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> file</translation>
 <translation id="457386861538956877">More...</translation>
 <translation id="4582497162516204941">Install with Linux (Beta)</translation>
-<translation id="4584780943629874245">Share with Plugin VM</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4656293982926141856">This computer</translation>
 <translation id="4669606053856530811">Members of '<ph name="SOURCE_NAME" />' will lose access unless these items are shared with them.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">New window</translation>
 <translation id="7348749398828259943">US Workman international keyboard</translation>
 <translation id="7359359531237882347">Copying <ph name="NUMBER_OF_ITEMS" /> items…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> folders shared with Plugin VM</translation>
 <translation id="7389722738210761877">Thai keyboard (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi keyboard (Phonetic)</translation>
 <translation id="7417453074306512035">Ethiopic keyboard</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovenian</translation>
 <translation id="7982283708762922719">Height</translation>
 <translation id="7987485481246785146">Sorani Kurdish Arabic-based keyboard</translation>
-<translation id="7990715602172183602">One folder shared with Plugin VM</translation>
 <translation id="799547531016638432">Remove shortcut</translation>
 <translation id="799923393800005025">Can view</translation>
 <translation id="8008366997883261463">Jack Russell Terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">A file or a directory with the same name already exists.</translation>
 <translation id="8391950649760071442">Transliteration (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensions</translation>
-<translation id="8400874747056634633">Manage Plugin VM sharing</translation>
 <translation id="8412586565681117057">Quick input method</translation>
 <translation id="8418113698656761985">Romanian keyboard</translation>
 <translation id="8432745813735585631">US Colemak keyboard</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index 90f0bba6..ba9d004 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositivo Chrome</translation>
 <translation id="1665611772925418501">No se pudo modificar el archivo.</translation>
 <translation id="1673103856845176271">No se pudo acceder al archivo por razones de seguridad.</translation>
-<translation id="1679806121152819234">VM del complemento</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Comprimiendo <ph name="NUMBER_OF_ITEMS" /> elementos…</translation>
 <translation id="174173592514158117">Mostrar todas las carpetas de Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Archivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Más ...</translation>
 <translation id="4582497162516204941">Instalar con Linux (Beta)</translation>
-<translation id="4584780943629874245">Compartir con Plugin VM</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Esta computadora</translation>
 <translation id="4669606053856530811">Los miembros de "<ph name="SOURCE_NAME" />" ya no tendrán acceso a estos elementos, a menos que se los comparta con ellos.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nueva ventana</translation>
 <translation id="7348749398828259943">Teclado internacional Workman (EE. UU.)</translation>
 <translation id="7359359531237882347">Copiando <ph name="NUMBER_OF_ITEMS" /> elementos…</translation>
-<translation id="7379734276381389090">Se compartieron <ph name="NUMBER_OF_ITEMS" /> carpetas con Plugin VM</translation>
 <translation id="7389722738210761877">Teclado tailandés (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Teclado hindi (fonético)</translation>
 <translation id="7417453074306512035">Teclado etíope</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Esloveno</translation>
 <translation id="7982283708762922719">Altura</translation>
 <translation id="7987485481246785146">Teclado kurdo sorani basado en el árabe</translation>
-<translation id="7990715602172183602">Se compartió 1 carpeta con Plugin VM</translation>
 <translation id="799547531016638432">Eliminar acceso directo</translation>
 <translation id="799923393800005025">Se puede ver</translation>
 <translation id="8008366997883261463">Perro</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Ya existe un archivo o un directorio con el mismo nombre.</translation>
 <translation id="8391950649760071442">Transliteración (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensiones</translation>
-<translation id="8400874747056634633">Administrar el uso compartido de Plugin VM</translation>
 <translation id="8412586565681117057">Método de entrada rápido</translation>
 <translation id="8418113698656761985">Teclado rumano</translation>
 <translation id="8432745813735585631">Teclado Colemak en inglés de EE.UU.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index 75fba443..b8e37b5f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositivo Chrome</translation>
 <translation id="1665611772925418501">No se ha podido modificar el archivo.</translation>
 <translation id="1673103856845176271">No se ha podido acceder al archivo por razones de seguridad.</translation>
-<translation id="1679806121152819234">Complemento de VM</translation>
 <translation id="169515659049020177">Mayús</translation>
 <translation id="1722487484194605434">Se están comprimiendo <ph name="NUMBER_OF_ITEMS" /> elementos...</translation>
 <translation id="174173592514158117">Mostrar todas las carpetas de Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Archivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Más...</translation>
 <translation id="4582497162516204941">Instalar con Linux (Beta)</translation>
-<translation id="4584780943629874245">Compartir con complemento de VM</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Este ordenador</translation>
 <translation id="4669606053856530811">Los miembros de "<ph name="SOURCE_NAME" />" dejarán de tener acceso a menos que estos elementos se compartan con ellos.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nueva ventana</translation>
 <translation id="7348749398828259943">Teclado internacional estilo Workman (EE. UU.)</translation>
 <translation id="7359359531237882347">Se están copiando <ph name="NUMBER_OF_ITEMS" /> elementos...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> carpetas compartidas con complemento de VM</translation>
 <translation id="7389722738210761877">Teclado tailandés (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Teclado hindi (fonético)</translation>
 <translation id="7417453074306512035">Teclado etíope</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Esloveno</translation>
 <translation id="7982283708762922719">Altura</translation>
 <translation id="7987485481246785146">Teclado kurdo sorani basado en el árabe</translation>
-<translation id="7990715602172183602">1 carpeta compartida con complemento de VM</translation>
 <translation id="799547531016638432">Eliminar acceso directo</translation>
 <translation id="799923393800005025">Puede ver</translation>
 <translation id="8008366997883261463">Terrier Jack Russell</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Ya existe un archivo o un directorio con el mismo nombre.</translation>
 <translation id="8391950649760071442">Transliteración (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensiones</translation>
-<translation id="8400874747056634633">Gestionar elementos compartidos con complemento de VM</translation>
 <translation id="8412586565681117057">Método de entrada abreviado</translation>
 <translation id="8418113698656761985">Teclado rumano</translation>
 <translation id="8432745813735585631">Teclado EE.UU. Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index 6f4ae63..27f4c2c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome'i seade</translation>
 <translation id="1665611772925418501">Faili ei saa muuta.</translation>
 <translation id="1673103856845176271">Turvalisuse tagamiseks on juurdepääs failile keelatud.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Tõstuklahv</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> üksuse pakkimine …</translation>
 <translation id="174173592514158117">Kuva kõik Play kaustad</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-file</translation>
 <translation id="457386861538956877">Rohkem ...</translation>
 <translation id="4582497162516204941">Installimine Linuxiga (beetaversioon)</translation>
-<translation id="4584780943629874245">Jaga Plugin VM-iga</translation>
 <translation id="4631887759990505102">Esitaja</translation>
 <translation id="4656293982926141856">See arvuti</translation>
 <translation id="4669606053856530811">Üksuse „<ph name="SOURCE_NAME" />” liikmed kaotavad juurdepääsu, kui neid üksusi nendega ei jagata.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Uus aken</translation>
 <translation id="7348749398828259943">USA Workmani rahvusvaheline klaviatuur</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> üksuse kopeerimine …</translation>
-<translation id="7379734276381389090">Plugin VM-iga jagati <ph name="NUMBER_OF_ITEMS" /> kausta</translation>
 <translation id="7389722738210761877">Tai klaviatuur (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi klaviatuur (foneetiline)</translation>
 <translation id="7417453074306512035">Etioopia klaviatuur</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">sloveeni keel</translation>
 <translation id="7982283708762922719">Kõrgus</translation>
 <translation id="7987485481246785146">Sorani kurdi araabia keele põhine klaviatuur</translation>
-<translation id="7990715602172183602">Plugin VM-iga jagati ühte kausta</translation>
 <translation id="799547531016638432">Eemalda otsetee</translation>
 <translation id="799923393800005025">Saab vaadata</translation>
 <translation id="8008366997883261463">Jack Russelli terjer</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Sama nimega fail või kataloog on juba olemas.</translation>
 <translation id="8391950649760071442">Transliteratsioon (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensioonid</translation>
-<translation id="8400874747056634633">Plugin VM-iga jagamise haldamine</translation>
 <translation id="8412586565681117057">Kiire sisestusmeetod</translation>
 <translation id="8418113698656761985">Rumeenia klaviatuur</translation>
 <translation id="8432745813735585631">US Colemaki klaviatuur</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index 92e403e..607217a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">‏دستگاه Chrome</translation>
 <translation id="1665611772925418501">امکان تغییر این فایل وجود نداشت.</translation>
 <translation id="1673103856845176271">دسترسی به این فایل به دلایل امنیتی ممکن نبود.</translation>
-<translation id="1679806121152819234">‏افزایه VM</translation>
 <translation id="169515659049020177">تبدیل</translation>
 <translation id="1722487484194605434">در حال فشرده‌سازی <ph name="NUMBER_OF_ITEMS" /> مورد…</translation>
 <translation id="174173592514158117">‏نمایش همه پوشه‌های Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">فایل <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">بیشتر...</translation>
 <translation id="4582497162516204941">‏نصب با Linux (بتا)</translation>
-<translation id="4584780943629874245">‏هم‌رسانی ازطریق Plugin VM</translation>
 <translation id="4631887759990505102">هنرمند</translation>
 <translation id="4656293982926141856">این رایانه</translation>
 <translation id="4669606053856530811">اگر این موارد با اعضای «<ph name="SOURCE_NAME" />» هم‌رسانی نشوند، دسترسی را از دست خواهند داد.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">پنجرهٔ جدید</translation>
 <translation id="7348749398828259943">‏صفحه‌کلید بین‌المللی US Workman</translation>
 <translation id="7359359531237882347">در حال کپی کردن <ph name="NUMBER_OF_ITEMS" /> مورد…</translation>
-<translation id="7379734276381389090">‏<ph name="NUMBER_OF_ITEMS" /> پوشه بااستفاده از Plugin VM هم‌رسانی شد</translation>
 <translation id="7389722738210761877">‏صفحه‌کلید تایلندی (TIS 820-2531)</translation>
 <translation id="7396038720194014279">صفحه‌‌کلید هندی (آوایی)</translation>
 <translation id="7417453074306512035">صفحه‌کلید اتیوپیایی</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">اسلوونیایی</translation>
 <translation id="7982283708762922719">ارتفاع</translation>
 <translation id="7987485481246785146">صفحه‌کلید کردی مبتنی بر عربی</translation>
-<translation id="7990715602172183602">‏۱ پوشه بااستفاده از Plugin VM هم‌رسانی شد</translation>
 <translation id="799547531016638432">حذف میان‌بر</translation>
 <translation id="799923393800005025">می‌تواند مشاهده کند</translation>
 <translation id="8008366997883261463">جک راسل تریر</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">یک فایل یا یک پوشه با همین نام از قبل وجود دارد.</translation>
 <translation id="8391950649760071442">‏نویسه‌گردانی (emandi ← ‏ఏమండీ)</translation>
 <translation id="8395901698320285466">ابعاد</translation>
-<translation id="8400874747056634633">‏مدیریت هم‌رسانی ازطریق Plugin VM</translation>
 <translation id="8412586565681117057">روش ورودی سریع</translation>
 <translation id="8418113698656761985">صفحه‌کلید رومانیایی</translation>
 <translation id="8432745813735585631">صفحه‌کلید کلماک آمریکایی</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index 4699841..43dc61cfb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-laite</translation>
 <translation id="1665611772925418501">Tiedostoa ei voi muuttaa.</translation>
 <translation id="1673103856845176271">Tiedostoa ei voi käyttää turvallisuussyistä.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Pakataan <ph name="NUMBER_OF_ITEMS" /> kohdetta…</translation>
 <translation id="174173592514158117">Näytä kaikki Play-kansiot</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-tiedosto</translation>
 <translation id="457386861538956877">Lisää...</translation>
 <translation id="4582497162516204941">Asenna Linuxilla (beta)</translation>
-<translation id="4584780943629874245">Jaa Plugin VM:n kanssa</translation>
 <translation id="4631887759990505102">Esittäjä</translation>
 <translation id="4656293982926141856">Tällä tietokoneella</translation>
 <translation id="4669606053856530811">Jäsenet (<ph name="SOURCE_NAME" />) menettävät käyttöoikeuden, ellei näitä kohteita jaeta heille.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Uusi ikkuna</translation>
 <translation id="7348749398828259943">Näppäimistö: Yhdysvallat, kansainvälinen Workman</translation>
 <translation id="7359359531237882347">Kopioidaan <ph name="NUMBER_OF_ITEMS" /> kohdetta…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> kansiota jaettu Plugin VM:n kanssa</translation>
 <translation id="7389722738210761877">Thainkielinen näppäimistö (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindinkielinen näppäimistö (foneettinen)</translation>
 <translation id="7417453074306512035">Etiopialainen näppäimistö</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">sloveeni</translation>
 <translation id="7982283708762922719">Korkeus</translation>
 <translation id="7987485481246785146">Soranîn arabiaan perustuva näppäimistö</translation>
-<translation id="7990715602172183602">1 kansio jaettu Plugin VM:n kanssa</translation>
 <translation id="799547531016638432">Poista pikakuvake</translation>
 <translation id="799923393800005025">Voi tarkastella</translation>
 <translation id="8008366997883261463">Jackrussellinterrieri</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Samanniminen tiedosto tai hakemisto on jo olemassa.</translation>
 <translation id="8391950649760071442">Translitterointi (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Mittasuhteet</translation>
-<translation id="8400874747056634633">Ylläpidä Plugin VM:n jakamisasetuksia</translation>
 <translation id="8412586565681117057">Nopea syöttötapa</translation>
 <translation id="8418113698656761985">Näppäimistö: romania</translation>
 <translation id="8432745813735585631">Näppäimistö: US, Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
index 22bd497..94ebdf8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome device</translation>
 <translation id="1665611772925418501">Hindi mababago ang file.</translation>
 <translation id="1673103856845176271">Hindi ma-access ang file sa mga kadahilanang pang-seguridad.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Zini-zip ang <ph name="NUMBER_OF_ITEMS" /> (na) item...</translation>
 <translation id="174173592514158117">Ipakita ang lahat ng folder ng Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> na file</translation>
 <translation id="457386861538956877">Higit pa...</translation>
 <translation id="4582497162516204941">I-install gamit ang Linux (Beta)</translation>
-<translation id="4584780943629874245">Ibahagi sa Plugin VM</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4656293982926141856">Sa computer na ito</translation>
 <translation id="4669606053856530811">Mawawalan ng access ang mga miyembro ng '<ph name="SOURCE_NAME" />' maliban na lang kung ibinahagi sa kanila ang mga item na ito.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Bagong window</translation>
 <translation id="7348749398828259943">US Workman international na keyboard</translation>
 <translation id="7359359531237882347">Kinokopya ang <ph name="NUMBER_OF_ITEMS" /> (na) item...</translation>
-<translation id="7379734276381389090">Nagbahagi ng <ph name="NUMBER_OF_ITEMS" /> folder sa Plugin VM</translation>
 <translation id="7389722738210761877">Thai keyboard (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi keyboard (Phonetic)</translation>
 <translation id="7417453074306512035">Ethiopic keyboard</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovenian</translation>
 <translation id="7982283708762922719">Taas</translation>
 <translation id="7987485481246785146">Keyboard na batay sa Sorani Kurdish Arabic</translation>
-<translation id="7990715602172183602">Nagbahagi ng 1 folder sa Plugin VM</translation>
 <translation id="799547531016638432">Alisin ang shortcut</translation>
 <translation id="799923393800005025">Makakatingin</translation>
 <translation id="8008366997883261463">Aso</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Umiiral na ang isang file o direktoryong may parehong pangalan.</translation>
 <translation id="8391950649760071442">Transliteration (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Mga Sakop</translation>
-<translation id="8400874747056634633">Pamahalaan ang pagbabahagi ng Plugin VM</translation>
 <translation id="8412586565681117057">Mabilis na paraan ng pag-input</translation>
 <translation id="8418113698656761985">Romanian na keyboard</translation>
 <translation id="8432745813735585631">US Colemak na keyboard</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index 5994f95..c6e8ed46 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Appareil Google Chrome</translation>
 <translation id="1665611772925418501">Impossible de modifier le fichier.</translation>
 <translation id="1673103856845176271">Impossible d'accéder au fichier pour des raisons de sécurité.</translation>
-<translation id="1679806121152819234">VM Plug-in</translation>
 <translation id="169515659049020177">Maj</translation>
 <translation id="1722487484194605434">Compression de <ph name="NUMBER_OF_ITEMS" /> éléments…</translation>
 <translation id="174173592514158117">Afficher tous les dossiers Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Fichier <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Autres...</translation>
 <translation id="4582497162516204941">Installer avec Linux (Bêta)</translation>
-<translation id="4584780943629874245">Partager avec la VM Plug-in</translation>
 <translation id="4631887759990505102">Artiste</translation>
 <translation id="4656293982926141856">Cet ordinateur</translation>
 <translation id="4669606053856530811">Les membres de "<ph name="SOURCE_NAME" />" n'auront plus accès à ces éléments, à moins qu'ils ne soient partagés avec eux.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nouvelle fenêtre</translation>
 <translation id="7348749398828259943">Clavier Workman international américain</translation>
 <translation id="7359359531237882347">Copie de <ph name="NUMBER_OF_ITEMS" /> éléments…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> dossiers partagés avec la VM Plug-in</translation>
 <translation id="7389722738210761877">Clavier thaï (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Clavier hindi (phonétique)</translation>
 <translation id="7417453074306512035">Clavier éthiopien</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovène</translation>
 <translation id="7982283708762922719">Hauteur</translation>
 <translation id="7987485481246785146">Clavier kurde sorani (arabe)</translation>
-<translation id="7990715602172183602">1 dossier partagé avec la VM Plug-in</translation>
 <translation id="799547531016638432">Supprimer le raccourci</translation>
 <translation id="799923393800005025">Lecteur</translation>
 <translation id="8008366997883261463">Jack Russell Terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Un fichier ou un répertoire du même nom existe déjà.</translation>
 <translation id="8391950649760071442">Translittération (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensions</translation>
-<translation id="8400874747056634633">Gérer le partage avec la VM Plug-in</translation>
 <translation id="8412586565681117057">Mode de saisie quick</translation>
 <translation id="8418113698656761985">Clavier roumain</translation>
 <translation id="8432745813735585631">Clavier Colemak américain</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index 6f9dc1b..852a53e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome ઉપકરણ</translation>
 <translation id="1665611772925418501">ફાઇલ સંશોધિત કરી શકાઈ નથી.</translation>
 <translation id="1673103856845176271">સુરક્ષા કારણોસર ફાઇલ ઍક્સેસ કરી શકાઈ નથી.</translation>
-<translation id="1679806121152819234">પ્લગ-ઇન VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> આઇટમને ઝિપ કરી રહ્યું છે...</translation>
 <translation id="174173592514158117">બધા Play ફોલ્ડરો બતાવો</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ફાઇલ</translation>
 <translation id="457386861538956877">વધુ...</translation>
 <translation id="4582497162516204941">Linux (બીટા) ઇન્સ્ટૉલ કરો</translation>
-<translation id="4584780943629874245">પ્લગઇન VM વડે શેર કરો</translation>
 <translation id="4631887759990505102">કલાકાર</translation>
 <translation id="4656293982926141856">આ કમ્પ્યુટર</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />'ના સભ્યો ઍક્સેસ ગુમાવશે સિવાય કે આ આઇટમને તેમની સાથે શેર કરવામાં ન આવી હોય.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">નવી વિંડો</translation>
 <translation id="7348749398828259943">US Workman આંતરરાષ્ટ્રીય કીબોર્ડ</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> આઇટમ કૉપિ કરી રહ્યું છે...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> ફોલ્ડર પ્લગઇન VM સાથે શેર કરવામાં આવ્યાં</translation>
 <translation id="7389722738210761877">થાઈ કીબોર્ડ (TIS 820-2531)</translation>
 <translation id="7396038720194014279">હિન્દી કીબોર્ડ (ફોનેટિક)</translation>
 <translation id="7417453074306512035">ઇથિઓપિક કીબોર્ડ</translation>
@@ -590,7 +587,6 @@
 <translation id="7969525169268594403">સ્લોવેનિયન</translation>
 <translation id="7982283708762922719">ઊંચાઈ</translation>
 <translation id="7987485481246785146">સોરાની કુર્દિશ અરબી-આધારિત કીબોર્ડ</translation>
-<translation id="7990715602172183602">1 ફોલ્ડર પ્લગઇન VM સાથે શેર કરવામાં આવ્યું</translation>
 <translation id="799547531016638432">શૉર્ટકટ દૂર કરો</translation>
 <translation id="799923393800005025">જોઈ શકે છે</translation>
 <translation id="8008366997883261463">કૂતરો</translation>
@@ -631,7 +627,6 @@
 <translation id="8342318071240498787">સમાન નામની ફાઇલ અથવા ડિરેક્ટરી પહેલાથી જ અસ્તિત્વમાં છે.</translation>
 <translation id="8391950649760071442">લિવ્યંતરણ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">પરિમાણો</translation>
-<translation id="8400874747056634633">પ્લગઇન VM શેરિંગ મેનેજ કરો</translation>
 <translation id="8412586565681117057">ક્વિક ઇનપુટ પદ્ધતિ</translation>
 <translation id="8418113698656761985">રોમેનિયન કીબોર્ડ</translation>
 <translation id="8432745813735585631">યુએસ કોલમેક કીબોર્ડ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 1f94d1f..51d023f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome डिवाइस</translation>
 <translation id="1665611772925418501">फ़ाइल को संशोधित नहीं किया जा सका.</translation>
 <translation id="1673103856845176271">सुरक्षा कारणों से फ़ाइल तक नहीं पहुंचा जा सका.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> आइटम ज़िप किए जा रहे हैं...</translation>
 <translation id="174173592514158117">Play के सभी फ़ोल्डर दिखाएं</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फ़ाइल</translation>
 <translation id="457386861538956877">ज़्यादा...</translation>
 <translation id="4582497162516204941">Linux (बीटा) वाला पैकेज इंस्टॉल करें</translation>
-<translation id="4584780943629874245">प्लग इन VM से शेयर करें</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4656293982926141856">यह कंप्यूटर</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' के सदस्यों को तब तक एक्सेस नहीं मिलेगा जब तक कि ये आइटम उनके साथ शेयर नहीं किए जाते.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">नई विंडो</translation>
 <translation id="7348749398828259943">यूएस वर्कमैन अंतर्राष्‍ट्रीय कीबोर्ड</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> आइटम कॉपी किए जा रहे हैं...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> फ़ोल्डर प्लग इन VM से शेयर किए गए</translation>
 <translation id="7389722738210761877">थाई कीबोर्ड (TIS 820-2531)</translation>
 <translation id="7396038720194014279">हिन्दी कीबोर्ड (फ़ोनेटिक)</translation>
 <translation id="7417453074306512035">इथिओपियाई कीबोर्ड</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">स्लोवेनियाई</translation>
 <translation id="7982283708762922719">ऊंचाई</translation>
 <translation id="7987485481246785146">सोरानी कुर्दिश अरबी-आधारित कीबोर्ड</translation>
-<translation id="7990715602172183602">प्लग इन VM से एक फ़ोल्डर शेयर किया गया</translation>
 <translation id="799547531016638432">शॉर्टकट निकालें</translation>
 <translation id="799923393800005025">देख सकते हैं</translation>
 <translation id="8008366997883261463">श्वान</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">समान नाम वाली फ़ाइल या निर्देशिका पहले से ही मौजूद है.</translation>
 <translation id="8391950649760071442">लिप्यंतरण (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">आयाम</translation>
-<translation id="8400874747056634633">प्लग इन VM शेयरिंग प्रबंधित करें</translation>
 <translation id="8412586565681117057">क्विक इनपुट पद्धति</translation>
 <translation id="8418113698656761985">रोमानियाई कीबोर्ड</translation>
 <translation id="8432745813735585631">यूएस कोलमैक कीबोर्ड</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index ee01d729..65d008be 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome uređaj</translation>
 <translation id="1665611772925418501">Nije bilo moguće mijenjati datoteku.</translation>
 <translation id="1673103856845176271">Nije bilo moguće pristupiti datoteci zbog sigurnosnih razloga.</translation>
-<translation id="1679806121152819234">Dodatak VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Komprimiranje stavki (<ph name="NUMBER_OF_ITEMS" />)...</translation>
 <translation id="174173592514158117">Prikaži sve mape s Playa</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> datoteka</translation>
 <translation id="457386861538956877">Više...</translation>
 <translation id="4582497162516204941">Instalacija uz Linux (Beta)</translation>
-<translation id="4584780943629874245">Dijeli s Plugin VM-om</translation>
 <translation id="4631887759990505102">Izvođač</translation>
 <translation id="4656293982926141856">Ovo računalo</translation>
 <translation id="4669606053856530811">Članovi grupe "<ph name="SOURCE_NAME" />" izgubit će pristup ako se te stavke ne podijele s njima.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Novi prozor</translation>
 <translation id="7348749398828259943">Američka međunarodna Workman tipkovnica</translation>
 <translation id="7359359531237882347">Kopiranje stavki (<ph name="NUMBER_OF_ITEMS" />)...</translation>
-<translation id="7379734276381389090">S Plugin VM-om dijeli se sljedeći broj mapa: <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">tajska tipkovnica (TIS 820-2531)</translation>
 <translation id="7396038720194014279">hindska tipkovnica (fonetska)</translation>
 <translation id="7417453074306512035">etiopska tipkovnica</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovenski</translation>
 <translation id="7982283708762922719">Visina</translation>
 <translation id="7987485481246785146">soransko-kurdska tipkovnica temeljena na arapskom</translation>
-<translation id="7990715602172183602">S Plugin VM-om dijeli se jedna mapa</translation>
 <translation id="799547531016638432">Uklanjanje prečaca</translation>
 <translation id="799923393800005025">Može pregledavati</translation>
 <translation id="8008366997883261463">Jack Russell terijer</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Datoteka ili direktorij s istim imenom već postoje.</translation>
 <translation id="8391950649760071442">transliteracija (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimenzije</translation>
-<translation id="8400874747056634633">Upravljaj dijeljenjem s Plugin VM-om</translation>
 <translation id="8412586565681117057">brzi način unosa</translation>
 <translation id="8418113698656761985">Rumunjska tipkovnica</translation>
 <translation id="8432745813735585631">SAD Colemak tipkovnica</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
index 0a3566c..a847fb6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-eszköz</translation>
 <translation id="1665611772925418501">A fájlt nem lehet módosítani.</translation>
 <translation id="1673103856845176271">A fájl biztonsági okokból nem érhető el.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> elem tömörítése…</translation>
 <translation id="174173592514158117">Az összes Play-mappa megjelenítése</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fájl</translation>
 <translation id="457386861538956877">Továbbiak...</translation>
 <translation id="4582497162516204941">Telepítés a Linux (béta) segítségével</translation>
-<translation id="4584780943629874245">Megosztás a Plugin VM-mel</translation>
 <translation id="4631887759990505102">Előadó</translation>
 <translation id="4656293982926141856">Ez a számítógép</translation>
 <translation id="4669606053856530811">A(z) „<ph name="SOURCE_NAME" />” tagjai elveszítik hozzáférésüket, kivéve, ha meg vannak osztva velük ezek az elemek.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Új ablak</translation>
 <translation id="7348749398828259943">USA „Workman” nemzetközi billentyűzet</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> elem másolása…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mappa megosztva a Plugin VM-mel</translation>
 <translation id="7389722738210761877">Thai billentyűzet (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi billentyűzet (fonetikus)</translation>
 <translation id="7417453074306512035">Etióp billentyűzet</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">szlovén</translation>
 <translation id="7982283708762922719">Magasság</translation>
 <translation id="7987485481246785146">Sorani kurd arab alapú billentyűzet</translation>
-<translation id="7990715602172183602">1 mappa megosztva a Plugin VM-mel</translation>
 <translation id="799547531016638432">Parancsikon eltávolítása</translation>
 <translation id="799923393800005025">Megtekinthető</translation>
 <translation id="8008366997883261463">Jack Russell-terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Már létezik ugyanezzel a névvel egy fájl vagy egy könyvtár.</translation>
 <translation id="8391950649760071442">Átírás (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Méret</translation>
-<translation id="8400874747056634633">A Plugin VM-megosztás kezelése</translation>
 <translation id="8412586565681117057">Gyors beviteli mód</translation>
 <translation id="8418113698656761985">Román billentyűzet</translation>
 <translation id="8432745813735585631">Amerikai Colemak billentyűzet</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
index a7e00b6e..1c35f50 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Perangkat Chrome</translation>
 <translation id="1665611772925418501">File tidak dapat diubah.</translation>
 <translation id="1673103856845176271">File tidak dapat diakses karena alasan keamanan.</translation>
-<translation id="1679806121152819234">VM Plugin</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Membuat file zip <ph name="NUMBER_OF_ITEMS" /> item...</translation>
 <translation id="174173592514158117">Tampilkan semua folder Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">File <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Lainnya...</translation>
 <translation id="4582497162516204941">Instal dengan Linux (Beta)</translation>
-<translation id="4584780943629874245">Bagikan dengan Plugin VM</translation>
 <translation id="4631887759990505102">Artis</translation>
 <translation id="4656293982926141856">Komputer ini</translation>
 <translation id="4669606053856530811">Anggota '<ph name="SOURCE_NAME" />' akan kehilangan akses kecuali jika item berikut dibagikan dengan mereka.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Jendela baru</translation>
 <translation id="7348749398828259943">Keyboard internasional Workman AS</translation>
 <translation id="7359359531237882347">Menyalin <ph name="NUMBER_OF_ITEMS" /> item...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> folder dibagikan dengan Plugin VM</translation>
 <translation id="7389722738210761877">Keyboard Thai (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Keyboard Hindi (Fonetik)</translation>
 <translation id="7417453074306512035">Keyboard Ethiopia</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovenia</translation>
 <translation id="7982283708762922719">Tinggi</translation>
 <translation id="7987485481246785146">Keyboard berbasis Arab Kurdi Sorani</translation>
-<translation id="7990715602172183602">1 folder dibagikan dengan Plugin VM</translation>
 <translation id="799547531016638432">Hapus pintasan</translation>
 <translation id="799923393800005025">Dapat melihat</translation>
 <translation id="8008366997883261463">Anjing</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Sudah ada file atau direktori dengan nama yang sama.</translation>
 <translation id="8391950649760071442">Transliterasi (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensi</translation>
-<translation id="8400874747056634633">Kelola berbagi Plugin VM</translation>
 <translation id="8412586565681117057">Metode masukan Quick</translation>
 <translation id="8418113698656761985">Keyboard untuk bahasa Rumania</translation>
 <translation id="8432745813735585631">Keyboard Colemak AS</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
index 16d4027..37ad2f8c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositivo Chrome</translation>
 <translation id="1665611772925418501">Impossibile modificare il file.</translation>
 <translation id="1673103856845176271">Impossibile accedere al file per motivi di sicurezza.</translation>
-<translation id="1679806121152819234">PluginVm</translation>
 <translation id="169515659049020177">Maiusc</translation>
 <translation id="1722487484194605434">Compressione di <ph name="NUMBER_OF_ITEMS" /> elementi...</translation>
 <translation id="174173592514158117">Mostra tutte le cartelle di Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">File <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Altro...</translation>
 <translation id="4582497162516204941">Installa con Linux (beta)</translation>
-<translation id="4584780943629874245">Condividi con Plugin VM</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Questo computer</translation>
 <translation id="4669606053856530811">I membri di "<ph name="SOURCE_NAME" />" non avranno più accesso, a meno che questi elementi vengano condivisi con loro.</translation>
@@ -528,7 +526,6 @@
 <translation id="7339898014177206373">Nuova finestra</translation>
 <translation id="7348749398828259943">Tastiera internazionale Workman USA</translation>
 <translation id="7359359531237882347">Copia di <ph name="NUMBER_OF_ITEMS" /> elementi...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> cartelle condivise con Plugin VM</translation>
 <translation id="7389722738210761877">Tastiera Thailandese (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Tastiera Hindi (fonetica)</translation>
 <translation id="7417453074306512035">Tastiera Etiope</translation>
@@ -591,7 +588,6 @@
 <translation id="7969525169268594403">Sloveno</translation>
 <translation id="7982283708762922719">Altezza</translation>
 <translation id="7987485481246785146">Tastiera basata su arabo curdo sorani</translation>
-<translation id="7990715602172183602">1 cartella condivisa con Plugin VM</translation>
 <translation id="799547531016638432">Rimuovi scorciatoia</translation>
 <translation id="799923393800005025">Può visualizzare</translation>
 <translation id="8008366997883261463">Cane</translation>
@@ -632,7 +628,6 @@
 <translation id="8342318071240498787">Esiste già un file o una directory con lo stesso nome.</translation>
 <translation id="8391950649760071442">Traslitterazione (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensioni</translation>
-<translation id="8400874747056634633">Gestisci la condivisione con Plugin VM</translation>
 <translation id="8412586565681117057">Metodo di immissione rapido</translation>
 <translation id="8418113698656761985">Tastiera rumena</translation>
 <translation id="8432745813735585631">Tastiera Colemak USA</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
index 6c6605a..b9c4d00 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">‏מכשיר Chrome</translation>
 <translation id="1665611772925418501">הקובץ לא ניתן לשינוי.</translation>
 <translation id="1673103856845176271">לא היתה אפשרות לגשת לקובץ מסיבות אבטחה.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">מכווץ <ph name="NUMBER_OF_ITEMS" /> פריטים…</translation>
 <translation id="174173592514158117">‏הצגת כל תיקיות Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">קובץ <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">עוד...</translation>
 <translation id="4582497162516204941">‏התקנה באמצעות Linux (בטא)</translation>
-<translation id="4584780943629874245">‏שיתוף עם Plugin VM</translation>
 <translation id="4631887759990505102">אמן</translation>
 <translation id="4656293982926141856">במחשב הזה</translation>
 <translation id="4669606053856530811">אם הפריטים האלה לא ישותפו עם החברים באחסון השיתופי '<ph name="SOURCE_NAME" />', הם יאבדו את הגישה אליהם.</translation>
@@ -530,7 +528,6 @@
 <translation id="7339898014177206373">חלון חדש</translation>
 <translation id="7348749398828259943">‏מקלדת US Workman בינלאומית</translation>
 <translation id="7359359531237882347">מעתיק <ph name="NUMBER_OF_ITEMS" /> פריטים…</translation>
-<translation id="7379734276381389090">‏<ph name="NUMBER_OF_ITEMS" /> תיקיות משותפות עם Plugin VM</translation>
 <translation id="7389722738210761877">‏מקלדת תאילנדית (TIS 820-2531)</translation>
 <translation id="7396038720194014279">מקלדת הינדי (פונטית)</translation>
 <translation id="7417453074306512035">מקלדת אתיופית</translation>
@@ -593,7 +590,6 @@
 <translation id="7969525169268594403">סלובנית</translation>
 <translation id="7982283708762922719">גובה</translation>
 <translation id="7987485481246785146">מקלדת כורדית סורנית המבוססת על ערבית</translation>
-<translation id="7990715602172183602">‏תיקיה אחת משותפת עם Plugin VM</translation>
 <translation id="799547531016638432">הסר קיצור דרך</translation>
 <translation id="799923393800005025">יכול להציג</translation>
 <translation id="8008366997883261463">כלב</translation>
@@ -634,7 +630,6 @@
 <translation id="8342318071240498787">קובץ או ספריה עם אותו שם כבר קיימים.</translation>
 <translation id="8391950649760071442">‏תעתוק (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">מימדים</translation>
-<translation id="8400874747056634633">‏ניהול שיתוף של Plugin VM</translation>
 <translation id="8412586565681117057">‏שיטת קלט Quick</translation>
 <translation id="8418113698656761985">מקלדת רומנית</translation>
 <translation id="8432745813735585631">‏מקלדת Colemak אנגלית (ארה"ב)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
index 8b14698d..2c02e29 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome デバイス</translation>
 <translation id="1665611772925418501">ファイルを修正することができませんでした。</translation>
 <translation id="1673103856845176271">セキュリティ上の理由で、ファイルにアクセスできませんでした。</translation>
-<translation id="1679806121152819234">プラグイン VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> 個のアイテムを圧縮しています...</translation>
 <translation id="174173592514158117">すべての Play フォルダを表示する</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ファイル</translation>
 <translation id="457386861538956877">その他...</translation>
 <translation id="4582497162516204941">Linux(ベータ版)でのインストール</translation>
-<translation id="4584780943629874245">プラグイン VM と共有</translation>
 <translation id="4631887759990505102">アーティスト</translation>
 <translation id="4656293982926141856">このパソコン</translation>
 <translation id="4669606053856530811">「<ph name="SOURCE_NAME" />」のメンバーはこれらのアイテムにアクセスできなくなります(ただし個別に共有されている場合はアクセス可能です)。</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">新しいウィンドウ</translation>
 <translation id="7348749398828259943">US Workman インターナショナル キーボード</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> 個のアイテムをコピーしています...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> 個のフォルダがプラグイン VM と共有されています</translation>
 <translation id="7389722738210761877">タイ語キーボード(TIS 820~2531)</translation>
 <translation id="7396038720194014279">ヒンディー語キーボード(表音)</translation>
 <translation id="7417453074306512035">エチオピア語キーボード</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">スロベニア語</translation>
 <translation id="7982283708762922719">高さ</translation>
 <translation id="7987485481246785146">ソラニークルド語キーボード(アラビア語ベース)</translation>
-<translation id="7990715602172183602">1 個のフォルダがプラグイン VM と共有されています</translation>
 <translation id="799547531016638432">ショートカットを削除</translation>
 <translation id="799923393800005025">閲覧者</translation>
 <translation id="8008366997883261463">犬</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">同じ名前のファイルまたはディレクトリが既に存在しています。</translation>
 <translation id="8391950649760071442">文字変換(emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">サイズ</translation>
-<translation id="8400874747056634633">プラグイン VM の共有を管理</translation>
 <translation id="8412586565681117057">入力方法(Quick)</translation>
 <translation id="8418113698656761985">ルーマニア語のキーボード</translation>
 <translation id="8432745813735585631">Colemak キーボード(米国)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index fc698c65..3559867 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -58,7 +58,6 @@
 <translation id="164969095109328410">Chrome ಸಾಧನ</translation>
 <translation id="1665611772925418501">ಫೈಲ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಲಾಗಲಿಲ್ಲ.</translation>
 <translation id="1673103856845176271">ಸುರಕ್ಷತಾ ಕಾರಣಗಳಿಗಾಗಿ ಫೈಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲಾಗಲಿಲ್ಲ.</translation>
-<translation id="1679806121152819234">VM ಅನ್ನು ಪ್ಲಗ್‌ಇನ್ ಮಾಡಿ</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> ಐಟಂಗಳನ್ನು ಝಿಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="174173592514158117">ಎಲ್ಲ Play ಫೋಲ್ಡರ್‌‌ಗಳನ್ನು ತೋರಿಸಿ</translation>
@@ -283,7 +282,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ಫೈಲ್</translation>
 <translation id="457386861538956877">ಇನ್ನಷ್ಟು...</translation>
 <translation id="4582497162516204941">Linux (ಬೀಟಾ) ನೊಂದಿಗೆ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ</translation>
-<translation id="4584780943629874245">ಪ್ಲಗ್ಇನ್ VM ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="4631887759990505102">ಕಲೆಗಾರ</translation>
 <translation id="4656293982926141856">ಈ ಕಂಪ್ಯೂಟರ್</translation>
 <translation id="4669606053856530811"><ph name="SOURCE_NAME" /> ನ ಸದಸ್ಯರೊಂದಿಗೆ ಈ ಐಟಂಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳದ ಹೊರತು ಅವರು ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತಾರೆ.</translation>
@@ -523,7 +521,6 @@
 <translation id="7339898014177206373">ಹೊಸ ವಿಂಡೊ</translation>
 <translation id="7348749398828259943">US ವರ್ಕ್‌ಮ್ಯಾನ್ ಅಂತರರಾಷ್ಟ್ರೀಯ ಕೀಬೋರ್ಡ್</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> ಐಟಂಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಪ್ಲಗ್ಇನ್ VM ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation>
 <translation id="7389722738210761877">ಥಾಯ್ ಕೀಬೋರ್ಡ್ (TIS 820-2531)</translation>
 <translation id="7396038720194014279">ಹಿಂದಿ ಕೀಬೋರ್ಡ್ (ಫೋನೆಟಿಕ್)</translation>
 <translation id="7417453074306512035">ಇಥಿಯೋಪಿಕ್ ಕೀಬೋರ್ಡ್</translation>
@@ -580,7 +577,6 @@
 <translation id="7969525169268594403">ಸ್ಲೋವೇನಿಯನ್</translation>
 <translation id="7982283708762922719">ಎತ್ತರ</translation>
 <translation id="7987485481246785146">ಸೊರಾನಿ ಕುರ್ದಿಶ್ ಅರೆಬಿಕ್-ಮೂಲದ ಕೀಬೋರ್ಡ್</translation>
-<translation id="7990715602172183602">1 ಫೋಲ್ಡರ್ ಅನ್ನು ಪ್ಲಗ್ಇನ್ VM ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation>
 <translation id="799547531016638432">ಶಾರ್ಟ್‌ಕಟ್‌ ತೆಗೆದುಹಾಕು</translation>
 <translation id="799923393800005025">ವೀಕ್ಷಿಸಬಹುದು</translation>
 <translation id="8008366997883261463">ಜಾಕ್ ರುಸ್ಸೆಲ್ ಟೆರಿಯರ್</translation>
@@ -621,7 +617,6 @@
 <translation id="8342318071240498787">ಒಂದೇ ಹೆಸರಿನೊಂದಿಗೆ ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.</translation>
 <translation id="8391950649760071442">ಲಿಪ್ಯಂತರಣ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">ಅಳತೆಗಳು</translation>
-<translation id="8400874747056634633">ಪ್ಲಗ್ಇನ್ VM ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="8412586565681117057">ತ್ವರಿತ ಇನ್‌ಪುಟ್‌ ವಿಧಾನ</translation>
 <translation id="8418113698656761985">ರೊಮೇನಿಯನ್ ಕೀಬೋರ್ಡ್</translation>
 <translation id="8432745813735585631">ಯುಎಸ್ ಕೋಲ್‌ಮಾರ್ಕ್ ಕೀಬೋರ್ಡ್</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index 9624763..de711bb7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome 기기</translation>
 <translation id="1665611772925418501">파일을 수정하지 못했습니다.</translation>
 <translation id="1673103856845176271">보안 상의 이유로 파일에 액세스하지 못했습니다.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">항목 <ph name="NUMBER_OF_ITEMS" />개 압축 중...</translation>
 <translation id="174173592514158117">모든 Play 폴더 표시</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 파일</translation>
 <translation id="457386861538956877">더보기...</translation>
 <translation id="4582497162516204941">Linux(베타)로 설치</translation>
-<translation id="4584780943629874245">플러그인 VM으로 공유</translation>
 <translation id="4631887759990505102">아티스트</translation>
 <translation id="4656293982926141856">이 컴퓨터</translation>
 <translation id="4669606053856530811">이 항목을 '<ph name="SOURCE_NAME" />'의 멤버와 공유하지 않으면 이 팀의 멤버가 항목에 더 이상 액세스할 수 없게 됩니다.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">새 창</translation>
 <translation id="7348749398828259943">미국 워크맨(국제) 키보드</translation>
 <translation id="7359359531237882347">항목 <ph name="NUMBER_OF_ITEMS" />개 복사 중...</translation>
-<translation id="7379734276381389090">플러그인 VM으로 폴더 <ph name="NUMBER_OF_ITEMS" />개가 공유되었습니다.</translation>
 <translation id="7389722738210761877">태국어 키보드(TIS 820-2531)</translation>
 <translation id="7396038720194014279">힌디어 키보드(음역 방식)</translation>
 <translation id="7417453074306512035">에티오피아어 키보드</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">슬로베니아어</translation>
 <translation id="7982283708762922719">높이</translation>
 <translation id="7987485481246785146">소라니 쿠르드어 아랍어 기반 키보드</translation>
-<translation id="7990715602172183602">플러그인 VM으로 폴더 1개가 공유되었습니다.</translation>
 <translation id="799547531016638432">바로가기 삭제</translation>
 <translation id="799923393800005025">보기 가능</translation>
 <translation id="8008366997883261463">개</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">같은 이름을 가진 파일 또는 디렉토리가 이미 존재합니다.</translation>
 <translation id="8391950649760071442">음역(emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">크기</translation>
-<translation id="8400874747056634633">플러그인 VM 공유 관리</translation>
 <translation id="8412586565681117057">빠른 입력 방법</translation>
 <translation id="8418113698656761985">루마니아어 키보드</translation>
 <translation id="8432745813735585631">영어(미국식) 콜맥 키보드</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
index 5ce1137..d3d9dce 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">„Chrome“ įrenginys</translation>
 <translation id="1665611772925418501">Nepavyko pakeisti failo.</translation>
 <translation id="1673103856845176271">Failo nepavyko pasiekti dėl saugumo.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Antrojo lygio klavišas</translation>
 <translation id="1722487484194605434">Archyvuojama elementų: <ph name="NUMBER_OF_ITEMS" />...</translation>
 <translation id="174173592514158117">Rodyti visus „Play“ aplankus</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> failas</translation>
 <translation id="457386861538956877">Daugiau...</translation>
 <translation id="4582497162516204941">Diegimas sistemoje „Linux“ (beta vers.)</translation>
-<translation id="4584780943629874245">Bendrinti su papildinio VM</translation>
 <translation id="4631887759990505102">Atlikėjas</translation>
 <translation id="4656293982926141856">Šis kompiuteris</translation>
 <translation id="4669606053856530811">„<ph name="SOURCE_NAME" />“ nariai praras prieigą, nebent šie elementai bus bendrinami su jais.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Naujas langas</translation>
 <translation id="7348749398828259943">JAV „Workman“ tarptautinė klaviatūra</translation>
 <translation id="7359359531237882347">Kopijuojama elementų: <ph name="NUMBER_OF_ITEMS" />...</translation>
-<translation id="7379734276381389090">Aplankų, bendrinamų su papildinio VM: <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">Tailandietiška klaviatūra (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi klaviatūra (fonetinė)</translation>
 <translation id="7417453074306512035">Etiopiška klaviatūra</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovėnija</translation>
 <translation id="7982283708762922719">Aukštis</translation>
 <translation id="7987485481246785146">Soranių kurdų arabiška klaviatūra</translation>
-<translation id="7990715602172183602">1 aplankas bendrinamas su papildinio VM</translation>
 <translation id="799547531016638432">Pašalinti spartųjį klavišą</translation>
 <translation id="799923393800005025">Galima peržiūrėti</translation>
 <translation id="8008366997883261463">Džeko Raselo terjeras</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Failas ar katalogas tokiu pačiu pavadinimu jau yra.</translation>
 <translation id="8391950649760071442">Transliteracija (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Aspektai</translation>
-<translation id="8400874747056634633">Tvarkyti papildinio VM bendrinimą</translation>
 <translation id="8412586565681117057">Greitasis įvesties metodas</translation>
 <translation id="8418113698656761985">Rumuniška klaviatūra</translation>
 <translation id="8432745813735585631">JAV „Colemak“ klaviatūra</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
index 6e4d560..9ca5d18 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome ierīce</translation>
 <translation id="1665611772925418501">Failu nevarēja pārveidot.</translation>
 <translation id="1673103856845176271">Failam nevar piekļūt drošības apsvērumu dēļ.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Notiek <ph name="NUMBER_OF_ITEMS" /> vienumu tilpsaspiešana...</translation>
 <translation id="174173592514158117">Rādīt visas Play mapes</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fails</translation>
 <translation id="457386861538956877">Vēl...</translation>
 <translation id="4582497162516204941">Instalēt operētājsistēmā Linux (Beta)</translation>
-<translation id="4584780943629874245">Kopīgot ar Plugin VM</translation>
 <translation id="4631887759990505102">Izpildītājs</translation>
 <translation id="4656293982926141856">Šajā datorā</translation>
 <translation id="4669606053856530811">“<ph name="SOURCE_NAME" />” dalībnieki zaudēs piekļuvi šiem vienumiem, ja tie netiks kopīgoti ar viņiem.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Jauns logs</translation>
 <translation id="7348749398828259943">Workman (ASV) starptautiskā tastatūra</translation>
 <translation id="7359359531237882347">Notiek <ph name="NUMBER_OF_ITEMS" /> vienumu kopēšana...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mapes kopīgotas ar Plugin VM</translation>
 <translation id="7389722738210761877">Taju valodas tastatūra (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindu valodas tastatūra (fonētiskā)</translation>
 <translation id="7417453074306512035">Gēzu rakstības tastatūra</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovēņu valoda</translation>
 <translation id="7982283708762922719">Augstums</translation>
 <translation id="7987485481246785146">Uz arābu valodu balstīta kurdu (Sorani) tastatūra</translation>
-<translation id="7990715602172183602">1 mape kopīgota ar Plugin VM</translation>
 <translation id="799547531016638432">Noņemt saīsni</translation>
 <translation id="799923393800005025">Var skatīt</translation>
 <translation id="8008366997883261463">Džeka Rasela terjers</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Fails vai direktorijs ar šādu nosaukumu jau pastāv.</translation>
 <translation id="8391950649760071442">Transliterācija (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Izmēri</translation>
-<translation id="8400874747056634633">Pārvaldīt kopīgošanu ar Plugin VM</translation>
 <translation id="8412586565681117057">Ātrā ievades metode</translation>
 <translation id="8418113698656761985">Rumāņu valodas tastatūra</translation>
 <translation id="8432745813735585631">ASV Kolemaka tastatūra</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
index 3e72b8f..fa55ed6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome ഉപകരണം</translation>
 <translation id="1665611772925418501">ഫയൽ പരിഷ്‌ക്കരിക്കാൻ കഴിഞ്ഞില്ല.</translation>
 <translation id="1673103856845176271">സുരക്ഷാ കാരണങ്ങളാൽ ഫയൽ ആക്‌സസ്സുചെയ്യാൻ കഴിഞ്ഞില്ല.</translation>
-<translation id="1679806121152819234">പ്ലഗിൻ VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> ഇനങ്ങൾ സിപ്പ് ചെയ്യുന്നു...</translation>
 <translation id="174173592514158117">എല്ലാ Play ഫോൾഡറുകളും കാണിക്കുക</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ഫയൽ</translation>
 <translation id="457386861538956877">കൂടുതൽ‍‌...</translation>
 <translation id="4582497162516204941">Linux (ബീറ്റ) ഉപയോഗിച്ച് ഇൻസ്‌റ്റാൾ ചെയ്യുക</translation>
-<translation id="4584780943629874245">Plugin VM ഉപയോഗിച്ച് പങ്കിടുക</translation>
 <translation id="4631887759990505102">ആര്‍ട്ടിസ്റ്റ്</translation>
 <translation id="4656293982926141856">ഈ കമ്പ്യൂട്ടറിൽ</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' എന്നതിലെ അംഗങ്ങളുമായി ഈ ഇനങ്ങൾ പങ്കിട്ടില്ലെങ്കിൽ അവർക്ക് അവയിലേക്കുള്ള ആക്‌സസ് ‌നഷ്‌ടമാകും.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">പുതിയ വിന്‍ഡോ</translation>
 <translation id="7348749398828259943">യുഎസ് വർക്ക്മാൻ ഇന്റർനാഷണൽ കീബോർഡ്</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> ഇനങ്ങൾ പകർത്തുന്നു...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> ഫോൾഡറുകൾ Plugin VM ഉപയോഗിച്ച് പങ്കിട്ടു</translation>
 <translation id="7389722738210761877">തായ് കീബോർഡ് (TIS 820-2531)</translation>
 <translation id="7396038720194014279">ഹിന്ദി കീബോർഡ് (സ്വരസൂചകം)</translation>
 <translation id="7417453074306512035">എത്യോപിക് കീബോർഡ്</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">സ്ലോവേനിയന്‍</translation>
 <translation id="7982283708762922719">ഉയരം</translation>
 <translation id="7987485481246785146">സൊറാനി കുർദ്ദിഷ് അറബിക് അധിഷ്‌ഠിത കീബോർഡ്</translation>
-<translation id="7990715602172183602">Plugin VM ഉപയോഗിച്ച് ഒരു ഫോൾഡർ പങ്കിട്ടു</translation>
 <translation id="799547531016638432">കുറുക്കുവഴി നീക്കംചെയ്യുക</translation>
 <translation id="799923393800005025">കാണാനാകുന്നത്</translation>
 <translation id="8008366997883261463">ജാക്ക് റസ്സൽ ടെറിയർ</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">സമാന പേരിലുള്ള ഫയൽ അല്ലെങ്കിൽ ഡയറക്‌റ്ററി ഇതിനകം നിലവിലുണ്ട്.</translation>
 <translation id="8391950649760071442">ലിപ്യന്തരണം (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">തലങ്ങൾ</translation>
-<translation id="8400874747056634633">Plugin VM ഉപയോഗിച്ച് പങ്കിടൽ മാനേജ് ചെയ്യുക</translation>
 <translation id="8412586565681117057">ക്വിക്ക് ടൈപ്പുചെയ്യൽ രീതി</translation>
 <translation id="8418113698656761985">റൊമാനിയന്‍ കീബോര്‍ഡ്</translation>
 <translation id="8432745813735585631">യുഎസ് കോള്‍മാക്ക് കീബോര്‍ഡ്</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 8507ffb..b3f4f52 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome डिव्हाइस</translation>
 <translation id="1665611772925418501">फाइल सुधारली जाऊ शकली नाही.</translation>
 <translation id="1673103856845176271">फाइलमध्ये सुरक्षिततेच्या कारणांमुळे प्रवेश करता येऊ शकला नाही.</translation>
-<translation id="1679806121152819234">VM प्लग-इन</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> आयटम झिप करत आहे...</translation>
 <translation id="174173592514158117">सर्व Play फोल्डर दाखवा</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फाइल</translation>
 <translation id="457386861538956877">अधिक...</translation>
 <translation id="4582497162516204941">Linux (बीटा) इंस्टॉल करा</translation>
-<translation id="4584780943629874245">प्लग इन VM सह शेअर करा</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4656293982926141856">हा कॉंप्युटर</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' च्या सदस्यांशी हे आयटम शेअर केले जात नाही तोवर त्यांना अॅक्सेस असणार नाही.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">नवीन विंडो</translation>
 <translation id="7348749398828259943">यूएस कामगार आंतरराष्ट्रीय कीबोर्ड</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> आयटम कॉपी करत आहे...</translation>
-<translation id="7379734276381389090">प्लग इन VM सोबत शेअर केलेले <ph name="NUMBER_OF_ITEMS" /> फोल्डर</translation>
 <translation id="7389722738210761877">थाई कीबोर्ड (TIS 820-2531)</translation>
 <translation id="7396038720194014279">हिंदी कीबोर्ड (फोनेटिक)</translation>
 <translation id="7417453074306512035">इथिओपिक कीबोर्ड</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">स्लोव्हेनियन</translation>
 <translation id="7982283708762922719">उंची</translation>
 <translation id="7987485481246785146">सोरानी कुर्दिश अरेबिक-आधारित कीबोर्ड</translation>
-<translation id="7990715602172183602">प्लग इन VM सोबत एक फोल्डर शेअर केला</translation>
 <translation id="799547531016638432">शॉर्टकट काढून टाका</translation>
 <translation id="799923393800005025">पाहू शकते</translation>
 <translation id="8008366997883261463">कुत्रा</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">समान नावाची एखादी फाइल किंवा डिरेक्टरी आधीपासूनच अस्तित्वात आहे.</translation>
 <translation id="8391950649760071442">लिप्यंतरण (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">परिमाण</translation>
-<translation id="8400874747056634633">प्लग इन VM शेअर करत आहे व्यवस्थापित करा</translation>
 <translation id="8412586565681117057">द्रुत इनपुट पद्धत</translation>
 <translation id="8418113698656761985">रोमानियन कीबोर्ड</translation>
 <translation id="8432745813735585631">यूएस कोलमॅक कीबोर्ड</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
index 6273767b..f86d3f4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Peranti Chrome</translation>
 <translation id="1665611772925418501">Fail tidak boleh diubah suai.</translation>
 <translation id="1673103856845176271">Fail tidak boleh diakses atas sebab keselamatan.</translation>
-<translation id="1679806121152819234">PluginVm</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Mengezip <ph name="NUMBER_OF_ITEMS" /> item...</translation>
 <translation id="174173592514158117">Tunjukkan semua folder Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Fail <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Lagi...</translation>
 <translation id="4582497162516204941">Pasang dengan Linux (Beta)</translation>
-<translation id="4584780943629874245">Kongsi dengan Plugin VM</translation>
 <translation id="4631887759990505102">Artis</translation>
 <translation id="4656293982926141856">Komputer ini</translation>
 <translation id="4669606053856530811">Ahli '<ph name="SOURCE_NAME" />' akan kehilangan akses melainkan item ini dikongsi dengan mereka.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Tetingkap baharu</translation>
 <translation id="7348749398828259943">Papan kekunci US Workman international</translation>
 <translation id="7359359531237882347">Menyalin <ph name="NUMBER_OF_ITEMS" /> item...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> folder dikongsi dengan Plugin VM</translation>
 <translation id="7389722738210761877">Papan kekunci bahasa Thai (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Papan kekunci bahasa Hindi (Fonetik)</translation>
 <translation id="7417453074306512035">Papan kekunci bahasa Ethiopia</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Bahasa Slovenia</translation>
 <translation id="7982283708762922719">Tinggi</translation>
 <translation id="7987485481246785146">Papan kekunci berdasarkan bahasa Arab Kurdish Sorani</translation>
-<translation id="7990715602172183602">1 folder dikongsi dengan Plugin VM</translation>
 <translation id="799547531016638432">Alih keluar pintasan</translation>
 <translation id="799923393800005025">Boleh lihat</translation>
 <translation id="8008366997883261463">Anjing Jack Russel Terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Fail atau direktori dengan nama yang sama telah wujud.</translation>
 <translation id="8391950649760071442">Pengalihan huruf (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensi</translation>
-<translation id="8400874747056634633">Urus perkongsian Plugin VM</translation>
 <translation id="8412586565681117057">Kaedah input pantas</translation>
 <translation id="8418113698656761985">Papan kekunci Romania</translation>
 <translation id="8432745813735585631">Papan kekunci AS Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index fa758b7..333ac01 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-apparaat</translation>
 <translation id="1665611772925418501">Het bestand kan niet worden aangepast.</translation>
 <translation id="1673103856845176271">Uit veiligheidsoverwegingen kan het bestand niet worden geopend.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> items inpakken...</translation>
 <translation id="174173592514158117">Alle Play-mappen weergeven</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-bestand</translation>
 <translation id="457386861538956877">Meer...</translation>
 <translation id="4582497162516204941">Installeren met Linux (bèta)</translation>
-<translation id="4584780943629874245">Delen met Plugin VM</translation>
 <translation id="4631887759990505102">Artiest</translation>
 <translation id="4656293982926141856">Deze computer</translation>
 <translation id="4669606053856530811">Leden van '<ph name="SOURCE_NAME" />' hebben geen toegang meer, tenzij deze items met ze zijn gedeeld.</translation>
@@ -530,7 +528,6 @@
 <translation id="7339898014177206373">Nieuw venster</translation>
 <translation id="7348749398828259943">Amerikaans Workman-toetsenbord (internationaal)</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> items kopiëren...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mappen gedeeld met Plugin VM</translation>
 <translation id="7389722738210761877">Thais toetsenbord (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi toetsenbord (fonetisch)</translation>
 <translation id="7417453074306512035">Ethiopisch toetsenbord</translation>
@@ -593,7 +590,6 @@
 <translation id="7969525169268594403">Sloveens</translation>
 <translation id="7982283708762922719">Hoogte</translation>
 <translation id="7987485481246785146">Op Arabisch gebaseerd toetsenbord voor Soranî</translation>
-<translation id="7990715602172183602">Eén map gedeeld met Plugin VM</translation>
 <translation id="799547531016638432">Snelle link verwijderen</translation>
 <translation id="799923393800005025">Kan weergeven</translation>
 <translation id="8008366997883261463">Jack Russell-terriër</translation>
@@ -634,7 +630,6 @@
 <translation id="8342318071240498787">Er bestaat al een bestand of map met dezelfde naam.</translation>
 <translation id="8391950649760071442">Transliteratie (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Afmetingen</translation>
-<translation id="8400874747056634633">Het delen van Plugin VM beheren</translation>
 <translation id="8412586565681117057">Snelle invoermethode</translation>
 <translation id="8418113698656761985">Roemeens toetsenbord</translation>
 <translation id="8432745813735585631">Amerikaans Colemak-toetsenbord</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index 8a93c690..94811225 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-enhet</translation>
 <translation id="1665611772925418501">Kunne ikke endre filen.</translation>
 <translation id="1673103856845176271">Filen kunne ikke åpnes av sikkerhetsårsaker.</translation>
-<translation id="1679806121152819234">VM for programtillegg</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Zipper <ph name="NUMBER_OF_ITEMS" /> elementer …</translation>
 <translation id="174173592514158117">Vis alle Play-mapper</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Mer</translation>
 <translation id="4582497162516204941">Installer med Linux (beta)</translation>
-<translation id="4584780943629874245">Del med VM for programtillegg</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4656293982926141856">Denne datamaskinen</translation>
 <translation id="4669606053856530811">Medlemmer av «<ph name="SOURCE_NAME" />» mister tilgangen, med mindre disse elementene deles med dem.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nytt vindu</translation>
 <translation id="7348749398828259943">Internasjonalt Workman-tastatur (USA)</translation>
 <translation id="7359359531237882347">Kopierer <ph name="NUMBER_OF_ITEMS" /> elementer …</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mapper delt med VM for programtillegg</translation>
 <translation id="7389722738210761877">Thai-tastatur (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindi-tastatur (fonetisk)</translation>
 <translation id="7417453074306512035">Etiopisk tastatur</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovensk</translation>
 <translation id="7982283708762922719">Høyde</translation>
 <translation id="7987485481246785146">Arabisk-basert tastatur for kurdisk (sorani)</translation>
-<translation id="7990715602172183602">1 mappe delt med VM for programtillegg</translation>
 <translation id="799547531016638432">Fjern snarveien</translation>
 <translation id="799923393800005025">Kan se</translation>
 <translation id="8008366997883261463">Jack Russell-terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Det finnes allerede en fil eller en katalog med det samme navnet.</translation>
 <translation id="8391950649760071442">Translitterasjon (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensjoner</translation>
-<translation id="8400874747056634633">Administrer deling med VM for programtillegg</translation>
 <translation id="8412586565681117057">Rask inndatametode</translation>
 <translation id="8418113698656761985">Rumensk tastatur</translation>
 <translation id="8432745813735585631">Amerikansk tastatur (Colemak)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index 3d7dd4d..06125d0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Urządzenie z Chrome</translation>
 <translation id="1665611772925418501">Nie można zmodyfikować pliku.</translation>
 <translation id="1673103856845176271">Nie można uzyskać dostępu do pliku ze względów bezpieczeństwa.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Pakuję elementy (<ph name="NUMBER_OF_ITEMS" />)...</translation>
 <translation id="174173592514158117">Pokaż wszystkie foldery Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Plik <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Więcej</translation>
 <translation id="4582497162516204941">Zainstaluj za pomocą Linuksa (Beta)</translation>
-<translation id="4584780943629874245">Udostępniaj oprogramowaniu Plugin VM</translation>
 <translation id="4631887759990505102">Wykonawca</translation>
 <translation id="4656293982926141856">Ten komputer</translation>
 <translation id="4669606053856530811">Osoby z uprawnieniami do: „<ph name="SOURCE_NAME" />” utracą dostęp do tych elementów, chyba że zostaną one im udostępnione.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nowe okno</translation>
 <translation id="7348749398828259943">Amerykańska klawiatura międzynarodowa Workman</translation>
 <translation id="7359359531237882347">Kopiuję elementy (<ph name="NUMBER_OF_ITEMS" />)...</translation>
-<translation id="7379734276381389090">Udostępniono foldery (<ph name="NUMBER_OF_ITEMS" />) oprogramowaniu Plugin VM</translation>
 <translation id="7389722738210761877">Klawiatura tajska (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Klawiatura hindi (fonetyczna)</translation>
 <translation id="7417453074306512035">Klawiatura etiopska</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Słoweński</translation>
 <translation id="7982283708762922719">Wysokość</translation>
 <translation id="7987485481246785146">Klawiatura dla języka sorani oparta na arabskiej</translation>
-<translation id="7990715602172183602">Udostępniono jeden folder oprogramowaniu Plugin VM</translation>
 <translation id="799547531016638432">Usuń skrót</translation>
 <translation id="799923393800005025">Może wyświetlać</translation>
 <translation id="8008366997883261463">Pies</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Plik lub katalog o tej nazwie już istnieje.</translation>
 <translation id="8391950649760071442">Transliteracja (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Wymiary</translation>
-<translation id="8400874747056634633">Zarządzaj udostępnianiem oprogramowaniu Plugin VM</translation>
 <translation id="8412586565681117057">Szybka metoda wprowadzania</translation>
 <translation id="8418113698656761985">Klawiatura rumuńska</translation>
 <translation id="8432745813735585631">Klawiatura amerykańska (Colemak)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
index 704c497..0891d92 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositivo Chrome</translation>
 <translation id="1665611772925418501">Não foi possível modificar o arquivo.</translation>
 <translation id="1673103856845176271">Não foi possível acessar o arquivo por motivos de segurança.</translation>
-<translation id="1679806121152819234">Plug-in VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Compactando <ph name="NUMBER_OF_ITEMS" /> itens…</translation>
 <translation id="174173592514158117">Mostrar todas as pastas do Google Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Arquivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mais...</translation>
 <translation id="4582497162516204941">Instalar com o Linux (Beta)</translation>
-<translation id="4584780943629874245">Compartilhar com a VM do plug-in</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Neste computador</translation>
 <translation id="4669606053856530811">Membros de '<ph name="SOURCE_NAME" />' perderão acesso a menos que esses itens sejam compartilhados com eles.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nova janela</translation>
 <translation id="7348749398828259943">Teclado Workman internacional dos EUA</translation>
 <translation id="7359359531237882347">Copiando <ph name="NUMBER_OF_ITEMS" /> itens…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> pastas compartilhadas com a VM do plug-in</translation>
 <translation id="7389722738210761877">Teclado tailandês (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Teclado hindi (fonético)</translation>
 <translation id="7417453074306512035">Teclado etíope</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Esloveno</translation>
 <translation id="7982283708762922719">Altura</translation>
 <translation id="7987485481246785146">Teclado curdo sorâni baseado em árabe</translation>
-<translation id="7990715602172183602">1 pasta compartilhada com a VM do plug-in</translation>
 <translation id="799547531016638432">Remover atalho</translation>
 <translation id="799923393800005025">Pode ver</translation>
 <translation id="8008366997883261463">Jack Russell Terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Já existe um arquivo ou diretório com o mesmo nome.</translation>
 <translation id="8391950649760071442">Transliteração (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensões</translation>
-<translation id="8400874747056634633">Gerenciar compartilhamento da VM do plug-in</translation>
 <translation id="8412586565681117057">Método de entrada rápida</translation>
 <translation id="8418113698656761985">Teclado romeno</translation>
 <translation id="8432745813735585631">Teclado americano Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index 08a934641..9ffdccf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispositivo Chrome</translation>
 <translation id="1665611772925418501">Não foi possível modificar o ficheiro.</translation>
 <translation id="1673103856845176271">Não foi possível aceder ao ficheiro por razões de segurança.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">A comprimir <ph name="NUMBER_OF_ITEMS" /> itens…</translation>
 <translation id="174173592514158117">Mostrar todas as pastas do Google Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Ficheiro <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mais...</translation>
 <translation id="4582497162516204941">Instalar com o Linux (Beta)</translation>
-<translation id="4584780943629874245">Partilhar com o Plugin VM</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Este computador</translation>
 <translation id="4669606053856530811">Os membros de "<ph name="SOURCE_NAME" />" irão perder o acesso, exceto se estes itens forem partilhados com eles.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nova janela</translation>
 <translation id="7348749398828259943">Teclado Workman internacional dos EUA</translation>
 <translation id="7359359531237882347">A copiar <ph name="NUMBER_OF_ITEMS" /> itens…</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> pastas partilhadas com o Plugin VM</translation>
 <translation id="7389722738210761877">Teclado tailandês (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Teclado hindi (fonética)</translation>
 <translation id="7417453074306512035">Teclado etíope</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Esloveno</translation>
 <translation id="7982283708762922719">Altura</translation>
 <translation id="7987485481246785146">Teclado curdo sorani baseado no árabe</translation>
-<translation id="7990715602172183602">1 pasta partilhada com o Plugin VM</translation>
 <translation id="799547531016638432">Remover atalho</translation>
 <translation id="799923393800005025">Pode ver</translation>
 <translation id="8008366997883261463">Jack Russell Terrier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Já existe um ficheiro ou diretório com o mesmo nome.</translation>
 <translation id="8391950649760071442">Transliteração (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensões</translation>
-<translation id="8400874747056634633">Gerir a partilha do Plugin VM</translation>
 <translation id="8412586565681117057">Método de introdução rápido</translation>
 <translation id="8418113698656761985">Teclado romeno</translation>
 <translation id="8432745813735585631">Teclado americano (Colemak)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
index 95eb197..3e80bb9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Dispozitiv Chrome</translation>
 <translation id="1665611772925418501">Fișierul nu a putut fi modificat.</translation>
 <translation id="1673103856845176271">Fișierul nu a putut fi accesat din motive de securitate.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Se arhivează <ph name="NUMBER_OF_ITEMS" /> elemente...</translation>
 <translation id="174173592514158117">Afișează toate dosarele Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Fișier <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mai multe...</translation>
 <translation id="4582497162516204941">Instalează cu Linux (Beta)</translation>
-<translation id="4584780943629874245">Permite accesul pentru Plugin VM</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4656293982926141856">Acest computer</translation>
 <translation id="4669606053856530811">Membrii „<ph name="SOURCE_NAME" />” vor pierde accesul, exceptând cazul în care li se permite accesul la aceste articole.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Fereastră nouă</translation>
 <translation id="7348749398828259943">Tastatură S.U.A. Workman internațională</translation>
 <translation id="7359359531237882347">Se copiază <ph name="NUMBER_OF_ITEMS" /> elemente.</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> dosare cu acces permis pentru Plugin VM</translation>
 <translation id="7389722738210761877">Tastatură thailandeză (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Tastatură hindi (Fonetică)</translation>
 <translation id="7417453074306512035">Tastatură etiopiană</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovenă</translation>
 <translation id="7982283708762922719">Înălțime</translation>
 <translation id="7987485481246785146">Tastatură kurdă sorani bazată pe arabă</translation>
-<translation id="7990715602172183602">Un folder cu acces permis pentru Plugin VM</translation>
 <translation id="799547531016638432">Eliminați comanda rapidă</translation>
 <translation id="799923393800005025">Poate vedea</translation>
 <translation id="8008366997883261463">Terier</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Un fișier sau un director cu același nume există deja.</translation>
 <translation id="8391950649760071442">Transliterație (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensiuni</translation>
-<translation id="8400874747056634633">Gestionează utilizarea comună cu Plugin VM</translation>
 <translation id="8412586565681117057">Metoda de introducere rapidă a textului</translation>
 <translation id="8418113698656761985">Tastatură română</translation>
 <translation id="8432745813735585631">Tastatură S.U.A. Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index 98321007..f6ad9ca 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Устройство Chrome</translation>
 <translation id="1665611772925418501">Не удалось изменить файл.</translation>
 <translation id="1673103856845176271">Доступ к файлу ограничен по соображениям безопасности.</translation>
-<translation id="1679806121152819234">Плагин ВМ</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Архивирование объектов (<ph name="NUMBER_OF_ITEMS" />)…</translation>
 <translation id="174173592514158117">Показать все папки Google Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-файл</translation>
 <translation id="457386861538956877">Ещё...</translation>
 <translation id="4582497162516204941">Установка Linux (бета)</translation>
-<translation id="4584780943629874245">Предоставить доступ Plugin VM</translation>
 <translation id="4631887759990505102">Исполнитель</translation>
 <translation id="4656293982926141856">С компьютера</translation>
 <translation id="4669606053856530811">Пользователи общего диска "<ph name="SOURCE_NAME" />" больше не смогут использовать эти объекты, если к ним не будет включен общий доступ.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Новое окно</translation>
 <translation id="7348749398828259943">Раскладка США (Workman, международная)</translation>
 <translation id="7359359531237882347">Копирование объектов (<ph name="NUMBER_OF_ITEMS" />)…</translation>
-<translation id="7379734276381389090">Plugin VM предоставлен доступ к нескольким папкам (<ph name="NUMBER_OF_ITEMS" />)</translation>
 <translation id="7389722738210761877">Тайская раскладка (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Клавиатура хинди (фонетическая)</translation>
 <translation id="7417453074306512035">Эфиопская раскладка</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Словенский</translation>
 <translation id="7982283708762922719">Высота</translation>
 <translation id="7987485481246785146">Раскладка сорани (арабский алфавит)</translation>
-<translation id="7990715602172183602">Plugin VM предоставлен доступ к 1 папке</translation>
 <translation id="799547531016638432">Удалить ярлык</translation>
 <translation id="799923393800005025">Чтение</translation>
 <translation id="8008366997883261463">Собака</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Такой файл или каталог уже существуют.</translation>
 <translation id="8391950649760071442">Транслитерация (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Размеры</translation>
-<translation id="8400874747056634633">Настроить доступ Plugin VM</translation>
 <translation id="8412586565681117057">Быстрое письмо</translation>
 <translation id="8418113698656761985">Румынская раскладка</translation>
 <translation id="8432745813735585631">Американская раскладка (Colemak)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index 17eadd3..670f1df 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Zariadenie Chrome</translation>
 <translation id="1665611772925418501">Súbor sa nepodarilo upraviť.</translation>
 <translation id="1673103856845176271">Súbor je z bezpečnostných dôvodov nedostupný.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Prebieha komprimovanie <ph name="NUMBER_OF_ITEMS" /> položiek…</translation>
 <translation id="174173592514158117">Zobraziť všetky priečinky Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Súbor <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Viac...</translation>
 <translation id="4582497162516204941">Nainštalovať pomocou systému Linux (beta)</translation>
-<translation id="4584780943629874245">Zdieľať doplnkom Plugin VM</translation>
 <translation id="4631887759990505102">Interpret</translation>
 <translation id="4656293982926141856">Tento počítač</translation>
 <translation id="4669606053856530811">Členovia zdroja <ph name="SOURCE_NAME" /> stratia prístup, pokiaľ s nimi tieto položky nezačnete zdieľať.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nové okno</translation>
 <translation id="7348749398828259943">Medzinárodná klávesnica US Workman</translation>
 <translation id="7359359531237882347">Kopíruje sa viacero položiek (<ph name="NUMBER_OF_ITEMS" />)…</translation>
-<translation id="7379734276381389090">Doplnkom Plugin VM zdieľate tento počet priečinkov: <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">Thajská klávesnica (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hindská klávesnica (fonetický prepis)</translation>
 <translation id="7417453074306512035">Etiópska klávesnica</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovinčina</translation>
 <translation id="7982283708762922719">Výška</translation>
 <translation id="7987485481246785146">Kurdská klávesnica (sorání) s arabským rozložením</translation>
-<translation id="7990715602172183602">1 priečinok sa zdieľa doplnkom Plugin VM</translation>
 <translation id="799547531016638432">Odstrániť skratku</translation>
 <translation id="799923393800005025">Môže zobraziť</translation>
 <translation id="8008366997883261463">Jack Russell teriér</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Súbor alebo priečinok s daným názvom už existuje.</translation>
 <translation id="8391950649760071442">Prepis (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Rozmery</translation>
-<translation id="8400874747056634633">Spravovať zdieľanie doplnkom Plugin VM</translation>
 <translation id="8412586565681117057">Rýchla metóda vstupu</translation>
 <translation id="8418113698656761985">rumunská klávesnica</translation>
 <translation id="8432745813735585631">americká klávesnica s rozložením klávesov Colemak</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index 229112f3..1c972ff 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Naprava Chrome</translation>
 <translation id="1665611772925418501">Datoteke ni bilo mogoče spremeniti.</translation>
 <translation id="1673103856845176271">Do datoteke zaradi varnosti ni bilo mogoče dostopati.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Ustvarjanje arhiva zip s toliko elementi: <ph name="NUMBER_OF_ITEMS" /> …</translation>
 <translation id="174173592514158117">Prikaz vseh map v Googlu Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Datoteka <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Več ...</translation>
 <translation id="4582497162516204941">Namestitev v Linuxu (beta)</translation>
-<translation id="4584780943629874245">Deljenje s Plugin VM</translation>
 <translation id="4631887759990505102">Izvajalec</translation>
 <translation id="4656293982926141856">V tem računalniku</translation>
 <translation id="4669606053856530811">Člani skupine »<ph name="SOURCE_NAME" />« bodo izgubili dostop, razen če te elemente delite z njimi.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Novo okno</translation>
 <translation id="7348749398828259943">Mednarodna tipkovnica za angleščino (Združene države) – Workman</translation>
 <translation id="7359359531237882347">Kopiranje toliko elementov: <ph name="NUMBER_OF_ITEMS" /> …</translation>
-<translation id="7379734276381389090">S Plugin VM je deljenih toliko map: <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">Tipkovnica za tajščino (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Tipkovnica za hindijščino (fonetična)</translation>
 <translation id="7417453074306512035">Tipkovnica za etiopščino</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">slovenščina</translation>
 <translation id="7982283708762922719">Višina</translation>
 <translation id="7987485481246785146">Tipkovnica za soransko kurdščino na arabski osnovi</translation>
-<translation id="7990715602172183602">1 mapa je deljena s Plugin VM</translation>
 <translation id="799547531016638432">Odstrani bližnjico</translation>
 <translation id="799923393800005025">Ogled dovoljen</translation>
 <translation id="8008366997883261463">Pes</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Datoteka ali imenik s tem imenom že obstaja.</translation>
 <translation id="8391950649760071442">Prečrkovanje (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Mere</translation>
-<translation id="8400874747056634633">Upravljanje deljenja Plugin VM</translation>
 <translation id="8412586565681117057">Hitri način vnosa</translation>
 <translation id="8418113698656761985">Romunska tipkovnica</translation>
 <translation id="8432745813735585631">Angleška tipkovnica Colemak (ZDA)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 6d1412ab..d695c60 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome уређај</translation>
 <translation id="1665611772925418501">Није могуће изменити датотеку.</translation>
 <translation id="1673103856845176271">Није могуће приступити датотеци из безбедносних разлога.</translation>
-<translation id="1679806121152819234">Додатна компонента VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Ставке (<ph name="NUMBER_OF_ITEMS" />) се додају у датотеку...</translation>
 <translation id="174173592514158117">Прикажи све Play директоријуме</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Датотека <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Још...</translation>
 <translation id="4582497162516204941">Инсталирај за Linux (бета)</translation>
-<translation id="4584780943629874245">Дели са додатном компонентом VM</translation>
 <translation id="4631887759990505102">Извођач</translation>
 <translation id="4656293982926141856">Овај рачунар</translation>
 <translation id="4669606053856530811">Чланови из „<ph name="SOURCE_NAME" />“ ће изгубити приступ ако се ове ставке не деле са њима.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Нови прозор</translation>
 <translation id="7348749398828259943">Америчка Workman интернационална тастатура</translation>
 <translation id="7359359531237882347">Копирају се ставке (<ph name="NUMBER_OF_ITEMS" />)...</translation>
-<translation id="7379734276381389090">Директоријуми (<ph name="NUMBER_OF_ITEMS" />) се деле са додатном компонентом VM</translation>
 <translation id="7389722738210761877">Тајска тастатура (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Хинди тастатура (фонетска)</translation>
 <translation id="7417453074306512035">Етиопљанска тастатура</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">словеначки</translation>
 <translation id="7982283708762922719">Висина</translation>
 <translation id="7987485481246785146">Сорани курдска тастатура заснована на арапском</translation>
-<translation id="7990715602172183602">1 директоријум се дели са додатном компонентом VM</translation>
 <translation id="799547531016638432">Уклони пречицу</translation>
 <translation id="799923393800005025">Може да прегледа</translation>
 <translation id="8008366997883261463">Пас</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Већ постоји датотека или директоријум са истим називом.</translation>
 <translation id="8391950649760071442">Транслитерација (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Димензије</translation>
-<translation id="8400874747056634633">Управљајте дељењем додатне компоненте VM</translation>
 <translation id="8412586565681117057">Брзи метод уноса</translation>
 <translation id="8418113698656761985">Језик тастатуре: румунски</translation>
 <translation id="8432745813735585631">Језик тастатуре: енглески (САД Colemak)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
index 1294955..411afcb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome-enhet</translation>
 <translation id="1665611772925418501">Det gick inte att ändra filen.</translation>
 <translation id="1673103856845176271">Det gick inte att öppna filen av säkerhetsskäl.</translation>
-<translation id="1679806121152819234">PluginVM</translation>
 <translation id="169515659049020177">Skift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> objekt komprimeras ...</translation>
 <translation id="174173592514158117">Visa alla Play-mappar</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Mer...</translation>
 <translation id="4582497162516204941">Installera med Linux (beta)</translation>
-<translation id="4584780943629874245">Dela med VM-plugin</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4656293982926141856">Den här datorn</translation>
 <translation id="4669606053856530811">De som använder <ph name="SOURCE_NAME" /> förlorar åtkomsten till objekten såvida de inte delas med dem.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Nytt fönster</translation>
 <translation id="7348749398828259943">Internationellt Workman-tangentbord för USA</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> objekt kopieras ...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> mappar delas med VM-plugin</translation>
 <translation id="7389722738210761877">Tangentbord för thailändska (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Tangentbord för hindi (fonetiskt)</translation>
 <translation id="7417453074306512035">Tangentbord för etiopiska</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">slovenska</translation>
 <translation id="7982283708762922719">Höjd</translation>
 <translation id="7987485481246785146">Tangentbord baserat på sorani/kurdiska och arabiska</translation>
-<translation id="7990715602172183602">1 mapp delades med VM-plugin</translation>
 <translation id="799547531016638432">Ta bort genväg</translation>
 <translation id="799923393800005025">Kan visa</translation>
 <translation id="8008366997883261463">Hund</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Det finns redan en fil eller en katalog med samma namn.</translation>
 <translation id="8391950649760071442">Translitterering (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Dimensioner</translation>
-<translation id="8400874747056634633">Hantera delning för VM-plugin</translation>
 <translation id="8412586565681117057">Snabb inmatningsmetod</translation>
 <translation id="8418113698656761985">Rumänskt tangentbord</translation>
 <translation id="8432745813735585631">Colemak-tangentbord för USA</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
index c38d57b6..15122b6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Kifaa cha Chrome</translation>
 <translation id="1665611772925418501">Faili isingeweza kurekebishwa.</translation>
 <translation id="1673103856845176271">Faili isingeweza kufikiwa kwa sababu za usalama.</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Hama</translation>
 <translation id="1722487484194605434">Inabana vipengee <ph name="NUMBER_OF_ITEMS" /> ...</translation>
 <translation id="174173592514158117">Onyesha folda zote za Google Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Faili ya <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Zaidi...</translation>
 <translation id="4582497162516204941">Sakinisha ukitumia Linux (Beta)</translation>
-<translation id="4584780943629874245">Shiriki na Programu-Jalizi ya VM</translation>
 <translation id="4631887759990505102">Msanii</translation>
 <translation id="4656293982926141856">Kompyuta hii</translation>
 <translation id="4669606053856530811">Wanachama wa '<ph name="SOURCE_NAME" />' hawataweza kuifikia isipokuwa vipengee hivi viwe vinashirikiwa nao.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Dirisha jipya</translation>
 <translation id="7348749398828259943">Kibodi ya US Workman ya kimataifa</translation>
 <translation id="7359359531237882347">Inanakili vipengee <ph name="NUMBER_OF_ITEMS" />...</translation>
-<translation id="7379734276381389090">Umeshiriki folda <ph name="NUMBER_OF_ITEMS" /> na Programu-Jalizi ya VM</translation>
 <translation id="7389722738210761877">Kibodi ya Kithai (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Kibodi ya Kihindi (Fonetiki)</translation>
 <translation id="7417453074306512035">Kibodi ya Kiethiopia</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Kislovenia</translation>
 <translation id="7982283708762922719">Urefu</translation>
 <translation id="7987485481246785146">Kibodi inayolingana na Kiarabu cha Kurdu ya Sorani</translation>
-<translation id="7990715602172183602">Umeshiriki folda 1 na Programu-Jalizi ya VM</translation>
 <translation id="799547531016638432">Ondoa njia ya mkato</translation>
 <translation id="799923393800005025">Unaweza kuangalia</translation>
 <translation id="8008366997883261463">Mbwa</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Faili au saraka iliyo na jina sawa tayari ipo.</translation>
 <translation id="8391950649760071442">Unukuzi wa mfumo wa kuandika (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Vipimo</translation>
-<translation id="8400874747056634633">Dhibiti Hali ya Kushiriki na Programu-Jalizi ya VM</translation>
 <translation id="8412586565681117057">Mbinu ya kuingiza data ya Quick</translation>
 <translation id="8418113698656761985">Kibodi ya Kiromania</translation>
 <translation id="8432745813735585631">Kibodi ya Colemak ya Marekani</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
index 7411919..86a9834 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -286,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> கோப்பு</translation>
 <translation id="457386861538956877">மேலும்...</translation>
 <translation id="4582497162516204941">Linux (பீட்டா) மூலம் நிறுவு</translation>
-<translation id="4584780943629874245">VM செருகு நிரல் மூலம் பகிர்</translation>
 <translation id="4631887759990505102">கலைஞர்</translation>
 <translation id="4656293982926141856">இந்தக் கம்ப்யூட்டர்</translation>
 <translation id="4669606053856530811">இந்தக் கோப்புகளை '<ph name="SOURCE_NAME" />' இன் உறுப்பினர்களுடன் பகிரவில்லை எனில், அவர்கள் அவற்றுக்கான அணுகலை இழப்பார்கள்.</translation>
@@ -528,7 +527,6 @@
 <translation id="7339898014177206373">புதிய சாளரம்</translation>
 <translation id="7348749398828259943">யுஎஸ் ஒர்க்மேன் இன்டர்நேஷனல் விசைப்பலகை</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> உள்ளடக்கங்களை நகலெடுக்கிறது...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> கோப்புகள் VM செருகு நிரலுடன் பகிரப்பட்டன</translation>
 <translation id="7389722738210761877">தாய் விசைப்பலகை (TIS 820-2531)</translation>
 <translation id="7396038720194014279">இந்தி விசைப்பலகை (ஒலிப்புமுறை)</translation>
 <translation id="7417453074306512035">எத்தியோபிக் விசைப்பலகை</translation>
@@ -591,7 +589,6 @@
 <translation id="7969525169268594403">ஸ்லோவேனியன்</translation>
 <translation id="7982283708762922719">உயரம்</translation>
 <translation id="7987485481246785146">சொரானி குர்டிஷ் அரபிக் விசைப்பலகை</translation>
-<translation id="7990715602172183602">ஒரு கோப்புறை VM செருகு நிரலுடன் பகிரப்பட்டது</translation>
 <translation id="799547531016638432">ஷார்ட்கட்டை அகற்று</translation>
 <translation id="799923393800005025">பார்க்கலாம்</translation>
 <translation id="8008366997883261463">ஜாக் ரஸ்ஸல் டெர்ரியர்</translation>
@@ -632,7 +629,6 @@
 <translation id="8342318071240498787">ஒரே பெயருடைய கோப்பு  அல்லது கோப்பகம் ஏற்கனவே உள்ளன.</translation>
 <translation id="8391950649760071442">ஒலிபெயர்ப்பு (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">பரிமாணங்கள்</translation>
-<translation id="8400874747056634633">VM செருகுநிரல் பகிர்வை நிர்வகி</translation>
 <translation id="8412586565681117057">விரைவு உள்ளீட்டு முறை</translation>
 <translation id="8418113698656761985">ரோமானியன் விசைப்பலகை</translation>
 <translation id="8432745813735585631">யுஎஸ் கோல்மேக் விசைப்பலகை</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index da05b8a..1f9cf3a4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome పరికరం</translation>
 <translation id="1665611772925418501">ఫైల్‌ను సవరించడం సాధ్యపడదు.</translation>
 <translation id="1673103856845176271">భద్రతా కారణాల దృష్ట్యా ఫైల్‌ను ప్రాప్యత చేయడం సాధ్యపడదు.</translation>
-<translation id="1679806121152819234">ప్లగ్ఇన్ VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> అంశాలను జిప్ చేస్తోంది...</translation>
 <translation id="174173592514158117">అన్ని ప్లే ఫోల్డర్‌లను చూపు</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ఫైల్</translation>
 <translation id="457386861538956877">మరిన్ని...</translation>
 <translation id="4582497162516204941">Linux (బీటా)తో ఇన్‌స్టాల్ చేయండి</translation>
-<translation id="4584780943629874245">ప్లగ్ఇన్ VMతో షేర్ చేయి</translation>
 <translation id="4631887759990505102">చిత్రకారుడు</translation>
 <translation id="4656293982926141856">ఈ కంప్యూటర్</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' యొక్క సభ్యులతో ఈ అంశాలను షేర్ చేస్తే మినహా వారు యాక్సెస్‌ను కోల్పోతారు.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">కొత్త విండో</translation>
 <translation id="7348749398828259943">US వర్క్‌మాన్ అంతర్జాతీయ కీబోర్డ్</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> అంశాలను కాపీ చేస్తోంది...</translation>
-<translation id="7379734276381389090"><ph name="NUMBER_OF_ITEMS" /> ఫోల్డర్‌లు ప్లగ్ఇన్ VMతో షేర్ చేయబడ్డాయి</translation>
 <translation id="7389722738210761877">థాయ్ కీబోర్డ్ (TIS 820-2531)</translation>
 <translation id="7396038720194014279">హిందీ కీబోర్డ్ (ఫొనెటిక్)</translation>
 <translation id="7417453074306512035">ఇథియోపిక్ కీబోర్డ్</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">స్లోవేనియన్</translation>
 <translation id="7982283708762922719">ఎత్తు</translation>
 <translation id="7987485481246785146">సొరానీ కుర్డిష్ అరబిక్-ఆధారిత కీబోర్డ్</translation>
-<translation id="7990715602172183602">1 ఫోల్డర్ ప్లగ్ఇన్ VMతో షేర్ చేయబడింది</translation>
 <translation id="799547531016638432">షార్ట్‌కట్‌ను తీసివేయి</translation>
 <translation id="799923393800005025">వీక్షించవచ్చు</translation>
 <translation id="8008366997883261463">జాక్ రస్సెల్ టెర్రియర్</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">ఫైల్ లేదా డైరెక్టరీ అదే పేరుతో ఇప్పటికే ఉనికిలో ఉంది.</translation>
 <translation id="8391950649760071442">లిప్యంతరీకరణ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">కొలతలు</translation>
-<translation id="8400874747056634633">ప్లగ్ఇన్ VM షేరింగ్‌ను నిర్వహించు</translation>
 <translation id="8412586565681117057">Quick ఇన్‌పుట్ పద్ధతి</translation>
 <translation id="8418113698656761985">రోమనియన్ కీబోర్డ్</translation>
 <translation id="8432745813735585631">US సొలెమక్ కీబోర్డ్</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index 5269021..ca9cf98 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">อุปกรณ์ Chrome</translation>
 <translation id="1665611772925418501">ไม่สามารถแก้ไขไฟล์</translation>
 <translation id="1673103856845176271">ไม่สามารถเข้าถึงไฟล์เนื่องจากเหตุผลด้านความปลอดภัย</translation>
-<translation id="1679806121152819234">VM ปลั๊กอิน</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">กำลังซิป <ph name="NUMBER_OF_ITEMS" /> รายการ...</translation>
 <translation id="174173592514158117">แสดงโฟลเดอร์ Play ทั้งหมด</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">ไฟล์ <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">เพิ่มเติม...</translation>
 <translation id="4582497162516204941">ติดตั้งด้วย Linux (เบต้า)</translation>
-<translation id="4584780943629874245">แชร์กับ Plugin VM</translation>
 <translation id="4631887759990505102">ศิลปิน</translation>
 <translation id="4656293982926141856">คอมพิวเตอร์เครื่องนี้</translation>
 <translation id="4669606053856530811">สมาชิกของ "<ph name="SOURCE_NAME" />" จะสูญเสียสิทธิ์เข้าถึง เว้นแต่มีการแชร์รายการเหล่านี้กับสมาชิกดังกล่าว</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">หน้าต่างใหม่</translation>
 <translation id="7348749398828259943">แป้นพิมพ์ Workman สหรัฐฯ แบบสากล</translation>
 <translation id="7359359531237882347">กำลังคัดลอก <ph name="NUMBER_OF_ITEMS" /> รายการ...</translation>
-<translation id="7379734276381389090">แชร์กับ Plugin VM แล้ว <ph name="NUMBER_OF_ITEMS" /> โฟลเดอร์</translation>
 <translation id="7389722738210761877">แป้นพิมพ์ภาษาไทย (มอก. 820-2531)</translation>
 <translation id="7396038720194014279">แป้นพิมพ์ภาษาฮินดี (คำที่ใช้ออกเสียง)</translation>
 <translation id="7417453074306512035">แป้นพิมพ์ภาษาเอธิโอเปีย</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">สโลวีเนีย</translation>
 <translation id="7982283708762922719">ความสูง</translation>
 <translation id="7987485481246785146">แป้นพิมพ์ภาษาเคิร์ดโซรานีแบบอารบิก</translation>
-<translation id="7990715602172183602">แชร์กับ Plugin VM แล้ว 1 โฟลเดอร์</translation>
 <translation id="799547531016638432">ลบทางลัด</translation>
 <translation id="799923393800005025">สามารถดูได้</translation>
 <translation id="8008366997883261463">สุนัข</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">มีไฟล์หรือไดเรกทอรีที่มีชื่อเดียวกันนี้อยู่แล้ว</translation>
 <translation id="8391950649760071442">การทับศัพท์ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">มิติข้อมูล</translation>
-<translation id="8400874747056634633">จัดการการแชร์กับ Plugin VM</translation>
 <translation id="8412586565681117057">วิธีการป้อนข้อมูลอย่างรวดเร็ว</translation>
 <translation id="8418113698656761985">แป้นพิมพ์ภาษาโรมาเนีย</translation>
 <translation id="8432745813735585631">แป้นพิมพ์ Colemak สหรัฐอเมริกา</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
index 20dafde0..bc0b08b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome cihaz</translation>
 <translation id="1665611772925418501">Dosya değiştirilemedi.</translation>
 <translation id="1673103856845176271">Güvenlik nedenleriyle dosyaya erişilemedi.</translation>
-<translation id="1679806121152819234">PluginVm</translation>
 <translation id="169515659049020177">ÜstKrktr</translation>
 <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> öğe sıkıştırılıyor...</translation>
 <translation id="174173592514158117">Tüm Play klasörlerini göster</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> dosyası</translation>
 <translation id="457386861538956877">Diğer...</translation>
 <translation id="4582497162516204941">Linux (Beta) ile yükle</translation>
-<translation id="4584780943629874245">Plugin VM ile paylaş</translation>
 <translation id="4631887759990505102">Sanatçı</translation>
 <translation id="4656293982926141856">Bu bilgisayar</translation>
 <translation id="4669606053856530811">"<ph name="SOURCE_NAME" />" kaynağının üyeleri, bu öğeler kendileriyle paylaşılmadığı sürece erişimi kaybedecektir.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Yeni pencere</translation>
 <translation id="7348749398828259943">ABD Workman uluslararası klavye</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> öğe kopyalanıyor.</translation>
-<translation id="7379734276381389090">Plugin VM ile <ph name="NUMBER_OF_ITEMS" /> dosya paylaşıldı</translation>
 <translation id="7389722738210761877">Tayca klavye (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Hintçe klavye (Fonetik)</translation>
 <translation id="7417453074306512035">Etiyopya dili klavye</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Slovence</translation>
 <translation id="7982283708762922719">Yükseklik</translation>
 <translation id="7987485481246785146">Sorani Kürtçe Arapça temelli klavye</translation>
-<translation id="7990715602172183602">Eklenti VM ile 1 dosya paylaşıldı</translation>
 <translation id="799547531016638432">Kısayolu kaldır</translation>
 <translation id="799923393800005025">Görüntüleyebilir</translation>
 <translation id="8008366997883261463">Jack Russell Teriyeri</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Aynı adda bir dosya veya dizin zaten var.</translation>
 <translation id="8391950649760071442">Harf çevirisi (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Boyutlar</translation>
-<translation id="8400874747056634633">Plugin VM Paylaşımını Yönet</translation>
 <translation id="8412586565681117057">Hızlı giriş yöntemi</translation>
 <translation id="8418113698656761985">Romence klavye</translation>
 <translation id="8432745813735585631">ABD Colemak klavye</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
index 630390e..932f78f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Пристрій Chrome</translation>
 <translation id="1665611772925418501">Файл неможливо змінити.</translation>
 <translation id="1673103856845176271">Доступ до файлу неможливо отримати з міркувань безпеки.</translation>
-<translation id="1679806121152819234">Плагін віртуальної машини</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Архівування елементів (<ph name="NUMBER_OF_ITEMS" />)…</translation>
 <translation id="174173592514158117">Показати всі папки Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Файл <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Інші...</translation>
 <translation id="4582497162516204941">Установити з Linux (бета-версія)</translation>
-<translation id="4584780943629874245">Надіслати за допомогою плагіна віртуальної машини</translation>
 <translation id="4631887759990505102">Виконавець</translation>
 <translation id="4656293982926141856">На цьому комп’ютері</translation>
 <translation id="4669606053856530811">Учасники, які мають доступ до розташування "<ph name="SOURCE_NAME" />", втратять доступ до елементів, якими з ними не поділилися.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Нове вікно</translation>
 <translation id="7348749398828259943">Міжнародна клавіатура US Workman</translation>
 <translation id="7359359531237882347">Копіювання елементів (<ph name="NUMBER_OF_ITEMS" />)…</translation>
-<translation id="7379734276381389090">Плагін віртуальної машини має доступ до стількох папок: <ph name="NUMBER_OF_ITEMS" /></translation>
 <translation id="7389722738210761877">Тайська клавіатура (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Клавіатура гінді (фонетична)</translation>
 <translation id="7417453074306512035">Ефіопська клавіатура</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Словенська</translation>
 <translation id="7982283708762922719">Висота</translation>
 <translation id="7987485481246785146">Курдська клавіатура сорані на основі арабської мови</translation>
-<translation id="7990715602172183602">Плагін віртуальної машини має доступ до 1 папки</translation>
 <translation id="799547531016638432">Видалити ярлик</translation>
 <translation id="799923393800005025">Може переглядати</translation>
 <translation id="8008366997883261463">Собака</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Файл або каталог з таким же ім’ям уже існує.</translation>
 <translation id="8391950649760071442">Транслітерація (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Розміри</translation>
-<translation id="8400874747056634633">Керувати доступом плагіна віртуальної машини</translation>
 <translation id="8412586565681117057">Спрощений метод введення для стандарту цанцзе</translation>
 <translation id="8418113698656761985">Румунська розкладка</translation>
 <translation id="8432745813735585631">Розкладка клавіатури Colemak (США)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index de53c472..34e2c86 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Thiết bị Chrome</translation>
 <translation id="1665611772925418501">Không thể sửa đổi tệp.</translation>
 <translation id="1673103856845176271">Không thể truy cập tệp vì các lý do bảo mật.</translation>
-<translation id="1679806121152819234">Máy chủ ảo plugin</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">Đang nén <ph name="NUMBER_OF_ITEMS" /> mục...</translation>
 <translation id="174173592514158117">Hiển thị tất cả các thư mục Play</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984">Tệp <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Thêm...</translation>
 <translation id="4582497162516204941">Cài đặt bằng Linux (Beta)</translation>
-<translation id="4584780943629874245">Chia sẻ với máy chủ ảo plugin</translation>
 <translation id="4631887759990505102">Nghệ sĩ</translation>
 <translation id="4656293982926141856">Máy tính này</translation>
 <translation id="4669606053856530811">Thành viên của '<ph name="SOURCE_NAME" />' sẽ mất quyền truy cập trừ khi bạn chia sẻ các mục này với họ.</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">Cửa sổ mới</translation>
 <translation id="7348749398828259943">Bàn phím quốc tế Workman Hoa Kỳ</translation>
 <translation id="7359359531237882347">Đang sao chép <ph name="NUMBER_OF_ITEMS" /> mục...</translation>
-<translation id="7379734276381389090">Đã chia sẻ <ph name="NUMBER_OF_ITEMS" /> thư mục với máy chủ ảo plugin</translation>
 <translation id="7389722738210761877">Bàn phím tiếng Thái (TIS 820-2531)</translation>
 <translation id="7396038720194014279">Bàn phím tiếng Hindi (Phiên âm)</translation>
 <translation id="7417453074306512035">Bàn phím tiếng Ethiopic</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">Tiếng Sloven</translation>
 <translation id="7982283708762922719">Chiều cao</translation>
 <translation id="7987485481246785146">Bàn phím tiếng Kurd Sorani dựa trên tiếng Ả Rập</translation>
-<translation id="7990715602172183602">1 thư mục được chia sẻ với máy chủ ảo plugin</translation>
 <translation id="799547531016638432">Xóa lối tắt</translation>
 <translation id="799923393800005025">Có thể xem</translation>
 <translation id="8008366997883261463">Chó</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">Tệp hoặc thư mục có cùng tên đã tồn tại.</translation>
 <translation id="8391950649760071442">Chuyển ngữ (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">Kích thước</translation>
-<translation id="8400874747056634633">Quản lý việc chia sẻ với máy chủ ảo plugin</translation>
 <translation id="8412586565681117057">Phương thức nhập nhanh</translation>
 <translation id="8418113698656761985">Bàn phím tiếng Rumani</translation>
 <translation id="8432745813735585631">Bàn phím Colemak Hoa Kỳ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index 0584c899..212155dc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome设备</translation>
 <translation id="1665611772925418501">无法修改该文件。</translation>
 <translation id="1673103856845176271">出于安全原因,无法访问该文件。</translation>
-<translation id="1679806121152819234">插件虚拟机</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">正在压缩 <ph name="NUMBER_OF_ITEMS" /> 项内容…</translation>
 <translation id="174173592514158117">显示所有 Play 文件夹</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 文件</translation>
 <translation id="457386861538956877">更多...</translation>
 <translation id="4582497162516204941">通过 Linux(测试版)安装</translation>
-<translation id="4584780943629874245">与插件虚拟机共享</translation>
 <translation id="4631887759990505102">艺术家</translation>
 <translation id="4656293982926141856">此计算机</translation>
 <translation id="4669606053856530811">“<ph name="SOURCE_NAME" />”的成员将不再能够访问这些内容(除非与他们共享了这些内容)。</translation>
@@ -524,7 +522,6 @@
 <translation id="7339898014177206373">打开新的窗口</translation>
 <translation id="7348749398828259943">美式 Workman 国际键盘</translation>
 <translation id="7359359531237882347">正在复制 <ph name="NUMBER_OF_ITEMS" /> 项内容…</translation>
-<translation id="7379734276381389090">与插件虚拟机共享了 <ph name="NUMBER_OF_ITEMS" /> 个文件夹</translation>
 <translation id="7389722738210761877">泰语键盘(TIS 820-2531)</translation>
 <translation id="7396038720194014279">印地语键盘(注音)</translation>
 <translation id="7417453074306512035">埃塞俄比亚语键盘</translation>
@@ -587,7 +584,6 @@
 <translation id="7969525169268594403">斯洛维尼亚语</translation>
 <translation id="7982283708762922719">高度</translation>
 <translation id="7987485481246785146">索拉尼库尔德语(阿拉伯语字母)键盘</translation>
-<translation id="7990715602172183602">与插件虚拟机共享了 1 个文件夹</translation>
 <translation id="799547531016638432">删除快捷方式</translation>
 <translation id="799923393800005025">可以查看</translation>
 <translation id="8008366997883261463">杰克罗素梗犬</translation>
@@ -628,7 +624,6 @@
 <translation id="8342318071240498787">已存在具有相同名称的文件或目录。</translation>
 <translation id="8391950649760071442">音译(emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">尺寸</translation>
-<translation id="8400874747056634633">管理与插件虚拟机的共享</translation>
 <translation id="8412586565681117057">速成输入法</translation>
 <translation id="8418113698656761985">罗马尼亚语键盘</translation>
 <translation id="8432745813735585631">英语(美国)Colemak 键盘</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
index 78a64426..912cbf2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -62,7 +62,6 @@
 <translation id="164969095109328410">Chrome 裝置</translation>
 <translation id="1665611772925418501">無法修改檔案。</translation>
 <translation id="1673103856845176271">基於安全理由,你無法存取檔案。</translation>
-<translation id="1679806121152819234">Plugin VM</translation>
 <translation id="169515659049020177">Shift</translation>
 <translation id="1722487484194605434">正在壓縮 <ph name="NUMBER_OF_ITEMS" /> 個項目...</translation>
 <translation id="174173592514158117">顯示所有 Play 資料夾</translation>
@@ -287,7 +286,6 @@
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 檔案</translation>
 <translation id="457386861538956877">更多…</translation>
 <translation id="4582497162516204941">透過 Linux (測試版) 執行安裝程序</translation>
-<translation id="4584780943629874245">與外掛程式 VM 共用</translation>
 <translation id="4631887759990505102">演出者</translation>
 <translation id="4656293982926141856">這台電腦</translation>
 <translation id="4669606053856530811">「<ph name="SOURCE_NAME" />」的成員將失去存取權,除非有人與他們共用這些項目。</translation>
@@ -529,7 +527,6 @@
 <translation id="7339898014177206373">新視窗</translation>
 <translation id="7348749398828259943">美式 Workman 國際鍵盤</translation>
 <translation id="7359359531237882347">正在複製 <ph name="NUMBER_OF_ITEMS" /> 個項目...</translation>
-<translation id="7379734276381389090">已與外掛程式 VM 共用 <ph name="NUMBER_OF_ITEMS" /> 個資料夾</translation>
 <translation id="7389722738210761877">泰文鍵盤 (TIS 820-2531)</translation>
 <translation id="7396038720194014279">北印度文鍵盤 (拼音)</translation>
 <translation id="7417453074306512035">衣索比亞文鍵盤</translation>
@@ -592,7 +589,6 @@
 <translation id="7969525169268594403">斯洛維尼亞文</translation>
 <translation id="7982283708762922719">高度</translation>
 <translation id="7987485481246785146">索拉尼庫爾德式阿拉伯文鍵盤</translation>
-<translation id="7990715602172183602">已與外掛程式 VM 共用 1 個資料夾</translation>
 <translation id="799547531016638432">移除捷徑</translation>
 <translation id="799923393800005025">可以檢視</translation>
 <translation id="8008366997883261463">傑克羅素梗</translation>
@@ -633,7 +629,6 @@
 <translation id="8342318071240498787">已存在名稱相同的檔案或目錄。</translation>
 <translation id="8391950649760071442">音譯 (emandi → ఏమండీ)</translation>
 <translation id="8395901698320285466">尺寸</translation>
-<translation id="8400874747056634633">管理外掛程式 VM 共用功能</translation>
 <translation id="8412586565681117057">簡易/速成輸入法</translation>
 <translation id="8418113698656761985">羅馬尼亞文鍵盤</translation>
 <translation id="8432745813735585631">美式 Colemak 鍵盤</translation>
diff --git a/ui/events/blink/BUILD.gn b/ui/events/blink/BUILD.gn
index 1e825e93..c392567 100644
--- a/ui/events/blink/BUILD.gn
+++ b/ui/events/blink/BUILD.gn
@@ -35,6 +35,8 @@
     "input_handler_proxy_client.h",
     "input_scroll_elasticity_controller.cc",
     "input_scroll_elasticity_controller.h",
+    "momentum_scroll_jank_tracker.cc",
+    "momentum_scroll_jank_tracker.h",
     "prediction/empty_predictor.cc",
     "prediction/empty_predictor.h",
     "prediction/input_predictor.h",
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc
index 72b60e0..a8d7c865 100644
--- a/ui/events/blink/input_handler_proxy.cc
+++ b/ui/events/blink/input_handler_proxy.cc
@@ -30,6 +30,7 @@
 #include "ui/events/blink/event_with_callback.h"
 #include "ui/events/blink/input_handler_proxy_client.h"
 #include "ui/events/blink/input_scroll_elasticity_controller.h"
+#include "ui/events/blink/momentum_scroll_jank_tracker.h"
 #include "ui/events/blink/scroll_predictor.h"
 #include "ui/events/blink/web_input_event_traits.h"
 #include "ui/gfx/geometry/point_conversions.h"
@@ -352,6 +353,24 @@
       break;
   }
 
+  // Handle jank tracking during the momentum phase of a scroll gesture. The
+  // class filters non-momentum events internally.
+  switch (type) {
+    case blink::WebGestureEvent::kGestureScrollBegin:
+      momentum_scroll_jank_tracker_ =
+          std::make_unique<MomentumScrollJankTracker>();
+      break;
+    case blink::WebGestureEvent::kGestureScrollUpdate:
+      momentum_scroll_jank_tracker_->OnDispatchedInputEvent(
+          event_with_callback.get(), now);
+      break;
+    case blink::WebGestureEvent::kGestureScrollEnd:
+      momentum_scroll_jank_tracker_.reset();
+      break;
+    default:
+      break;
+  }
+
   // Will run callback for every original events.
   event_with_callback->RunCallbacks(disposition, monitored_latency_info,
                                     std::move(current_overscroll_params_));
diff --git a/ui/events/blink/input_handler_proxy.h b/ui/events/blink/input_handler_proxy.h
index 147ee3c..dd9f0d6 100644
--- a/ui/events/blink/input_handler_proxy.h
+++ b/ui/events/blink/input_handler_proxy.h
@@ -30,6 +30,7 @@
 namespace test {
 class InputHandlerProxyTest;
 class InputHandlerProxyEventQueueTest;
+class InputHandlerProxyMomentumScrollJankTest;
 class TestInputHandlerProxy;
 }
 
@@ -40,6 +41,7 @@
 class ScrollPredictor;
 class SynchronousInputHandler;
 class SynchronousInputHandlerProxy;
+class MomentumScrollJankTracker;
 struct DidOverscrollParams;
 
 // This class is a proxy between the blink web input events for a WebWidget and
@@ -135,6 +137,7 @@
   friend class test::TestInputHandlerProxy;
   friend class test::InputHandlerProxyTest;
   friend class test::InputHandlerProxyEventQueueTest;
+  friend class test::InputHandlerProxyMomentumScrollJankTest;
 
   void DispatchSingleInputEvent(std::unique_ptr<EventWithCallback>,
                                 const base::TimeTicks);
@@ -251,6 +254,9 @@
   bool skip_touch_filter_discrete_ = false;
   bool skip_touch_filter_all_ = false;
 
+  // Helpers for the momentum scroll jank UMAs.
+  std::unique_ptr<MomentumScrollJankTracker> momentum_scroll_jank_tracker_;
+
   DISALLOW_COPY_AND_ASSIGN(InputHandlerProxy);
 };
 
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc
index 72aeea8a..5148e2d1 100644
--- a/ui/events/blink/input_handler_proxy_unittest.cc
+++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/containers/circular_deque.h"
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
@@ -2495,6 +2496,348 @@
             input_handler_proxy_.RouteToTypeSpecificHandler(gesture));
 }
 
+class InputHandlerProxyMomentumScrollJankTest : public testing::Test {
+ public:
+  InputHandlerProxyMomentumScrollJankTest()
+      : input_handler_proxy_(&mock_input_handler_,
+                             &mock_client_,
+                             /*force_input_to_main_thread=*/false) {
+    tick_clock_.SetNowTicks(base::TimeTicks::Now());
+    input_handler_proxy_.SetTickClockForTesting(&tick_clock_);
+  }
+
+  ~InputHandlerProxyMomentumScrollJankTest() = default;
+
+  void HandleScrollBegin() {
+    WebGestureEvent gesture(WebInputEvent::kGestureScrollBegin,
+                            WebInputEvent::kNoModifiers, tick_clock_.NowTicks(),
+                            blink::WebGestureDevice::kTouchscreen);
+    HandleGesture(WebInputEventTraits::Clone(gesture));
+  }
+
+  void HandleScrollEnd() {
+    WebGestureEvent gesture(WebInputEvent::kGestureScrollEnd,
+                            WebInputEvent::kNoModifiers, tick_clock_.NowTicks(),
+                            blink::WebGestureDevice::kTouchscreen);
+    HandleGesture(WebInputEventTraits::Clone(gesture));
+  }
+
+  void HandleScrollUpdate(bool is_momentum) {
+    WebGestureEvent gesture(WebInputEvent::kGestureScrollUpdate,
+                            WebInputEvent::kNoModifiers, tick_clock_.NowTicks(),
+                            blink::WebGestureDevice::kTouchscreen);
+    gesture.data.scroll_update.delta_y = -20;
+    if (is_momentum) {
+      gesture.data.scroll_update.inertial_phase =
+          blink::WebGestureEvent::InertialPhaseState::kMomentum;
+    }
+    HandleGesture(WebInputEventTraits::Clone(gesture));
+  }
+
+  void AdvanceClock(uint32_t milliseconds) {
+    tick_clock_.Advance(base::TimeDelta::FromMilliseconds(milliseconds));
+  }
+
+  void AddNonJankyEvents(uint32_t count) {
+    for (uint32_t i = 0; i < count; ++i) {
+      AdvanceClock(16);
+      HandleScrollUpdate(true /* is_momentum */);
+      input_handler_proxy_.DeliverInputForBeginFrame();
+    }
+  }
+
+ protected:
+  void HandleGesture(WebScopedInputEvent event) {
+    LatencyInfo latency;
+    input_handler_proxy_.HandleInputEventWithLatencyInfo(
+        std::move(event), latency, base::DoNothing());
+  }
+
+  testing::NiceMock<MockInputHandler> mock_input_handler_;
+  testing::NiceMock<MockInputHandlerProxyClient> mock_client_;
+  TestInputHandlerProxy input_handler_proxy_;
+  base::SimpleTestTickClock tick_clock_;
+};
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestJank) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+  HandleScrollBegin();
+
+  // Flush one update, the first update is always ignored.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue three updates, they will be coalesced and count as two janks.
+  // These will not count as an ordering jank, as there are more than 2
+  // coalesced events.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue two updates, they will be coalesced and count as one jank and one
+  // ordering jank (https://crbug.com/952930).
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue two updates, they will be coalesced and count as one jank and one
+  // ordering jank (https://crbug.com/952930).
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Add 93 non-janky events, bringing us to a total of 100 events.
+  AddNonJankyEvents(93);
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectUniqueSample("Renderer4.MomentumScrollJankPercentage",
+                                      4, 1);
+  histogram_tester.ExpectUniqueSample(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 2, 1);
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestJankMultipleGestures) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+
+  for (int i = 0; i < 3; ++i) {
+    HandleScrollBegin();
+
+    // Flush one update, the first update is always ignored.
+    AdvanceClock(16);
+    HandleScrollUpdate(true /* is_momentum */);
+    input_handler_proxy_.DeliverInputForBeginFrame();
+
+    // Enqueue two updates, they will be coalesced and count as one jank and one
+    // ordering jank (https://crbug.com/952930).
+    AdvanceClock(16);
+    HandleScrollUpdate(true /* is_momentum */);
+    AdvanceClock(16);
+    HandleScrollUpdate(true /* is_momentum */);
+    AdvanceClock(1);
+    input_handler_proxy_.DeliverInputForBeginFrame();
+
+    // Add 98 non-janky events, bringing us to a total of 100 events.
+    AddNonJankyEvents(98);
+
+    HandleScrollEnd();
+    input_handler_proxy_.DeliverInputForBeginFrame();
+
+    histogram_tester.ExpectUniqueSample(
+        "Renderer4.MomentumScrollJankPercentage", 1, i + 1);
+    histogram_tester.ExpectUniqueSample(
+        "Renderer4.MomentumScrollOrderingJankPercentage", 1, i + 1);
+  }
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestJankRounding) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+
+  HandleScrollBegin();
+
+  // Flush one update, the first update is always ignored.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue two updates, they will be coalesced and count as one jank and one
+  // ordering jank (https://crbug.com/952930).
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Add 500 non-janky events. Even with this many events, our round-up logic
+  // should cause us to report 1% jank.
+  AddNonJankyEvents(500);
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectUniqueSample("Renderer4.MomentumScrollJankPercentage",
+                                      1, 1);
+  histogram_tester.ExpectUniqueSample(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 1, 1);
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestSimpleNoJank) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+  HandleScrollBegin();
+
+  // Flush one update, the first update is always ignored.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue one updates, no jank.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue one updates, no jank.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectUniqueSample("Renderer4.MomentumScrollJankPercentage",
+                                      0, 1);
+  histogram_tester.ExpectUniqueSample(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 0, 1);
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestFirstGestureNoJank) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+  HandleScrollBegin();
+
+  // Even with 3 coalesced frames, the first gesture should not trigger a jank.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectTotalCount("Renderer4.MomentumScrollJankPercentage",
+                                    0);
+  histogram_tester.ExpectTotalCount(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 0);
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestNonMomentumNoJank) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+  HandleScrollBegin();
+
+  // Flush one update, the first update is always ignored.
+  AdvanceClock(16);
+  HandleScrollUpdate(false /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue three updates, these will not cause jank, as none are momentum.
+  AdvanceClock(16);
+  HandleScrollUpdate(false /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(false /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(false /* is_momentum */);
+  AdvanceClock(1);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectTotalCount("Renderer4.MomentumScrollJankPercentage",
+                                    0);
+  histogram_tester.ExpectTotalCount(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 0);
+}
+
+TEST_F(InputHandlerProxyMomentumScrollJankTest, TestLongDelayNoOrderingJank) {
+  cc::InputHandlerScrollResult scroll_result_did_scroll;
+  scroll_result_did_scroll.did_scroll = true;
+  EXPECT_CALL(
+      mock_input_handler_,
+      ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+      .WillRepeatedly(testing::Return(scroll_result_did_scroll));
+
+  base::HistogramTester histogram_tester;
+  HandleScrollBegin();
+
+  // Flush one update, the first update is always ignored.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Enqueue two updates, they will be coalesced but won't count as ordering
+  // jank due to the long delay.
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(16);
+  HandleScrollUpdate(true /* is_momentum */);
+  AdvanceClock(3);  // 3ms delay prevents counting as ordering jank
+                    // (https://crbug.com/952930).
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  // Add 98 non-janky events, bringing us to a total of 100 events.
+  AddNonJankyEvents(98);
+
+  HandleScrollEnd();
+  input_handler_proxy_.DeliverInputForBeginFrame();
+
+  histogram_tester.ExpectUniqueSample("Renderer4.MomentumScrollJankPercentage",
+                                      1, 1);
+  histogram_tester.ExpectUniqueSample(
+      "Renderer4.MomentumScrollOrderingJankPercentage", 0, 1);
+}
+
 INSTANTIATE_TEST_SUITE_P(AnimateInput,
                          InputHandlerProxyTest,
                          testing::ValuesIn(test_types));
diff --git a/ui/events/blink/momentum_scroll_jank_tracker.cc b/ui/events/blink/momentum_scroll_jank_tracker.cc
new file mode 100644
index 0000000..302e41b
--- /dev/null
+++ b/ui/events/blink/momentum_scroll_jank_tracker.cc
@@ -0,0 +1,78 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/blink/momentum_scroll_jank_tracker.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "ui/events/blink/blink_event_util.h"
+#include "ui/events/blink/event_with_callback.h"
+
+namespace ui {
+
+constexpr base::TimeDelta MomentumScrollJankTracker::kRecentEventCutoff;
+
+MomentumScrollJankTracker::~MomentumScrollJankTracker() {
+  // Don't log if this scroll had no momentum input (after the first event).
+  if (total_event_count_ == 0)
+    return;
+
+  // We want to target 0 janks, so round our percentages up so that a single
+  // jank over a large number of frames doesn't get lost.
+  // Don't worry about overflow as we'd need a gesture > 100hrs long to hit,
+  // and the downside is an incorrect metric.
+  uint32_t rounding_factor = total_event_count_ - 1;
+  uint32_t jank_percentage =
+      (jank_count_ * 100 + rounding_factor) / total_event_count_;
+  uint32_t ordering_jank_percentage =
+      (ordering_jank_count_ * 100 + rounding_factor) / total_event_count_;
+
+  base::UmaHistogramPercentage("Renderer4.MomentumScrollJankPercentage",
+                               jank_percentage);
+  base::UmaHistogramPercentage("Renderer4.MomentumScrollOrderingJankPercentage",
+                               ordering_jank_percentage);
+}
+
+void MomentumScrollJankTracker::OnDispatchedInputEvent(
+    EventWithCallback* event_with_callback,
+    const base::TimeTicks& now) {
+  DCHECK_EQ(event_with_callback->event().GetType(),
+            blink::WebGestureEvent::kGestureScrollUpdate);
+
+  const auto& gesture_event = ToWebGestureEvent(event_with_callback->event());
+
+  // If the scroll is not in the momentum phase, it's driven by user input,
+  // which happens at a higher frequency. Ignore this.
+  if (gesture_event.data.scroll_update.inertial_phase !=
+      blink::WebGestureEvent::InertialPhaseState::kMomentum) {
+    return;
+  }
+
+  // Ignore the first momentum input event, as this may happen out-of band
+  // with BeginFrame, and may be coalesced in a non-jank scenario.
+  // TODO(ericrk): Add a metric to track jank in the transition from user
+  // to momentum input.
+  if (!seen_first_momentum_input_) {
+    seen_first_momentum_input_ = true;
+    return;
+  }
+
+  total_event_count_ += event_with_callback->coalesced_count();
+
+  jank_count_ +=
+      event_with_callback->coalesced_count() - kExpectedMomentumEventsPerFrame;
+
+  // To isolate the case where we are processing events ~every frame but
+  // still experiencing jank due unstable ordering of event delivery wrt.
+  // begin frame, check if this event has been coalesced exactly once more
+  // than expected and if that coalescing happened within kRecentEventCutoff.
+  bool one_extra_event = event_with_callback->coalesced_count() ==
+                         kExpectedMomentumEventsPerFrame + 1;
+  bool coalesced_recently =
+      (now - event_with_callback->last_coalesced_timestamp()) <
+      kRecentEventCutoff;
+  if (one_extra_event && coalesced_recently)
+    ordering_jank_count_++;
+}
+
+}  // namespace ui
diff --git a/ui/events/blink/momentum_scroll_jank_tracker.h b/ui/events/blink/momentum_scroll_jank_tracker.h
new file mode 100644
index 0000000..f301ef08
--- /dev/null
+++ b/ui/events/blink/momentum_scroll_jank_tracker.h
@@ -0,0 +1,54 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_BLINK_MOMENTUM_SCROLL_JANK_TRACKER_H_
+#define UI_EVENTS_BLINK_MOMENTUM_SCROLL_JANK_TRACKER_H_
+
+#include "base/time/time.h"
+
+namespace ui {
+class EventWithCallback;
+
+// Class which is used during a scroll event to detect, accumulate, and log
+// jank metrics for the momentum phase.
+class MomentumScrollJankTracker {
+ public:
+  ~MomentumScrollJankTracker();
+  void OnDispatchedInputEvent(EventWithCallback* event_with_callback,
+                              const base::TimeTicks& now);
+
+ private:
+  // The number of expected momentum events which should be coalesced in a
+  // single frame.
+  // If we update momentum event generation to happen more than once per frame,
+  // |kExpectedMomentumEventsPerFrame| should be updated or this data plumbed
+  // in from a different source.
+  static constexpr uint32_t kExpectedMomentumEventsPerFrame = 1;
+
+  // The amount of time elapsed between coalescing an event and dispatching the
+  // event for which we consider the coalescing to be "recent" for the purposes
+  // of https://crbug.com/952930.
+  static constexpr base::TimeDelta kRecentEventCutoff =
+      base::TimeDelta::FromMilliseconds(2);
+
+  // |jank_count_| is the number of coalesced momentum input events above
+  // kExptectedMomentumEventsPerFrame.
+  uint32_t jank_count_ = 0;
+
+  // |ordering_jank_count_| specifically addresses https://crbug.com/952930.
+  // Counts cases where we coalesce input very close to processing it,
+  // indicating an unstable ordering of begin frame wrt. input delivery.
+  uint32_t ordering_jank_count_ = 0;
+
+  // The number of events processed during a gesture.
+  uint32_t total_event_count_ = 0;
+
+  // Used to avoid tracking jank in the first momentum event, as this may be
+  // unreliable.
+  bool seen_first_momentum_input_ = false;
+};
+
+}  // namespace ui
+
+#endif  // UI_EVENTS_BLINK_MOMENTUM_SCROLL_JANK_TRACKER_H_
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc
index 872fa07..a725579 100644
--- a/ui/gl/gl_switches.cc
+++ b/ui/gl/gl_switches.cc
@@ -168,4 +168,10 @@
 const base::Feature kDefaultANGLEOpenGL{"DefaultANGLEOpenGL",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Use swap chain frame statistics for GLSurface presentation feedback.  Also
+// forces direct composition root surface to always use a swap chain instead of
+// an IDCompositionSurface.
+const base::Feature kSwapChainFrameStatistics{
+    "SwapChainFrameStatistics", base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h
index 0e4a513..c49c263 100644
--- a/ui/gl/gl_switches.h
+++ b/ui/gl/gl_switches.h
@@ -75,6 +75,7 @@
 GL_EXPORT extern const base::Feature kDirectCompositionPreferNV12Overlays;
 GL_EXPORT extern const base::Feature kDirectCompositionUseNV12DecodeSwapChain;
 GL_EXPORT extern const base::Feature kDefaultANGLEOpenGL;
+GL_EXPORT extern const base::Feature kSwapChainFrameStatistics;
 
 }  // namespace features
 
diff --git a/ui/strings/translations/ui_strings_am.xtb b/ui/strings/translations/ui_strings_am.xtb
index 1bed365..645f816 100644
--- a/ui/strings/translations/ui_strings_am.xtb
+++ b/ui/strings/translations/ui_strings_am.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">አሁን</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 ደቂቃ}one{# ደቂቃዎች}other{# ደቂቃዎች}}</translation>
-<translation id="1756116796893109054">ትርን በመላክ ላይ...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> ባ</translation>
 <translation id="1801827354178857021">ክፍለ ጊዜ</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 ወር}one{# ወሮች}other{# ወሮች}}</translation>
diff --git a/ui/strings/translations/ui_strings_ar.xtb b/ui/strings/translations/ui_strings_ar.xtb
index 69a9c35..49ec56e 100644
--- a/ui/strings/translations/ui_strings_ar.xtb
+++ b/ui/strings/translations/ui_strings_ar.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">الآن</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{دقيقة واحدة}zero{# من الدقائق}two{دقيقتان (#)}few{# دقائق}many{# دقيقة}other{# من الدقائق}}</translation>
-<translation id="1756116796893109054">جارٍ إرسال علامة التبويب...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> بايت</translation>
 <translation id="1801827354178857021">الفترة</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{شهر واحد}zero{# شهر}two{شهران (#)}few{# أشهر}many{# شهرًا}other{# شهر}}</translation>
diff --git a/ui/strings/translations/ui_strings_bg.xtb b/ui/strings/translations/ui_strings_bg.xtb
index b785ef8..90329f70 100644
--- a/ui/strings/translations/ui_strings_bg.xtb
+++ b/ui/strings/translations/ui_strings_bg.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">сега</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 минута}other{# минути}}</translation>
-<translation id="1756116796893109054">Разделът се изпраща...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> Б</translation>
 <translation id="1801827354178857021">Период</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 месец}other{# месеца}}</translation>
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb
index 0add5c2..07c71af 100644
--- a/ui/strings/translations/ui_strings_bn.xtb
+++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">এখন</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{১ মিনিট}one{# মিনিট}other{# মিনিট}}</translation>
-<translation id="1756116796893109054">ট্যাব পাঠানো হচ্ছে...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">পূর্ণচ্ছেদ</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{১ মাস}one{# মাস}other{# মাস}}</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb
index a5a0c0d0..6862f97 100644
--- a/ui/strings/translations/ui_strings_ca.xtb
+++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Maj</translation>
 <translation id="1710340000377843106">ara</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minut}other{# minuts}}</translation>
-<translation id="1756116796893109054">S'està enviant la pestanya...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Punt</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mes}other{# mesos}}</translation>
diff --git a/ui/strings/translations/ui_strings_cs.xtb b/ui/strings/translations/ui_strings_cs.xtb
index 6b3c9b8..e493ac4 100644
--- a/ui/strings/translations/ui_strings_cs.xtb
+++ b/ui/strings/translations/ui_strings_cs.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">teď</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuta}few{# minuty}many{# minuty}other{# minut}}</translation>
-<translation id="1756116796893109054">Odesílání karty...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Tečka</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 měsíc}few{# měsíce}many{# měsíce}other{# měsíců}}</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index 755a92f..ef253fb 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">nu</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minut}one{# minutter}other{# minutter}}</translation>
-<translation id="1756116796893109054">Fanen sendes…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periode</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 måned}one{# måned}other{# måneder}}</translation>
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb
index e96757d..d511b32 100644
--- a/ui/strings/translations/ui_strings_de.xtb
+++ b/ui/strings/translations/ui_strings_de.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Umschalttaste</translation>
 <translation id="1710340000377843106">jetzt</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 Minute}other{# Minuten}}</translation>
-<translation id="1756116796893109054">Tab wird gesendet…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Punkt</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 Monat}other{# Monate}}</translation>
diff --git a/ui/strings/translations/ui_strings_el.xtb b/ui/strings/translations/ui_strings_el.xtb
index de55915..948fc8b 100644
--- a/ui/strings/translations/ui_strings_el.xtb
+++ b/ui/strings/translations/ui_strings_el.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">τώρα</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 λεπτό}other{# λεπτά}}</translation>
-<translation id="1756116796893109054">Αποστολή καρτέλας…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> Β</translation>
 <translation id="1801827354178857021">Περίοδος</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 μήνας}other{# μήνες}}</translation>
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb
index 0345501..21a30ff 100644
--- a/ui/strings/translations/ui_strings_en-GB.xtb
+++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">now</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minute}other{# minutes}}</translation>
-<translation id="1756116796893109054">Sending tab...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Period</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 month}other{# months}}</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb
index 466e322..00803fef 100644
--- a/ui/strings/translations/ui_strings_es-419.xtb
+++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ahora</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}other{# minutos}}</translation>
-<translation id="1756116796893109054">Enviando pestaña…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Punto</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mes}other{# meses}}</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb
index 743942e..3b5de8d 100644
--- a/ui/strings/translations/ui_strings_es.xtb
+++ b/ui/strings/translations/ui_strings_es.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Mayús</translation>
 <translation id="1710340000377843106">ahora</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}other{# minutos}}</translation>
-<translation id="1756116796893109054">Enviando pestaña...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Punto</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mes}other{# meses}}</translation>
diff --git a/ui/strings/translations/ui_strings_et.xtb b/ui/strings/translations/ui_strings_et.xtb
index 1b3cee73..7eb7218 100644
--- a/ui/strings/translations/ui_strings_et.xtb
+++ b/ui/strings/translations/ui_strings_et.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Tõstuklahv</translation>
 <translation id="1710340000377843106">praegu</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minut}other{# minutit}}</translation>
-<translation id="1756116796893109054">Vahelehe saatmine …</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periood</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 kuu}other{# kuud}}</translation>
diff --git a/ui/strings/translations/ui_strings_fa.xtb b/ui/strings/translations/ui_strings_fa.xtb
index 36e883d..df6bd82f 100644
--- a/ui/strings/translations/ui_strings_fa.xtb
+++ b/ui/strings/translations/ui_strings_fa.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">تبدیل</translation>
 <translation id="1710340000377843106">اکنون</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{۱ دقیقه}one{# دقیقه}other{# دقیقه}}</translation>
-<translation id="1756116796893109054">درحال ارسال برگه…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> بایت</translation>
 <translation id="1801827354178857021">نقطه</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{۱ ماه}one{# ماه}other{# ماه}}</translation>
diff --git a/ui/strings/translations/ui_strings_fi.xtb b/ui/strings/translations/ui_strings_fi.xtb
index d577add..bb480ba 100644
--- a/ui/strings/translations/ui_strings_fi.xtb
+++ b/ui/strings/translations/ui_strings_fi.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">nyt</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuutti}other{# minuuttia}}</translation>
-<translation id="1756116796893109054">Lähetetään välilehteä…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> t</translation>
 <translation id="1801827354178857021">Jakso</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 kuukausi}other{# kuukautta}}</translation>
diff --git a/ui/strings/translations/ui_strings_fil.xtb b/ui/strings/translations/ui_strings_fil.xtb
index a5fcbb8..edda867 100644
--- a/ui/strings/translations/ui_strings_fil.xtb
+++ b/ui/strings/translations/ui_strings_fil.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ngayon</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}one{# minuto}other{# na minuto}}</translation>
-<translation id="1756116796893109054">Ipinapadala ang tab...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> (na) B</translation>
 <translation id="1801827354178857021">Panahon</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 buwan}one{# buwan}other{# na buwan}}</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb
index 98d40f9..57fc992 100644
--- a/ui/strings/translations/ui_strings_fr.xtb
+++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Maj</translation>
 <translation id="1710340000377843106">maintenant</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minute}one{# minute}other{# minutes}}</translation>
-<translation id="1756116796893109054">Envoi de l'onglet…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> o</translation>
 <translation id="1801827354178857021">Point</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mois}one{# mois}other{# mois}}</translation>
diff --git a/ui/strings/translations/ui_strings_gu.xtb b/ui/strings/translations/ui_strings_gu.xtb
index f18e846..d5c2d63c 100644
--- a/ui/strings/translations/ui_strings_gu.xtb
+++ b/ui/strings/translations/ui_strings_gu.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">હમણાં</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 મિનિટ}one{# મિનિટ}other{# મિનિટ}}</translation>
-<translation id="1756116796893109054">ટૅબ મોકલી રહ્યાં છીએ...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> અબજ</translation>
 <translation id="1801827354178857021">સમયગાળો</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 મહિનો}one{# મહિનો}other{# મહિના}}</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index cf9fe7fa..7b893c4 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">अभी</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 मिनट}one{# मिनट}other{# मिनट}}</translation>
-<translation id="1756116796893109054">टैब शेयर किया जा रहा है...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> बाइट</translation>
 <translation id="1801827354178857021">अवधि</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 माह}one{# माह}other{# माह}}</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb
index 6020ca7..6dd37b58 100644
--- a/ui/strings/translations/ui_strings_hr.xtb
+++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">sad</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuta}one{# minuta}few{# minute}other{# minuta}}</translation>
-<translation id="1756116796893109054">Slanje kartice...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Razdoblje</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mjesec}one{# mjesec}few{# mjeseca}other{# mjeseci}}</translation>
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb
index aa30121..5425e9a4 100644
--- a/ui/strings/translations/ui_strings_hu.xtb
+++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">most</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 perc}other{# perc}}</translation>
-<translation id="1756116796893109054">Lap küldése…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> bájt</translation>
 <translation id="1801827354178857021">Pont</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 hónap}other{# hónap}}</translation>
diff --git a/ui/strings/translations/ui_strings_id.xtb b/ui/strings/translations/ui_strings_id.xtb
index 1ef0a681..c021799 100644
--- a/ui/strings/translations/ui_strings_id.xtb
+++ b/ui/strings/translations/ui_strings_id.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">sekarang</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 menit}other{# menit}}</translation>
-<translation id="1756116796893109054">Mengirim tab...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periode</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 bulan}other{# bulan}}</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb
index 955cf9c..123ff3aa 100644
--- a/ui/strings/translations/ui_strings_it.xtb
+++ b/ui/strings/translations/ui_strings_it.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Maiusc</translation>
 <translation id="1710340000377843106">ora</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}other{# minuti}}</translation>
-<translation id="1756116796893109054">Invio della scheda…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periodo</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mese}other{# mesi}}</translation>
diff --git a/ui/strings/translations/ui_strings_iw.xtb b/ui/strings/translations/ui_strings_iw.xtb
index a097e8d5..64fef87 100644
--- a/ui/strings/translations/ui_strings_iw.xtb
+++ b/ui/strings/translations/ui_strings_iw.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">עכשיו</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{דקה אחת}two{# דקות}many{# דקות}other{# דקות}}</translation>
-<translation id="1756116796893109054">שולח כרטיסייה…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">תקופה</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{חודש אחד}two{חודשיים}many{# חודשים}other{# חודשים}}</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb
index b0d0d3e..76abe42 100644
--- a/ui/strings/translations/ui_strings_ja.xtb
+++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">現在</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 分}other{# 分}}</translation>
-<translation id="1756116796893109054">タブを送信しています...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">ピリオド</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 か月}other{# か月}}</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb
index 98ed57b6..a496c455 100644
--- a/ui/strings/translations/ui_strings_kn.xtb
+++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ಈಗ</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 ನಿಮಿಷ}one{# ನಿಮಿಷಗಳು}other{# ನಿಮಿಷಗಳು}}</translation>
-<translation id="1756116796893109054">ಟ್ಯಾಬ್ ಅನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">ಅವಧಿ</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 ತಿಂಗಳು}one{# ತಿಂಗಳುಗಳು}other{# ತಿಂಗಳುಗಳು}}</translation>
diff --git a/ui/strings/translations/ui_strings_ko.xtb b/ui/strings/translations/ui_strings_ko.xtb
index 743c161..83402007 100644
--- a/ui/strings/translations/ui_strings_ko.xtb
+++ b/ui/strings/translations/ui_strings_ko.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">현재</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1분}other{#분}}</translation>
-<translation id="1756116796893109054">탭 전송 중...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" />B</translation>
 <translation id="1801827354178857021">마침표</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1개월}other{#개월}}</translation>
diff --git a/ui/strings/translations/ui_strings_lt.xtb b/ui/strings/translations/ui_strings_lt.xtb
index 9df37d5..d7e6c15e 100644
--- a/ui/strings/translations/ui_strings_lt.xtb
+++ b/ui/strings/translations/ui_strings_lt.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Antrojo lygio klavišas</translation>
 <translation id="1710340000377843106">dabar</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minutė}one{# minutė}few{# minutės}many{# minutės}other{# minučių}}</translation>
-<translation id="1756116796893109054">Siunčiamas skirtukas...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Laikotarpis</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mėnuo}one{# mėnuo}few{# mėnesiai}many{# mėnesio}other{# mėnesių}}</translation>
diff --git a/ui/strings/translations/ui_strings_lv.xtb b/ui/strings/translations/ui_strings_lv.xtb
index e175132..f525306 100644
--- a/ui/strings/translations/ui_strings_lv.xtb
+++ b/ui/strings/translations/ui_strings_lv.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">tagad</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minūte}zero{# minūtes}one{# minūte}other{# minūtes}}</translation>
-<translation id="1756116796893109054">Notiek cilnes sūtīšana...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periods</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mēnesis}zero{# mēnešu}one{# mēnesis}other{# mēneši}}</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb
index 42efcde..4817d36 100644
--- a/ui/strings/translations/ui_strings_ml.xtb
+++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ഇപ്പോള്‍</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{ഒരു മിനിറ്റ്}other{# മിനിറ്റ്}}</translation>
-<translation id="1756116796893109054">ടാബ് അയയ്‌ക്കുന്നു...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">കാലയളവ്</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{ഒരു മാസം}other{# മാസം}}</translation>
diff --git a/ui/strings/translations/ui_strings_mr.xtb b/ui/strings/translations/ui_strings_mr.xtb
index efe79fc..790797ed 100644
--- a/ui/strings/translations/ui_strings_mr.xtb
+++ b/ui/strings/translations/ui_strings_mr.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">आता</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 मिनिट}other{# मिनिटे}}</translation>
-<translation id="1756116796893109054">टॅब पाठवत आहे...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">पूर्णविराम</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 महिना}other{# महिने}}</translation>
diff --git a/ui/strings/translations/ui_strings_ms.xtb b/ui/strings/translations/ui_strings_ms.xtb
index 14aa005..e7e3c72 100644
--- a/ui/strings/translations/ui_strings_ms.xtb
+++ b/ui/strings/translations/ui_strings_ms.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">sekarang</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minit}other{# minit}}</translation>
-<translation id="1756116796893109054">Menghantar tab...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Tempoh</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 bulan}other{# bulan}}</translation>
@@ -72,7 +71,7 @@
 <translation id="3234408098842461169">Anak Panah Bawah</translation>
 <translation id="3291688615589870984">{DAYS,plural, =1{1 hari}other{# hari}}</translation>
 <translation id="335581015389089642">Pertuturan</translation>
-<translation id="3443810440409579745">Tab yang diterima.</translation>
+<translation id="3443810440409579745">Tab diterima.</translation>
 <translation id="3479552764303398839">Bukan sekarang</translation>
 <translation id="348799646910989694">Rak disembunyikan secara automatik</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 hari lagi}other{# hari lagi}}</translation>
diff --git a/ui/strings/translations/ui_strings_nl.xtb b/ui/strings/translations/ui_strings_nl.xtb
index 2b11c6e..20e82e9 100644
--- a/ui/strings/translations/ui_strings_nl.xtb
+++ b/ui/strings/translations/ui_strings_nl.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">nu</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuut}other{# minuten}}</translation>
-<translation id="1756116796893109054">Tabblad verzenden...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periode</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 maand}other{# maanden}}</translation>
diff --git a/ui/strings/translations/ui_strings_no.xtb b/ui/strings/translations/ui_strings_no.xtb
index 26b41cc..16e770b 100644
--- a/ui/strings/translations/ui_strings_no.xtb
+++ b/ui/strings/translations/ui_strings_no.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">nå</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minutt}other{# minutter}}</translation>
-<translation id="1756116796893109054">Sender fane …</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Periode</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 måned}other{# måneder}}</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb
index 29d793a9..d700565 100644
--- a/ui/strings/translations/ui_strings_pl.xtb
+++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">teraz</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuta}few{# minuty}many{# minut}other{# minuty}}</translation>
-<translation id="1756116796893109054">Wysyłam kartę…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Kropka</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 miesiąc}few{# miesiące}many{# miesięcy}other{# miesiąca}}</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb
index 52c55df5b..8bb7aaf 100644
--- a/ui/strings/translations/ui_strings_pt-BR.xtb
+++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">agora</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}one{# minutos}other{# minutos}}</translation>
-<translation id="1756116796893109054">Enviando guia…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> bytes</translation>
 <translation id="1801827354178857021">Período</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{ mês}one{# mês}other{# meses}}</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb
index 533feff..c61dad6 100644
--- a/ui/strings/translations/ui_strings_pt-PT.xtb
+++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">agora</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minuto}other{# minutos}}</translation>
-<translation id="1756116796893109054">A enviar o separador…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Período</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mês}other{# meses}}</translation>
diff --git a/ui/strings/translations/ui_strings_ro.xtb b/ui/strings/translations/ui_strings_ro.xtb
index 10e053c..bd94d043 100644
--- a/ui/strings/translations/ui_strings_ro.xtb
+++ b/ui/strings/translations/ui_strings_ro.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">acum</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{un minut}few{# minute}other{# de minute}}</translation>
-<translation id="1756116796893109054">Se trimite fila...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Punct</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 lună}few{# luni}other{# de luni}}</translation>
diff --git a/ui/strings/translations/ui_strings_ru.xtb b/ui/strings/translations/ui_strings_ru.xtb
index ff72eec..c6f1c714 100644
--- a/ui/strings/translations/ui_strings_ru.xtb
+++ b/ui/strings/translations/ui_strings_ru.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">сейчас</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 минута}one{# минута}few{# минуты}many{# минут}other{# минуты}}</translation>
-<translation id="1756116796893109054">Отправка…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> Б</translation>
 <translation id="1801827354178857021">Точка</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 месяц}one{# месяц}few{# месяца}many{# месяцев}other{# месяца}}</translation>
diff --git a/ui/strings/translations/ui_strings_sk.xtb b/ui/strings/translations/ui_strings_sk.xtb
index d4356e9..58ab0e7 100644
--- a/ui/strings/translations/ui_strings_sk.xtb
+++ b/ui/strings/translations/ui_strings_sk.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">teraz</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minúta}few{# minúty}many{# minúty}other{# minút}}</translation>
-<translation id="1756116796893109054">Odosiela sa karta…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Bodka</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mesiac}few{# mesiace}many{# mesiaca}other{# mesiacov}}</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb
index 8ce3b3d..1b45335 100644
--- a/ui/strings/translations/ui_strings_sl.xtb
+++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">zdaj</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 min}one{# min}two{# min}few{# min}other{# min}}</translation>
-<translation id="1756116796893109054">Pošiljanje zavihka …</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Obdobje</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 mesec}one{# mesec}two{# meseca}few{# mesece}other{# mesecev}}</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb
index a94c580a..876e7a2 100644
--- a/ui/strings/translations/ui_strings_sr.xtb
+++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">сада</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 минут}one{# минут}few{# минута}other{# минута}}</translation>
-<translation id="1756116796893109054">Картица се шаље...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Тачка</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 месец}one{# месец}few{# месеца}other{# месеци}}</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb
index 2f62cb8..751d558 100644
--- a/ui/strings/translations/ui_strings_sv.xtb
+++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Skift</translation>
 <translation id="1710340000377843106">nu</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 minut}other{# minuter}}</translation>
-<translation id="1756116796893109054">Fliken skickas …</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Period</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 månad}other{# månader}}</translation>
diff --git a/ui/strings/translations/ui_strings_sw.xtb b/ui/strings/translations/ui_strings_sw.xtb
index b4cd918..7c0cdf5 100644
--- a/ui/strings/translations/ui_strings_sw.xtb
+++ b/ui/strings/translations/ui_strings_sw.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Hama</translation>
 <translation id="1710340000377843106">sasa</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{Dakika 1}other{Dakika #}}</translation>
-<translation id="1756116796893109054">Inatuma kichupo...</translation>
 <translation id="1761785978543082658">B <ph name="QUANTITY" /></translation>
 <translation id="1801827354178857021">Muda</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{Mwezi 1}other{Miezi #}}</translation>
diff --git a/ui/strings/translations/ui_strings_ta.xtb b/ui/strings/translations/ui_strings_ta.xtb
index df257dc..d8113f60 100644
--- a/ui/strings/translations/ui_strings_ta.xtb
+++ b/ui/strings/translations/ui_strings_ta.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">இப்போது</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 நிமிடம்}other{# நிமிடங்கள்}}</translation>
-<translation id="1756116796893109054">தாவலை அனுப்புகிறது...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> பை</translation>
 <translation id="1801827354178857021">காலம்</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 மாதம்}other{# மாதங்கள்}}</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb
index edb5f0df..17898be 100644
--- a/ui/strings/translations/ui_strings_te.xtb
+++ b/ui/strings/translations/ui_strings_te.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ఇప్పుడు</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 నిమిషం}other{# నిమిషాలు}}</translation>
-<translation id="1756116796893109054">ట్యాబ్‌ను పంపుతోంది...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">వ్యవధి</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 నెల}other{# నెలలు}}</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb
index 288a5fd..e0beac3 100644
--- a/ui/strings/translations/ui_strings_th.xtb
+++ b/ui/strings/translations/ui_strings_th.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">ขณะนี้</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 นาที}other{# นาที}}</translation>
-<translation id="1756116796893109054">กำลังส่งแท็บ...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">ระยะเวลา</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 เดือน}other{# เดือน}}</translation>
diff --git a/ui/strings/translations/ui_strings_tr.xtb b/ui/strings/translations/ui_strings_tr.xtb
index 55e0fd7..449ebbfd 100644
--- a/ui/strings/translations/ui_strings_tr.xtb
+++ b/ui/strings/translations/ui_strings_tr.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">ÜstKrktr</translation>
 <translation id="1710340000377843106">şu an</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 dakika}other{# dakika}}</translation>
-<translation id="1756116796893109054">Sekme gönderiliyor...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Dönem</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 ay}other{# ay}}</translation>
diff --git a/ui/strings/translations/ui_strings_uk.xtb b/ui/strings/translations/ui_strings_uk.xtb
index fdacfc3f..5457e13 100644
--- a/ui/strings/translations/ui_strings_uk.xtb
+++ b/ui/strings/translations/ui_strings_uk.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">зараз</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 хвилина}one{# хвилина}few{# хвилини}many{# хвилин}other{# хвилини}}</translation>
-<translation id="1756116796893109054">Надсилання вкладки…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> б</translation>
 <translation id="1801827354178857021">Період</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 місяць}one{# місяць}few{# місяці}many{# місяців}other{# місяця}}</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb
index 6d0a3b8..e3952105 100644
--- a/ui/strings/translations/ui_strings_vi.xtb
+++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">bây giờ</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 phút}other{# phút}}</translation>
-<translation id="1756116796893109054">Đang gửi tab...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">Khoảng thời gian</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 tháng}other{# tháng}}</translation>
diff --git a/ui/strings/translations/ui_strings_zh-CN.xtb b/ui/strings/translations/ui_strings_zh-CN.xtb
index c4c3291..2fc63a4c 100644
--- a/ui/strings/translations/ui_strings_zh-CN.xtb
+++ b/ui/strings/translations/ui_strings_zh-CN.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">现在</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 分钟}other{# 分钟}}</translation>
-<translation id="1756116796893109054">正在发送标签页…</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">期间</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 个月}other{# 个月}}</translation>
diff --git a/ui/strings/translations/ui_strings_zh-TW.xtb b/ui/strings/translations/ui_strings_zh-TW.xtb
index 1897178b..4d747eb 100644
--- a/ui/strings/translations/ui_strings_zh-TW.xtb
+++ b/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -21,7 +21,6 @@
 <translation id="169515659049020177">Shift</translation>
 <translation id="1710340000377843106">現在</translation>
 <translation id="1752946267035950200">{MINUTES,plural, =1{1 分鐘}other{# 分鐘}}</translation>
-<translation id="1756116796893109054">正在傳送分頁...</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY" /> B</translation>
 <translation id="1801827354178857021">句號</translation>
 <translation id="1803208670097017349">{MONTHS,plural, =1{1 個月}other{# 個月}}</translation>
diff --git a/ui/views/PRESUBMIT.py b/ui/views/PRESUBMIT.py
new file mode 100644
index 0000000..5012155
--- /dev/null
+++ b/ui/views/PRESUBMIT.py
@@ -0,0 +1,36 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Presubmit script for changes affecting //ui/views.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into depot_tools.
+"""
+
+INCLUDE_CPP_FILES_ONLY = (
+  r'.*\.(cc|h)$',
+)
+
+
+def CheckChangeLintsClean(input_api, output_api):
+  """Makes sure that the change is cpplint clean."""
+  sources = lambda x: input_api.FilterSourceFile(
+    x, white_list=INCLUDE_CPP_FILES_ONLY,
+    black_list=input_api.DEFAULT_BLACK_LIST)
+  return input_api.canned_checks.CheckChangeLintsClean(
+      input_api, output_api, sources)
+
+
+def CheckChange(input_api, output_api):
+  results = []
+  results += CheckChangeLintsClean(input_api, output_api)
+  return results
+
+
+def CheckChangeOnUpload(input_api, output_api):
+  return CheckChange(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+  return CheckChange(input_api, output_api)
diff --git a/ui/views/controls/editable_combobox/editable_combobox.cc b/ui/views/controls/editable_combobox/editable_combobox.cc
index 57541ff..2e1546f0 100644
--- a/ui/views/controls/editable_combobox/editable_combobox.cc
+++ b/ui/views/controls/editable_combobox/editable_combobox.cc
@@ -162,6 +162,13 @@
     return MenuConfig::instance().check_selected_combobox_item;
   }
 
+  base::string16 GetItemTextAt(int index, bool showing_password_text) const {
+    return showing_password_text
+               ? items_shown_[index]
+               : base::string16(items_shown_[index].length(),
+                                gfx::RenderText::kPasswordReplacementChar);
+  }
+
   //////////////////////////////////////////////////////////////////////////////
   // Overridden from ComboboxModelObserver:
   void OnComboboxModelChanged(ui::ComboboxModel* model) override {
@@ -173,18 +180,6 @@
 
   int GetItemCount() const override { return items_shown_.size(); }
 
-  base::string16 GetLabelAt(int index) const override {
-    // Inserting the Unicode formatting characters if necessary so that the text
-    // is displayed correctly in right-to-left UIs.
-    base::string16 text =
-        owner_->showing_password_text_
-            ? items_shown_[index]
-            : base::string16(items_shown_[index].length(),
-                             gfx::RenderText::kPasswordReplacementChar);
-    base::i18n::AdjustStringForLocaleDirection(&text);
-    return text;
-  }
-
  private:
   bool HasIcons() const override { return false; }
 
@@ -201,6 +196,12 @@
     return index + kFirstMenuItemId;
   }
 
+  base::string16 GetLabelAt(int index) const override {
+    base::string16 text = GetItemTextAt(index, owner_->showing_password_text_);
+    base::i18n::AdjustStringForLocaleDirection(&text);
+    return text;
+  }
+
   bool IsItemDynamicAt(int index) const override { return false; }
 
   const gfx::FontList* GetLabelFontListAt(int index) const override {
@@ -338,7 +339,7 @@
 }
 
 base::string16 EditableCombobox::GetItemForTest(int index) {
-  return menu_model_->GetLabelAt(index);
+  return menu_model_->GetItemTextAt(index, showing_password_text_);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -431,15 +432,10 @@
 }
 
 void EditableCombobox::OnItemSelected(int index) {
-  // We set |showing_password_text_| to true before calling GetLabelAt on the
-  // selected item so that even if it was false we still get the actual
-  // characters before setting them in the textfield, which can hide them on its
-  // own. Otherwise we would be setting
-  // gfx::RenderText::kPasswordReplacementChar characters.
-  bool showing_password_text = showing_password_text_;
-  showing_password_text_ = true;
-  base::string16 selected_item_text = menu_model_->GetLabelAt(index);
-  showing_password_text_ = showing_password_text;
+  // |textfield_| can hide the characters on its own so we read the actual
+  // characters instead of gfx::RenderText::kPasswordReplacementChar characters.
+  base::string16 selected_item_text =
+      menu_model_->GetItemTextAt(index, /*showing_password_text=*/true);
   textfield_->SetText(selected_item_text);
   // SetText does not actually notify the TextfieldController, so we call the
   // handling code directly.
diff --git a/ui/views_content_client/views_content_main_delegate.cc b/ui/views_content_client/views_content_main_delegate.cc
index f4588304..6a231bbd 100644
--- a/ui/views_content_client/views_content_main_delegate.cc
+++ b/ui/views_content_client/views_content_main_delegate.cc
@@ -50,7 +50,8 @@
   content::SetContentClient(&content_client_);
 
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  settings.logging_dest =
+      logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
   bool success = logging::InitLogging(settings);
   CHECK(success);
 #if defined(OS_WIN)
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.js b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.js
index c9f7ec9..edcd2d8 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.js
+++ b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.js
@@ -64,6 +64,9 @@
   ],
 
   /** @const */
+  EMPTY_NAMESERVER: '0.0.0.0',
+
+  /** @const */
   MAX_NAMESERVERS: 4,
 
   /**
@@ -72,6 +75,39 @@
    */
   savedNameservers_: [],
 
+  /**
+   * Returns true if |nameservers| contains any all google nameserver entries
+   * and only google nameserver entries or empty entries.
+   * @param {!Array<string>} nameservers
+   * @private
+   */
+  isGoogleNameservers_: function(nameservers) {
+    const matches = [];
+    for (let i = 0; i < nameservers.length; ++i) {
+      const nameserver = nameservers[i];
+      if (nameserver == this.EMPTY_NAMESERVER) {
+        continue;
+      }
+      let valid = false;
+      for (let j = 0; j < this.GOOGLE_NAMESERVERS.length; ++j) {
+        if (nameserver == this.GOOGLE_NAMESERVERS[j]) {
+          valid = true;
+          matches[j] = true;
+          break;
+        }
+      }
+      if (!valid) {
+        return false;
+      }
+    }
+    for (let j = 0; j < this.GOOGLE_NAMESERVERS.length; ++j) {
+      if (!matches[j]) {
+        return false;
+      }
+    }
+    return true;
+  },
+
   /** @private */
   networkPropertiesChanged_: function(newValue, oldValue) {
     if (!this.networkProperties) {
@@ -95,8 +131,9 @@
         CrOnc.getActiveValue(this.networkProperties.NameServersConfigType);
     let type;
     if (configType == CrOnc.IPConfigType.STATIC) {
-      if (nameservers.join(',') == this.GOOGLE_NAMESERVERS.join(',')) {
+      if (this.isGoogleNameservers_(nameservers)) {
         type = 'google';
+        nameservers = this.GOOGLE_NAMESERVERS;  // Use consistent order.
       } else {
         type = 'custom';
       }
@@ -118,9 +155,11 @@
     if (nameserversType == 'custom') {
       // Add empty entries for unset custom nameservers.
       for (let i = nameservers.length; i < this.MAX_NAMESERVERS; ++i) {
-        nameservers[i] = '';
+        nameservers[i] = this.EMPTY_NAMESERVER;
       }
-      this.savedNameservers_ = nameservers.slice();
+      if (!this.isGoogleNameservers_(nameservers)) {
+        this.savedNameservers_ = nameservers.slice();
+      }
     }
     this.nameservers_ = nameservers;
     // Set nameserversType_ after dom-repeat has been stamped.