diff --git a/DEPS b/DEPS
index b553a0c..02ce51b 100644
--- a/DEPS
+++ b/DEPS
@@ -142,11 +142,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': '0e0113dcbd9ad8a54071e631e147aa02c1b7fb5b',
+  'skia_revision': '11eb847a2080aa944b2596a6c2f8f3bdc0eaa493',
   # 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': '63edc02cda79436625d5bc9a9b608857722a56bd',
+  'v8_revision': '68fe12cc0bdb5f67e873eb5998db078b7d9378a2',
   # 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.
@@ -154,15 +154,15 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'cb335463f56082e4e3803d4693c11f895ba774b5',
+  'angle_revision': '35c847eb2902c4f298ae386c22b872db911a325c',
   # 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': '463fab94fa2bbb5a694a185c6fc2e1036fd241c2',
+  'swiftshader_revision': '72d8104846debbd3aba9ab244fcc38302c9adf43',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '815726bc4c6997a9054ad124b2b6b82e45008ac5',
+  'pdfium_revision': '3dd6ef0648987f3c0b4b74aada0406a90e7947bd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -185,7 +185,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling lss
   # and whatever else without interference from each other.
-  'lss_revision': 'e6527b0cd469e3ff5764785dadcb39bf7d787154',
+  'lss_revision': '8048ece6c16c91acfe0d36d1d3cc0890ab6e945c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling NaCl
   # and whatever else without interference from each other.
@@ -205,7 +205,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': '0c5ef59218561b0b28ad476fe7b7ed23e9c8432b',
+  'catapult_revision': '8a36dcd7cfe8f70fcb11176d1b27b0b41d2a4c25',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -281,7 +281,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '790af403cbd5b4fa7f6b418441a6faed69d8c151',
+  'quiche_revision': '014740d305715301a61e322f254aa2819c323349',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -445,7 +445,7 @@
   },
 
   'src/ios/third_party/earl_grey2/src': {
-      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '0267411fc3bf1bef0fa3cb88e4287f6fd40c5705',
+      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '5c932e404146dfa30b90a99be943f23bdf4f5fbc',
       'condition': 'checkout_ios',
   },
 
@@ -806,7 +806,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5e4b1bc773108632898be413caa4f9dbf8592f89',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'e30471d9785ac39d5dc1da605eac676ad941c6d0',
       'condition': 'checkout_linux',
   },
 
@@ -831,7 +831,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ffd96e6df09708e09e5e3e467a2ffd322e8cb143',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ff4f6bccd80028223aeff72710d58f7de668d94f',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -1086,7 +1086,7 @@
     Var('chromium_git') + '/webm/libwebm.git' + '@' + '51ca718c3adf0ddedacd7df25fe45f67dc5a9ce1',
 
   'src/third_party/libyuv':
-    Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '09cfb2bbd61448da73a65cdf8eac3594290522bf',  # from r1714
+    Var('chromium_git') + '/libyuv/libyuv.git' + '@' + 'f9aacffa029ff3a32f0408f78e2588663271f1b1',  # from r1714
 
   'src/third_party/lighttpd': {
       'url': Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'),
@@ -1191,7 +1191,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  'e4ad8eb17f19551943940cf8f9123b45e2439ae1',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '449133b69d26534e25f15aadcd36efc84b6ae468',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1400,7 +1400,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a0fb8142b952130ea29c21b5c4484526a81fd0f3',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@8157a80b7293b3e46154c232c78e94a8a1803d00',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc
index 4b5a2f5..5d721beb 100644
--- a/ash/accelerators/accelerator_controller_impl.cc
+++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -25,7 +25,7 @@
 #include "ash/home_screen/home_screen_controller.h"
 #include "ash/ime/ime_controller.h"
 #include "ash/ime/ime_switch_type.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/kiosk_next/kiosk_next_shell_controller_impl.h"
 #include "ash/magnifier/docked_magnifier_controller_impl.h"
 #include "ash/magnifier/magnification_controller.h"
@@ -472,7 +472,7 @@
   // keyboard, but there's no easy way to do so, thus we block Alt+Tab when the
   // virtual keyboard is showing, even if it came from a real keyboard. See
   // http://crbug.com/638269
-  return !keyboard::KeyboardController::Get()->IsKeyboardVisible();
+  return !keyboard::KeyboardUIController::Get()->IsKeyboardVisible();
 }
 
 void HandleSwitchToNextIme(const ui::Accelerator& accelerator) {
diff --git a/ash/accessibility/touch_exploration_manager.cc b/ash/accessibility/touch_exploration_manager.cc
index ae5744b..1f73633 100644
--- a/ash/accessibility/touch_exploration_manager.cc
+++ b/ash/accessibility/touch_exploration_manager.cc
@@ -10,7 +10,7 @@
 #include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/accessibility/accessibility_focus_ring_controller_impl.h"
 #include "ash/accessibility/touch_exploration_controller.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/accessibility_focus_ring_info.h"
 #include "ash/public/cpp/app_types.h"
 #include "ash/root_window_controller.h"
@@ -43,7 +43,7 @@
   Shell::Get()->AddShellObserver(this);
   Shell::Get()->accessibility_controller()->AddObserver(this);
   Shell::Get()->activation_client()->AddObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
   display::Screen::GetScreen()->AddObserver(this);
   UpdateTouchExplorationState();
 }
@@ -53,7 +53,7 @@
   if (Shell::Get()->accessibility_controller())
     Shell::Get()->accessibility_controller()->RemoveObserver(this);
   Shell::Get()->activation_client()->RemoveObserver(this);
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
   display::Screen::GetScreen()->RemoveObserver(this);
   Shell::Get()->RemoveShellObserver(this);
   if (observing_window_)
@@ -226,7 +226,7 @@
     }
 
     // Virtual keyboard.
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
+    auto* keyboard_controller = keyboard::KeyboardUIController::Get();
     if (keyboard_controller->IsEnabled()) {
       touch_exploration_controller_->SetLiftActivationBounds(
           keyboard_controller->GetVisualBoundsInScreen());
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 0b595d24..a74ba69 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -25,7 +25,7 @@
 #include "ash/assistant/util/deep_link_util.h"
 #include "ash/home_screen/home_launcher_gesture_handler.h"
 #include "ash/home_screen/home_screen_controller.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_client.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_metrics.h"
@@ -140,7 +140,7 @@
   shell->wallpaper_controller()->AddObserver(this);
   shell->AddShellObserver(this);
   shell->overview_controller()->AddObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
   VoiceInteractionController::Get()->AddLocalObserver(this);
   shell->window_tree_host_manager()->AddObserver(this);
   shell->mru_window_tracker()->AddObserver(this);
@@ -1025,7 +1025,7 @@
     // the virtual keyboard is hidden for the wrong IME instance, which may
     // bring troubles when restoring the virtual keyboard (see
     // https://crbug.com/944233).
-    keyboard::KeyboardController::Get()->HideKeyboardExplicitlyBySystem();
+    keyboard::KeyboardUIController::Get()->HideKeyboardExplicitlyBySystem();
   }
 
   CloseAssistantUi(AssistantExitPoint::kLauncherClose);
@@ -1352,7 +1352,7 @@
   if (!IsHomeScreenAvailable() || !presenter_.IsVisible())
     return;
 
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsKeyboardVisible())
     keyboard_controller->HideKeyboardByUser();
   presenter_.GetView()->CloseOpenedPage();
@@ -1427,7 +1427,7 @@
   shell->mru_window_tracker()->RemoveObserver(this);
   shell->window_tree_host_manager()->RemoveObserver(this);
   VoiceInteractionController::Get()->RemoveLocalObserver(this);
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
   shell->overview_controller()->RemoveObserver(this);
   shell->RemoveShellObserver(this);
   shell->wallpaper_controller()->RemoveObserver(this);
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index 789d3ad4..4a29505 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -66,7 +66,7 @@
 aura::Window* GetVirtualKeyboardWindow() {
   return Shell::Get()
       ->keyboard_controller()
-      ->keyboard_controller()
+      ->keyboard_ui_controller()
       ->GetKeyboardWindow();
 }
 
diff --git a/ash/app_list/app_list_presenter_delegate_impl.cc b/ash/app_list/app_list_presenter_delegate_impl.cc
index 0b24d452..7b136de 100644
--- a/ash/app_list/app_list_presenter_delegate_impl.cc
+++ b/ash/app_list/app_list_presenter_delegate_impl.cc
@@ -11,7 +11,7 @@
 #include "ash/app_list/views/app_list_view.h"
 #include "ash/app_list/views/contents_view.h"
 #include "ash/app_list/views/search_box_view.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_switches.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "ash/public/cpp/shelf_types.h"
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc
index f632fa1..cb04194 100644
--- a/ash/app_list/app_list_presenter_delegate_unittest.cc
+++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -20,7 +20,7 @@
 #include "ash/app_list/views/expand_arrow_view.h"
 #include "ash/app_list/views/search_box_view.h"
 #include "ash/app_list/views/test/apps_grid_view_test_api.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
@@ -393,7 +393,7 @@
                                ui::GestureEventDetails(ui::ET_GESTURE_TAP));
 
   // Manually show the virtual keyboard.
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(true /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
@@ -2037,7 +2037,7 @@
   GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenSearch);
 
   // Manually show the virtual keyboard.
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(true);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
diff --git a/ash/app_list/model/search/search_model.cc b/ash/app_list/model/search/search_model.cc
index 63a7385..7de4def 100644
--- a/ash/app_list/model/search/search_model.cc
+++ b/ash/app_list/model/search/search_model.cc
@@ -50,11 +50,11 @@
     size_t max_results) {
   std::vector<SearchResult*> matches;
   for (size_t i = 0; i < results->item_count(); ++i) {
+    if (matches.size() == max_results)
+      break;
     SearchResult* item = results->GetItemAt(i);
     if (result_filter.Run(*item)) {
       matches.push_back(item);
-      if (matches.size() == max_results)
-        break;
     }
   }
   return matches;
diff --git a/ash/app_list/model/search/search_result.h b/ash/app_list/model/search/search_result.h
index e56aa37..cc05ea5 100644
--- a/ash/app_list/model/search/search_result.h
+++ b/ash/app_list/model/search/search_result.h
@@ -37,6 +37,8 @@
   using Tags = ash::SearchResultTags;
   using Action = ash::SearchResultAction;
   using Actions = ash::SearchResultActions;
+  using DisplayLocation = ash::SearchResultDisplayLocation;
+  using DisplayIndex = ash::SearchResultDisplayIndex;
 
   SearchResult();
   virtual ~SearchResult();
@@ -106,6 +108,18 @@
     metadata_->result_type = result_type;
   }
 
+  DisplayLocation display_location() const {
+    return metadata_->display_location;
+  }
+  void set_display_location(DisplayLocation display_location) {
+    metadata_->display_location = display_location;
+  }
+
+  DisplayIndex display_index() const { return metadata_->display_index; }
+  void set_display_index(DisplayIndex display_index) {
+    metadata_->display_index = display_index;
+  }
+
   int result_subtype() const { return metadata_->result_subtype; }
   void set_result_subtype(int result_subtype) {
     metadata_->result_subtype = result_subtype;
diff --git a/ash/app_list/views/app_list_folder_view.cc b/ash/app_list/views/app_list_folder_view.cc
index 97f6231..e8e7409 100644
--- a/ash/app_list/views/app_list_folder_view.cc
+++ b/ash/app_list/views/app_list_folder_view.cc
@@ -21,7 +21,7 @@
 #include "ash/app_list/views/page_switcher.h"
 #include "ash/app_list/views/search_box_view.h"
 #include "ash/app_list/views/top_icon_animation_view.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/pagination/pagination_model.h"
@@ -631,7 +631,7 @@
 }
 
 int AppListFolderView::GetYOffsetForFolder() {
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   if (!keyboard_controller->IsEnabled())
     return 0;
 
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc
index 3a958ef..5a1e47e 100644
--- a/ash/app_list/views/app_list_view.cc
+++ b/ash/app_list/views/app_list_view.cc
@@ -17,7 +17,7 @@
 #include "ash/app_list/views/horizontal_page_container.h"
 #include "ash/app_list/views/search_box_view.h"
 #include "ash/assistant/ui/assistant_ui_constants.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
@@ -1951,10 +1951,11 @@
 }
 
 bool AppListView::CloseKeyboardIfVisible() {
-  // TODO(ginko) abstract this function to be in |keyboard::KeyboardController|
-  if (!keyboard::KeyboardController::HasInstance())
+  // TODO(ginko) abstract this function to be in
+  // |keyboard::KeyboardUIController*|
+  if (!keyboard::KeyboardUIController::HasInstance())
     return false;
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsKeyboardVisible()) {
     keyboard_controller->HideKeyboardByUser();
     return true;
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc
index 6cfb041..30a2dfd 100644
--- a/ash/app_list/views/app_list_view_unittest.cc
+++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -37,7 +37,7 @@
 #include "ash/app_list/views/search_result_view.h"
 #include "ash/app_list/views/suggestion_chip_container_view.h"
 #include "ash/app_list/views/test/apps_grid_view_test_api.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/pagination/pagination_model.h"
@@ -219,7 +219,7 @@
   std::unique_ptr<AppsGridViewTestApi> test_api_;
 
   // Used by AppListFolderView::UpdatePreferredBounds.
-  keyboard::KeyboardController keyboard_controller_;
+  keyboard::KeyboardUIController keyboard_ui_controller_;
 
   bool is_rtl_ = false;
 
@@ -616,7 +616,7 @@
   base::test::ScopedRestoreICUDefaultLocale restore_locale_;
 
   // Used by AppListFolderView::UpdatePreferredBounds.
-  keyboard::KeyboardController keyboard_controller_;
+  keyboard::KeyboardUIController keyboard_ui_controller_;
 
   // A fake NavigableContents implementation to back card navigation requests.
   content::FakeNavigableContents fake_card_contents_;
diff --git a/ash/app_list/views/apps_grid_view_unittest.cc b/ash/app_list/views/apps_grid_view_unittest.cc
index 2359ec49..3d6c158 100644
--- a/ash/app_list/views/apps_grid_view_unittest.cc
+++ b/ash/app_list/views/apps_grid_view_unittest.cc
@@ -29,7 +29,7 @@
 #include "ash/app_list/views/search_result_tile_item_view.h"
 #include "ash/app_list/views/suggestion_chip_container_view.h"
 #include "ash/app_list/views/test/apps_grid_view_test_api.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_switches.h"
@@ -304,7 +304,7 @@
   base::test::ScopedRestoreICUDefaultLocale restore_locale_;
 
   // Used by AppListFolderView::UpdatePreferredBounds.
-  keyboard::KeyboardController keyboard_controller_;
+  keyboard::KeyboardUIController keyboard_ui_controller_;
 
   DISALLOW_COPY_AND_ASSIGN(AppsGridViewTest);
 };
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc
index 7cae89b..0124008 100644
--- a/ash/app_list/views/contents_view.cc
+++ b/ash/app_list/views/contents_view.cc
@@ -21,7 +21,7 @@
 #include "ash/app_list/views/search_result_list_view.h"
 #include "ash/app_list/views/search_result_page_view.h"
 #include "ash/app_list/views/search_result_tile_item_list_view.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_switches.h"
@@ -504,7 +504,7 @@
 
 bool ContentsView::Back() {
   // If the virtual keyboard is visible, dismiss the keyboard and return early
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsKeyboardVisible()) {
     keyboard_controller->HideKeyboardByUser();
     return true;
diff --git a/ash/app_list/views/folder_background_view.cc b/ash/app_list/views/folder_background_view.cc
index f5818cd9..f47f9f0 100644
--- a/ash/app_list/views/folder_background_view.cc
+++ b/ash/app_list/views/folder_background_view.cc
@@ -5,7 +5,7 @@
 #include "ash/app_list/views/folder_background_view.h"
 
 #include "ash/app_list/views/app_list_folder_view.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 
 namespace app_list {
 
@@ -34,7 +34,7 @@
 
 void FolderBackgroundView::HandleClickOrTap() {
   // If the virtual keyboard is visible, dismiss the keyboard and return early
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsKeyboardVisible()) {
     keyboard_controller->HideKeyboardByUser();
     return;
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc
index 5125f69..25a91bd 100644
--- a/ash/app_list/views/search_box_view.cc
+++ b/ash/app_list/views/search_box_view.cc
@@ -20,7 +20,7 @@
 #include "ash/app_list/views/result_selection_controller.h"
 #include "ash/app_list/views/search_result_base_view.h"
 #include "ash/app_list/views/search_result_page_view.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/vector_icons/vector_icons.h"
@@ -156,9 +156,9 @@
 }
 
 void SearchBoxView::UpdateKeyboardVisibility() {
-  if (!keyboard::KeyboardController::HasInstance())
+  if (!keyboard::KeyboardUIController::HasInstance())
     return;
-  auto* const keyboard_controller = keyboard::KeyboardController::Get();
+  auto* const keyboard_controller = keyboard::KeyboardUIController::Get();
   bool should_show_keyboard =
       is_search_box_active() && search_box()->HasFocus();
   if (!keyboard_controller->IsEnabled() ||
diff --git a/ash/app_list/views/suggestion_chip_container_view.cc b/ash/app_list/views/suggestion_chip_container_view.cc
index e7274da..e77b757 100644
--- a/ash/app_list/views/suggestion_chip_container_view.cc
+++ b/ash/app_list/views/suggestion_chip_container_view.cc
@@ -12,6 +12,8 @@
 #include "ash/app_list/views/search_box_view.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
+#include "ash/public/cpp/app_list/app_list_types.h"
+#include "ash/public/cpp/app_list/internal_app_id_constants.h"
 #include "base/bind.h"
 #include "base/callback.h"
 #include "ui/views/accessibility/view_accessibility.h"
@@ -26,6 +28,18 @@
 // The spacing between chips.
 constexpr int kChipSpacing = 8;
 
+// Sort suggestion chip results by |display_index| value in ascending order.
+bool IndexOrdering(const SearchResult* result1, const SearchResult* result2) {
+  return result1->display_index() < result2->display_index();
+}
+
+bool IsPolicySuggestionChip(const SearchResult* result) {
+  return result->display_location() ==
+             ash::SearchResultDisplayLocation::kSuggestionChipContainer &&
+         result->display_index() !=
+             ash::SearchResultDisplayIndex::kPlacementUndefined;
+}
+
 }  // namespace
 
 SuggestionChipContainerView::SuggestionChipContainerView(
@@ -70,17 +84,41 @@
   if (IgnoreUpdateAndLayout())
     return num_results();
 
+  // Filter out priority suggestion chips with a non-default value
+  // for |display_index|.
+  auto filter_indexed_policy_chips = [](const SearchResult& r) -> bool {
+    return IsPolicySuggestionChip(&r);
+  };
+  std::vector<SearchResult*> indexed_policy_results =
+      SearchModel::FilterSearchResultsByFunction(
+          results(), base::BindRepeating(filter_indexed_policy_chips),
+          AppListConfig::instance().num_start_page_tiles());
+
+  std::sort(indexed_policy_results.begin(), indexed_policy_results.end(),
+            &IndexOrdering);
+
   // Need to filter out kArcAppShortcut since it will be confusing to users
-  // if shortcuts are displayed as suggestion chips.
+  // if shortcuts are displayed as suggestion chips. Also filter out any
+  // duplicate policy chip results.
   auto filter_reinstall_and_shortcut = [](const SearchResult& r) -> bool {
     return r.display_type() == ash::SearchResultDisplayType::kRecommendation &&
            r.result_type() != ash::SearchResultType::kPlayStoreReinstallApp &&
-           r.result_type() != ash::SearchResultType::kArcAppShortcut;
+           r.result_type() != ash::SearchResultType::kArcAppShortcut &&
+           !IsPolicySuggestionChip(&r);
   };
   std::vector<SearchResult*> display_results =
       SearchModel::FilterSearchResultsByFunction(
           results(), base::BindRepeating(filter_reinstall_and_shortcut),
-          AppListConfig::instance().num_start_page_tiles());
+          AppListConfig::instance().num_start_page_tiles() -
+              indexed_policy_results.size());
+
+  // Update display results list by placing policy result chips at their
+  // specified |display_index|.
+  for (auto* result : indexed_policy_results) {
+    std::vector<SearchResult*>::iterator desired_index =
+        display_results.begin() + result->display_index();
+    display_results.emplace(desired_index, result);
+  }
 
   // Update search results here, but wait until layout to add them as child
   // views when we know this view's bounds.
diff --git a/ash/assistant/assistant_ui_controller.cc b/ash/assistant/assistant_ui_controller.cc
index 11e3bcf..423ebfe 100644
--- a/ash/assistant/assistant_ui_controller.cc
+++ b/ash/assistant/assistant_ui_controller.cc
@@ -12,7 +12,7 @@
 #include "ash/assistant/util/assistant_util.h"
 #include "ash/assistant/util/deep_link_util.h"
 #include "ash/assistant/util/histogram_util.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/multi_user/multi_user_window_manager_impl.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/toast_data.h"
@@ -546,8 +546,8 @@
 
   const gfx::Rect screen_bounds =
       container_view_->GetWidget()->GetWindowBoundsInScreen();
-  const gfx::Rect keyboard_bounds =
-      keyboard::KeyboardController::Get()->GetWorkspaceOccludedBoundsInScreen();
+  const gfx::Rect keyboard_bounds = keyboard::KeyboardUIController::Get()
+                                        ->GetWorkspaceOccludedBoundsInScreen();
 
   // Pressed events outside our widget bounds should result in hiding of the
   // Assistant UI. The exception to this rule is if the user is interacting
@@ -598,11 +598,12 @@
 
   // To save resources, only watch these events while Assistant UI exists.
   display::Screen::GetScreen()->AddObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
 
   // Retrieve the current keyboard occluded bounds.
   keyboard_workspace_occluded_bounds_ =
-      keyboard::KeyboardController::Get()->GetWorkspaceOccludedBoundsInScreen();
+      keyboard::KeyboardUIController::Get()
+          ->GetWorkspaceOccludedBoundsInScreen();
 
   // Set the initial usable work area for Assistant views.
   aura::Window* root_window =
@@ -612,7 +613,7 @@
 
 void AssistantUiController::ResetContainerView() {
   // Remove observers when the Assistant UI is closed.
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
   display::Screen::GetScreen()->RemoveObserver(this);
 
   container_view_->GetWidget()->RemoveObserver(this);
diff --git a/ash/components/strings/ash_components_strings_am.xtb b/ash/components/strings/ash_components_strings_am.xtb
index 7f65e1f..8a237a8 100644
--- a/ash/components/strings/ash_components_strings_am.xtb
+++ b/ash/components/strings/ash_components_strings_am.xtb
@@ -33,6 +33,7 @@
 <translation id="2185166372312820725">ወደ ቀዳሚው ትር ሂድ</translation>
 <translation id="2194790690264064655"><ph name="CTRL" /> ይጫኑ እና አገናኝ ጠቅ ያድርጉ</translation>
 <translation id="2246352309084894470">የሙሉ ማያ ገጽ አስጀማሪውን ይክፈቱ/ይዝጉ</translation>
+<translation id="2354531887393764880">ነጥብ</translation>
 <translation id="2382644247745281995">በአሁኑ የቁልፍ ሰሌዳ አቀማመጥ አይደገፍም</translation>
 <translation id="2397416548179033562">የChrome ምናሌ አሳይ</translation>
 <translation id="2424073332829844142">Caps Lock ያብሩ እና ያጥፉ</translation>
@@ -78,6 +79,7 @@
 <translation id="3792178297143798024">በእርስዎ መደርደሪያ ላይ የደመቀውን ንጥል ይክፈቱ</translation>
 <translation id="379295446891231126"><ph name="CTRL" /><ph name="SEPARATOR" /> ከ1 እስከ 8</translation>
 <translation id="3837047332182291558">የቁልፍ ሰሌዳን ይበልጥ ብሩህ ያድርጉ (የጀርባ ብርሃን ላላቸው ቁልፍ ሰሌዳዎች ብቻ)</translation>
+<translation id="3949671998904569433">ኮማ</translation>
 <translation id="3976863468609830880">በእርስዎ መደርደሪያ ላይ የመጨረሻውን አዶ ጠቅ ያድርጉ</translation>
 <translation id="3994783594793697310">የማሳያ ማጉላት ደረጃውን ዳግም አስጀምር</translation>
 <translation id="4026843240379844265">በማሳያዎች መካከል ንቁ መስኮትን ያንቀሳቅሱ</translation>
@@ -159,8 +161,10 @@
 <translation id="7422707470576323858">ወደ ቀጣዩ የግቤት ስልት ይቀይሩ</translation>
 <translation id="743754632698445141">አንድ መተግበሪያን ይንቀሉ</translation>
 <translation id="7439718573248533901">ቀጣዩን ፊደል ይሰርዙ (ወደፊት ስረዛ)</translation>
+<translation id="7500368597227394048">ሰረዝ</translation>
 <translation id="7611271430932669992">ትኩረቱን ወደ ብቅ-ባዮች እና መገናኛዎች ይውሰዱ</translation>
 <translation id="766326951329901120">ይዘትን ከቅንጥብ ሰሌዳው ላይ እንደ ዝርግ ጽሑፍ ለጥፍ</translation>
+<translation id="7703010453515335249">ቅንፍ ግራ</translation>
 <translation id="7724603315864178912">ቁረጥ</translation>
 <translation id="7730490981846175479"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />፣ ከዚያ <ph name="SPACE" /> ወይም <ph name="ENTER" /></translation>
 <translation id="7787242579016742662">አንድ ፋይል በአሳሹ ውስጥ ይክፈቱ</translation>
@@ -170,6 +174,7 @@
 <translation id="8147954207400281792"><ph name="CTRL" /><ph name="SEPARATOR" /><ph name="K" /> ወይም <ph name="E" /></translation>
 <translation id="8232835244134740473">በእነዚህ መካከል ትኩረትን ቀያይር፦ የሁኔታ አካባቢ (የእርስዎ መለያ ሥዕል ብቅ የሚልበት ቦታ) አስጀማሪ፣ የአድራሻ አሞሌ፣ የእልባቶች አሞሌ (የሚታይ ከሆነ)፣ የተከፈተው ድረ-ገጽ፣ የውርዶች አሞሌ (የሚታይ ከሆነ)።</translation>
 <translation id="8234414138295101081">ማያ ገጽን 90 ዲግሪ አሽከርክር</translation>
+<translation id="8241665785394195545">ቅንፍ ቀኝ</translation>
 <translation id="8264941229485248811">የገንቢ መሣሪያዎች መርማሪን አሳይ ወይም ደብቅ</translation>
 <translation id="836869401750819675">የውርዶች ገጽን ይክፈቱ</translation>
 <translation id="8388247778047144397">አገናኙን በትሩ ድርድር ላይ ወዳለ ባዶ ቦታ ይጎትቱት</translation>
diff --git a/ash/components/strings/ash_components_strings_es-419.xtb b/ash/components/strings/ash_components_strings_es-419.xtb
index 551fbd5..9b370b3 100644
--- a/ash/components/strings/ash_components_strings_es-419.xtb
+++ b/ash/components/strings/ash_components_strings_es-419.xtb
@@ -33,6 +33,7 @@
 <translation id="2185166372312820725">Ir a la pestaña anterior</translation>
 <translation id="2194790690264064655">Presiona <ph name="CTRL" /> y, luego, haz clic en un vínculo</translation>
 <translation id="2246352309084894470">Abrir o cerrar el Selector de pantalla completa</translation>
+<translation id="2354531887393764880">tiempo</translation>
 <translation id="2382644247745281995">No es compatible con el diseño del teclado actual</translation>
 <translation id="2397416548179033562">Mostrar el menú de Chrome</translation>
 <translation id="2424073332829844142">Activar y desactivar Bloq Mayús</translation>
@@ -78,6 +79,7 @@
 <translation id="3792178297143798024">Abrir el elemento destacado en la biblioteca</translation>
 <translation id="379295446891231126"><ph name="CTRL" /><ph name="SEPARATOR" /> 1 a 8</translation>
 <translation id="3837047332182291558">Aumentar el brillo del teclado (solo para teclados retroiluminados)</translation>
+<translation id="3949671998904569433">coma</translation>
 <translation id="3976863468609830880">Hacer clic en el último ícono de la biblioteca</translation>
 <translation id="3994783594793697310">Restablecer el nivel de zoom de la pantalla</translation>
 <translation id="4026843240379844265">Mover la ventana activa de una pantalla a otra</translation>
@@ -159,8 +161,10 @@
 <translation id="7422707470576323858">Cambiar al siguiente método de entrada disponible</translation>
 <translation id="743754632698445141">Dejar de fijar una app</translation>
 <translation id="7439718573248533901">Borrar la letra siguiente (borrar siguiente)</translation>
+<translation id="7500368597227394048">guion</translation>
 <translation id="7611271430932669992">Mover el foco a ventanas emergentes y diálogos</translation>
 <translation id="766326951329901120">Pegar el contenido del portapapeles como texto sin formato</translation>
+<translation id="7703010453515335249">corchete de apertura</translation>
 <translation id="7724603315864178912">Cortar</translation>
 <translation id="7730490981846175479"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, luego <ph name="SPACE" /> o <ph name="ENTER" /></translation>
 <translation id="7787242579016742662">Abrir un archivo en el navegador</translation>
@@ -170,6 +174,7 @@
 <translation id="8147954207400281792"><ph name="CTRL" /><ph name="SEPARATOR" /><ph name="K" /> o <ph name="E" /></translation>
 <translation id="8232835244134740473">Alternar el foco entre el área de estado (donde se muestra la imagen de tu cuenta), el Selector, la barra de direcciones, la barra de favoritos (si está visible), la página web que se abre y la barra de descargas (si está visible)</translation>
 <translation id="8234414138295101081">Rotar la pantalla 90 grados</translation>
+<translation id="8241665785394195545">corchete de cierre</translation>
 <translation id="8264941229485248811">Mostrar u ocultar el inspector de Herramientas para desarrolladores</translation>
 <translation id="836869401750819675">Abrir la página de descargas</translation>
 <translation id="8388247778047144397">Arrastra el vínculo al área en blanco de la barra de pestañas</translation>
diff --git a/ash/components/strings/ash_components_strings_fa.xtb b/ash/components/strings/ash_components_strings_fa.xtb
index 8751354e..76b307a4 100644
--- a/ash/components/strings/ash_components_strings_fa.xtb
+++ b/ash/components/strings/ash_components_strings_fa.xtb
@@ -15,7 +15,7 @@
 <translation id="1510238584712386396">راه‌انداز</translation>
 <translation id="152892567002884378">افزایش صدا</translation>
 <translation id="1560480564179555003"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" /> و سپس <ph name="ESC" /></translation>
-<translation id="1652741121070700329">حرکت به ابتدای کلمه قبل</translation>
+<translation id="1652741121070700329">رفتن به ابتدای کلمه قبل</translation>
 <translation id="1679841710523778799">زیاد کردن روشنایی</translation>
 <translation id="168356808214100546"><ph name="ALT" /> را فشار دهید و نگه‌دارید، روی <ph name="TAB" /> ضربه بزنید تا به پنجره‌ای که می‌خواهید باز شود برسید، سپس آن را رها کنید.</translation>
 <translation id="169515659049020177">تبدیل</translation>
@@ -98,7 +98,7 @@
 <translation id="4628718545549558538">باز کردن ناحیه نشانگر وضعیت (جایی که تصویر حسابتان نشان داده می‌شود)</translation>
 <translation id="4642092649622328492">گرفتن عکس از قسمتی از صفحه‌نمایش</translation>
 <translation id="4698850295812410683">نمایش ابزار قلم</translation>
-<translation id="4801989101741319327">حرکت به انتهای کلمه بعد</translation>
+<translation id="4801989101741319327">رفتن به انتهای کلمه بعد</translation>
 <translation id="4916163929714267752">بازکردن پیوند در پنجره جدید</translation>
 <translation id="5030659775136592441">نمایش مدیر نشانک</translation>
 <translation id="5034421018520995080">رفتن به بالای صفحه</translation>
diff --git a/ash/components/strings/ash_components_strings_fil.xtb b/ash/components/strings/ash_components_strings_fil.xtb
index f684c8df..135e276 100644
--- a/ash/components/strings/ash_components_strings_fil.xtb
+++ b/ash/components/strings/ash_components_strings_fil.xtb
@@ -33,6 +33,7 @@
 <translation id="2185166372312820725">Pumunta sa nakaraang tab</translation>
 <translation id="2194790690264064655">Pindutin ang <ph name="CTRL" /> at mag-click ng link</translation>
 <translation id="2246352309084894470">Buksan/isara ang launcher ng fullscreen</translation>
+<translation id="2354531887393764880">tuldok</translation>
 <translation id="2382644247745281995">Hindi sinusuportahan sa kasalukuyang layout ng keyboard</translation>
 <translation id="2397416548179033562">Ipakita ang menu ng Chrome</translation>
 <translation id="2424073332829844142">I-on at i-off ang Caps Lock</translation>
@@ -78,6 +79,7 @@
 <translation id="3792178297143798024">Nagbubukas sa naka-highlight na item sa iyong shelf</translation>
 <translation id="379295446891231126"><ph name="CTRL" /><ph name="SEPARATOR" /> 1 hanggang 8</translation>
 <translation id="3837047332182291558">Gawing mas maliwanag ang keyboard (para lang sa mga keyboard na may backlight)</translation>
+<translation id="3949671998904569433">kuwit</translation>
 <translation id="3976863468609830880">I-click ang huling icon sa iyong shelf</translation>
 <translation id="3994783594793697310">I-reset ang pagpapakita ng antas ng pag-zoom</translation>
 <translation id="4026843240379844265">Ilipat ang aktibong window sa pagitan ng mga display</translation>
@@ -159,8 +161,10 @@
 <translation id="7422707470576323858">Lumipat sa susunod na available na pamamaraan ng pag-input</translation>
 <translation id="743754632698445141">Mag-unpin ng app</translation>
 <translation id="7439718573248533901">I-delete ang susunod na titik (forward na pag-delete)</translation>
+<translation id="7500368597227394048">gitling</translation>
 <translation id="7611271430932669992">Inililipat ang focus sa mga popup at dialog</translation>
 <translation id="766326951329901120">I-paste ang content mula sa clipboard bilang plain text</translation>
+<translation id="7703010453515335249">kaliwang panaklong</translation>
 <translation id="7724603315864178912">I-cut</translation>
 <translation id="7730490981846175479"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, pagkatapos ay <ph name="SPACE" /> o <ph name="ENTER" /></translation>
 <translation id="7787242579016742662">Magbukas ng file sa browser</translation>
@@ -170,6 +174,7 @@
 <translation id="8147954207400281792"><ph name="CTRL" /><ph name="SEPARATOR" /><ph name="K" /> o <ph name="E" /></translation>
 <translation id="8232835244134740473">Nililipat-lipat ang focus sa: Lugar ng status (kung saan lumalabas ang iyong larawan sa account), Launcher, Address bar, Bookmarks bar (kung nakikita), Webpage na nakabukas, at Bar ng mga download (kung nakikita).</translation>
 <translation id="8234414138295101081">I-rotate ang screen nang 90 degrees</translation>
+<translation id="8241665785394195545">kanang panaklong</translation>
 <translation id="8264941229485248811">Ipakita o itago ang inspector ng Mga Tool ng Developer</translation>
 <translation id="836869401750819675">Buksan ang page ng Mga Download</translation>
 <translation id="8388247778047144397">I-drag ang link sa isang blankong bahagi sa tab strip</translation>
diff --git a/ash/keyboard/keyboard_controller_impl.cc b/ash/keyboard/keyboard_controller_impl.cc
index 8d1036c..bf7d8d60 100644
--- a/ash/keyboard/keyboard_controller_impl.cc
+++ b/ash/keyboard/keyboard_controller_impl.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_ui_factory.h"
 #include "ash/keyboard/virtual_keyboard_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -41,14 +41,15 @@
 KeyboardControllerImpl::KeyboardControllerImpl(
     SessionControllerImpl* session_controller)
     : session_controller_(session_controller),
-      keyboard_controller_(std::make_unique<keyboard::KeyboardController>()) {
+      keyboard_ui_controller_(
+          std::make_unique<keyboard::KeyboardUIController>()) {
   if (session_controller_)  // May be null in tests.
     session_controller_->AddObserver(this);
-  keyboard_controller_->AddObserver(this);
+  keyboard_ui_controller_->AddObserver(this);
 }
 
 KeyboardControllerImpl::~KeyboardControllerImpl() {
-  keyboard_controller_->RemoveObserver(this);
+  keyboard_ui_controller_->RemoveObserver(this);
   if (session_controller_)  // May be null in tests.
     session_controller_->RemoveObserver(this);
 }
@@ -57,18 +58,18 @@
     std::unique_ptr<keyboard::KeyboardUIFactory> keyboard_ui_factory) {
   DCHECK(keyboard_ui_factory);
   virtual_keyboard_controller_ = std::make_unique<VirtualKeyboardController>();
-  keyboard_controller_->Initialize(std::move(keyboard_ui_factory), this);
+  keyboard_ui_controller_->Initialize(std::move(keyboard_ui_factory), this);
 
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           keyboard::switches::kEnableVirtualKeyboard)) {
-    keyboard_controller_->SetEnableFlag(
+    keyboard_ui_controller_->SetEnableFlag(
         KeyboardEnableFlag::kCommandLineEnabled);
   }
 }
 
 void KeyboardControllerImpl::DestroyVirtualKeyboard() {
   virtual_keyboard_controller_.reset();
-  keyboard_controller_->Shutdown();
+  keyboard_ui_controller_->Shutdown();
 }
 
 void KeyboardControllerImpl::SendOnKeyboardVisibleBoundsChanged(
@@ -91,64 +92,64 @@
 // ash::KeyboardController
 
 void KeyboardControllerImpl::KeyboardContentsLoaded(const gfx::Size& size) {
-  keyboard_controller()->KeyboardContentsLoaded(size);
+  keyboard_ui_controller()->KeyboardContentsLoaded(size);
 }
 
 keyboard::KeyboardConfig KeyboardControllerImpl::GetKeyboardConfig() {
-  return keyboard_controller_->keyboard_config();
+  return keyboard_ui_controller_->keyboard_config();
 }
 
 void KeyboardControllerImpl::SetKeyboardConfig(
     const KeyboardConfig& keyboard_config) {
-  keyboard_controller_->UpdateKeyboardConfig(keyboard_config);
+  keyboard_ui_controller_->UpdateKeyboardConfig(keyboard_config);
 }
 
 bool KeyboardControllerImpl::IsKeyboardEnabled() {
-  return keyboard_controller_->IsEnabled();
+  return keyboard_ui_controller_->IsEnabled();
 }
 
 void KeyboardControllerImpl::SetEnableFlag(KeyboardEnableFlag flag) {
-  keyboard_controller_->SetEnableFlag(flag);
+  keyboard_ui_controller_->SetEnableFlag(flag);
 }
 
 void KeyboardControllerImpl::ClearEnableFlag(KeyboardEnableFlag flag) {
-  keyboard_controller_->ClearEnableFlag(flag);
+  keyboard_ui_controller_->ClearEnableFlag(flag);
 }
 
 const std::set<keyboard::KeyboardEnableFlag>&
 KeyboardControllerImpl::GetEnableFlags() {
-  return keyboard_controller_->keyboard_enable_flags();
+  return keyboard_ui_controller_->keyboard_enable_flags();
 }
 
 void KeyboardControllerImpl::ReloadKeyboardIfNeeded() {
-  keyboard_controller_->Reload();
+  keyboard_ui_controller_->Reload();
 }
 
 void KeyboardControllerImpl::RebuildKeyboardIfEnabled() {
   // Test IsKeyboardEnableRequested in case of an unlikely edge case where this
   // is called while after the enable state changed to disabled (in which case
   // we do not want to override the requested state).
-  keyboard_controller_->RebuildKeyboardIfEnabled();
+  keyboard_ui_controller_->RebuildKeyboardIfEnabled();
 }
 
 bool KeyboardControllerImpl::IsKeyboardVisible() {
-  return keyboard_controller_->IsKeyboardVisible();
+  return keyboard_ui_controller_->IsKeyboardVisible();
 }
 
 void KeyboardControllerImpl::ShowKeyboard() {
-  if (keyboard_controller_->IsEnabled())
-    keyboard_controller_->ShowKeyboard(false /* lock */);
+  if (keyboard_ui_controller_->IsEnabled())
+    keyboard_ui_controller_->ShowKeyboard(false /* lock */);
 }
 
 void KeyboardControllerImpl::HideKeyboard(HideReason reason) {
-  if (!keyboard_controller_->IsEnabled())
+  if (!keyboard_ui_controller_->IsEnabled())
     return;
   switch (reason) {
     case HideReason::kUser:
-      keyboard_controller_->HideKeyboardByUser();
+      keyboard_ui_controller_->HideKeyboardByUser();
       break;
     case HideReason::kSystem:
-      keyboard_controller_->HideKeyboardExplicitlyBySystem();
+      keyboard_ui_controller_->HideKeyboardExplicitlyBySystem();
       break;
   }
 }
@@ -157,29 +158,29 @@
     keyboard::ContainerType container_type,
     const base::Optional<gfx::Rect>& target_bounds,
     SetContainerTypeCallback callback) {
-  keyboard_controller_->SetContainerType(container_type, target_bounds,
-                                         std::move(callback));
+  keyboard_ui_controller_->SetContainerType(container_type, target_bounds,
+                                            std::move(callback));
 }
 
 void KeyboardControllerImpl::SetKeyboardLocked(bool locked) {
-  keyboard_controller_->set_keyboard_locked(locked);
+  keyboard_ui_controller_->set_keyboard_locked(locked);
 }
 
 void KeyboardControllerImpl::SetOccludedBounds(
     const std::vector<gfx::Rect>& bounds) {
   // TODO(https://crbug.com/826617): Support occluded bounds with multiple
   // rectangles.
-  keyboard_controller_->SetOccludedBounds(bounds.empty() ? gfx::Rect()
-                                                         : bounds[0]);
+  keyboard_ui_controller_->SetOccludedBounds(bounds.empty() ? gfx::Rect()
+                                                            : bounds[0]);
 }
 
 void KeyboardControllerImpl::SetHitTestBounds(
     const std::vector<gfx::Rect>& bounds) {
-  keyboard_controller_->SetHitTestBounds(bounds);
+  keyboard_ui_controller_->SetHitTestBounds(bounds);
 }
 
 void KeyboardControllerImpl::SetDraggableArea(const gfx::Rect& bounds) {
-  keyboard_controller_->SetDraggableArea(bounds);
+  keyboard_ui_controller_->SetDraggableArea(bounds);
 }
 
 void KeyboardControllerImpl::AddObserver(KeyboardControllerObserver* observer) {
@@ -189,7 +190,7 @@
 // SessionObserver
 void KeyboardControllerImpl::OnSessionStateChanged(
     session_manager::SessionState state) {
-  if (!keyboard_controller_->IsEnabled())
+  if (!keyboard_ui_controller_->IsEnabled())
     return;
 
   switch (state) {
@@ -208,10 +209,10 @@
 }
 
 void KeyboardControllerImpl::OnRootWindowClosing(aura::Window* root_window) {
-  if (keyboard_controller_->GetRootWindow() == root_window) {
+  if (keyboard_ui_controller_->GetRootWindow() == root_window) {
     aura::Window* new_parent = GetContainerForDefaultDisplay();
     DCHECK_NE(root_window, new_parent);
-    keyboard_controller_->MoveToParentContainer(new_parent);
+    keyboard_ui_controller_->MoveToParentContainer(new_parent);
   }
 }
 
diff --git a/ash/keyboard/keyboard_controller_impl.h b/ash/keyboard/keyboard_controller_impl.h
index cfb809d..37430b1d 100644
--- a/ash/keyboard/keyboard_controller_impl.h
+++ b/ash/keyboard/keyboard_controller_impl.h
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "ash/ash_export.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_layout_delegate.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_controller_observer.h"
 #include "ash/session/session_observer.h"
@@ -23,7 +23,7 @@
 }
 
 namespace keyboard {
-class KeyboardController;
+class KeyboardUIController;
 class KeyboardUIFactory;
 }  // namespace keyboard
 
@@ -32,10 +32,9 @@
 class SessionControllerImpl;
 class VirtualKeyboardController;
 
-// Contains and observes a keyboard::KeyboardController instance. Ash specific
+// Contains and observes a keyboard::KeyboardUIController instance. Ash specific
 // behavior, including implementing the public interface, is implemented in this
-// class. TODO(shend): Consider re-factoring keyboard::KeyboardController so
-// that this can inherit from that class instead.
+// class.
 class ASH_EXPORT KeyboardControllerImpl
     : public KeyboardController,
       public keyboard::KeyboardLayoutDelegate,
@@ -89,8 +88,8 @@
   // SessionObserver:
   void OnSessionStateChanged(session_manager::SessionState state) override;
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard_controller_.get();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard_ui_controller_.get();
   }
 
   VirtualKeyboardController* virtual_keyboard_controller() {
@@ -113,7 +112,7 @@
   void OnKeyboardEnabledChanged(bool is_enabled) override;
 
   SessionControllerImpl* session_controller_;  // unowned
-  std::unique_ptr<keyboard::KeyboardController> keyboard_controller_;
+  std::unique_ptr<keyboard::KeyboardUIController> keyboard_ui_controller_;
   std::unique_ptr<VirtualKeyboardController> virtual_keyboard_controller_;
   base::ObserverList<KeyboardControllerObserver>::Unchecked observers_;
 
diff --git a/ash/keyboard/keyboard_controller_impl_unittest.cc b/ash/keyboard/keyboard_controller_impl_unittest.cc
index 858d9847..b925c227 100644
--- a/ash/keyboard/keyboard_controller_impl_unittest.cc
+++ b/ash/keyboard/keyboard_controller_impl_unittest.cc
@@ -9,7 +9,7 @@
 #include <utility>
 
 #include "ash/keyboard/ui/container_behavior.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_controller.h"
 #include "ash/public/cpp/test/test_keyboard_controller_observer.h"
@@ -113,8 +113,8 @@
   KeyboardControllerImpl* keyboard_controller() {
     return Shell::Get()->keyboard_controller();
   }
-  keyboard::KeyboardController* keyboard_ui_controller() {
-    return keyboard_controller()->keyboard_controller();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard_controller()->keyboard_ui_controller();
   }
   TestKeyboardControllerObserver* test_observer() {
     return ash_test_helper()->test_keyboard_controller_observer();
diff --git a/ash/keyboard/ui/BUILD.gn b/ash/keyboard/ui/BUILD.gn
index 457f93d..2feedaa 100644
--- a/ash/keyboard/ui/BUILD.gn
+++ b/ash/keyboard/ui/BUILD.gn
@@ -22,8 +22,6 @@
     "display_util.cc",
     "display_util.h",
     "drag_descriptor.h",
-    "keyboard_controller.cc",
-    "keyboard_controller.h",
     "keyboard_event_handler.cc",
     "keyboard_event_handler.h",
     "keyboard_export.h",
@@ -32,6 +30,8 @@
     "keyboard_layout_manager.h",
     "keyboard_ui.cc",
     "keyboard_ui.h",
+    "keyboard_ui_controller.cc",
+    "keyboard_ui_controller.h",
     "keyboard_ui_factory.cc",
     "keyboard_ui_factory.h",
     "keyboard_ui_model.cc",
@@ -147,8 +147,8 @@
   sources = [
     "container_floating_behavior_unittest.cc",
     "container_full_width_behavior_unittest.cc",
-    "keyboard_controller_unittest.cc",
     "keyboard_event_handler_unittest.cc",
+    "keyboard_ui_controller_unittest.cc",
     "keyboard_ui_model_unittest.cc",
     "keyboard_ukm_recorder_unittest.cc",
     "keyboard_util_unittest.cc",
diff --git a/ash/keyboard/ui/keyboard_event_handler.cc b/ash/keyboard/ui/keyboard_event_handler.cc
index 66f19f16..661c1c0a 100644
--- a/ash/keyboard/ui/keyboard_event_handler.cc
+++ b/ash/keyboard/ui/keyboard_event_handler.cc
@@ -4,7 +4,7 @@
 
 #include "ash/keyboard/ui/keyboard_event_handler.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ui/events/event.h"
 #include "ui/gfx/geometry/vector2d.h"
 
@@ -31,7 +31,7 @@
 }
 
 void KeyboardEventHandler::ProcessPointerEvent(ui::LocatedEvent* event) {
-  auto* controller = KeyboardController::Get();
+  auto* controller = KeyboardUIController::Get();
   if (controller->IsEnabled() && controller->HandlePointerEvent(*event))
     event->SetHandled();
 }
diff --git a/ash/keyboard/ui/keyboard_layout_manager.cc b/ash/keyboard/ui/keyboard_layout_manager.cc
index 8330565..1b672cf 100644
--- a/ash/keyboard/ui/keyboard_layout_manager.cc
+++ b/ash/keyboard/ui/keyboard_layout_manager.cc
@@ -4,14 +4,14 @@
 
 #include "ash/keyboard/ui/keyboard_layout_manager.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ui/compositor/layer_animator.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
 
 namespace keyboard {
 
-KeyboardLayoutManager::KeyboardLayoutManager(KeyboardController* controller)
+KeyboardLayoutManager::KeyboardLayoutManager(KeyboardUIController* controller)
     : controller_(controller) {}
 
 KeyboardLayoutManager::~KeyboardLayoutManager() = default;
diff --git a/ash/keyboard/ui/keyboard_layout_manager.h b/ash/keyboard/ui/keyboard_layout_manager.h
index 070bcc7..222d92d9 100644
--- a/ash/keyboard/ui/keyboard_layout_manager.h
+++ b/ash/keyboard/ui/keyboard_layout_manager.h
@@ -12,14 +12,14 @@
 
 namespace keyboard {
 
-class KeyboardController;
+class KeyboardUIController;
 
 // LayoutManager for the virtual keyboard container. Manages a single window
 // (the virtual keyboard) and keeps it positioned at the bottom of the
 // owner window.
 class KEYBOARD_EXPORT KeyboardLayoutManager : public aura::LayoutManager {
  public:
-  explicit KeyboardLayoutManager(KeyboardController* controller);
+  explicit KeyboardLayoutManager(KeyboardUIController* controller);
   ~KeyboardLayoutManager() override;
 
   // Overridden from aura::LayoutManager
@@ -33,7 +33,7 @@
                       const gfx::Rect& requested_bounds) override;
 
  private:
-  KeyboardController* controller_;
+  KeyboardUIController* controller_;
 
   DISALLOW_COPY_AND_ASSIGN(KeyboardLayoutManager);
 };
diff --git a/ash/keyboard/ui/keyboard_ui.cc b/ash/keyboard/ui/keyboard_ui.cc
index 4b51946..173aab1 100644
--- a/ash/keyboard/ui/keyboard_ui.cc
+++ b/ash/keyboard/ui/keyboard_ui.cc
@@ -4,7 +4,7 @@
 
 #include "ash/keyboard/ui/keyboard_ui.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/command_line.h"
 #include "base/unguessable_token.h"
 #include "ui/aura/window.h"
@@ -40,7 +40,7 @@
                << size.ToString();
 }
 
-void KeyboardUI::SetController(KeyboardController* controller) {
+void KeyboardUI::SetController(KeyboardUIController* controller) {
   keyboard_controller_ = controller;
 }
 
diff --git a/ash/keyboard/ui/keyboard_ui.h b/ash/keyboard/ui/keyboard_ui.h
index 1f17cef..4c8065e 100644
--- a/ash/keyboard/ui/keyboard_ui.h
+++ b/ash/keyboard/ui/keyboard_ui.h
@@ -22,7 +22,7 @@
 
 namespace keyboard {
 
-class KeyboardController;
+class KeyboardUIController;
 
 // Interface representing a window containing virtual keyboard UI.
 class KEYBOARD_EXPORT KeyboardUI {
@@ -72,14 +72,14 @@
 
   virtual void KeyboardContentsLoaded(const gfx::Size& size);
 
-  // |controller| may be null when KeyboardController is being destroyed.
-  void SetController(KeyboardController* controller);
+  // |controller| may be null when KeyboardUIController is being destroyed.
+  void SetController(KeyboardUIController* controller);
 
  protected:
-  KeyboardController* keyboard_controller() { return keyboard_controller_; }
+  KeyboardUIController* keyboard_controller() { return keyboard_controller_; }
 
  private:
-  keyboard::KeyboardController* keyboard_controller_ = nullptr;
+  keyboard::KeyboardUIController* keyboard_controller_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(KeyboardUI);
 };
diff --git a/ash/keyboard/ui/keyboard_controller.cc b/ash/keyboard/ui/keyboard_ui_controller.cc
similarity index 83%
rename from ash/keyboard/ui/keyboard_controller.cc
rename to ash/keyboard/ui/keyboard_ui_controller.cc
index 4ff5db0c..505464a 100644
--- a/ash/keyboard/ui/keyboard_controller.cc
+++ b/ash/keyboard/ui/keyboard_ui_controller.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 "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 
 #include <set>
 
@@ -52,7 +52,7 @@
 namespace {
 
 // Owned by ash::Shell.
-KeyboardController* g_keyboard_controller = nullptr;
+KeyboardUIController* g_keyboard_controller = nullptr;
 
 // How long the keyboard stays in WILL_HIDE state before moving to HIDDEN.
 constexpr base::TimeDelta kHideKeyboardDelay =
@@ -95,24 +95,24 @@
 class InputMethodKeyboardController : public ui::InputMethodKeyboardController {
  public:
   explicit InputMethodKeyboardController(
-      KeyboardController* keyboard_controller)
-      : keyboard_controller_(keyboard_controller) {}
+      KeyboardUIController* keyboard_ui_controller)
+      : keyboard_ui_controller_(keyboard_ui_controller) {}
 
   ~InputMethodKeyboardController() override = default;
 
   // ui::InputMethodKeyboardController
   bool DisplayVirtualKeyboard() override {
     // Calling |ShowKeyboardInternal| may move the keyboard to another display.
-    if (keyboard_controller_->IsEnabled() &&
-        !keyboard_controller_->keyboard_locked()) {
-      keyboard_controller_->ShowKeyboard(false /* locked */);
+    if (keyboard_ui_controller_->IsEnabled() &&
+        !keyboard_ui_controller_->keyboard_locked()) {
+      keyboard_ui_controller_->ShowKeyboard(false /* locked */);
       return true;
     }
     return false;
   }
 
   void DismissVirtualKeyboard() override {
-    keyboard_controller_->HideKeyboardByUser();
+    keyboard_ui_controller_->HideKeyboardByUser();
   }
 
   void AddObserver(
@@ -126,17 +126,17 @@
   }
 
   bool IsKeyboardVisible() override {
-    return keyboard_controller_->IsKeyboardVisible();
+    return keyboard_ui_controller_->IsKeyboardVisible();
   }
 
  private:
-  KeyboardController* keyboard_controller_;
+  KeyboardUIController* keyboard_ui_controller_;
 };
 
 }  // namespace
 
 // Observer for both keyboard show and hide animations. It should be owned by
-// KeyboardController.
+// KeyboardUIController.
 class CallbackAnimationObserver : public ui::ImplicitAnimationObserver {
  public:
   explicit CallbackAnimationObserver(base::OnceClosure callback)
@@ -161,7 +161,7 @@
   DISALLOW_COPY_AND_ASSIGN(CallbackAnimationObserver);
 };
 
-KeyboardController::KeyboardController()
+KeyboardUIController::KeyboardUIController()
     : input_method_keyboard_controller_(
           std::make_unique<InputMethodKeyboardController>(this)),
       ime_observer_(this),
@@ -171,25 +171,25 @@
   g_keyboard_controller = this;
 }
 
-KeyboardController::~KeyboardController() {
+KeyboardUIController::~KeyboardUIController() {
   DCHECK(g_keyboard_controller);
-  DCHECK(!ui_)
-      << "Keyboard UI must be destroyed before KeyboardController is destroyed";
+  DCHECK(!ui_) << "Keyboard UI must be destroyed before KeyboardUIController "
+                  "is destroyed";
   g_keyboard_controller = nullptr;
 }
 
 // static
-KeyboardController* KeyboardController::Get() {
+KeyboardUIController* KeyboardUIController::Get() {
   DCHECK(g_keyboard_controller);
   return g_keyboard_controller;
 }
 
 // static
-bool KeyboardController::HasInstance() {
+bool KeyboardUIController::HasInstance() {
   return g_keyboard_controller;
 }
 
-void KeyboardController::Initialize(
+void KeyboardUIController::Initialize(
     std::unique_ptr<KeyboardUIFactory> ui_factory,
     KeyboardLayoutDelegate* layout_delegate) {
   DCHECK(ui_factory);
@@ -201,7 +201,7 @@
   DCHECK(!IsKeyboardEnableRequested());
 }
 
-void KeyboardController::Shutdown() {
+void KeyboardUIController::Shutdown() {
   keyboard_enable_flags_.clear();
   EnableFlagsChanged();
 
@@ -209,7 +209,7 @@
   DisableKeyboard();
 }
 
-void KeyboardController::EnableKeyboard() {
+void KeyboardUIController::EnableKeyboard() {
   if (ui_)
     return;
 
@@ -237,7 +237,7 @@
     observer.OnKeyboardEnabledChanged(true);
 }
 
-void KeyboardController::DisableKeyboard() {
+void KeyboardUIController::DisableKeyboard() {
   if (!ui_)
     return;
 
@@ -253,7 +253,7 @@
   if (model_.state() != KeyboardUIState::kInitial)
     ChangeState(KeyboardUIState::kInitial);
 
-  // TODO(https://crbug.com/731537): Move KeyboardController members into a
+  // TODO(https://crbug.com/731537): Move KeyboardUIController members into a
   // subobject so we can just put this code into the subobject destructor.
   queued_display_change_.reset();
   queued_container_type_.reset();
@@ -269,7 +269,7 @@
     observer.OnKeyboardEnabledChanged(false);
 }
 
-void KeyboardController::ActivateKeyboardInContainer(aura::Window* parent) {
+void KeyboardUIController::ActivateKeyboardInContainer(aura::Window* parent) {
   DCHECK(parent);
   DCHECK(!parent_container_);
   parent_container_ = parent;
@@ -284,7 +284,7 @@
   }
 }
 
-void KeyboardController::DeactivateKeyboard() {
+void KeyboardUIController::DeactivateKeyboard() {
   DCHECK(parent_container_);
 
   // Ensure the keyboard is not visible before deactivating it.
@@ -302,15 +302,15 @@
   parent_container_ = nullptr;
 }
 
-aura::Window* KeyboardController::GetKeyboardWindow() const {
+aura::Window* KeyboardUIController::GetKeyboardWindow() const {
   return ui_ ? ui_->GetKeyboardWindow() : nullptr;
 }
 
-aura::Window* KeyboardController::GetRootWindow() const {
+aura::Window* KeyboardUIController::GetRootWindow() const {
   return parent_container_ ? parent_container_->GetRootWindow() : nullptr;
 }
 
-void KeyboardController::MoveToParentContainer(aura::Window* parent) {
+void KeyboardUIController::MoveToParentContainer(aura::Window* parent) {
   DCHECK(parent);
   if (parent_container_ == parent)
     return;
@@ -322,7 +322,7 @@
 }
 
 // private
-void KeyboardController::NotifyKeyboardBoundsChanging(
+void KeyboardUIController::NotifyKeyboardBoundsChanging(
     const gfx::Rect& new_bounds_in_root) {
   gfx::Rect occluded_bounds_in_screen;
   aura::Window* window = GetKeyboardWindow();
@@ -347,7 +347,7 @@
   EnsureCaretInWorkArea(occluded_bounds_in_screen);
 }
 
-void KeyboardController::SetKeyboardWindowBounds(
+void KeyboardUIController::SetKeyboardWindowBounds(
     const gfx::Rect& new_bounds_in_root) {
   ui::LayerAnimator* animator = GetKeyboardWindow()->layer()->GetAnimator();
   // Stops previous animation if a window resize is requested during animation.
@@ -357,7 +357,7 @@
   GetKeyboardWindow()->SetBounds(new_bounds_in_root);
 }
 
-void KeyboardController::NotifyKeyboardWindowLoaded() {
+void KeyboardUIController::NotifyKeyboardWindowLoaded() {
   const bool should_show = show_on_keyboard_window_load_;
   if (model_.state() == KeyboardUIState::kLoading)
     ChangeState(KeyboardUIState::kHidden);
@@ -376,14 +376,14 @@
   }
 }
 
-void KeyboardController::Reload() {
+void KeyboardUIController::Reload() {
   if (!GetKeyboardWindow())
     return;
 
   ui_->ReloadKeyboardIfNeeded();
 }
 
-void KeyboardController::RebuildKeyboardIfEnabled() {
+void KeyboardUIController::RebuildKeyboardIfEnabled() {
   if (!IsEnabled())
     return;
 
@@ -391,22 +391,22 @@
   EnableKeyboard();
 }
 
-void KeyboardController::AddObserver(
+void KeyboardUIController::AddObserver(
     ash::KeyboardControllerObserver* observer) {
   observer_list_.AddObserver(observer);
 }
 
-bool KeyboardController::HasObserver(
+bool KeyboardUIController::HasObserver(
     ash::KeyboardControllerObserver* observer) const {
   return observer_list_.HasObserver(observer);
 }
 
-void KeyboardController::RemoveObserver(
+void KeyboardUIController::RemoveObserver(
     ash::KeyboardControllerObserver* observer) {
   observer_list_.RemoveObserver(observer);
 }
 
-bool KeyboardController::UpdateKeyboardConfig(const KeyboardConfig& config) {
+bool KeyboardUIController::UpdateKeyboardConfig(const KeyboardConfig& config) {
   if (config == keyboard_config_)
     return false;
   keyboard_config_ = config;
@@ -415,7 +415,7 @@
   return true;
 }
 
-void KeyboardController::SetEnableFlag(KeyboardEnableFlag flag) {
+void KeyboardUIController::SetEnableFlag(KeyboardEnableFlag flag) {
   if (!base::Contains(keyboard_enable_flags_, flag))
     keyboard_enable_flags_.insert(flag);
 
@@ -442,7 +442,7 @@
   UpdateKeyboardAsRequestedBy(flag);
 }
 
-void KeyboardController::ClearEnableFlag(KeyboardEnableFlag flag) {
+void KeyboardUIController::ClearEnableFlag(KeyboardEnableFlag flag) {
   if (!IsEnableFlagSet(flag))
     return;
 
@@ -452,11 +452,11 @@
   UpdateKeyboardAsRequestedBy(flag);
 }
 
-bool KeyboardController::IsEnableFlagSet(KeyboardEnableFlag flag) const {
+bool KeyboardUIController::IsEnableFlagSet(KeyboardEnableFlag flag) const {
   return base::Contains(keyboard_enable_flags_, flag);
 }
 
-bool KeyboardController::IsKeyboardEnableRequested() const {
+bool KeyboardUIController::IsKeyboardEnableRequested() const {
   // Accessibility setting prioritized over policy/arc overrides.
   if (IsEnableFlagSet(KeyboardEnableFlag::kAccessibilityEnabled))
     return true;
@@ -483,7 +483,8 @@
          IsEnableFlagSet(KeyboardEnableFlag::kTouchEnabled);
 }
 
-void KeyboardController::UpdateKeyboardAsRequestedBy(KeyboardEnableFlag flag) {
+void KeyboardUIController::UpdateKeyboardAsRequestedBy(
+    KeyboardEnableFlag flag) {
   if (IsKeyboardEnableRequested()) {
     // Note that there are two versions of the on-screen keyboard. A full layout
     // is provided for accessibility, which includes sticky modifier keys to
@@ -501,7 +502,7 @@
   }
 }
 
-bool KeyboardController::IsKeyboardOverscrollEnabled() const {
+bool KeyboardUIController::IsKeyboardOverscrollEnabled() const {
   if (!IsEnabled())
     return false;
 
@@ -522,7 +523,7 @@
 }
 
 // private
-void KeyboardController::HideKeyboard(HideReason reason) {
+void KeyboardUIController::HideKeyboard(HideReason reason) {
   TRACE_EVENT0("vk", "HideKeyboard");
 
   switch (model_.state()) {
@@ -574,7 +575,7 @@
       DCHECK(window);
 
       animation_observer_ = std::make_unique<CallbackAnimationObserver>(
-          base::BindOnce(&KeyboardController::HideAnimationFinished,
+          base::BindOnce(&KeyboardUIController::HideAnimationFinished,
                          base::Unretained(this)));
       ui::ScopedLayerAnimationSettings layer_animation_settings(
           window->layer()->GetAnimator());
@@ -597,24 +598,24 @@
   }
 }
 
-void KeyboardController::HideKeyboardByUser() {
+void KeyboardUIController::HideKeyboardByUser() {
   HideKeyboard(HIDE_REASON_USER_EXPLICIT);
 }
 
-void KeyboardController::HideKeyboardImplicitlyByUser() {
+void KeyboardUIController::HideKeyboardImplicitlyByUser() {
   if (!keyboard_locked_)
     HideKeyboard(HIDE_REASON_USER_IMPLICIT);
 }
 
-void KeyboardController::HideKeyboardTemporarilyForTransition() {
+void KeyboardUIController::HideKeyboardTemporarilyForTransition() {
   HideKeyboard(HIDE_REASON_SYSTEM_TEMPORARY);
 }
 
-void KeyboardController::HideKeyboardExplicitlyBySystem() {
+void KeyboardUIController::HideKeyboardExplicitlyBySystem() {
   HideKeyboard(HIDE_REASON_SYSTEM_EXPLICIT);
 }
 
-void KeyboardController::HideKeyboardImplicitlyBySystem() {
+void KeyboardUIController::HideKeyboardImplicitlyBySystem() {
   if (model_.state() != KeyboardUIState::kShown || keyboard_locked_)
     return;
 
@@ -622,14 +623,14 @@
 
   base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
       FROM_HERE,
-      base::BindOnce(&KeyboardController::HideKeyboard,
+      base::BindOnce(&KeyboardUIController::HideKeyboard,
                      weak_factory_will_hide_.GetWeakPtr(),
                      HIDE_REASON_SYSTEM_IMPLICIT),
       kHideKeyboardDelay);
 }
 
 // private
-void KeyboardController::HideAnimationFinished() {
+void KeyboardUIController::HideAnimationFinished() {
   if (model_.state() == KeyboardUIState::kHidden) {
     if (queued_container_type_) {
       SetContainerBehaviorInternal(queued_container_type_->container_type());
@@ -651,7 +652,7 @@
 }
 
 // private
-void KeyboardController::ShowAnimationFinished() {
+void KeyboardUIController::ShowAnimationFinished() {
   MarkKeyboardLoadFinished();
 
   // Notify observers after animation finished to prevent reveal desktop
@@ -660,7 +661,7 @@
 }
 
 // private
-void KeyboardController::SetContainerBehaviorInternal(ContainerType type) {
+void KeyboardUIController::SetContainerBehaviorInternal(ContainerType type) {
   // Reset the hit test event targeter because the hit test bounds will
   // be wrong when container type changes and may cause the UI to be unusable.
   if (GetKeyboardWindow())
@@ -676,26 +677,26 @@
   }
 }
 
-void KeyboardController::ShowKeyboard(bool lock) {
+void KeyboardUIController::ShowKeyboard(bool lock) {
   DVLOG(1) << "ShowKeyboard";
   set_keyboard_locked(lock);
   ShowKeyboardInternal(layout_delegate_->GetContainerForDefaultDisplay());
 }
 
-void KeyboardController::ShowKeyboardInDisplay(
+void KeyboardUIController::ShowKeyboardInDisplay(
     const display::Display& display) {
   DVLOG(1) << "ShowKeyboardInDisplay: " << display.id();
   set_keyboard_locked(true);
   ShowKeyboardInternal(layout_delegate_->GetContainerForDisplay(display));
 }
 
-gfx::Rect KeyboardController::GetVisualBoundsInScreen() const {
+gfx::Rect KeyboardUIController::GetVisualBoundsInScreen() const {
   gfx::Rect visual_bounds_in_screen = visual_bounds_in_root_;
   ::wm::ConvertRectToScreen(GetRootWindow(), &visual_bounds_in_screen);
   return visual_bounds_in_screen;
 }
 
-void KeyboardController::LoadKeyboardWindowInBackground() {
+void KeyboardUIController::LoadKeyboardWindowInBackground() {
   DCHECK_EQ(model_.state(), KeyboardUIState::kInitial);
 
   TRACE_EVENT0("vk", "LoadKeyboardWindowInBackground");
@@ -705,8 +706,9 @@
   // TODO(https://crbug.com/845780): Use a weak ptr here in case this
   // assumption changes.
   DVLOG(1) << "LoadKeyboardWindow";
-  aura::Window* keyboard_window = ui_->LoadKeyboardWindow(base::BindOnce(
-      &KeyboardController::NotifyKeyboardWindowLoaded, base::Unretained(this)));
+  aura::Window* keyboard_window = ui_->LoadKeyboardWindow(
+      base::BindOnce(&KeyboardUIController::NotifyKeyboardWindowLoaded,
+                     base::Unretained(this)));
   keyboard_window->AddPreTargetHandler(&event_handler_);
   keyboard_window->AddObserver(this);
   parent_container_->AddChild(keyboard_window);
@@ -714,31 +716,31 @@
   ChangeState(KeyboardUIState::kLoading);
 }
 
-ui::InputMethod* KeyboardController::GetInputMethodForTest() {
+ui::InputMethod* KeyboardUIController::GetInputMethodForTest() {
   return ui_->GetInputMethod();
 }
 
-void KeyboardController::EnsureCaretInWorkAreaForTest(
+void KeyboardUIController::EnsureCaretInWorkAreaForTest(
     const gfx::Rect& occluded_bounds_in_screen) {
   EnsureCaretInWorkArea(occluded_bounds_in_screen);
 }
 
 // ContainerBehavior::Delegate overrides
 
-bool KeyboardController::IsKeyboardLocked() const {
+bool KeyboardUIController::IsKeyboardLocked() const {
   return keyboard_locked_;
 }
 
-gfx::Rect KeyboardController::GetBoundsInScreen() const {
+gfx::Rect KeyboardUIController::GetBoundsInScreen() const {
   return GetKeyboardWindow()->GetBoundsInScreen();
 }
 
-void KeyboardController::MoveKeyboardWindow(const gfx::Rect& new_bounds) {
+void KeyboardUIController::MoveKeyboardWindow(const gfx::Rect& new_bounds) {
   DCHECK(IsKeyboardVisible());
   SetKeyboardWindowBounds(new_bounds);
 }
 
-void KeyboardController::MoveKeyboardWindowToDisplay(
+void KeyboardUIController::MoveKeyboardWindowToDisplay(
     const display::Display& display,
     const gfx::Rect& new_bounds_in_root) {
   queued_display_change_ =
@@ -748,12 +750,12 @@
 
 // aura::WindowObserver overrides
 
-void KeyboardController::OnWindowAddedToRootWindow(aura::Window* window) {
+void KeyboardUIController::OnWindowAddedToRootWindow(aura::Window* window) {
   container_behavior_->SetCanonicalBounds(GetKeyboardWindow(),
                                           GetRootWindow()->bounds());
 }
 
-void KeyboardController::OnWindowBoundsChanged(
+void KeyboardUIController::OnWindowBoundsChanged(
     aura::Window* window,
     const gfx::Rect& old_bounds_in_root,
     const gfx::Rect& new_bounds_in_root,
@@ -772,13 +774,13 @@
 
 // InputMethodObserver overrides
 
-void KeyboardController::OnInputMethodDestroyed(
+void KeyboardUIController::OnInputMethodDestroyed(
     const ui::InputMethod* input_method) {
   ime_observer_.RemoveAll();
   OnTextInputStateChanged(nullptr);
 }
 
-void KeyboardController::OnTextInputStateChanged(
+void KeyboardUIController::OnTextInputStateChanged(
     const ui::TextInputClient* client) {
   TRACE_EVENT0("vk", "OnTextInputStateChanged");
 
@@ -821,25 +823,26 @@
   }
 }
 
-void KeyboardController::ShowKeyboardIfWithinTransientBlurThreshold() {
+void KeyboardUIController::ShowKeyboardIfWithinTransientBlurThreshold() {
   if (base::Time::Now() - time_of_last_blur_ < kTransientBlurThreshold)
     ShowKeyboard(false);
 }
 
-void KeyboardController::OnShowVirtualKeyboardIfEnabled() {
+void KeyboardUIController::OnShowVirtualKeyboardIfEnabled() {
   DVLOG(1) << "OnShowVirtualKeyboardIfEnabled: " << IsEnabled();
   // Calling |ShowKeyboardInternal| may move the keyboard to another display.
   if (IsEnabled() && !keyboard_locked_)
     ShowKeyboardInternal(layout_delegate_->GetContainerForDefaultDisplay());
 }
 
-void KeyboardController::ShowKeyboardInternal(aura::Window* target_container) {
+void KeyboardUIController::ShowKeyboardInternal(
+    aura::Window* target_container) {
   MarkKeyboardLoadStarted();
   PopulateKeyboardContent(target_container);
   UpdateInputMethodObserver();
 }
 
-void KeyboardController::PopulateKeyboardContent(
+void KeyboardUIController::PopulateKeyboardContent(
     aura::Window* target_container) {
   DCHECK_NE(model_.state(), KeyboardUIState::kInitial);
 
@@ -890,9 +893,9 @@
 
   ui_->ShowKeyboardWindow();
 
-  animation_observer_ =
-      std::make_unique<CallbackAnimationObserver>(base::BindOnce(
-          &KeyboardController::ShowAnimationFinished, base::Unretained(this)));
+  animation_observer_ = std::make_unique<CallbackAnimationObserver>(
+      base::BindOnce(&KeyboardUIController::ShowAnimationFinished,
+                     base::Unretained(this)));
   ui::ScopedLayerAnimationSettings settings(container_animator);
   settings.AddObserver(animation_observer_.get());
 
@@ -908,18 +911,18 @@
                             GetActiveContainerType());
 }
 
-bool KeyboardController::WillHideKeyboard() const {
+bool KeyboardUIController::WillHideKeyboard() const {
   bool res = weak_factory_will_hide_.HasWeakPtrs();
   DCHECK_EQ(res, model_.state() == KeyboardUIState::kWillHide);
   return res;
 }
 
-void KeyboardController::NotifyKeyboardConfigChanged() {
+void KeyboardUIController::NotifyKeyboardConfigChanged() {
   for (auto& observer : observer_list_)
     observer.OnKeyboardConfigChanged(keyboard_config_);
 }
 
-void KeyboardController::ChangeState(KeyboardUIState state) {
+void KeyboardUIController::ChangeState(KeyboardUIState state) {
   model_.ChangeState(state);
 
   if (state != KeyboardUIState::kWillHide)
@@ -933,7 +936,7 @@
     case KeyboardUIState::kWillHide:
       base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
           FROM_HERE,
-          base::BindOnce(&KeyboardController::ReportLingeringState,
+          base::BindOnce(&KeyboardUIController::ReportLingeringState,
                          weak_factory_report_lingering_state_.GetWeakPtr()),
           kReportLingeringStateDelay);
       break;
@@ -943,14 +946,14 @@
   }
 }
 
-void KeyboardController::ReportLingeringState() {
-  LOG(ERROR) << "KeyboardController lingering in "
+void KeyboardUIController::ReportLingeringState() {
+  LOG(ERROR) << "KeyboardUIController lingering in "
              << StateToStr(model_.state());
   UMA_HISTOGRAM_ENUMERATION("VirtualKeyboard.LingeringIntermediateState",
                             model_.state());
 }
 
-gfx::Rect KeyboardController::GetWorkspaceOccludedBoundsInScreen() const {
+gfx::Rect KeyboardUIController::GetWorkspaceOccludedBoundsInScreen() const {
   if (!ui_)
     return gfx::Rect();
 
@@ -963,7 +966,7 @@
   return occluded_bounds_in_screen;
 }
 
-gfx::Rect KeyboardController::GetKeyboardLockScreenOffsetBounds() const {
+gfx::Rect KeyboardUIController::GetKeyboardLockScreenOffsetBounds() const {
   // Overscroll is generally dependent on lock state, however, its behavior
   // temporarily overridden by a static field in certain lock screen contexts.
   // Furthermore, floating keyboard should never affect layout.
@@ -974,7 +977,8 @@
   return gfx::Rect();
 }
 
-void KeyboardController::SetOccludedBounds(const gfx::Rect& bounds_in_window) {
+void KeyboardUIController::SetOccludedBounds(
+    const gfx::Rect& bounds_in_window) {
   container_behavior_->SetOccludedBounds(bounds_in_window);
 
   // Notify that only the occluded bounds have changed.
@@ -982,7 +986,7 @@
     NotifyKeyboardBoundsChanging(visual_bounds_in_root_);
 }
 
-void KeyboardController::SetHitTestBounds(
+void KeyboardUIController::SetHitTestBounds(
     const std::vector<gfx::Rect>& bounds_in_window) {
   if (!GetKeyboardWindow())
     return;
@@ -991,24 +995,24 @@
       std::make_unique<ShapedWindowTargeter>(bounds_in_window));
 }
 
-gfx::Rect KeyboardController::AdjustSetBoundsRequest(
+gfx::Rect KeyboardUIController::AdjustSetBoundsRequest(
     const gfx::Rect& display_bounds,
     const gfx::Rect& requested_bounds_in_screen) const {
   return container_behavior_->AdjustSetBoundsRequest(
       display_bounds, requested_bounds_in_screen);
 }
 
-bool KeyboardController::IsOverscrollAllowed() const {
+bool KeyboardUIController::IsOverscrollAllowed() const {
   return container_behavior_->IsOverscrollAllowed();
 }
 
-bool KeyboardController::HandlePointerEvent(const ui::LocatedEvent& event) {
+bool KeyboardUIController::HandlePointerEvent(const ui::LocatedEvent& event) {
   const display::Display& current_display =
       display_util_.GetNearestDisplayToWindow(GetRootWindow());
   return container_behavior_->HandlePointerEvent(event, current_display);
 }
 
-void KeyboardController::SetContainerType(
+void KeyboardUIController::SetContainerType(
     ContainerType type,
     const base::Optional<gfx::Rect>& target_bounds_in_root,
     base::OnceCallback<void(bool)> callback) {
@@ -1034,7 +1038,7 @@
   }
 }
 
-void KeyboardController::RecordUkmKeyboardShown() {
+void KeyboardUIController::RecordUkmKeyboardShown() {
   ui::TextInputClient* text_input_client = GetTextInputClient();
   if (!text_input_client)
     return;
@@ -1044,11 +1048,11 @@
       text_input_client->GetTextInputType());
 }
 
-void KeyboardController::SetDraggableArea(const gfx::Rect& rect) {
+void KeyboardUIController::SetDraggableArea(const gfx::Rect& rect) {
   container_behavior_->SetDraggableArea(rect);
 }
 
-bool KeyboardController::IsKeyboardVisible() {
+bool KeyboardUIController::IsKeyboardVisible() {
   if (model_.state() == KeyboardUIState::kShown) {
     DCHECK(IsEnabled());
     return true;
@@ -1056,17 +1060,17 @@
   return false;
 }
 
-void KeyboardController::KeyboardContentsLoaded(const gfx::Size& size) {
+void KeyboardUIController::KeyboardContentsLoaded(const gfx::Size& size) {
   if (!IsEnabled())
     return;
   ui_->KeyboardContentsLoaded(size);
 }
 
-ui::TextInputClient* KeyboardController::GetTextInputClient() {
+ui::TextInputClient* KeyboardUIController::GetTextInputClient() {
   return ui_->GetInputMethod()->GetTextInputClient();
 }
 
-void KeyboardController::UpdateInputMethodObserver() {
+void KeyboardUIController::UpdateInputMethodObserver() {
   ui::InputMethod* ime = ui_->GetInputMethod();
 
   // IME could be null during initialization. Ignoring the case is okay because
@@ -1087,7 +1091,7 @@
   // ime->GetTextInputClient() isn't focused.
 }
 
-void KeyboardController::EnsureCaretInWorkArea(
+void KeyboardUIController::EnsureCaretInWorkArea(
     const gfx::Rect& occluded_bounds_in_screen) {
   ui::InputMethod* ime = ui_->GetInputMethod();
   if (!ime)
@@ -1102,12 +1106,12 @@
   }
 }
 
-void KeyboardController::MarkKeyboardLoadStarted() {
+void KeyboardUIController::MarkKeyboardLoadStarted() {
   if (!keyboard_load_time_logged_)
     keyboard_load_time_start_ = base::Time::Now();
 }
 
-void KeyboardController::MarkKeyboardLoadFinished() {
+void KeyboardUIController::MarkKeyboardLoadFinished() {
   // Possible to get a load finished without a start if navigating directly to
   // chrome://keyboard.
   if (keyboard_load_time_start_.is_null())
@@ -1122,7 +1126,7 @@
   keyboard_load_time_logged_ = true;
 }
 
-void KeyboardController::EnableFlagsChanged() {
+void KeyboardUIController::EnableFlagsChanged() {
   for (auto& observer : observer_list_)
     observer.OnKeyboardEnableFlagsChanged(keyboard_enable_flags_);
 }
diff --git a/ash/keyboard/ui/keyboard_controller.h b/ash/keyboard/ui/keyboard_ui_controller.h
similarity index 94%
rename from ash/keyboard/ui/keyboard_controller.h
rename to ash/keyboard/ui/keyboard_ui_controller.h
index 443cda4..07ff340 100644
--- a/ash/keyboard/ui/keyboard_controller.h
+++ b/ash/keyboard/ui/keyboard_ui_controller.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 ASH_KEYBOARD_UI_KEYBOARD_CONTROLLER_H_
-#define ASH_KEYBOARD_UI_KEYBOARD_CONTROLLER_H_
+#ifndef ASH_KEYBOARD_UI_KEYBOARD_UI_CONTROLLER_H_
+#define ASH_KEYBOARD_UI_KEYBOARD_UI_CONTROLLER_H_
 
 #include <memory>
 #include <set>
@@ -53,14 +53,14 @@
 
 // Provides control of the virtual keyboard, including enabling/disabling the
 // keyboard and controlling its visibility.
-// TODO(shend): Rename this to KeyboardUIController and move enable / disable
-// logic to KeyboardControllerImpl.
-class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver,
-                                           public aura::WindowObserver,
-                                           public ContainerBehavior::Delegate {
+// TODO(shend): Move non-UI related logic to KeyboardControllerImpl.
+class KEYBOARD_EXPORT KeyboardUIController
+    : public ui::InputMethodObserver,
+      public aura::WindowObserver,
+      public ContainerBehavior::Delegate {
  public:
-  KeyboardController();
-  ~KeyboardController() override;
+  KeyboardUIController();
+  ~KeyboardUIController() override;
 
   // Initialize the virtual keyboard controller with two delegates:
   // - ui_factory: Responsible for keyboard window loading.
@@ -75,9 +75,10 @@
   // there is an ash::Shell.
   // TODO(stevenjb/shuchen/shend): Remove all access from src/chrome.
   // https://crbug.com/843332.
-  static KeyboardController* Get();
+  // TODO(shend): Make this not a singleton.
+  static KeyboardUIController* Get();
 
-  // Returns true if there is a valid KeyboardController instance (e.g. while
+  // Returns true if there is a valid KeyboardUIController instance (e.g. while
   // there is an ash::Shell).
   static bool HasInstance();
 
@@ -243,7 +244,7 @@
 
  private:
   // For access to Observer methods for simulation.
-  friend class KeyboardControllerTest;
+  friend class KeyboardUIControllerTest;
 
   // Different ways to hide the keyboard.
   enum HideReason {
@@ -451,12 +452,13 @@
   bool keyboard_load_time_logged_ = false;
   base::Time keyboard_load_time_start_;
 
-  base::WeakPtrFactory<KeyboardController> weak_factory_report_lingering_state_;
-  base::WeakPtrFactory<KeyboardController> weak_factory_will_hide_;
+  base::WeakPtrFactory<KeyboardUIController>
+      weak_factory_report_lingering_state_;
+  base::WeakPtrFactory<KeyboardUIController> weak_factory_will_hide_;
 
-  DISALLOW_COPY_AND_ASSIGN(KeyboardController);
+  DISALLOW_COPY_AND_ASSIGN(KeyboardUIController);
 };
 
 }  // namespace keyboard
 
-#endif  // ASH_KEYBOARD_UI_KEYBOARD_CONTROLLER_H_
+#endif  // ASH_KEYBOARD_UI_KEYBOARD_UI_CONTROLLER_H_
diff --git a/ash/keyboard/ui/keyboard_controller_unittest.cc b/ash/keyboard/ui/keyboard_ui_controller_unittest.cc
similarity index 94%
rename from ash/keyboard/ui/keyboard_controller_unittest.cc
rename to ash/keyboard/ui/keyboard_ui_controller_unittest.cc
index c483ae7..1a0b9b78 100644
--- a/ash/keyboard/ui/keyboard_controller_unittest.cc
+++ b/ash/keyboard/ui/keyboard_ui_controller_unittest.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 "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 
 #include <memory>
 
@@ -138,11 +138,11 @@
 
 }  // namespace
 
-class KeyboardControllerTest : public aura::test::AuraTestBase,
-                               public ash::KeyboardControllerObserver {
+class KeyboardUIControllerTest : public aura::test::AuraTestBase,
+                                 public ash::KeyboardControllerObserver {
  public:
-  KeyboardControllerTest() = default;
-  ~KeyboardControllerTest() override = default;
+  KeyboardUIControllerTest() = default;
+  ~KeyboardUIControllerTest() override = default;
 
   void SetUp() override {
     ui::SetUpInputMethodFactoryForTesting();
@@ -170,7 +170,7 @@
     aura::test::AuraTestBase::TearDown();
   }
 
-  KeyboardController& controller() { return controller_; }
+  KeyboardUIController& controller() { return controller_; }
   KeyboardLayoutDelegate* layout_delegate() { return layout_delegate_.get(); }
 
   void ShowKeyboard() {
@@ -265,18 +265,18 @@
   int is_visible_number_of_calls_ = 0;
   bool is_visible_ = false;
 
-  KeyboardController controller_;
+  KeyboardUIController controller_;
 
   std::unique_ptr<KeyboardLayoutDelegate> layout_delegate_;
   std::unique_ptr<ui::TextInputClient> test_text_input_client_;
   bool keyboard_disabled_ = false;
   wm::DefaultScreenPositionClient screen_position_client_;
-  DISALLOW_COPY_AND_ASSIGN(KeyboardControllerTest);
+  DISALLOW_COPY_AND_ASSIGN(KeyboardUIControllerTest);
 };
 
 // TODO(https://crbug.com/849995): This is testing KeyboardLayoutManager /
 // ContainerFullWidthBehavior. Put this test there.
-TEST_F(KeyboardControllerTest, KeyboardSize) {
+TEST_F(KeyboardUIControllerTest, KeyboardSize) {
   root_window()->SetLayoutManager(new KeyboardLayoutManager(&controller()));
 
   // The keyboard window should not be visible.
@@ -307,7 +307,7 @@
 
 // Tests that blur-then-focus that occur in less than the transient threshold
 // cause the keyboard to re-show.
-TEST_F(KeyboardControllerTest, TransientBlurShortDelay) {
+TEST_F(KeyboardUIControllerTest, TransientBlurShortDelay) {
   ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_NONE);
 
@@ -349,7 +349,7 @@
 
 // Tests that blur-then-focus that occur past the transient threshold do not
 // cause the keyboard to re-show.
-TEST_F(KeyboardControllerTest, TransientBlurLongDelay) {
+TEST_F(KeyboardUIControllerTest, TransientBlurLongDelay) {
   ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_NONE);
 
@@ -383,7 +383,7 @@
   EXPECT_FALSE(keyboard_window->IsVisible());
 }
 
-TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) {
+TEST_F(KeyboardUIControllerTest, VisibilityChangeWithTextInputTypeChange) {
   ui::DummyTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient input_client_2(ui::TEXT_INPUT_TYPE_TEXT);
@@ -424,7 +424,7 @@
 
 // Test to prevent spurious overscroll boxes when changing tabs during keyboard
 // hide. Refer to crbug.com/401670 for more context.
-TEST_F(KeyboardControllerTest, CheckOverscrollInsetDuringVisibilityChange) {
+TEST_F(KeyboardUIControllerTest, CheckOverscrollInsetDuringVisibilityChange) {
   ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_NONE);
 
@@ -442,7 +442,7 @@
   EXPECT_TRUE(ShouldEnableInsets(controller().GetKeyboardWindow()));
 }
 
-TEST_F(KeyboardControllerTest, AlwaysVisibleWhenLocked) {
+TEST_F(KeyboardUIControllerTest, AlwaysVisibleWhenLocked) {
   ui::DummyTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT);
   ui::DummyTextInputClient no_input_client_0(ui::TEXT_INPUT_TYPE_NONE);
@@ -486,7 +486,7 @@
 }
 
 // Tests that disabling the keyboard will get a corresponding event.
-TEST_F(KeyboardControllerTest, DisableKeyboard) {
+TEST_F(KeyboardUIControllerTest, DisableKeyboard) {
   aura::Window* keyboard_window = controller().GetKeyboardWindow();
 
   ShowKeyboard();
@@ -497,7 +497,7 @@
   EXPECT_TRUE(IsKeyboardDisabled());
 }
 
-class KeyboardControllerAnimationTest : public KeyboardControllerTest {
+class KeyboardControllerAnimationTest : public KeyboardUIControllerTest {
  public:
   KeyboardControllerAnimationTest() = default;
   ~KeyboardControllerAnimationTest() override = default;
@@ -507,14 +507,14 @@
     ui::ScopedAnimationDurationScaleMode test_duration_mode(
         ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
 
-    KeyboardControllerTest::SetUp();
+    KeyboardUIControllerTest::SetUp();
 
     // Wait for the keyboard contents to load.
     base::RunLoop().RunUntilIdle();
     keyboard_window()->SetBounds(root_window()->bounds());
   }
 
-  void TearDown() override { KeyboardControllerTest::TearDown(); }
+  void TearDown() override { KeyboardUIControllerTest::TearDown(); }
 
  protected:
   aura::Window* keyboard_window() { return controller().GetKeyboardWindow(); }
@@ -642,7 +642,7 @@
   EXPECT_EQ(1.0, layer->opacity());
 }
 
-TEST_F(KeyboardControllerTest, DisplayChangeShouldNotifyBoundsChange) {
+TEST_F(KeyboardUIControllerTest, DisplayChangeShouldNotifyBoundsChange) {
   ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT);
 
   SetFocus(&input_client);
@@ -661,7 +661,7 @@
   EXPECT_EQ(1, is_visible_number_of_calls());
 }
 
-TEST_F(KeyboardControllerTest, TextInputMode) {
+TEST_F(KeyboardUIControllerTest, TextInputMode) {
   ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT,
                                         ui::TEXT_INPUT_MODE_TEXT);
   ui::DummyTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_TEXT,
@@ -720,7 +720,7 @@
 }
 
 // Checks DisableKeyboard() doesn't clear the observer list.
-TEST_F(KeyboardControllerTest, DontClearObserverList) {
+TEST_F(KeyboardUIControllerTest, DontClearObserverList) {
   ShowKeyboard();
   aura::Window* keyboard_window = controller().GetKeyboardWindow();
 
@@ -751,7 +751,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockKeyboardControllerObserver);
 };
 
-TEST_F(KeyboardControllerTest, OnKeyboardEnabledChangedToEnabled) {
+TEST_F(KeyboardUIControllerTest, OnKeyboardEnabledChangedToEnabled) {
   // Start with the keyboard disabled.
   keyboard::SetTouchKeyboardEnabled(false);
 
@@ -760,7 +760,7 @@
 
   EXPECT_CALL(mock_observer, OnKeyboardEnabledChanged(true))
       .WillOnce(testing::InvokeWithoutArgs([]() {
-        auto* controller = keyboard::KeyboardController::Get();
+        auto* controller = keyboard::KeyboardUIController::Get();
         ASSERT_TRUE(controller);
         EXPECT_TRUE(controller->IsEnabled());
         EXPECT_TRUE(controller->GetKeyboardWindow());
@@ -772,13 +772,13 @@
   controller().RemoveObserver(&mock_observer);
 }
 
-TEST_F(KeyboardControllerTest, OnKeyboardEnabledChangedToDisabled) {
+TEST_F(KeyboardUIControllerTest, OnKeyboardEnabledChangedToDisabled) {
   MockKeyboardControllerObserver mock_observer;
   controller().AddObserver(&mock_observer);
 
   EXPECT_CALL(mock_observer, OnKeyboardEnabledChanged(false))
       .WillOnce(testing::InvokeWithoutArgs([]() {
-        auto* controller = keyboard::KeyboardController::Get();
+        auto* controller = keyboard::KeyboardUIController::Get();
         ASSERT_TRUE(controller);
         EXPECT_FALSE(controller->IsEnabled());
         EXPECT_FALSE(controller->GetKeyboardWindow());
diff --git a/ash/keyboard/ui/keyboard_util.cc b/ash/keyboard/ui/keyboard_util.cc
index dae4caf9..133c2e8 100644
--- a/ash/keyboard/ui/keyboard_util.cc
+++ b/ash/keyboard/ui/keyboard_util.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "base/command_line.h"
 #include "base/metrics/histogram_macros.h"
@@ -21,13 +21,13 @@
 // https://crbug.com/84332.
 
 bool GetFlag(KeyboardEnableFlag flag) {
-  return KeyboardController::HasInstance()
-             ? KeyboardController::Get()->IsEnableFlagSet(flag)
+  return KeyboardUIController::HasInstance()
+             ? KeyboardUIController::Get()->IsEnableFlagSet(flag)
              : false;
 }
 
 void SetOrClearEnableFlag(KeyboardEnableFlag flag, bool enabled) {
-  auto* controller = KeyboardController::Get();
+  auto* controller = KeyboardUIController::Get();
   if (!controller)
     return;
   if (enabled)
@@ -63,7 +63,7 @@
 }
 
 bool IsKeyboardEnabled() {
-  return KeyboardController::Get()->IsEnabled();
+  return KeyboardUIController::Get()->IsEnabled();
 }
 
 }  // namespace keyboard
diff --git a/ash/keyboard/ui/keyboard_util_unittest.cc b/ash/keyboard/ui/keyboard_util_unittest.cc
index ab1c4ba..fc4bd9864 100644
--- a/ash/keyboard/ui/keyboard_util_unittest.cc
+++ b/ash/keyboard/ui/keyboard_util_unittest.cc
@@ -4,8 +4,8 @@
 
 #include <memory>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/keyboard/ui/test/test_keyboard_controller_observer.h"
@@ -60,7 +60,7 @@
 
     layout_delegate_ =
         std::make_unique<TestKeyboardLayoutDelegate>(root_window());
-    keyboard_controller_.Initialize(
+    keyboard_ui_controller_.Initialize(
         std::make_unique<TestKeyboardUIFactory>(&input_method_),
         layout_delegate_.get());
 
@@ -75,15 +75,15 @@
 
  protected:
   void SetEnableFlag(KeyboardEnableFlag flag) {
-    keyboard_controller_.SetEnableFlag(flag);
+    keyboard_ui_controller_.SetEnableFlag(flag);
   }
 
   void ClearEnableFlag(KeyboardEnableFlag flag) {
-    keyboard_controller_.ClearEnableFlag(flag);
+    keyboard_ui_controller_.ClearEnableFlag(flag);
   }
 
   // Used indirectly by keyboard utils.
-  KeyboardController keyboard_controller_;
+  KeyboardUIController keyboard_ui_controller_;
   ui::DummyInputMethod input_method_;
   std::unique_ptr<TestKeyboardLayoutDelegate> layout_delegate_;
 
@@ -160,42 +160,42 @@
 
 TEST_F(KeyboardUtilTest, UpdateKeyboardConfig) {
   ResetAllFlags();
-  KeyboardConfig config = keyboard_controller_.keyboard_config();
+  KeyboardConfig config = keyboard_ui_controller_.keyboard_config();
   EXPECT_TRUE(config.spell_check);
-  EXPECT_FALSE(keyboard_controller_.UpdateKeyboardConfig(config));
+  EXPECT_FALSE(keyboard_ui_controller_.UpdateKeyboardConfig(config));
 
   config.spell_check = false;
-  EXPECT_TRUE(keyboard_controller_.UpdateKeyboardConfig(config));
-  EXPECT_FALSE(keyboard_controller_.keyboard_config().spell_check);
+  EXPECT_TRUE(keyboard_ui_controller_.UpdateKeyboardConfig(config));
+  EXPECT_FALSE(keyboard_ui_controller_.keyboard_config().spell_check);
 
-  EXPECT_FALSE(keyboard_controller_.UpdateKeyboardConfig(config));
+  EXPECT_FALSE(keyboard_ui_controller_.UpdateKeyboardConfig(config));
 }
 
 TEST_F(KeyboardUtilTest, IsOverscrollEnabled) {
   ResetAllFlags();
 
   // Return false when keyboard is disabled.
-  EXPECT_FALSE(keyboard_controller_.IsKeyboardOverscrollEnabled());
+  EXPECT_FALSE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Enable the virtual keyboard.
   keyboard::SetTouchKeyboardEnabled(true);
-  EXPECT_TRUE(keyboard_controller_.IsKeyboardOverscrollEnabled());
+  EXPECT_TRUE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Set overscroll enabled flag.
-  KeyboardConfig config = keyboard_controller_.keyboard_config();
+  KeyboardConfig config = keyboard_ui_controller_.keyboard_config();
   config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDisabled;
-  keyboard_controller_.UpdateKeyboardConfig(config);
-  EXPECT_FALSE(keyboard_controller_.IsKeyboardOverscrollEnabled());
+  keyboard_ui_controller_.UpdateKeyboardConfig(config);
+  EXPECT_FALSE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Set default overscroll flag.
   config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDefault;
-  keyboard_controller_.UpdateKeyboardConfig(config);
-  EXPECT_TRUE(keyboard_controller_.IsKeyboardOverscrollEnabled());
+  keyboard_ui_controller_.UpdateKeyboardConfig(config);
+  EXPECT_TRUE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 
   // Set keyboard_locked() to true.
-  keyboard_controller_.set_keyboard_locked(true);
-  EXPECT_TRUE(keyboard_controller_.keyboard_locked());
-  EXPECT_FALSE(keyboard_controller_.IsKeyboardOverscrollEnabled());
+  keyboard_ui_controller_.set_keyboard_locked(true);
+  EXPECT_TRUE(keyboard_ui_controller_.keyboard_locked());
+  EXPECT_FALSE(keyboard_ui_controller_.IsKeyboardOverscrollEnabled());
 }
 
 // See https://crbug.com/946358.
@@ -204,7 +204,7 @@
   keyboard::SetTouchKeyboardEnabled(true);
 
   keyboard::TestKeyboardControllerObserver observer;
-  keyboard_controller_.AddObserver(&observer);
+  keyboard_ui_controller_.AddObserver(&observer);
 
   // Virtual keyboard should rebuild to switch to a11y layout.
   keyboard::SetAccessibilityKeyboardEnabled(true);
@@ -216,7 +216,7 @@
   EXPECT_EQ(2, observer.disabled_count);
   EXPECT_EQ(2, observer.enabled_count);
 
-  keyboard_controller_.RemoveObserver(&observer);
+  keyboard_ui_controller_.RemoveObserver(&observer);
 }
 
 }  // namespace keyboard
diff --git a/ash/keyboard/ui/queued_container_type.cc b/ash/keyboard/ui/queued_container_type.cc
index b4c815f4..83ba1f4 100644
--- a/ash/keyboard/ui/queued_container_type.cc
+++ b/ash/keyboard/ui/queued_container_type.cc
@@ -6,12 +6,12 @@
 
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 
 namespace keyboard {
 
 QueuedContainerType::QueuedContainerType(
-    KeyboardController* controller,
+    KeyboardUIController* controller,
     ContainerType container_type,
     base::Optional<gfx::Rect> bounds,
     base::OnceCallback<void(bool success)> callback)
diff --git a/ash/keyboard/ui/queued_container_type.h b/ash/keyboard/ui/queued_container_type.h
index 5e3f81b..01acff2 100644
--- a/ash/keyboard/ui/queued_container_type.h
+++ b/ash/keyboard/ui/queued_container_type.h
@@ -12,17 +12,17 @@
 
 namespace keyboard {
 
-class KeyboardController;
+class KeyboardUIController;
 
 // Tracks a queued ContainerType change request. Couples a container type with a
 // callback to invoke once the necessary animation and container changes are
 // complete.
 // The callback will be invoked once this object goes out of scope. Success
-// is defined as the KeyboardController's current container behavior matching
+// is defined as the KeyboardUIController's current container behavior matching
 // the same container type as the queued container type.
 class QueuedContainerType {
  public:
-  QueuedContainerType(KeyboardController* controller,
+  QueuedContainerType(KeyboardUIController* controller,
                       ContainerType container_type,
                       base::Optional<gfx::Rect> bounds,
                       base::OnceCallback<void(bool success)> callback);
@@ -31,7 +31,7 @@
   base::Optional<gfx::Rect> target_bounds() { return bounds_; }
 
  private:
-  KeyboardController* controller_;
+  KeyboardUIController* controller_;
   ContainerType container_type_;
   base::Optional<gfx::Rect> bounds_;
   base::OnceCallback<void(bool success)> callback_;
diff --git a/ash/keyboard/ui/queued_display_change.cc b/ash/keyboard/ui/queued_display_change.cc
index 97cc671..47960e4 100644
--- a/ash/keyboard/ui/queued_display_change.cc
+++ b/ash/keyboard/ui/queued_display_change.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "ash/keyboard/ui/queued_display_change.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/bind.h"
 #include "ui/display/display.h"
 
diff --git a/ash/keyboard/ui/test/keyboard_test_util.cc b/ash/keyboard/ui/test/keyboard_test_util.cc
index 8e48c72..b971ec4 100644
--- a/ash/keyboard/ui/test/keyboard_test_util.cc
+++ b/ash/keyboard/ui/test/keyboard_test_util.cc
@@ -4,7 +4,7 @@
 
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_controller_observer.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
@@ -18,10 +18,10 @@
  public:
   explicit KeyboardVisibilityChangeWaiter(bool wait_until)
       : wait_until_(wait_until) {
-    KeyboardController::Get()->AddObserver(this);
+    KeyboardUIController::Get()->AddObserver(this);
   }
   ~KeyboardVisibilityChangeWaiter() override {
-    KeyboardController::Get()->RemoveObserver(this);
+    KeyboardUIController::Get()->RemoveObserver(this);
   }
 
   void Wait() { run_loop_.Run(); }
@@ -39,7 +39,7 @@
 };
 
 bool WaitVisibilityChangesTo(bool wait_until) {
-  if (KeyboardController::Get()->IsKeyboardVisible() == wait_until)
+  if (KeyboardUIController::Get()->IsKeyboardVisible() == wait_until)
     return true;
   KeyboardVisibilityChangeWaiter waiter(wait_until);
   waiter.Wait();
@@ -54,7 +54,7 @@
   // In tests, the keyboard window is mocked out so it usually "loads" within a
   // single RunUntilIdle call.
   base::RunLoop run_loop;
-  while (KeyboardController::Get()->GetStateForTest() ==
+  while (KeyboardUIController::Get()->GetStateForTest() ==
          KeyboardUIState::kLoading) {
     run_loop.RunUntilIdle();
   }
@@ -78,7 +78,7 @@
 }
 
 bool IsKeyboardShowing() {
-  auto* keyboard_controller = KeyboardController::Get();
+  auto* keyboard_controller = KeyboardUIController::Get();
   DCHECK(keyboard_controller->IsEnabled());
 
   // KeyboardController sets its state to SHOWN when it is about to show.
@@ -86,7 +86,7 @@
 }
 
 bool IsKeyboardHiding() {
-  auto* keyboard_controller = KeyboardController::Get();
+  auto* keyboard_controller = KeyboardUIController::Get();
   DCHECK(keyboard_controller->IsEnabled());
 
   return keyboard_controller->GetStateForTest() == KeyboardUIState::kWillHide ||
diff --git a/ash/keyboard/virtual_keyboard_controller.cc b/ash/keyboard/virtual_keyboard_controller.cc
index aa4b500..6c366d7 100644
--- a/ash/keyboard/virtual_keyboard_controller.cc
+++ b/ash/keyboard/virtual_keyboard_controller.cc
@@ -8,7 +8,7 @@
 
 #include "ash/ime/ime_controller.h"
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/shell_window_ids.h"
@@ -64,7 +64,7 @@
       base::Unretained(this),
       chromeos::input_method::mojom::ImeKeyset::kEmoji));
 
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
 
   bluetooth_devices_observer_ =
       std::make_unique<BluetoothDevicesObserver>(base::BindRepeating(
@@ -73,7 +73,7 @@
 }
 
 VirtualKeyboardController::~VirtualKeyboardController() {
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
 
   if (Shell::Get()->tablet_mode_controller())
     Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
@@ -159,7 +159,7 @@
 
 void VirtualKeyboardController::ForceShowKeyboard() {
   // If the virtual keyboard is enabled, show the keyboard directly.
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsEnabled()) {
     keyboard_controller->ShowKeyboard(false /* locked */);
     return;
diff --git a/ash/keyboard/virtual_keyboard_controller_unittest.cc b/ash/keyboard/virtual_keyboard_controller_unittest.cc
index 918a4cea..8914470 100644
--- a/ash/keyboard/virtual_keyboard_controller_unittest.cc
+++ b/ash/keyboard/virtual_keyboard_controller_unittest.cc
@@ -50,8 +50,8 @@
     return Shell::Get()->display_manager()->GetSecondaryDisplay();
   }
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard::KeyboardUIController::Get();
   }
 
  private:
@@ -107,7 +107,7 @@
             client.last_keyset_);
 
   // Simulate the keyboard hiding.
-  if (keyboard_controller()->HasObserver(GetVirtualKeyboardController())) {
+  if (keyboard_ui_controller()->HasObserver(GetVirtualKeyboardController())) {
     GetVirtualKeyboardController()->OnKeyboardHidden(
         false /* is_temporary_hide */);
   }
@@ -132,32 +132,32 @@
   Shell::Get()->ime_controller()->SetClient(client.CreateInterfacePtr());
 
   // Should show the keyboard by enabling it temporarily.
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
-  EXPECT_FALSE(keyboard_controller()->IsEnableFlagSet(
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnableFlagSet(
       KeyboardEnableFlag::kShelfEnabled));
 
   GetVirtualKeyboardController()->ForceShowKeyboardWithKeyset(
       chromeos::input_method::mojom::ImeKeyset::kEmoji);
   Shell::Get()->ime_controller()->FlushMojoForTesting();
 
-  EXPECT_TRUE(keyboard_controller()->IsEnableFlagSet(
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnableFlagSet(
       KeyboardEnableFlag::kShelfEnabled));
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
 
   // Keyset should be emoji.
   EXPECT_EQ(chromeos::input_method::mojom::ImeKeyset::kEmoji,
             client.last_keyset_);
 
   // Simulate the keyboard hiding.
-  if (keyboard_controller()->HasObserver(GetVirtualKeyboardController())) {
+  if (keyboard_ui_controller()->HasObserver(GetVirtualKeyboardController())) {
     GetVirtualKeyboardController()->OnKeyboardHidden(
         false /* is_temporary_hide */);
   }
   base::RunLoop().RunUntilIdle();
 
   // The keyboard should still be disabled again.
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
-  EXPECT_FALSE(keyboard_controller()->IsEnableFlagSet(
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnableFlagSet(
       KeyboardEnableFlag::kShelfEnabled));
 
   // Keyset should be reset to none.
@@ -177,25 +177,25 @@
       chromeos::input_method::mojom::ImeKeyset::kEmoji);
   Shell::Get()->ime_controller()->FlushMojoForTesting();
 
-  EXPECT_TRUE(keyboard_controller()->IsEnableFlagSet(
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnableFlagSet(
       KeyboardEnableFlag::kShelfEnabled));
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
 
   // Keyset should be emoji.
   EXPECT_EQ(chromeos::input_method::mojom::ImeKeyset::kEmoji,
             client.last_keyset_);
 
   // Simulate the keyboard hiding temporarily.
-  if (keyboard_controller()->HasObserver(GetVirtualKeyboardController())) {
+  if (keyboard_ui_controller()->HasObserver(GetVirtualKeyboardController())) {
     GetVirtualKeyboardController()->OnKeyboardHidden(
         true /* is_temporary_hide */);
   }
   base::RunLoop().RunUntilIdle();
 
   // The keyboard should still be enabled.
-  EXPECT_TRUE(keyboard_controller()->IsEnableFlagSet(
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnableFlagSet(
       KeyboardEnableFlag::kShelfEnabled));
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
 
   // Keyset should still be emoji.
   EXPECT_EQ(chromeos::input_method::mojom::ImeKeyset::kEmoji,
@@ -254,13 +254,13 @@
   keyboard_devices.push_back(ui::InputDevice(
       1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard"));
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   // Remove the internal keyboard. Virtual keyboard should now show.
   ui::DeviceDataManagerTestApi().SetKeyboardDevices({});
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   // Replug in the internal keyboard. Virtual keyboard should hide.
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
 }
 
 TEST_F(VirtualKeyboardControllerAutoTest, DisabledIfNoTouchScreen) {
@@ -270,10 +270,10 @@
       ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_USB,
                             "Touchscreen", gfx::Size(800, 600), 0));
   ui::DeviceDataManagerTestApi().SetTouchscreenDevices(devices);
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   // Remove touchscreen. Keyboard should hide.
   ui::DeviceDataManagerTestApi().SetTouchscreenDevices({});
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
 }
 
 TEST_F(VirtualKeyboardControllerAutoTest, SuppressedIfExternalKeyboardPresent) {
@@ -286,26 +286,26 @@
   keyboard_devices.push_back(
       ui::InputDevice(1, ui::InputDeviceType::INPUT_DEVICE_USB, "keyboard"));
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Toggle show keyboard. Keyboard should be visible.
   ResetObserver();
   GetVirtualKeyboardController()->ToggleIgnoreExternalKeyboard();
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Toggle show keyboard. Keyboard should be hidden.
   ResetObserver();
   GetVirtualKeyboardController()->ToggleIgnoreExternalKeyboard();
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Remove external keyboard. Should be notified that the keyboard is not
   // suppressed.
   ResetObserver();
   ui::DeviceDataManagerTestApi().SetKeyboardDevices({});
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_FALSE(IsVirtualKeyboardSuppressed());
 }
@@ -320,7 +320,7 @@
   keyboards.push_back(
       ui::InputDevice(3, ui::InputDeviceType::INPUT_DEVICE_USB, "keyboard"));
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboards);
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
 }
 
 // Tests tablet mode interaction without disabling the internal keyboard.
@@ -334,13 +334,13 @@
   keyboard_devices.push_back(ui::InputDevice(
       1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "Keyboard"));
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   // Toggle tablet mode on.
   TabletModeControllerTestApi().EnterTabletMode();
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   // Toggle tablet mode off.
   TabletModeControllerTestApi().LeaveTabletMode();
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
 }
 
 // Tests that keyboard gets suppressed in tablet mode.
@@ -358,19 +358,19 @@
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
   // Toggle tablet mode on.
   TabletModeControllerTestApi().EnterTabletMode();
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Toggle show keyboard. Keyboard should be visible.
   ResetObserver();
   GetVirtualKeyboardController()->ToggleIgnoreExternalKeyboard();
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Toggle show keyboard. Keyboard should be hidden.
   ResetObserver();
   GetVirtualKeyboardController()->ToggleIgnoreExternalKeyboard();
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_TRUE(IsVirtualKeyboardSuppressed());
   // Remove external keyboard. Should be notified that the keyboard is not
@@ -378,12 +378,12 @@
   ResetObserver();
   keyboard_devices.pop_back();
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
   EXPECT_TRUE(notified());
   EXPECT_FALSE(IsVirtualKeyboardSuppressed());
   // Toggle tablet mode oFF.
   TabletModeControllerTestApi().LeaveTabletMode();
-  EXPECT_FALSE(keyboard_controller()->IsEnabled());
+  EXPECT_FALSE(keyboard_ui_controller()->IsEnabled());
 }
 
 class VirtualKeyboardControllerAlwaysEnabledTest
@@ -415,7 +415,7 @@
   keyboard_devices.push_back(
       ui::InputDevice(1, ui::InputDeviceType::INPUT_DEVICE_USB, "keyboard"));
   ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
-  EXPECT_TRUE(keyboard_controller()->IsEnabled());
+  EXPECT_TRUE(keyboard_ui_controller()->IsEnabled());
 }
 
 }  // namespace ash
diff --git a/ash/keyboard/virtual_keyboard_unittest.cc b/ash/keyboard/virtual_keyboard_unittest.cc
index 602e4492..a76b8ac 100644
--- a/ash/keyboard/virtual_keyboard_unittest.cc
+++ b/ash/keyboard/virtual_keyboard_unittest.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 "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -44,7 +44,7 @@
   std::unique_ptr<aura::Window> background_window(
       CreateTestWindowInShellWithDelegate(&delegate, 0, root_window->bounds()));
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
@@ -94,7 +94,7 @@
   std::unique_ptr<aura::Window> background_window(
       CreateTestWindowInShellWithDelegate(&delegate, 0, root_window->bounds()));
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 6075c54..e62ece20 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -199,15 +199,15 @@
   add_style(regular_style, *bold_start + bold_length + 1, text.length());
 }
 
-keyboard::KeyboardController* GetKeyboardControllerForWidget(
+keyboard::KeyboardUIController* GetKeyboardControllerForWidget(
     const views::Widget* widget) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
-  if (!keyboard_controller->IsEnabled())
+  auto* keyboard_ui_controller = keyboard::KeyboardUIController::Get();
+  if (!keyboard_ui_controller->IsEnabled())
     return nullptr;
 
-  aura::Window* keyboard_window = keyboard_controller->GetRootWindow();
+  aura::Window* keyboard_window = keyboard_ui_controller->GetRootWindow();
   aura::Window* this_window = widget->GetNativeWindow()->GetRootWindow();
-  return keyboard_window == this_window ? keyboard_controller : nullptr;
+  return keyboard_window == this_window ? keyboard_ui_controller : nullptr;
 }
 
 bool IsPublicAccountUser(const LoginUserInfo& user) {
@@ -395,7 +395,7 @@
   data_dispatcher_->AddObserver(this);
   display_observer_.Add(display::Screen::GetScreen());
   Shell::Get()->system_tray_notifier()->AddSystemTrayFocusObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
 
   // We reuse the focusable state on this view as a signal that focus should
   // switch to the system tray. LockContentsView should otherwise not be
@@ -462,7 +462,7 @@
 LockContentsView::~LockContentsView() {
   Shell::Get()->accelerator_controller()->UnregisterAll(this);
   data_dispatcher_->RemoveObserver(this);
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
   Shell::Get()->system_tray_notifier()->RemoveSystemTrayFocusObserver(this);
 
   if (unlock_attempt_ > 0) {
@@ -1377,7 +1377,7 @@
   // depend on the preferred size to determine layout.
   gfx::Size preferred_size = display.size();
   preferred_size.set_height(preferred_size.height() -
-                            keyboard::KeyboardController::Get()
+                            keyboard::KeyboardUIController::Get()
                                 ->GetWorkspaceOccludedBoundsInScreen()
                                 .height());
   SetPreferredSize(preferred_size);
@@ -1786,7 +1786,7 @@
   ShowParentAccessDialog(false);
 }
 
-keyboard::KeyboardController* LockContentsView::GetKeyboardControllerForView()
+keyboard::KeyboardUIController* LockContentsView::GetKeyboardControllerForView()
     const {
   return GetWidget() ? GetKeyboardControllerForWidget(GetWidget()) : nullptr;
 }
diff --git a/ash/login/ui/lock_contents_view.h b/ash/login/ui/lock_contents_view.h
index bd828f1f..06aed9c 100644
--- a/ash/login/ui/lock_contents_view.h
+++ b/ash/login/ui/lock_contents_view.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "ash/ash_export.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/login/ui/lock_screen.h"
 #include "ash/login/ui/login_data_dispatcher.h"
 #include "ash/login/ui/login_display_style.h"
@@ -33,7 +33,7 @@
 #include "ui/views/view.h"
 
 namespace keyboard {
-class KeyboardController;
+class KeyboardUIController;
 }  // namespace keyboard
 
 namespace views {
@@ -316,7 +316,7 @@
   // Returns keyboard controller for the view. Returns nullptr if keyboard is
   // not activated, view has not been added to the widget yet or keyboard is not
   // displayed in this window.
-  keyboard::KeyboardController* GetKeyboardControllerForView() const;
+  keyboard::KeyboardUIController* GetKeyboardControllerForView() const;
 
   // Called when the public account is tapped.
   void OnPublicAccountTapped(bool is_primary);
diff --git a/ash/login/ui/login_keyboard_test_base.cc b/ash/login/ui/login_keyboard_test_base.cc
index fe235d5..99f0ff3 100644
--- a/ash/login/ui/login_keyboard_test_base.cc
+++ b/ash/login/ui/login_keyboard_test_base.cc
@@ -5,8 +5,8 @@
 #include "ash/login/ui/login_keyboard_test_base.h"
 
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/login/mock_login_screen_client.h"
 #include "ash/login/ui/lock_screen.h"
@@ -31,7 +31,7 @@
 }
 
 void LoginKeyboardTestBase::ShowKeyboard() {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false);
   // Set keyboard height to half of the root window - this should overlap with
   // lock/login layout.
@@ -43,13 +43,13 @@
 }
 
 void LoginKeyboardTestBase::HideKeyboard() {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->HideKeyboardByUser();
   ASSERT_FALSE(keyboard_controller->IsKeyboardVisible());
 }
 
 gfx::Rect LoginKeyboardTestBase::GetKeyboardBoundsInScreen() const {
-  return keyboard::KeyboardController::Get()
+  return keyboard::KeyboardUIController::Get()
       ->GetKeyboardWindow()
       ->GetBoundsInScreen();
 }
diff --git a/ash/magnifier/magnification_controller.cc b/ash/magnifier/magnification_controller.cc
index 42db7ad3..5253e74 100644
--- a/ash/magnifier/magnification_controller.cc
+++ b/ash/magnifier/magnification_controller.cc
@@ -14,7 +14,7 @@
 #include "ash/display/root_window_transformers.h"
 #include "ash/host/ash_window_tree_host.h"
 #include "ash/host/root_window_transformer.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/magnifier/magnifier_utils.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_controller.h"
@@ -177,11 +177,11 @@
   // Keyboard overscroll creates layout issues with fullscreen magnification
   // so it needs to be disabled when magnification is enabled.
   // TODO(spqchan): Fix the keyboard overscroll issues.
-  auto config = keyboard::KeyboardController::Get()->keyboard_config();
+  auto config = keyboard::KeyboardUIController::Get()->keyboard_config();
   config.overscroll_behavior =
       is_enabled_ ? keyboard::KeyboardOverscrollBehavior::kDisabled
                   : keyboard::KeyboardOverscrollBehavior::kDefault;
-  keyboard::KeyboardController::Get()->UpdateKeyboardConfig(config);
+  keyboard::KeyboardUIController::Get()->UpdateKeyboardConfig(config);
 }
 
 bool MagnificationController::IsEnabled() const {
@@ -725,7 +725,7 @@
 
   // Reduce the bottom margin if the keyboard is visible.
   bool reduce_bottom_margin =
-      keyboard::KeyboardController::Get()->IsKeyboardVisible();
+      keyboard::KeyboardUIController::Get()->IsKeyboardVisible();
 
   MoveMagnifierWindowFollowPoint(mouse, margin, margin, margin, margin,
                                  reduce_bottom_margin);
@@ -903,8 +903,8 @@
   gfx::Rect window_rect = GetViewportRect();
 
   // Reduce the viewport bounds if the keyboard is up.
-  if (keyboard::KeyboardController::Get()->IsEnabled()) {
-    gfx::Rect keyboard_rect = keyboard::KeyboardController::Get()
+  if (keyboard::KeyboardUIController::Get()->IsEnabled()) {
+    gfx::Rect keyboard_rect = keyboard::KeyboardUIController::Get()
                                   ->GetKeyboardWindow()
                                   ->GetBoundsInScreen();
     window_rect.set_height(window_rect.height() -
diff --git a/ash/magnifier/magnification_controller_unittest.cc b/ash/magnifier/magnification_controller_unittest.cc
index 743eb6f7..dfeb863c 100644
--- a/ash/magnifier/magnification_controller_unittest.cc
+++ b/ash/magnifier/magnification_controller_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "ash/magnifier/magnification_controller.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/magnifier/magnifier_test_utils.h"
 #include "ash/magnifier/magnifier_utils.h"
@@ -949,7 +949,7 @@
 TEST_F(MagnificationControllerTest, KeyboardOverscrollDisabled) {
   GetMagnificationController()->SetEnabled(false);
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   bool old_keyboard_overscroll_value =
       keyboard_controller->IsKeyboardOverscrollEnabled();
 
@@ -980,7 +980,7 @@
 
   // Set up and show the keyboard.
   keyboard::SetAccessibilityKeyboardEnabled(true);
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(true);
 
   // Focus on the text input field.
diff --git a/ash/public/cpp/app_list/app_list_types.h b/ash/public/cpp/app_list/app_list_types.h
index c950e256..48149570 100644
--- a/ash/public/cpp/app_list/app_list_types.h
+++ b/ash/public/cpp/app_list/app_list_types.h
@@ -139,6 +139,24 @@
   kLast,  // Don't use over IPC
 };
 
+// Which UI container should the result be displayed in.
+enum SearchResultDisplayLocation {
+  kSuggestionChipContainer,
+  kTileListContainer,
+  kUnknown,
+};
+
+// Which index in the UI container should the result be placed in.
+enum SearchResultDisplayIndex {
+  kFirstIndex,
+  kSecondIndex,
+  kThirdIndex,
+  kFourthIndex,
+  kFifthIndex,
+  kSixthIndex,
+  kPlacementUndefined,
+};
+
 // Actions for OmniBox zero state suggestion.
 enum OmniBoxZeroStateAction {
   // Removes the zero state suggestion.
@@ -241,6 +259,14 @@
   // How this result is displayed.
   SearchResultDisplayType display_type = SearchResultDisplayType::kList;
 
+  // Which UI container should the result be displayed in.
+  SearchResultDisplayLocation display_location =
+      SearchResultDisplayLocation::kUnknown;
+
+  // Which index in the UI container should the result be placed in.
+  SearchResultDisplayIndex display_index =
+      SearchResultDisplayIndex::kPlacementUndefined;
+
   // A score to determine the result display order.
   double display_score = 0;
 
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index df676ff..80bd085d 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -18,8 +18,8 @@
 #include "ash/host/ash_window_tree_host.h"
 #include "ash/keyboard/arc/arc_virtual_keyboard_container_layout_manager.h"
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_layout_manager.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/virtual_keyboard_container_layout_manager.h"
 #include "ash/lock_screen_action/lock_screen_action_background_controller.h"
@@ -1063,7 +1063,8 @@
   virtual_keyboard_container->SetProperty(::wm::kUsesScreenCoordinatesKey,
                                           true);
   virtual_keyboard_container->SetLayoutManager(
-      new keyboard::KeyboardLayoutManager(keyboard::KeyboardController::Get()));
+      new keyboard::KeyboardLayoutManager(
+          keyboard::KeyboardUIController::Get()));
 
   aura::Window* menu_container =
       CreateContainer(kShellWindowId_MenuContainer, "MenuContainer",
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 4c474d8..ca8b9c4 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -731,7 +731,7 @@
   }
 
   void EnsureCaretInWorkArea(const gfx::Rect& occluded_bounds) {
-    keyboard::KeyboardController::Get()->EnsureCaretInWorkAreaForTest(
+    keyboard::KeyboardUIController::Get()->EnsureCaretInWorkAreaForTest(
         occluded_bounds);
   }
 
@@ -781,9 +781,9 @@
   keyboard_container->Show();
 
   aura::Window* contents_window =
-      keyboard::KeyboardController::Get()->GetKeyboardWindow();
+      keyboard::KeyboardUIController::Get()->GetKeyboardWindow();
   contents_window->Show();
-  keyboard::KeyboardController::Get()->ShowKeyboard(false);
+  keyboard::KeyboardUIController::Get()->ShowKeyboard(false);
 
   // Make sure no pending mouse events in the queue.
   base::RunLoop().RunUntilIdle();
@@ -819,7 +819,7 @@
   aura::Window* keyboard_container =
       Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer);
   keyboard_container->Show();
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
   aura::Window* contents_window = controller->GetKeyboardWindow();
   contents_window->SetBounds(
       keyboard::KeyboardBoundsFromRootBounds(root_window->bounds(), 100));
@@ -845,7 +845,7 @@
 // Ensure that system modal dialogs do not block events targeted at the virtual
 // keyboard.
 TEST_F(VirtualKeyboardRootWindowControllerTest, ClickWithActiveModalDialog) {
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
   aura::Window* root_window = Shell::GetPrimaryRootWindow();
   ASSERT_EQ(root_window, controller->GetRootWindow());
 
@@ -880,7 +880,7 @@
 // Ensure that the visible area for scrolling the text caret excludes the
 // region occluded by the on-screen keyboard.
 TEST_F(VirtualKeyboardRootWindowControllerTest, EnsureCaretInWorkArea) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
 
   MockTextInputClient text_input_client;
   ui::InputMethod* input_method = keyboard_controller->GetInputMethodForTest();
@@ -916,7 +916,7 @@
   aura::Window* primary_root_window = root_windows[0];
   aura::Window* secondary_root_window = root_windows[1];
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
 
   MockTextInputClient text_input_client;
   ui::InputMethod* input_method = keyboard_controller->GetInputMethodForTest();
@@ -961,7 +961,7 @@
 // crbug/377180.
 TEST_F(VirtualKeyboardRootWindowControllerTest, ZOrderTest) {
   UpdateDisplay("800x600");
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
 
   aura::Window* root_window = Shell::GetPrimaryRootWindow();
 
@@ -1036,7 +1036,7 @@
 // orientation. See crbug/417612.
 TEST_F(VirtualKeyboardRootWindowControllerTest, DisplayRotation) {
   UpdateDisplay("800x600");
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false);
 
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
@@ -1081,7 +1081,7 @@
   EXPECT_TRUE(background_window->IsVisible());
   EXPECT_TRUE(background_window->HasFocus());
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false);
   ASSERT_TRUE(keyboard::WaitUntilShown());
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index 4b1cd0d..f76ee42 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -17,8 +17,8 @@
 #include "ash/home_screen/home_launcher_gesture_handler.h"
 #include "ash/home_screen/home_screen_controller.h"
 #include "ash/home_screen/home_screen_delegate.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "ash/public/cpp/immersive/immersive_fullscreen_controller_test_api.h"
@@ -3157,7 +3157,7 @@
 
   ShelfLayoutManager* layout_manager = GetShelfLayoutManager();
   InitKeyboardBounds();
-  auto* kb_controller = keyboard::KeyboardController::Get();
+  auto* kb_controller = keyboard::KeyboardUIController::Get();
   // Open keyboard in non-sticky mode.
   kb_controller->ShowKeyboard(false);
   NotifyKeyboardChanging(layout_manager, false, keyboard_bounds());
@@ -3172,7 +3172,7 @@
        ShelfIgnoreWorkAreaChangeInNonStickyMode) {
   ShelfLayoutManager* layout_manager = GetShelfLayoutManager();
   InitKeyboardBounds();
-  auto* kb_controller = keyboard::KeyboardController::Get();
+  auto* kb_controller = keyboard::KeyboardUIController::Get();
   gfx::Rect orig_work_area(
       display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
 
@@ -3194,7 +3194,7 @@
 TEST_F(ShelfLayoutManagerKeyboardTest, ShelfShouldChangeWorkAreaInStickyMode) {
   ShelfLayoutManager* layout_manager = GetShelfLayoutManager();
   InitKeyboardBounds();
-  auto* kb_controller = keyboard::KeyboardController::Get();
+  auto* kb_controller = keyboard::KeyboardUIController::Get();
   gfx::Rect orig_work_area(
       display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
 
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 16b6a647b..8cca305 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -11,7 +11,7 @@
 #include "ash/drag_drop/drag_image_view.h"
 #include "ash/focus_cycler.h"
 #include "ash/keyboard/keyboard_util.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/metrics/user_metrics_recorder.h"
 #include "ash/public/cpp/ash_constants.h"
 #include "ash/public/cpp/shelf_model.h"
@@ -660,8 +660,8 @@
   }
 
   // Ensure the keyboard is hidden and stays hidden (as long as it isn't locked)
-  if (keyboard::KeyboardController::Get()->IsEnabled())
-    keyboard::KeyboardController::Get()->HideKeyboardExplicitlyBySystem();
+  if (keyboard::KeyboardUIController::Get()->IsEnabled())
+    keyboard::KeyboardUIController::Get()->HideKeyboardExplicitlyBySystem();
 
   // Close the overflow bubble if an item on either shelf is clicked. Press
   // events elsewhere will close the overflow shelf via OverflowBubble's
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc
index 16f90b8..644dfae 100644
--- a/ash/shelf/shelf_widget.cc
+++ b/ash/shelf/shelf_widget.cc
@@ -8,7 +8,7 @@
 
 #include "ash/animation/animation_change_type.h"
 #include "ash/focus_cycler.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/kiosk_next/kiosk_next_shell_controller_impl.h"
 #include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/ash_switches.h"
@@ -605,7 +605,7 @@
 
 void ShelfWidget::OnMouseEvent(ui::MouseEvent* event) {
   if (event->type() == ui::ET_MOUSE_PRESSED) {
-    keyboard::KeyboardController::Get()->HideKeyboardImplicitlyByUser();
+    keyboard::KeyboardUIController::Get()->HideKeyboardImplicitlyByUser();
 
     // If the shelf receives the mouse pressing event, the RootView of the shelf
     // will reset the gesture handler. As a result, if the shelf is in drag
@@ -619,7 +619,7 @@
 
 void ShelfWidget::OnGestureEvent(ui::GestureEvent* event) {
   if (event->type() == ui::ET_GESTURE_TAP_DOWN)
-    keyboard::KeyboardController::Get()->HideKeyboardImplicitlyByUser();
+    keyboard::KeyboardUIController::Get()->HideKeyboardImplicitlyByUser();
   views::Widget::OnGestureEvent(event);
 }
 
diff --git a/ash/shelf/shelf_widget_unittest.cc b/ash/shelf/shelf_widget_unittest.cc
index 0123790..291566cb 100644
--- a/ash/shelf/shelf_widget_unittest.cc
+++ b/ash/shelf/shelf_widget_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "ash/shelf/shelf_widget.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/ash_features.h"
@@ -527,17 +527,17 @@
     // These tests only apply to the floating virtual keyboard, as it is the
     // only case where both the virtual keyboard and the shelf are visible.
     const gfx::Rect keyboard_bounds(0, 0, 1, 1);
-    keyboard_controller()->SetContainerType(keyboard::ContainerType::kFloating,
-                                            keyboard_bounds, base::DoNothing());
+    keyboard_ui_controller()->SetContainerType(
+        keyboard::ContainerType::kFloating, keyboard_bounds, base::DoNothing());
   }
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard::KeyboardUIController::Get();
   }
 };
 
 TEST_F(ShelfWidgetVirtualKeyboardTest, ClickingHidesVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
@@ -550,7 +550,7 @@
 }
 
 TEST_F(ShelfWidgetVirtualKeyboardTest, TappingHidesVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
@@ -563,7 +563,7 @@
 }
 
 TEST_F(ShelfWidgetVirtualKeyboardTest, DoesNotHideLockedVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(true /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(true /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc
index 513e88d7..897d07d 100644
--- a/ash/shell/content/client/shell_browser_main_parts.cc
+++ b/ash/shell/content/client/shell_browser_main_parts.cc
@@ -9,6 +9,7 @@
 
 #include "ash/keyboard/test_keyboard_ui.h"
 #include "ash/login_status.h"
+#include "ash/session/test_pref_service_provider.h"
 #include "ash/shell.h"
 #include "ash/shell/content/embedded_browser.h"
 #include "ash/shell/example_app_list_client.h"
@@ -18,6 +19,7 @@
 #include "ash/shell/window_type_launcher.h"
 #include "ash/shell/window_watcher.h"
 #include "ash/shell_init_params.h"
+#include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/i18n/icu_util.h"
@@ -90,11 +92,13 @@
   init_params.keyboard_ui_factory = std::make_unique<TestKeyboardUIFactory>();
   ash::Shell::CreateInstance(std::move(init_params));
 
+  prefs_provider_ = std::make_unique<TestPrefServiceProvider>();
+
   // Initialize session controller client and create fake user sessions. The
   // fake user sessions makes ash into the logged in state.
   example_session_controller_client_ =
       std::make_unique<ExampleSessionControllerClient>(
-          Shell::Get()->session_controller());
+          Shell::Get()->session_controller(), prefs_provider_.get());
   example_session_controller_client_->Initialize();
 
   window_watcher_ = std::make_unique<WindowWatcher>();
@@ -110,6 +114,8 @@
   example_app_list_client_ = std::make_unique<ExampleAppListClient>(
       Shell::Get()->app_list_controller());
 
+  ash::Shell::Get()->wallpaper_controller()->ShowDefaultWallpaperForTesting();
+
   ash::Shell::GetPrimaryRootWindow()->GetHost()->Show();
 
   ash::Shell::Get()->InitWaylandServer(nullptr);
diff --git a/ash/shell/content/client/shell_browser_main_parts.h b/ash/shell/content/client/shell_browser_main_parts.h
index 181ca4b..db781041 100644
--- a/ash/shell/content/client/shell_browser_main_parts.h
+++ b/ash/shell/content/client/shell_browser_main_parts.h
@@ -24,8 +24,9 @@
 }
 
 namespace ash {
-namespace shell {
+class TestPrefServiceProvider;
 
+namespace shell {
 class ExampleAppListClient;
 class ExampleSessionControllerClient;
 class WindowWatcher;
@@ -55,6 +56,7 @@
   std::unique_ptr<ExampleSessionControllerClient>
       example_session_controller_client_;
   std::unique_ptr<ExampleAppListClient> example_app_list_client_;
+  std::unique_ptr<TestPrefServiceProvider> prefs_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellBrowserMainParts);
 };
diff --git a/ash/shell/example_session_controller_client.cc b/ash/shell/example_session_controller_client.cc
index 190bf8f5..9a01626 100644
--- a/ash/shell/example_session_controller_client.cc
+++ b/ash/shell/example_session_controller_client.cc
@@ -18,8 +18,9 @@
 }  // namespace
 
 ExampleSessionControllerClient::ExampleSessionControllerClient(
-    SessionControllerImpl* controller)
-    : TestSessionControllerClient(controller, /*prefs_provider=*/nullptr) {
+    SessionControllerImpl* controller,
+    TestPrefServiceProvider* prefs_provider)
+    : TestSessionControllerClient(controller, prefs_provider) {
   DCHECK_EQ(instance, nullptr);
   DCHECK(controller);
   instance = this;
diff --git a/ash/shell/example_session_controller_client.h b/ash/shell/example_session_controller_client.h
index 44dff64..ef8779f6 100644
--- a/ash/shell/example_session_controller_client.h
+++ b/ash/shell/example_session_controller_client.h
@@ -19,7 +19,8 @@
 
 class ExampleSessionControllerClient : public TestSessionControllerClient {
  public:
-  explicit ExampleSessionControllerClient(SessionControllerImpl* controller);
+  ExampleSessionControllerClient(SessionControllerImpl* controller,
+                                 TestPrefServiceProvider* prefs_provider);
   ~ExampleSessionControllerClient() override;
 
   static ExampleSessionControllerClient* Get();
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc
index 878403fb..b1fc2e0 100644
--- a/ash/shell_unittest.cc
+++ b/ash/shell_unittest.cc
@@ -12,7 +12,7 @@
 #include "ash/display/mouse_cursor_event_filter.h"
 #include "ash/drag_drop/drag_drop_controller.h"
 #include "ash/drag_drop/drag_drop_controller_test_api.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/ash_prefs.h"
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 2a11688..0711912 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -435,7 +435,7 @@
 <translation id="7649070708921625228">सहायता</translation>
 <translation id="7654687942625752712">कंप्यूटर का बोलकर दिया गया जवाब बंद करने के लिए दोनों वॉल्यूम की पांच सेकंड तक दबाकर रखें.</translation>
 <translation id="7692480393933218409">कनेक्ट किए गए USB-C डिवाइस चार्ज कर रहा है</translation>
-<translation id="7705524343798198388">VPN</translation>
+<translation id="7705524343798198388">वीपीएन</translation>
 <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{एक सूचना}one{# सूचनाएं}other{# सूचनाएं}}</translation>
 <translation id="776344839111254542">अपडेट के विवरण देखने के लिए क्लिक करें</translation>
 <translation id="7780159184141939021">स्क्रीन घुमाएं</translation>
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index 140da54..2b5df0a6 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -7,7 +7,7 @@
 #include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/ime/ime_controller.h"
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/virtual_keyboard_controller.h"
 #include "ash/public/cpp/ash_constants.h"
 #include "ash/public/cpp/system_tray_client.h"
@@ -351,7 +351,7 @@
   SystemTrayNotifier* tray_notifier = Shell::Get()->system_tray_notifier();
   tray_notifier->RemoveIMEObserver(this);
   tray_notifier->RemoveVirtualKeyboardObserver(this);
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->HasObserver(this))
     keyboard_controller->RemoveObserver(this);
 }
@@ -459,7 +459,7 @@
 }
 
 void ImeMenuTray::ShowBubble(bool show_by_click) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsKeyboardVisible()) {
     show_bubble_after_keyboard_hidden_ = true;
     keyboard_controller->AddObserver(this);
@@ -511,7 +511,7 @@
 void ImeMenuTray::OnKeyboardHidden(bool is_temporary_hide) {
   if (show_bubble_after_keyboard_hidden_) {
     show_bubble_after_keyboard_hidden_ = false;
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
+    auto* keyboard_controller = keyboard::KeyboardUIController::Get();
     keyboard_controller->RemoveObserver(this);
 
     ShowImeMenuBubbleInternal(false /* show_by_click */);
diff --git a/ash/system/message_center/ash_popup_alignment_delegate_unittest.cc b/ash/system/message_center/ash_popup_alignment_delegate_unittest.cc
index c1491795..3797775 100644
--- a/ash/system/message_center/ash_popup_alignment_delegate_unittest.cc
+++ b/ash/system/message_center/ash_popup_alignment_delegate_unittest.cc
@@ -8,7 +8,7 @@
 #include <utility>
 #include <vector>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/shelf_types.h"
@@ -236,7 +236,7 @@
 TEST_F(AshPopupAlignmentDelegateTest, KeyboardShowing) {
   ASSERT_TRUE(keyboard::IsKeyboardEnabled());
   ASSERT_TRUE(
-      keyboard::KeyboardController::Get()->IsKeyboardOverscrollEnabled());
+      keyboard::KeyboardUIController::Get()->IsKeyboardOverscrollEnabled());
 
   UpdateDisplay("600x600");
   int baseline = alignment_delegate()->GetBaseline();
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index 54275e8f..8179464e 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -4,7 +4,7 @@
 
 #include "ash/system/status_area_widget.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
@@ -198,7 +198,7 @@
   views::View::ConvertPointFromWidget(virtual_keyboard_tray_.get(), &location);
   if (event->type() == ui::ET_MOUSE_PRESSED &&
       !virtual_keyboard_tray_->HitTestPoint(location)) {
-    keyboard::KeyboardController::Get()->HideKeyboardImplicitlyByUser();
+    keyboard::KeyboardUIController::Get()->HideKeyboardImplicitlyByUser();
   }
   views::Widget::OnMouseEvent(event);
 }
@@ -210,7 +210,7 @@
   views::View::ConvertPointFromWidget(virtual_keyboard_tray_.get(), &location);
   if (event->type() == ui::ET_GESTURE_TAP_DOWN &&
       !virtual_keyboard_tray_->HitTestPoint(location)) {
-    keyboard::KeyboardController::Get()->HideKeyboardImplicitlyByUser();
+    keyboard::KeyboardUIController::Get()->HideKeyboardImplicitlyByUser();
   }
   views::Widget::OnGestureEvent(event);
 }
diff --git a/ash/system/status_area_widget_unittest.cc b/ash/system/status_area_widget_unittest.cc
index f7d61ac1..035cdc2 100644
--- a/ash/system/status_area_widget_unittest.cc
+++ b/ash/system/status_area_widget_unittest.cc
@@ -5,7 +5,7 @@
 #include "ash/system/status_area_widget.h"
 
 #include "ash/focus_cycler.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/ash_switches.h"
@@ -259,12 +259,12 @@
     // These tests only apply to the floating virtual keyboard, as it is the
     // only case where both the virtual keyboard and the shelf are visible.
     const gfx::Rect keyboard_bounds(0, 0, 1, 1);
-    keyboard_controller()->SetContainerType(keyboard::ContainerType::kFloating,
-                                            keyboard_bounds, base::DoNothing());
+    keyboard_ui_controller()->SetContainerType(
+        keyboard::ContainerType::kFloating, keyboard_bounds, base::DoNothing());
   }
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard::KeyboardUIController::Get();
   }
 };
 
@@ -276,7 +276,7 @@
   status->virtual_keyboard_tray_for_testing()->SetVisible(true);
   status->ime_menu_tray()->SetVisible(true);
 
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   // The keyboard should hide when clicked.
@@ -297,7 +297,7 @@
   status->virtual_keyboard_tray_for_testing()->SetVisible(true);
   status->ime_menu_tray()->SetVisible(true);
 
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   // The keyboard should hide when tapped.
@@ -309,8 +309,8 @@
 }
 
 TEST_F(StatusAreaWidgetVirtualKeyboardTest, ClickingHidesVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(false /* locked */);
-  ASSERT_TRUE(keyboard_controller()->IsKeyboardVisible());
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
+  ASSERT_TRUE(keyboard_ui_controller()->IsKeyboardVisible());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
   generator->set_current_screen_location(
@@ -324,7 +324,7 @@
 }
 
 TEST_F(StatusAreaWidgetVirtualKeyboardTest, TappingHidesVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
@@ -339,7 +339,7 @@
 }
 
 TEST_F(StatusAreaWidgetVirtualKeyboardTest, DoesNotHideLockedVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(true /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(true /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   ui::test::EventGenerator* generator = GetEventGenerator();
diff --git a/ash/system/toast/toast_overlay.cc b/ash/system/toast/toast_overlay.cc
index ee85141..bc0aa60c 100644
--- a/ash/system/toast/toast_overlay.cc
+++ b/ash/system/toast/toast_overlay.cc
@@ -4,7 +4,7 @@
 
 #include "ash/system/toast/toast_overlay.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/ash_typography.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_controller.h"
@@ -249,11 +249,11 @@
       overlay_window,
       base::TimeDelta::FromMilliseconds(kSlideAnimationDurationMs));
 
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
 }
 
 ToastOverlay::~ToastOverlay() {
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
   overlay_widget_->Close();
 }
 
diff --git a/ash/system/tray/tray_container.cc b/ash/system/tray/tray_container.cc
index 2400e512..8168df5 100644
--- a/ash/system/tray/tray_container.cc
+++ b/ash/system/tray/tray_container.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/shelf/shelf.h"
 #include "ash/system/tray/tray_constants.h"
 #include "ui/gfx/geometry/insets.h"
@@ -52,7 +52,7 @@
     // When the virtual keyboard is up, any anchored widgets should anchor to
     // the virtual keyboard instead because it will cover the shelf.
     const gfx::Rect occluded_bounds =
-        keyboard::KeyboardController::Get()
+        keyboard::KeyboardUIController::Get()
             ->GetWorkspaceOccludedBoundsInScreen();
     if (!occluded_bounds.IsEmpty())
       return occluded_bounds;
diff --git a/ash/system/virtual_keyboard/virtual_keyboard_tray.cc b/ash/system/virtual_keyboard/virtual_keyboard_tray.cc
index 75306dd..1707ba4 100644
--- a/ash/system/virtual_keyboard/virtual_keyboard_tray.cc
+++ b/ash/system/virtual_keyboard/virtual_keyboard_tray.cc
@@ -7,7 +7,7 @@
 #include <algorithm>
 
 #include "ash/accessibility/accessibility_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shelf/shelf.h"
@@ -39,14 +39,14 @@
   if (Shell::HasInstance()) {
     Shell::Get()->accessibility_controller()->AddObserver(this);
     Shell::Get()->AddShellObserver(this);
-    keyboard::KeyboardController::Get()->AddObserver(this);
+    keyboard::KeyboardUIController::Get()->AddObserver(this);
   }
 }
 
 VirtualKeyboardTray::~VirtualKeyboardTray() {
   // The Shell may not exist in some unit tests.
   if (Shell::HasInstance()) {
-    keyboard::KeyboardController::Get()->RemoveObserver(this);
+    keyboard::KeyboardUIController::Get()->RemoveObserver(this);
     Shell::Get()->RemoveShellObserver(this);
     Shell::Get()->accessibility_controller()->RemoveObserver(this);
   }
@@ -66,7 +66,7 @@
   UserMetricsRecorder::RecordUserClickOnTray(
       LoginMetricsRecorder::TrayClickTarget::kVirtualKeyboardTray);
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
 
   // Keyboard may not always be enabled. https://crbug.com/749989
   if (!keyboard_controller->IsEnabled())
diff --git a/ash/system/virtual_keyboard/virtual_keyboard_tray_unittest.cc b/ash/system/virtual_keyboard/virtual_keyboard_tray_unittest.cc
index 45ed670..279bb18 100644
--- a/ash/system/virtual_keyboard/virtual_keyboard_tray_unittest.cc
+++ b/ash/system/virtual_keyboard/virtual_keyboard_tray_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "ash/system/virtual_keyboard/virtual_keyboard_tray.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -31,8 +31,8 @@
                                             base::nullopt, base::DoNothing());
   }
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_controller() {
+    return keyboard::KeyboardUIController::Get();
   }
 };
 
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc
index 5c53752..f3553310 100644
--- a/ash/test/ash_test_base.cc
+++ b/ash/test/ash_test_base.cc
@@ -468,7 +468,7 @@
   else
     Shell::Get()->keyboard_controller()->ClearEnableFlag(flag);
   // Ensure that observer methods and mojo calls between KeyboardControllerImpl,
-  // keyboard::KeyboardController, and AshKeyboardUI complete.
+  // keyboard::KeyboardUIController*, and AshKeyboardUI complete.
   base::RunLoop().RunUntilIdle();
 }
 
diff --git a/ash/wm/always_on_top_controller_unittest.cc b/ash/wm/always_on_top_controller_unittest.cc
index 26dae2c..28731c5 100644
--- a/ash/wm/always_on_top_controller_unittest.cc
+++ b/ash/wm/always_on_top_controller_unittest.cc
@@ -5,8 +5,8 @@
 #include "ash/wm/always_on_top_controller.h"
 
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/shell_window_ids.h"
@@ -71,7 +71,7 @@
   always_on_top_controller->SetLayoutManagerForTest(base::WrapUnique(manager));
 
   // Show the keyboard.
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
diff --git a/ash/wm/collision_detection/collision_detection_utils.cc b/ash/wm/collision_detection/collision_detection_utils.cc
index 5d0e2eb..39c80ecc 100644
--- a/ash/wm/collision_detection/collision_detection_utils.cc
+++ b/ash/wm/collision_detection/collision_detection_utils.cc
@@ -4,7 +4,7 @@
 
 #include "ash/wm/collision_detection/collision_detection_utils.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
@@ -119,7 +119,7 @@
     }
   }
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsEnabled() &&
       keyboard_controller->GetActiveContainerType() ==
           keyboard::ContainerType::kFloating &&
diff --git a/ash/wm/collision_detection/collision_detection_utils_unittest.cc b/ash/wm/collision_detection/collision_detection_utils_unittest.cc
index 4e4564b..590bab6 100644
--- a/ash/wm/collision_detection/collision_detection_utils_unittest.cc
+++ b/ash/wm/collision_detection/collision_detection_utils_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "ash/wm/collision_detection/collision_detection_utils.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/root_window_controller.h"
@@ -138,7 +138,7 @@
 
 TEST_P(CollisionDetectionUtilsDisplayTest,
        MovementAreaIncludesKeyboardIfKeyboardIsShown) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboardInDisplay(GetDisplay());
   ASSERT_TRUE(keyboard::WaitUntilShown());
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
@@ -220,7 +220,7 @@
        AvoidObstaclesAvoidsFloatingKeyboard) {
   auto display = GetDisplay();
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->SetContainerType(keyboard::ContainerType::kFloating,
                                         base::nullopt, base::DoNothing());
   keyboard_controller->ShowKeyboardInDisplay(display);
@@ -297,7 +297,7 @@
 TEST_P(CollisionDetectionUtilsDisplayTest, GetRestingPositionAvoidsKeyboard) {
   auto display = GetDisplay();
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboardInDisplay(display);
   ASSERT_TRUE(keyboard::WaitUntilShown());
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
diff --git a/ash/wm/lock_action_handler_layout_manager_unittest.cc b/ash/wm/lock_action_handler_layout_manager_unittest.cc
index 785c871f..b71f09a 100644
--- a/ash/wm/lock_action_handler_layout_manager_unittest.cc
+++ b/ash/wm/lock_action_handler_layout_manager_unittest.cc
@@ -8,8 +8,8 @@
 #include <utility>
 
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/lock_screen_action/lock_screen_action_background_controller.h"
@@ -119,7 +119,7 @@
 
   // Show or hide the keyboard.
   void ShowKeyboard(bool show) {
-    auto* keyboard = keyboard::KeyboardController::Get();
+    auto* keyboard = keyboard::KeyboardUIController::Get();
     ASSERT_TRUE(keyboard->IsEnabled());
     if (show == keyboard->IsKeyboardVisible())
       return;
@@ -303,7 +303,7 @@
   ShowKeyboard(true);
 
   gfx::Rect keyboard_bounds =
-      keyboard::KeyboardController::Get()->GetVisualBoundsInScreen();
+      keyboard::KeyboardUIController::Get()->GetVisualBoundsInScreen();
   // Sanity check that the keyboard intersects with original window bounds - if
   // this is not true, the window bounds would remain unchanged.
   ASSERT_TRUE(keyboard_bounds.Intersects(initial_bounds));
diff --git a/ash/wm/lock_layout_manager.cc b/ash/wm/lock_layout_manager.cc
index 293b7a3d..5312cbe 100644
--- a/ash/wm/lock_layout_manager.cc
+++ b/ash/wm/lock_layout_manager.cc
@@ -4,7 +4,7 @@
 
 #include "ash/wm/lock_layout_manager.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
 #include "ash/wm/lock_window_state.h"
@@ -23,12 +23,12 @@
       shelf_observer_(this) {
   Shell::Get()->AddShellObserver(this);
   root_window_->AddObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
   shelf_observer_.Add(shelf);
 }
 
 LockLayoutManager::~LockLayoutManager() {
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
 
   if (root_window_)
     root_window_->RemoveObserver(this);
@@ -58,9 +58,9 @@
   // Disable virtual keyboard overscroll because it interferes with scrolling
   // login/lock content. See crbug.com/363635.
   keyboard::KeyboardConfig config =
-      keyboard::KeyboardController::Get()->keyboard_config();
+      keyboard::KeyboardUIController::Get()->keyboard_config();
   config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDisabled;
-  keyboard::KeyboardController::Get()->UpdateKeyboardConfig(config);
+  keyboard::KeyboardUIController::Get()->UpdateKeyboardConfig(config);
 }
 
 void LockLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
@@ -69,9 +69,9 @@
 
 void LockLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
   keyboard::KeyboardConfig config =
-      keyboard::KeyboardController::Get()->keyboard_config();
+      keyboard::KeyboardUIController::Get()->keyboard_config();
   config.overscroll_behavior = keyboard::KeyboardOverscrollBehavior::kDefault;
-  keyboard::KeyboardController::Get()->UpdateKeyboardConfig(config);
+  keyboard::KeyboardUIController::Get()->UpdateKeyboardConfig(config);
 }
 
 void LockLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
diff --git a/ash/wm/lock_layout_manager.h b/ash/wm/lock_layout_manager.h
index 011ed60..f975dbd 100644
--- a/ash/wm/lock_layout_manager.h
+++ b/ash/wm/lock_layout_manager.h
@@ -6,7 +6,7 @@
 #define ASH_WM_LOCK_LAYOUT_MANAGER_H_
 
 #include "ash/ash_export.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_controller_observer.h"
 #include "ash/shelf/shelf_observer.h"
 #include "ash/shell_observer.h"
diff --git a/ash/wm/lock_layout_manager_unittest.cc b/ash/wm/lock_layout_manager_unittest.cc
index 3ac0f9f9..69e2884 100644
--- a/ash/wm/lock_layout_manager_unittest.cc
+++ b/ash/wm/lock_layout_manager_unittest.cc
@@ -2,8 +2,8 @@
 // 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_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -79,7 +79,7 @@
 
   // Show or hide the keyboard.
   void ShowKeyboard(bool show) {
-    auto* keyboard = keyboard::KeyboardController::Get();
+    auto* keyboard = keyboard::KeyboardUIController::Get();
     ASSERT_TRUE(keyboard->IsEnabled());
     if (show == keyboard->IsKeyboardVisible())
       return;
@@ -96,9 +96,9 @@
 
   void SetKeyboardOverscrollBehavior(
       keyboard::KeyboardOverscrollBehavior overscroll_behavior) {
-    auto config = keyboard::KeyboardController::Get()->keyboard_config();
+    auto config = keyboard::KeyboardUIController::Get()->keyboard_config();
     config.overscroll_behavior = overscroll_behavior;
-    keyboard::KeyboardController::Get()->UpdateKeyboardConfig(config);
+    keyboard::KeyboardUIController::Get()->UpdateKeyboardConfig(config);
   }
 };
 
@@ -229,7 +229,8 @@
 
   // When virtual keyboard overscroll is enabled keyboard bounds should not
   // affect window bounds.
-  keyboard::KeyboardController* keyboard = keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard =
+      keyboard::KeyboardUIController::Get();
   SetKeyboardOverscrollBehavior(keyboard::KeyboardOverscrollBehavior::kEnabled);
   ShowKeyboard(true);
   EXPECT_EQ(screen_bounds.ToString(), window->GetBoundsInScreen().ToString());
diff --git a/ash/wm/lock_window_state.cc b/ash/wm/lock_window_state.cc
index e827eb9f..5a2e7d7 100644
--- a/ash/wm/lock_window_state.cc
+++ b/ash/wm/lock_window_state.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/window_animation_types.h"
 #include "ash/screen_util.h"
 #include "ash/shelf/shelf.h"
@@ -183,7 +183,7 @@
   if (exclude_shelf_)
     return screen_util::GetDisplayWorkAreaBoundsInParentForLockScreen(window);
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   const int keyboard_height =
       keyboard_controller->IsEnabled()
           ? keyboard_controller->GetKeyboardLockScreenOffsetBounds().height()
diff --git a/ash/wm/overview/overview_controller.cc b/ash/wm/overview/overview_controller.cc
index 677dcb4..837b240 100644
--- a/ash/wm/overview/overview_controller.cc
+++ b/ash/wm/overview/overview_controller.cc
@@ -8,7 +8,7 @@
 #include <utility>
 
 #include "ash/app_list/app_list_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/window_properties.h"
 #include "ash/root_window_controller.h"
 #include "ash/scoped_animation_disabler.h"
@@ -539,7 +539,7 @@
   // Hide the virtual keyboard as it obstructs the overview mode.
   // Don't need to hide if it's the a11y keyboard, as overview mode
   // can accept text input and it resizes correctly with the a11y keyboard.
-  keyboard::KeyboardController::Get()->HideKeyboardImplicitlyByUser();
+  keyboard::KeyboardUIController::Get()->HideKeyboardImplicitlyByUser();
 
   auto windows =
       Shell::Get()->mru_window_tracker()->BuildMruWindowList(kActiveDesk);
diff --git a/ash/wm/overview/overview_controller_unittest.cc b/ash/wm/overview/overview_controller_unittest.cc
index df9634d..4d47db88 100644
--- a/ash/wm/overview/overview_controller_unittest.cc
+++ b/ash/wm/overview/overview_controller_unittest.cc
@@ -5,7 +5,7 @@
 #include "ash/wm/overview/overview_controller.h"
 
 #include "ash/app_list/test/app_list_test_helper.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -388,20 +388,20 @@
     ASSERT_TRUE(keyboard::IsKeyboardEnabled());
     keyboard::test::WaitUntilLoaded();
 
-    keyboard_controller()->GetKeyboardWindow()->SetBounds(
+    keyboard_ui_controller()->GetKeyboardWindow()->SetBounds(
         keyboard::KeyboardBoundsFromRootBounds(
             Shell::GetPrimaryRootWindow()->bounds(), 100));
     // Wait for keyboard window to load.
     base::RunLoop().RunUntilIdle();
   }
 
-  keyboard::KeyboardController* keyboard_controller() {
-    return keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_ui_controller() {
+    return keyboard::KeyboardUIController::Get();
   }
 };
 
 TEST_F(OverviewVirtualKeyboardTest, ToggleOverviewModeHidesVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(false /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(false /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   Shell::Get()->overview_controller()->StartOverview();
@@ -412,7 +412,7 @@
 
 TEST_F(OverviewVirtualKeyboardTest,
        ToggleOverviewModeDoesNotHideLockedVirtualKeyboard) {
-  keyboard_controller()->ShowKeyboard(true /* locked */);
+  keyboard_ui_controller()->ShowKeyboard(true /* locked */);
   ASSERT_TRUE(keyboard::WaitUntilShown());
 
   Shell::Get()->overview_controller()->StartOverview();
diff --git a/ash/wm/pip/pip_positioner.cc b/ash/wm/pip/pip_positioner.cc
index 16b4870a3..c5dfa1d5 100644
--- a/ash/wm/pip/pip_positioner.cc
+++ b/ash/wm/pip/pip_positioner.cc
@@ -6,7 +6,7 @@
 
 #include <algorithm>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_controller.h"
 #include "ash/shelf/shelf.h"
diff --git a/ash/wm/pip/pip_positioner_unittest.cc b/ash/wm/pip/pip_positioner_unittest.cc
index 7df1911..f02ee4f2 100644
--- a/ash/wm/pip/pip_positioner_unittest.cc
+++ b/ash/wm/pip/pip_positioner_unittest.cc
@@ -9,7 +9,7 @@
 #include <tuple>
 #include <vector>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/root_window_controller.h"
diff --git a/ash/wm/pip/pip_unittest.cc b/ash/wm/pip/pip_unittest.cc
index 82df7d88..8ff56da 100644
--- a/ash/wm/pip/pip_unittest.cc
+++ b/ash/wm/pip/pip_unittest.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/root_window_controller.h"
@@ -142,7 +142,7 @@
   window_state->OnWMEvent(&enter_pip);
   window->Show();
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(/*lock=*/true);
   ASSERT_TRUE(keyboard::WaitUntilShown());
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
@@ -158,7 +158,7 @@
   UpdateDisplay("400x400");
 
   // Place a keyboard window at the initial position of a PIP window.
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->ShowKeyboard(/*lock=*/true);
   ASSERT_TRUE(keyboard::WaitUntilShown());
   aura::Window* keyboard_window = keyboard_controller->GetKeyboardWindow();
diff --git a/ash/wm/pip/pip_window_resizer_unittest.cc b/ash/wm/pip/pip_window_resizer_unittest.cc
index e02e411..28165922 100644
--- a/ash/wm/pip/pip_window_resizer_unittest.cc
+++ b/ash/wm/pip/pip_window_resizer_unittest.cc
@@ -8,7 +8,7 @@
 #include <tuple>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/metrics/pip_uma.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
@@ -504,7 +504,7 @@
 TEST_P(PipWindowResizerTest, PipWindowFlungAvoidsFloatingKeyboard) {
   PreparePipWindow(gfx::Rect(200, 200, 75, 75));
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   keyboard_controller->SetContainerType(keyboard::ContainerType::kFloating,
                                         gfx::Rect(0, 0, 1, 1),
                                         base::DoNothing());
diff --git a/ash/wm/system_modal_container_layout_manager.cc b/ash/wm/system_modal_container_layout_manager.cc
index fd6716a..1c735c5 100644
--- a/ash/wm/system_modal_container_layout_manager.cc
+++ b/ash/wm/system_modal_container_layout_manager.cc
@@ -7,7 +7,7 @@
 #include <cmath>
 #include <memory>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_controller.h"
 #include "ash/session/session_controller_impl.h"
@@ -48,7 +48,7 @@
     : container_(container) {}
 
 SystemModalContainerLayoutManager::~SystemModalContainerLayoutManager() {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->HasObserver(this))
     keyboard_controller->RemoveObserver(this);
 }
@@ -160,8 +160,8 @@
     window_dimmer_->window()->SetName(
         "SystemModalContainerLayoutManager.ModalBackground");
     // The keyboard isn't always enabled.
-    if (keyboard::KeyboardController::Get()->IsEnabled())
-      keyboard::KeyboardController::Get()->AddObserver(this);
+    if (keyboard::KeyboardUIController::Get()->IsEnabled())
+      keyboard::KeyboardUIController::Get()->AddObserver(this);
   }
   window_dimmer_->window()->Show();
 }
@@ -170,7 +170,7 @@
   if (!window_dimmer_)
     return;
 
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   if (keyboard_controller->HasObserver(this))
     keyboard_controller->RemoveObserver(this);
   window_dimmer_.reset();
@@ -255,8 +255,8 @@
   // windows. This way we avoid flashing lines upon resize animation and if the
   // keyboard will not fill left to right, the background is still covered.
   gfx::Rect valid_bounds = container_->bounds();
-  keyboard::KeyboardController* keyboard_controller =
-      keyboard::KeyboardController::Get();
+  keyboard::KeyboardUIController* keyboard_controller =
+      keyboard::KeyboardUIController::Get();
   if (keyboard_controller->IsEnabled()) {
     gfx::Rect bounds =
         keyboard_controller->GetWorkspaceOccludedBoundsInScreen();
diff --git a/ash/wm/system_modal_container_layout_manager_unittest.cc b/ash/wm/system_modal_container_layout_manager_unittest.cc
index dfd0b71..6ae659fa 100644
--- a/ash/wm/system_modal_container_layout_manager_unittest.cc
+++ b/ash/wm/system_modal_container_layout_manager_unittest.cc
@@ -7,8 +7,8 @@
 #include <memory>
 
 #include "ash/keyboard/keyboard_controller_impl.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/shell_window_ids.h"
@@ -169,7 +169,7 @@
 
   // Show or hide the keyboard.
   void ShowKeyboard(bool show) {
-    auto* keyboard = keyboard::KeyboardController::Get();
+    auto* keyboard = keyboard::KeyboardUIController::Get();
     ASSERT_TRUE(keyboard->IsEnabled());
     if (show == keyboard->IsKeyboardVisible())
       return;
diff --git a/ash/wm/work_area_insets.cc b/ash/wm/work_area_insets.cc
index f8f567f..ead62b1 100644
--- a/ash/wm/work_area_insets.cc
+++ b/ash/wm/work_area_insets.cc
@@ -4,7 +4,7 @@
 
 #include "ash/wm/work_area_insets.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/root_window_controller.h"
 #include "ash/screen_util.h"
 #include "ash/session/session_controller_impl.h"
@@ -57,11 +57,11 @@
 
 WorkAreaInsets::WorkAreaInsets(RootWindowController* root_window_controller)
     : root_window_controller_(root_window_controller) {
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
 }
 
 WorkAreaInsets::~WorkAreaInsets() {
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
 }
 
 gfx::Insets WorkAreaInsets::GetAccessibilityInsets() const {
diff --git a/ash/wm/workspace/workspace_layout_manager.cc b/ash/wm/workspace/workspace_layout_manager.cc
index 724f2e4..8d9c7c7 100644
--- a/ash/wm/workspace/workspace_layout_manager.cc
+++ b/ash/wm/workspace/workspace_layout_manager.cc
@@ -9,7 +9,7 @@
 
 #include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/autoclick/autoclick_controller.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/keyboard/keyboard_controller_observer.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/public/cpp/window_properties.h"
@@ -107,7 +107,7 @@
   root_window_->AddObserver(this);
   display::Screen::GetScreen()->AddObserver(this);
   backdrop_controller_ = std::make_unique<BackdropController>(window_);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
   settings_bubble_container_ = window->GetRootWindow()->GetChildById(
       kShellWindowId_SettingBubbleContainer);
   autoclick_bubble_container_ =
@@ -131,7 +131,7 @@
   display::Screen::GetScreen()->RemoveObserver(this);
   Shell::Get()->activation_client()->RemoveObserver(this);
   Shell::Get()->RemoveShellObserver(this);
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
 }
 
 void WorkspaceLayoutManager::SetBackdropDelegate(
@@ -217,7 +217,7 @@
 void WorkspaceLayoutManager::OnKeyboardVisibleBoundsChanged(
     const gfx::Rect& new_bounds) {
   auto* keyboard_window =
-      keyboard::KeyboardController::Get()->GetKeyboardWindow();
+      keyboard::KeyboardUIController::Get()->GetKeyboardWindow();
   if (keyboard_window && keyboard_window->GetRootWindow() == root_window_)
     NotifySystemUiAreaChanged();
 }
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc
index a2fe7535..0d34111 100644
--- a/ash/wm/workspace/workspace_layout_manager_unittest.cc
+++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -11,8 +11,8 @@
 #include "ash/accessibility/test_accessibility_controller_client.h"
 #include "ash/app_list/test/app_list_test_helper.h"
 #include "ash/frame/non_client_frame_view_ash.h"
-#include "ash/keyboard/ui/keyboard_controller.h"
 #include "ash/keyboard/ui/keyboard_ui.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
@@ -1748,7 +1748,7 @@
        IgnoreWorkAreaChangeinNonStickyMode) {
   keyboard::SetAccessibilityKeyboardEnabled(true);
   InitKeyboardBounds();
-  auto* kb_controller = keyboard::KeyboardController::Get();
+  auto* kb_controller = keyboard::KeyboardUIController::Get();
 
   gfx::Rect work_area(
       display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
@@ -1945,7 +1945,7 @@
 // change event.
 TEST_F(WorkspaceLayoutManagerSystemUiAreaTest,
        SystemUiAreaChangeOnVirtualKeyboardVisibilityChange) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   EXPECT_EQ(0, test_state()->num_system_ui_area_changes());
 
   keyboard_controller->ShowKeyboard(/*lock=*/true);
@@ -1961,7 +1961,7 @@
 // change event.
 TEST_F(WorkspaceLayoutManagerSystemUiAreaTest,
        SystemUiAreaChangeOnVirtualKeyboardSizeChange) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   EXPECT_EQ(0, test_state()->num_system_ui_area_changes());
 
   keyboard_controller->ShowKeyboard(/*lock=*/true);
@@ -1979,7 +1979,7 @@
 // change event.
 TEST_F(WorkspaceLayoutManagerSystemUiAreaTest,
        SystemUiAreaChangeOnVirtualKeyboardContainerTypeChange) {
-  auto* keyboard_controller = keyboard::KeyboardController::Get();
+  auto* keyboard_controller = keyboard::KeyboardUIController::Get();
   EXPECT_EQ(0, test_state()->num_system_ui_area_changes());
 
   keyboard_controller->ShowKeyboard(/*lock=*/true);
diff --git a/build/linux/sysroot_scripts/sysroot-creator.sh b/build/linux/sysroot_scripts/sysroot-creator.sh
index fa15adef..6a0914c 100644
--- a/build/linux/sysroot_scripts/sysroot-creator.sh
+++ b/build/linux/sysroot_scripts/sysroot-creator.sh
@@ -94,6 +94,19 @@
 }
 
 
+DownloadOrCopyNonUniqueFilename() {
+  # Use this function instead of DownloadOrCopy when the url uniquely
+  # identifies the file, but the filename (excluding the directory)
+  # does not.
+  local url="$1"
+  local dest="$2"
+
+  local hash="$(echo "$url" | sha256sum | cut -d' ' -f1)"
+
+  DownloadOrCopy "${url}" "${dest}.${hash}"
+  cp "${dest}.${hash}" "$dest"
+}
+
 DownloadOrCopy() {
   if [ -f "$2" ] ; then
     echo "$2 already in place"
@@ -216,7 +229,7 @@
   local package_file_arch="${repo_name}/binary-${arch}/Packages.${PACKAGES_EXT}"
   local package_list_arch="${repo_basedir}/${package_file_arch}"
 
-  DownloadOrCopy "${package_list_arch}" "${package_list}"
+  DownloadOrCopyNonUniqueFilename "${package_list_arch}" "${package_list}"
   VerifyPackageListing "${package_file_arch}" "${package_list}" ${repo} ${dist}
   ExtractPackageXz "${package_list}" "${TMP_PACKAGE_LIST}" ${repo}
 }
@@ -784,8 +797,8 @@
 
   CheckForDebianGPGKeyring
 
-  DownloadOrCopy ${release_list} ${release_file}
-  DownloadOrCopy ${release_list_gpg} ${release_file_gpg}
+  DownloadOrCopyNonUniqueFilename ${release_list} ${release_file}
+  DownloadOrCopyNonUniqueFilename ${release_list_gpg} ${release_file_gpg}
   echo "Verifying: ${release_file} with ${release_file_gpg}"
   set -x
   gpgv --keyring "${KEYRING_FILE}" "${release_file_gpg}" "${release_file}"
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h
index 67a79bd..5899d673 100644
--- a/cc/input/input_handler.h
+++ b/cc/input/input_handler.h
@@ -206,9 +206,10 @@
   virtual void RequestUpdateForSynchronousInputHandler() = 0;
 
   // Called when the root scroll offset has been changed in the synchronous
-  // input handler by the application (outside of input event handling).
+  // input handler by the application (outside of input event handling). Offset
+  // is expected in "content/page coordinates".
   virtual void SetSynchronousInputHandlerRootScrollOffset(
-      const gfx::ScrollOffset& root_offset) = 0;
+      const gfx::ScrollOffset& root_content_offset) = 0;
 
   virtual void PinchGestureBegin() = 0;
   virtual void PinchGestureUpdate(float magnify_delta,
diff --git a/cc/layers/viewport.cc b/cc/layers/viewport.cc
index c8985f2..8bbe7293b 100644
--- a/cc/layers/viewport.cc
+++ b/cc/layers/viewport.cc
@@ -34,7 +34,7 @@
                          host_impl_->active_tree());
 }
 
-Viewport::ScrollResult Viewport::ScrollBy(const gfx::Vector2dF& delta,
+Viewport::ScrollResult Viewport::ScrollBy(const gfx::Vector2dF& physical_delta,
                                           const gfx::Point& viewport_point,
                                           bool is_direct_manipulation,
                                           bool affect_browser_controls,
@@ -42,28 +42,30 @@
   if (!OuterScrollNode())
     return ScrollResult();
 
-  gfx::Vector2dF content_delta = delta;
+  gfx::Vector2dF scroll_node_delta = physical_delta;
 
-  if (affect_browser_controls && ShouldBrowserControlsConsumeScroll(delta))
-    content_delta -= ScrollBrowserControls(delta);
+  if (affect_browser_controls &&
+      ShouldBrowserControlsConsumeScroll(physical_delta))
+    scroll_node_delta -= ScrollBrowserControls(physical_delta);
 
-  gfx::Vector2dF pending_content_delta = content_delta;
+  gfx::Vector2dF pending_scroll_node_delta = scroll_node_delta;
 
   // Attempt to scroll inner viewport first.
-  pending_content_delta -= host_impl_->ScrollSingleNode(
-      InnerScrollNode(), pending_content_delta, viewport_point,
+  pending_scroll_node_delta -= host_impl_->ScrollSingleNode(
+      InnerScrollNode(), pending_scroll_node_delta, viewport_point,
       is_direct_manipulation, &scroll_tree());
 
   // Now attempt to scroll the outer viewport.
   if (scroll_outer_viewport) {
-    pending_content_delta -= host_impl_->ScrollSingleNode(
-        OuterScrollNode(), pending_content_delta, viewport_point,
+    pending_scroll_node_delta -= host_impl_->ScrollSingleNode(
+        OuterScrollNode(), pending_scroll_node_delta, viewport_point,
         is_direct_manipulation, &scroll_tree());
   }
 
   ScrollResult result;
-  result.consumed_delta = delta - AdjustOverscroll(pending_content_delta);
-  result.content_scrolled_delta = content_delta - pending_content_delta;
+  result.consumed_delta =
+      physical_delta - AdjustOverscroll(pending_scroll_node_delta);
+  result.content_scrolled_delta = scroll_node_delta - pending_scroll_node_delta;
   return result;
 }
 
diff --git a/cc/layers/viewport.h b/cc/layers/viewport.h
index b5c00b80..9143b58 100644
--- a/cc/layers/viewport.h
+++ b/cc/layers/viewport.h
@@ -46,10 +46,12 @@
 
   // Scrolls the viewport, applying the unique bubbling between the inner and
   // outer viewport unless the scroll_outer_viewport bit is off. Scrolls can be
-  // consumed by browser controls.
-  ScrollResult ScrollBy(const gfx::Vector2dF& delta,
+  // consumed by browser controls. The delta is in physical pixels, that is, it
+  // will be scaled by the page scale to ensure the content moves
+  // |physical_delta| number of pixels.
+  ScrollResult ScrollBy(const gfx::Vector2dF& physical_delta,
                         const gfx::Point& viewport_point,
-                        bool is_wheel_scroll,
+                        bool is_direct_manipulation,
                         bool affect_browser_controls,
                         bool scroll_outer_viewport);
 
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index d645e1d2..3fb99bd 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -4636,17 +4636,27 @@
   UpdateRootLayerStateForSynchronousInputHandler();
 }
 
-void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset(
-    const gfx::ScrollOffset& root_offset) {
-  TRACE_EVENT2("cc",
-               "LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset",
-               "offset_x", root_offset.x(), "offset_y", root_offset.y());
+static gfx::Vector2dF ContentToPhysical(const gfx::Vector2dF& content_delta,
+                                        float page_scale_factor) {
+  gfx::Vector2dF physical_delta = content_delta;
+  physical_delta.Scale(page_scale_factor);
+  return physical_delta;
+}
 
-  gfx::Vector2dF delta = root_offset.DeltaFrom(viewport()->TotalScrollOffset());
+void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset(
+    const gfx::ScrollOffset& root_content_offset) {
+  TRACE_EVENT2(
+      "cc", "LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset",
+      "offset_x", root_content_offset.x(), "offset_y", root_content_offset.y());
+
+  gfx::Vector2dF physical_delta = ContentToPhysical(
+      root_content_offset.DeltaFrom(viewport()->TotalScrollOffset()),
+      active_tree()->page_scale_factor_for_scroll());
+
   bool changed = !viewport()
-                      ->ScrollBy(delta,
+                      ->ScrollBy(physical_delta,
                                  /*viewport_point=*/gfx::Point(),
-                                 /*is_wheel_scroll=*/false,
+                                 /*is_direct_manipulation=*/false,
                                  /*affect_browser_controls=*/false,
                                  /*scroll_outer_viewport=*/true)
                       .consumed_delta.IsZero();
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 4115da9..ced7d76e 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -258,7 +258,7 @@
   InputHandlerScrollResult ScrollBy(ScrollState* scroll_state) override;
   void RequestUpdateForSynchronousInputHandler() override;
   void SetSynchronousInputHandlerRootScrollOffset(
-      const gfx::ScrollOffset& root_offset) override;
+      const gfx::ScrollOffset& root_content_offset) override;
   void ScrollEnd(ScrollState* scroll_state, bool should_snap = false) override;
 
   InputHandlerPointerResult MouseDown(
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index cc2b82f..27472d2 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -7904,6 +7904,9 @@
   host_impl_->active_tree()->BuildPropertyTreesForTesting();
   DrawFrame();
 
+  // Ensure that the scroll offset is interpreted as a content offset so it
+  // should be unaffected by the page scale factor. See
+  // https://crbug.com/973771.
   float page_scale_factor = 2.f;
   host_impl_->active_tree()->PushPageScaleFromMainThread(
       page_scale_factor, page_scale_factor, page_scale_factor);
@@ -7919,7 +7922,6 @@
     host_impl_->SetSynchronousInputHandlerRootScrollOffset(scroll_offset);
     EXPECT_VECTOR_EQ(gfx::ScrollOffset(),
                      scroll_tree.current_scroll_offset(inner_element_id));
-    scroll_offset.Scale(1.f / page_scale_factor);
     EXPECT_VECTOR_EQ(scroll_offset,
                      scroll_tree.current_scroll_offset(outer_element_id));
     EXPECT_TRUE(did_request_redraw_);
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index ea1b563..d74b657 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -38,6 +38,7 @@
   "junit/src/org/chromium/chrome/browser/compositor/layouts/MockLayoutUpdateHost.java",
   "junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java",
   "junit/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java",
+  "junit/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinatorTest.java",
   "junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContextForTest.java",
   "junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContextTest.java",
   "junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchEntityHeuristicTest.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index d45c593..5c82a2e7 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -81,6 +81,8 @@
   "javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java",
   "javatests/src/org/chromium/chrome/browser/contacts_picker/ContactsPickerDialogTest.java",
   "javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java",
+  "javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuHeaderViewTest.java",
+  "javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuItemViewTest.java",
   "javatests/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUiTest.java",
   "javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java",
   "javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchInternalStateControllerWrapper.java",
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd b/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd
index fd406cf..99044d0 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd
@@ -109,14 +109,14 @@
       <message name="IDS_KEYBOARD_ACCESSORY_SHEET_HIDE" desc="Description for the active icon button that closes an accessory sheet and brings back the keyboard.">
           Show keyboard
       </message>
-      <message name="IDS_IPH_KEYBOARD_ACCESSORY_FILL_ADDRESS" desc="Text in In-Product-Help bubble suggesting to fill an address with Chrome.">
-          Tap to fill address with Chrome
+      <message name="IDS_IPH_KEYBOARD_ACCESSORY_FILL_ADDRESS" desc="Text in In-Product-Help bubble suggesting to fill a physical address with Chrome.">
+          Fill address
       </message>
       <message name="IDS_IPH_KEYBOARD_ACCESSORY_FILL_PASSWORD" desc="Text in In-Product-Help bubble suggesting to fill a password with Chrome.">
-          Tap to fill password with Chrome
+          Fill password
       </message>
       <message name="IDS_IPH_KEYBOARD_ACCESSORY_FILL_PAYMENT" desc="Text in In-Product-Help bubble suggesting to fill a credit card with Chrome.">
-          Tap to fill credit card with Chrome
+          Fill payment method
       </message>
       <message name="IDS_PASSWORD_GENERATION_ACCESSORY_BUTTON" desc="Text for the button used to generate a password.">
           Suggest strong password
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
index 3d7dbb5..0074321 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
@@ -66,7 +66,7 @@
     @Override
     public void initializeWithNative(ChromeActivity activity,
             BottomControlsCoordinator.BottomControlsVisibilityController visibilityController) {
-        if (ChromeFeatureList.isInitialized()) {
+        if (UmaSessionStats.isMetricsServiceAvailable()) {
             UmaSessionStats.registerSyntheticFieldTrial(
                     ChromeFeatureList.TAB_GROUPS_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
                     "Downloaded_Enabled");
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
index da201e71..b081112 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -438,17 +438,11 @@
 
                 @Override
                 public void didMoveTabOutOfGroup(Tab movedTab, int prevFilterIndex) {
+                    assert !(mActionsOnAllRelatedTabs && mTabGridDialogHandler != null);
+
                     TabGroupModelFilter filter =
                             (TabGroupModelFilter) mTabModelSelector.getTabModelFilterProvider()
                                     .getCurrentTabModelFilter();
-                    if (mTabGridDialogHandler != null) {
-                        int curIndex = mModel.indexFromId(movedTab.getId());
-                        if (!isValidMovePosition(curIndex)) return;
-                        mModel.removeAt(curIndex);
-                        mTabGridDialogHandler.updateDialogContent(
-                                filter.getTabAt(prevFilterIndex).getId());
-                        return;
-                    }
                     if (mActionsOnAllRelatedTabs) {
                         Tab currentSelectedTab = mTabModelSelector.getCurrentTab();
                         int index = TabModelUtils.getTabIndexById(
@@ -461,6 +455,14 @@
                                 == filter.getTabAt(prevFilterIndex).getId();
                         updateTab(prevFilterIndex, filter.getTabAt(prevFilterIndex), isSelected,
                                 true, false);
+                    } else {
+                        int curIndex = mModel.indexFromId(movedTab.getId());
+                        if (!isValidMovePosition(curIndex)) return;
+                        mModel.removeAt(curIndex);
+                        if (mTabGridDialogHandler != null) {
+                            mTabGridDialogHandler.updateDialogContent(
+                                    filter.getTabAt(prevFilterIndex).getId());
+                        }
                     }
                 }
 
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java
index dae9029..5ea8ef4 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementDelegateImpl.java
@@ -31,7 +31,7 @@
 
     @Override
     public GridTabSwitcher createGridTabSwitcher(ChromeActivity activity) {
-        if (ChromeFeatureList.isInitialized()) {
+        if (UmaSessionStats.isMetricsServiceAvailable()) {
             UmaSessionStats.registerSyntheticFieldTrial(
                     ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
                     "Downloaded_Enabled");
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java
index 54a50d3..e84319b 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabManagementModuleProvider.java
@@ -21,7 +21,7 @@
     public static @Nullable TabManagementDelegate getDelegate() {
         if (!TabManagementModule.isInstalled()) {
             TabManagementModule.installDeferred();
-            if (ChromeFeatureList.isInitialized()) {
+            if (UmaSessionStats.isMetricsServiceAvailable()) {
                 UmaSessionStats.registerSyntheticFieldTrial(
                         ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
                         "DownloadAttempted");
@@ -31,7 +31,7 @@
             }
             return null;
         }
-        if (ChromeFeatureList.isInitialized()) {
+        if (UmaSessionStats.isMetricsServiceAvailable()) {
             if (!ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID)) {
                 UmaSessionStats.registerSyntheticFieldTrial(
                         ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutPerfTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutPerfTest.java
index ce31ced9..3d39ab9 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutPerfTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutPerfTest.java
@@ -8,13 +8,16 @@
 import static org.junit.Assert.assertTrue;
 
 import static org.chromium.base.test.util.CallbackHelper.WAIT_TIMEOUT_SECONDS;
-import static org.chromium.chrome.browser.tabmodel.TabSelectionType.FROM_USER;
 import static org.chromium.chrome.browser.util.UrlConstants.NTP_URL;
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL;
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_POLLING_INTERVAL;
 
 import android.support.annotation.Nullable;
 import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.Espresso;
+import android.support.test.espresso.action.ViewActions;
+import android.support.test.espresso.contrib.RecyclerViewActions;
+import android.support.test.espresso.matcher.ViewMatchers;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.MediumTest;
 
@@ -31,6 +34,7 @@
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.compositor.animation.CompositorAnimator;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
+import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.tab_ui.R;
@@ -45,6 +49,7 @@
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.ui.test.util.UiRestriction;
 
+import java.io.File;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -187,6 +192,12 @@
             MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(),
                     mActivityTestRule.getActivity(), R.id.new_tab_menu_id);
             if (url != null) mActivityTestRule.loadUrl(url);
+
+            Tab previousTab = mActivityTestRule.getActivity()
+                                      .getTabModelSelector()
+                                      .getCurrentModel()
+                                      .getTabAt(i);
+            checkThumbnailsExist(previousTab);
         }
         ChromeTabUtils.waitForTabPageLoaded(mActivityTestRule.getActivity().getActivityTab(), null,
                 null, WAIT_TIMEOUT_SECONDS * 10);
@@ -227,8 +238,7 @@
             mGtsLayout.setPerfListenerForTesting(null);
             // Make sure the fading animation is done.
             Thread.sleep(1000);
-            TestThreadUtils.runOnUiThreadBlocking(
-                    () -> gts.getGridController().hideOverview(false));
+            TestThreadUtils.runOnUiThreadBlocking(() -> gts.getGridController().hideOverview(true));
             Thread.sleep(1000);
             CriteriaHelper.pollInstrumentationThread(
                     () -> !mActivityTestRule.getActivity().getLayoutManager().overviewVisible(),
@@ -292,7 +302,7 @@
         for (int i = 0; i < mRepeat; i++) {
             mGtsLayout.setPerfListenerForTesting(null);
             TestThreadUtils.runOnUiThreadBlocking(
-                    () -> mActivityTestRule.getActivity().getLayoutManager().showOverview(false));
+                    () -> mActivityTestRule.getActivity().getLayoutManager().showOverview(true));
             assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible());
             Thread.sleep(1000);
 
@@ -307,10 +317,9 @@
 
             mGtsLayout.setPerfListenerForTesting(collector);
             Thread.sleep(mWaitingTime);
-            TestThreadUtils.runOnUiThreadBlocking(
-                    ()
-                            -> mActivityTestRule.getActivity().getCurrentTabModel().setIndex(
-                                    targetIndex, FROM_USER));
+            Espresso.onView(ViewMatchers.withId(org.chromium.chrome.tab_ui.R.id.tab_list_view))
+                    .perform(RecyclerViewActions.actionOnItemAtPosition(
+                            targetIndex, ViewActions.click()));
 
             final int expectedSize = i + 1;
             CriteriaHelper.pollInstrumentationThread(() -> frameRates.size() == expectedSize,
@@ -326,6 +335,18 @@
                 median(frameInterval));
     }
 
+    private void checkThumbnailsExist(Tab tab) {
+        File etc1File = TabContentManager.getTabThumbnailFileEtc1(tab);
+        CriteriaHelper.pollInstrumentationThread(etc1File::exists,
+                "The thumbnail " + etc1File.getName() + " is not found",
+                DEFAULT_MAX_TIME_TO_POLL * 10, DEFAULT_POLLING_INTERVAL);
+
+        File jpegFile = TabContentManager.getTabThumbnailFileJpeg(tab);
+        CriteriaHelper.pollInstrumentationThread(jpegFile::exists,
+                "The thumbnail " + jpegFile.getName() + " is not found",
+                DEFAULT_MAX_TIME_TO_POLL * 10, DEFAULT_POLLING_INTERVAL);
+    }
+
     private float median(List<Float> list) {
         float[] array = new float[list.size()];
         for (int i = 0; i < array.length; i++) {
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutTest.java
index 20c35f4..7d29c39e 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherLayoutTest.java
@@ -8,7 +8,6 @@
 import static org.junit.Assert.assertTrue;
 
 import static org.chromium.base.test.util.CallbackHelper.WAIT_TIMEOUT_SECONDS;
-import static org.chromium.chrome.browser.tabmodel.TabSelectionType.FROM_USER;
 import static org.chromium.chrome.browser.util.UrlConstants.NTP_URL;
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL;
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_POLLING_INTERVAL;
@@ -16,6 +15,10 @@
 import android.graphics.Bitmap;
 import android.support.annotation.Nullable;
 import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.Espresso;
+import android.support.test.espresso.action.ViewActions;
+import android.support.test.espresso.contrib.RecyclerViewActions;
+import android.support.test.espresso.matcher.ViewMatchers;
 import android.support.test.filters.MediumTest;
 import android.text.TextUtils;
 
@@ -93,6 +96,9 @@
         GridTabSwitcherCoordinator coordinator =
                 (GridTabSwitcherCoordinator) mGtsLayout.getGridTabSwitcherForTesting();
         coordinator.setBitmapCallbackForTesting(mBitmapListener);
+
+        mActivityTestRule.getActivity().getTabContentManager().setCaptureMinRequestTimeForTesting(
+                0);
     }
 
     @Test
@@ -189,7 +195,10 @@
                                       .getTabModelSelector()
                                       .getCurrentModel()
                                       .getTabAt(i);
-            checkThumbnailsExist(previousTab);
+
+            // TODO(wychen): missing thumbnail should not happen in web tabs, either, but checking
+            //               it makes the tests too flaky.
+            if (previousTab.isNativePage()) checkThumbnailsExist(previousTab);
         }
         ChromeTabUtils.waitForTabPageLoaded(mActivityTestRule.getActivity().getActivityTab(), null,
                 null, WAIT_TIMEOUT_SECONDS * 10);
@@ -204,36 +213,7 @@
 
         GridTabSwitcher gts = mGtsLayout.getGridTabSwitcherForTesting();
         for (int i = 0; i < mRepeat; i++) {
-            Tab currentTab = mActivityTestRule.getActivity().getTabModelSelector().getCurrentTab();
-            boolean checkThumbnail = !currentTab.isNativePage();
-
-            if (checkThumbnail)
-                mActivityTestRule.getActivity().getTabContentManager().removeTabThumbnail(
-                        currentTab.getId());
-
-            int count = getCaptureCount();
-            waitForCaptureRateControl();
-            TestThreadUtils.runOnUiThreadBlocking(
-                    () -> mActivityTestRule.getActivity().getLayoutManager().showOverview(true));
-            assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible());
-
-            // Make sure the fading animation is done.
-            int delta;
-            if (TextUtils.equals(mActivityTestRule.getActivity()
-                                         .getCurrentWebContents()
-                                         .getLastCommittedUrl(),
-                        NTP_URL)) {
-                delta = 0;
-            } else {
-                delta = 1;
-                // TODO(wychen): refactor areAnimatorsEnabled() to a util class.
-                if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
-                        && TabGridContainerViewBinderTest.areAnimatorsEnabled()) {
-                    delta += 1;
-                }
-            }
-            CriteriaHelper.pollUiThread(Criteria.equals(delta, () -> getCaptureCount() - count));
-            if (checkThumbnail) checkThumbnailsExist(currentTab);
+            enterGTS();
 
             // clang-format off
             TestThreadUtils.runOnUiThreadBlocking(
@@ -244,19 +224,7 @@
                     DEFAULT_POLLING_INTERVAL);
             // clang-format on
         }
-        int expected;
-        if (TextUtils.equals(
-                    mActivityTestRule.getActivity().getCurrentWebContents().getLastCommittedUrl(),
-                    NTP_URL)) {
-            expected = 0;
-        } else {
-            expected = mRepeat;
-            if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
-                    && TabGridContainerViewBinderTest.areAnimatorsEnabled()) {
-                expected += mRepeat;
-            }
-        }
-        Assert.assertEquals(expected, getCaptureCount() - initCount);
+        checkFinalCaptureCount(false, initCount);
     }
 
     @Test
@@ -315,35 +283,9 @@
         final int initCount = getCaptureCount();
 
         for (int i = 0; i < mRepeat; i++) {
-            Tab currentTab = mActivityTestRule.getActivity().getTabModelSelector().getCurrentTab();
-            boolean checkThumbnail = !currentTab.isNativePage();
+            enterGTS();
 
-            if (checkThumbnail)
-                mActivityTestRule.getActivity().getTabContentManager().removeTabThumbnail(
-                        currentTab.getId());
-
-            int count = getCaptureCount();
-            waitForCaptureRateControl();
-            TestThreadUtils.runOnUiThreadBlocking(
-                    () -> mActivityTestRule.getActivity().getLayoutManager().showOverview(true));
-            assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible());
-            int delta;
-            if (TextUtils.equals(mActivityTestRule.getActivity()
-                                         .getCurrentWebContents()
-                                         .getLastCommittedUrl(),
-                        NTP_URL)) {
-                delta = 0;
-            } else {
-                delta = 1;
-                if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
-                        && TabGridContainerViewBinderTest.areAnimatorsEnabled()) {
-                    delta += 1;
-                }
-            }
-            CriteriaHelper.pollUiThread(Criteria.equals(delta, () -> getCaptureCount() - count));
-            if (checkThumbnail) checkThumbnailsExist(currentTab);
-
-            int index = mActivityTestRule.getActivity().getCurrentTabModel().index();
+            final int index = mActivityTestRule.getActivity().getCurrentTabModel().index();
             final int targetIndex = switchToAnotherTab ? 1 - index : index;
             Tab targetTab =
                     mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(targetIndex);
@@ -354,26 +296,69 @@
             if (switchToAnotherTab) {
                 waitForCaptureRateControl();
             }
-            int count2 = getCaptureCount();
+            int count = getCaptureCount();
+            Espresso.onView(ViewMatchers.withId(org.chromium.chrome.tab_ui.R.id.tab_list_view))
+                    .perform(RecyclerViewActions.actionOnItemAtPosition(
+                            targetIndex, ViewActions.click()));
             // clang-format off
-            TestThreadUtils.runOnUiThreadBlocking(
-                    () -> mActivityTestRule.getActivity().getCurrentTabModel().setIndex(
-                            targetIndex, FROM_USER));
-            CriteriaHelper.pollInstrumentationThread(
+            CriteriaHelper.pollUiThread(
                     () -> !mActivityTestRule.getActivity().getLayoutManager().overviewVisible(),
                     "Overview not hidden yet");
             // clang-format on
+            int delta;
             if (switchToAnotherTab
                     && !TextUtils.equals(mActivityTestRule.getActivity()
                                                  .getCurrentWebContents()
                                                  .getLastCommittedUrl(),
                             NTP_URL)) {
+                // Capture the original tab.
                 delta = 1;
             } else {
                 delta = 0;
             }
-            CriteriaHelper.pollUiThread(Criteria.equals(delta, () -> getCaptureCount() - count2));
+            CriteriaHelper.pollUiThread(Criteria.equals(delta, () -> getCaptureCount() - count));
         }
+        checkFinalCaptureCount(switchToAnotherTab, initCount);
+        assertThumbnailsAreReleased();
+    }
+
+    private void enterGTS() throws InterruptedException {
+        Tab currentTab = mActivityTestRule.getActivity().getTabModelSelector().getCurrentTab();
+        // Native tabs need to be invalidated first to trigger thumbnail taking, so skip them.
+        boolean checkThumbnail = !currentTab.isNativePage();
+
+        if (checkThumbnail)
+            mActivityTestRule.getActivity().getTabContentManager().removeTabThumbnail(
+                    currentTab.getId());
+
+        int count = getCaptureCount();
+        waitForCaptureRateControl();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> mActivityTestRule.getActivity().getLayoutManager().showOverview(true));
+        assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible());
+
+        // Make sure the fading animation is done.
+        int delta;
+        if (TextUtils.equals(
+                    mActivityTestRule.getActivity().getCurrentWebContents().getLastCommittedUrl(),
+                    NTP_URL)) {
+            // NTP is not invalidated, so no new captures.
+            delta = 0;
+        } else {
+            // The final capture at GridTabSwitcherLayout#finishedShowing time.
+            delta = 1;
+            // TODO(wychen): refactor areAnimatorsEnabled() to a util class.
+            if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+                    && TabGridContainerViewBinderTest.areAnimatorsEnabled()) {
+                // The faster capturing without writing back to cache.
+                delta += 1;
+            }
+        }
+        CriteriaHelper.pollUiThread(Criteria.equals(delta, () -> getCaptureCount() - count));
+        if (checkThumbnail) checkThumbnailsExist(currentTab);
+    }
+
+    private void checkFinalCaptureCount(boolean switchToAnotherTab, int initCount) {
         int expected;
         if (TextUtils.equals(
                     mActivityTestRule.getActivity().getCurrentWebContents().getLastCommittedUrl(),
@@ -390,7 +375,6 @@
             }
         }
         Assert.assertEquals(expected, getCaptureCount() - initCount);
-        assertThumbnailsAreReleased();
     }
 
     private void checkThumbnailsExist(Tab tab) {
@@ -410,8 +394,9 @@
     }
 
     private void waitForCaptureRateControl() throws InterruptedException {
-        // Needs to wait for |kCaptureMinRequestTimeMs| in order to capture another one.
-        // TODO(wychen): mock |kCaptureMinRequestTimeMs| to 0 in tests?
+        // Needs to wait for at least |kCaptureMinRequestTimeMs| in order to capture another one.
+        // TODO(wychen): find out why waiting is still needed after setting
+        //               |kCaptureMinRequestTimeMs| to 0.
         Thread.sleep(2000);
     }
 
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
index 2289c27..9fef4b1 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
@@ -634,7 +634,9 @@
         // Setup the mediator with a DialogHandler.
         mMediator = new TabListMediator(mModel, mTabModelSelector,
                 mTabContentManager::getTabThumbnailWithCallback, null, mTabListFaviconProvider,
-                true, null, null, null, mTabGridDialogHandler, getClass().getSimpleName());
+                false, null, null, null, mTabGridDialogHandler, getClass().getSimpleName());
+        // Assume that filter is already updated.
+        doReturn(mTab2).when(mTabGroupModelFilter).getTabAt(POSITION1);
 
         assertThat(mModel.size(), equalTo(2));
         assertThat(mModel.get(0).get(TabProperties.TAB_ID), equalTo(TAB1_ID));
@@ -647,6 +649,31 @@
         assertThat(mModel.size(), equalTo(1));
         assertThat(mModel.get(0).get(TabProperties.TAB_ID), equalTo(TAB2_ID));
         assertThat(mModel.get(0).get(TabProperties.TITLE), equalTo(TAB2_TITLE));
+        verify(mTabGridDialogHandler).updateDialogContent(TAB2_ID);
+    }
+
+    @Test
+    public void tabMoveOutOfGroup_Strip() {
+        setUpForTabGroupOperation();
+
+        mMediator = new TabListMediator(mModel, mTabModelSelector,
+                mTabContentManager::getTabThumbnailWithCallback, null, mTabListFaviconProvider,
+                false, null, null, null, null, getClass().getSimpleName());
+        // Assume that filter is already updated.
+        doReturn(mTab2).when(mTabGroupModelFilter).getTabAt(POSITION1);
+
+        assertThat(mModel.size(), equalTo(2));
+        assertThat(mModel.get(0).get(TabProperties.TAB_ID), equalTo(TAB1_ID));
+        assertThat(mModel.get(0).get(TabProperties.TITLE), equalTo(TAB1_TITLE));
+        assertThat(mModel.get(1).get(TabProperties.TAB_ID), equalTo(TAB2_ID));
+        assertThat(mModel.get(1).get(TabProperties.TITLE), equalTo(TAB2_TITLE));
+
+        mTabGroupModelFilterObserverCaptor.getValue().didMoveTabOutOfGroup(mTab1, POSITION1);
+
+        assertThat(mModel.size(), equalTo(1));
+        assertThat(mModel.get(0).get(TabProperties.TAB_ID), equalTo(TAB2_ID));
+        assertThat(mModel.get(0).get(TabProperties.TITLE), equalTo(TAB2_TITLE));
+        verify(mTabGridDialogHandler, never()).updateDialogContent(anyInt());
     }
 
     @Test
diff --git a/chrome/android/features/vr/BUILD.gn b/chrome/android/features/vr/BUILD.gn
index 9f7e084..5ad18c68 100644
--- a/chrome/android/features/vr/BUILD.gn
+++ b/chrome/android/features/vr/BUILD.gn
@@ -150,4 +150,9 @@
     "java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java",
     "java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java",
   ]
+
+  if (enable_arcore) {
+    sources +=
+        [ "java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java" ]
+  }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java
similarity index 75%
rename from chrome/android/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java
rename to chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java
index aec9936..1a268a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java
+++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java
@@ -9,8 +9,12 @@
 import android.support.annotation.NonNull;
 
 import org.chromium.base.Log;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.NativeMethods;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.ui.base.PermissionCallback;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -33,23 +37,28 @@
  * <p>The browser needs Android-level camera access for using ARCore, this
  * is requested if needed after the user has granted consent for the AR session.</p>
  */
+@JNINamespace("vr")
 public class ArConsentDialog implements ModalDialogProperties.Controller {
     private static final String TAG = "ArConsentDialog";
     private static final boolean DEBUG_LOGS = false;
 
     private ModalDialogManager mModalDialogManager;
-    private ArCoreJavaUtils mArCoreJavaUtils;
-    private ChromeActivity mActivity;
+    private long mNativeArConsentDialog;
+    private WindowAndroid mWindowAndroid;
 
-    public static void showDialog(ChromeActivity activity, ArCoreJavaUtils caller) {
-        ArConsentDialog dialog = new ArConsentDialog();
-        dialog.show(activity, caller);
+    @CalledByNative
+    private static ArConsentDialog showDialog(long instance, @NonNull final Tab tab) {
+        ArConsentDialog dialog = new ArConsentDialog(instance);
+        dialog.show(tab.getActivity());
+        return dialog;
     }
 
-    public void show(@NonNull ChromeActivity activity, @NonNull ArCoreJavaUtils caller) {
-        mArCoreJavaUtils = caller;
-        mActivity = activity;
+    private ArConsentDialog(long arConsentDialog) {
+        mNativeArConsentDialog = arConsentDialog;
+    }
 
+    public void show(ChromeActivity activity) {
+        mWindowAndroid = activity.getWindowAndroid();
         Resources resources = activity.getResources();
         PropertyModel model = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS)
                                       .with(ModalDialogProperties.CONTROLLER, this)
@@ -81,22 +90,21 @@
         if (dismissalCause == DialogDismissalCause.POSITIVE_BUTTON_CLICKED) {
             onConsentGranted();
         } else {
-            onConsentDenied();
+            consentDenied();
         }
     }
 
     private void onConsentGranted() {
         if (DEBUG_LOGS) Log.i(TAG, "onConsentGranted");
 
-        WindowAndroid window = mActivity.getWindowAndroid();
-        if (!window.hasPermission(android.Manifest.permission.CAMERA)) {
+        if (!mWindowAndroid.hasPermission(android.Manifest.permission.CAMERA)) {
             // The user has agreed to proceed with the AR session, but the browser
             // application doesn't have the prerequisite Android-level camera permission
             // needed for using ARCore internally. Show the system permission prompt.
             requestCameraPermission();
             return;
         }
-        startSession();
+        consentGranted();
     }
 
     private void requestCameraPermission() {
@@ -108,32 +116,32 @@
                 if (grantResults.length > 0
                         && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                     if (DEBUG_LOGS) Log.i(TAG, "onRequestPermissionsResult=granted");
-                    startSession();
+                    consentGranted();
                 } else {
                     // Didn't get permission :-(
                     if (DEBUG_LOGS) Log.i(TAG, "onRequestPermissionsResult=denied");
-                    endSession();
+                    consentDenied();
                 }
             }
         };
 
-        WindowAndroid window = mActivity.getWindowAndroid();
-        window.requestPermissions(new String[] {android.Manifest.permission.CAMERA}, callback);
+        mWindowAndroid.requestPermissions(
+                new String[] {android.Manifest.permission.CAMERA}, callback);
     }
 
-    private void onConsentDenied() {
-        if (DEBUG_LOGS) Log.i(TAG, "onConsentDenied");
-        endSession();
-    }
-
-    private void startSession() {
-        if (DEBUG_LOGS) Log.i(TAG, "startSession");
+    private void consentGranted() {
+        if (DEBUG_LOGS) Log.i(TAG, "consentGranted");
         // We have user consent to start the session.
-        mArCoreJavaUtils.onStartSession(mActivity);
+        ArConsentDialogJni.get().onUserConsentResult(mNativeArConsentDialog, true);
     }
 
-    private void endSession() {
-        if (DEBUG_LOGS) Log.i(TAG, "endSession");
-        mArCoreJavaUtils.onDrawingSurfaceDestroyed();
+    private void consentDenied() {
+        if (DEBUG_LOGS) Log.i(TAG, "consentDenied");
+        ArConsentDialogJni.get().onUserConsentResult(mNativeArConsentDialog, false);
+    }
+
+    @NativeMethods
+    /* package */ interface Natives {
+        void onUserConsentResult(long nativeArcoreConsentPrompt, boolean allowed);
     }
 }
diff --git a/chrome/android/features/vr/public_vr_java_sources.gni b/chrome/android/features/vr/public_vr_java_sources.gni
index 6bcc57b..5767701 100644
--- a/chrome/android/features/vr/public_vr_java_sources.gni
+++ b/chrome/android/features/vr/public_vr_java_sources.gni
@@ -24,3 +24,7 @@
     "//chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrConsentListener.java",
   ]
 }
+
+if (enable_arcore) {
+  public_vr_java_sources += [ "//chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java" ]
+}
diff --git a/chrome/android/java/res/values-v29/colors.xml b/chrome/android/java/res/values-v29/colors.xml
deleted file mode 100644
index d36454f..0000000
--- a/chrome/android/java/res/values-v29/colors.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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. -->
-
-<resources>
-    <color name="bottom_system_nav_color">@android:color/black</color>
-    <color name="bottom_system_nav_divider_color">@android:color/black</color>
-</resources>
diff --git a/chrome/android/java/res/values-v29/values.xml b/chrome/android/java/res/values-v29/values.xml
deleted file mode 100644
index 17a9f59..0000000
--- a/chrome/android/java/res/values-v29/values.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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. -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- Bottom navigation bar styling. -->
-    <bool name="window_light_navigation_bar">false</bool>
-</resources>
-
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
index 4798ec65..52d2f93 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
@@ -19,6 +19,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.CommandLine;
 import org.chromium.base.PathUtils;
+import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.task.AsyncTask;
@@ -423,7 +424,6 @@
         invalidateIfChanged(id, url);
     }
 
-
     /**
      * Update the priority-ordered list of visible tabs.
      * @param priority The list of tab ids ordered in terms of priority.
@@ -443,7 +443,6 @@
         }
     }
 
-
     /**
      * Removes a thumbnail of the tab whose id is |tabId|.
      * @param tabId The Id of the tab whose thumbnail is being removed.
@@ -454,6 +453,11 @@
         }
     }
 
+    @VisibleForTesting
+    public void setCaptureMinRequestTimeForTesting(int timeMs) {
+        nativeSetCaptureMinRequestTimeForTesting(mNativeTabContentManager, timeMs);
+    }
+
     @CalledByNative
     protected void notifyListenersOfThumbnailChange(int tabId) {
         for (ThumbnailChangeListener listener : mListeners) {
@@ -483,5 +487,7 @@
     private native void nativeRemoveTabThumbnail(long nativeTabContentManager, int tabId);
     private native void nativeGetEtc1TabThumbnail(
             long nativeTabContentManager, int tabId, Callback<Bitmap> callback);
+    private native void nativeSetCaptureMinRequestTimeForTesting(
+            long nativeTabContentManager, int timeMs);
     private static native void nativeDestroy(long nativeTabContentManager);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinator.java
index b362a1a..c47c4c8f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinator.java
@@ -14,6 +14,7 @@
 import android.view.View;
 
 import org.chromium.base.Callback;
+import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.share.ShareHelper;
 import org.chromium.chrome.browser.share.ShareParams;
@@ -161,7 +162,8 @@
         return dialog;
     }
 
-    private List<Pair<Integer, PropertyModel>> getItemList(Activity activity,
+    @VisibleForTesting
+    List<Pair<Integer, PropertyModel>> getItemList(Activity activity,
             List<Pair<Integer, List<ContextMenuItem>>> items, ContextMenuParams params) {
         List<Pair<Integer, PropertyModel>> itemList = new ArrayList<>();
 
@@ -229,4 +231,9 @@
     Callback<Bitmap> getOnImageThumbnailRetrievedReference() {
         return mHeaderCoordinator.getOnImageThumbnailRetrievedReference();
     }
+
+    @VisibleForTesting
+    void initializeHeaderCoordinatorForTesting(Activity activity, ContextMenuParams params) {
+        mHeaderCoordinator = new RevampedContextMenuHeaderCoordinator(activity, params);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
index 11f847b..ad9ffae 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
@@ -9,6 +9,7 @@
 import android.content.res.Configuration;
 import android.text.TextUtils;
 
+import org.chromium.base.library_loader.LibraryProcessType;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.TaskTraits;
@@ -20,6 +21,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
 import org.chromium.chrome.browser.util.UrlUtilities;
+import org.chromium.content_public.browser.BrowserStartupController;
 import org.chromium.content_public.browser.WebContents;
 
 /**
@@ -204,13 +206,25 @@
     }
 
     public static void registerExternalExperiment(String studyName, int[] experimentIds) {
+        assert isMetricsServiceAvailable();
         nativeRegisterExternalExperiment(studyName, experimentIds);
     }
 
     public static void registerSyntheticFieldTrial(String trialName, String groupName) {
+        assert isMetricsServiceAvailable();
         nativeRegisterSyntheticFieldTrial(trialName, groupName);
     }
 
+    /**
+     * UmaSessionStats exposes two static methods on the metrics service. Namely {@link
+     * #registerExternalExperiment} and {@link #registerSyntheticFieldTrial}. However those can only
+     * be used in full-browser mode and as such you must check this before calling them.
+     */
+    public static boolean isMetricsServiceAvailable() {
+        return BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
+                .isFullBrowserStarted();
+    }
+
     private static native long nativeInit();
     private static native void nativeChangeMetricsReportingConsent(boolean consent);
     private static native void nativeInitMetricsAndCrashReportingForTesting();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
index 81599fd0..a721a27 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
@@ -145,8 +145,8 @@
     }
 
     @Override
-    public void getInstruments(Map<String, PaymentMethodData> methodDataMap, String origin,
-            String iframeOrigin, @Nullable byte[][] certificateChain,
+    public void getInstruments(String unusedId, Map<String, PaymentMethodData> methodDataMap,
+            String origin, String iframeOrigin, @Nullable byte[][] certificateChain,
             Map<String, PaymentDetailsModifier> modifiers, InstrumentsCallback callback) {
         assert mMethodNames.containsAll(methodDataMap.keySet());
         assert mInstrumentsCallback
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
index cec1bba..2e75faf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
@@ -43,8 +43,8 @@
     }
 
     @Override
-    public void getInstruments(Map<String, PaymentMethodData> methodDataMap, String unusedOrigin,
-            String unusedIFRameOrigin, byte[][] unusedCertificateChain,
+    public void getInstruments(String unusedId, Map<String, PaymentMethodData> methodDataMap,
+            String unusedOrigin, String unusedIFRameOrigin, byte[][] unusedCertificateChain,
             Map<String, PaymentDetailsModifier> unusedModifiers,
             final InstrumentsCallback callback) {
         new Handler().post(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentApp.java
index 0b310d91..682478d0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentApp.java
@@ -65,6 +65,7 @@
      * cards for the current profile. Can return null or empty list, e.g., if user has no locally
      * stored credit cards.
      *
+     * @param id               The unique identifier of the PaymentRequest.
      * @param methodDataMap    The map from methods to method specific data. The data contains such
      *                         information as whether the app should be invoked in test or
      *                         production mode, merchant identifier, or a public key.
@@ -76,7 +77,7 @@
      * @param modifiers        The relevant payment details modifiers.
      * @param callback         The object that will receive the list of instruments.
      */
-    void getInstruments(Map<String, PaymentMethodData> methodDataMap, String origin,
+    void getInstruments(String id, Map<String, PaymentMethodData> methodDataMap, String origin,
             String iframeOrigin, @Nullable byte[][] certificateChain,
             Map<String, PaymentDetailsModifier> modifiers, InstrumentsCallback callback);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java
index 3ea7906..cd393b81 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentInstrument.java
@@ -197,9 +197,10 @@
     /**
      * Abort invocation of the payment app.
      *
+     * @param id       The unique identifier of the PaymentRequest.
      * @param callback The callback to return abort result.
      */
-    public void abortPaymentApp(AbortCallback callback) {
+    public void abortPaymentApp(String id, AbortCallback callback) {
         PostTask.postTask(UiThreadTaskTraits.DEFAULT, new Runnable() {
             @Override
             public void run() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 0e7d82a..20bd792b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -849,7 +849,7 @@
 
         for (Map.Entry<PaymentApp, Map<String, PaymentMethodData>> q : queryApps.entrySet()) {
             q.getKey().setPaymentMethodChangeCallback(this);
-            q.getKey().getInstruments(q.getValue(), mTopLevelOrigin, mPaymentRequestOrigin,
+            q.getKey().getInstruments(mId, q.getValue(), mTopLevelOrigin, mPaymentRequestOrigin,
                     mCertificateChain,
                     mModifiers == null ? new HashMap<>() : Collections.unmodifiableMap(mModifiers),
                     this);
@@ -1675,7 +1675,7 @@
         if (mClient == null) return;
 
         if (mInvokedPaymentInstrument != null) {
-            mInvokedPaymentInstrument.abortPaymentApp(this);
+            mInvokedPaymentInstrument.abortPaymentApp(mId, this);
             return;
         }
         onInstrumentAbortResult(true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
index 2bd3eba..57c0c63 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
@@ -36,6 +36,7 @@
 public class ServiceWorkerPaymentApp extends PaymentInstrument implements PaymentApp {
     private final WebContents mWebContents;
     private final long mRegistrationId;
+    private final URI mScope;
     private final Set<String> mMethodNames;
     private final boolean mExplicitlyVerified;
     private final Capabilities[] mCapabilities;
@@ -47,7 +48,6 @@
     private final boolean mNeedsInstallation;
     private final String mAppName;
     private final URI mSwUri;
-    private final URI mScope;
     private final boolean mUseCache;
 
     /** The endpoint for payment handler communication, such as the change-payment-method event. */
@@ -130,6 +130,7 @@
                 TextUtils.isEmpty(name) ? null : origin, icon);
         mWebContents = webContents;
         mRegistrationId = registrationId;
+        mScope = scope;
 
         // Name and/or icon are set to null if fetching or processing the corresponding web
         // app manifest failed. Then do not preselect this payment app.
@@ -153,7 +154,6 @@
         mNeedsInstallation = false;
         mAppName = name;
         mSwUri = null;
-        mScope = null;
         mUseCache = false;
     }
 
@@ -182,6 +182,7 @@
         mWebContents = webContents;
         // No registration ID before the app is registered (installed).
         mRegistrationId = -1;
+        mScope = scope;
         // If name and/or icon is missing or failed to parse from the web app manifest, then do not
         // preselect this payment app.
         mCanPreselect = !TextUtils.isEmpty(name) && icon != null;
@@ -199,7 +200,6 @@
         mNeedsInstallation = true;
         mAppName = name;
         mSwUri = swUri;
-        mScope = scope;
         mUseCache = useCache;
     }
 
@@ -214,8 +214,8 @@
     }
 
     @Override
-    public void getInstruments(Map<String, PaymentMethodData> methodDataMap, String origin,
-            String iframeOrigin, byte[][] unusedCertificateChain,
+    public void getInstruments(String id, Map<String, PaymentMethodData> methodDataMap,
+            String origin, String iframeOrigin, byte[][] unusedCertificateChain,
             Map<String, PaymentDetailsModifier> modifiers, final InstrumentsCallback callback) {
         // Do not send canMakePayment event when in incognito mode or basic-card is the only
         // supported payment method or this app needs installation for the payment request or this
@@ -230,8 +230,8 @@
             return;
         }
 
-        ServiceWorkerPaymentAppBridge.canMakePayment(mWebContents, mRegistrationId, origin,
-                iframeOrigin, new HashSet<>(methodDataMap.values()),
+        ServiceWorkerPaymentAppBridge.canMakePayment(mWebContents, mRegistrationId,
+                mScope.toString(), id, origin, iframeOrigin, new HashSet<>(methodDataMap.values()),
                 new HashSet<>(modifiers.values()), (boolean canMakePayment) -> {
                     List<PaymentInstrument> instruments = canMakePayment
                             ? Collections.singletonList(ServiceWorkerPaymentApp.this)
@@ -359,9 +359,9 @@
                     icon == null ? null : icon.getBitmap(), mSwUri, mScope, mUseCache,
                     mMethodNames.toArray(new String[0])[0]);
         } else {
-            ServiceWorkerPaymentAppBridge.invokePaymentApp(mWebContents, mRegistrationId, origin,
-                    iframeOrigin, id, new HashSet<>(methodData.values()), total,
-                    new HashSet<>(modifiers.values()), mPaymentHandlerHost, callback);
+            ServiceWorkerPaymentAppBridge.invokePaymentApp(mWebContents, mRegistrationId,
+                    mScope.toString(), origin, iframeOrigin, id, new HashSet<>(methodData.values()),
+                    total, new HashSet<>(modifiers.values()), mPaymentHandlerHost, callback);
         }
     }
 
@@ -383,8 +383,9 @@
     }
 
     @Override
-    public void abortPaymentApp(AbortCallback callback) {
-        ServiceWorkerPaymentAppBridge.abortPaymentApp(mWebContents, mRegistrationId, callback);
+    public void abortPaymentApp(String id, AbortCallback callback) {
+        ServiceWorkerPaymentAppBridge.abortPaymentApp(
+                mWebContents, mRegistrationId, mScope.toString(), id, callback);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
index a988da2..504944c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
@@ -131,6 +131,8 @@
      *
      * @param webContents      The web contents that invoked PaymentRequest.
      * @param registrationId   The service worker registration ID of the Payment App.
+     * @param swScope          The service worker scope.
+     * @param paymentRequestId The payment request identifier.
      * @param origin           The origin of this merchant.
      * @param iframeOrigin     The origin of the iframe that invoked PaymentRequest. Same as origin
      *                         if PaymentRequest was not invoked from inside an iframe.
@@ -139,9 +141,10 @@
      * @param modifiers        Payment method specific modifiers to the payment items and the total.
      * @param callback         Called after the payment app is finished running.
      */
-    public static void canMakePayment(WebContents webContents, long registrationId, String origin,
-            String iframeOrigin, Set<PaymentMethodData> methodData,
-            Set<PaymentDetailsModifier> modifiers, CanMakePaymentCallback callback) {
+    public static void canMakePayment(WebContents webContents, long registrationId, String swScope,
+            String paymentRequestId, String origin, String iframeOrigin,
+            Set<PaymentMethodData> methodData, Set<PaymentDetailsModifier> modifiers,
+            CanMakePaymentCallback callback) {
         ThreadUtils.assertOnUiThread();
 
         if (sCanMakePaymentForTesting) {
@@ -153,8 +156,8 @@
             });
             return;
         }
-        nativeCanMakePayment(webContents, registrationId, origin, iframeOrigin,
-                methodData.toArray(new PaymentMethodData[0]),
+        nativeCanMakePayment(webContents, registrationId, swScope, paymentRequestId, origin,
+                iframeOrigin, methodData.toArray(new PaymentMethodData[0]),
                 modifiers.toArray(new PaymentDetailsModifier[0]), callback);
     }
 
@@ -173,6 +176,7 @@
      *
      * @param webContents      The web contents that invoked PaymentRequest.
      * @param registrationId   The service worker registration ID of the Payment App.
+     * @param swScope          The scope of the service worker.
      * @param origin           The origin of this merchant.
      * @param iframeOrigin     The origin of the iframe that invoked PaymentRequest. Same as origin
      *                         if PaymentRequest was not invoked from inside an iframe.
@@ -184,14 +188,15 @@
      * @param host             The host of the payment handler.
      * @param callback         Called after the payment app is finished running.
      */
-    public static void invokePaymentApp(WebContents webContents, long registrationId, String origin,
-            String iframeOrigin, String paymentRequestId, Set<PaymentMethodData> methodData,
-            PaymentItem total, Set<PaymentDetailsModifier> modifiers, PaymentHandlerHost host,
+    public static void invokePaymentApp(WebContents webContents, long registrationId,
+            String swScope, String origin, String iframeOrigin, String paymentRequestId,
+            Set<PaymentMethodData> methodData, PaymentItem total,
+            Set<PaymentDetailsModifier> modifiers, PaymentHandlerHost host,
             PaymentInstrument.InstrumentDetailsCallback callback) {
         ThreadUtils.assertOnUiThread();
 
-        nativeInvokePaymentApp(webContents, registrationId, origin, iframeOrigin, paymentRequestId,
-                methodData.toArray(new PaymentMethodData[0]), total,
+        nativeInvokePaymentApp(webContents, registrationId, swScope, origin, iframeOrigin,
+                paymentRequestId, methodData.toArray(new PaymentMethodData[0]), total,
                 modifiers.toArray(new PaymentDetailsModifier[0]),
                 host.getNativePaymentHandlerHost(), callback);
     }
@@ -236,13 +241,15 @@
      *
      * @param webContents      The web contents that invoked PaymentRequest.
      * @param registrationId   The service worker registration ID of the Payment App.
+     * @param swScope          The service worker scope.
+     * @param paymentRequestId The payment request identifier.
      * @param callback         Called after abort invoke payment app is finished running.
      */
-    public static void abortPaymentApp(WebContents webContents, long registrationId,
-            PaymentInstrument.AbortCallback callback) {
+    public static void abortPaymentApp(WebContents webContents, long registrationId, String swScope,
+            String paymentRequestId, PaymentInstrument.AbortCallback callback) {
         ThreadUtils.assertOnUiThread();
 
-        nativeAbortPaymentApp(webContents, registrationId, callback);
+        nativeAbortPaymentApp(webContents, registrationId, swScope, paymentRequestId, callback);
     }
 
     /**
@@ -465,9 +472,10 @@
             GetServiceWorkerPaymentAppsInfoCallback callback);
 
     private static native void nativeInvokePaymentApp(WebContents webContents, long registrationId,
-            String topOrigin, String paymentRequestOrigin, String paymentRequestId,
-            PaymentMethodData[] methodData, PaymentItem total, PaymentDetailsModifier[] modifiers,
-            long nativePaymentHandlerObject, PaymentInstrument.InstrumentDetailsCallback callback);
+            String serviceWorkerScope, String topOrigin, String paymentRequestOrigin,
+            String paymentRequestId, PaymentMethodData[] methodData, PaymentItem total,
+            PaymentDetailsModifier[] modifiers, long nativePaymentHandlerObject,
+            PaymentInstrument.InstrumentDetailsCallback callback);
 
     private static native void nativeInstallAndInvokePaymentApp(WebContents webContents,
             String topOrigin, String paymentRequestOrigin, String paymentRequestId,
@@ -476,11 +484,13 @@
             String appName, @Nullable Bitmap icon, String swUrl, String scope, boolean useCache,
             String method);
 
-    private static native void nativeAbortPaymentApp(
-            WebContents webContents, long registrationId, PaymentInstrument.AbortCallback callback);
+    private static native void nativeAbortPaymentApp(WebContents webContents, long registrationId,
+            String serviceWorkerScope, String paymentRequestId,
+            PaymentInstrument.AbortCallback callback);
 
     private static native void nativeCanMakePayment(WebContents webContents, long registrationId,
-            String topOrigin, String paymentRequestOrigin, PaymentMethodData[] methodData,
+            String serviceWorkerScope, String paymentRequestId, String topOrigin,
+            String paymentRequestOrigin, PaymentMethodData[] methodData,
             PaymentDetailsModifier[] modifiers, CanMakePaymentCallback callback);
 
     private static native void nativeOnClosingPaymentAppWindow(WebContents webContents, int reason);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java
index 75a972b..72ca07ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java
@@ -9,6 +9,7 @@
 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
 import org.chromium.chrome.browser.share.ShareActivity;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.printing.PrintingController;
 import org.chromium.printing.PrintingControllerImpl;
 
@@ -22,6 +23,9 @@
     }
 
     public static boolean featureIsAvailable(Tab currentTab) {
+        // TODO(https://crbug.com/981065): The Share Sheet printing item gets disabled while the
+        // share sheet is still active in NoTouch mode. Remove this restriction once fixed.
+        if (FeatureUtilities.isNoTouchModeEnabled()) return false;
         PrintingController printingController = PrintingControllerImpl.getInstance();
         return (printingController != null && !currentTab.isNativePage()
                 && !currentTab.isShowingInterstitialPage() && !printingController.isBusy()
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java
index a1b68f3..801c5093 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java
@@ -15,7 +15,6 @@
 import android.view.Window;
 
 import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.base.BuildInfo;
 import org.chromium.base.Callback;
 import org.chromium.base.ObservableSupplier;
 import org.chromium.chrome.R;
@@ -89,7 +88,7 @@
 
         // If we're not using a light navigation bar, it will always be black so there's no need
         // to register observers and manipulate coloring.
-        if (!mResources.getBoolean(R.bool.window_light_navigation_bar) || BuildInfo.isAtLeastQ()) {
+        if (!mResources.getBoolean(R.bool.window_light_navigation_bar)) {
             mTabModelSelector = null;
             mTabModelSelectorObserver = null;
             return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java
index a8f7cef1..d22ff5516 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java
@@ -18,7 +18,6 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.infobar.InfoBarIdentifier;
 import org.chromium.chrome.browser.infobar.SimpleConfirmInfoBarBuilder;
 import org.chromium.chrome.browser.modules.ModuleInstallUi;
@@ -113,10 +112,10 @@
     }
 
     @CalledByNative
-    private void launchArConsentDialog(final Tab tab) {
-        if (DEBUG_LOGS) Log.i(TAG, "launchArConsentDialog");
-        final ChromeActivity activity = tab.getActivity();
-        ArConsentDialog.showDialog(activity, this);
+    private void startSession(final Tab tab) {
+        if (DEBUG_LOGS) Log.i(TAG, "startSession");
+        mArImmersiveOverlay = new ArImmersiveOverlay();
+        mArImmersiveOverlay.show(tab.getActivity(), this);
     }
 
     @CalledByNative
@@ -128,12 +127,6 @@
         }
     }
 
-    public void onStartSession(ChromeActivity activity) {
-        if (DEBUG_LOGS) Log.i(TAG, "onSessionStarted");
-        mArImmersiveOverlay = new ArImmersiveOverlay();
-        mArImmersiveOverlay.show(activity, this);
-    }
-
     public void onDrawingSurfaceReady(Surface surface, int rotation, int width, int height) {
         if (DEBUG_LOGS) Log.i(TAG, "onDrawingSurfaceReady");
         if (mNativeArCoreJavaUtils == 0) return;
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
index 330652f..9e2b943c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ታሪክ፣ ኩኪዎች፣ የጣቢያ ውሂብ፣ መሸጎጫን አጽዳ…</translation>
 <translation id="129553762522093515">በቅርብ ጊዜ የተዘጉ</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ከ<ph name="DEVICE_NAME" /> የተላከ</translation>
-<translation id="1326317727527857210">ትሮችዎን ከሌሎች መሣሪያዎችዎ ለማግኘት ወደ Chrome ይግቡ።</translation>
 <translation id="1331212799747679585">Chrome መዘመን አይችልም። ተጨማሪ አማራጮች</translation>
 <translation id="1332501820983677155">የGoogle Chrome ባህሪ አቋራጮች</translation>
 <translation id="1360432990279830238">ዘግተው ወጥተው ስምረት ይጥፋ?</translation>
-<translation id="136248372334525878">ለበለጠ ፈጣን ጭነት እና የመስመር ውጭ ንባብ ገጾችን አስቀድመው ይጫኑ</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> ጣቢያ ተክሏል</translation>
 <translation id="1373696734384179344">የተመረጠውን ይዘት ለማውረድ በቂ ያልሆነ ማህደረ ትውስታ።</translation>
 <translation id="1376578503827013741">በማስላት ላይ…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">የተመረጠው ትር</translation>
 <translation id="194341124344773587">በ<ph name="BEGIN_LINK" />Android ቅንብሮች<ph name="END_LINK" /> ውስጥ ፍቃዶችን ለChrome ያብሩ።</translation>
 <translation id="1943432128510653496">የይለፍ ቃላትን አስቀምጥ</translation>
-<translation id="1946005195648379376">Google ፍለጋን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ ብሎ የአሰሳ ታሪክዎን እንዴት እንደሚጠቀምበት ይቆጣጠሩት።</translation>
 <translation id="1952172573699511566">ሲቻል፣ ድር ጣቢያዎች በእርስዎ ተመራጭ ቋንቋ ጽሑፍ ይታያሉ።</translation>
 <translation id="1960290143419248813">የChrome ዝማኔዎች ከአሁን በኋላ ለዚህ የAndroid ዝማኔዎች አይደገፉም</translation>
 <translation id="1966710179511230534">እባክዎ የመግቢያ ዝርዝሮችዎን ያዘምኑ።</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">ለመፈለግ መታ ያድርጉ</translation>
 <translation id="2079545284768500474">ቀልብስ</translation>
 <translation id="2082238445998314030">ውጤት <ph name="RESULT_NUMBER" /> ከ<ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">በGoogle የሚጠቆም ግላዊነት የተላበሰ ይዘትን ለማግኘት በመለያ ወደ Chrome ይግቡ።</translation>
 <translation id="2091887806945687916">ድምፅ</translation>
 <translation id="2096012225669085171">በመላ መሣሪያዎች ላይ ያመሳስሉ እና ግላዊነት ያላብሱ</translation>
 <translation id="2100273922101894616">በራስ-ግባ</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">ይህን በሚመች ሁኔታ ማንበብ እስኪችሉ ድረስ ተንሸራታቹን ይጎትቱት። በአንድ አንቀጽ ላይ ሁለቴ መታ ካደረጉ በኋላ ጽሑፍ ቢያንስ የዚህ ያህል ትልቀት ሊኖረው ይገባል።</translation>
 <translation id="2323763861024343754">የጣቢያ ማከማቻ</translation>
 <translation id="2328985652426384049">መግባት አልተቻለም</translation>
-<translation id="2342981853652716282">የእርስዎን ዕልባቶች፣ የይለፍ ቃላት እና በሁሉም የእርስዎ መሣሪያዎች ላይ ተጨማሪ ለማግኘት ወደ Chrome በመለያ ይግቡ።</translation>
 <translation id="2349710944427398404">መለያዎች፣ ዕልባቶች እና የተቀመጡ ቅንብሮችን ጨምሮ Chrome የተጠቀመው ጠቅላላ ውሂብ</translation>
 <translation id="2351097562818989364">የትርጉም ቅንብሮችዎ ዳግም እንዲጀምሩ ተደርገዋል።</translation>
 <translation id="2353636109065292463">የበይነመረብ ግንኙነትዎን ይፈትሹ</translation>
@@ -270,6 +265,7 @@
 <translation id="2900528713135656174">ክስተት ፍጠር</translation>
 <translation id="2902702728133930130">Chrome ባልተጠበቀ ስህተት ምክንያት ሊጀምር አልቻለም።</translation>
 <translation id="290376772003165898">ገጽ በ<ph name="LANGUAGE" /> አይደለም?</translation>
+<translation id="2904414404539560095">በሙሉ ቁመቱ ላይ የተከፈተ ትር የሚጋሩ የመሣሪያዎች ዝርዝር።</translation>
 <translation id="2910701580606108292">ጣቢያዎች ጥበቃ የሚደረግለትን ይዘትን እንዲያጫውቱ ከመፍቀድ በፊት ጠይቅ</translation>
 <translation id="2913331724188855103">ጣቢያዎች የኩኪ ውሂብ እንዲያስቀምጡ እና እንዲያነቡ ይፍቀዱ (የሚመከር)</translation>
 <translation id="2923908459366352541">ስም ልክ ያልሆነ ነው</translation>
@@ -294,7 +290,6 @@
 <translation id="3123473560110926937">በአንዳንድ ጣቢያዎች ላይ ታግዷል</translation>
 <translation id="3137521801621304719">ከማንነት የማያሳውቅ ሁነታ ይውጡ</translation>
 <translation id="3143515551205905069">ስምረትን ሰርዝ</translation>
-<translation id="3148434565183091099">የእርስዎን ዕልባቶች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት ወደ Chrome ይግቡ።</translation>
 <translation id="3157842584138209013">ከተጨማሪ አማራጮች አዝራር ላይ ምን ያህል ውሂብ እንዳስቀመጡ ይመልከቱ</translation>
 <translation id="3166827708714933426">የትር እና የመስኮት አቋራጮች</translation>
 <translation id="3181954750937456830">ደኅንነቱ የተጠበቀ አሰሳ (እርስዎን እና የእርስዎን መሣሪያ ከአደገኛ ጣቢያዎች ጥበቃ ያደርግላችኋል)</translation>
@@ -328,6 +323,7 @@
 <translation id="3350687908700087792">ሁሉንም ማንነት የማያሳውቅ ትሮችን ይዝጉ</translation>
 <translation id="3353615205017136254">ቀላል ገጽ በGoogle ቀርቧል። ኦርጂናሉን ገጽ ለመጫን ኦርጂናል ጫን የሚለውን አዝራር መታ ያድርጉ።</translation>
 <translation id="3367813778245106622">ስምረትን ለመጀመር እንደገና ይግቡ</translation>
+<translation id="3374023511497244703">የእርስዎ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌላ የ Chrome ውሂብ ከእንግዲህ ወደ የእርስዎ Google መለያ ይሰምራል</translation>
 <translation id="3384347053049321195">ምስል አጋራ</translation>
 <translation id="3386292677130313581">ጣቢያዎች አካባቢዎን እንዲያውቁ ከመፍቀድዎ በፊት ይጠይቅ (የሚመከር)</translation>
 <translation id="3387650086002190359">በስርዓተ-ፋይል ስህተቶች ምክንያት <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation>
@@ -359,7 +355,6 @@
 <translation id="363596933471559332">የተከማቹ ምስክርነቶችን በመጠቀም በራስ-ሰር ወደ የድር ጣቢያዎች መለያ ይግቡ። ባህሪው ሲጠፋ ወደ አንድ ድር ጣቢያ ከመግባትዎ በፊት ማረጋገጫ ይጠየቃሉ።</translation>
 <translation id="3658159451045945436">ዳግም ማስጀመር የተጎበኙ ጣቢያዎች ዝርዝር ጨምሮ የውሂብ ቁጠባዎን ታሪክ ይደመስሳል።</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> ትሮችን ይሰብስቡ።</translation>
-<translation id="3672452749423051839">የአሰሳ ስህተት ጥቆማ አስተያየቶች</translation>
 <translation id="3692944402865947621">የማከማቻ ቦታው የማይገኝ ስለሆነ <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation>
 <translation id="3714981814255182093">የአግኝ አሞሌን ክፈት</translation>
 <translation id="3716182511346448902">ይህ ገጽ በጣም ብዙ ማህደረ ትውስታን ይጠቀማል፣ ስለዚህ Chrome ባለበት አቁሞታል።</translation>
@@ -402,7 +397,6 @@
 <translation id="4002066346123236978">ርዕስ</translation>
 <translation id="4008040567710660924">የተወሰነ ጣቢያ ኩኪዎችን ፍቀድ።</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ሰዓ}one{# ሰዓቶች}other{# ሰዓቶች}}</translation>
-<translation id="4042870126885713738">አንድ የድር አድራሻ መፍትሔ ካላመጣ ወይም ግንኙነት ሊፈጠር ካልቻለ ጥቆማዎችን አሳይ</translation>
 <translation id="4046123991198612571">ቀጣይ ትራክ</translation>
 <translation id="4048707525896921369">ገጹን ትተው ሳይሄዱ በድር ጣቢያዎች ላይ ስላሉ ርዕሶች ይወቁ። ለመፈለግ መታ ያድርጉ አንድ ቃል እና በዙሪያው ያለውን አውድ ወደ Google ፍለጋ ይልክና ትርጓሜዎችን፣ ስዕሎችን፣ የፍለጋ ውጤቶችን እና ሌሎች ዝርዝሮችን ይመልሳል።
 
@@ -417,6 +411,7 @@
 <translation id="4099578267706723511">የአጠቃቀም ስታቲክሶችን እና የብልሽት ሪፖርቶችን ወደ Google በመላክ Chromeን የተሻለ ለማድረግ እገዛ ያድርጉ።</translation>
 <translation id="410351446219883937">ራስ-አጫውት</translation>
 <translation id="4116038641877404294">ገጾችን ከመስመር ውጭ ለመጠቀም ያውርዷቸው</translation>
+<translation id="4135200667068010335">የተዘጋ ትር የሚጋሩ የመሣሪያዎች ዝርዝር።</translation>
 <translation id="4149994727733219643">ለድረ-ገጾች የተቃለለ እይታ</translation>
 <translation id="4165986682804962316">የጣቢያ ቅንብሮች</translation>
 <translation id="4169535189173047238">አትፍቀድ</translation>
@@ -435,7 +430,6 @@
     - እንደ አረማመድዎ ያሉ የእርስዎ እንቅስቃሴዎች
 
     መዳረሻን ከመፍቀድዎ በፊት ይህን ጣቢያ የሚያምኑት መሆንዎን ያረጋግጡ።</translation>
-<translation id="424864128008805179">ከChrome ተዘግቶ ይወጣ?</translation>
 <translation id="4256782883801055595">የክፍት ምንጭ ፍቃዶች</translation>
 <translation id="4259722352634471385">ዳሰሳ ታግዷል፦ <ph name="URL" /></translation>
 <translation id="4269820728363426813">የአገናኝ አድራሻ ቅዳ</translation>
@@ -449,7 +443,6 @@
 <translation id="4378154925671717803">ስልክ</translation>
 <translation id="4384468725000734951">ለፍለጋ Sogouን መጠቀም</translation>
 <translation id="4404568932422911380">ምንም ዕልባቶች የሉም</translation>
-<translation id="4409723563706114196">የገጽ ግመታዎችን ይጠቀሙ</translation>
 <translation id="4411535500181276704">ቀላል ሁነታ</translation>
 <translation id="4415276339145661267">የGoogle መለያዎን ያቀናብሩ</translation>
 <translation id="4432792777822557199">በ<ph name="SOURCE_LANGUAGE" /> ያሉ ገጾች ወደ <ph name="TARGET_LANGUAGE" /> ከአሁን በኋላ ይተረጎማሉ</translation>
@@ -574,13 +567,11 @@
 <translation id="5202089186707505116">ይህ ጣቢያ የቪአር ክፍለ-ጊዜዎችዎን እንዲደርስ ይፈቀድለት?</translation>
 <translation id="5210286577605176222">ወደ ቀዳሚው ትር ዝለል</translation>
 <translation id="5210365745912300556">ትር ዝጋ</translation>
-<translation id="5222676887888702881">ዘግተህ ውጣ</translation>
 <translation id="5224771365102442243">ከቪዲዮ ጋር</translation>
 <translation id="5233638681132016545">አዲስ ትር</translation>
 <translation id="526421993248218238">ይህን ገጽ መጫን አልተቻለም</translation>
 <translation id="5271967389191913893">መሣሪያ የሚወርደውን ይዘት መክፈት አይችልም።</translation>
 <translation id="528192093759286357">ከሙሉ ማያ ገጽ ለመውጣት ከላይ ይጎትቱ እና የተመለስ አዝራሩን ይንኩ።</translation>
-<translation id="5284584623296338184">በእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ላይ የተደረጉ ለውጦች ከአሁን በኋላ ከእርስዎ የGoogle መለያ ጋር አይሠምሩም። ሆኖም ግን ነባር ውሂብዎ በእርስዎ የGoogle መለያ ላይ እንደተከማቸ ይቆያል።</translation>
 <translation id="5292796745632149097">ላክ ወደ</translation>
 <translation id="5300589172476337783">አሳይ</translation>
 <translation id="5301954838959518834">እሺ፣ ገባኝ</translation>
@@ -657,7 +648,6 @@
 <translation id="5763382633136178763">ማንነት የማያሳውቁ ትሮች</translation>
 <translation id="5763514718066511291">የዚህ መተግበሪያ ዩአርኤል ለመቅዳት መታ ያድርጉ</translation>
 <translation id="5765780083710877561">መግለጫ</translation>
-<translation id="5777170031995031090">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ ብሎ የአሰሳ ታሪክዎን እንዴት እንደሚጠቀምበት ይቆጣጠሩት።</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> ከ<ph name="SPACE_AVAILABLE" /> በመጠቀም ላይ</translation>
 <translation id="5797070761912323120">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ የእርስዎን ታሪክ ሊጠቀም ይችላል</translation>
 <translation id="5804241973901381774">ፍቃዶች</translation>
@@ -751,7 +741,6 @@
 <translation id="6441734959916820584">ስም በጣም ረጅም ነው</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# ምስል}one{# ምስሎች}other{# ምስሎች}}</translation>
 <translation id="6447842834002726250">ኩኪዎች</translation>
-<translation id="6448273550210938826">የፍለጋ እና ዩአርኤል ጥቆማዎች</translation>
 <translation id="6461962085415701688">ፋይሉን መክፈት አይቻልም</translation>
 <translation id="6464977750820128603">በChrome ውስጥ የሚጎበኟቸውን ጣቢያዎች መመልከት እና ለእነሱ ሰዓት ቆጣሪዎችን ማቀናበር ይችላሉ።\n\nGoogle ሰዓት ቆጣሪዎች ስለሚያቀናብሩላቸው ጣቢያዎች እና ለምን ያህል ርዝመት እንደሚጎበኟቸው መረጃ ያገኛል። ይህ መረጃ ዲጂታል ብቁ መሆን የተሻለ ለማድረግ ስራ ላይ ይውላል።</translation>
 <translation id="6475951671322991020">ቪድዮ አውርድ</translation>
@@ -782,7 +771,6 @@
 <translation id="6656545060687952787">Chrome መሣሪያዎችን ለመቃኘት የአካባቢ መዳረሻ ያስፈልገዋል። <ph name="BEGIN_LINK" />ፍቃዶችን ያዘምኑ<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">የይለፍ ቃል፦</translation>
 <translation id="6659594942844771486">ትር</translation>
-<translation id="666268767214822976">በአድራሻ አሞሌው ላይ እየተየቡ ሳለ ተዛማጅ መጠይቆችን ለማሳየት እና ታዋቂ ድር ጣቢያዎችን ለማሳየት የመገመቻ አገልግሎት ይጠቀሙ</translation>
 <translation id="666731172850799929">በ<ph name="APP_NAME" /> ውስጥ ክፈት</translation>
 <translation id="666981079809192359">የChrome ግላዊነት ማስታወቂያ</translation>
 <translation id="6697492270171225480">አንድ ገጽ ሊገኝ ካልቻለ የተመሳሳይ ገጾች የአስተያየት ጥቆማዎችን አሳይ</translation>
@@ -794,8 +782,10 @@
 <translation id="671481426037969117">የእርስዎ <ph name="FQDN" /> ሰዓት ቆጣሪ ጊዜ አልቋል። ነገ እንደገና ይጀመራል።</translation>
 <translation id="6738867403308150051">በማውረድ ላይ…</translation>
 <translation id="6746124502594467657">ወደታች አውርድ</translation>
+<translation id="6751888224264752704">በተጨማሪ ከዚህ መሣሪያ ላይ ይህን Chrome ውሂብ ያጽዱት</translation>
 <translation id="6766622839693428701">ለመዝጋት ወደታች ያንሸራትቱ።</translation>
 <translation id="6766758767654711248">ወደ ጣቢያ ለመሄዴ መታ ያድርጉ</translation>
+<translation id="6767294960381293877">በግማሽ ቁመቱ ላይ የተከፈተ ትር የሚጋሩ የመሣሪያዎች ዝርዝር።</translation>
 <translation id="6782111308708962316">የሦስተኛ ወገን ድር ጣቢያዎች የኩኪ ውሂብን እንዳያስቀምጡ እና እንዳያነብቡ ከልክል</translation>
 <translation id="6790428901817661496">አጫውት</translation>
 <translation id="679325081238418596">የእርስዎን ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች በሁሉም መሣሪያዎችዎ ላይ ያግኙ።</translation>
@@ -1011,7 +1001,6 @@
 <translation id="8261506727792406068">ሰርዝ</translation>
 <translation id="8266862848225348053">የሚወርድበት ቦታ</translation>
 <translation id="8274165955039650276">ውርዶችን ይመልከቱ</translation>
-<translation id="8283853025636624853">ከ<ph name="SYNC_ACCOUNT_USER_NAME" /> ጋር ማሥመር</translation>
 <translation id="8284326494547611709">መግለጫ ጽሑፎች</translation>
 <translation id="8300705686683892304">በመተግበሪያ የሚተዳደር</translation>
 <translation id="8310344678080805313">መደበኛ ትሮች</translation>
@@ -1102,7 +1091,6 @@
 <translation id="8965591936373831584">በመጠበቅ ላይ</translation>
 <translation id="8970887620466824814">የሆነ ችግር ተፈጥሯል።</translation>
 <translation id="8972098258593396643">ወደ ነባሪው አቃፊ ይውረድ?</translation>
-<translation id="8981454092730389528">የGoogle እንቅስቃሴ መቆጣጠሪያዎች</translation>
 <translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation>
 <translation id="8993760627012879038">አዲስ ትር በማንነት የማያሳውቅ ሁነታ ውስጥ ክፈት</translation>
 <translation id="8998729206196772491">በ<ph name="MANAGED_DOMAIN" /> ወደሚተዳደር መለያ እየገቡና ሙሉውን የChrome ውሂብዎ ቁጥጥር ለአስተዳዳሪው እየሰጡ ነው። የእርስዎ ውሂብ እስከመጨረሻው ከዚህ መለያ ጋር ይተሳሰራል። ከChrome ዘግቶ መውጣት ውሂብዎን ከዚህ መሣሪያ ይሰርዘዋል፣ ነገር ግን በእርስዎ የGoogle መለያ ላይ እንደተከማቸ ይቆያል።</translation>
@@ -1119,6 +1107,7 @@
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> ኪባ ወርዷል</translation>
 <translation id="9100505651305367705">የሚደገፍ ሲሆን ጽሑፎችን በተቃለለ እይታ ለማሳየት ጠይቅ</translation>
 <translation id="9100610230175265781">የይለፍ ሐረግ ያስፈልጋል</translation>
+<translation id="9104217018994036254">ትርን ለመጋራት የሚሆኑ የመሣሪያዎች ዝርዝር።</translation>
 <translation id="9133703968756164531"><ph name="ITEM_NAME" /> (<ph name="ITEM_ID" />)</translation>
 <translation id="9137013805542155359">የመጀመሪያውን አሳይ</translation>
 <translation id="9139068048179869749">ጣቢያዎች ማሳወቂያዎችን እንዲልኩ ከመፍቀድ በፊት ይጠይቅ (የሚመከር)</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index ad3ea0f..95616905 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">محو السجل وملفات تعريف الارتباط وبيانات المواقع وذاكرة التخزين المؤقت...</translation>
 <translation id="129553762522093515">المغلقة حديثًا</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - تم الإرسال من <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">‏للحصول على علامات التبويب من أجهزتك الأخرى، سجّل الدخول إلى Chrome.</translation>
 <translation id="1331212799747679585">‏يتعذَّر تحديث Chrome. يُرجى الاطِّلاع على مزيد من الخيارات</translation>
 <translation id="1332501820983677155">‏اختصارات ميزات Google Chrome</translation>
 <translation id="1360432990279830238">هل تريد تسجيل الخروج وإيقاف المزامنة؟</translation>
-<translation id="136248372334525878">يتم تحميل الصفحات بشكل مسبق لضمان تحميلها على نحو أسرع وإتاحة قراءتها بلا اتصال بالإنترنت.</translation>
 <translation id="1369915414381695676">تمت إضافة الموقع <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">لا توجد ذاكرة كافية لتنزيل المحتوى المحدد.</translation>
 <translation id="1376578503827013741">جارٍ الحوسبة...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">علامة تبويب محددة</translation>
 <translation id="194341124344773587">‏إتاحة الإذن لـ Chrome في <ph name="BEGIN_LINK" />إعدادات Android<ph name="END_LINK" /></translation>
 <translation id="1943432128510653496">حفظ كلمات المرور</translation>
-<translation id="1946005195648379376">‏التحكّم في الطريقة التي تتّبعها Google عند استخدام سجلّ التصفّح لتخصيص البحث وخدمات Google الأخرى</translation>
 <translation id="1952172573699511566">ستعرض مواقع الويب النص بلغتك المفضّلة إن أمكن.</translation>
 <translation id="1960290143419248813">‏لم تعد تحديثات Chrome متاحة لهذا الإصدار من نظام التشغيل Android</translation>
 <translation id="1966710179511230534">يُرجى تحديث تفاصيل تسجيل الدخول.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">ميزة "البحث بالنقر"</translation>
 <translation id="2079545284768500474">تراجع</translation>
 <translation id="2082238445998314030">النتيجة <ph name="RESULT_NUMBER" /> من <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">‏للحصول على محتوى مخصص اقترحته Google، سجِّلْ الدخول إلى Chrome.</translation>
 <translation id="2091887806945687916">الصوت</translation>
 <translation id="2096012225669085171">المزامنة والتخصيص على الأجهزة</translation>
 <translation id="2100273922101894616">تسجيل الدخول تلقائيًا</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">اسحب شريط التمرير إلى أن تتمكّن من قراءة هذا النص بسهولة. يجب أن يظهر النص بهذا الحجم على الأقل بعد النقر مرّتين على أي فقرة.</translation>
 <translation id="2323763861024343754">مساحة تخزين الموقع</translation>
 <translation id="2328985652426384049">تعذر تسجيل الدخول</translation>
-<translation id="2342981853652716282">‏سجّل الدخول إلى Chrome للحصول على الإشارات المرجعية وكلمات المرور والإعدادات الأخرى واستخدامها على جميع أجهزتك.</translation>
 <translation id="2349710944427398404">‏إجمالي البيانات المُستخدَمة من قِبل Chrome، بما في ذلك الحسابات والإشارات المرجعية والإعدادات المحفوظة</translation>
 <translation id="2351097562818989364">تم إعادة ضبط إعداداتك للترجمة.</translation>
 <translation id="2353636109065292463">التحقُّق من اتصال الإنترنت</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">حظر الإعلانات في بعض المواقع</translation>
 <translation id="3137521801621304719">مغادرة وضع التصفح المتخفي</translation>
 <translation id="3143515551205905069">إلغاء المزامنة</translation>
-<translation id="3148434565183091099">‏للحصول على الإشارات المرجعية على جميع أجهزتك، سجِّل الدخول إلى Chrome.</translation>
 <translation id="3157842584138209013">الاطّلاع على مقدار البيانات التي وفّرتها بالنقر على "مزيد من الخيارات"</translation>
 <translation id="3166827708714933426">اختصارات علامات التبويب والنوافذ</translation>
 <translation id="3181954750937456830">التصفُّح الآمن (يحميك ويحمي جهازك من مواقع الويب الضارة)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">يمكنك تسجيل الدخول تلقائيًا إلى مواقع الويب باستخدام بيانات الاعتماد المخزّنة. وعندما تكون هذه الميزة غير مفعّلة، سيُطلب منك التحقّق من بيانات الاعتماد في كل مرة قبل تسجيل الدخول إلى موقع ويب.</translation>
 <translation id="3658159451045945436">تؤدي إعادة الضبط إلى محو سِجلّ البيانات المحفوظة، بما في ذلك قائمة المواقع الإلكترونية التي تمت زيارتها.</translation>
 <translation id="3663367437272849150">دمج <ph name="NUM_SELECTED" /> علامة تبويب</translation>
-<translation id="3672452749423051839">اقتراحات عن الأخطاء في التنقل</translation>
 <translation id="3692944402865947621">تعذّر تنزيل <ph name="FILE_NAME" /> نظرًا لعدم إمكانية الوصول إلى موقع مساحة التخزين.</translation>
 <translation id="3714981814255182093">فتح شريط البحث</translation>
 <translation id="3716182511346448902">‏تستهلك هذه الصفحة مساحة كبيرة من الذاكرة، لذلك أوقفها Chrome مؤقتًا.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">العنوان</translation>
 <translation id="4008040567710660924">السماح لموقع ويب معيّن بتشغيل ملفات تعريف الارتباط</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{ساعة واحدة (#)}zero{# ساعة}two{ساعتان (#)}few{# ساعات}many{# ساعةً}other{# ساعة}}</translation>
-<translation id="4042870126885713738">يتم عرض اقتراحات عند تعذّر فتح عنوان ويب أو تعذّر الاتصال بالإنترنت.</translation>
 <translation id="4046123991198612571">المقطع الصوتي التالي</translation>
 <translation id="4048707525896921369">‏يمكنك معرفة معلومات عن مواضيع على المواقع الإلكترونية بدون مغادرة الصفحة. تُرسل ميزة "البحث بالنقر" الكلمة والسياق المحيط بها إلى "بحث Google" للحصول على تعريفات وصور ونتائج بحث وتفاصيل أخرى ذات الصلة بها.
 
@@ -438,7 +430,6 @@
     - وحركاتك، مثل طريقة المشي
 
     يُرجى التأكُّد من أنك تثق بهذا الموقع قبل منحه الإذن بالوصول.</translation>
-<translation id="424864128008805179">‏هل تريد تسجيل الخروج من Chrome؟</translation>
 <translation id="4256782883801055595">تراخيص البرامج المفتوحة المصدر</translation>
 <translation id="4259722352634471385">التنقل محظور: <ph name="URL" /></translation>
 <translation id="4269820728363426813">نسخ عنوان الرابط</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">هاتف</translation>
 <translation id="4384468725000734951">‏استخدام محرك Sogou للبحث</translation>
 <translation id="4404568932422911380">ليست هناك إشارات مرجعية</translation>
-<translation id="4409723563706114196">استخدام ميزة توقّع الصفحات</translation>
 <translation id="4411535500181276704">الوضع البسيط</translation>
 <translation id="4415276339145661267">‏إدارة حسابك على Google</translation>
 <translation id="4432792777822557199">ستتم ترجمة الصفحات باللغة <ph name="SOURCE_LANGUAGE" /> إلى اللغة <ph name="TARGET_LANGUAGE" /> من الآن فصاعدًا</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">‏هل تريد السماح لهذا الموقع بالوصول إلى أجهزة استشعار الواقع الافتراضي (VR)؟</translation>
 <translation id="5210286577605176222">الانتقال السريع إلى علامة التبويب السابقة</translation>
 <translation id="5210365745912300556">إغلاق علامة التبويب</translation>
-<translation id="5222676887888702881">تسجيل الخروج</translation>
 <translation id="5224771365102442243">يتضمن فيديو</translation>
 <translation id="5233638681132016545">علامة تبويب جديدة</translation>
 <translation id="526421993248218238">يتعذَّر تحميل هذه الصفحة</translation>
 <translation id="5271967389191913893">لا يمكن للجهاز فتح المحتوى لتنزيله</translation>
 <translation id="528192093759286357">اسحب من الجزء العلوي والمس زر الرجوع للخروج من وضع ملء الشاشة.</translation>
-<translation id="5284584623296338184">‏لن تتم بعد الآن مزامنة التغييرات التي تطرأ على الإشارات المرجعية والسجلّ وكلمات المرور وغيرها من الإعدادات مع حسابك على Google، ولكن ستظل بياناتك الحالية مخزّنة في حسابك على Google.</translation>
 <translation id="5292796745632149097">إرسال إلى</translation>
 <translation id="5300589172476337783">عرض</translation>
 <translation id="5301954838959518834">حسنًا</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">علامات تبويب التصفح المتخفي</translation>
 <translation id="5763514718066511291">‏النقر لنسخ عنوان URL لهذا التطبيق</translation>
 <translation id="5765780083710877561">الوصف:</translation>
-<translation id="5777170031995031090">‏التحكّم في الطريقة التي تتّبعها Google عند استخدام سجلّ التصفّح لتخصيص البحث والإعلانات وخدمات Google الأخرى</translation>
 <translation id="5793665092639000975">يتم استخدام <ph name="SPACE_USED" /> من أصل <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">‏قد تستخدم Google سجلّك لتخصيص البحث والإعلانات وخدمات Google الأخرى.</translation>
 <translation id="5804241973901381774">الأذونات</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">الاسم طويل جدًا</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{صورة واحدة (#)}zero{# صورة}two{صورتان (#)}few{# صور}many{# صورةً}other{# صورة}}</translation>
 <translation id="6447842834002726250">ملفّات تعريف الارتباط</translation>
-<translation id="6448273550210938826">‏اقتراحات عن طلبات البحث وعناوين URL</translation>
 <translation id="6461962085415701688">يتعذر فتح الملف</translation>
 <translation id="6464977750820128603">‏يمكنك الاطِّلاع على مواقع الويب التي تزورها في Chrome وتحديد موقِّتات لها.\n\nتحصل Google على معلومات عن مواقع الويب التي ضبطت موقِّتات لها ومدة زيارتك لها. تُستخدم هذه المعلومات لتحسين الرفاهية الرقمية.</translation>
 <translation id="6475951671322991020">تنزيل الفيديو</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">‏يحتاج Chrome للوصول إلى المواقع للبحث عن الأجهزة. <ph name="BEGIN_LINK" />تحديث الأذونات<ph name="END_LINK" />.</translation>
 <translation id="6657585470893396449">كلمة المرور</translation>
 <translation id="6659594942844771486">علامة تبويب</translation>
-<translation id="666268767214822976">يمكنك استخدام خدمة التوقّعات لعرض طلبات البحث ذات الصلة ومواقع الويب الشائعة أثناء الكتابة في شريط العناوين.</translation>
 <translation id="666731172850799929">الفتح في <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">‏إشعار خصوصية Chrome</translation>
 <translation id="6697492270171225480">عرض اقتراحات للصفحات المشابهة عند تعذّر العثور على صفحة</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8266862848225348053">موقع التنزيل</translation>
 <translation id="8274165955039650276">الاطِّلاع على التنزيلات</translation>
-<translation id="8283853025636624853">تتم المزامنة مع <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">الترجمة والشرح</translation>
 <translation id="8300705686683892304">تتم الإدارة من خلال التطبيق</translation>
 <translation id="8310344678080805313">علامات التبويب القياسية</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">في الانتظار</translation>
 <translation id="8970887620466824814">حدث خطأ.</translation>
 <translation id="8972098258593396643">هل تريد التنزيل إلى المجلد التلقائي؟</translation>
-<translation id="8981454092730389528">‏عناصر التحكم في النشاط على Google</translation>
 <translation id="8986494364107987395">‏إرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation>
 <translation id="8993760627012879038">فتح علامة تبويب جديدة في وضع التصفّح المتخفّي</translation>
 <translation id="8998729206196772491">‏يتم تسجيل دخولك باستخدام حساب تتم إدارته من خلال <ph name="MANAGED_DOMAIN" /> ومنح مشرفه الحق في التحكم في بياناتك على Chrome. سيؤدي ذلك إلى جعل بياناتك مرتبطة دائمًا بهذا الحساب. كما سيؤدي الخروج من Chrome إلى حذف بياناتك من هذا الجهاز، ولكن ستظل هذه البيانات مخزَّنة على حسابك في Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
index 53772a9..589c3cc1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Изчистване на историята, „бисквитките“, данните за сайтове и кеша…</translation>
 <translation id="129553762522093515">Наскоро затворени</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Изпратено от <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Влезте в Chrome, за да получите разделите си от другите си устройства.</translation>
 <translation id="1331212799747679585">Chrome не може да се актуализира. Още опции</translation>
 <translation id="1332501820983677155">Комбинации за функции на Google Chrome</translation>
 <translation id="1360432990279830238">Изход и изключване на синхронизирането?</translation>
-<translation id="136248372334525878">Предварително зареждане на страниците с цел по-бързо отваряне и четене офлайн</translation>
 <translation id="1369915414381695676">Сайтът <ph name="SITE_NAME" /> е добавен</translation>
 <translation id="1373696734384179344">Недостатъчно памет за изтегляне на избраното съдържание.</translation>
 <translation id="1376578503827013741">Изчислява се…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Избран раздел</translation>
 <translation id="194341124344773587">Включете разрешението за Chrome от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Запазени пароли</translation>
-<translation id="1946005195648379376">Контролирайте начина, по който използваме историята ви на сърфиране, за да персонализираме търсенето и други услуги на Google.</translation>
 <translation id="1952172573699511566">Когато е възможно, текстът на уебсайтовете ще се показва на предпочитания от вас език.</translation>
 <translation id="1960290143419248813">Актуализациите на Chrome вече не се поддържат за тази версия на Android</translation>
 <translation id="1966710179511230534">Моля, актуализирайте данните си за вход.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Търсене с докосване</translation>
 <translation id="2079545284768500474">Отмяна</translation>
 <translation id="2082238445998314030">Резултат <ph name="RESULT_NUMBER" /> от <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">За да получавате персонализирано съдържание, предлагано от Google, влезте в Chrome.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизиране и персонализиране на всички устройства</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Преместете плъзгача, докато можете да четете удобно това. Текстът трябва да изглежда поне толкова голям след двукратно докосване на абзац.</translation>
 <translation id="2323763861024343754">Данни от сайтове</translation>
 <translation id="2328985652426384049">Влизането в профила не е възможно</translation>
-<translation id="2342981853652716282">Влезте в Chrome, за да получите отметките, паролите и др. на всичките си устройства.</translation>
 <translation id="2349710944427398404">Общо място в хранилището, което се използва от Chrome, включително за профили, отметки и запазени настройки</translation>
 <translation id="2351097562818989364">Настройките ви за превод са нулирани.</translation>
 <translation id="2353636109065292463">Връзката с интернет се проверява</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Блокиране на някои сайтове</translation>
 <translation id="3137521801621304719">Напускане на режима „инкогнито“</translation>
 <translation id="3143515551205905069">Анулиране на синхронизирането</translation>
-<translation id="3148434565183091099">Влезте в Chrome, за да получите отметките си на всичките си устройства.</translation>
 <translation id="3157842584138209013">Използвайте бутона „Още опции“, за да видите колко данни сте спестили</translation>
 <translation id="3166827708714933426">Комбинации за раздели и прозорци</translation>
 <translation id="3181954750937456830">„Безопасно сърфиране“ (защитава вас и устройството ви от опасни сайтове)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Автоматично влизане в уебсайтове посредством съхранявани идентификационни данни. Когато функцията е изключена, ще трябва да потвърждавате всяко влизане в профил в уебсайт.</translation>
 <translation id="3658159451045945436">Така ще изтриете историята на спестените данни, включително списъка с посетени сайтове.</translation>
 <translation id="3663367437272849150">Групиране на <ph name="NUM_SELECTED" /> раздела.</translation>
-<translation id="3672452749423051839">Предложения в случай на грешки при сърфиране</translation>
 <translation id="3692944402865947621">Изтеглянето на <ph name="FILE_NAME" /> не бе успешно, тъй като няма достъп до местоположението за съхранение.</translation>
 <translation id="3714981814255182093">Отваряне на лентата за търсене</translation>
 <translation id="3716182511346448902">Тази страница използва твърде много памет, така че Chrome я постави на пауза.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Заглавие</translation>
 <translation id="4008040567710660924">Разрешаване на „бисквитките“ за конкретен сайт.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ч}other{# ч}}</translation>
-<translation id="4042870126885713738">Показване на предложения, когато даден уеб адрес не може да бъде преобразуван или не може да бъде осъществена връзка</translation>
 <translation id="4046123991198612571">Следващ запис</translation>
 <translation id="4048707525896921369">Научавайте за темите в уебсайтовете, без да напускате страницата. Функцията за търсене с докосване изпраща до Google Търсене определени думи и заобикалящия ги текст и така извежда определения, снимки, резултати и други подробности.
 
@@ -438,7 +430,6 @@
 – движения, например походката ви.
 
 Разрешете достъп на този сайт само ако му имате доверие.</translation>
-<translation id="424864128008805179">Искате ли да излезете от Chrome?</translation>
 <translation id="4256782883801055595">Лицензи за отворен код</translation>
 <translation id="4259722352634471385">Навигирането е блокирано: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Копиране на адреса на връзката</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">За търсене ще се използва Sogou</translation>
 <translation id="4404568932422911380">Няма отметки</translation>
-<translation id="4409723563706114196">Използване на предвижданията за страници</translation>
 <translation id="4411535500181276704">Олекотен режим</translation>
 <translation id="4415276339145661267">Управление на профила ви в Google</translation>
 <translation id="4432792777822557199">От сега нататък страниците на <ph name="SOURCE_LANGUAGE" /> ще се превеждат на <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Да се разреши ли достъпът на този сайт до сензорите за VR?</translation>
 <translation id="5210286577605176222">Преминаване към предишния раздел</translation>
 <translation id="5210365745912300556">Затваряне на раздела</translation>
-<translation id="5222676887888702881">Изход</translation>
 <translation id="5224771365102442243">С видеоклип</translation>
 <translation id="5233638681132016545">Нов раздел</translation>
 <translation id="526421993248218238">Тази страница не може да се зареди</translation>
 <translation id="5271967389191913893">Устройството не може да отвори съдържанието за изтегляне.</translation>
 <translation id="528192093759286357">Плъзнете пръст от горната част на екрана и докоснете бутона за връщане назад, за да излезете от режима на цял екран.</translation>
-<translation id="5284584623296338184">Промените в отметките, историята, паролите и другите ви настройки вече няма да се синхронизират с профила ви в Google. Съществуващите ви данни обаче ще продължат да се съхраняват в него.</translation>
 <translation id="5292796745632149097">Изпращане до</translation>
 <translation id="5300589172476337783">Показване</translation>
 <translation id="5301954838959518834">Добре, разбрах</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Раздели в режим „инкогнито“</translation>
 <translation id="5763514718066511291">Докоснете, за да копирате URL адреса за това приложение</translation>
 <translation id="5765780083710877561">Описание:</translation>
-<translation id="5777170031995031090">Контролирайте начина, по който използваме историята ви на сърфиране, за да персонализираме търсенето, рекламите и други услуги на Google.</translation>
 <translation id="5793665092639000975">Използвано място: <ph name="SPACE_USED" /> от <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Възможно е да използваме историята ви, за да персонализираме търсенето, рекламите и други услуги на Google</translation>
 <translation id="5804241973901381774">Разрешения</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Името е твърде дълго</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# изображение}other{# изображения}}</translation>
 <translation id="6447842834002726250">„Бисквитки“</translation>
-<translation id="6448273550210938826">Предложения за търсене и за URL адреси</translation>
 <translation id="6461962085415701688">Файлът не може да бъде отворен</translation>
 <translation id="6464977750820128603">Можете да преглеждате сайтовете, които посещавате в Chrome, и да задавате таймери за тях.\n\nGoogle получава информация относно сайтовете, за които задавате таймери, и продължителността на посещенията ви. Тези данни се използват за подобряването на „Дигитално благополучие“.</translation>
 <translation id="6475951671322991020">Изтегляне на видеоклипа</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome се нуждае от достъп до местоположението, за да сканира за устройства. <ph name="BEGIN_LINK" />Актуализиране на разрешенията<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Парола</translation>
 <translation id="6659594942844771486">Раздел</translation>
-<translation id="666268767214822976">Използване на услуга за предвиждания за показване на сродни заявки и популярни уебсайтове, докато пишете в адресната лента</translation>
 <translation id="666731172850799929">Отваряне в <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Съобщение за поверителност на Chrome</translation>
 <translation id="6697492270171225480">Показване на предложения за подобни страници, когато дадена страница не може да бъде намерена</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Изтриване</translation>
 <translation id="8266862848225348053">Местоположение за изтеглянията</translation>
 <translation id="8274165955039650276">Преглед на изтеглянията</translation>
-<translation id="8283853025636624853">Синхронизира се със: <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Надписи</translation>
 <translation id="8300705686683892304">Управлявани от приложение</translation>
 <translation id="8310344678080805313">Стандартни раздели</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">изчаква</translation>
 <translation id="8970887620466824814">Нещо се обърка.</translation>
 <translation id="8972098258593396643">Да се изтегли ли файлът в стандартната папка?</translation>
-<translation id="8981454092730389528">Контроли за активността в Google</translation>
 <translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation>
 <translation id="8993760627012879038">Отваряне на нов раздел в режим „инкогнито“</translation>
 <translation id="8998729206196772491">Влизате с профил, управляван от <ph name="MANAGED_DOMAIN" />, и предоставяте на администратора му контрол върху данните си в Chrome. Те ще се свържат за постоянно с този профил. При излизане от профила в браузъра информацията ви ще се изтрие от устройството, но ще продължи да се съхранява в профила ви в Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
index 3a166080..2aeb0c1e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ইতিহাস, কুকিজ, সাইট ডেটা, ক্যাশে সাফ করে...</translation>
 <translation id="129553762522093515">সম্প্রতি বন্ধ হয়েছে</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> থেকে পাঠানো হয়েছে</translation>
-<translation id="1326317727527857210">আপনার অন্য ডিভাইসগুলি থেকে আপনার ট্যাবগুলি পেতে, Chrome-এ সাইন-ইন করুন।</translation>
 <translation id="1331212799747679585">Chrome আপডেট হচ্ছে না। আরও বিকল্প</translation>
 <translation id="1332501820983677155">Google Chrome এর বাছাই করা শর্টকাটগুলি</translation>
 <translation id="1360432990279830238">সাইন-আউট করে সিঙ্ক বন্ধ করবেন?</translation>
-<translation id="136248372334525878">দ্রুত লোডিং এবং অফলাইনে পড়ার জন্য পৃষ্ঠাটি আগে লোড করুন</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> সাইট যোগ করা হয়েছে</translation>
 <translation id="1373696734384179344">নির্বাচিত কন্টেন্ট ডাউনলোড করার জন্য যথেষ্ট মেমরি নেই৷</translation>
 <translation id="1376578503827013741">গণনা করছে...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">নির্বাচিত ট্যাবগুলি</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android সেটিংসে<ph name="END_LINK" /> Chrome এর জন্য অনুমতি চালু করুন।</translation>
 <translation id="1943432128510653496">পাসওয়ার্ডগুলি সেভ করুন</translation>
-<translation id="1946005195648379376">সার্চ এবং অন্যান্য Google পরিষেবা নিজের মতো করতে Google কিভাবে আপনার ব্রাউজিং ইতিহাস ব্যবহার করে তা নিয়ন্ত্রণ করুন।</translation>
 <translation id="1952172573699511566">যখন সম্ভব হবে ওয়েবসাইট আপনার পছন্দের ভাষায় টেক্সট দেখাবে।</translation>
 <translation id="1960290143419248813">Android-এর এই ভার্সনে Chrome আপডেট করা আর সম্ভব নয়</translation>
 <translation id="1966710179511230534">অনুগ্রহ করে আমার সাইন-ইন বিবরণ আপডেট করুন।</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">সার্চ করতে আলতো চাপুন</translation>
 <translation id="2079545284768500474">আগের অবস্থায় ফিরুন</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> এর মধ্যে <ph name="RESULT_NUMBER" /> টি ফলাফল</translation>
-<translation id="2086652334978798447">Google-এর প্রস্তাবিত নিজের মতো করা কন্টেন্ট পেতে, Chrome-এ সাইন-ইন করুন।</translation>
 <translation id="2091887806945687916">আওয়াজ</translation>
 <translation id="2096012225669085171">বিভিন্ন ডিভাইস জুড়ে সিঙ্ক এবং ব্যক্তিগতকৃত করুন</translation>
 <translation id="2100273922101894616">অটো সাইন-ইন</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">আপনি এটি স্বচ্ছন্দে পড়তে না পারা পর্যন্ত স্লাইডারটি টেনে আনুন৷ কোনো অনুচ্ছেদে দুবার-আলতো চাপার পরে পাঠ্যটিকে দেখতে অন্ততপক্ষে এইরকম বড় লাগা উচিত৷</translation>
 <translation id="2323763861024343754">সাইটের স্টোরেজ</translation>
 <translation id="2328985652426384049">সাইন ইন করতে পারছেন না</translation>
-<translation id="2342981853652716282">আপনার বুকমার্ক, পাসওয়ার্ড এবং অন্যান্য জিনিস আপনার সমস্ত ডিভাইসে পেতে Chrome-এ সাইন-ইন করুন।</translation>
 <translation id="2349710944427398404">অ্যাকাউন্ট, ​​বুকমার্ক এবং স্টোর করা সেটিংসসহ Chrome-এর ব্যবহার করা মোট ডেটা</translation>
 <translation id="2351097562818989364">আপনার অনুবাদ সেটিংস রিসেট করা হয়েছে৷</translation>
 <translation id="2353636109065292463">আপনার ইন্টারনেট কানেকশন ঠিক আছে কিনা সেটি দেখা হচ্ছে</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">কিছু সাইটে ব্লক করা হয়েছে</translation>
 <translation id="3137521801621304719">ছদ্মবেশী মোড ছেড়ে যান</translation>
 <translation id="3143515551205905069">সিঙ্ক বাতিল করুন</translation>
-<translation id="3148434565183091099">সব ডিভাইসে আপনার বুকমার্কগুলি পেতে Chrome-এ সাইন-ইন করুন।</translation>
 <translation id="3157842584138209013">আরও বিকল্প বোতাম দিয়ে দেখুন আপনি কত ডেটা সাশ্রয় করেছেন</translation>
 <translation id="3166827708714933426">ট্যাব এবং উইন্ডোর শর্টকাটগুলি</translation>
 <translation id="3181954750937456830">নিরাপদ ব্রাউজিং (বিপজ্জনক সাইট থেকে আপনাকে এবং আপনার ডিভাইসকে রক্ষা করে)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">সঞ্চিত ক্রেডেনশিয়াল ব্যবহার করে ওয়েবসাইটগুলিতে অটোমেটিক সাইন-ইন। যখন বৈশিষ্ট্যটি বন্ধ করা থাকে, তখন প্রতিবারই একটি ওয়েবসাইটে সাইন-ইন করার সময় আপনাকে যাচাইকরণের জন্য বলা হবে।</translation>
 <translation id="3658159451045945436">রিসেট করলে আপনার ঘুরে দেখা সাইট সহ আপনার ডেটা সেভিংয়ের ইতিহাস মুছে দেয়।</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" />টি ট্যাব গ্রুপ করুন।</translation>
-<translation id="3672452749423051839">নেভিগেশান ত্রুটির পরামর্শগুলি</translation>
 <translation id="3692944402865947621">স্টোর করার জায়গা খুঁজে না পাওয়ায় <ph name="FILE_NAME" /> ডাউনলোড করা যায়নি।</translation>
 <translation id="3714981814255182093">খুঁজুন দণ্ডটি খুলুন</translation>
 <translation id="3716182511346448902">এই পৃষ্ঠাটি খুব বেশি মেমরি ব্যবহার করছে তাই Chrome এটি বিরত রেখেছে।</translation>
@@ -406,7 +399,6 @@
 <translation id="4002066346123236978">শিরোনাম</translation>
 <translation id="4008040567710660924">কোনও নির্দিষ্ট সাইটের জন্য কুকিকে অনুমতি দিন।</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ঘণ্টা}one{# ঘণ্টা}other{# ঘণ্টা}}</translation>
-<translation id="4042870126885713738">যখন কোনো ওয়েব ঠিকানা সমাধান করা না গেলে অথবা কোনো সংযোগ স্থাপন করা না গেলে সেক্ষেত্রে প্রস্তাবগুলি দেখান</translation>
 <translation id="4046123991198612571">পরবর্তী ট্র্যাক</translation>
 <translation id="4048707525896921369">পৃষ্ঠাতে থাকাকালীন ওয়েবসাইটে গিয়ে বিষয়গুলি সম্পর্কে জানুন। 'সার্চ করতে ট্যাপ করা' বৈশিষ্ট্যটি একটি শব্দ এবং এটির সাথে সম্পর্কযুক্ত প্রসঙ্গ Google সার্চে পাঠায়, তার সাথে সংজ্ঞা, ছবি, সার্চ ফলাফল এবং আরও অনেক কিছু দেখায়৷
 
@@ -440,7 +432,6 @@
     - আপনার গতিবিধি, যেমন আপনি কেমন করে হাঁটেন
 
     অ্যাক্সেসের অনুমতি দেওয়ার আগে সাইটটি বিশ্বস্ত কিনা দেখে নিতে ভুলবেন না।</translation>
-<translation id="424864128008805179">Chrome থেকে সাইন-আউট করবেন?</translation>
 <translation id="4256782883801055595">ওপেন সোর্স লাইসেন্স</translation>
 <translation id="4259722352634471385">নেভিগেশন অবরুদ্ধ করা হয়েছে: <ph name="URL" /></translation>
 <translation id="4269820728363426813">লিঙ্ক অ্যাড্রেস কপি করুন</translation>
@@ -454,7 +445,6 @@
 <translation id="4378154925671717803">ফোন</translation>
 <translation id="4384468725000734951">সার্চের জন্য Sogou কে ব্যবহার করছে</translation>
 <translation id="4404568932422911380">কোনও বুকমার্ক নেই</translation>
-<translation id="4409723563706114196">পৃষ্ঠার প্রস্তাবনা ব্যবহার করুন</translation>
 <translation id="4411535500181276704">লাইট মোড</translation>
 <translation id="4415276339145661267">আপনার Google অ্যাকাউন্ট ম্যানেজ করুন</translation>
 <translation id="4432792777822557199">এখন থেকে <ph name="SOURCE_LANGUAGE" /> ভাষার পৃষ্ঠাগুলিকে <ph name="TARGET_LANGUAGE" /> ভাষায় অনুবাদ করা হবে</translation>
@@ -579,13 +569,11 @@
 <translation id="5202089186707505116">এই সাইটকে আপনার ভিআর সেন্সর অ্যাক্সেস করার অনুমতি দিতে চান?</translation>
 <translation id="5210286577605176222">পূর্ববর্তী ট্যাবে চলে যান</translation>
 <translation id="5210365745912300556">ট্যাব বন্ধ করুন</translation>
-<translation id="5222676887888702881">সাইন-আউট করুন</translation>
 <translation id="5224771365102442243">ভিডিও এর সাথে</translation>
 <translation id="5233638681132016545">নতুন ট্যাব</translation>
 <translation id="526421993248218238">পৃষ্ঠাটি লোড করা যাচ্ছে না</translation>
 <translation id="5271967389191913893">ডাউনলোড করা কন্টেন্ট ডিভাইস খুলতে পারবে না৷</translation>
 <translation id="528192093759286357">উপর থেকে টেনে আনুন এবং পূর্ণ স্ক্রিন থেকে বেরিয়ে যেতে পিছনে ফেরার বোতাম স্পর্শ করুন।</translation>
-<translation id="5284584623296338184">আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংসে করা পরিবর্তন আর আপনার Google অ্যাকাউন্টের সাথে সিঙ্ক করা হবে না। অবশ্য, আপনার বর্তমান ডেটা আপনার Google অ্যাকাউন্টে সঞ্চিত থাকবে।</translation>
 <translation id="5292796745632149097">এতে পাঠান:</translation>
 <translation id="5300589172476337783">দেখান</translation>
 <translation id="5301954838959518834">ঠিক আছে, বুঝেছি</translation>
@@ -662,7 +650,6 @@
 <translation id="5763382633136178763">ছদ্মবেশী ট্যাব</translation>
 <translation id="5763514718066511291">এই অ্যাপের ইউআরএল কপি করতে ট্যাপ করুন</translation>
 <translation id="5765780083710877561">বর্ণনা:</translation>
-<translation id="5777170031995031090">সার্চ, বিজ্ঞাপন এবং অন্যান্য Google পরিষেবা নিজের মতো করতে Google কিভাবে আপনার ব্রাউজিং ইতিহাস ব্যবহার করে তা নিয়ন্ত্রণ করুন।</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> এর <ph name="SPACE_USED" /> ব্যবহার করা হচ্ছে</translation>
 <translation id="5797070761912323120">সার্চ, বিজ্ঞাপন এবং অন্যান্য Google পরিষেবাকে আপনার মতো করে সাজিয়ে নিতে Google আপনার ইতিহাস ব্যবহার করতে পারে</translation>
 <translation id="5804241973901381774">অনুমতিগুলি</translation>
@@ -756,7 +743,6 @@
 <translation id="6441734959916820584">নামটি অত্যন্ত দীর্ঘ</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{#টি ছবি}one{#টি ছবি}other{#টি ছবি}}</translation>
 <translation id="6447842834002726250">কুকিজ</translation>
-<translation id="6448273550210938826">সার্চ এবং URL পরামর্শগুলি</translation>
 <translation id="6461962085415701688">ফাইল খোলা যাচ্ছে না</translation>
 <translation id="6464977750820128603">Chrome-এ দেখা সাইটগুলি আপনি দেখতে পাবেন এবং সাইটগুলিতে টাইমার সেট করতে পারবেন।\n\nযে সমস্ত সাইটে টাইমার সেট করেছেন বা কত সময় ধরে সাইটটি দেখেছেন তার সমস্ত তথ্য Google-এর কাছে যায়। ডিজিটাল ওয়েলবিং-কে আরও উন্নত করতে এই তথ্য ব্যবহার করা হয়।</translation>
 <translation id="6475951671322991020">ভিডিও ডাউনলোড করুন</translation>
@@ -787,7 +773,6 @@
 <translation id="6656545060687952787">ডিভাইস স্ক্যান করার জন্য Chrome এর স্থান এক্সেস প্রয়োজন। <ph name="BEGIN_LINK" />অনুমতি আপডেট করুন<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">পাসওয়ার্ড</translation>
 <translation id="6659594942844771486">ট্যাব</translation>
-<translation id="666268767214822976">সম্পর্কিত কোয়েরি এবং অ্যাড্রেস বারের মধ্যে আপনার টাইপ করা জনপ্রিয় ওয়েবসাইটগুলি দেখাতে একটি পূর্বাভাস পরিষেবা ব্যবহার করুন</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> এ খুলুন</translation>
 <translation id="666981079809192359">Chrome এর গোপনীয়তা বিজ্ঞপ্তি</translation>
 <translation id="6697492270171225480">কোনও একটি পৃষ্ঠা খুঁজে পাওয়া না গেলে একইরকম আরও পৃষ্ঠার সাজেশন দেখুন</translation>
@@ -1018,7 +1003,6 @@
 <translation id="8261506727792406068">মুছুন</translation>
 <translation id="8266862848225348053">যেখানে ডাউনলোড হবে</translation>
 <translation id="8274165955039650276">ডাউনলোড দেখুন</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> এ সিঙ্ক হচ্ছে</translation>
 <translation id="8284326494547611709">পরিচয়লিপিগুলি</translation>
 <translation id="8300705686683892304">অ্যাপ ম্যানেজ করে</translation>
 <translation id="8310344678080805313">স্ট্যান্ডার্ড ট্যাব</translation>
@@ -1109,7 +1093,6 @@
 <translation id="8965591936373831584">বাকি আছে</translation>
 <translation id="8970887620466824814">কিছু সমস্যা হয়েছে।</translation>
 <translation id="8972098258593396643">ডিফল্ট ফোল্ডারে ডাউনলোড করবেন?</translation>
-<translation id="8981454092730389528">Google অ্যাক্টিভিটির নিয়ন্ত্রণগুলি</translation>
 <translation id="8986494364107987395">ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি স্বয়ংক্রিয়ভাবে Google-এ পাঠান</translation>
 <translation id="8993760627012879038">ছদ্মবেশী মোডে একটি নতুন ট্যাব খুলুন</translation>
 <translation id="8998729206196772491">আপনি <ph name="MANAGED_DOMAIN" /> দ্বারা পরিচালিত একটি অ্যাকাউন্টের মাধ্যমে সাইন-ইন করছেন এবং এর অ্যাডমিনিস্ট্রেটরকে আপনার Chrome ডেটা নিয়ন্ত্রণ করতে দিচ্ছেন৷ আপনার ডেটা এই অ্যাকাউন্টের সাথে স্থায়ীভাবে আবদ্ধ হবে৷ Chrome থেকে সাইন-আউট করলে এই ডিভাইস থেকে আপনার ডেটা মুছে ফেলা হবে, কিন্তু এটা আপনার Google অ্যাকাউন্টে সঞ্চিত থাকবে।</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
index bd7306da..791f4e95 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Esborra l'historial, les galetes, les dades dels llocs web, la memòria cau, etc.</translation>
 <translation id="129553762522093515">Tancades recentment</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: s'ha enviat des del dispositiu <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Inicia la sessió a Chrome per accedir a les pestanyes dels altres dispositius que tinguis.</translation>
 <translation id="1331212799747679585">No es pot actualitzar Chrome. Més opcions</translation>
 <translation id="1332501820983677155">Dreceres per a funcions de Google Chrome</translation>
 <translation id="1360432990279830238">Vols tancar la sessió i desactivar la sincronització?</translation>
-<translation id="136248372334525878">Carrega les pàgines prèviament perquè es mostrin més ràpid i per poder llegir-les sense connexió</translation>
 <translation id="1369915414381695676">El lloc <ph name="SITE_NAME" /> s'ha afegit</translation>
 <translation id="1373696734384179344">No hi ha prou memòria per baixar el contingut seleccionat.</translation>
 <translation id="1376578503827013741">S'està calculant…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Pestanya seleccionada</translation>
 <translation id="194341124344773587">Activa el permís per a Chrome a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Desa les contrasenyes</translation>
-<translation id="1946005195648379376">Controla com Google utilitza l'historial de navegació per personalitzar la Cerca i altres serveis de Google.</translation>
 <translation id="1952172573699511566">Quan sigui possible, els llocs web mostraran el text en el teu idioma preferit.</translation>
 <translation id="1960290143419248813">Aquesta versió d'Android ja no admet les actualitzacions de Chrome</translation>
 <translation id="1966710179511230534">Actualitzeu les dades d'inici de sessió.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Toca per cercar</translation>
 <translation id="2079545284768500474">Desfés</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Inicia la sessió a Chrome perquè Google et suggereixi contingut personalitzat</translation>
 <translation id="2091887806945687916">So</translation>
 <translation id="2096012225669085171">Sincronitza i personalitza el contingut en tots els dispositius</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Arrossega el control lliscant fins que puguis llegir aquest text còmodament. El text ha de ser almenys així de gran després de tocar dos cops un paràgraf.</translation>
 <translation id="2323763861024343754">Emmagatzematge del lloc web</translation>
 <translation id="2328985652426384049">No es pot iniciar la sessió</translation>
-<translation id="2342981853652716282">Inicia la sessió a Chrome per accedir a les adreces d'interès, les contrasenyes i altres continguts des de tots els teus dispositius.</translation>
 <translation id="2349710944427398404">Dades totals utilitzades per Chrome, com ara comptes, adreces d'interès i opcions de configuració desades</translation>
 <translation id="2351097562818989364">S'ha restablert la configuració del Traductor.</translation>
 <translation id="2353636109065292463">S'està comprovant la connexió a Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloquejat en alguns llocs web</translation>
 <translation id="3137521801621304719">Surt del mode d'incògnit</translation>
 <translation id="3143515551205905069">Cancel·la la sincronització</translation>
-<translation id="3148434565183091099">Inicia la sessió a Chrome per accedir a les adreces d'interès des de tots els dispositius.</translation>
 <translation id="3157842584138209013">Consulta la quantitat de dades que has estalviat des del botó Més opcions</translation>
 <translation id="3166827708714933426">Dreceres per a pestanyes i finestres</translation>
 <translation id="3181954750937456830">Navegació segura (et protegeix a tu i al teu dispositiu de llocs web perillosos)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Inicia la sessió automàticament als llocs web amb les credencials emmagatzemades. Si la funció està desactivada, se us demana sempre que les verifiqueu per iniciar la sessió en un lloc web.</translation>
 <translation id="3658159451045945436">Si el restableixes, s'esborrarà l'historial de l'estalvi de dades, inclosa la llista de llocs web visitats.</translation>
 <translation id="3663367437272849150">Agrupa <ph name="NUM_SELECTED" /> pestanyes.</translation>
-<translation id="3672452749423051839">Suggeriments d'errors de navegació</translation>
 <translation id="3692944402865947621">No s'ha pogut baixar <ph name="FILE_NAME" /> perquè no es pot trobar la ubicació d'emmagatzematge.</translation>
 <translation id="3714981814255182093">Obre la Barra de cerca</translation>
 <translation id="3716182511346448902">Com que aquesta pàgina fa servir massa memòria, Chrome l'ha posat en pausa.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Títol</translation>
 <translation id="4008040567710660924">Permet les galetes d'un lloc web concret.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Mostra suggeriments quan no es resol una adreça web o quan no es pot establir una connexió</translation>
 <translation id="4046123991198612571">Pista següent</translation>
 <translation id="4048707525896921369">Obtén informació sobre temes dels llocs web sense sortir de la pàgina. La funció Toca per cercar envia una paraula i el context que l'envolta a la Cerca de Google i torna definicions, imatges, resultats de la cerca i altres detalls.
 
@@ -438,7 +430,6 @@
     - els teus moviments, com ara la manera de caminar
 
     Assegura't que confies en aquest lloc web abans de donar-li accés.</translation>
-<translation id="424864128008805179">Vols tancar la sessió de Chrome?</translation>
 <translation id="4256782883801055595">Llicències de programari lliure</translation>
 <translation id="4259722352634471385">S'ha bloquejat la navegació: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copia l'adreça de l'enllaç</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telèfon</translation>
 <translation id="4384468725000734951">S'utilitza Sogou per a la cerca</translation>
 <translation id="4404568932422911380">Cap adreça d'interès</translation>
-<translation id="4409723563706114196">Utilitza les prediccions de pàgines</translation>
 <translation id="4411535500181276704">Mode bàsic</translation>
 <translation id="4415276339145661267">Gestiona el teu Compte de Google</translation>
 <translation id="4432792777822557199">A partir d'ara, les pàgines en <ph name="SOURCE_LANGUAGE" /> es traduiran a <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Vols permetre que aquest lloc web accedeixi als teus sensors de realitat virtual?</translation>
 <translation id="5210286577605176222">Ves a la pestanya anterior</translation>
 <translation id="5210365745912300556">Tanca la pestanya</translation>
-<translation id="5222676887888702881">Tanca la sessió</translation>
 <translation id="5224771365102442243">Amb vídeo</translation>
 <translation id="5233638681132016545">Pestanya nova</translation>
 <translation id="526421993248218238">No es pot carregar aquesta pàgina</translation>
 <translation id="5271967389191913893">El dispositiu no pot obrir el contingut que s'ha de baixar.</translation>
 <translation id="528192093759286357">Arrossegueu la pantalla des de la part superior i toqueu el botó Enrere per sortir de la pantalla completa.</translation>
-<translation id="5284584623296338184">Els canvis que es facin a les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració es deixaran de sincronitzar amb el Compte de Google. No obstant això, les dades actuals hi continuaran emmagatzemades.</translation>
 <translation id="5292796745632149097">Envia a</translation>
 <translation id="5300589172476337783">Mostra</translation>
 <translation id="5301954838959518834">D'acord</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Pestanyes d'incògnit</translation>
 <translation id="5763514718066511291">Toca per copiar l'URL d'aquesta aplicació</translation>
 <translation id="5765780083710877561">Descripció:</translation>
-<translation id="5777170031995031090">Controla com Google utilitza l'historial de navegació per personalitzar la Cerca, els anuncis i altres serveis de Google.</translation>
 <translation id="5793665092639000975">S'estan utilitzant <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">És possible que Google utilitzi el teu historial per personalitzar la Cerca, els anuncis i altres serveis de Google</translation>
 <translation id="5804241973901381774">Permisos</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">El nom és massa llarg</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# imatge}other{# imatges}}</translation>
 <translation id="6447842834002726250">Galetes</translation>
-<translation id="6448273550210938826">Suggeriments de cerca i d'URL</translation>
 <translation id="6461962085415701688">El fitxer no es pot obrir</translation>
 <translation id="6464977750820128603">Pots veure els llocs web que visites a Chrome i establir-hi temporitzadors.\n\nGoogle obté informació sobre els llocs web en què estableixes temporitzadors i sobre el temps que hi passes. Aquesta informació s'utilitza per millorar Benestar digital.</translation>
 <translation id="6475951671322991020">Baixa el vídeo</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome necessita accedir a la ubicació per poder cercar dispositius. <ph name="BEGIN_LINK" />Actualitza els permisos<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Contrasenya</translation>
 <translation id="6659594942844771486">Pestanya</translation>
-<translation id="666268767214822976">Utilitza un servei de predicció per mostrar consultes relacionades i llocs web populars mentre escrius a la barra d'adreces</translation>
 <translation id="666731172850799929">Obre a <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Avís de privadesa de Chrome</translation>
 <translation id="6697492270171225480">Mostra suggeriments de pàgines similars quan no se'n trobi una</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Suprimeix</translation>
 <translation id="8266862848225348053">Ubicació de baixada</translation>
 <translation id="8274165955039650276">Mostra les baixades</translation>
-<translation id="8283853025636624853">Se sincronitza amb <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtítols</translation>
 <translation id="8300705686683892304">Gestionats per aplicacions</translation>
 <translation id="8310344678080805313">Pestanyes estàndard</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">pendent</translation>
 <translation id="8970887620466824814">S'ha produït un error.</translation>
 <translation id="8972098258593396643">Vols baixar el fitxer a la carpeta predeterminada?</translation>
-<translation id="8981454092730389528">Controls d'activitat de Google</translation>
 <translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation>
 <translation id="8993760627012879038">Obre una pestanya nova en mode d'incògnit</translation>
 <translation id="8998729206196772491">Estàs iniciant la sessió amb un compte gestionat per <ph name="MANAGED_DOMAIN" /> i estàs donant a l'administrador el control de les teves dades de Chrome. Les dades passaran a estar vinculades a aquest compte permanentment. Si tanques la sessió de Chrome, se suprimiran les teves dades d'aquest dispositiu, però continuaran emmagatzemades al teu compte de Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index 7adbb365..f242d10 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Vymazat historii, soubory cookie, data webů, mezipaměť…</translation>
 <translation id="129553762522093515">Nedávno zavřené</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – odesláno ze zařízení <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Chcete-li získat přístup ke kartám ze svých ostatních zařízení, přihlaste se do Chromu.</translation>
 <translation id="1331212799747679585">Chrome nelze aktualizovat. Další možnosti</translation>
 <translation id="1332501820983677155">Zkratky funkcí prohlížeče Google Chrome</translation>
 <translation id="1360432990279830238">Odhlásit se a vypnout synchronizaci?</translation>
-<translation id="136248372334525878">Načítat stránky předem kvůli rychlejšímu načítání a čtení offline</translation>
 <translation id="1369915414381695676">Byl přidán web <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Ke stažení vybraného obsahu není k dispozici dostatek paměti.</translation>
 <translation id="1376578503827013741">Probíhá výpočet…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Vybraná karta</translation>
 <translation id="194341124344773587">Oprávnění pro Chrome zapnete v <ph name="BEGIN_LINK" />Nastavení pro Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Ukládání hesel</translation>
-<translation id="1946005195648379376">Nastavte, jak má Google využívat vaši historii procházení k personalizaci Vyhledávání a dalších služeb Google.</translation>
 <translation id="1952172573699511566">Pokud to bude možné, budou weby zobrazovat text ve vašem preferovaném jazyce.</translation>
 <translation id="1960290143419248813">V této verzi platformy Android již aktualizace prohlížeče Chrome nejsou podporovány</translation>
 <translation id="1966710179511230534">Aktualizujte prosím své přihlašovací údaje.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Vyhledání klepnutím</translation>
 <translation id="2079545284768500474">Vrátit zpět</translation>
 <translation id="2082238445998314030">Výsledek <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Chcete-li od Googlu získat personalizované návrhy obsahu, přihlaste se do Chromu.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Synchronizovat a přizpůsobit na různých zařízeních</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Přetahujte posuvník tak dlouho, dokud nebudete moci pohodlně přečíst tento text. Po dvojitém klepnutí na odstavec by měl být text alespoň takto velký.</translation>
 <translation id="2323763861024343754">Úložiště webů</translation>
 <translation id="2328985652426384049">Přihlášení se nezdařilo</translation>
-<translation id="2342981853652716282">Chcete-li mít své záložky, hesla a další obsah na všech zařízeních, přihlaste se do Chromu.</translation>
 <translation id="2349710944427398404">Celkové množství dat využívané prohlížečem Chrome, včetně účtů, záložek a uložených nastavení</translation>
 <translation id="2351097562818989364">Nastavení překladů bylo resetováno.</translation>
 <translation id="2353636109065292463">Kontrola připojení k internetu</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Na některých webech blokováno</translation>
 <translation id="3137521801621304719">Ukončit anonymní režim</translation>
 <translation id="3143515551205905069">Zrušit synchronizaci</translation>
-<translation id="3148434565183091099">Chcete-li záložky synchronizovat do všech zařízení, přihlaste se do Chromu.</translation>
 <translation id="3157842584138209013">Informace o množství uspořených dat zobrazíte pomocí tlačítka Další možnosti</translation>
 <translation id="3166827708714933426">Zkratky pro okna a karty</translation>
 <translation id="3181954750937456830">Bezpečné prohlížení (chrání vás a vaše zařízení před nebezpečnými weby)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Přihlašovat se na weby automaticky pomocí uložených identifikačních údajů. Když je tato funkce vypnutá, budete před každým přihlášením na web požádáni o ověření.</translation>
 <translation id="3658159451045945436">Resetováním vymažete historii úspory dat, včetně seznamu navštívených webů.</translation>
 <translation id="3663367437272849150">Seskupit tento počet karet: <ph name="NUM_SELECTED" />.</translation>
-<translation id="3672452749423051839">Návrhy při chybách navigace</translation>
 <translation id="3692944402865947621">Stažení souboru <ph name="FILE_NAME" /> se nezdařilo, protože umístění úložiště není dostupné.</translation>
 <translation id="3714981814255182093">Otevřít lištu Najít</translation>
 <translation id="3716182511346448902">Tato stránka využívá příliš mnoho paměti, proto ji Chrome pozastavil.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Název</translation>
 <translation id="4008040567710660924">Povolit soubory cookie pro konkrétní web.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}few{# h}many{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Zobrazovat návrhy, pokud nelze vyhledat webovou adresu nebo navázat připojení.</translation>
 <translation id="4046123991198612571">Další skladba</translation>
 <translation id="4048707525896921369">Vyhledávejte informace o tématech zmíněných na stránce, aniž byste stránku museli opustit. Funkce Vyhledání klepnutím odešle slovo a okolní kontext do Vyhledávání Google, které vrátí definice, obrázky, výsledky vyhledávání a další podrobnosti.
 
@@ -438,7 +430,6 @@
     – pohyby, například způsob chůze.
 
     Přístup webu povolte pouze v případě, že mu důvěřujete.</translation>
-<translation id="424864128008805179">Odhlásit se z Chromu?</translation>
 <translation id="4256782883801055595">Licence open source</translation>
 <translation id="4259722352634471385">Navigace je blokována: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Zkopírovat adresu odkazu</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">K vyhledávání se používá služba Sogou</translation>
 <translation id="4404568932422911380">Žádné záložky</translation>
-<translation id="4409723563706114196">Předvídat stránky</translation>
 <translation id="4411535500181276704">Zjednodušený režim</translation>
 <translation id="4415276339145661267">Spravovat váš účet Google</translation>
 <translation id="4432792777822557199">Stránky v jazyce <ph name="SOURCE_LANGUAGE" /> od teď budou překládány do jazyka <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Povolit tomuto webu přístup k senzorům pro virtuální realitu?</translation>
 <translation id="5210286577605176222">Přejít na předchozí kartu</translation>
 <translation id="5210365745912300556">Zavřít kartu</translation>
-<translation id="5222676887888702881">Odhlásit se</translation>
 <translation id="5224771365102442243">S videem</translation>
 <translation id="5233638681132016545">Nová karta</translation>
 <translation id="526421993248218238">Stránku nelze načíst</translation>
 <translation id="5271967389191913893">Zařízení obsah ke stažení nemůže otevřít.</translation>
 <translation id="528192093759286357">Režim celé obrazovky ukončíte přetažením z horního okraje obrazovky a klepnutím na tlačítko Zpět.</translation>
-<translation id="5284584623296338184">Změny záložek, historie, hesel a dalších nastavení se již nebudou synchronizovat do vašeho účtu Google. Vaše existující data však v účtu Google uložena zůstanou.</translation>
 <translation id="5292796745632149097">Odeslat do zařízení</translation>
 <translation id="5300589172476337783">Zobrazit</translation>
 <translation id="5301954838959518834">Dobře, rozumím</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Anonymní karty</translation>
 <translation id="5763514718066511291">Klepnutím zkopírujete adresu URL této aplikace</translation>
 <translation id="5765780083710877561">Popis:</translation>
-<translation id="5777170031995031090">Nastavte, jak má Google využívat vaši historii procházení k personalizaci Vyhledávání, reklam a dalších služeb Google.</translation>
 <translation id="5793665092639000975">Je využito <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google vaši historii může používat k personalizaci Vyhledávání, reklam a dalších služeb Google</translation>
 <translation id="5804241973901381774">Oprávnění</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Název je příliš dlouhý</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# obrázek}few{# obrázky}many{# obrázku}other{# obrázků}}</translation>
 <translation id="6447842834002726250">Soubory cookie</translation>
-<translation id="6448273550210938826">Vyhledávání a návrhy adres URL</translation>
 <translation id="6461962085415701688">Soubor nelze otevřít</translation>
 <translation id="6464977750820128603">Můžete se podívat, které stránky v Chromu navštěvujete, a nastavit pro ně časovače.\n\nGoogle obdrží informace o webech, pro které nastavíte časovače, a o tom, jak dlouho jste na nich byli. Tyto informace slouží ke zlepšování digitální rovnováhy.</translation>
 <translation id="6475951671322991020">Stáhnout video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">K vyhledání zařízení Chrome potřebuje přístup k informacím o poloze. <ph name="BEGIN_LINK" />Aktualizovat oprávnění<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Heslo</translation>
 <translation id="6659594942844771486">Karta</translation>
-<translation id="666268767214822976">Používat službu předpovídání k zobrazení souvisejících dotazů a oblíbených webových stránek.</translation>
 <translation id="666731172850799929">Otevřít v aplikaci <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Ochrana soukromí v Chromu</translation>
 <translation id="6697492270171225480">Zobrazovat návrhy podobných stránek, když stránku nelze najít</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Smazat</translation>
 <translation id="8266862848225348053">Umístění stažených souborů</translation>
 <translation id="8274165955039650276">Zobrazit stažený obsah</translation>
-<translation id="8283853025636624853">Data se synchronizují do účtu <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Titulky</translation>
 <translation id="8300705686683892304">Spravováno aplikací</translation>
 <translation id="8310344678080805313">Standardní karty</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">nevyřízeno</translation>
 <translation id="8970887620466824814">Došlo k chybě.</translation>
 <translation id="8972098258593396643">Stáhnout do výchozí složky?</translation>
-<translation id="8981454092730389528">Ovládací prvky aktivity Google</translation>
 <translation id="8986494364107987395">Automaticky posílat společnosti Google statistiky používání a zprávy o selhání</translation>
 <translation id="8993760627012879038">Otevřít novou kartu v anonymním režimu</translation>
 <translation id="8998729206196772491">Přihlašujete se pomocí účtu spravovaného doménou <ph name="MANAGED_DOMAIN" /> a poskytujete jeho správci kontrolu nad svými daty prohlížeče Chrome. Vaše data budou trvale přidružena k tomuto účtu. Odhlášením z Chromu svá data smažete z tohoto zařízení, ve vašem účtu Google však uložena zůstanou.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index 56ff4f5..29308ed7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Ryd historik, cookies, websitedata, cache...</translation>
 <translation id="129553762522093515">Senest lukkede</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – sendt fra <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Log ind på Chrome for at få adgang til dine faner på dine andre enheder.</translation>
 <translation id="1331212799747679585">Chrome kan ikke opdateres. Flere valgmuligheder</translation>
 <translation id="1332501820983677155">Funktionsgenveje i Google Chrome</translation>
 <translation id="1360432990279830238">Log ud, og deaktiver synkronisering?</translation>
-<translation id="136248372334525878">Forudindlæs sider, så de indlæses hurtigere og kan ses offline</translation>
 <translation id="1369915414381695676">Websitet <ph name="SITE_NAME" /> blev tilføjet</translation>
 <translation id="1373696734384179344">Der er ikke nok hukommelse til at downloade det valgte indhold.</translation>
 <translation id="1376578503827013741">Beregner…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Valgt fane</translation>
 <translation id="194341124344773587">Aktivér tilladelse for Chrome i <ph name="BEGIN_LINK" />Android-indstillingerne<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Gem adgangskoder</translation>
-<translation id="1946005195648379376">Administrer, hvordan Google bruger din browserhistorik til at tilpasse Søgning og andre Google-tjenester personligt til dig.</translation>
 <translation id="1952172573699511566">Websites viser tekst på dit foretrukne sprog, når det er muligt.</translation>
 <translation id="1960290143419248813">Chrome understøtter ikke længere denne version af Android</translation>
 <translation id="1966710179511230534">Opdater dine loginoplysninger.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tryk for at søge</translation>
 <translation id="2079545284768500474">Fortryd</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> af <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Log ind på Chrome for at hente brugertilpasset indhold, som er foreslået af Chrome.</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2096012225669085171">Synkroniser og tilpas på flere enheder</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Træk i skyderen, indtil du kan nemt læse dette. Teksten som minimum have denne størrelse, når du har trykket to gange på et afsnit.</translation>
 <translation id="2323763861024343754">Websitelagerplads</translation>
 <translation id="2328985652426384049">Det er ikke muligt at logge ind</translation>
-<translation id="2342981853652716282">Log ind på Chrome for at få dine bogmærker, adgangskoder og meget mere på alle dine enheder.</translation>
 <translation id="2349710944427398404">Samlet mængde data, som Chrome anvender, herunder konti, bogmærker og gemte indstillinger</translation>
 <translation id="2351097562818989364">Dine oversættelsesindstillinger er nulstillet.</translation>
 <translation id="2353636109065292463">Tjekker din internetforbindelse</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokeret på visse websites</translation>
 <translation id="3137521801621304719">Slå inkognitotilstand fra</translation>
 <translation id="3143515551205905069">Annuller synkronisering</translation>
-<translation id="3148434565183091099">Log ind på Chrome for at se dine bogmærker på alle dine enheder.</translation>
 <translation id="3157842584138209013">Se, hvor meget data du har sparet via knappen Flere valgmuligheder</translation>
 <translation id="3166827708714933426">Genveje på faner og i vinduer</translation>
 <translation id="3181954750937456830">Beskyttet browsing (beskytter dig og din enhed mod farlige websites)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Log automatisk ind på websites med gemte loginoplysninger. Når funktionen er slået fra, bliver du bedt om at bekræfte, hver gang du vil logge ind på et website.</translation>
 <translation id="3658159451045945436">En nulstilling sletter din historik for databesparelser, herunder listen over de websites, du har besøgt.</translation>
 <translation id="3663367437272849150">Gruppér <ph name="NUM_SELECTED" /> faner.</translation>
-<translation id="3672452749423051839">Forslag ved navigationsfejl</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> blev ikke downloadet, da lagerplaceringen ikke er tilgængelig.</translation>
 <translation id="3714981814255182093">Åbn søgefeltet</translation>
 <translation id="3716182511346448902">Denne side anvender for meget hukommelse, så Chrome har sat den på pause.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titel</translation>
 <translation id="4008040567710660924">Tillad cookies for et bestemt website.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# t.}one{# t.}other{# t.}}</translation>
-<translation id="4042870126885713738">Vis forslag, hvis en webadresse ikke bliver fundet, eller hvis der ikke kan oprettes forbindelse</translation>
 <translation id="4046123991198612571">Næste nummer</translation>
 <translation id="4048707525896921369">Få oplysninger om emner på websites uden at forlade siden. "Tryk for at søge" sender et ord og ordets kontekst til Google Søgning og giver dig definitioner, billeder, søgeresultater og andre oplysninger.
 
@@ -438,7 +430,6 @@
     - Dine bevægelser, f.eks. den måde, du går på
 
     Det er vigtigt, at du har tillid til websitet, før du giver adgang.</translation>
-<translation id="424864128008805179">Vil du logge ud af Chrome?</translation>
 <translation id="4256782883801055595">Open source-licenser</translation>
 <translation id="4259722352634471385">Navigationen er blokeret: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiér linkadresse</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Søgning via Sogou</translation>
 <translation id="4404568932422911380">Der er ingen bogmærker</translation>
-<translation id="4409723563706114196">Brug sideforslag</translation>
 <translation id="4411535500181276704">Lite-tilstand</translation>
 <translation id="4415276339145661267">Administrer din Google-konto</translation>
 <translation id="4432792777822557199">Sider på <ph name="SOURCE_LANGUAGE" /> oversættes fremover til <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Vil du give dette website adgang til dine VR-sensorer?</translation>
 <translation id="5210286577605176222">Gå til den forrige fane</translation>
 <translation id="5210365745912300556">Luk fanen</translation>
-<translation id="5222676887888702881">Log ud</translation>
 <translation id="5224771365102442243">Med video</translation>
 <translation id="5233638681132016545">Ny fane</translation>
 <translation id="526421993248218238">Siden kunne ikke indlæses</translation>
 <translation id="5271967389191913893">Enheden kan ikke åbne det indhold, der skal downloades.</translation>
 <translation id="528192093759286357">Træk fra toppen, og tryk på tilbageknappen igen for at afslutte fuld skærm.</translation>
-<translation id="5284584623296338184">Ændringer i dine bogmærker, din historik, dine adgangskoder og andre indstillinger synkroniseres ikke længere til din Google-konto, men dine eksisterende data er stadig gemt på din Google-konto.</translation>
 <translation id="5292796745632149097">Send til</translation>
 <translation id="5300589172476337783">Vis</translation>
 <translation id="5301954838959518834">OK, det er forstået</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognitofaner</translation>
 <translation id="5763514718066511291">Tryk for at kopiere webadressen til denne app</translation>
 <translation id="5765780083710877561">Beskrivelse:</translation>
-<translation id="5777170031995031090">Administrer, hvordan Google bruger din browserhistorik til at tilpasse Søgning, annoncer og andre Google-tjenester personligt til dig.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> af <ph name="SPACE_AVAILABLE" /> i brug</translation>
 <translation id="5797070761912323120">Google kan bruge din historik til at tilpasse Søgning, annoncer og andre Google-tjenester</translation>
 <translation id="5804241973901381774">Tilladelser</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Navnet er for langt</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# billede}one{# billede}other{# billeder}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Forslag til søgning og webadresser</translation>
 <translation id="6461962085415701688">Filen kan ikke åbnes</translation>
 <translation id="6464977750820128603">Du kan se websites, du har besøgt i Chrome, og indstille timere for dem.\n\nGoogle får oplysninger om de websites, du indstiller timere for, og hvor længe du er på dem. Disse oplysninger bruges til at forbedre Digital balance.</translation>
 <translation id="6475951671322991020">Download video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome skal bruge placeringsadgang for at kunne scanne efter enheder. <ph name="BEGIN_LINK" />Opdater tilladelser<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Adgangskode</translation>
 <translation id="6659594942844771486">Fane</translation>
-<translation id="666268767214822976">Brug en forslagstjeneste til at få vist relaterede forespørgsler og populære websites, mens du skriver i adresselinjen</translation>
 <translation id="666731172850799929">Åbn i <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Erklæring om privatliv for Google Chrome</translation>
 <translation id="6697492270171225480">Se forslag til lignende sider, når en side ikke kan findes</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Slet</translation>
 <translation id="8266862848225348053">Downloadplacering</translation>
 <translation id="8274165955039650276">Se downloads</translation>
-<translation id="8283853025636624853">Synkroniserer til <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Undertekster</translation>
 <translation id="8300705686683892304">Administreres af en app</translation>
 <translation id="8310344678080805313">Standardfaner</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">afventer</translation>
 <translation id="8970887620466824814">Der opstod en fejl.</translation>
 <translation id="8972098258593396643">Vil du downloade til standardmappen?</translation>
-<translation id="8981454092730389528">Aktivitetsadministration på Google</translation>
 <translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation>
 <translation id="8993760627012879038">Åbn en ny fane i inkognitotilstand</translation>
 <translation id="8998729206196772491">Du er ved at logge ind med en konto, der administreres af <ph name="MANAGED_DOMAIN" />, hvilket giver administratoren kontrol over dine Chrome-data. Dine data tilknyttes denne konto permanent. Hvis du logger ud af Chrome, slettes dine data fra denne enhed, men de forbliver gemt på din Google-konto.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
index 12fa665..8d9b8dd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Verlauf, Cookies, Websitedaten, Cache leeren…</translation>
 <translation id="129553762522093515">Kürzlich geschlossen</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: gesendet von <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Melden Sie sich in Chrome an, um Tabs von Ihren anderen Geräten abzurufen.</translation>
 <translation id="1331212799747679585">Chrome kann nicht aktualisiert werden. Weitere Optionen</translation>
 <translation id="1332501820983677155">Tastenkombinationen für Google Chrome-Funktionen</translation>
 <translation id="1360432990279830238">Abmelden &amp; Synchronisierung deaktivieren?</translation>
-<translation id="136248372334525878">Seiten vorab laden, um das Surfen und die Suche zu beschleunigen</translation>
 <translation id="1369915414381695676">Website "<ph name="SITE_NAME" />" hinzugefügt</translation>
 <translation id="1373696734384179344">Der Speicher reicht nicht aus, um den ausgewählten Inhalt herunterzuladen.</translation>
 <translation id="1376578503827013741">Berechnung läuft...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Ausgewählter Tab</translation>
 <translation id="194341124344773587">Berechtigung für Chrome in den <ph name="BEGIN_LINK" />Android-Einstellungen<ph name="END_LINK" /> aktivieren</translation>
 <translation id="1943432128510653496">Passwörter speichern</translation>
-<translation id="1946005195648379376">Legen Sie fest, wie Google anhand des Browserverlaufs die Suche und andere Google-Dienste für Sie personalisieren soll.</translation>
 <translation id="1952172573699511566">Sofern dies möglich ist, wird Text auf Websites in Ihrer bevorzugten Sprache angezeigt.</translation>
 <translation id="1960290143419248813">Chrome-Updates werden für diese Version von Android nicht mehr unterstützt</translation>
 <translation id="1966710179511230534">Bitte aktualisieren Sie Ihre Anmeldeinformationen.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Zum Suchen tippen</translation>
 <translation id="2079545284768500474">Rückgängig machen</translation>
 <translation id="2082238445998314030">Ergebnis <ph name="RESULT_NUMBER" /> von <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Melden Sie sich in Chrome an, um personalisierte, von Google vorgeschlagene Inhalte zu erhalten.</translation>
 <translation id="2091887806945687916">Ton</translation>
 <translation id="2096012225669085171">Geräteübergreifend synchronisieren und personalisieren</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Ziehen Sie den Schieberegler, bis Sie diesen Text problemlos lesen können. Nach dem Doppeltippen auf einen Abschnitt sollte der Text mindestens so groß sein.</translation>
 <translation id="2323763861024343754">Websitespeicher</translation>
 <translation id="2328985652426384049">Anmeldung nicht möglich</translation>
-<translation id="2342981853652716282">Melden Sie sich in Chrome an, um Daten wie Lesezeichen und Passwörter auf allen Ihren Geräten zu nutzen.</translation>
 <translation id="2349710944427398404">Gesamtdaten, die von Chrome verwendet werden, wie Konten, Lesezeichen und gespeicherte Einstellungen</translation>
 <translation id="2351097562818989364">Übersetzungseinstellungen zurückgesetzt</translation>
 <translation id="2353636109065292463">Internetverbindung überprüfen</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Auf einigen Websites blockiert</translation>
 <translation id="3137521801621304719">Inkognitomodus deaktivieren</translation>
 <translation id="3143515551205905069">Synchronisierung abbrechen</translation>
-<translation id="3148434565183091099">Melden Sie sich in Chrome an, um auf all Ihren Geräten auf Ihre Lesezeichen zugreifen zu können.</translation>
 <translation id="3157842584138209013">Über die Schaltfläche "Weitere Optionen" können Sie sich ansehen, wie viel Datenvolumen Sie einsparen</translation>
 <translation id="3166827708714933426">Tastenkombinationen für Tabs und Fenster</translation>
 <translation id="3181954750937456830">Safe Browsing (mich und mein Gerät vor schädlichen Websites schützen)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Sie werden mit gespeicherten Anmeldedaten automatisch auf Websites angemeldet. Wenn das Kästchen nicht angeklickt ist, werden Sie jedes Mal aufgefordert, sich manuell auf einer Website anzumelden.</translation>
 <translation id="3658159451045945436">Durch das Zurücksetzen wird der Verlauf gelöscht. Dazu gehört auch die Liste der besuchten Websites.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> Tabs gruppieren.</translation>
-<translation id="3672452749423051839">Vorschläge bei Navigationsfehlern</translation>
 <translation id="3692944402865947621">Download von <ph name="FILE_NAME" /> fehlgeschlagen, weil der Speicherort nicht erreichbar ist.</translation>
 <translation id="3714981814255182093">Suchleiste öffnen</translation>
 <translation id="3716182511346448902">Diese Seite benötigt zu viel Arbeitsspeicher und wurde daher von Chrome angehalten.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titel</translation>
 <translation id="4008040567710660924">Cookies für eine bestimmte Website werden zugelassen.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Vorschläge einblenden, wenn eine Webadresse nicht gefunden oder keine Verbindung hergestellt werden kann</translation>
 <translation id="4046123991198612571">Nächster Titel</translation>
 <translation id="4048707525896921369">Erfahren Sie mehr zu Themen auf einer Website, ohne die Seite verlassen zu müssen. Mit der Option "Zum Suchen tippen" wird ein Wort sowie dessen Kontext an die Google-Suche gesendet. Daraufhin erhalten Sie Definitionen, Bilder, Suchergebnisse und andere Details.
 
@@ -438,7 +430,6 @@
     – Bewegungen, wie z. B. Ihre Art, zu gehen.
 
     Geben Sie dieser Website nur Zugriff, wenn Sie ihr vertrauen.</translation>
-<translation id="424864128008805179">Von Chrome abmelden?</translation>
 <translation id="4256782883801055595">Open Source-Lizenzen</translation>
 <translation id="4259722352634471385">Die Navigation zu <ph name="URL" /> ist blockiert.</translation>
 <translation id="4269820728363426813">URL kopieren</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Suche erfolgt mit Sogou</translation>
 <translation id="4404568932422911380">Keine Lesezeichen</translation>
-<translation id="4409723563706114196">Vervollständigungen für Seiten verwenden</translation>
 <translation id="4411535500181276704">Lite-Modus</translation>
 <translation id="4415276339145661267">Google-Konto verwalten</translation>
 <translation id="4432792777822557199">Seiten auf <ph name="SOURCE_LANGUAGE" /> werden ab jetzt auf <ph name="TARGET_LANGUAGE" /> übersetzt</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Zulassen, dass diese Website auf Ihre VR-Sensoren zugreift?</translation>
 <translation id="5210286577605176222">Zum vorherigen Tab wechseln</translation>
 <translation id="5210365745912300556">Schließen</translation>
-<translation id="5222676887888702881">Abmelden</translation>
 <translation id="5224771365102442243">Mit Video</translation>
 <translation id="5233638681132016545">Neuer Tab</translation>
 <translation id="526421993248218238">Fehler beim Laden der Seite</translation>
 <translation id="5271967389191913893">Das Gerät kann den Inhalt, der heruntergeladen werden soll, nicht öffnen.</translation>
 <translation id="528192093759286357">Ziehen Sie zum Beenden des Vollbildmodus von oben und tippen Sie auf die Zurück-Taste.</translation>
-<translation id="5284584623296338184">Änderungen an Ihren Lesezeichen, Ihrem Verlauf, Ihren Passwörtern und anderen Einstellungen werden nicht mehr mit Ihrem Google-Konto synchronisiert. Ihre vorhandenen Daten bleiben aber in Ihrem Google-Konto gespeichert.</translation>
 <translation id="5292796745632149097">Senden an</translation>
 <translation id="5300589172476337783">Anzeigen</translation>
 <translation id="5301954838959518834">Ok</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognito-Tabs</translation>
 <translation id="5763514718066511291">Tippen, um die URL für diese App zu kopieren</translation>
 <translation id="5765780083710877561">Beschreibung:</translation>
-<translation id="5777170031995031090">Sie können festlegen, wie Google Ihren Browserverlauf nutzt, um die Suche, Werbung und andere Google-Dienste zu personalisieren.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> von <ph name="SPACE_AVAILABLE" /> werden verwendet</translation>
 <translation id="5797070761912323120">Anhand Ihres Verlaufs kann Google die Google-Suche, Werbung und andere Google-Dienste personalisieren</translation>
 <translation id="5804241973901381774">Berechtigungen</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Name ist zu lang</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Bild}other{# Bilder}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Such- und URL-Vorschläge</translation>
 <translation id="6461962085415701688">Datei kann nicht geöffnet werden</translation>
 <translation id="6464977750820128603">Sie sehen in Chrome besuchte Websites und können Timer einstellen.\n\nGoogle erhält Informationen zu den Websites, für die Sie Timer einstellen, sowie zur Dauer des Besuchs. Anhand dieser Informationen wird Digital Wellbeing optimiert.</translation>
 <translation id="6475951671322991020">Video herunterladen</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome benötigt Zugriff auf den Standort, um nach Geräten suchen zu können. <ph name="BEGIN_LINK" />Berechtigungen aktualisieren<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Passwort</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Während der Eingabe in die Adressleiste mithilfe einer Vervollständigungsfunktion ähnliche Suchanfragen und beliebte Websites einblenden</translation>
 <translation id="666731172850799929">In <ph name="APP_NAME" /> öffnen</translation>
 <translation id="666981079809192359">Chrome-Datenschutzhinweise</translation>
 <translation id="6697492270171225480">Vorschläge für ähnliche Seiten anzeigen, wenn eine Seite nicht gefunden werden kann</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Löschen</translation>
 <translation id="8266862848225348053">Downloadpfad</translation>
 <translation id="8274165955039650276">Downloads aufrufen</translation>
-<translation id="8283853025636624853">Synchronisierung mit <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Untertitel</translation>
 <translation id="8300705686683892304">Von App verwaltet</translation>
 <translation id="8310344678080805313">Standard-Tabs</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">ausstehend</translation>
 <translation id="8970887620466824814">Es gab ein Problem.</translation>
 <translation id="8972098258593396643">In Standardordner herunterladen?</translation>
-<translation id="8981454092730389528">Google-Aktivitätseinstellungen</translation>
 <translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation>
 <translation id="8993760627012879038">Neuen Tab im Inkognitomodus öffnen</translation>
 <translation id="8998729206196772491">Sie melden sich mit einem von <ph name="MANAGED_DOMAIN" /> verwalteten Konto an und geben dem Administrator der Domain Kontrolle über Ihre Chrome-Daten. Die Daten werden diesem Konto dauerhaft zugeordnet. Wenn Sie sich von Chrome abmelden, werden Ihre Daten auf dem Gerät gelöscht, bleiben jedoch in Ihrem Google-Konto erhalten.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index 2f020bd7..b917329 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Διαγραφή ιστορικού, cookie, δεδομένων ιστότοπου, κρυφής μνήμης…</translation>
 <translation id="129553762522093515">Έκλεισαν πρόσφατα</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Στάλθηκε από <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Για να εμφανίζονται οι καρτέλες από τις άλλες συσκευές σας, συνδεθείτε στο Chrome.</translation>
 <translation id="1331212799747679585">Δεν είναι δυνατή η ενημέρωση του Chrome. Περισσότερες επιλογές</translation>
 <translation id="1332501820983677155">Συντομεύσεις λειτουργιών Google Chrome</translation>
 <translation id="1360432990279830238">Αποσύνδεση και απενεργοπ. συγχρονισμού;</translation>
-<translation id="136248372334525878">Προφόρτωση ιστοσελίδων για ταχύτερη φόρτωση και ανάγνωση εκτός σύνδεσης</translation>
 <translation id="1369915414381695676">Προστέθηκε ο ιστότοπος <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Ανεπαρκής μνήμη για τη λήψη του επιλεγμένου περιεχομένου.</translation>
 <translation id="1376578503827013741">Υπολογισμός…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Επιλεγμένη καρτέλα</translation>
 <translation id="194341124344773587">Ενεργοποίηση των αδειών για το Chrome στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Αποθήκευση κωδικών πρόσβασης</translation>
-<translation id="1946005195648379376">Ελέγξτε τον τρόπο με τον οποίο η Google χρησιμοποιεί το ιστορικό περιήγησής σας για να εξατομικεύει την Αναζήτηση και άλλες υπηρεσίες Google.</translation>
 <translation id="1952172573699511566">Οι ιστότοποι θα εμφανίζουν κείμενο στην προτιμώμενη γλώσσα σας όταν υπάρχει αυτή η δυνατότητα.</translation>
 <translation id="1960290143419248813">Οι ενημερώσεις Chrome δεν υποστηρίζονται πλέον για αυτήν την έκδοση Android</translation>
 <translation id="1966710179511230534">Ενημερώστε τα στοιχεία σύνδεσής σας.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Πατήστε για αναζήτηση</translation>
 <translation id="2079545284768500474">Αναίρεση</translation>
 <translation id="2082238445998314030">Αποτέλεσμα <ph name="RESULT_NUMBER" /> από <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Για να λάβετε εξατομικευμένο περιεχόμενο που προτείνεται από την Google, συνδεθείτε στο Chrome.</translation>
 <translation id="2091887806945687916">Ήχος</translation>
 <translation id="2096012225669085171">Συγχρονισμός και εξατομίκευση σε όλες τις συσκευές</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Σύρετε το ρυθμιστικό έως ότου να διαβάσετε αυτό το μήνυμα άνετα. Το κείμενο θα πρέπει να είναι τουλάχιστον τόσο μεγάλο αφού πατήσετε δύο φορές σε μια παράγραφο.</translation>
 <translation id="2323763861024343754">Αποθηκ. χώρος ιστοσελίδας</translation>
 <translation id="2328985652426384049">Δεν είναι δυνατή η σύνδεση</translation>
-<translation id="2342981853652716282">Συνδεθείτε στο Chrome, για να έχετε τους σελιδοδείκτες, τους κωδικούς πρόσβασης κ.ά. σε όλες τις συσκευές σας.</translation>
 <translation id="2349710944427398404">Σύνολο δεδομένων που χρησιμοποιούνται από το Chrome, συμπεριλαμβανομένων των λογαριασμών, των σελιδοδεικτών και των αποθηκευμένων ρυθμίσεων</translation>
 <translation id="2351097562818989364">Έγινε επαναφορά ρυθμίσεων μετάφρασης.</translation>
 <translation id="2353636109065292463">Έλεγχος της σύνδεσής σας στο διαδίκτυο</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Αποκλεισμός σε ορισμένους ιστοτόπους</translation>
 <translation id="3137521801621304719">Έξοδος από την κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="3143515551205905069">Ακύρωση συγχρονισμού</translation>
-<translation id="3148434565183091099">Για να εμφανίζονται οι σελιδοδείκτες σας σε όλες τις συσκευές σας, συνδεθείτε στο Chrome.</translation>
 <translation id="3157842584138209013">Δείτε πόσα δεδομένα έχετε αποθηκεύσει από το κουμπί "Περισσότερες επιλογές"</translation>
 <translation id="3166827708714933426">Συντομεύσεις καρτέλας και παραθύρου</translation>
 <translation id="3181954750937456830">Ασφαλής περιήγηση (προστατεύει εσάς και τη συσκευή σας από επικίνδυνους ιστοτόπους)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Αυτόματη σύνδεση σε ιστότοπους με χρήση αποθηκευμένων διαπιστευτηρίων. Όταν η λειτουργία είναι απενεργοποιημένη, θα σας ζητείται επαλήθευση κάθε φορά πριν από τη σύνδεση σε έναν ιστότοπο.</translation>
 <translation id="3658159451045945436">Η επαναφορά διαγράφει το ιστορικό των αποθηκευμένων δεδομένων, συμπεριλαμβανομένης της λίστας ιστοτόπων που έχετε επισκεφτεί.</translation>
 <translation id="3663367437272849150">Ομαδοποίηση <ph name="NUM_SELECTED" /> καρτελών.</translation>
-<translation id="3672452749423051839">Προτάσεις σφάλματος πλοήγησης</translation>
 <translation id="3692944402865947621">Η λήψη του αρχείου <ph name="FILE_NAME" /> απέτυχε επειδή δεν είναι προσβάσιμη η τοποθεσία αποθήκευσης.</translation>
 <translation id="3714981814255182093">Άνοιγμα της γραμμής εύρεσης</translation>
 <translation id="3716182511346448902">Αυτή η σελίδα χρησιμοποιεί πάρα πολλή μνήμη. Για αυτόν τον λόγο, το Chrome την έθεσε σε παύση.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Τίτλος</translation>
 <translation id="4008040567710660924">Επιτρέπει τα cookie για έναν συγκεκριμένο ιστότοπο.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ω.}other{# ω.}}</translation>
-<translation id="4042870126885713738">Εμφάνιση προτάσεων όταν μια διεύθυνση ιστού δεν αναλύεται σωστά ή δεν είναι δυνατό να πραγματοποιηθεί σύνδεση</translation>
 <translation id="4046123991198612571">Επόμενο κομμάτι</translation>
 <translation id="4048707525896921369">Ενημερωθείτε σχετικά με τα θέματα των ιστοτόπων, χωρίς να αποχωρήσετε από τη σελίδα. Η λειτουργία "Πατήστε για αναζήτηση" στέλνει μια λέξη και τα συμφραζόμενά της στην Αναζήτηση Google και εμφανίζει ορισμούς, εικόνες, αποτελέσματα αναζήτησης και άλλες λεπτομέρειες.
 
@@ -438,7 +430,6 @@
     - Οι κινήσεις σας, όπως ο τρόπος που περπατάτε
 
     Προτού επιτρέψετε την πρόσβαση, βεβαιωθείτε ότι μπορείτε να εμπιστευτείτε αυτόν τον ιστότοπο.</translation>
-<translation id="424864128008805179">Αποσύνδεση από το Chrome;</translation>
 <translation id="4256782883801055595">Άδειες λογισμικού ανοικτού κώδικα</translation>
 <translation id="4259722352634471385">Αποκλείστηκε η μετάβαση στη διεύθυνση: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Αντιγρ. διεύθυνσης συνδέσμου</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Τηλέφωνο</translation>
 <translation id="4384468725000734951">Χρήση του Sogou για αναζήτηση</translation>
 <translation id="4404568932422911380">Δεν υπάρχουν σελιδοδείκτες</translation>
-<translation id="4409723563706114196">Χρήση προβλέψεων σελίδας</translation>
 <translation id="4411535500181276704">Λειτουργία Lite</translation>
 <translation id="4415276339145661267">Διαχείριση Λογαριασμού Google</translation>
 <translation id="4432792777822557199">Από εδώ και στο εξής, οι σελίδες στα <ph name="SOURCE_LANGUAGE" /> θα μεταφράζονται στα <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Να επιτρέπεται σε αυτόν τον ιστότοπο να έχει πρόσβαση στους αισθητήρες VR;</translation>
 <translation id="5210286577605176222">Μετάβαση στην προηγούμενη καρτέλα</translation>
 <translation id="5210365745912300556">Κλείσιμο καρτέλας</translation>
-<translation id="5222676887888702881">Έξοδος</translation>
 <translation id="5224771365102442243">Με βίντεο</translation>
 <translation id="5233638681132016545">Νέα καρτέλα</translation>
 <translation id="526421993248218238">Δεν είναι δυνατή η φόρτωση αυτής της σελίδας</translation>
 <translation id="5271967389191913893">Η συσκευή δεν μπορεί να ανοίξει το περιεχόμενο προς λήψη.</translation>
 <translation id="528192093759286357">Σύρετε από το επάνω τμήμα και αγγίξτε το κουμπί επιστροφής για έξοδο από την πλήρη οθόνη.</translation>
-<translation id="5284584623296338184">Οι αλλαγές σε σελιδοδείκτες, ιστορικό, κωδικούς πρόσβασης και άλλες ρυθμίσεις δεν θα συγχρονίζονται πλέον με το Λογαριασμό σας Google. Ωστόσο, τα υπάρχοντα δεδομένα σας θα παραμείνουν αποθηκευμένα στο λογαριασμό σας Google.</translation>
 <translation id="5292796745632149097">Αποστολή προς</translation>
 <translation id="5300589172476337783">Εμφάνιση</translation>
 <translation id="5301954838959518834">OK, το κατάλαβα</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Καρτέλες ανώνυμης περιήγησης</translation>
 <translation id="5763514718066511291">Πατήστε για αντιγραφή του URL για αυτήν την εφαρμογή</translation>
 <translation id="5765780083710877561">Περιγραφή:</translation>
-<translation id="5777170031995031090">Ελέγξτε τον τρόπο με τον οποίο η Google χρησιμοποιεί το ιστορικό περιήγησής σας για την εξατομίκευση της Αναζήτησης, των διαφημίσεων και άλλων υπηρεσιών Google.</translation>
 <translation id="5793665092639000975">Χρήση <ph name="SPACE_USED" /> από <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Η Google μπορεί να χρησιμοποιήσει το ιστορικό σας για την εξατομίκευση της Αναζήτησης, των διαφημίσεων και άλλων υπηρεσιών Google</translation>
 <translation id="5804241973901381774">Άδειες</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Το όνομα είναι πολύ μεγάλο</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Εικόνα}other{# Εικόνες}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">Αναζήτηση και προτάσεις διευθύνσεων URL</translation>
 <translation id="6461962085415701688">Δεν είναι δυνατό το άνοιγμα του αρχείου</translation>
 <translation id="6464977750820128603">Μπορείτε να δείτε και να ορίσετε χρονόμετρα για τους ιστοτόπους που επισκέπτεστε στο Chrome.\n\nΗ Google λαμβάνει πληροφορίες σχετικά με τους ιστοτόπους για τους οποίους ορίζετε χρονόμετρα και τη χρονική διάρκεια που τους χρησιμοποιείτε. Αυτές οι πληροφορίες χρησιμοποιούνται για τη βελτίωση του Digital Wellbeing.</translation>
 <translation id="6475951671322991020">Λήψη βίντεο</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Το Chrome χρειάζεται πρόσβαση στην τοποθεσία, προκειμένου να κάνει σάρωση για συσκευές. <ph name="BEGIN_LINK" />Ενημέρωση δικαιωμάτων<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Κωδικός πρόσβασης</translation>
 <translation id="6659594942844771486">Καρτέλα</translation>
-<translation id="666268767214822976">Χρήση υπηρεσίας προβλέψεων για την εμφάνιση σχετικών ερωτημάτων και δημοφιλών ιστοτόπων, καθώς πληκτρολογείτε στη γραμμή διευθύνσεων</translation>
 <translation id="666731172850799929">Άνοιγμα σε <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Σημείωση Απορρήτου του Chrome</translation>
 <translation id="6697492270171225480">Εμφάνιση προτάσεων για παρόμοιες σελίδες όταν δεν είναι δυνατή η εύρεση μιας σελίδας</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Διαγραφή</translation>
 <translation id="8266862848225348053">Τοποθεσία λήψης</translation>
 <translation id="8274165955039650276">Εμφάνιση λήψεων</translation>
-<translation id="8283853025636624853">Συγχρονισμός με <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Υπότιτλοι</translation>
 <translation id="8300705686683892304">Διαχείριση από εφαρμογή</translation>
 <translation id="8310344678080805313">Τυπικές καρτέλες</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">σε εκκρεμότητα</translation>
 <translation id="8970887620466824814">Προέκυψε πρόβλημα.</translation>
 <translation id="8972098258593396643">Λήψη στον προεπιλεγμένο φάκελο;</translation>
-<translation id="8981454092730389528">Στοιχεία ελέγχου δραστηριότητας Google</translation>
 <translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation>
 <translation id="8993760627012879038">Άνοιγμα καρτέλας σε κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="8998729206196772491">Πρόκειται να συνδεθείτε με έναν λογαριασμό του οποίου η διαχείριση γίνεται από <ph name="MANAGED_DOMAIN" /> και παραχωρείτε στον διαχειριστή του τον έλεγχο της διαχείρισης των δεδομένων σας στο Chrome. Τα δεδομένα σας θα συσχετιστούν οριστικά με αυτόν τον λογαριασμό. Η αποσύνδεση από το Chrome θα διαγράψει τα δεδομένα σας από αυτήν τη συσκευή, αλλά θα διατηρηθούν αποθηκευμένα στον Λογαριασμό σας Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
index dfc4d7d7..33367fa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Clear history, cookies, site data, cache…</translation>
 <translation id="129553762522093515">Recently closed</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Sent from <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">To get your tabs from your other devices, sign in to Chrome.</translation>
 <translation id="1331212799747679585">Chrome can’t update. More options</translation>
 <translation id="1332501820983677155">Google Chrome feature shortcuts</translation>
 <translation id="1360432990279830238">Sign out and turn off sync?</translation>
-<translation id="136248372334525878">Preload pages for faster loading and offline reading</translation>
 <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> added</translation>
 <translation id="1373696734384179344">Insufficient memory to download the selected content.</translation>
 <translation id="1376578503827013741">Computing…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Selected Tab</translation>
 <translation id="194341124344773587">Turn on permission for Chrome in <ph name="BEGIN_LINK" />Android Settings<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Save passwords</translation>
-<translation id="1946005195648379376">Control how Google uses your browsing history to personalise Search and other Google services.</translation>
 <translation id="1952172573699511566">Websites will show text in your preferred language, when possible.</translation>
 <translation id="1960290143419248813">Chrome updates are no longer supported for this version of Android</translation>
 <translation id="1966710179511230534">Please update your sign-in details.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tap to Search</translation>
 <translation id="2079545284768500474">Undo</translation>
 <translation id="2082238445998314030">Result <ph name="RESULT_NUMBER" /> of <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">To get personalised content suggested by Google, sign in to Chrome.</translation>
 <translation id="2091887806945687916">Sound</translation>
 <translation id="2096012225669085171">Sync and personalise across devices</translation>
 <translation id="2100273922101894616">Auto Sign-in</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Drag the slider until you can read this comfortably. Text should look at least this big after double-tapping on a paragraph.</translation>
 <translation id="2323763861024343754">Site storage</translation>
 <translation id="2328985652426384049">Can’t sign in</translation>
-<translation id="2342981853652716282">Sign in to Chrome to get your bookmarks, passwords and more on all your devices.</translation>
 <translation id="2349710944427398404">Total data used by Chrome, including accounts, bookmarks and saved settings</translation>
 <translation id="2351097562818989364">Your translate settings have been reset.</translation>
 <translation id="2353636109065292463">Checking your Internet connection</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blocked on some sites</translation>
 <translation id="3137521801621304719">Leave incognito mode</translation>
 <translation id="3143515551205905069">Cancel sync</translation>
-<translation id="3148434565183091099">To get your bookmarks on all your devices, sign in to Chrome.</translation>
 <translation id="3157842584138209013">See how much data you've saved from the More Options button</translation>
 <translation id="3166827708714933426">Tab and window shortcuts</translation>
 <translation id="3181954750937456830">Safe Browsing (protects you and your device from dangerous sites)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatically sign in to websites using stored credentials. When the feature is off, you’ll be asked for verification every time before signing in to a website.</translation>
 <translation id="3658159451045945436">Resetting wipes your history of data savings, including the list of visited sites.</translation>
 <translation id="3663367437272849150">Group <ph name="NUM_SELECTED" /> tabs.</translation>
-<translation id="3672452749423051839">Navigation error suggestions</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> download failed because storage location is not reachable.</translation>
 <translation id="3714981814255182093">Open the Find Bar</translation>
 <translation id="3716182511346448902">This page uses too much memory, so Chrome paused it.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Title</translation>
 <translation id="4008040567710660924">Allow cookies for a specific site.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# hr}other{# hrs}}</translation>
-<translation id="4042870126885713738">Show suggestions when a web address does not resolve or a connection cannot be made</translation>
 <translation id="4046123991198612571">Next track</translation>
 <translation id="4048707525896921369">Learn about topics on websites without leaving the page. Tap to Search sends a word and its surrounding context to Google Search, returning definitions, pictures, search results and other details.
 
@@ -438,7 +430,6 @@
     - Your movements, like how you walk
 
     Make sure that you trust this site before you allow access.</translation>
-<translation id="424864128008805179">Sign out of Chrome?</translation>
 <translation id="4256782883801055595">Open-source licences</translation>
 <translation id="4259722352634471385">Navigation is blocked: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copy link address</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Phone</translation>
 <translation id="4384468725000734951">Using Sogou for search</translation>
 <translation id="4404568932422911380">No bookmarks</translation>
-<translation id="4409723563706114196">Use page predictions</translation>
 <translation id="4411535500181276704">Lite mode</translation>
 <translation id="4415276339145661267">Manage your Google Account</translation>
 <translation id="4432792777822557199">Pages in <ph name="SOURCE_LANGUAGE" /> will be translated to <ph name="TARGET_LANGUAGE" /> from now on</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Allow this site to access your VR sensors?</translation>
 <translation id="5210286577605176222">Jump to the previous tab</translation>
 <translation id="5210365745912300556">Close tab</translation>
-<translation id="5222676887888702881">Sign out</translation>
 <translation id="5224771365102442243">With video</translation>
 <translation id="5233638681132016545">New tab</translation>
 <translation id="526421993248218238">Can't load this page</translation>
 <translation id="5271967389191913893">Device cannot open the content to be downloaded.</translation>
 <translation id="528192093759286357">Drag from top and touch the back button to exit full screen.</translation>
-<translation id="5284584623296338184">Changes to your bookmarks, history, passwords and other settings will no longer be synced to your  Google Account. However, your existing data will remain stored in your Google Account.</translation>
 <translation id="5292796745632149097">Send to</translation>
 <translation id="5300589172476337783">Show</translation>
 <translation id="5301954838959518834">OK, got it</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Incognito tabs</translation>
 <translation id="5763514718066511291">Tap to copy the URL for this app</translation>
 <translation id="5765780083710877561">Description:</translation>
-<translation id="5777170031995031090">Control how Google uses your browsing history to personalise Search, ads and other Google services.</translation>
 <translation id="5793665092639000975">Using <ph name="SPACE_USED" /> of <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google may use your history to personalise Search, ads and other Google services</translation>
 <translation id="5804241973901381774">Permissions</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Name is too long</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Image}other{# Images}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Search and URL suggestions</translation>
 <translation id="6461962085415701688">Can’t open file</translation>
 <translation id="6464977750820128603">You can see sites that you visit in Chrome and set timers for them.\n\nGoogle gets info about the sites for which you set timers and how long you visit them. This info is used to make Digital Wellbeing better.</translation>
 <translation id="6475951671322991020">Download video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome needs location access to scan for devices. <ph name="BEGIN_LINK" />Update permissions<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Password</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Use a prediction service to show related queries and popular websites as you type in the address bar</translation>
 <translation id="666731172850799929">Open in <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chrome Privacy Notice</translation>
 <translation id="6697492270171225480">Show suggestions for similar pages when a page can't be found</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8266862848225348053">Download location</translation>
 <translation id="8274165955039650276">See downloads</translation>
-<translation id="8283853025636624853">Syncing to <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Captions</translation>
 <translation id="8300705686683892304">Managed by app</translation>
 <translation id="8310344678080805313">Standard tabs</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">pending</translation>
 <translation id="8970887620466824814">Something went wrong.</translation>
 <translation id="8972098258593396643">Download to default folder?</translation>
-<translation id="8981454092730389528">Google Activity Controls</translation>
 <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation>
 <translation id="8993760627012879038">Open a new tab in Incognito mode</translation>
 <translation id="8998729206196772491">You are signing in with an account managed by <ph name="MANAGED_DOMAIN" /> and giving its administrator control over your Chrome data. Your data will become permanently tied to this account. Signing out of Chrome will delete your data from this device, but it will remain stored in your Google Account.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
index 77e42a7..28b4fed 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Borra el historial, las cookies, los datos del sitio, la caché…</translation>
 <translation id="129553762522093515">Cerrado recientemente</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Enviado desde <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Accede a Chrome para obtener las pestañas de tus otros dispositivos.</translation>
 <translation id="1331212799747679585">No se puede actualizar Chrome. Más opciones</translation>
 <translation id="1332501820983677155">Accesos directos a las funciones de Google Chrome</translation>
 <translation id="1360432990279830238">¿Salir y desactivar la sincronización?</translation>
-<translation id="136248372334525878">Carga las páginas previamente para acelerar la carga y leerlas sin conexión</translation>
 <translation id="1369915414381695676">Se agregó el sitio <ph name="SITE_NAME" />.</translation>
 <translation id="1373696734384179344">Memoria insuficiente para descargar el contenido seleccionado</translation>
 <translation id="1376578503827013741">Calculando…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Pestaña seleccionada</translation>
 <translation id="194341124344773587">Activa el permiso para Chrome en <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Guardar contraseñas</translation>
-<translation id="1946005195648379376">Controla la forma en que Google usa tu historial de navegación para personalizar Búsqueda y otros servicios de Google.</translation>
 <translation id="1952172573699511566">Los sitios web mostrarán texto en tu idioma preferido, cuando sea posible.</translation>
 <translation id="1960290143419248813">Las actualizaciones de Chrome ya no son compatibles con esta versión de Android</translation>
 <translation id="1966710179511230534">Actualiza los datos de acceso.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Presionar para buscar</translation>
 <translation id="2079545284768500474">Deshacer</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Para obtener contenido personalizado y sugerido por Google, accede a tu cuenta en Chrome.</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2096012225669085171">Sincroniza y personaliza contenido en diferentes dispositivos</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Arrastra el control deslizante hasta que puedas leer esto cómodamente. El texto debería verse, al menos, de este tamaño al tocar dos veces un párrafo.</translation>
 <translation id="2323763861024343754">Almacenamiento del sitio</translation>
 <translation id="2328985652426384049">No puedes acceder</translation>
-<translation id="2342981853652716282">Accede a tu cuenta en Chrome para obtener tus favoritos, contraseñas y mucho más desde todos tus dispositivos.</translation>
 <translation id="2349710944427398404">Cantidad total de datos que usa Chrome, lo que incluye las cuentas, favoritos y opciones de configuración guardadas</translation>
 <translation id="2351097562818989364">Se restableció la configuración de traducción.</translation>
 <translation id="2353636109065292463">Revisando tu conexión a Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloqueados en algunos sitios</translation>
 <translation id="3137521801621304719">Salir del modo de navegación de incógnito</translation>
 <translation id="3143515551205905069">Cancelar sincronización</translation>
-<translation id="3148434565183091099">Para usar tus favoritos en todos los dispositivos, accede a Chrome.</translation>
 <translation id="3157842584138209013">Para ver cuántos datos redujiste, selecciona el botón Más opciones</translation>
 <translation id="3166827708714933426">Accesos directos a ventanas y pestañas</translation>
 <translation id="3181954750937456830">Navegación segura (te protege a ti y tu dispositivo de sitios peligrosos)</translation>
@@ -329,6 +323,7 @@
 <translation id="3350687908700087792">Cerrar todas las pestañas de incógnito</translation>
 <translation id="3353615205017136254">Google proporcionó la página básica. Para cargar la original, presiona el botón.</translation>
 <translation id="3367813778245106622">Volver a acceder para iniciar la sincronización</translation>
+<translation id="3374023511497244703">Ya no se sincronizarán con tu Cuenta de Google los favoritos, el historial, las contraseñas ni otros datos de Chrome.</translation>
 <translation id="3384347053049321195">Compartir imagen</translation>
 <translation id="3386292677130313581">Preguntar antes de permitir que los sitios conozcan tu ubicación (recomendado)</translation>
 <translation id="3387650086002190359"><ph name="FILE_NAME" /> no se pudo descargar debido a errores del sistema de archivos.</translation>
@@ -360,7 +355,6 @@
 <translation id="363596933471559332">Permite acceder automáticamente a los sitios web con las credenciales almacenadas. Si la función está desactivada, siempre se solicitará verificación antes de acceder a un sitio web.</translation>
 <translation id="3658159451045945436">Si lo haces, se borrará el historial de ahorro de datos, incluida la lista de sitios visitados.</translation>
 <translation id="3663367437272849150">Agrupa <ph name="NUM_SELECTED" /> pestañas.</translation>
-<translation id="3672452749423051839">Sugerencias relacionadas con errores de navegación</translation>
 <translation id="3692944402865947621">Falló la descarga de <ph name="FILE_NAME" /> porque no se puede acceder a la ubicación del almacenamiento.</translation>
 <translation id="3714981814255182093">Abrir la barra de búsqueda</translation>
 <translation id="3716182511346448902">Chrome pausó esta página porque usa demasiada memoria.</translation>
@@ -403,7 +397,6 @@
 <translation id="4002066346123236978">Título</translation>
 <translation id="4008040567710660924">Permite las cookies para un sitio específico.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Mostrar sugerencias cuando no se resuelve una dirección web o cuando no se puede establecer una conexión</translation>
 <translation id="4046123991198612571">Siguiente pista</translation>
 <translation id="4048707525896921369">Obtén información acerca de temas en sitios web sin salir de la página. "Presionar para buscar" envía una palabra y el contexto en el que se encuentra a la Búsqueda de Google, y muestra definiciones, fotos, resultados de la búsqueda y otros detalles.
 
@@ -437,7 +430,6 @@
     - Tus movimientos, como la manera de caminar
 
     Antes de permitir el acceso, asegúrate de que confías en este sitio.</translation>
-<translation id="424864128008805179">¿Quieres salir de Chrome?</translation>
 <translation id="4256782883801055595">Licencias de código abierto</translation>
 <translation id="4259722352634471385">Navegación bloqueada: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copiar dirección del vínculo</translation>
@@ -451,7 +443,6 @@
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4384468725000734951">Se usa Sogou para la búsqueda</translation>
 <translation id="4404568932422911380">No hay favoritos</translation>
-<translation id="4409723563706114196">Usar las predicciones de página</translation>
 <translation id="4411535500181276704">Modo lite</translation>
 <translation id="4415276339145661267">Administrar tu Cuenta de Google</translation>
 <translation id="4432792777822557199">De ahora en más, las páginas en <ph name="SOURCE_LANGUAGE" /> se traducirán al <ph name="TARGET_LANGUAGE" /></translation>
@@ -576,13 +567,11 @@
 <translation id="5202089186707505116">¿Quieres permitir que este sitio tenga acceso a tus sensores de RV?</translation>
 <translation id="5210286577605176222">Ir a la pestaña anterior</translation>
 <translation id="5210365745912300556">Cerrar pestaña</translation>
-<translation id="5222676887888702881">Salir</translation>
 <translation id="5224771365102442243">Con video</translation>
 <translation id="5233638681132016545">Nueva pestaña</translation>
 <translation id="526421993248218238">No se puede cargar esta página</translation>
 <translation id="5271967389191913893">El dispositivo no puede abrir el contenido que se descargará.</translation>
 <translation id="528192093759286357">Arrastra el dedo desde la parte superior y toca el botón Atrás para salir de la pantalla completa.</translation>
-<translation id="5284584623296338184">Los cambios que hagas en tus favoritos, historial, contraseñas y otras opciones de configuración se seguirán sincronizando con tu cuenta de Google. Sin embargo, tus datos existentes seguirán almacenados en tu cuenta de Google.</translation>
 <translation id="5292796745632149097">Enviar a</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Entendido</translation>
@@ -659,7 +648,6 @@
 <translation id="5763382633136178763">Pestañas en modo de incógnito</translation>
 <translation id="5763514718066511291">Presiona para copiar la URL para esta app</translation>
 <translation id="5765780083710877561">Descripción:</translation>
-<translation id="5777170031995031090">Controla la forma en que Google usa tu historial de navegación para personalizar Búsqueda, Ads y otros servicios de Google.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /> en uso</translation>
 <translation id="5797070761912323120">Es posible que Google use tu historial para personalizar la Búsqueda, los anuncios y otros servicios de Google</translation>
 <translation id="5804241973901381774">Permisos</translation>
@@ -753,7 +741,6 @@
 <translation id="6441734959916820584">El nombre es demasiado largo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# imagen}other{# imágenes}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Sugerencias de URL y de búsqueda</translation>
 <translation id="6461962085415701688">No se puede abrir el archivo</translation>
 <translation id="6464977750820128603">Puedes ver los sitios que visites en Chrome y establecer temporizadores para ellos.\n\nGoogle obtiene información sobre los sitios para los que estableces temporizadores y la duración de las visitas a ellos. Esta información se usa para mejorar Bienestar digital.</translation>
 <translation id="6475951671322991020">Descargar video</translation>
@@ -784,7 +771,6 @@
 <translation id="6656545060687952787">Chrome necesita acceder a la ubicación para buscar dispositivos. <ph name="BEGIN_LINK" />Actualizar permisos<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Contraseña</translation>
 <translation id="6659594942844771486">Pestaña</translation>
-<translation id="666268767214822976">Usar un servicio de predicción para ver consultas relacionadas y sitios web populares a medida que escribes en la barra de direcciones.</translation>
 <translation id="666731172850799929">Abrir en <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Aviso de privacidad de Chrome</translation>
 <translation id="6697492270171225480">Mostrar sugerencias para páginas similares cuando no se puede encontrar una específica</translation>
@@ -796,6 +782,7 @@
 <translation id="671481426037969117">Se agotó el temporizador de <ph name="FQDN" />. Volverá a empezar mañana.</translation>
 <translation id="6738867403308150051">Descargando…</translation>
 <translation id="6746124502594467657">Mover hacia abajo</translation>
+<translation id="6751888224264752704">También borrar los datos de Chrome de este dispositivo</translation>
 <translation id="6766622839693428701">Desliza hacia abajo para cerrar.</translation>
 <translation id="6766758767654711248">Presiona para ir al sitio</translation>
 <translation id="6767294960381293877">La lista de dispositivos con los que se comparte una pestaña está abierta a media altura.</translation>
@@ -1014,7 +1001,6 @@
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8266862848225348053">Ubicación de las descargas</translation>
 <translation id="8274165955039650276">Ver las descargas</translation>
-<translation id="8283853025636624853">Sincronizando con <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtítulos</translation>
 <translation id="8300705686683892304">Administrados por una app</translation>
 <translation id="8310344678080805313">Pestañas estándar</translation>
@@ -1105,7 +1091,6 @@
 <translation id="8965591936373831584">pendiente</translation>
 <translation id="8970887620466824814">Se produjo un error</translation>
 <translation id="8972098258593396643">¿Deseas descargarlo a la carpeta predeterminada?</translation>
-<translation id="8981454092730389528">Controles de actividad de Google</translation>
 <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
 <translation id="8993760627012879038">Abrir ventana nueva en modo de navegación incógnito</translation>
 <translation id="8998729206196772491">Estás accediendo con una cuenta administrada por <ph name="MANAGED_DOMAIN" /> y dándole permiso a su administrador para que controle tus datos de Chrome. Tus datos se vincularán de forma permanente a esta cuenta. Si sales de Chrome, tus datos se borrarán en este dispositivo, pero quedarán guardados en tu cuenta de Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index 2017150..6300d18 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Borrar el historial, las cookies, los datos de sitios web, la caché…</translation>
 <translation id="129553762522093515">Cerrado recientemente</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Enviado desde <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Inicia sesión en Chrome para ver las pestañas de tus otros dispositivos.</translation>
 <translation id="1331212799747679585">No se ha podido actualizar Chrome. Más opciones</translation>
 <translation id="1332501820983677155">Combinaciones de teclas de funciones de Google Chrome</translation>
 <translation id="1360432990279830238">¿Cerrar sesión y detener sincronización?</translation>
-<translation id="136248372334525878">Carga las páginas previamente para mostrarlas más rápido y poder leerlas sin conexión</translation>
 <translation id="1369915414381695676">Se ha añadido el sitio <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">No hay memoria suficiente para descargar el contenido seleccionado.</translation>
 <translation id="1376578503827013741">Calculando…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Pestaña seleccionada</translation>
 <translation id="194341124344773587">Activa el permiso para Chrome en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Guardar contraseñas</translation>
-<translation id="1946005195648379376">Controla cómo utiliza Google tu historial de navegación para personalizar la Búsqueda y otros servicios de Google.</translation>
 <translation id="1952172573699511566">Si es posible, los sitios web muestran texto en tu idioma preferido.</translation>
 <translation id="1960290143419248813">Ya no se admiten actualizaciones de Chrome en esta versión de Android.</translation>
 <translation id="1966710179511230534">Actualiza tus datos de inicio de sesión.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tocar para buscar</translation>
 <translation id="2079545284768500474">Deshacer</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Para obtener contenido personalizado sugerido por Google, inicia sesión en Chrome.</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2096012225669085171">Sincroniza y personaliza todos tus dispositivos</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Arrastra el control deslizante hasta que puedas leer cómodamente. El texto debe tener al menos este tamaño después de tocar un párrafo dos veces.</translation>
 <translation id="2323763861024343754">Almacenamiento del sitio web</translation>
 <translation id="2328985652426384049">No se puede iniciar sesión</translation>
-<translation id="2342981853652716282">Inicia sesión en Chrome para sincronizar los marcadores, las contraseñas y mucho más en todos tus dispositivos.</translation>
 <translation id="2349710944427398404">Datos totales utilizados por Chrome, incluidos los marcadores, las cuentas y la configuración guardada</translation>
 <translation id="2351097562818989364">Se han restablecido tus ajustes de traducción.</translation>
 <translation id="2353636109065292463">Comprobar tu conexión a Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloqueados en algunos sitios web</translation>
 <translation id="3137521801621304719">Salir del modo de incógnito</translation>
 <translation id="3143515551205905069">Cancelar sincronización</translation>
-<translation id="3148434565183091099">Inicia sesión en Chrome para ver tus marcadores en todos tus dispositivos.</translation>
 <translation id="3157842584138209013">Consulta la cantidad de datos que has ahorrado con el botón Más opciones</translation>
 <translation id="3166827708714933426">Combinaciones de teclas de pestañas y ventanas</translation>
 <translation id="3181954750937456830">Navegación Segura (te protege a ti y a tu dispositivo frente a sitios web peligrosos)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Permite iniciar sesión automáticamente en sitios web con credenciales almacenadas. Si esta función está desactivada, se solicitará la verificación cada vez que se intente iniciar sesión en un sitio web.</translation>
 <translation id="3658159451045945436">Restablecerlo borra tu historial de ahorro de datos, incluidas las listas de los sitios web que has visitado.</translation>
 <translation id="3663367437272849150">Agrupa <ph name="NUM_SELECTED" /> pestañas.</translation>
-<translation id="3672452749423051839">Sugerencias para errores de navegación</translation>
 <translation id="3692944402865947621">No se ha podido descargar <ph name="FILE_NAME" /> porque no se puede acceder a la ubicación del almacenamiento.</translation>
 <translation id="3714981814255182093">Abre la barra de búsqueda</translation>
 <translation id="3716182511346448902">Esta página utiliza demasiada memoria y Chrome la ha pausado.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Título</translation>
 <translation id="4008040567710660924">Permitir cookies en un sitio web específico.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Muestra sugerencias cuando no se puede resolver una dirección web o no se puede establecer una conexión</translation>
 <translation id="4046123991198612571">Pista siguiente</translation>
 <translation id="4048707525896921369">Obtén información sobre los temas que aparecen en los sitios web sin salir de la página. La función Tocar para buscar envía una palabra y el contexto que la rodea a la Búsqueda de Google y te muestra definiciones, imágenes, resultados de búsqueda y más información.
 
@@ -438,7 +430,6 @@
     - Tus movimientos, p. ej., tu forma de andar
 
     Antes de permitirle el acceso, asegúrate de que el sitio web sea de confianza.</translation>
-<translation id="424864128008805179">¿Quieres cerrar sesión en Chrome?</translation>
 <translation id="4256782883801055595">Licencias de código abierto</translation>
 <translation id="4259722352634471385">Se ha bloqueado la navegación: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copiar la dirección del enlace</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4384468725000734951">Sogou se ha establecido como motor de búsqueda predeterminado</translation>
 <translation id="4404568932422911380">Sin marcadores</translation>
-<translation id="4409723563706114196">Utilizar predicciones de página</translation>
 <translation id="4411535500181276704">Modo básico</translation>
 <translation id="4415276339145661267">Gestionar tu cuenta de Google</translation>
 <translation id="4432792777822557199">Las páginas en <ph name="SOURCE_LANGUAGE" /> se traducirán al <ph name="TARGET_LANGUAGE" /> a partir de ahora</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">¿Quieres permitir que este sitio web acceda a tus sensores de realidad virtual?</translation>
 <translation id="5210286577605176222">Te dirige a la pestaña anterior</translation>
 <translation id="5210365745912300556">Cerrar pestaña</translation>
-<translation id="5222676887888702881">Cerrar sesión</translation>
 <translation id="5224771365102442243">Con vídeo</translation>
 <translation id="5233638681132016545">Nueva pestaña</translation>
 <translation id="526421993248218238">No puede cargar esta página web</translation>
 <translation id="5271967389191913893">El dispositivo no puede abrir el contenido para descargarlo.</translation>
 <translation id="528192093759286357">Arrastra el dedo desde la parte superior y toca el botón de retroceso para salir de la pantalla completa.</translation>
-<translation id="5284584623296338184">Los cambios que realices en los marcadores, el historial, las contraseñas y otras opciones no se sincronizarán con tu cuenta de Google. Sin embargo, tus datos actuales seguirán almacenados en tu cuenta.</translation>
 <translation id="5292796745632149097">Enviar a</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Entendido</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Pestañas de incógnito</translation>
 <translation id="5763514718066511291">Toca para copiar la URL de esta aplicación</translation>
 <translation id="5765780083710877561">Descripción:</translation>
-<translation id="5777170031995031090">Controla cómo utiliza Google tu historial de navegación para personalizar la Búsqueda, los anuncios y otros servicios de Google.</translation>
 <translation id="5793665092639000975">Usando <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Es posible que Google utilice tu historial para personalizar la Búsqueda, los anuncios y otros servicios de Google</translation>
 <translation id="5804241973901381774">Permisos</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">El nombre es demasiado largo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# imagen}other{# imágenes}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Sugerencias de URL y de búsqueda</translation>
 <translation id="6461962085415701688">No se puede abrir el archivo</translation>
 <translation id="6464977750820128603">Puedes ver los sitios web que visitas en Chrome y ponerles temporizadores.\n\nGoogle obtiene información sobre estos sitios web y sobre la duración de la visita. La información se usa para mejorar Bienestar digital.</translation>
 <translation id="6475951671322991020">Descargar vídeo</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome necesita acceder a la ubicación para buscar dispositivos. <ph name="BEGIN_LINK" />Actualizar los permisos<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Contraseña</translation>
 <translation id="6659594942844771486">Pestaña</translation>
-<translation id="666268767214822976">Utiliza un servicio de predicciones para mostrar consultas relacionadas y sitios web populares a medida que escribes en la barra de direcciones</translation>
 <translation id="666731172850799929">Abrir en <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Aviso de privacidad de Chrome</translation>
 <translation id="6697492270171225480">Mostrar sugerencias de páginas similares cuando no se encuentre una página</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8266862848225348053">Ubicación de las descargas</translation>
 <translation id="8274165955039650276">Ver descargas</translation>
-<translation id="8283853025636624853">Sincronizando con <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtítulos</translation>
 <translation id="8300705686683892304">Administrados por una aplicación</translation>
 <translation id="8310344678080805313">Pestañas estándar</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">pendiente</translation>
 <translation id="8970887620466824814">Ha ocurrido un error.</translation>
 <translation id="8972098258593396643">¿Quieres descargarlo en la carpeta predeterminada?</translation>
-<translation id="8981454092730389528">Gestión de tu actividad en Google</translation>
 <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
 <translation id="8993760627012879038">Abre una nueva pestaña en modo de incógnito</translation>
 <translation id="8998729206196772491">Estás iniciando sesión con una cuenta gestionada por <ph name="MANAGED_DOMAIN" />, lo que significa que vas a proporcionar a su administrador el control sobre tus datos de Chrome. Los datos se vincularán de forma permanente a esta cuenta. Si cierras sesión en Chrome, se eliminarán los datos de este dispositivo, pero permanecerán almacenados en tu cuenta de Google.</translation>
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 8fb6edb..01f00c2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Ajaloo, küpsiste, saidiandmete, vahemälu kustutamine …</translation>
 <translation id="129553762522093515">Viimati suletud</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – saadetud seadmest <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Vahelehtede hankimiseks oma teistest seadmetest logige Chrome'i sisse.</translation>
 <translation id="1331212799747679585">Chrome'i ei saa värskendada. Rohkem valikuid</translation>
 <translation id="1332501820983677155">Google Chrome'i funktsioonide otseteed</translation>
 <translation id="1360432990279830238">Login välja ja keelan sünkroonimise?</translation>
-<translation id="136248372334525878">Eellaaditakse lehti kiiremaks laadimiseks ja võrguühenduseta lugemiseks</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> on lisatud</translation>
 <translation id="1373696734384179344">Valitud sisu allalaadimiseks pole piisavalt mäluruumi.</translation>
 <translation id="1376578503827013741">Arvutamine …</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Valitud vaheleht</translation>
 <translation id="194341124344773587">Lülita <ph name="BEGIN_LINK" />Android-seadetes<ph name="END_LINK" /> sisse luba Chrome'ile.</translation>
 <translation id="1943432128510653496">Paroolide salvestamine</translation>
-<translation id="1946005195648379376">Saate juhtida seda, kuidas Google kasutab teie sirvimisajalugu otsingu ja muude Google'i teenuste isikupärastamiseks.</translation>
 <translation id="1952172573699511566">Veebisaidid kuvavad teksti võimaluse korral teie eelistatud keeles.</translation>
 <translation id="1960290143419248813">Selles Androidi versioonis ei toetata enam Chrome'i värskendusi</translation>
 <translation id="1966710179511230534">Värskendage oma sisselogimisandmeid.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Puudutage otsimiseks</translation>
 <translation id="2079545284768500474">Võta tagasi</translation>
 <translation id="2082238445998314030">Tulemus <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Google'i soovitatud isikupärastatud sisu hankimiseks logige Chrome'i sisse.</translation>
 <translation id="2091887806945687916">Heli</translation>
 <translation id="2096012225669085171">Seadmete vahel sünkroonimine ja isikupärastamine</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Lohistage liugurit, kuni saate seda mugavalt lugeda. Lõigu topeltkoputamisel peab tekst olema vähemalt nii suur.</translation>
 <translation id="2323763861024343754">Saidi salvestusruum</translation>
 <translation id="2328985652426384049">Ei saa sisse logida</translation>
-<translation id="2342981853652716282">Logige Chrome'i sisse, et kõikides oma seadmetes kasutada järjehoidjaid, paroole ja muud.</translation>
 <translation id="2349710944427398404">Chrome'i kasutatav andmemaht kokku, sh kontod, järjehoidjad ja salvestatud seaded</translation>
 <translation id="2351097562818989364">Teie tõlkeseaded on lähtestatud.</translation>
 <translation id="2353636109065292463">Interneti-ühenduse kontrollimine</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokeeritud teatud saitidel</translation>
 <translation id="3137521801621304719">Inkognito režiimist väljumine</translation>
 <translation id="3143515551205905069">Tühista sünkroonimine</translation>
-<translation id="3148434565183091099">Järjehoidjate hankimiseks kõikidesse seadmetesse logige Chrome'i sisse.</translation>
 <translation id="3157842584138209013">Nupu Rohkem valikuid abil saate vaadata, kui palju andmemahtu olete säästnud</translation>
 <translation id="3166827708714933426">Vahelehe ja akna otseteed</translation>
 <translation id="3181954750937456830">Ohutu sirvimine (kaitseb teid ja teie seadet ohtlike saitide eest)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Teid logitakse salvestatud mandaadiga veebisaitidele automaatselt sisse. Kui funktsioon on välja lülitatud, palutakse teilt kinnitust iga kord enne veebisaidile sisselogimist.</translation>
 <translation id="3658159451045945436">Lähtestamisel kustutatakse säästetud andmemahu ajalugu, sh külastatud saitide loend.</translation>
 <translation id="3663367437272849150">Grupeerige <ph name="NUM_SELECTED" /> vahekaarti.</translation>
-<translation id="3672452749423051839">Soovitused navigeerimisvigade korral</translation>
 <translation id="3692944402865947621">Faili <ph name="FILE_NAME" /> allalaadimine nurjus, kuna salvestuskoht ei ole saadaval.</translation>
 <translation id="3714981814255182093">Leiuriba avamine</translation>
 <translation id="3716182511346448902">Chrome peatas selle lehe, kuna see kasutab liiga palju mälu.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Pealkiri</translation>
 <translation id="4008040567710660924">Lubage konkreetse saidi küpsisefailid.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Soovituste näitamine, kui veebiaadressi ei saa lahendada või ühendust ei õnnestu luua</translation>
 <translation id="4046123991198612571">Järgmine lugu</translation>
 <translation id="4048707525896921369">Vaadake veebisaidil olevaid teemasid lehelt lahkumata. Funktsioon Puuduta otsimiseks saadab sõna ja seda ümbritseva konteksti Google'i otsingusse, andes vastuseks definitsioonid, pildid, otsingutulemused ja muud üksikasjad.
 
@@ -438,7 +430,6 @@
     - Teie liigutused, nt teie kõnnak
 
     Enne juurdepääsu andmist veenduge, et usaldaksite seda saiti.</translation>
-<translation id="424864128008805179">Kas logida Chrome'ist välja?</translation>
 <translation id="4256782883801055595">Avatud lähtekoodi litsentsid</translation>
 <translation id="4259722352634471385">Navigeerimine on blokeeritud: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopeeri lingi aadress</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Otsimiseks kasutatakse teenust Sogou</translation>
 <translation id="4404568932422911380">Järjehoidjaid pole</translation>
-<translation id="4409723563706114196">Kasuta lehe ennustusi</translation>
 <translation id="4411535500181276704">Lihtsustatud režiim</translation>
 <translation id="4415276339145661267">Google'i konto haldamine</translation>
 <translation id="4432792777822557199"><ph name="SOURCE_LANGUAGE" /> keeles olevad lehed tõlgitakse edaspidi <ph name="TARGET_LANGUAGE" /> keelde</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Kas anda sellele saidile juurdepääs teie VR-anduritele?</translation>
 <translation id="5210286577605176222">Eelmisele vahelehele liikumine</translation>
 <translation id="5210365745912300556">Sule vaheleht</translation>
-<translation id="5222676887888702881">Logi välja</translation>
 <translation id="5224771365102442243">Videoga</translation>
 <translation id="5233638681132016545">Uus vaheleht</translation>
 <translation id="526421993248218238">Seda lehte ei saa laadida</translation>
 <translation id="5271967389191913893">Seade ei saa allalaaditavat sisu avada.</translation>
 <translation id="528192093759286357">Täisekraanilt väljumiseks lohistage ülaservast alla ja puudutage tagasinuppu.</translation>
-<translation id="5284584623296338184">Järjehoidjates, ajaloos, paroolides ja muudes seadetes tehtud muudatusi ei sünkroonita enam teie Google'i kontoga. Teie olemasolevad andmed jäävad siiski teie Google'i kontole.</translation>
 <translation id="5292796745632149097">Saatmine</translation>
 <translation id="5300589172476337783">Kuva</translation>
 <translation id="5301954838959518834">Selge, sain aru</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognito režiimi vahekaardid</translation>
 <translation id="5763514718066511291">Puudutage URL-i kopeerimiseks selle rakenduse jaoks</translation>
 <translation id="5765780083710877561">Kirjeldus:</translation>
-<translation id="5777170031995031090">Juhtige seda, kuidas Google kasutab teie sirvimisajalugu otsingu, reklaamide ja muude Google'i teenuste isikupärastamiseks.</translation>
 <translation id="5793665092639000975">Kasutusel on <ph name="SPACE_USED" /> <ph name="SPACE_AVAILABLE" />-st</translation>
 <translation id="5797070761912323120">Google võib kasutada teie ajalugu otsingu, reklaamide ja muude Google'i teenuste isikupärastamiseks</translation>
 <translation id="5804241973901381774">Load</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nimi on liiga pikk</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# pilt}other{# pilti}}</translation>
 <translation id="6447842834002726250">Küpsised</translation>
-<translation id="6448273550210938826">Otsingu ja URL-i soovitused</translation>
 <translation id="6461962085415701688">Faili ei saa avada</translation>
 <translation id="6464977750820128603">Näete saite, mida Chrome'is külastate, ja saate nendele taimereid määrata.\n\nGoogle saab teavet saitide kohta, millele taimereid määrate, ja näeb, kui kaua neid külastate. Selle teabe abil muudetakse teenus Digitaalne heaolu paremaks.</translation>
 <translation id="6475951671322991020">Laadi video alla</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome vajab seadmete skannimiseks juurdepääsu teie asukohale. <ph name="BEGIN_LINK" />Värskendage lube<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Parool</translation>
 <translation id="6659594942844771486">Vaheleht</translation>
-<translation id="666268767214822976">Aadressiribale teksti sisestamisel ennustusteenuse abil seotud päringute ja populaarsete veebisaitide kuvamine</translation>
 <translation id="666731172850799929">Ava rakenduses <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chrome'i privaatsusteatis</translation>
 <translation id="6697492270171225480">Kui lehte ei leita, kuvatakse sarnaste lehtede soovitusi</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Kustuta</translation>
 <translation id="8266862848225348053">Allalaadimise asukoht</translation>
 <translation id="8274165955039650276">Kuva allalaadimised</translation>
-<translation id="8283853025636624853">Sünkroonimine kontoga <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtiitrid</translation>
 <translation id="8300705686683892304">Neid haldab rakendus</translation>
 <translation id="8310344678080805313">Tavapärased vahekaardid</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">ootel</translation>
 <translation id="8970887620466824814">Midagi läks valesti.</translation>
 <translation id="8972098258593396643">Kas soovite alla laadida vaikekausta?</translation>
-<translation id="8981454092730389528">Google'i kontotegevuste haldus</translation>
 <translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation>
 <translation id="8993760627012879038">Uue vahelehe avamine inkognito režiimis</translation>
 <translation id="8998729206196772491">Logite sisse kontoga, mida haldab <ph name="MANAGED_DOMAIN" />, ja annate selle administraatorile üle Chrome'i andmete juhtimise. Teie andmed seotakse jäädavalt selle kontoga. Chrome'ist väljalogimisel kustutatakse teie andmed sellest seadmest, kuid need jäävad alles teie Google'i kontole.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
index f0c5884c..a59b82e7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">پاک کردن سابقه، کوکی‌ها، داده‌های سایت، حافظه پنهان…</translation>
 <translation id="129553762522093515">اخیراً بسته‌شده</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ارسال‌شده از <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">‏برای دسترسی به برگه‌هایتان در دستگاه‌های دیگر، به سیستم Chrome وارد شوید.</translation>
 <translation id="1331212799747679585">‏Chrome به‌روزرسانی نشد. گزینه‌های دیگر</translation>
 <translation id="1332501820983677155">‏میان‌برهای ویژه Google Chrome</translation>
 <translation id="1360432990279830238">از سیستم خارج و همگام‌سازی خاموش شود؟</translation>
-<translation id="136248372334525878">برای بارگیری سریع‌تر و خواندن درحالت آفلاین، صفحات را پیش‌بارگیری کنید</translation>
 <translation id="1369915414381695676">سایت <ph name="SITE_NAME" /> اضافه شد</translation>
 <translation id="1373696734384179344">حافظه برای بارگیری محتوای انتخابی کافی نیست.</translation>
 <translation id="1376578503827013741">درحال محاسبه…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">برگه انتخاب‌شده</translation>
 <translation id="194341124344773587">‏مجوز Chrome را در <ph name="BEGIN_LINK" />تنظیمات Android <ph name="END_LINK" /> روشن کنید.</translation>
 <translation id="1943432128510653496">ذخیره گذرواژه‌ها</translation>
-<translation id="1946005195648379376">‏نحوه استفاده Google از سابقه مرورتان را برای شخصی‌سازی جستجو و سایر سرویس‌های Google کنترل کنید.</translation>
 <translation id="1952172573699511566">درصورت امکان، وب‌سایت‌ها نوشتار را به زبان ترجیحی شما نمایش می‌دهند.</translation>
 <translation id="1960290143419248813">‏به‌روزرسانی‌های Chrome دیگر در این نسخه Android پشتیبانی نمی‌شوند</translation>
 <translation id="1966710179511230534">لطفاً جزئیات ورود به سیستم را به‌روز کنید.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">ضربه برای جستجو</translation>
 <translation id="2079545284768500474">لغو</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> نتیجه از <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">‏برای دریافت محتوای شخصی‌سازی‌شده پیشنهادی Google، به Chrome وارد شوید.</translation>
 <translation id="2091887806945687916">صدا</translation>
 <translation id="2096012225669085171">همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">لغزنده را بکشید تا زمانی که بتوانید این متن را به راحتی بخوانید. بعد از دو ضربه متوالی روی یک پاراگراف، اندازه نوشتار حداقل باید به این بزرگی باشد.</translation>
 <translation id="2323763861024343754">فضای ذخیره‌سازی سایت</translation>
 <translation id="2328985652426384049">ورود به سیستم امکان‌پذیر نیست</translation>
-<translation id="2342981853652716282">‏برای دریافت نشانک‌ها، گذرواژه‌ها و موارد دیگر در همه دستگاه‌هایتان، به سیستم Chrome وارد شوید.</translation>
 <translation id="2349710944427398404">‏کل داده‌های استفاده‌شده توسط Chrome، شامل حساب‌ها، نشانک‌ها و تنظیمات ذخیره‌شده</translation>
 <translation id="2351097562818989364">تنظیمات ترجمه شما بازنشانی شده است.</translation>
 <translation id="2353636109065292463">بررسی اتصال اینترنت</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">در برخی سایت‌ها مسدود می‌شود</translation>
 <translation id="3137521801621304719">خروج از حالت ناشناس</translation>
 <translation id="3143515551205905069">لغو همگام‌سازی</translation>
-<translation id="3148434565183091099">‏برای اینکه نشانک‌ها را در همه دستگاه‌هایتان دریافت کنید به سیستم Chrome وارد شوید.</translation>
 <translation id="3157842584138209013">با استفاده از دکمه «گزینه‌های بیشتر»، ببینید چه مقدار داده صرفه‌جویی کرده‌اید</translation>
 <translation id="3166827708714933426">میان‌برهای پنجره و برگه</translation>
 <translation id="3181954750937456830">مرور ایمن (از شما و دستگاهتان درمقابل سایت‌های خطرناک محافظت می‌کند)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">با استفاده از اعتبارنامه‌های ذخیره شده، به‌طور خودکار به سیستم وب‌سایت‌ها وارد شوید. وقتی این قابلیت خاموش است، هر بار قبل از وارد شدن به سیستم وب‌سایت از شما خواسته می‌شود اطلاعات را تأیید کنید.</translation>
 <translation id="3658159451045945436">بازنشانی باعث پاک شدن سابقه داده‌های ذخیره‌شده ازجمله فهرست سایت‌های بازدیدشده می‌شود.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> برگه را گروه‌بندی کنید.</translation>
-<translation id="3672452749423051839">پیشنهادات خطای پیمایش</translation>
 <translation id="3692944402865947621">به‌دلیل دردسترس نبودن مکان فضای ذخیره‌سازی، <ph name="FILE_NAME" /> بارگیری نشد.</translation>
 <translation id="3714981814255182093">باز کردن «نوار پیدا کردن»</translation>
 <translation id="3716182511346448902">‏این صفحه از حافظه بسیار زیادی استفاده می‌کند، بنابراین Chrome موقتاً آن را متوقف کرد.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">عنوان</translation>
 <translation id="4008040567710660924">کوکی‌ها را برای سایت خاصی مجاز کنید.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ساعت}one{# ساعت}other{# ساعت}}</translation>
-<translation id="4042870126885713738">وقتی آدرس وب شناسایی نمی‌شود یا اتصال برقرار نمی‌شود، پیشنهاداتی نشان داده می‌شود</translation>
 <translation id="4046123991198612571">آهنگ بعدی</translation>
 <translation id="4048707525896921369">‏بدون ترک کردن صفحه با موضوعات وب‌سایت‌ها آشنا شوید. «ضربه برای جستجو»، کلمه و متن اطراف آن را به «جستجوی Google» ارسال می‌کند و معانی، تصاویر، نتایج جستجو و سایر جزئیات را بازمی‌گرداند.
 
@@ -438,7 +430,6 @@
     - حرکت‌های شما، مانند نحوه راه رفتنتان
 
     قبل از دسترسی به این سایت، مطمئن شوید به آن اعتماد دارید.</translation>
-<translation id="424864128008805179">‏از سیستم Chrome خارج می شوید؟</translation>
 <translation id="4256782883801055595">مجوزهای متن‌باز</translation>
 <translation id="4259722352634471385">پیمایش مسدود است: <ph name="URL" /></translation>
 <translation id="4269820728363426813">کپی نشانی پیوند</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">تلفن</translation>
 <translation id="4384468725000734951">‏استفاده از Sogou برای جستجو</translation>
 <translation id="4404568932422911380">هیچ نشانکی موجود نیست</translation>
-<translation id="4409723563706114196">استفاده از پیش‌بینی صفحه</translation>
 <translation id="4411535500181276704">حالت ساده</translation>
 <translation id="4415276339145661267">‏مدیریت حساب Google</translation>
 <translation id="4432792777822557199">از این به بعد، صفحه‌های <ph name="SOURCE_LANGUAGE" />، به <ph name="TARGET_LANGUAGE" /> ترجمه خواهند شد</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">‏به این سایت اجازه داده شود که به حسگرهای VR شما دسترسی داشته باشد؟</translation>
 <translation id="5210286577605176222">رفتن به برگه قبلی</translation>
 <translation id="5210365745912300556">بستن برگه</translation>
-<translation id="5222676887888702881">خروج از سیستم</translation>
 <translation id="5224771365102442243">دارای ویدیو</translation>
 <translation id="5233638681132016545">برگه جدید</translation>
 <translation id="526421993248218238">این صفحه بار نشد</translation>
 <translation id="5271967389191913893">دستگاه نمی‌تواند محتوا را برای بارگیری باز کند.</translation>
 <translation id="528192093759286357">برای خروج از حالت تمام صفحه، از بالا صفحه را بکشید و دکمه برگشت را لمس کنید.</translation>
-<translation id="5284584623296338184">‏تغییرات در نشانک‌ها، سابقه، گذرواژه و سایر تنظیمات دیگر با حساب Google شما همگام‌سازی نخواهد شد. با این حال، داده‌های موجودتان در حساب Google شما باقی خواهند ماند.</translation>
 <translation id="5292796745632149097">ارسال به</translation>
 <translation id="5300589172476337783">نمایش</translation>
 <translation id="5301954838959518834">بله، متوجه شدم</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">برگه‌های ناشناس</translation>
 <translation id="5763514718066511291">برای کپی کردن نشانی وب این برنامه ضربه بزنید</translation>
 <translation id="5765780083710877561">توضیح:</translation>
-<translation id="5777170031995031090">‏نحوه استفاده Google را از سابقه مرورتان برای شخصی‌سازی جستجو، آگهی‌ها و سایر سرویس‌های Google کنترل کنید.</translation>
 <translation id="5793665092639000975">درحال استفاده از <ph name="SPACE_USED" /> از <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">‏Google ممکن است از سابقه مرور شما برای شخصی کردن جستجو، آگهی‌ها و سایر سرویس‌های Google استفاده کند</translation>
 <translation id="5804241973901381774">مجوزها</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">نام خیلی طولانی است</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# تصویر}one{# تصویر}other{# تصویر}}</translation>
 <translation id="6447842834002726250">کوکی‌ها</translation>
-<translation id="6448273550210938826">پیشنهادات جستجو و نشانی وب</translation>
 <translation id="6461962085415701688">فایل باز نمی‌شود</translation>
 <translation id="6464977750820128603">‏می‌توانید سایت‌هایی را که در Chrome بازدید می‌کنید مشاهده کنید و تایمرهایی را برای آن‌ها تنظیم کنید.\n\n‏Google اطلاعاتی درباره سایت‌هایی که برای آن‌ها تایمر تنظیم می‌کنید و مدت زمانی که از آن‌ها بازدید می‌کنید، دریافت می‌کند. از این اطلاعات برای بهبود «آسایش دیجیتالی» استفاده می‌شود.</translation>
 <translation id="6475951671322991020">بارگیری ویدیو</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">‏Chrome برای جستجوی دستگاه‌ها باید به مکان دسترسی داشته باشد. <ph name="BEGIN_LINK" />به‌روزرسانی مجوزها<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">گذرواژه</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">از یک سرویس پیش‌بینی استفاده می‌شود تا هم‌زمان با تایپ کردن شما در نوار آدرس، عبارت‌های جستجوی مرتبط و وب‌سایت‌های محبوب نشان داده شوند</translation>
 <translation id="666731172850799929">باز کردن در <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">‏اخطار حریم خصوصی Chrome</translation>
 <translation id="6697492270171225480">نمایش پیشنهادهای صفحه‌های مشابه وقتی صفحه‌ای پیدا نمی‌شود</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8266862848225348053">مکان بارگیری</translation>
 <translation id="8274165955039650276">مشاهده بارگیری‌ها</translation>
-<translation id="8283853025636624853">در حال همگام‌سازی در <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">زیرنویس‌ها</translation>
 <translation id="8300705686683892304">مدیریت‌شده توسط برنامه</translation>
 <translation id="8310344678080805313">برگه‌های استاندارد</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">در انتظار</translation>
 <translation id="8970887620466824814">مشکلی پیش آمد.</translation>
 <translation id="8972098258593396643">در پوشه پیش‌فرض بارگیری شود؟</translation>
-<translation id="8981454092730389528">‏کنترل‌های فعالیت Google</translation>
 <translation id="8986494364107987395">‏ارسال خودکار آمار کاربرد و گزارش‌های خرابی به Google</translation>
 <translation id="8993760627012879038">باز کردن برگه جدیدی در حالت ناشناس</translation>
 <translation id="8998729206196772491">‏هم‌اکنون درحال ورود به سیستم با یک حساب مدیریت‌شده توسط <ph name="MANAGED_DOMAIN" /> و ارائه کنترل داده‌های Chrome خودتان به سرپرست این حساب هستید. داده‌هایتان به‌طور دائم به این حساب مرتبط می‌شوند. با خروج از Chrome، داده‌هایتان از این دستگاه حذف می‌شوند اما همچنان در حساب Google شما باقی می‌ماند.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
index 058dc68..8066f09 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Tyhjennä historia, evästeet, sivustojen tiedot, välimuisti ja niin edelleen.</translation>
 <translation id="129553762522093515">Hiljattain suljetut välilehdet</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Lähetetty laitteelta <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Käytä välilehtiä muilta laitteiltasi kirjautumalla Chromeen.</translation>
 <translation id="1331212799747679585">Chromea ei voi päivittää. Lisää vaihtoehtoja</translation>
 <translation id="1332501820983677155">Google Chromen ominaisuuksien pikanäppäimet</translation>
 <translation id="1360432990279830238">Kirjaudu ulos ja lopeta synkronointi?</translation>
-<translation id="136248372334525878">Sivujen esilataaminen nopeuttaa lataamista ja mahdollistaa lukemisen offline-tilassa.</translation>
 <translation id="1369915414381695676">Sivusto <ph name="SITE_NAME" /> lisättiin.</translation>
 <translation id="1373696734384179344">Liian vähän muistia valitun sisällön lataamiseen.</translation>
 <translation id="1376578503827013741">Lasketaan…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Valittu välilehti</translation>
 <translation id="194341124344773587">Ota käyttöoikeus käyttöön Chromelle <ph name="BEGIN_LINK" />Android-asetuksissa<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Salasanojen tallentaminen</translation>
-<translation id="1946005195648379376">Hallinnoi tapaa, jolla Google käyttää selaushistoriaasi haun ja muiden Googlen palveluiden muokkaamiseen.</translation>
 <translation id="1952172573699511566">Verkkosivustot näyttävät tekstin valitsemallasi kielellä, kun se on mahdollista.</translation>
 <translation id="1960290143419248813">Chrome-päivityksiä ei enää tueta tässä Android-versiossa.</translation>
 <translation id="1966710179511230534">Päivitä kirjautumistietosi.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Hae napauttamalla</translation>
 <translation id="2079545284768500474">Kumoa</translation>
 <translation id="2082238445998314030">Tulos <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Kirjaudu Chromeen, niin voit lisätä Googlen suosittelemaa sisältöä.</translation>
 <translation id="2091887806945687916">Ääni</translation>
 <translation id="2096012225669085171">Synkronoi ja yksilöi kaikilla laitteilla</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Vedä liukusäädintä, kunnes voit lukea tämän mukavasti. Tekstin tulisi olla vähintään näin suurta kaksoisnapautettuasi kappaletta.</translation>
 <translation id="2323763861024343754">Sivustotietoja tallennettu</translation>
 <translation id="2328985652426384049">Kirjautuminen epäonnistui</translation>
-<translation id="2342981853652716282">Kirjaudu sisään Chromeen, jotta voit käyttää kirjanmerkkejäsi, salasanojasi ja muita asetuksiasi kaikilla laitteillasi.</translation>
 <translation id="2349710944427398404">Chromen käyttämän tallennustilan kokonaismäärä, mukaan lukien tilit, kirjanmerkit ja tallennetut asetukset.</translation>
 <translation id="2351097562818989364">Käännösasetukset on nollattu.</translation>
 <translation id="2353636109065292463">Internetyhteyttäsi tarkistetaan</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Estetty tietyillä sivustoilla</translation>
 <translation id="3137521801621304719">Poistu incognito-tilasta</translation>
 <translation id="3143515551205905069">Peruuta synkronointi</translation>
-<translation id="3148434565183091099">Kirjaudu sisään Chromeen, niin voit käyttää kirjanmerkkejäsi kaikilla laitteilla.</translation>
 <translation id="3157842584138209013">Lisäasetukset-painiketta klikkaamalla voit katsoa, kuinka paljon dataa olet säästänyt.</translation>
 <translation id="3166827708714933426">Välilehti- ja ikkunapikanäppäimet</translation>
 <translation id="3181954750937456830">Selaussuoja (suojaa sinua ja laitettasi vaarallisilta sivustoilta)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Kirjaudu automaattisesti verkkosivustoille käyttämällä tallennettuja kirjautumistietoja. Jos tämä toiminto ei ole käytössä, sinua pyydetään vahvistamaan kirjautuminen aina, kun kirjaudut sivustolle.</translation>
 <translation id="3658159451045945436">Nollaaminen tyhjentää datansäästöhistoriasi, mukaan lukien luettelon paikoista, joissa olet käynyt.</translation>
 <translation id="3663367437272849150">Ryhmittele <ph name="NUM_SELECTED" /> välilehteä.</translation>
-<translation id="3672452749423051839">Selausvirheiden ehdotukset</translation>
 <translation id="3692944402865947621">Lataus epäonnistui, koska tallennussijainti ei ole saatavilla: <ph name="FILE_NAME" /></translation>
 <translation id="3714981814255182093">Avaa hakupalkki</translation>
 <translation id="3716182511346448902">Tämä sivu käyttää liikaa muistia, joten Chrome keskeytti sen.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Nimi</translation>
 <translation id="4008040567710660924">Salli evästeet tietyllä sivustolla.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Näytä ehdotuksia, jos verkko-osoitetta ei tunnisteta tai yhteyttä ei voi muodostaa.</translation>
 <translation id="4046123991198612571">Seuraava kappale</translation>
 <translation id="4048707525896921369">Lue lisätietoja verkkosivujen aiheista poistumatta sivulta. Napauttamalla hakeminen lähettää sanan ja sen asiayhteyden Google Hakuun ja palauttaa määritelmiä, kuvia, hakutuloksia ja muita tietoja.
 
@@ -438,7 +430,6 @@
     – liikkeitäsi, kuten kävelytapaasi.
 
     Varmista, että sivusto on luotettava, ennen kuin myönnät sille käyttöoikeuden.</translation>
-<translation id="424864128008805179">Kirjaudutaanko ulos Chromesta?</translation>
 <translation id="4256782883801055595">Avoimen lähdekoodin käyttöluvat</translation>
 <translation id="4259722352634471385">Kohde on estetty: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopioi linkin osoite</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Puhelin</translation>
 <translation id="4384468725000734951">Hakukoneena käytetään Sogouta.</translation>
 <translation id="4404568932422911380">Ei kirjanmerkkejä</translation>
-<translation id="4409723563706114196">Sivujen ennakoivan esilatauksen käyttö</translation>
 <translation id="4411535500181276704">Yksinkertaistettu tila</translation>
 <translation id="4415276339145661267">Ylläpidä Google-tiliäsi</translation>
 <translation id="4432792777822557199">Kielellä <ph name="SOURCE_LANGUAGE" /> kirjoitetut sivut käännetään tästä lähtien kielelle <ph name="TARGET_LANGUAGE" />.</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Saako tämä sivusto käyttää VR-antureita?</translation>
 <translation id="5210286577605176222">Siirry edelliselle välilehdelle</translation>
 <translation id="5210365745912300556">Sulje välilehti</translation>
-<translation id="5222676887888702881">Kirjaudu ulos</translation>
 <translation id="5224771365102442243">Video sivulla</translation>
 <translation id="5233638681132016545">Uusi välilehti</translation>
 <translation id="526421993248218238">Sivun lataaminen epäonnistui</translation>
 <translation id="5271967389191913893">Laite ei voi avata ladattavaa sisältöä.</translation>
 <translation id="528192093759286357">Poistu koko näytön tilasta vetämällä näytön yläreunasta ja koskettamalla Takaisin-painiketta.</translation>
-<translation id="5284584623296338184">Kirjanmerkkeihin, historiaan, salasanoihin ja muihin asetuksiin tehtäviä muutoksia ei enää synkronoida Google-tilillesi. Olemassa olevia tietojasi säilytetään kuitenkin Google-tililläsi.</translation>
 <translation id="5292796745632149097">Lähetä:</translation>
 <translation id="5300589172476337783">Näytä</translation>
 <translation id="5301954838959518834">Selvä</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Incognito-välilehdet</translation>
 <translation id="5763514718066511291">Kosketa kopioidaksesi tämän sovelluksen URL-osoite</translation>
 <translation id="5765780083710877561">Kuvaus:</translation>
-<translation id="5777170031995031090">Hallinnoi tapaa, jolla Google käyttää selaushistoriaasi haun, mainosten ja muiden Googlen palveluiden muokkaamiseen.</translation>
 <translation id="5793665092639000975">Käytössä <ph name="SPACE_USED" /> / <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google voi muokata Hakua, mainoksia ja muita Googlen palveluita historiasi perusteella</translation>
 <translation id="5804241973901381774">Käyttöoikeudet</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nimi on liian pitkä</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# kuva}other{# kuvaa}}</translation>
 <translation id="6447842834002726250">Evästeet</translation>
-<translation id="6448273550210938826">Haku ja URL-ehdotukset</translation>
 <translation id="6461962085415701688">Tiedoston avaaminen epäonnistui</translation>
 <translation id="6464977750820128603">Voit nähdä Chromessa käyttämäsi sivustot ja asettaa niille ajastimia.\n\nGoogle saa tietoa sivustoista, joille asetat ajastimia, ja sivustojen käytön kestosta. Tietoja käytetään Digitaalisen hyvinvoinnin parantamiseen.</translation>
 <translation id="6475951671322991020">Lataa video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome tarvitsee sijaintitietojen käyttöoikeuden hakeakseen laitteita. <ph name="BEGIN_LINK" />Päivitä käyttöoikeudet<ph name="END_LINK" />.</translation>
 <translation id="6657585470893396449">Salasana</translation>
 <translation id="6659594942844771486">Välilehti</translation>
-<translation id="666268767214822976">Käytä ennakointipalvelua, joka näyttää sinulle aiheeseen liittyviä kyselyitä sekä suosittuja verkkosivustoja kirjoittaessasi osoitepalkkiin.</translation>
 <translation id="666731172850799929">Avaa sovelluksessa <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chromen tietosuojailmoitus</translation>
 <translation id="6697492270171225480">Näytä ehdotuksia samankaltaisista sivuista, kun sivua ei löydy</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Poista</translation>
 <translation id="8266862848225348053">Lataussijainti</translation>
 <translation id="8274165955039650276">Näytä lataukset</translation>
-<translation id="8283853025636624853">Synkronoidaan tietoja tilille <ph name="SYNC_ACCOUNT_USER_NAME" />.</translation>
 <translation id="8284326494547611709">Tekstitykset</translation>
 <translation id="8300705686683892304">Sovelluksen ylläpitämät</translation>
 <translation id="8310344678080805313">Tavalliset välilehdet</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">odottaa</translation>
 <translation id="8970887620466824814">Tapahtui virhe.</translation>
 <translation id="8972098258593396643">Ladataanko tiedosto oletuskansioon?</translation>
-<translation id="8981454092730389528">Googlen toimintojen hallinta</translation>
 <translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation>
 <translation id="8993760627012879038">Avaa uusi välilehti incognito-tilassa</translation>
 <translation id="8998729206196772491">Olet kirjautumassa sisään verkkotunnuksen <ph name="MANAGED_DOMAIN" /> hallinnoimalla tilillä ja antamassa sen järjestelmänvalvojalle oikeuden hallita Chrome-tietojasi. Tietosi liitetään pysyvästi tähän tiliin. Chromesta uloskirjautuminen poistaa tietosi tältä laitteelta, mutta ne säilyvät Google-tililläsi.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
index 3347bd7..a53f9fd9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">I-clear ang history, cookies, site data, cache…</translation>
 <translation id="129553762522093515">Kamakailang isinara</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Ipinadala mula sa <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Upang makuha ang iyong mga tab mula sa iba mo pang mga device, mag-sign in sa Chrome.</translation>
 <translation id="1331212799747679585">Hindi ma-update ang Chrome. Higit pang opsyon</translation>
 <translation id="1332501820983677155">Mga shortcut ng feature ng Google Chrome</translation>
 <translation id="1360432990279830238">Mag-sign out at i-off ang pag-sync?</translation>
-<translation id="136248372334525878">Mag-preload ng mga page para sa mas mabilis na pag-load at offline na pagbabasa</translation>
 <translation id="1369915414381695676">Nadagdag na ang site ng <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Hindi sapat ang memory upang ma-download ang napiling content.</translation>
 <translation id="1376578503827013741">Kino-compute…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Napiling Tab</translation>
 <translation id="194341124344773587">I-on ang pahintulot para sa Chrome sa <ph name="BEGIN_LINK" />Mga Setting ng Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">I-save ang mga password</translation>
-<translation id="1946005195648379376">Kontrolin kung paano ginagamit ng Google ang iyong history ng pag-browse para i-personalize ang Search at iba pang serbisyo ng Google.</translation>
 <translation id="1952172573699511566">Magpapakita ang mga website ng text sa iyong gustong wika, kung posible.</translation>
 <translation id="1960290143419248813">Hindi na sinusuportahan ang mga update sa Chrome para sa bersyong ito ng Android.</translation>
 <translation id="1966710179511230534">Paki-update ang iyong mga detalye sa pag-sign in.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Mag-tap upang Maghanap</translation>
 <translation id="2079545284768500474">I-undo</translation>
 <translation id="2082238445998314030">Resulta <ph name="RESULT_NUMBER" /> sa <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Upang makakuha ng naka-personalize na content na iminumungkahi ng Google, mag-sign in sa Chrome.</translation>
 <translation id="2091887806945687916">Tunog</translation>
 <translation id="2096012225669085171">Mag-sync at mag-personalize sa lahat ng device</translation>
 <translation id="2100273922101894616">Awtomatikong Mag-sign in</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">I-drag ang slider hanggang sa mabasa mo ito nang kumportable. Dapat ay halos ganito kalaki ang text pagkatapos mag-double tap sa isang talata.</translation>
 <translation id="2323763861024343754">Storage ng site</translation>
 <translation id="2328985652426384049">Hindi makapag-sign in</translation>
-<translation id="2342981853652716282">Mag-sign in sa Chrome upang makuha ang iyong mga bookmark, password, at higit pa sa lahat ng device mo.</translation>
 <translation id="2349710944427398404">Kabuuang data na ginagamit ng Chrome, kabilang ang mga account, bookmark at naka-save na setting</translation>
 <translation id="2351097562818989364">Na-reset ang iyong mga setting sa pag-translate.</translation>
 <translation id="2353636109065292463">Sinusuri ang iyong koneksyon sa internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Naka-block sa ilang site</translation>
 <translation id="3137521801621304719">Umalis sa mode na incognito</translation>
 <translation id="3143515551205905069">Kanselahin ang pag-sync</translation>
-<translation id="3148434565183091099">Para mailagay ang iyong mga bookmark sa lahat ng device mo, mag-sign in sa Chrome.</translation>
 <translation id="3157842584138209013">Tingnan kung gaano karaming data ang iyong natipid sa button ng Higit Pang Opsyon</translation>
 <translation id="3166827708714933426">Mga shortcut ng tab at window</translation>
 <translation id="3181954750937456830">Ligtas na Pag-browse (pinoprotektahan ka at ang iyong device mula sa mga mapanganib na site)</translation>
@@ -329,6 +323,7 @@
 <translation id="3350687908700087792">Isara ang lahat ng incognito na tab</translation>
 <translation id="3353615205017136254">Hatid ng Google ang lite na page. I-tap ang button na “i-load ang orihinal” para i-load ang orihinal na page.</translation>
 <translation id="3367813778245106622">Mag-sign in muli upang simulan ang pag-sync</translation>
+<translation id="3374023511497244703">Hindi na isi-sync ang iyong mga bookmark, history, mga password, at iba pang data ng Chrome sa Google Account mo</translation>
 <translation id="3384347053049321195">Magbahagi ng larawan</translation>
 <translation id="3386292677130313581">Magtanong bago payagan ang mga site na malaman ang iyong lokasyon (inirerekomenda)</translation>
 <translation id="3387650086002190359">Hindi na-download ang <ph name="FILE_NAME" /> dahil sa mga error sa file system.</translation>
@@ -360,7 +355,6 @@
 <translation id="363596933471559332">Awtomatikong mag-sign in sa mga website gamit ang mga naka-store na kredensyal. Kapag naka-off ang feature, hihilingin sa iyong mag-verify sa tuwing magsa-sign in ka sa isang website.</translation>
 <translation id="3658159451045945436">Kapag na-reset, mabubura ang iyong history ng pagtitipid ng data, kabilang ang listahan ng mga binisitang site.</translation>
 <translation id="3663367437272849150">Pagpangkatin ang <ph name="NUM_SELECTED" /> tab.</translation>
-<translation id="3672452749423051839">Mga suhestyon para sa error sa pag-navigate</translation>
 <translation id="3692944402865947621">Hindi na-download ang <ph name="FILE_NAME" /> dahil hindi maabot ang lokasyon ng storage.</translation>
 <translation id="3714981814255182093">Buksan ang Bar sa Paghahanap</translation>
 <translation id="3716182511346448902">Masyadong malaki ang ginagamit na memory ng page na ito kaya na-pause ito ng Chrome.</translation>
@@ -403,7 +397,6 @@
 <translation id="4002066346123236978">Pamagat</translation>
 <translation id="4008040567710660924">Payagan ang cookies para sa isang partikular na site.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# oras}one{# oras}other{# na oras}}</translation>
-<translation id="4042870126885713738">Magpakita ng mga suhestyon kapag hindi ma-resolve ang isang website o kung hindi makakonekta</translation>
 <translation id="4046123991198612571">Susunod na track</translation>
 <translation id="4048707525896921369">Matuto tungkol sa mga paksa sa mga website nang hindi umaalis sa page. Ipinapadala sa Google Search ng I-tap para Maghanap ang salita at ang konteksto nito, na nagbibigay ng mga kahulugan, larawan, resulta ng paghahanap, at iba pang detalye.
 
@@ -437,7 +430,6 @@
     - Iyong mga pagkilos, gaya ng kung paano ka maglakad
 
     Tiyaking pinagkakatiwalaan mo ang site na ito bago mo payagan ang pag-access.</translation>
-<translation id="424864128008805179">Mag-sign out sa Chrome?</translation>
 <translation id="4256782883801055595">Mga lisensya ng open source</translation>
 <translation id="4259722352634471385">Naka-block ang navigation: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopyahin ang address ng link</translation>
@@ -451,7 +443,6 @@
 <translation id="4378154925671717803">Telepono</translation>
 <translation id="4384468725000734951">Ginagamit ang Sogou para sa paghahanap</translation>
 <translation id="4404568932422911380">Walang bookmark</translation>
-<translation id="4409723563706114196">Gamitin ang mga hula sa page</translation>
 <translation id="4411535500181276704">Lite mode</translation>
 <translation id="4415276339145661267">Pamahalaan ang iyong Google Account</translation>
 <translation id="4432792777822557199">Simula ngayon ay isasalin na sa <ph name="TARGET_LANGUAGE" /> ang mga page na nasa <ph name="SOURCE_LANGUAGE" /></translation>
@@ -576,13 +567,11 @@
 <translation id="5202089186707505116">Payagan ang site na ito na i-access ang iyong mga sensor ng VR?</translation>
 <translation id="5210286577605176222">Pumunta sa nakaraang tab</translation>
 <translation id="5210365745912300556">Isara ang tab</translation>
-<translation id="5222676887888702881">Mag-sign out</translation>
 <translation id="5224771365102442243">May video</translation>
 <translation id="5233638681132016545">Bagong tab</translation>
 <translation id="526421993248218238">Hindi ma-load ang page na ito</translation>
 <translation id="5271967389191913893">Hindi mabuksan ng device ang content na ida-download.</translation>
 <translation id="528192093759286357">I-drag mula sa itaas at pindutin ang button na bumalik upang lumabas sa full screen.</translation>
-<translation id="5284584623296338184">Hindi na masi-sync sa Google Account mo ang mga pagbabago sa iyong mga bookmark, history, password, at iba pang setting. Gayunpaman, mananatiling naka-store sa Google account mo ang iyong kasalukuyang data.</translation>
 <translation id="5292796745632149097">Ipadala kay</translation>
 <translation id="5300589172476337783">Ipakita</translation>
 <translation id="5301954838959518834">OK, nakuha ko</translation>
@@ -659,7 +648,6 @@
 <translation id="5763382633136178763">Mga tab na incognito</translation>
 <translation id="5763514718066511291">I-tap upang kopyahin ang URL para sa app na ito</translation>
 <translation id="5765780083710877561">Paglalarawan:</translation>
-<translation id="5777170031995031090">Kontrolin kung paano ginagamit ng Google ang iyong history ng pag-browse para i-personalize ang Search, mga ad, at iba pang serbisyo ng Google.</translation>
 <translation id="5793665092639000975">Gumagamit ng <ph name="SPACE_USED" /> ng <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Maaaring gamitin ng Google ang iyong history para i-personalize ang Search, mga ad, at iba pang serbisyo ng Google</translation>
 <translation id="5804241973901381774">Mga Pahintulot</translation>
@@ -753,7 +741,6 @@
 <translation id="6441734959916820584">Masyadong mahaba ang pangalan</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Larawan}one{# Larawan}other{# na Larawan}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Mga suhestyon sa paghahanap at URL</translation>
 <translation id="6461962085415701688">Hindi mabuksan ang file</translation>
 <translation id="6464977750820128603">Puwede mong makita ang mga site na binibisita mo sa Chrome at puwede kang magtakda ng mga timer para sa mga ito.\n\nKumukuha ng impormasyon ang Google tungkol sa mga site kung saan ka nagtakda ng mga timer at inaalam nito kung gaano mo katagal binisita ang mga ito. Ginagamit ang impormasyong ito para pahusayin ang Digital Wellness.</translation>
 <translation id="6475951671322991020">I-download ang video</translation>
@@ -784,7 +771,6 @@
 <translation id="6656545060687952787">Kailangan ng Chrome ng access sa lokasyon upang makapag-scan at makakita ng mga device. <ph name="BEGIN_LINK" />I-update ang mga pahintulot<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Password</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Gumamit ng serbisyo sa paghula para magpakita ng mga nauugnay na query at sikat na website habang nagta-type ka sa address bar</translation>
 <translation id="666731172850799929">Buksan sa <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Notification ng Privacy ng Chrome</translation>
 <translation id="6697492270171225480">Magpakita ng mga mungkahi para sa mga katulad na page kapag hindi mahanap ang isang page</translation>
@@ -796,6 +782,7 @@
 <translation id="671481426037969117">Natapos na ang iyong timer ng <ph name="FQDN" />. Magsisimula itong muli bukas.</translation>
 <translation id="6738867403308150051">Nagda-download...</translation>
 <translation id="6746124502594467657">Ibaba</translation>
+<translation id="6751888224264752704">I-clear din ang data ng Chrome na ito sa device na ito</translation>
 <translation id="6766622839693428701">Mag-swipe pababa para isara.</translation>
 <translation id="6766758767654711248">I-tap para pumunta sa site</translation>
 <translation id="6767294960381293877">Nakabukas ang listahan ng mga device kung saan magbabahagi ng tab nang kalahati ang taas.</translation>
@@ -1014,7 +1001,6 @@
 <translation id="8261506727792406068">I-delete</translation>
 <translation id="8266862848225348053">Lokasyon ng download</translation>
 <translation id="8274165955039650276">Tingnan ang mga download</translation>
-<translation id="8283853025636624853">Sini-sync sa <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Mga Caption</translation>
 <translation id="8300705686683892304">Pinapamahalaan ng app</translation>
 <translation id="8310344678080805313">Mga karaniwang tab</translation>
@@ -1105,7 +1091,6 @@
 <translation id="8965591936373831584">nakabinbin</translation>
 <translation id="8970887620466824814">Nagkaproblema.</translation>
 <translation id="8972098258593396643">I-download sa default na folder?</translation>
-<translation id="8981454092730389528">Mga Kontrol ng Aktibidad ng Google</translation>
 <translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation>
 <translation id="8993760627012879038">Magbukas ng bagong tab sa Incognito mode</translation>
 <translation id="8998729206196772491">Nagsa-sign in ka gamit ang isang account na pinamamahalaan ng <ph name="MANAGED_DOMAIN" /> at binibigyan mo ang administrator nito ng kontrol sa iyong data sa Chrome. Permanenteng mauugnay ang iyong data sa account na ito. Made-delete ang data mo sa device na ito kapag nag-sign out ka sa Chrome, ngunit mananatili itong naka-store sa iyong Google Account.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
index 3b759bd7..84b54c7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Efface l'historique, vider le cache, supprimer les cookies et les données de site…</translation>
 <translation id="129553762522093515">Récemment fermés</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> (envoyé depuis <ph name="DEVICE_NAME" />)</translation>
-<translation id="1326317727527857210">Connectez-vous à Chrome pour accéder à vos onglets sur vos autres appareils.</translation>
 <translation id="1331212799747679585">Impossible de mettre à jour Chrome. Plus d'options</translation>
 <translation id="1332501820983677155">Raccourcis liés aux fonctionnalités de Google Chrome</translation>
 <translation id="1360432990279830238">Se déconnecter et arrêter la synchro. ?</translation>
-<translation id="136248372334525878">Précharge des pages pour accélérer leur chargement ou les lire hors connexion</translation>
 <translation id="1369915414381695676">Site "<ph name="SITE_NAME" />" ajouté</translation>
 <translation id="1373696734384179344">Mémoire insuffisante pour télécharger le contenu sélectionné.</translation>
 <translation id="1376578503827013741">Calcul…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Onglet sélectionné</translation>
 <translation id="194341124344773587">Activer l'autorisation pour Chrome dans les <ph name="BEGIN_LINK" />paramètres Android<ph name="END_LINK" /></translation>
 <translation id="1943432128510653496">Enregistrer les mots de passe</translation>
-<translation id="1946005195648379376">Contrôlez la façon dont Google utilise votre historique de navigation pour personnaliser la recherche et d'autres services Google.</translation>
 <translation id="1952172573699511566">Les sites Web s'afficheront dans votre langue préférée lorsque ce sera possible.</translation>
 <translation id="1960290143419248813">Les mises à jour de Chrome ne sont plus disponibles avec cette version d'Android</translation>
 <translation id="1966710179511230534">Veuillez mettre à jour vos informations de connexion.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Appuyer pour rechercher</translation>
 <translation id="2079545284768500474">Annuler</translation>
 <translation id="2082238445998314030">Résultat <ph name="RESULT_NUMBER" /> sur <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Pour obtenir une recommandation de contenu personnalisé de la part de Google, connectez-vous à Chrome.</translation>
 <translation id="2091887806945687916">Son</translation>
 <translation id="2096012225669085171">Synchroniser et personnaliser les données sur tous les appareils</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Faites glisser le curseur pour lire le texte aisément. Sa taille doit être similaire à celle-ci lorsque vous appuyez deux fois sur un paragraphe.</translation>
 <translation id="2323763861024343754">Données de site stockées</translation>
 <translation id="2328985652426384049">Impossible de se connecter</translation>
-<translation id="2342981853652716282">Connectez-vous à Chrome pour accéder à vos favoris, mots de passe et bien plus sur tous vos appareils.</translation>
 <translation id="2349710944427398404">Espace de stockage utilisé pour l'ensemble des données Chrome, y compris les comptes, favoris et paramètres enregistrés</translation>
 <translation id="2351097562818989364">Les paramètres de traduction ont été réinitialisés.</translation>
 <translation id="2353636109065292463">Vérifier votre connexion Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloqué sur certains sites</translation>
 <translation id="3137521801621304719">Désactiver le mode navigation privée</translation>
 <translation id="3143515551205905069">Annuler la synchronisation</translation>
-<translation id="3148434565183091099">Connectez-vous à Chrome pour synchroniser vos favoris sur tous vos appareils.</translation>
 <translation id="3157842584138209013">Découvrez la quantité de données économisées en cliquant sur le bouton "Plus d'options"</translation>
 <translation id="3166827708714933426">Raccourcis liés aux onglets et aux fenêtres</translation>
 <translation id="3181954750937456830">Navigation sécurisée (assure votre protection et celle de votre appareil contre les sites dangereux)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Connexion automatique aux sites Web à l'aide des identifiants enregistrés. Lorsque la fonctionnalité est désactivée, vous êtes invité à effectuer la validation avant chaque connexion à un site Web.</translation>
 <translation id="3658159451045945436">Le processus de réinitialisation efface l'historique de l'économiseur de données, y compris la liste des sites consultés.</translation>
 <translation id="3663367437272849150">Regrouper les onglets <ph name="NUM_SELECTED" />.</translation>
-<translation id="3672452749423051839">Suggestions en cas d'erreur de navigation</translation>
 <translation id="3692944402865947621">Échec du téléchargement du fichier "<ph name="FILE_NAME" />" en raison de l'espace de stockage indisponible.</translation>
 <translation id="3714981814255182093">Ouvrir la barre de recherche</translation>
 <translation id="3716182511346448902">Cette page utilise trop de mémoire, Chrome a donc interrompu son chargement.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titre</translation>
 <translation id="4008040567710660924">Autorisez les cookies pour un site spécifique.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Afficher d'autres solutions lorsqu'une adresse Web ne peut pas être résolue ou qu'une connexion ne peut pas être établie</translation>
 <translation id="4046123991198612571">Piste suivante</translation>
 <translation id="4048707525896921369">Découvrez les thèmes abordés sur les sites Web sans quitter la page. La fonctionnalité "Appuyer pour rechercher" transmet un mot et son contexte à la recherche Google, qui renvoie à son tour des définitions, des images, des résultats de recherche et d'autres informations.
 
@@ -438,7 +430,6 @@
     – Vos mouvements, par exemple votre démarche
 
     N'autorisez l'accès que si vous faites confiance à ce site.</translation>
-<translation id="424864128008805179">Se déconnecter de Chrome ?</translation>
 <translation id="4256782883801055595">Licences Open Source</translation>
 <translation id="4259722352634471385">La navigation sur <ph name="URL" /> est bloquée.</translation>
 <translation id="4269820728363426813">Copier l'adresse du lien</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Téléphone</translation>
 <translation id="4384468725000734951">Utilisation de Sogou pour les recherches</translation>
 <translation id="4404568932422911380">Aucun favori</translation>
-<translation id="4409723563706114196">Utiliser le service de prédiction</translation>
 <translation id="4411535500181276704">Mode simplifié</translation>
 <translation id="4415276339145661267">Gérer votre compte Google</translation>
 <translation id="4432792777822557199">Les pages en <ph name="SOURCE_LANGUAGE" /> seront désormais traduites en <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Autoriser ce site à accéder aux capteurs RV de votre appareil ?</translation>
 <translation id="5210286577605176222">Accéder à l'onglet précédent</translation>
 <translation id="5210365745912300556">Fermer l'onglet</translation>
-<translation id="5222676887888702881">Déconnexion</translation>
 <translation id="5224771365102442243">Avec vidéo</translation>
 <translation id="5233638681132016545">Nouvel onglet</translation>
 <translation id="526421993248218238">Impossible de charger cette page</translation>
 <translation id="5271967389191913893">Impossible d'ouvrir le contenu à télécharger sur l'appareil.</translation>
 <translation id="528192093759286357">Pour quitter le mode plein écran, faites glisser un doigt du haut vers le bas, puis appuyez sur le bouton Retour.</translation>
-<translation id="5284584623296338184">Les modifications apportées à vos favoris, votre historique, vos mots de passe et d'autres paramètres ne seront plus synchronisées avec votre compte Google. Vos données seront cependant conservées dans votre compte Google.</translation>
 <translation id="5292796745632149097">Envoyer sur</translation>
 <translation id="5300589172476337783">Afficher</translation>
 <translation id="5301954838959518834">OK</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Onglets de navigation privée</translation>
 <translation id="5763514718066511291">Appuyez pour copier l'URL pour cette application</translation>
 <translation id="5765780083710877561">Description :</translation>
-<translation id="5777170031995031090">Contrôlez la façon dont Google utilise votre historique de navigation pour personnaliser la recherche, les annonces et d'autres services Google.</translation>
 <translation id="5793665092639000975">Utilisation de <ph name="SPACE_USED" /> sur <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google peut utiliser votre historique pour personnaliser la recherche, les annonces et d'autres services Google</translation>
 <translation id="5804241973901381774">Autorisations</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nom trop long</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# image}one{# image}other{# images}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Suggestions de recherche et d'URL</translation>
 <translation id="6461962085415701688">Impossible d'ouvrir le fichier</translation>
 <translation id="6464977750820128603">Vous pouvez voir les sites que vous avez consultés dans Chrome et définir des minuteurs pour ceux-ci.\n\nGoogle obtient des informations sur les sites pour lesquels vous définissez des minuteurs et peut déterminer le temps que vous passez sur ces derniers. Ces informations sont utilisées pour améliorer Bien-être numérique.</translation>
 <translation id="6475951671322991020">Télécharger la vidéo</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome doit accéder aux données de localisation pour rechercher des appareils. <ph name="BEGIN_LINK" />Mettre à jour les autorisations<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Mot de passe</translation>
 <translation id="6659594942844771486">Onglet</translation>
-<translation id="666268767214822976">Utiliser un service de prédiction pour suggérer des requêtes associées et des sites populaires lorsque vous saisissez des termes dans la barre d'adresse</translation>
 <translation id="666731172850799929">Ouvrir dans <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Avis de confidentialité de Chrome</translation>
 <translation id="6697492270171225480">Afficher des suggestions de pages similaires lorsqu'une page est introuvable</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8266862848225348053">Emplacement de téléchargement</translation>
 <translation id="8274165955039650276">Voir les téléchargements</translation>
-<translation id="8283853025636624853">Synchronisation avec <ph name="SYNC_ACCOUNT_USER_NAME" />…</translation>
 <translation id="8284326494547611709">Sous-titres</translation>
 <translation id="8300705686683892304">Gérés par l'application</translation>
 <translation id="8310344678080805313">Onglets standards</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">en attente</translation>
 <translation id="8970887620466824814">Un problème est survenu</translation>
 <translation id="8972098258593396643">Télécharger dans le dossier par défaut ?</translation>
-<translation id="8981454092730389528">Commandes Google relatives à l'activité</translation>
 <translation id="8986494364107987395">Envoie automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation>
 <translation id="8993760627012879038">Ouvrir un nouvel onglet en mode navigation privée</translation>
 <translation id="8998729206196772491">Vous vous connectez avec un compte géré par <ph name="MANAGED_DOMAIN" />, ce qui permettra à son administrateur de contrôler vos données Chrome. Celles-ci seront définitivement associées à ce compte. Si vous vous déconnectez de Chrome, vos données seront supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
index 3388f1a3..879d8412f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ઇતિહાસ, કુકી, સાઇટ ડેટા, કૅશ સાફ કરો…</translation>
 <translation id="129553762522093515">તાજેતરમાં બંધ કરેલા</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> પરથી મોકલેલ</translation>
-<translation id="1326317727527857210">તમારા અન્ય ઉપકરણો પરથી તમારા ટૅબ્સ મેળવવા માટે, Chrome માં સાઇન ઇન કરો.</translation>
 <translation id="1331212799747679585">Chrome અપડેટ કરી શકાતું નથી. વધુ વિકલ્પો</translation>
 <translation id="1332501820983677155">Google Chrome સુવિધાના શૉર્ટકટ્સ</translation>
 <translation id="1360432990279830238">સાઇન આઉટ કરી સિંકનો વિકલ્પ બંધ કરવો છે?</translation>
-<translation id="136248372334525878">ઝડપી લોડ કરવા અને ઑફલાઇન વાંચન માટે પેજને પહેલેથી લોડ કરો</translation>
 <translation id="1369915414381695676">સાઈટ <ph name="SITE_NAME" /> ઉમેરવામાં આવી</translation>
 <translation id="1373696734384179344">પસંદ કરેલ કન્ટેન્ટ ડાઉનલોડ કરવા માટે મેમરી અપૂરતી છે.</translation>
 <translation id="1376578503827013741">ગણતરી કરી રહ્યાં છે…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">પસંદ કરેલ ટૅબ</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android સેટિંગ્સ<ph name="END_LINK" />માં Chrome માટે પરવાનગી ચાલુ કરો.</translation>
 <translation id="1943432128510653496">પાસવર્ડ સાચવો</translation>
-<translation id="1946005195648379376">Google, શોધ અને અન્ય Google સેવાઓને મનગમતી બનાવવા માટે તમારા બ્રાઉઝિંગ ઇતિહાસનો ઉપયોગ કેવી રીતે કરે છે તે નિયંત્રિત કરો.</translation>
 <translation id="1952172573699511566">જ્યારે શક્ય હશે, ત્યારે વેબસાઇટ તમારી પસંદગીની ભાષામાં ટેક્સ્ટ બતાવશે.</translation>
 <translation id="1960290143419248813">Androidના આ વર્ઝન માટે Chrome અપડેટ હવે સમર્થિત નથી</translation>
 <translation id="1966710179511230534">કૃપા કરીને તમારી સાઇન-ઇન વિગતો અપડેટ કરો.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">શોધવા માટે ટેપ કરો</translation>
 <translation id="2079545284768500474">છેલ્લો ફેરફાર રદ કરો</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> માંથી <ph name="RESULT_NUMBER" /> પરિણામ</translation>
-<translation id="2086652334978798447">Google દ્વારા સૂચવેલ વ્યક્તિગત કરેલ કન્ટેન્ટ મેળવવા માટે, Chrome માં સાઇન ઇન કરો.</translation>
 <translation id="2091887806945687916">ધ્વનિ</translation>
 <translation id="2096012225669085171">સમગ્ર ઉપકરણો પર સિંક કરો અને વ્યક્તિગત બનાવો</translation>
 <translation id="2100273922101894616">સ્વતઃ સાઇન-ઇન</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">જ્યાં સુધી તમે આ અનુકૂળ રીતે વાંચી ન શકો ત્યાં સુધી સ્લાઇડર ખેંચો. ફકરા પર ડબલ-ટેપિંગ પછી ટેક્સ્ટ ઓછામાં ઓછી આટલી મોટી દેખાવી જોઈએ.</translation>
 <translation id="2323763861024343754">સાઇટ સ્ટોરેજ</translation>
 <translation id="2328985652426384049">સાઇન ઇન કરી શકાતું નથી</translation>
-<translation id="2342981853652716282">તમારા બધા ઉપકરણો પર તમારા બુકમાર્ક, પાસવર્ડ અને બીજુ ઘણું મેળવવા માટે Chromeમાં સાઇન ઇન કરો.</translation>
 <translation id="2349710944427398404">Chrome દ્વારા ઉપયોગમાં લેવાયેલ કુલ સ્ટોરેજ, એકાઉન્ટ્સ, બુકમાર્ક્સ અને સાચવેલ સેટિંગ્સ સહિત</translation>
 <translation id="2351097562818989364">તમારી અનુવાદ સેટિંગ્સ ફરીથી સેટ કરવામાં આવી છે.</translation>
 <translation id="2353636109065292463">તમારું ઇન્ટરનેટ કનેક્શન તપાસી રહ્યાં છીએ</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">કેટલીક સાઇટ પર બ્લૉક કરેલ</translation>
 <translation id="3137521801621304719">છુપા મોડને છોડો</translation>
 <translation id="3143515551205905069">સિંક કરવાનું રદ કરો</translation>
-<translation id="3148434565183091099">તમારા સમગ્ર ઉપકરણો પર તમારા બુકમાર્ક્સ મેળવવા માટે, Chrome માં સાઇન ઇન કરો.</translation>
 <translation id="3157842584138209013">વધુ વિકલ્પો બટનની મદદથી તમે કેટલો ડેટા સાચવ્યો તે જુઓ</translation>
 <translation id="3166827708714933426">ટૅબ અને વિંડો શૉર્ટકટ્સ</translation>
 <translation id="3181954750937456830">Safe Browsing (તમારું અને તમારા ડિવાઇસનું જોખમી સાઇટથી રક્ષણ કરે છે)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">સંગ્રહિત ઓળખપત્રોનો ઉપયોગ કરીને વેબસાઇટ્સમાં આપમેળે સાઇન ઇન કરો. જ્યારે સુવિધા બંધ હોય છે, ત્યારે વેબસાઇટમાં સાઇન ઇન કરતાં પહેલાં દર વખતે તમને ચકાસણી માટે કહેવામાં આવશે.</translation>
 <translation id="3658159451045945436">રીસેટ કરવાથી મુલાકાત લીધેલી સાઇટની સૂચિ સહિત તમારા ડેટા બચતના ઇતિહાસને કાઢી નાખે છે.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> ટૅબનું ગ્રૂપ બનાવો.</translation>
-<translation id="3672452749423051839">નેવિગેશન ભૂલ સૂચનો</translation>
 <translation id="3692944402865947621">સ્ટોરેજ સ્થાન સુધી પહોંચી ન શકવાને કારણે <ph name="FILE_NAME" />નું ડાઉનલોડ નિષ્ફળ થયું.</translation>
 <translation id="3714981814255182093">શોધો બાર ખોલો</translation>
 <translation id="3716182511346448902">આ પેજ ઘણી વધુ મેમરીનો ઉપયોગ કરે છે, તેથી Chromeએ તેને થોભાવ્યું છે.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">શીર્ષક</translation>
 <translation id="4008040567710660924">કોઈ ચોક્કસ સાઇટ માટે કુકીને મંજૂરી આપો.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# કલાક}one{# કલાક}other{# કલાક}}</translation>
-<translation id="4042870126885713738">જ્યારે વેબ ઍડ્રેસ ન ઉકેલાય અથવા કનેક્શન કરી શકાતું ન હોય ત્યારે સૂચનો દર્શાવો</translation>
 <translation id="4046123991198612571">આગલો ટ્રૅક</translation>
 <translation id="4048707525896921369">પેજ છોડ્યાં વગર વેબસાઇટ પરના મુદ્દાઓ વિશે જાણો. શોધને ટૅપ કરવાથી એક શબ્દ અને તેની આસપાસનો સંદર્ભ Google શોધને મોકલે છે, જે વ્યાખ્યાઓ, ફોટોો, શોધ પરિણામો અને અન્ય વિગતો પરત કરે છે.
 
@@ -438,7 +430,6 @@
     - તમારું હલનચલન, જેમ કે તમારી ચાલવાની રીત
 
     તમે ઍક્સેસ માટે મંજૂરી આપો તે પહેલાં ખાતરી કરો કે તમે આ સાઇટ પર વિશ્વાસ મૂકો છો.</translation>
-<translation id="424864128008805179">Chromeમાંથી સાઇન આઉટ કરીએ?</translation>
 <translation id="4256782883801055595">ઓપન સોર્સ લાઇસન્સ</translation>
 <translation id="4259722352634471385">નેવિગેશન અવરોધિત છે: <ph name="URL" /></translation>
 <translation id="4269820728363426813">લિંક સરનામું કૉપિ કરો</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">ફોન</translation>
 <translation id="4384468725000734951">શોધ માટે Sogou નો ઉપયોગ કરી રહ્યાં છે</translation>
 <translation id="4404568932422911380">કોઈ બુકમાર્ક નથી</translation>
-<translation id="4409723563706114196">પેજના પૂર્વાનુમાનનો ઉપયોગ કરો</translation>
 <translation id="4411535500181276704">લાઇટ મોડ</translation>
 <translation id="4415276339145661267">તમારું Google એકાઉન્ટ મેનેજ કરો</translation>
 <translation id="4432792777822557199">હવેથી <ph name="SOURCE_LANGUAGE" />માં છે તે પેજનો અનુવાદ <ph name="TARGET_LANGUAGE" />માં થશે</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">આ સાઇટને તમારા VR સેન્સરને ઍક્સેસ કરવાની મંજૂરી આપીએ?</translation>
 <translation id="5210286577605176222">પાછલી ટૅબ પર જાઓ</translation>
 <translation id="5210365745912300556">ટૅબ બંધ કરો</translation>
-<translation id="5222676887888702881">સાઇન આઉટ</translation>
 <translation id="5224771365102442243">વીડિયો દ્વારા</translation>
 <translation id="5233638681132016545">નવું ટૅબ</translation>
 <translation id="526421993248218238">આ પેજ લોડ કરી શકાતું નથી</translation>
 <translation id="5271967389191913893">ડિવાઇસ, ડાઉનલોડ કરવાની કન્ટેન્ટ ખોલી શકતું નથી.</translation>
 <translation id="528192093759286357">પૂર્ણસ્ક્રીનથી બહાર નીકળવા માટે ઉપરથી ખેંચો અને પાછળ બટનને ટચ કરો.</translation>
-<translation id="5284584623296338184">તમારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને બીજા સેટિંગમાં ફેરફારને હવે તમારા Google એકાઉન્ટ પર સિંક કરવામાં આવશે નહિ. જોકે, તમારો અસ્તિત્વમાંનો ડેટા તમારા Google એકાઉન્ટમાં સ્ટોર રહેશે.</translation>
 <translation id="5292796745632149097">આના પર મોકલો</translation>
 <translation id="5300589172476337783">બતાવો</translation>
 <translation id="5301954838959518834">બરાબર, સમજાઇ ગયું</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">છૂપા ટેબ્સ</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>
 <translation id="5797070761912323120">Google, શોધ, જાહેરાતો અને અન્ય Google સેવાઓને વ્યક્તિગત કરવા માટે તમારા ઇતિહાસનો ઉપયોગ કરી શકે છે</translation>
 <translation id="5804241973901381774">પરવાનગીઓ</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">નામ ખૂબ લાંબું છે</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# છબી}one{# છબીઓ}other{# છબીઓ}}</translation>
 <translation id="6447842834002726250">કૂકીઝ</translation>
-<translation id="6448273550210938826">શોધ અને URL સૂચનો</translation>
 <translation id="6461962085415701688">ફાઇલ ખોલી શકતાં નથી</translation>
 <translation id="6464977750820128603">તમે Chromeમાં મુલાકાત લીધેલી સાઇટ જોઈ શકશો અને તેના માટે ટાઇમર પણ સેટ કરી શકશો.\n\nતમે જે સાઇટ માટે ટાઇમર સેટ કરો છો અને કેટલા સમય માટે તેની મુલાકાત લો છો, તે માહિતી Google મેળવે છે. આ માહિતી ડિજિટલ લાઇફસ્ટાઇલને બહેતર બનાવવા માટે ઉપયોગમાં લેવામાં આવે છે.</translation>
 <translation id="6475951671322991020">વીડિયો ડાઉનલોડ કરો</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">ઉપકરણો માટે સ્કેન કરવા માટે Chrome ને સ્થાન ઍક્સેસની જરૂર છે. <ph name="BEGIN_LINK" />પરવાનગીઓ અપડેટ કરો<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">પાસવર્ડ</translation>
 <translation id="6659594942844771486">ટૅબ</translation>
-<translation id="666268767214822976">સરનામાં બારમાં લખતાંની સાથે સંબંધિત ક્વેરીઝ અને લોકપ્રિય વેબસાઇટ્સ દર્શાવવા માટે પૂર્વાનુમાન સેવાનો ઉપયોગ કરો.</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> માં ખોલો</translation>
 <translation id="666981079809192359">Chrome ગોપનીયતા સૂચના</translation>
 <translation id="6697492270171225480">જ્યારે કોઈ પેજ ન મળે ત્યારે તેના જેવા પેજ માટે સૂચનો બતાવો</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">ડિલીટ કરો</translation>
 <translation id="8266862848225348053">સ્થાન ડાઉનલોડ કરો</translation>
 <translation id="8274165955039650276">ડાઉનલોડ જુઓ</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> પર સમન્વયિત કરી રહ્યાં છે</translation>
 <translation id="8284326494547611709">કૅપ્શન્સ</translation>
 <translation id="8300705686683892304">ઍપ દ્વારા મેનેજ થતી</translation>
 <translation id="8310344678080805313">માનક ટેબ્સ</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">બાકી</translation>
 <translation id="8970887620466824814">કંઈક ખોટું થયું.</translation>
 <translation id="8972098258593396643">ડિફૉલ્ટ ફોલ્ડરમાં ડાઉનલોડ કરીએ?</translation>
-<translation id="8981454092730389528">Google પ્રવૃત્તિ નિયંત્રણો</translation>
 <translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રૅશ રિપોર્ટ Googleને ઑટોમૅટિક રીતે મોકલો</translation>
 <translation id="8993760627012879038">છુપા મોડમાં એક નવું ટૅબ ખોલો</translation>
 <translation id="8998729206196772491">તમે <ph name="MANAGED_DOMAIN" /> દ્વારા મેનેજ એકાઉન્ટમાં સાઇન ઇન કરી રહ્યાં છો અને તમારા Chrome ડેટા પર એનું એડમિન નિયંત્રણ આપી રહ્યાં છો. તમારો ડેટા આ એકાઉન્ટ સાથે કાયમીરૂપે જોડાયેલું રહેશે. Chromeમાંથી સાઇન આઉટ કરવું આ ડિવાઇસ પરથી તમારો ડેટા ડિલીટ કરશે, પરંતુ એ તમારા Google એકાઉન્ટમાં સ્ટોર રહેશે.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
index ba113f5..ed0d9fc 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">इतिहास, कुकी, साइट डेटा, कैश साफ़ करें…</translation>
 <translation id="129553762522093515">हाल ही में बंद किए गए</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> से भेजा गया</translation>
-<translation id="1326317727527857210">अपने दूसरे डिवाइस से अपने टैब पाने के लिए, Chrome में साइन इन करें.</translation>
 <translation id="1331212799747679585">Chrome अपडेट नहीं किया जा सकता. ज़्यादा विकल्प</translation>
 <translation id="1332501820983677155">Google Chrome सुविधा शॉर्टकट</translation>
 <translation id="1360432990279830238">साइन आउट करें और सिंक बंद करें?</translation>
-<translation id="136248372334525878">पेजों को पहले से लोड करके रखा जाता है ताकि वे तेज़ी से लोड हों और उन्हें ऑफ़लाइन पढ़ा जा सके</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> साइट जोड़ी गई</translation>
 <translation id="1373696734384179344">चयनित सामग्री डाउनलोड करने के लिए मेमोरी अपर्याप्‍त है.</translation>
 <translation id="1376578503827013741">गणना की जा रही है…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">चयनित टैब</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android सेटिंग<ph name="END_LINK" /> में Chrome के लिए अनुमति चालू करें.</translation>
 <translation id="1943432128510653496">पासवर्ड सेव करें</translation>
-<translation id="1946005195648379376">नियंत्रित करें कि खोज और अन्य Google सेवाओं को मनमुताबिक बनाने के लिए Google आपके ब्राउज़िंग इतिहास का उपयोग कैसे करता है.</translation>
 <translation id="1952172573699511566">जब संभव होगा, वेबसाइटें आपकी पसंदीदा भाषा में टेक्स्ट दिखाएंगी.</translation>
 <translation id="1960290143419248813">Chrome अपडेट, अब Android के इस वर्शन पर काम नहीं करते हैं.</translation>
 <translation id="1966710179511230534">कृपया अपने साइन के विवरण अपडेट करें.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">खोजने के लिए टैप करें</translation>
 <translation id="2079545284768500474">वापस लाएं</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> में से <ph name="RESULT_NUMBER" /> परिणाम</translation>
-<translation id="2086652334978798447">Google द्वारा सुझाई गई मनमुताबिक सामग्री पाने के लिए, Chrome में साइन इन करें.</translation>
 <translation id="2091887806945687916">आवाज़</translation>
 <translation id="2096012225669085171">सभी डिवाइस में सिंक करना और मनमुताबिक बनाना</translation>
 <translation id="2100273922101894616">अपने आप साइन इन करने की सुविधा</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">इस टेक्स्ट को आसानी से पढ़ने लायक बनाने के लिए, स्‍लाइडर को आगे की ओर खींचें. पैराग्राफ़ पर डबल-टैप करने के बाद, टेक्स्ट को इतना बड़ा दिखाई देना चाहिए.</translation>
 <translation id="2323763861024343754">साइट मेमोरी</translation>
 <translation id="2328985652426384049">साइन इन नहीं कर सकते</translation>
-<translation id="2342981853652716282">अपने सभी डिवाइस पर बुकमार्क, पासवर्ड और ज़्यादा चीज़ें पाने के लिए Chrome में साइन इन करें.</translation>
 <translation id="2349710944427398404">Chrome द्वारा उपयोग किया गया कुल डेटा, जिसमें खाते, बुकमार्क और सहेजी गईं सेटिंग शामिल हैं</translation>
 <translation id="2351097562818989364">आपकी अनुवाद सेटिंग रीसेट कर दी गई हैं.</translation>
 <translation id="2353636109065292463">आपके इंटरनेट कनेक्शन की जाँच की जा रही है</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">कुछ साइटों पर ब्लॉक किए गए हैं</translation>
 <translation id="3137521801621304719">गुप्त मोड छोड़ें</translation>
 <translation id="3143515551205905069">लिंक करना रोक दें</translation>
-<translation id="3148434565183091099">अपने सभी डिवाइस पर बुकमार्क पाने के लिए, Chrome में साइन इन करें.</translation>
 <translation id="3157842584138209013">ज़्यादा विकल्प बटन से देखें कि आपने कितना डेटा बचाया है</translation>
 <translation id="3166827708714933426">टैब और विंडो शॉर्टकट</translation>
 <translation id="3181954750937456830">सुरक्षित ब्राउज़िंग (आपकी और आपके डिवाइस की खतरनाक साइट से सुरक्षा करती है)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">स्टोर किए गए क्रेडेंशियल का इस्तेमाल करके वेबसाइटों में अपने आप साइन इन करें. सुविधा के बंद होने पर, किसी वेबसाइट में साइन इन करने से पहले आपसे हर बार पुष्टि करने को कहा जाएगा.</translation>
 <translation id="3658159451045945436">रीसेट करने से आपकी देखी गई साइटों की सूची के साथ ही, डेटा बचाने का आपका इतिहास हमेशा के लिए मिट जाता है.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> टैब को समूह में लगाएं.</translation>
-<translation id="3672452749423051839">नेविगेशन की गड़बड़ी से जुड़े सुझाव</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> डाउनलोड नहीं हो सकी क्योंकि स्टोर करने की जगह नहीं मिली.</translation>
 <translation id="3714981814255182093">ढूंढें बार खोलें</translation>
 <translation id="3716182511346448902">यह पेज बहुत ज़्यादा मेमोरी का इस्तेमाल करता है, इसलिए Chrome ने इसे रोक दिया है.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">शीर्षक</translation>
 <translation id="4008040567710660924">किसी खास साइट के लिए कुकी की मंज़ूरी दें.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# घंटा}one{# घंटे}other{# घंटे}}</translation>
-<translation id="4042870126885713738">जब कोई वेब पता काम नहीं करता है या उससे कनेक्शन नहीं हो पाता है, तो आपको सुझाव दिखाए जाते हैं</translation>
 <translation id="4046123991198612571">अगला ट्रैक</translation>
 <translation id="4048707525896921369">पेज को छोड़े बिना वेबसाइटों पर मौजूद विषयों के बारे में जानें. 'खोजने के लिए टैप करें' सुविधा, 'Google सर्च' को कोई शब्‍द और उससे जुड़ी जानकारी भेजती है. इससे परिभाषाएं, तस्वीर, खोज नतीजे और दूसरी जानकारियां हासिल होती हैं.
 
@@ -438,7 +430,6 @@
     - आपकी गतिविधि, जैसे कि आप कैसे चलते हैं
 
     एक्सेस देने से पहले इस बात की पुष्टि कर लें कि आप इस साइट पर भरोसा करते हैं.</translation>
-<translation id="424864128008805179">Chrome से साइन आउट करें?</translation>
 <translation id="4256782883801055595">ओपन सोर्स लाइसेंस</translation>
 <translation id="4259722352634471385">मार्गदर्शक अवरोधित है: <ph name="URL" /></translation>
 <translation id="4269820728363426813">लिंक पते को कॉपी करें</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">फ़ोन</translation>
 <translation id="4384468725000734951">खोज के लिए Sogou का इस्तेमाल कर रहे हैं</translation>
 <translation id="4404568932422911380">कोई बुकमार्क नहीं</translation>
-<translation id="4409723563706114196">पेज पूर्वानुमानों का इस्तेमाल करें</translation>
 <translation id="4411535500181276704">लाइट मोड</translation>
 <translation id="4415276339145661267">अपना Google खाता प्रबंधित करें</translation>
 <translation id="4432792777822557199">अब से <ph name="SOURCE_LANGUAGE" /> भाषा के पेज का अनुवाद <ph name="TARGET_LANGUAGE" /> भाषा में किया जाएगा</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">इस साइट को अपने VR सेंसर एक्सेस करने की अनुमति दें?</translation>
 <translation id="5210286577605176222">सीधे पिछले टैब पर जाएं</translation>
 <translation id="5210365745912300556">टैब बंद करें</translation>
-<translation id="5222676887888702881">साइन आउट करें</translation>
 <translation id="5224771365102442243">वीडियो के साथ</translation>
 <translation id="5233638681132016545">नया टैब</translation>
 <translation id="526421993248218238">यह पेज लोड नहीं हो पा रहा है</translation>
 <translation id="5271967389191913893">डाउनलोड की जाने वाली सामग्री को डिवाइस नहीं खोल सकता.</translation>
 <translation id="528192093759286357">फ़ुल स्क्रीन से बाहर निकलने के लिए ऊपर से खींचें और वापस जाएं स्पर्श करें.</translation>
-<translation id="5284584623296338184">आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग में किए गए बदलाव अब आपके Google खाते में सिंक नहीं किए जाएंगे. हालांकि, आपका मौजूदा डेटा आपके Google खाते में संग्रहित रहेगा.</translation>
 <translation id="5292796745632149097">इस पर भेजें</translation>
 <translation id="5300589172476337783">दिखाएं</translation>
 <translation id="5301954838959518834">ठीक है, समझ लिया</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">गुप्त टैब</translation>
 <translation id="5763514718066511291">इस ऐप्लिकेशन का यूआरएल कॉपी करने के लिए टैप करें</translation>
 <translation id="5765780083710877561">वर्णन:</translation>
-<translation id="5777170031995031090">नियंत्रित करें कि खोज, विज्ञापन और दूसरी Google सेवाओं को मनमुताबिक बनाने के लिए Google आपके ब्राउज़िंग इतिहास का इस्तेमाल कैसे करता है.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> में से <ph name="SPACE_USED" /> का इस्तेमाल किया जा रहा है</translation>
 <translation id="5797070761912323120">खोज, विज्ञापन, और दूसरी Google सेवाओं को मनमुताबिक बनाने के लिए, Google आपके इतिहास का इस्तेमाल कर सकता है</translation>
 <translation id="5804241973901381774">अनुमतियां</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">नाम बहुत लंबा है</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# इमेज}one{# इमेज}other{# इमेज}}</translation>
 <translation id="6447842834002726250">कुकी</translation>
-<translation id="6448273550210938826">खोज और URL सुझाव</translation>
 <translation id="6461962085415701688">फ़ाइल नहीं खोली जा सकती</translation>
 <translation id="6464977750820128603">आप Chrome में जिन साइटों पर जाते हैं उन्हें देख सकते हैं और उनके लिए टाइमर लगा सकते हैं.\n\nGoogle उन साइटों की जानकारी लेता है जिनके लिए आप टाइमर लगाते हैं. साथ ही, यह जानकारी भी ली जाती है कि आप उन साइटों पर कितनी देर तक रहे. इस जानकारी का इस्तेमाल 'डिजिटल वेलबीइंग' को बेहतर बनाने के लिए किया जाता है.</translation>
 <translation id="6475951671322991020">वीडियो डाउनलोड करें</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">डिवाइस स्‍कैन करने के लिए Chrome को जगह की जानकारी का एक्‍सेस की ज़रूरत है. <ph name="BEGIN_LINK" />अनुमतियां अपडेट करें<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6659594942844771486">टैब</translation>
-<translation id="666268767214822976">जैसे ही आप पता बार में लिखना शुरू करते हैं, पूर्वानुमान सेवा का इस्तेमाल करके आपको संबंधित क्वेरी और लोकप्रिय वेबसाइटें दिखाई जाती हैं</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> में खोलें</translation>
 <translation id="666981079809192359">Chrome निजता सूचना</translation>
 <translation id="6697492270171225480">जब कोई पेज मिल नहीं पा रहा हो तो मिलते-जुलते पेज के सुझाव दिखाएं</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">मिटाएं</translation>
 <translation id="8266862848225348053">डाउनलोड सेव करने की जगह</translation>
 <translation id="8274165955039650276">डाउनलोड देखें</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> से समन्वयित हो रहा है</translation>
 <translation id="8284326494547611709">कैप्शन</translation>
 <translation id="8300705686683892304">ऐप्लिकेशन प्रबंधित करता है</translation>
 <translation id="8310344678080805313">मानक टैब</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">डाउनलोड बाकी है</translation>
 <translation id="8970887620466824814">कुछ गड़बड़ी हुई.</translation>
 <translation id="8972098258593396643">डिफ़ॉल्ट फ़ोल्डर में डाउनलोड करें?</translation>
-<translation id="8981454092730389528">Google गतिविधि नियंत्रण</translation>
 <translation id="8986494364107987395">इस्तेमाल के आंकड़े और खराबी रिपोर्ट अपने आप Google को भेजें</translation>
 <translation id="8993760627012879038">गुप्त मोड में नया टैब खोलें</translation>
 <translation id="8998729206196772491">आप <ph name="MANAGED_DOMAIN" /> से प्रबंधित खाते में साइन इन कर रहे हैं और उसके एडमिन को अपने Chrome डेटा पर नियंत्रण दे रहे हैं. आपका डेटा इस खाते से स्थायी रूप से जुड़ जाएगा. Chrome से साइन आउट करने से आपका डेटा इस डिवाइस से मिट जाएगा, लेकिन वह आपके Google खाते में बना रहेगा.</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 eebe4dfc..9ac9abe 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Brisanje povijesti, kolačića, podataka web-lokacija, predmemorije...</translation>
 <translation id="129553762522093515">Nedavno zatvoreno</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – poslano s uređaja <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Da bi se prikazale kartice s vaših ostalih uređaja, prijavite se na Chrome.</translation>
 <translation id="1331212799747679585">Chrome se ne može ažurirati. Više opcija</translation>
 <translation id="1332501820983677155">Prečaci za značajke Google Chromea</translation>
 <translation id="1360432990279830238">Odjaviti se i isključiti sinkronizaciju?</translation>
-<translation id="136248372334525878">Prethodno učitajte stranice za brže učitavanje i čitanje izvan mreže</translation>
 <translation id="1369915414381695676">Dodana je web-lokacija <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Nema dovoljno memorije za preuzimanje odabranog sadržaja.</translation>
 <translation id="1376578503827013741">Izračunavanje…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Odabrana kartica</translation>
 <translation id="194341124344773587">Uključite dopuštenje za Chrome u <ph name="BEGIN_LINK" />Postavkama Androida<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Spremanje zaporki</translation>
-<translation id="1946005195648379376">Upravljajte načinom na koji Google upotrebljava vašu povijest pregledavanja za prilagodbu Pretraživanja i drugih Googleovih usluga.</translation>
 <translation id="1952172573699511566">Web-lokacije prikazivat će tekst na željenom jeziku kad god je to moguće.</translation>
 <translation id="1960290143419248813">Chromeova ažuriranja više nisu podržana za ovu verziju Androida</translation>
 <translation id="1966710179511230534">Ažurirajte pojedinosti prijave.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Dodirnite za pretraživanje</translation>
 <translation id="2079545284768500474">Poništi</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> od <ph name="TOTAL_RESULTS" /> rezultata</translation>
-<translation id="2086652334978798447">Prijavite se u Chrome ako želite da vam Google predlaže sadržaje.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Sinkronizacija i prilagodba na svim uređajima</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Pomičite klizač dok ne budete mogli čitati ovaj tekst bez poteškoća. Tekst bi trebao biti barem ovoliko velik nakon što dvaput dodirnete odlomak.</translation>
 <translation id="2323763861024343754">Pohrana web-lokacije</translation>
 <translation id="2328985652426384049">Prijava nije moguća</translation>
-<translation id="2342981853652716282">Prijavite se na Chrome kako biste mogli pristupati svojim oznakama, zaporkama i ostalom na svim svojim uređajima.</translation>
 <translation id="2349710944427398404">Ukupna količina podataka koju Chrome upotrebljava, uključujući račune, oznake i spremljene postavke.</translation>
 <translation id="2351097562818989364">Vaše su postavke prevođenja vraćene na zadano.</translation>
 <translation id="2353636109065292463">Provjera vaše internetske veze</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokirano na nekim web-lokacijama</translation>
 <translation id="3137521801621304719">Izlaz iz anonimnog načina</translation>
 <translation id="3143515551205905069">Otkaži sinkronizaciju</translation>
-<translation id="3148434565183091099">Da biste imali svoje oznake na svim svojim uređajima, prijavite se na Chrome.</translation>
 <translation id="3157842584138209013">Pogledajte količinu ušteđenih podataka pomoću gumba Više opcija</translation>
 <translation id="3166827708714933426">Prečaci kartica i prozora</translation>
 <translation id="3181954750937456830">Sigurno pregledavanje (štiti vas i vaš uređaj od opasnih web-lokacija)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatski se prijavite na web-lokacije pomoću spremljenih vjerodajnica. Kada je ta značajka isključena, tražit će se potvrda prije svakog prijavljivanja na web-lokaciju.</translation>
 <translation id="3658159451045945436">Vraćanjem na zadano briše se povijest uštede podataka, uključujući popis posjećenih web-lokacija.</translation>
 <translation id="3663367437272849150">Grupiranje kartica (njih <ph name="NUM_SELECTED" />).</translation>
-<translation id="3672452749423051839">Prijedlozi pogreške kretanja</translation>
 <translation id="3692944402865947621">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo jer lokacija pohrane nije dostupna.</translation>
 <translation id="3714981814255182093">Otvaranje Trake za traženje</translation>
 <translation id="3716182511346448902">Ova stranica upotrebljava previše memorije, pa ju je Chrome pauzirao.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Naslov</translation>
 <translation id="4008040567710660924">Dopusti kolačiće za određenu web-lokaciju.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}few{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Prikaži prijedloge kada se ne razriješi web-adresa ili nije moguće uspostaviti vezu</translation>
 <translation id="4046123991198612571">Sljedeća pjesma</translation>
 <translation id="4048707525896921369">Saznajte više o temama na web-lokacijama izravno na stranici. Značajka Dodirnite za pretraživanje Google pretraživanju šalje riječ i njezin kontekst, a vraća definicije, slike, rezultate pretraživanja i druge pojedinosti.
 
@@ -438,7 +430,6 @@
     – vašeg kretanja, primjerice načina hoda.
 
     Prije nego što omogućite pristup, provjerite je li ta web-lokacija pouzdana.</translation>
-<translation id="424864128008805179">Želite li se odjaviti s Chromea?</translation>
 <translation id="4256782883801055595">Licence otvorenog koda</translation>
 <translation id="4259722352634471385">Otvaranje je blokirano: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiraj adresu veze</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Za pretraživanje se upotrebljava Sogou</translation>
 <translation id="4404568932422911380">Bez oznaka</translation>
-<translation id="4409723563706114196">Upotrebljavajte predviđanja za stranice</translation>
 <translation id="4411535500181276704">Jednostavni način</translation>
 <translation id="4415276339145661267">Upravljajte svojim Google računom</translation>
 <translation id="4432792777822557199">Odsada će se <ph name="SOURCE_LANGUAGE" /> prevoditi na <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Želite li omogućiti toj web-lokaciji pristup vašim VR senzorima?</translation>
 <translation id="5210286577605176222">Preskakanje na prethodnu karticu</translation>
 <translation id="5210365745912300556">Zatvori karticu</translation>
-<translation id="5222676887888702881">Odjava</translation>
 <translation id="5224771365102442243">S videozapisom</translation>
 <translation id="5233638681132016545">Nova kartica</translation>
 <translation id="526421993248218238">Učitavanje stranice nije uspjelo</translation>
 <translation id="5271967389191913893">Uređaj ne može otvoriti sadržaj za preuzimanje.</translation>
 <translation id="528192093759286357">Povucite od vrha zaslona i dodirnite gumb Natrag da biste zatvorili prikaz na cijelom zaslonu.</translation>
-<translation id="5284584623296338184">Promjene oznaka, povijesti, zaporki i drugih postavki više se neće sinkronizirati s vašim Google računom. No vaši postojeći podaci ostat će pohranjeni na vašem Google računu.</translation>
 <translation id="5292796745632149097">Pošalji na uređaj</translation>
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5301954838959518834">U redu, shvaćam</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Anonimne kartice</translation>
 <translation id="5763514718066511291">Dodirnite da biste kopirali URL za tu aplikaciju</translation>
 <translation id="5765780083710877561">Opis:</translation>
-<translation id="5777170031995031090">Upravljajte načinom na koji Google upotrebljava vašu povijest pregledavanja za prilagodbu Pretraživanja, oglasa i drugih Googleovih usluga.</translation>
 <translation id="5793665092639000975">Upotrebljava se <ph name="SPACE_USED" /> od <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google može upotrebljavati vašu povijest za prilagodbu Pretraživanja, oglasa i drugih Googleovih usluga</translation>
 <translation id="5804241973901381774">Dozvoljeno</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Naziv je predugačak</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# slika}one{# slika}few{# slike}other{# slika}}</translation>
 <translation id="6447842834002726250">Kolačići</translation>
-<translation id="6448273550210938826">Prijedlozi za pretraživanje i URL</translation>
 <translation id="6461962085415701688">Datoteka se ne može otvoriti</translation>
 <translation id="6464977750820128603">Možete vidjeti web-lokacije koje otvorite u Chromeu i postaviti tajmere za njih.\n\nGoogle prima informacije o web-lokacijama za koje postavite tajmere i koliko dugo ih posjećujete. Te se informacije koriste za poboljšanje Digitalne ravnoteže.</translation>
 <translation id="6475951671322991020">Preuzmi videozapis</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome treba pristup lokaciji kako bi skenirao uređaje. <ph name="BEGIN_LINK" />Ažuriraj dopuštenja<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Zaporka</translation>
 <translation id="6659594942844771486">Kartica</translation>
-<translation id="666268767214822976">Upotrijebi uslugu predviđanja za prikaz srodnih upita i popularnih web-lokacija prilikom upisivanja u adresnu traku</translation>
 <translation id="666731172850799929">Otvori u aplikaciji <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Obavijest o privatnosti za Chrome</translation>
 <translation id="6697492270171225480">Prikaži prijedloge za slične stranice kada se stranica ne može pronaći</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8266862848225348053">Lokacija za preuzimanje</translation>
 <translation id="8274165955039650276">Pregled preuzimanja</translation>
-<translation id="8283853025636624853">Sinkronizira se s računom <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Titlovi</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8310344678080805313">Standardne kartice</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">na čekanju</translation>
 <translation id="8970887620466824814">Nešto nije u redu.</translation>
 <translation id="8972098258593396643">Želite li preuzeti u zadanu mapu?</translation>
-<translation id="8981454092730389528">Google kontrole aktivnosti</translation>
 <translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation>
 <translation id="8993760627012879038">Otvaranje nove kartice u anonimnom načinu</translation>
 <translation id="8998729206196772491">Prijavljujete se računom kojim upravlja <ph name="MANAGED_DOMAIN" /> i njegovom administratoru dajete kontrolu nad svojim podacima u Chromeu. Vaši će se podaci trajno povezati s tim računom. Ako se odjavite iz Chromea, vaši će se podaci izbrisati s ovog uređaja, no ostat će pohranjeni na vašem Google računu.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
index bcf97980..9d4e424 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Előzmények, cookie-k, webhelyadatok és a gyorsítótár törlése…</translation>
 <translation id="129553762522093515">Mostanában bezárt</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – A(z) <ph name="DEVICE_NAME" /> eszközről</translation>
-<translation id="1326317727527857210">Ha a többi eszközéről is szeretné elérni a lapjait, jelentkezzen be a Chrome-ba.</translation>
 <translation id="1331212799747679585">A Chrome frissítése nem lehetséges. További lehetőségek</translation>
 <translation id="1332501820983677155">A Google Chrome-funkciók billentyűparancsai</translation>
 <translation id="1360432990279830238">Kijelentkezik, és kikapcsolja a szinkronizálást?</translation>
-<translation id="136248372334525878">Oldalak előtöltése a gyorsabb betöltés és az offline módban történő olvasás érdekében</translation>
 <translation id="1369915414381695676">A(z) <ph name="SITE_NAME" /> webhely hozzáadva</translation>
 <translation id="1373696734384179344">Nincs elegendő memória a kiválasztott tartalom letöltéséhez.</translation>
 <translation id="1376578503827013741">Számítás…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Kiválasztott lap</translation>
 <translation id="194341124344773587">A Chrome-ra vonatkozó engedélyt az <ph name="BEGIN_LINK" />Android beállításaiban<ph name="END_LINK" /> lehet aktiválni.</translation>
 <translation id="1943432128510653496">Jelszavak mentése</translation>
-<translation id="1946005195648379376">Annak szabályozása, hogy a Google hogyan használhatja fel a böngészési előzményeket a Keresés és más Google-szolgáltatások személyre szabására.</translation>
 <translation id="1952172573699511566">A webhelyek szövege a preferált nyelven jelenik meg, ha lehetséges.</translation>
 <translation id="1960290143419248813">Az Android jelen verziója a továbbiakban már nem támogatja a Chrome-frissítéseket</translation>
 <translation id="1966710179511230534">Kérjük, frissítse bejelentkezési adatait.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">A Keresés koppintással funkció</translation>
 <translation id="2079545284768500474">Visszavonás</translation>
 <translation id="2082238445998314030">Eredmény: <ph name="RESULT_NUMBER" />/<ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">A Google által javasolt, személyre szabott tartalmak fogadásához jelentkezzen be a Chrome-ba.</translation>
 <translation id="2091887806945687916">Hang</translation>
 <translation id="2096012225669085171">Szinkronizálás és személyre szabás az eszközök között</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Húzza a csúszkát, amíg kényelmesen nem tudja olvasni a szöveget. A szövegnek legalább ekkorának kell lennie, miután duplán koppint egy bekezdésre.</translation>
 <translation id="2323763861024343754">Webhely tárhelye</translation>
 <translation id="2328985652426384049">Nem sikerült a bejelentkezés</translation>
-<translation id="2342981853652716282">Jelentkezzen be a Chrome-ba, hogy az összes eszközén hozzáférhessen könyvjelzőihez, jelszavaihoz és más beállításaihoz.</translation>
 <translation id="2349710944427398404">A Chrome által használt teljes adatmennyiség, beleértve a fiókokat, könyvjelzőket és mentett beállításokat is</translation>
 <translation id="2351097562818989364">A fordítási beállítások visszaállítása megtörtént.</translation>
 <translation id="2353636109065292463">Az internetkapcsolat ellenőrzése</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Letiltva egyes webhelyeken</translation>
 <translation id="3137521801621304719">Kilépés inkognitómódból</translation>
 <translation id="3143515551205905069">Szinkronizálás megszakítása</translation>
-<translation id="3148434565183091099">Ha az összes eszközén szeretné elérni könyvjelzőit, jelentkezzen be a Chrome-ba.</translation>
 <translation id="3157842584138209013">A További lehetőségek gombra kattintva tekintheti meg, hogy mekkora a megtakarított adatmennyiség</translation>
 <translation id="3166827708714933426">Lapokkal és ablakokkal kapcsolatos billentyűparancsok</translation>
 <translation id="3181954750937456830">Biztonságos Böngészés (megvédi Önt és eszközét a veszélyes webhelyekkel szemben)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatikus bejelentkezés webhelyekre a tárolt hitelesítő adatokkal. Ha ez a funkció ki van kapcsolva, mindig meg kell adnia hitelesítő adatait, amikor egy webhelyre szeretne bejelentkezni.</translation>
 <translation id="3658159451045945436">A visszaállítás törli a megtakarított adatmennyiségre vonatkozó előzményeket, így a felkeresett webhelyek listáját is.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> lap csoportosítása.</translation>
-<translation id="3672452749423051839">Navigálási hibákkal kapcsolatos javaslatok</translation>
 <translation id="3692944402865947621">A(z) <ph name="FILE_NAME" /> fájl letöltése sikertelen, mert nem lehet elérni a tárhelyet.</translation>
 <translation id="3714981814255182093">A keresősáv megnyitása</translation>
 <translation id="3716182511346448902">Ez az oldal túl sok memóriát használ, ezért a Chrome szünetelteti.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Cím</translation>
 <translation id="4008040567710660924">Adott webhely cookie-jainak engedélyezése.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# órája}other{# órája}}</translation>
-<translation id="4042870126885713738">Javaslatok megjelenítése, ha egy internetcímet nem lehet feloldani, vagy nem lehet kapcsolódni</translation>
 <translation id="4046123991198612571">Következő szám</translation>
 <translation id="4048707525896921369">Megtudhatja a webhelyek témaköreit anélkül, hogy elhagyná az oldalt. A Keresés koppintással funkció elküld egy szót és annak kontextusát a Google Keresés számára, majd meghatározásokat, képeket, keresési eredményeket és egyéb részleteket ad vissza.
 
@@ -438,7 +430,6 @@
     – mozgás (például a járásmódja).
 
     A hozzáférés engedélyezése előtt bizonyosodjon meg arról, hogy a webhely megbízható.</translation>
-<translation id="424864128008805179">Kijelentkezés a Chrome-ból</translation>
 <translation id="4256782883801055595">Nyílt forráskódú licencek</translation>
 <translation id="4259722352634471385">Le van tiltva az ide vezető navigáció: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Link másolása</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">A Sogou használata a kereséshez</translation>
 <translation id="4404568932422911380">Nincsenek könyvjelzők</translation>
-<translation id="4409723563706114196">Várható oldalak használata</translation>
 <translation id="4411535500181276704">Egyszerűsített mód</translation>
 <translation id="4415276339145661267">Google-fiók kezelése</translation>
 <translation id="4432792777822557199">A(z) <ph name="SOURCE_LANGUAGE" /> nyelvű oldalak mostantól le lesznek fordítva <ph name="TARGET_LANGUAGE" /> nyelvre</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Engedélyezi a webhely számára a VR-érzékelőkhöz való hozzáférést?</translation>
 <translation id="5210286577605176222">Ugrás az előző lapra</translation>
 <translation id="5210365745912300556">Lap bezárása</translation>
-<translation id="5222676887888702881">Kijelentkezés</translation>
 <translation id="5224771365102442243">Videóval</translation>
 <translation id="5233638681132016545">Új lap</translation>
 <translation id="526421993248218238">Nem lehet betölteni az oldalt</translation>
 <translation id="5271967389191913893">Az eszköz nem tudja megnyitni a letölteni kívánt tartalmat.</translation>
 <translation id="528192093759286357">A teljes képernyős megjelenítésből való kilépéshez húzza le felülről, majd koppintson a vissza gombra.</translation>
-<translation id="5284584623296338184">Könyvjelzői, előzményei, jelszavai és más beállításai a továbbiakban már nem lesznek szinkronizálva Google-fiókjával. Meglévő adatainak tárolása azonban továbbra is megmarad Google-fiókjában.</translation>
 <translation id="5292796745632149097">Küldés a következőre:</translation>
 <translation id="5300589172476337783">Megjelenítés</translation>
 <translation id="5301954838959518834">Rendben, értem</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognitólapok</translation>
 <translation id="5763514718066511291">Koppintson az alkalmazás URL-jének másolásához</translation>
 <translation id="5765780083710877561">Leírás:</translation>
-<translation id="5777170031995031090">Annak szabályozása, hogy a Google hogyan használhatja fel az Ön böngészési előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" />/<ph name="SPACE_USED" /> használatban</translation>
 <translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására</translation>
 <translation id="5804241973901381774">Engedélyek</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Túl hosszú a név</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# kép}other{# kép}}</translation>
 <translation id="6447842834002726250">Cookie-k</translation>
-<translation id="6448273550210938826">Keresési és URL-javaslatok</translation>
 <translation id="6461962085415701688">A fájlt nem lehet megnyitni</translation>
 <translation id="6464977750820128603">Megnézheti a Chrome böngészővel felkeresett webhelyeket, és beállíthat hozzájuk időzítéseket.\n\nAz időzítéssel ellátott webhelyek adatait és a látogatás hosszát megkapja a Google. Ezek az adatok a digitális jóllét funkció továbbfejlesztésére szolgálnak.</translation>
 <translation id="6475951671322991020">Videó letöltése</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">A Chrome-nak hozzá kell férnie a tartózkodási helyhez, hogy eszközöket kereshessen. <ph name="BEGIN_LINK" />Frissítse az engedélyeket<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Jelszó</translation>
 <translation id="6659594942844771486">Lap</translation>
-<translation id="666268767214822976">„Várható kifejezések” szolgáltatás használata a kapcsolódó lekérdezések és népszerű webhelyek megjelenítéséhez a címsávban történő gépelés során.</translation>
 <translation id="666731172850799929">Megnyitás itt: <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chrome – Adatvédelmi közlemény</translation>
 <translation id="6697492270171225480">Hasonló oldalakra vonatkozó javaslatok megjelenítése, ha az oldal nem található</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Törlés</translation>
 <translation id="8266862848225348053">Letöltés helye</translation>
 <translation id="8274165955039650276">Letöltések megtekintése</translation>
-<translation id="8283853025636624853">Szinkronizálás a következővel: <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Feliratok</translation>
 <translation id="8300705686683892304">Alkalmazás által kezelt</translation>
 <translation id="8310344678080805313">Szabványos lapok</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">függőben</translation>
 <translation id="8970887620466824814">Hiba történt.</translation>
 <translation id="8972098258593396643">Letölti az alapértelmezett mappába?</translation>
-<translation id="8981454092730389528">Google Tevékenységvezérlők</translation>
 <translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation>
 <translation id="8993760627012879038">Új lap megnyitása inkognitómódban</translation>
 <translation id="8998729206196772491">Egy <ph name="MANAGED_DOMAIN" /> által felügyelt fiókkal jelentkezik be, és engedélyezi az adminisztrátor számára a Chrome-adatok kezelését. Adatai állandó jelleggel ehhez a fiókhoz lesznek társítva. A Chrome-ból való kijelentkezéssel törli adatait erről az eszközről, de Google-fiókjában továbbra is megmaradnak.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
index e7e749e..706ad55 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Menghapus histori, cookie, data situs, cache...</translation>
 <translation id="129553762522093515">Baru saja ditutup</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Dikirim dari <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Untuk mengakses tab Anda dari perangkat lainnya, login ke Chrome.</translation>
 <translation id="1331212799747679585">Chrome tidak dapat diupdate. Opsi lainnya</translation>
 <translation id="1332501820983677155">Pintasan fitur Google Chrome</translation>
 <translation id="1360432990279830238">Logout dan nonaktifkan sinkronisasi?</translation>
-<translation id="136248372334525878">Pramuat halaman agar memuat lebih cepat dan untuk membaca offline</translation>
 <translation id="1369915414381695676">Situs <ph name="SITE_NAME" /> ditambahkan</translation>
 <translation id="1373696734384179344">Memori tidak cukup untuk mendownload konten yang dipilih.</translation>
 <translation id="1376578503827013741">Menghitung…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Tab yang Dipilih</translation>
 <translation id="194341124344773587">Aktifkan izin untuk Chrome di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Simpan sandi</translation>
-<translation id="1946005195648379376">Kontrol cara Google menggunakan histori penjelajahan Anda untuk mempersonalisasi Penelusuran dan layanan Google lainnya.</translation>
 <translation id="1952172573699511566">Situs akan menampilkan teks dalam bahasa pilihan Anda, jika memungkinkan.</translation>
 <translation id="1960290143419248813">Update Chrome tidak lagi didukung untuk versi Android ini</translation>
 <translation id="1966710179511230534">Perbarui detail ID masuk Anda.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Ketuk untuk Menelusuri</translation>
 <translation id="2079545284768500474">Urungkan</translation>
 <translation id="2082238445998314030">Hasil <ph name="RESULT_NUMBER" /> dari <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Untuk mendapatkan konten hasil personalisasi yang disarankan oleh Google, masuk ke Chrome.</translation>
 <translation id="2091887806945687916">Suara</translation>
 <translation id="2096012225669085171">Sinkronkan dan personalisasi di berbagai perangkat</translation>
 <translation id="2100273922101894616">Login Otomatis</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Geser ukuran teks sampai Anda dapat membacanya dengan nyaman. Teks akan terlihat setidaknya sebesar ini setelah Anda mengetuk sebuah paragraf dua kali.</translation>
 <translation id="2323763861024343754">Penyimpanan situs</translation>
 <translation id="2328985652426384049">Tidak dapat login</translation>
-<translation id="2342981853652716282">Login ke Chrome untuk mendapatkan bookmark, sandi, dan lainnya di semua perangkat Anda.</translation>
 <translation id="2349710944427398404">Total data yang digunakan oleh Chrome, termasuk akun, bookmark, dan setelan yang tersimpan</translation>
 <translation id="2351097562818989364">Setelan terjemah telah disetel ulang.</translation>
 <translation id="2353636109065292463">Memeriksa sambungan internet Anda</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Diblokir di beberapa situs</translation>
 <translation id="3137521801621304719">Tutup mode penyamaran</translation>
 <translation id="3143515551205905069">Batalkan sinkronisasi</translation>
-<translation id="3148434565183091099">Untuk dapat mengakses bookmark Anda di semua perangkat, login ke Chrome.</translation>
 <translation id="3157842584138209013">Lihat banyaknya kuota yang Anda hemat dari tombol Opsi Lainnya</translation>
 <translation id="3166827708714933426">Pintasan tab dan jendela</translation>
 <translation id="3181954750937456830">Safe Browsing (melindungi Anda dan perangkat dari situs berbahaya)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Otomatis login ke situs web menggunakan kredensial yang tersimpan. Saat fitur dinonaktifkan, Anda akan dimintai verifikasi setiap kali hendak login ke situs web.</translation>
 <translation id="3658159451045945436">Penyetalan ulang akan menghapus histori penyimpanan data, termasuk daftar situs yang dibuka.</translation>
 <translation id="3663367437272849150">Mengelompokkan <ph name="NUM_SELECTED" /> tab.</translation>
-<translation id="3672452749423051839">Saran untuk kesalahan navigasi</translation>
 <translation id="3692944402865947621">Download <ph name="FILE_NAME" /> gagal karena lokasi penyimpanan tidak dapat dijangkau.</translation>
 <translation id="3714981814255182093">Membuka Bilah Cari</translation>
 <translation id="3716182511346448902">Halaman ini menggunakan terlalu banyak memori, sehingga Chrome menjedanya.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Judul</translation>
 <translation id="4008040567710660924">Izinkan cookie untuk situs tertentu.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# jam}other{# jam}}</translation>
-<translation id="4042870126885713738">Tampilkan saran saat alamat web tidak ditemukan atau koneksi bermasalah</translation>
 <translation id="4046123991198612571">Lagu berikutnya</translation>
 <translation id="4048707525896921369">Pelajari topik di situs tanpa meninggalkan halaman. Fitur Ketuk untuk Menelusuri mengirimkan kata dan konteks di sekitarnya ke Google Penelusuran, yang kemudian menampilkan definisi, gambar, hasil penelusuran, dan detail lainnya.
 
@@ -438,7 +430,6 @@
     - Gerakan Anda, seperti cara Anda berjalan
 
     Pastikan Anda memercayai situs ini sebelum mengizinkan akses.</translation>
-<translation id="424864128008805179">Logout dari Chrome?</translation>
 <translation id="4256782883801055595">Lisensi open source</translation>
 <translation id="4259722352634471385">Navigasi diblokir: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Salin URL</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Ponsel</translation>
 <translation id="4384468725000734951">Menggunakan Sogou untuk penelusuran</translation>
 <translation id="4404568932422911380">Tidak ada bookmark</translation>
-<translation id="4409723563706114196">Gunakan prediksi halaman</translation>
 <translation id="4411535500181276704">Mode Ringan</translation>
 <translation id="4415276339145661267">Kelola Akun Google Anda</translation>
 <translation id="4432792777822557199">Mulai sekarang, halaman dalam bahasa <ph name="SOURCE_LANGUAGE" /> akan diterjemahkan ke <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Izinkan situs ini mengakses sensor VR?</translation>
 <translation id="5210286577605176222">Beralih ke tab sebelumnya</translation>
 <translation id="5210365745912300556">Tutup tab</translation>
-<translation id="5222676887888702881">Logout</translation>
 <translation id="5224771365102442243">Dengan video</translation>
 <translation id="5233638681132016545">Tab baru</translation>
 <translation id="526421993248218238">Tidak dapat memuat halaman ini</translation>
 <translation id="5271967389191913893">Perangkat tidak dapat membuka konten untuk didownload.</translation>
 <translation id="528192093759286357">Tarik dari atas dan ketuk tombol kembali untuk keluar dari mode layar penuh.</translation>
-<translation id="5284584623296338184">Perubahan pada bookmark, histori, sandi, dan setelan lainnya tidak akan disinkronkan lagi dengan Akun Google Anda. Namun, data yang sudah ada akan tetap disimpan di akun Google Anda.</translation>
 <translation id="5292796745632149097">Kirim ke</translation>
 <translation id="5300589172476337783">Tampilkan</translation>
 <translation id="5301954838959518834">Oke, mengerti</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Tab penyamaran</translation>
 <translation id="5763514718066511291">Ketuk untuk menyalin URL aplikasi ini</translation>
 <translation id="5765780083710877561">Deskripsi:</translation>
-<translation id="5777170031995031090">Kontrol cara Google menggunakan histori penjelajahan Anda untuk mempersonalisasi Penelusuran, iklan, dan layanan Google lainnya.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> terpakai dari <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google dapat menggunakan histori Anda untuk mempersonalisasi Penelusuran, iklan, dan layanan Google lainnya</translation>
 <translation id="5804241973901381774">Izin</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nama terlalu panjang</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Gambar}other{# Gambar}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">Saran URL dan penelusuran</translation>
 <translation id="6461962085415701688">Tidak dapat membuka file</translation>
 <translation id="6464977750820128603">Anda dapat melihat situs yang Anda kunjungi di Chrome dan menetapkan timer untuk situs tersebut.\n\nGoogle mendapatkan info tentang situs yang Anda tetapkan timer-nya dan durasi Anda mengunjunginya. Info ini digunakan untuk membuat Kesehatan Digital jadi lebih baik.</translation>
 <translation id="6475951671322991020">Download video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome memerlukan akses lokasi untuk memindai perangkat. <ph name="BEGIN_LINK" />Perbarui izin<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Sandi</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Gunakan pencarian otomatis untuk menunjukkan situs web populer saat Anda mengetik alamat situs</translation>
 <translation id="666731172850799929">Buka di <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Notifikasi Privasi Chrome</translation>
 <translation id="6697492270171225480">Tampilkan saran untuk halaman yang serupa jika halaman tidak dapat ditemukan</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Hapus</translation>
 <translation id="8266862848225348053">Lokasi download</translation>
 <translation id="8274165955039650276">Lihat hasil download</translation>
-<translation id="8283853025636624853">Menyinkronkan dengan <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Teks</translation>
 <translation id="8300705686683892304">Dikelola oleh aplikasi</translation>
 <translation id="8310344678080805313">Tab standar</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">ditunda</translation>
 <translation id="8970887620466824814">Terjadi error.</translation>
 <translation id="8972098258593396643">Download ke folder default?</translation>
-<translation id="8981454092730389528">Kontrol Aktivitas Google</translation>
 <translation id="8986494364107987395">Kirim statistik penggunaan dan laporan error ke Google secara otomatis</translation>
 <translation id="8993760627012879038">Membuka tab baru dalam Mode penyamaran</translation>
 <translation id="8998729206196772491">Anda akan login dengan akun yang dikelola oleh <ph name="MANAGED_DOMAIN" /> dan memberikan kontrol data Chrome kepada administratornya. Data akan terikat dengan akun ini secara permanen. Bila Anda logout dari Chrome, data akan dihapus dari perangkat ini, tetapi data tetap tersimpan di Akun Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
index a65fcc0..c5c6c69d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Cancella la cronologia, i cookie, i dati dei siti, la cache…</translation>
 <translation id="129553762522093515">Chiuse di recente</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Inviato da <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Accedi a Chrome per trovare le tue schede degli altri dispositivi.</translation>
 <translation id="1331212799747679585">Impossibile aggiornare Chrome. Altre opzioni</translation>
 <translation id="1332501820983677155">Scorciatoie delle funzioni di Google Chrome</translation>
 <translation id="1360432990279830238">Uscire e disattivare la sincronizzazione?</translation>
-<translation id="136248372334525878">Le pagine vengono precaricate per velocizzare il caricamento e per la lettura offline</translation>
 <translation id="1369915414381695676">Sito <ph name="SITE_NAME" /> aggiunto</translation>
 <translation id="1373696734384179344">Memoria non sufficiente per scaricare i contenuti selezionati.</translation>
 <translation id="1376578503827013741">Elaborazione...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Scheda selezionata</translation>
 <translation id="194341124344773587">Abilita l'autorizzazione per Chrome in <ph name="BEGIN_LINK" />Impostazioni Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Salva password</translation>
-<translation id="1946005195648379376">Controlla il modo in cui Google utilizza la cronologia di navigazione per personalizzare la Ricerca e altri servizi Google.</translation>
 <translation id="1952172573699511566">Se possibile, il testo dei siti web verrà mostrato nella tua lingua preferita.</translation>
 <translation id="1960290143419248813">Gli aggiornamenti di Chrome non sono più supportati per questa versione di Android</translation>
 <translation id="1966710179511230534">Aggiorna i dati di accesso.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tocca per cercare</translation>
 <translation id="2079545284768500474">Annulla</translation>
 <translation id="2082238445998314030">Risultato <ph name="RESULT_NUMBER" /> di <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Per ricevere contenuti suggeriti appositamente per te da Google, accedi a Chrome.</translation>
 <translation id="2091887806945687916">Audio</translation>
 <translation id="2096012225669085171">Sincronizza e personalizza su tutti i dispositivi</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Trascina il cursore finché leggi il testo senza problemi. Il testo dovrebbe avere queste dimensioni minime quando tocchi due volte un paragrafo.</translation>
 <translation id="2323763861024343754">Memoria utilizzata dai siti</translation>
 <translation id="2328985652426384049">Impossibile eseguire l'accesso</translation>
-<translation id="2342981853652716282">Accedi a Chrome per trovare i tuoi preferiti, le password e altre impostazioni su tutti i tuoi dispositivi.</translation>
 <translation id="2349710944427398404">Dati totali utilizzati da Chrome, tra cui account, preferiti e impostazioni salvate</translation>
 <translation id="2351097562818989364">Le impostazioni di traduzione sono state reimpostate.</translation>
 <translation id="2353636109065292463">Controllo della connessione a Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloccati su alcuni siti</translation>
 <translation id="3137521801621304719">Esci dalla modalità di navigazione in incognito</translation>
 <translation id="3143515551205905069">Annulla sincronizzazione</translation>
-<translation id="3148434565183091099">Accedi a Chrome per trovare i tuoi preferiti su tutti i dispositivi.</translation>
 <translation id="3157842584138209013">Scopri la quantità di dati risparmiata usando il pulsante Altre opzioni</translation>
 <translation id="3166827708714933426">Scorciatoie di finestre e schede</translation>
 <translation id="3181954750937456830">Navigazione sicura (protegge te e il tuo dispositivo da siti pericolosi)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Accedi automaticamente ai siti web utilizzando credenziali memorizzate. Quando la funzione non è attiva, ti viene chiesta la verifica prima di ogni accesso ai siti web.</translation>
 <translation id="3658159451045945436">La reimpostazione elimina la tua cronologia dei dati risparmiati, incluso l'elenco dei siti web visitati.</translation>
 <translation id="3663367437272849150">Raggruppa <ph name="NUM_SELECTED" /> schede.</translation>
-<translation id="3672452749423051839">Suggerimenti per gli errori di navigazione</translation>
 <translation id="3692944402865947621">Download di <ph name="FILE_NAME" /> non riuscito perché non è possibile trovare il percorso di archiviazione.</translation>
 <translation id="3714981814255182093">Apri la barra Trova</translation>
 <translation id="3716182511346448902">Questa pagina è stata messa in pausa da Chromium perché utilizza troppa memoria.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titolo</translation>
 <translation id="4008040567710660924">Consenti i cookie per un sito specifico.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ora}other{# ore}}</translation>
-<translation id="4042870126885713738">Mostra suggerimenti quando un indirizzo web non viene trovato o non è possibile stabilire una connessione</translation>
 <translation id="4046123991198612571">Traccia successiva</translation>
 <translation id="4048707525896921369">Scopri gli argomenti dei siti web senza lasciare la pagina. La funzione Tocca per cercare consente di inviare una parola e il relativo contesto alla Ricerca Google; vengono restituiti risultati di ricerca, immagini, definizioni e altri dettagli.
 
@@ -438,7 +430,6 @@
     - I tuoi movimenti, come il modo di camminare
 
     Prima di consentire l'accesso, controlla che questo sito sia attendibile.</translation>
-<translation id="424864128008805179">Uscire da Chrome?</translation>
 <translation id="4256782883801055595">Licenze open source</translation>
 <translation id="4259722352634471385">Navigazione bloccata: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copia indirizzo link</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefono</translation>
 <translation id="4384468725000734951">Sogou in uso per la ricerca</translation>
 <translation id="4404568932422911380">Nessun segnalibro</translation>
-<translation id="4409723563706114196">Usa previsioni di pagina</translation>
 <translation id="4411535500181276704">Modalità Lite</translation>
 <translation id="4415276339145661267">Gestisci il tuo Account Google</translation>
 <translation id="4432792777822557199">Le pagine in <ph name="SOURCE_LANGUAGE" /> verranno tradotte in <ph name="TARGET_LANGUAGE" /> d'ora in poi</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Consentire a questo sito di accedere ai sensori VR?</translation>
 <translation id="5210286577605176222">Vai alla scheda precedente</translation>
 <translation id="5210365745912300556">Chiudi scheda</translation>
-<translation id="5222676887888702881">Esci</translation>
 <translation id="5224771365102442243">Con video</translation>
 <translation id="5233638681132016545">Nuova scheda</translation>
 <translation id="526421993248218238">Impossibile caricare la pagina</translation>
 <translation id="5271967389191913893">Non è possibile aprire i contenuti da scaricare sul dispositivo.</translation>
 <translation id="528192093759286357">Trascina dall'alto e tocca il pulsante Indietro per uscire dalla modalità a schermo intero.</translation>
-<translation id="5284584623296338184">Le modifiche ai preferiti, alla cronologia, alle password e ad altre impostazioni non verranno più sincronizzate con il tuo Account Google. Tuttavia, i dati esistenti rimarranno memorizzati.</translation>
 <translation id="5292796745632149097">Invia a</translation>
 <translation id="5300589172476337783">Mostra</translation>
 <translation id="5301954838959518834">OK</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Schede in incognito</translation>
 <translation id="5763514718066511291">Tocca per copiare l'URL di quest'app</translation>
 <translation id="5765780083710877561">Descrizione:</translation>
-<translation id="5777170031995031090">Controlla il modo in cui Google utilizza la tua cronologia di navigazione per personalizzare la Ricerca, gli annunci e altri servizi Google.</translation>
 <translation id="5793665092639000975">Spazio utilizzato: <ph name="SPACE_USED" /> di <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google può utilizzare la tua cronologia per personalizzare la Ricerca, gli annunci e altri servizi Google</translation>
 <translation id="5804241973901381774">Autorizzazioni</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Il nome è troppo lungo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# immagine}other{# immagini}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">Suggerimenti di ricerca e URL</translation>
 <translation id="6461962085415701688">Impossibile aprire il file.</translation>
 <translation id="6464977750820128603">Puoi vedere i siti che visiti in Chrome e impostare dei timer per ciascuno di essi.\n\nGoogle riceve informazioni sui siti per i quali imposti dei timer e sul tempo che trascorri a visitarli. Queste informazioni sono utilizzate al fine di migliorare Benessere digitale.</translation>
 <translation id="6475951671322991020">Scarica video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome ha bisogno dell'accesso alla posizione per cercare dispositivi. <ph name="BEGIN_LINK" />Aggiorna le autorizzazioni<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Password</translation>
 <translation id="6659594942844771486">TAB</translation>
-<translation id="666268767214822976">Utilizza un servizio di previsione per visualizzare query correlate e siti web popolari durante la digitazione nella barra degli indirizzi</translation>
 <translation id="666731172850799929">Apri in <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Informativa sulla privacy di Chrome</translation>
 <translation id="6697492270171225480">Mostra suggerimenti per pagine simili quando una pagina non viene trovata</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Elimina</translation>
 <translation id="8266862848225348053">Percorso di download</translation>
 <translation id="8274165955039650276">Visualizza i download</translation>
-<translation id="8283853025636624853">Sincronizzazione con <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Sottotitoli</translation>
 <translation id="8300705686683892304">Gestiti dall'app</translation>
 <translation id="8310344678080805313">Schede standard</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">in attesa</translation>
 <translation id="8970887620466824814">C'è stato un problema.</translation>
 <translation id="8972098258593396643">Scaricare nella cartella predefinita?</translation>
-<translation id="8981454092730389528">Gestione attività di Google</translation>
 <translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e rapporti sugli arresti anomali</translation>
 <translation id="8993760627012879038">Apri nuova scheda in mod. di navigaz. in incognito</translation>
 <translation id="8998729206196772491">Stai per eseguire l'accesso con un account gestito da <ph name="MANAGED_DOMAIN" /> e consentire al relativo amministratore di avere il controllo dei tuoi dati di Chrome. I tuoi dati verranno associati definitivamente a questo account. Se esci da Chrome, i dati verranno eliminati da questo dispositivo, ma rimarranno memorizzati nel tuo Account Google.</translation>
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 d29ca8c..88b5338e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">‏ניקוי ההיסטוריה, קובצי ה-Cookie, נתוני האתרים, המטמון…</translation>
 <translation id="129553762522093515">נסגרו לאחרונה</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> — נשלחה מ-<ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">‏כדי לקבל את הכרטיסיות מהמכשירים האחרים שלך, יש להיכנס ל-Chrome.</translation>
 <translation id="1331212799747679585">‏לא ניתן לעדכן את Chrome. אפשרויות נוספות</translation>
 <translation id="1332501820983677155">‏מקשי קיצור לתכונות של Google Chrome‏</translation>
 <translation id="1360432990279830238">לצאת ולהשבית את הסנכרון?</translation>
-<translation id="136248372334525878">טעינה מקדימה של דפים מאפשרת טעינה מהירה יותר וקריאה במצב לא מקוון</translation>
 <translation id="1369915414381695676">האתר <ph name="SITE_NAME" /> נוסף</translation>
 <translation id="1373696734384179344">אין מספיק זיכרון להורדת התוכן הנבחר.</translation>
 <translation id="1376578503827013741">מחשב...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">הכרטיסייה שנבחרה</translation>
 <translation id="194341124344773587">‏הפעלת הרשאה ל-Chrome ב<ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">שמירת סיסמאות</translation>
-<translation id="1946005195648379376">‏קבע כיצד Google משתמשת בהיסטוריית הגלישה שלך כדי להתאים אישית את החיפוש ושירותים אחרים של Google.</translation>
 <translation id="1952172573699511566">אתרים יציגו טקסט בשפה המועדפת שלך, כשזה אפשרי.</translation>
 <translation id="1960290143419248813">‏עדכוני Chrome לא נתמכים יותר בגרסה הזו של Android</translation>
 <translation id="1966710179511230534">יש לעדכן את פרטי הכניסה שלך.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">הקש כדי לחפש</translation>
 <translation id="2079545284768500474">ביטול הפעולה</translation>
 <translation id="2082238445998314030">תוצאה <ph name="RESULT_NUMBER" /> מתוך <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">‏כדי לקבל מ-Google הצעות לתוכן מותאם אישית, היכנס אל Chrome.</translation>
 <translation id="2091887806945687916">צליל</translation>
 <translation id="2096012225669085171">סנכרון והתאמה אישית במכשירים שונים</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">יש לגרור את המחוון עד שאפשר יהיה לקרוא את הקטע הזה בצורה נוחה. לאחר הקשה פעמיים על פיסקה, הטקסט אמור להיות מוצג בגודל הזה לפחות.</translation>
 <translation id="2323763861024343754">נתוני אתר מאוחסנים</translation>
 <translation id="2328985652426384049">אי אפשר להיכנס לחשבון</translation>
-<translation id="2342981853652716282">‏יש להיכנס אל Chrome כדי לקבל גישה אל הסימניות, הסיסמאות ונתונים נוספים בכל המכשירים שלך.</translation>
 <translation id="2349710944427398404">‏סך כל הנתונים שבהם משתמש Chrome, כולל חשבונות, סימניות והגדרות שמורות</translation>
 <translation id="2351097562818989364">הגדרות התרגום שלך אופסו.</translation>
 <translation id="2353636109065292463">בדיקת חיבור האינטרנט</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">חסומות בחלק מהאתרים</translation>
 <translation id="3137521801621304719">צא ממצב גלישה בסתר</translation>
 <translation id="3143515551205905069">ביטול סנכרון</translation>
-<translation id="3148434565183091099">‏כדי שהסימניות שלך יופיעו בכל המכשירים, היכנס ל-Chrome.</translation>
 <translation id="3157842584138209013">בעזרת הלחצן 'אפשרויות נוספות' אפשר לבדוק את החיסכון בצריכת נתונים</translation>
 <translation id="3166827708714933426">מקשי קיצור לכרטיסיות ולחלונות</translation>
 <translation id="3181954750937456830">גלישה בטוחה (מגנה עליך ועל המכשיר מפני אתרים מסוכנים)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">כניסה אוטומטית לאתרים באמצעות פרטי כניסה מאוחסנים. כשתכונה זו כבויה, יהיה עליך לבצע אימות לפני כל כניסה לאתר.</translation>
 <translation id="3658159451045945436">האיפוס גורם למחיקת ההיסטוריה של החיסכון בנתונים, כולל רשימת האתרים שביקרת בהם.</translation>
 <translation id="3663367437272849150">קיבוץ <ph name="NUM_SELECTED" /> כרטיסיות.</translation>
-<translation id="3672452749423051839">הצעות לשגיאת ניווט</translation>
 <translation id="3692944402865947621">ההורדה של <ph name="FILE_NAME" /> נכשלה כי מיקום האחסון לא נגיש.</translation>
 <translation id="3714981814255182093">פתח את סרגל החיפוש</translation>
 <translation id="3716182511346448902">‏הדף הזה מנצל יותר מדי זיכרון, כך שהוא הושהה על-ידי Chrome.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">כותרת</translation>
 <translation id="4008040567710660924">‏אישור קובצי Cookie של אתר מסוים.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{שעה אחת}two{שעתיים}many{# שעות}other{# שעות}}</translation>
-<translation id="4042870126885713738">הצעות יופיעו כאשר כתובת אינטרנט אינה מזוהה או כשלא ניתן ליצור חיבור</translation>
 <translation id="4046123991198612571">הרצועה הבאה</translation>
 <translation id="4048707525896921369">‏ניתן לקבל מידע על נושאים באתרים מבלי לצאת מהדף. התכונה 'הקשה כדי לחפש' שולחת מילה ואת ההקשר שלה אל חיפוש Google, המחזיר הגדרות, תמונות, תוצאות חיפוש ופרטים אחרים.
 
@@ -438,7 +430,6 @@
     - התנועות שלך, למשל צורת ההליכה
 
     לפני הענקת הגישה, יש לוודא שמדובר באתר מהימן.</translation>
-<translation id="424864128008805179">‏האם לצאת מ-Chrome?</translation>
 <translation id="4256782883801055595">רישיונות קוד פתוח</translation>
 <translation id="4259722352634471385">הניווט חסום: <ph name="URL" /></translation>
 <translation id="4269820728363426813">העתקת כתובת של קישור</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">טלפון</translation>
 <translation id="4384468725000734951">‏שימוש ב-Sogou לחיפוש</translation>
 <translation id="4404568932422911380">ללא סימניות</translation>
-<translation id="4409723563706114196">שימוש בחיזויי דפים</translation>
 <translation id="4411535500181276704">מצב טעינה מהירה</translation>
 <translation id="4415276339145661267">‏ניהול חשבון Google שלך</translation>
 <translation id="4432792777822557199">דפים ב<ph name="SOURCE_LANGUAGE" /> יתורגמו ל<ph name="TARGET_LANGUAGE" /> מעכשיו והלאה</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">‏האם לאפשר לאתר הזה לגשת לחיישני ה-VR שלך?</translation>
 <translation id="5210286577605176222">חזרה לכרטיסייה הקודמת</translation>
 <translation id="5210365745912300556">סגור כרטיסייה</translation>
-<translation id="5222676887888702881">יציאה</translation>
 <translation id="5224771365102442243">כולל סרטון</translation>
 <translation id="5233638681132016545">כרטיסייה חדשה</translation>
 <translation id="526421993248218238">לא ניתן לטעון את הדף</translation>
 <translation id="5271967389191913893">המכשיר לא מצליח לפתוח את התוכן להורדה.</translation>
 <translation id="528192093759286357">כדי לצאת ממסך מלא, גרור מלמעלה וגע בלחצן 'הקודם'.</translation>
-<translation id="5284584623296338184">‏שינויים בסימניות, בהיסטוריה, בסיסמאות ובהגדרות נוספות לא יסונכרנו עוד עם חשבון Google. עם זאת, הנתונים הקיימים עדיין יאוחסנו בחשבון Google שלך.</translation>
 <translation id="5292796745632149097">שליחה אל</translation>
 <translation id="5300589172476337783">הצגה</translation>
 <translation id="5301954838959518834">בסדר, הבנתי</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">כרטיסיות גלישה בסתר</translation>
 <translation id="5763514718066511291">הקשה מעתיקה את כתובת האתר של האפליקציה הזו</translation>
 <translation id="5765780083710877561">תיאור:</translation>
-<translation id="5777170031995031090">‏בידיך השליטה איך Google משתמשת בהיסטוריית הגלישה לצורך התאמה אישית של חיפוש Google, מודעות Google ושירותי Google אחרים.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> מתוך <ph name="SPACE_AVAILABLE" /> נמצאים בשימוש</translation>
 <translation id="5797070761912323120">‏Google עשויה להשתמש בהיסטוריית הגלישה שלך לצורך התאמה אישית של החיפוש, מודעות ושירותי Google אחרים</translation>
 <translation id="5804241973901381774">הרשאות</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">השם ארוך מדי</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{תמונה אחת (#)}two{# תמונות}many{# תמונות}other{# תמונות}}</translation>
 <translation id="6447842834002726250">‏קובצי Cookie</translation>
-<translation id="6448273550210938826">הצעות חיפוש וכתובות אתר</translation>
 <translation id="6461962085415701688">לא ניתן לפתוח את הקובץ</translation>
 <translation id="6464977750820128603">‏אפשר לראות אתרים שמבקרים בהם ב-Chrome ולהגדיר טיימרים בשבילם.\n\n‏Google מקבלת מידע על האתרים שמוגדרים בשבילם טיימרים ומשך השהייה שלך באתרים האלה. המידע עוזר לשפר את 'שימוש חכם בדיגיטל'.</translation>
 <translation id="6475951671322991020">הורד סרטון</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">‏כדי לבצע סריקה לאיתור מכשירים ב-Chrome, יש צורך בגישה לנתוני מיקום. <ph name="BEGIN_LINK" />עדכן הרשאות<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">סיסמה</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">שימוש בשירות חיזוי כדי להציג שאילתות קשורות ואתרים פופולריים תוך כדי ההקלדה בשורת כתובת האתר</translation>
 <translation id="666731172850799929">פתח ב-<ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">‏הודעת הפרטיות של Chrome</translation>
 <translation id="6697492270171225480">הצגת הצעות לדפים דומים אם דף מסוים לא נמצא</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">מחיקה</translation>
 <translation id="8266862848225348053">מיקום ההורדה</translation>
 <translation id="8274165955039650276">הצגת הורדות</translation>
-<translation id="8283853025636624853">מסנכרן עם <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">כתוביות</translation>
 <translation id="8300705686683892304">מנוהלים על-ידי אפליקציה</translation>
 <translation id="8310344678080805313">כרטיסיות רגילות</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">בהמתנה</translation>
 <translation id="8970887620466824814">משהו השתבש.</translation>
 <translation id="8972098258593396643">האם להוריד לתיקיית ברירת המחדל?</translation>
-<translation id="8981454092730389528">‏בחירת הפעילויות ב-Google</translation>
 <translation id="8986494364107987395">‏שליחה אוטומטית של דוחות קריסה וסטטיסטיקות שימוש ל-Google</translation>
 <translation id="8993760627012879038">פתח חלון חדש במצב גלישה בסתר</translation>
 <translation id="8998729206196772491">‏אתה נכנס עם חשבון המנוהל על-ידי <ph name="MANAGED_DOMAIN" /> ומעניק למנהל שלו שליטה על הנתונים שלך ב-Chrome. הנתונים שלך ישויכו לצמיתות אל החשבון הזה. יציאה מ-Chrome תמחק את הנתונים שלך מהמכשיר הזה, אבל הם יישארו בחשבון Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
index 024082d..7f9fac72 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">履歴、Cookie、サイトデータ、キャッシュを削除…</translation>
 <translation id="129553762522093515">最近閉じたタブ</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> から送信</translation>
-<translation id="1326317727527857210">他のデバイスと同じタブを使用するには、Chrome にログインします。</translation>
 <translation id="1331212799747679585">Chrome を更新できません。その他のオプション</translation>
 <translation id="1332501820983677155">Google Chrome 機能のショートカット</translation>
 <translation id="1360432990279830238">ログアウトして同期をオフにしますか?</translation>
-<translation id="136248372334525878">ページをプリロードして、すばやく読み込んだりオフラインで閲覧したりできるようにします</translation>
 <translation id="1369915414381695676">サイト <ph name="SITE_NAME" /> を追加しました</translation>
 <translation id="1373696734384179344">選択したコンテンツをダウンロードするにはメモリが不足しています。</translation>
 <translation id="1376578503827013741">計算中...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">選択したタブ</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android の設定<ph name="END_LINK" />で Chrome の権限を有効にしてください。</translation>
 <translation id="1943432128510653496">パスワードの保存</translation>
-<translation id="1946005195648379376">Google が閲覧履歴をどのような方法で使用し、検索やその他の Google サービスをカスタマイズするかを設定します。</translation>
 <translation id="1952172573699511566">可能な場合、設定した言語でウェブサイトのテキストを表示します。</translation>
 <translation id="1960290143419248813">このバージョンの Android では Chrome の更新はサポートされなくなりました</translation>
 <translation id="1966710179511230534">ログイン情報を更新してください。</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">タップして検索</translation>
 <translation id="2079545284768500474">元に戻す</translation>
 <translation id="2082238445998314030">結果 <ph name="TOTAL_RESULTS" /> 件中 <ph name="RESULT_NUMBER" /> 件目</translation>
-<translation id="2086652334978798447">ユーザーに合わせた Google からのおすすめコンテンツを表示するには、Chrome にログインします。</translation>
 <translation id="2091887806945687916">音声</translation>
 <translation id="2096012225669085171">デバイス間の同期とカスタマイズ</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">読みやすくなるまでスライダをドラッグしてください。段落をダブルタップするとテキストがこれより大きくなります。</translation>
 <translation id="2323763861024343754">サイトのストレージ</translation>
 <translation id="2328985652426384049">ログインできません</translation>
-<translation id="2342981853652716282">Chrome にログインすると、ブックマーク、パスワード、その他の設定をどのデバイスからでもご利用いただけます。</translation>
 <translation id="2349710944427398404">Chrome が使用するデータ全体(アカウント、ブックマーク、保存済みの設定など)</translation>
 <translation id="2351097562818989364">翻訳設定をリセットしました。</translation>
 <translation id="2353636109065292463">インターネット接続を確認しています</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">一部のサイトでブロックされています</translation>
 <translation id="3137521801621304719">シークレット モードを終了</translation>
 <translation id="3143515551205905069">同期をキャンセル</translation>
-<translation id="3148434565183091099">お使いのどのデバイスでも同じブックマークを使用するには、Chrome にログインします。</translation>
 <translation id="3157842584138209013">[その他のオプション] からデータ削減量を確認できます</translation>
 <translation id="3166827708714933426">タブとウィンドウのショートカット</translation>
 <translation id="3181954750937456830">セーフ ブラウジング(危険なサイトからユーザーとデバイスを保護します)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">保存されている認証情報を使用してウェブサイトに自動的にログインします。この機能がオフの場合は、ウェブサイトにログインするときに毎回確認を求められます。</translation>
 <translation id="3658159451045945436">リセットすると、アクセスしたサイトのリストなど、節約したデータの履歴が削除されます。</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> 個のタブをグループ化します。</translation>
-<translation id="3672452749423051839">アクセスエラー時の候補表示</translation>
 <translation id="3692944402865947621">保存場所にアクセスできないため、<ph name="FILE_NAME" /> をダウンロードできませんでした。</translation>
 <translation id="3714981814255182093">検索バーを開く</translation>
 <translation id="3716182511346448902">このページは大量のメモリを使用しているため、Chrome により一時停止されました。</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">タイトル</translation>
 <translation id="4008040567710660924">特定のサイトの Cookie を許可します。</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# 時間}other{# 時間}}</translation>
-<translation id="4042870126885713738">ウェブアドレスが解決されない場合や接続を確立できない場合にアドバイスを表示します</translation>
 <translation id="4046123991198612571">次のトラック</translation>
 <translation id="4048707525896921369">ウェブサイト上のトピックについてページを移動せずに調べられます。「タップして検索」では、単語とその周囲のコンテキストが Google 検索に送信され、定義、画像、検索結果などの情報が返されます。
 
@@ -438,7 +430,6 @@
     - お客様の動き(歩き方など)
 
     アクセスを許可する前に、このサイトを信頼できるかどうか確認してください。</translation>
-<translation id="424864128008805179">Chrome からログアウトしますか?</translation>
 <translation id="4256782883801055595">オープンソース ライセンス</translation>
 <translation id="4259722352634471385"><ph name="URL" /> へのアクセスがブロックされました</translation>
 <translation id="4269820728363426813">リンクアドレスをコピー</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">電話</translation>
 <translation id="4384468725000734951">検索に Sogou を使用します</translation>
 <translation id="4404568932422911380">ブックマークがありません</translation>
-<translation id="4409723563706114196">ページ予測の使用</translation>
 <translation id="4411535500181276704">ライトモード</translation>
 <translation id="4415276339145661267">Google アカウントの管理</translation>
 <translation id="4432792777822557199">今後、<ph name="SOURCE_LANGUAGE" />のページは<ph name="TARGET_LANGUAGE" />に翻訳されます</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">このサイトによる VR センサーへのアクセスを許可しますか?</translation>
 <translation id="5210286577605176222">前のタブに移動する</translation>
 <translation id="5210365745912300556">タブを閉じる</translation>
-<translation id="5222676887888702881">ログアウト</translation>
 <translation id="5224771365102442243">動画あり</translation>
 <translation id="5233638681132016545">新しいタブ</translation>
 <translation id="526421993248218238">ページを読み込めません</translation>
 <translation id="5271967389191913893">デバイスでダウンロード コンテンツを開くことができません。</translation>
 <translation id="528192093759286357">全画面表示を終了するには、上からドラッグして、戻るボタンをタップします。</translation>
-<translation id="5284584623296338184">今後、ブックマーク、履歴、パスワードなどの設定への変更は Google アカウントに同期されません。ただし、既存のデータは Google アカウントに保存されたままとなります。</translation>
 <translation id="5292796745632149097">送信先</translation>
 <translation id="5300589172476337783">表示</translation>
 <translation id="5301954838959518834">OK</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">シークレット タブ</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>
 <translation id="5797070761912323120">検索、広告、その他の Google サービスをカスタマイズするために、Google で履歴が使用されることがあります</translation>
 <translation id="5804241973901381774">権限</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">名前が長すぎます</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# 個の画像}other{# 個の画像}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">検索と URL の候補表示</translation>
 <translation id="6461962085415701688">ファイルを開けません</translation>
 <translation id="6464977750820128603">Chrome でアクセスしたサイトを表示し、タイマーを設定できます。\n\nタイマーを設定したサイトの情報と、サイトでの滞在時間に関する情報が Google に送信されます。送信した情報は Digital Wellbeing の改善に役立てられます。</translation>
 <translation id="6475951671322991020">動画をダウンロード</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">デバイスをスキャンするには、Chrome で位置情報にアクセスする必要があります。<ph name="BEGIN_LINK" />権限を更新<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">パスワード</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">予測サービスを使用し、アドレスバーへの入力時に関連性の高い検索キーワードや人気のウェブサイトを表示します</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" />で開く</translation>
 <translation id="666981079809192359">Chrome のプライバシーに関するお知らせ</translation>
 <translation id="6697492270171225480">ページが見つからない場合に類似のページを候補として表示する</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">削除</translation>
 <translation id="8266862848225348053">ダウンロード場所</translation>
 <translation id="8274165955039650276">ダウンロードを表示</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> に同期しています</translation>
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">アプリによる管理</translation>
 <translation id="8310344678080805313">標準のタブ</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">保留中</translation>
 <translation id="8970887620466824814">エラーが発生しました。</translation>
 <translation id="8972098258593396643">デフォルトのフォルダにダウンロードしますか?</translation>
-<translation id="8981454092730389528">Google アクティビティ管理</translation>
 <translation id="8986494364107987395">使用統計データと障害レポートを Google に自動送信します</translation>
 <translation id="8993760627012879038">新しいタブをシークレット モードで開く</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> で管理されているアカウントでログインして、Chrome データの管理を管理者に委ねようとしています。この操作を行うと、データはこのアカウントに恒久的に関連付けられます。Chrome からログアウトすると、データはこのデバイスから削除されますが、Google アカウントには残ります。</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 6ed015b..bbf4859f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ಇತಿಹಾಸ, ಕುಕೀಗಳು, ಸೈಟ್‌ ಡೇಟಾ, ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಿ…</translation>
 <translation id="129553762522093515">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾಗಿರುವುದು</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> ಸಾಧನದಿಂದ ಕಳುಹಿಸಲಾಗಿದೆ</translation>
-<translation id="1326317727527857210">ನಿಮ್ಮ ಇತರ ಸಾಧನಗಳಿಂದ ನಿಮ್ಮ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="1331212799747679585">Chrome ಅಪ್‌ಡೇಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು</translation>
 <translation id="1332501820983677155">Google Chrome ವೈಶಿಷ್ಟ್ಯ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು</translation>
 <translation id="1360432990279830238">ಸೈನ್ ಔಟ್ ಮಾಡಿ, ಸಿಂಕ್ ಆಫ್ ಮಾಡುವುದೇ?</translation>
-<translation id="136248372334525878">ವೇಗವಾಗಿ ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಓದುವುದಕ್ಕಾಗಿ ಪೂರ್ವಲೋಡ್ ಆಗಿರುವಂತಹ ಪುಟಗಳು</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> ಸೈಟ್ ಸೇರಿಸಲಾಗಿದೆ</translation>
 <translation id="1373696734384179344">ಆಯ್ಕೆಮಾಡಲಾದ ವಿಷಯವನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಮೆಮೊರಿಯು ಸಾಕಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="1376578503827013741">ಲೆಕ್ಕ ಮಾಡುತ್ತಿದೆ...</translation>
@@ -133,7 +131,6 @@
 <translation id="1933845786846280168">ಟ್ಯಾಬ್ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> Chrome ಗೆ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ.</translation>
 <translation id="1943432128510653496">ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು</translation>
-<translation id="1946005195648379376">ಹುಡುಕಾಟ ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಲು ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು Google ಹೇಗೆ ಬಳಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಿ.</translation>
 <translation id="1952172573699511566">ಸಾಧ್ಯವಾದಾಗ, ನೀವು ಆದ್ಯತೆ ನೀಡುವ ಭಾಷೆಯಲ್ಲಿ ವೆಬ್‌ಸೈಟ್‌ಗಳು ಪಠ್ಯವನ್ನು ತೋರಿಸುತ್ತವೆ.</translation>
 <translation id="1960290143419248813">Android ನ ಈ ಆವೃತ್ತಿಯಲ್ಲಿ ಇನ್ನು ಮುಂದೆ Chrome ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸಲಾಗುವುದಿಲ್ಲ</translation>
 <translation id="1966710179511230534">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸೈನ್-ಇನ್ ವಿವರಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ.</translation>
@@ -162,7 +159,6 @@
 <translation id="2063713494490388661">ಹುಡುಕಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ</translation>
 <translation id="2079545284768500474">ರದ್ದುಮಾಡಿ</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> ರಲ್ಲಿ <ph name="RESULT_NUMBER" /> ಫಲಿತಾಂಶಗಳು</translation>
-<translation id="2086652334978798447">Google ಸಲಹೆ ನೀಡಲಾದ ವೈಯಕ್ತೀಕರಿಸಲಾದ ವಿಷಯವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
 <translation id="2096012225669085171">ಸಾಧನಗಳಾದ್ಯಂತ ಸಿಂಕ್ ಮಾಡಿ ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಿ</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
@@ -193,7 +189,6 @@
 <translation id="2321958826496381788">ನೀವು ಇದನ್ನು ಆರಾಮವಾಗಿ ಓದಲು ಸಾಧ್ಯವಾಗುವವರೆಗೆ ಸ್ಲೈಡರ್ ಎಳೆಯಿರಿ. ಪ್ಯಾರಾಗ್ರಾಫ್‌ನಲ್ಲಿ ಡಬಲ್ ಟ್ಯಾಪಿಂಗ್ ಮಾಡಿದ ನಂತರ ಪಠ್ಯವು ಕನಿಷ್ಠ ಇಷ್ಟು ದೊಡ್ಡದಾಗಿ ಕಾಣಿಸಬೇಕು.</translation>
 <translation id="2323763861024343754">ಸೈಟ್ ಸಂಗ್ರಹಣೆ</translation>
 <translation id="2328985652426384049">ಸೈನ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
-<translation id="2342981853652716282">ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇನ್ನಷ್ಟನ್ನು ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿ ಪಡೆದುಕೊಳ್ಳಲು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="2349710944427398404">ಖಾತೆಗಳು, ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಮತ್ತು ಉಳಿಸಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ Chrome ಬಳಸಿದ ಒಟ್ಟು ಡೇಟಾ</translation>
 <translation id="2351097562818989364">ನಿಮ್ಮ ಅನುವಾದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರು ಹೊಂದಿಸಲಾಗಿದೆ.</translation>
 <translation id="2353636109065292463">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
@@ -296,7 +291,6 @@
 <translation id="3123473560110926937">ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="3137521801621304719">ಅದೃಶ್ಯ ಮೋಡ್‌ನಿಂದ ಹೊರಬನ್ನಿ</translation>
 <translation id="3143515551205905069">ಸಿಂಕ್ ಮಾಡುವಿಕೆಯನ್ನು ರದ್ದುಪಡಿಸಿ</translation>
-<translation id="3148434565183091099">ನಿಮ್ಮ ಎಲ್ಲ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="3157842584138209013">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳ ಬಟನ್ ಮೂಲಕ ನೀವು ಎಷ್ಟು ಡೇಟಾ ಉಳಿಸಿದ್ದಿರಾ ಎಂದು ನೋಡಿ</translation>
 <translation id="3166827708714933426">ಟ್ಯಾಬ್ ಮತ್ತು ವಿಂಡೋ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು</translation>
 <translation id="3181954750937456830">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ (ಅಪಾಯಕಾರಿ ಸೈಟ್‌ಗಳಿಂದ ನಿಮ್ಮನ್ನು ಮತ್ತು ನಿಮ್ಮ ಸಾಧನವನ್ನು ರಕ್ಷಿಸುತ್ತದೆ)</translation>
@@ -362,7 +356,6 @@
 <translation id="363596933471559332">ಸಂಗ್ರಹಿಸಲಾದ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಿ. ವೈಶಿಷ್ಟ್ಯವು ಆಫ್ ಆಗಿರುವಾಗ, ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮಗೆ ಪರಿಶೀಲನೆ ಮಾಡಲು ಕೇಳಲಾಗುವುದು.</translation>
 <translation id="3658159451045945436">ಮರುಹೊಂದಿಸುವುದರಿಂದ, ಭೇಟಿ ನೀಡಿದ ಸೈಟ್‌ಗಳ ಪಟ್ಟಿ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಡೇಟಾ ಉಳಿತಾಯದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> ಟ್ಯಾಬ್‌ಗಳನ್ನು ಗುಂಪು ಮಾಡಿ.</translation>
-<translation id="3672452749423051839">ನ್ಯಾವಿಗೇಶನ್ ದೋಷ ಸಲಹೆಗಳು</translation>
 <translation id="3692944402865947621">ಸಂಗ್ರಹಣೆ ಸ್ಥಳವನ್ನು ತಲುಪಲು ಸಾಧ್ಯವಾಗದ ಕಾರಣ <ph name="FILE_NAME" /> ಅನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.</translation>
 <translation id="3714981814255182093">ಹುಡುಕು ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="3716182511346448902">ಈ ಪುಟವು ಅತಿ ಹೆಚ್ಚು ಮೆಮೊರಿಯನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ, ಆದ್ದರಿಂದ Chrome ಇದನ್ನು ವಿರಾಮಗೊಳಿಸಿದೆ.</translation>
@@ -405,7 +398,6 @@
 <translation id="4002066346123236978">ಶೀರ್ಷಿಕೆ</translation>
 <translation id="4008040567710660924">ನಿರ್ದಿಷ್ಟ ಸೈಟ್‌ ಒಂದಕ್ಕೆ ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಿ.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ಗಂಟೆ}one{# ಗಂಟೆಗಳು}other{# ಗಂಟೆಗಳು}}</translation>
-<translation id="4042870126885713738">ವೆಬ್ ವಿಳಾಸವು ಪೂರೈಸದಿದ್ದರೆ ಅಥವಾ ಸಂಪರ್ಕಪಡಿಸಲು ಆಗದಿದ್ದರೆ ಸಲಹೆಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="4046123991198612571">ಮುಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="4048707525896921369">ಪುಟದಿಂದ ಹೊರಹೋಗದೆಯೇ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿನ ವಿಷಯಗಳ ಕುರಿತು ತಿಳಿದುಕೊಳ್ಳಿ. "ಹುಡುಕಾಟಕ್ಕಾಗಿ ಟ್ಯಾಪ್‌ ಮಾಡಿ" ಮೂಲಕ Google ಹುಡುಕಾಟಕ್ಕೆ ಪದ ಮತ್ತು ಅದರ ಹಿನ್ನೆಲೆಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ ಈ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಗಳು, ಚಿತ್ರಗಳು, ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳು, ಮತ್ತು ಇತರ ವಿವರಗಳನ್ನು ನೀಡುತ್ತದೆ.
 
@@ -439,7 +431,6 @@
     - ನಿಮ್ಮ ಚಲನೆಗಳು, ಉದಾಹರಣೆಗೆ ನಿಮ್ಮ ನಡಿಗೆಯ ಶೈಲಿ
 
     ಈ ಸೈಟ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡುವುದಕ್ಕೂ ಮೊದಲು ಅದನ್ನು ನೀವು ನಂಬುತ್ತೀರಾ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
-<translation id="424864128008805179">Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation>
 <translation id="4256782883801055595">ಮೂಲ ಪರವಾನಗಿಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="4259722352634471385">ನ್ಯಾವಿಗೇಶನ್‌ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ: <ph name="URL" /></translation>
 <translation id="4269820728363426813">ಲಿಂಕ್ ವಿಳಾಸವನ್ನು ನಕಲಿಸಿ</translation>
@@ -453,7 +444,6 @@
 <translation id="4378154925671717803">ಫೋನ್</translation>
 <translation id="4384468725000734951">ಹುಡುಕಲು Sogou ಬಳಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="4404568932422911380">ಯಾವುದೇ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ</translation>
-<translation id="4409723563706114196">ಪುಟದ ಮುನ್ನೋಟಗಳನ್ನು ಬಳಸಿ</translation>
 <translation id="4411535500181276704">ಲೈಟ್ ಮೋಡ್</translation>
 <translation id="4415276339145661267">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="4432792777822557199">ಈಗಿನಿಂದಲೇ <ph name="SOURCE_LANGUAGE" /> ನಲ್ಲಿನ ಪುಟಗಳನ್ನು <ph name="TARGET_LANGUAGE" /> ಗೆ ಅನುವಾದ ಮಾಡಲಾಗುತ್ತದೆ</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">ಈ ಸೈಟ್ ನಿಮ್ಮ VR ಸೆನ್ಸರ್‌ಗಳಿಗೆ ಪ್ರವೇಶಿಸಲು ಅನುಮತಿಸುವುದೇ?</translation>
 <translation id="5210286577605176222">ಹಿಂದಿನ ಟ್ಯಾಬ್‌ಗೆ ಹೋಗಿ</translation>
 <translation id="5210365745912300556">ಟ್ಯಾಬ್ ಅನ್ನು ಮುಚ್ಚಿ</translation>
-<translation id="5222676887888702881">ಸೈನ್ ಔಟ್</translation>
 <translation id="5224771365102442243">ವೀಡಿಯೊದ ಜೊತೆಗೆ</translation>
 <translation id="5233638681132016545">ಹೊಸ ಟ್ಯಾಬ್</translation>
 <translation id="526421993248218238">ಈ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="5271967389191913893">ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಬೇಕಾದ ವಿಷಯವನ್ನು ಸಾಧನಕ್ಕೆ ತೆರೆಯಲಾಗುತ್ತಿಲ್ಲ.</translation>
 <translation id="528192093759286357">ಪೂರ್ಣಪರದೆಯನ್ನು ನಿರ್ಗಮಿಸಲು ಮೇಲಿನಿಂದ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ ಹಾಗೂ ಹಿಂದೆ ಬಟನ್ ಸ್ಪರ್ಶಿಸಿ.</translation>
-<translation id="5284584623296338184">ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಬದಲಾವಣೆಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಗೆ ಇನ್ನು ಮುಂದೆ ಸಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಆದರೂ, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಡೇಟಾ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿಯೇ ಇರುತ್ತದೆ.</translation>
 <translation id="5292796745632149097">ಇಲ್ಲಿಗೆ ಕಳುಹಿಸಿ</translation>
 <translation id="5300589172476337783">ಪ್ರದರ್ಶಿಸಿ</translation>
 <translation id="5301954838959518834">ಸರಿ, ಅರ್ಥವಾಯಿತು</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">ಅದೃಶ್ಯ ಟ್ಯಾಬ್‌ಗಳು</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>
 <translation id="5797070761912323120">ಹುಡುಕಾಟ, ಜಾಹೀರಾತುಗಳು ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಲು ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು Google ಬಳಸಬಹುದು</translation>
 <translation id="5804241973901381774">ಅನುಮತಿಗಳು</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">ಹೆಸರು ತುಂಬಾ ಉದ್ದವಾಗಿದೆ</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# ಚಿತ್ರ}one{# ಚಿತ್ರಗಳು}other{# ಚಿತ್ರಗಳು}}</translation>
 <translation id="6447842834002726250">ಕುಕೀಸ್</translation>
-<translation id="6448273550210938826">ಹುಡುಕಾಟ ಮತ್ತು URL ಸಲಹೆಗಳು</translation>
 <translation id="6461962085415701688">ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="6464977750820128603">ನೀವು Chrome ನಲ್ಲಿ ಭೇಟಿ ಮಾಡಿದ ಸೈಟ್‌ಗಳನ್ನು ನೋಡಬಹುದು ಮತ್ತು ಅವುಗಳಿಗೆ ಟೈಮರ್‌ಗಳನ್ನು ಹೊಂದಿಸಬಹುದು.\n\nನೀವು ಯಾವ ಸೈಟ್‌ಗಳಿಗೆ  ಟೈಮರ್‌ಗಳನ್ನು ಹೊಂದಿಸಿದ್ದೀರಿ ಮತ್ತು  ಅವುಗಳಿಗೆ ಭೇಟಿ ಮಾಡಿ ಎಷ್ಟು ಸಮಯ ಕಳೆದಿರುವಿರಿ ಎನ್ನುವುದರ ಕುರಿತ ಮಾಹಿತಿಯನ್ನು Google ಪಡೆಯುತ್ತದೆ. ಡಿಜಿಟಲ್ ಯೋಗಕ್ಷೇಮವನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಈ ಮಾಹಿತಿಯನ್ನು ಬಳಸಲಾಗುವುದು.</translation>
 <translation id="6475951671322991020">ವೀಡಿಯೊ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">ಸಾಧನಗಳನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು Chrome ಗೆ ಸ್ಥಳ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ. <ph name="BEGIN_LINK" />ಅನುಮತಿಗಳನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="6659594942844771486">ಟ್ಯಾಬ್</translation>
-<translation id="666268767214822976">ನೀವು ವಿಳಾಸ ಬಾರ್‌ನಲ್ಲಿ ಟೈಪ್ ಮಾಡಿದಂತೆ ಸಂಬಂಧಿಸಿದ ಪ್ರಶ್ನೆಗಳು ಮತ್ತು ಜನಪ್ರಿಯ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ತೋರಿಸಲು ಪೂರ್ವಸೂಚನೆಯ ಸೇವೆಯನ್ನು ಬಳಸಿ</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> ರಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
 <translation id="666981079809192359">Chrome ಗೌಪ್ಯತಾ ಸೂಚನೆ</translation>
 <translation id="6697492270171225480">ಯಾವುದೇ ಪುಟವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ಅಂತಹುದೇ ಪುಟಗಳ ಸಲಹೆಯನ್ನು ತೋರಿಸಿ</translation>
@@ -1017,7 +1002,6 @@
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
 <translation id="8266862848225348053">ಡೌನ್‌ಲೋಡ್ ಸ್ಥಳ</translation>
 <translation id="8274165955039650276">ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನೋಡಿ</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> ಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="8284326494547611709">ಶೀರ್ಷಿಕೆಗಳು</translation>
 <translation id="8300705686683892304">ಆ್ಯಪ್ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
 <translation id="8310344678080805313">ಪ್ರಮಾಣಿತ ಟ್ಯಾಬ್‌ಗಳು</translation>
@@ -1108,7 +1092,6 @@
 <translation id="8965591936373831584">ಬಾಕಿ ಉಳಿದಿರುವುದು</translation>
 <translation id="8970887620466824814">ಏನೋ ತಪ್ಪಾಗಿದೆ.</translation>
 <translation id="8972098258593396643">ಡೀಫಾಲ್ಟ್ ಫೋಲ್ಡರ್‌ಗೆ ಡೌನ್‌ಲೋಡ್‌ ಮಾಡುವುದೇ?</translation>
-<translation id="8981454092730389528">Google ಚಟುವಟಿಕೆ ನಿಯಂತ್ರಣಗಳು</translation>
 <translation id="8986494364107987395">ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಮತ್ತು ಕ್ರಾಶ್ ವರದಿಗಳನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರವಾನಿಸು</translation>
 <translation id="8993760627012879038">ಅದೃಶ್ಯ ಮೋಡ್‌ನಲ್ಲಿ ಹೊಸ ವಿಂಡೋ ತೆರೆಯಿರಿ</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> ನಿರ್ವಹಿಸಿದ ಖಾತೆಯ ಮೂಲಕ ನೀವು ಸೈನ್‍‍ ಇನ್ ಮಾಡುತ್ತಿರುವಿರಿ ಮತ್ತು ಅದರ ನಿರ್ವಾಹಕ ನಿಯಂತ್ರಣವನ್ನು ನಿಮ್ಮ Chrome ಡೇಟಾದ ಮೂಲಕ ನೀಡುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಈ ಖಾತೆಯೊಂದಿಗೆ ಜೋಡಿಸಲಾಗುತ್ತದೆ. Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದರಿಂದ ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ, ಆದರೆ ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿಯೇ ಇರುತ್ತದೆ.</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 820622e..8be5224c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">방문 기록, 쿠키, 사이트 데이터, 캐시 삭제…</translation>
 <translation id="129553762522093515">최근에 닫은 탭</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />에서 전송</translation>
-<translation id="1326317727527857210">다른 기기에서 탭을 가져오려면 Chrome에 로그인하세요.</translation>
 <translation id="1331212799747679585">Chrome을 업데이트할 수 없습니다. 옵션 더보기</translation>
 <translation id="1332501820983677155">Chrome 기능 단축키</translation>
 <translation id="1360432990279830238">로그아웃하고 동기화를 사용 중지하시겠습니까?</translation>
-<translation id="136248372334525878">더 빠른 로드와 오프라인 읽기를 위해 페이지를 미리 로드</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> 사이트 추가됨</translation>
 <translation id="1373696734384179344">선택한 콘텐츠를 다운로드할 공간이 부족합니다.</translation>
 <translation id="1376578503827013741">계산 중...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">선택된 탭</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android 설정<ph name="END_LINK" />에서 Chrome 관련 권한을 설정합니다.</translation>
 <translation id="1943432128510653496">비밀번호 저장</translation>
-<translation id="1946005195648379376">Google이 검색 및 다른 Google 서비스를 맞춤설정하기 위하여 내 인터넷 사용 기록을 사용하는 방법을 제어하세요.</translation>
 <translation id="1952172573699511566">가능한 경우 웹사이트에서 텍스트를 선호하는 언어로 표시합니다.</translation>
 <translation id="1960290143419248813">이 버전의 Android에서는 더 이상 Chrome 업데이트가 지원되지 않습니다.</translation>
 <translation id="1966710179511230534">로그인 세부정보를 업데이트하세요.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">탭하여 검색</translation>
 <translation id="2079545284768500474">실행취소</translation>
 <translation id="2082238445998314030">전체 결과 <ph name="TOTAL_RESULTS" />개 중 <ph name="RESULT_NUMBER" />개</translation>
-<translation id="2086652334978798447">Google에서 추천한 맞춤설정 콘텐츠를 받으려면 Chrome에 로그인합니다.</translation>
 <translation id="2091887806945687916">소리</translation>
 <translation id="2096012225669085171">모든 기기 동기화 및 맞춤설정</translation>
 <translation id="2100273922101894616">자동 로그인</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">편하게 읽을 수 있을 때까지 슬라이더를 드래그하세요. 단락을 두 번 탭하면 텍스트가 이 이상의 크기로 표시됩니다.</translation>
 <translation id="2323763861024343754">사이트 저장공간</translation>
 <translation id="2328985652426384049">로그인할 수 없음</translation>
-<translation id="2342981853652716282">Chrome에 로그인하여 모든 기기에서 내 북마크, 비밀번호 등을 사용하세요.</translation>
 <translation id="2349710944427398404">계정, 북마크, 저장된 설정 등 Chrome에서 사용한 전체 데이터</translation>
 <translation id="2351097562818989364">번역 설정이 재설정되었습니다.</translation>
 <translation id="2353636109065292463">인터넷 연결 상태를 확인하세요.</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">일부 사이트에서 차단됨</translation>
 <translation id="3137521801621304719">시크릿 모드 나가기</translation>
 <translation id="3143515551205905069">동기화 취소</translation>
-<translation id="3148434565183091099">어느 기기에서나 내 북마크를 사용하려면 Chrome에 로그인하세요.</translation>
 <translation id="3157842584138209013">추가 옵션 버튼에서 저장한 데이터의 양을 확인해보세요.</translation>
 <translation id="3166827708714933426">탭 및 창 단축키</translation>
 <translation id="3181954750937456830">세이프 브라우징(사용자와 사용자의 기기를 위험한 사이트로부터 보호)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">저장된 사용자 인증 정보를 사용하여 자동으로 웹사이트에 로그인합니다. 이 기능이 꺼져 있는 경우에는 웹사이트에 로그인할 때마다 인증 요청 메시지가 표시됩니다.</translation>
 <translation id="3658159451045945436">재설정하면 방문한 사이트 목록을 비롯한 데이터 절약 기록이 삭제됩니다.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" />개의 탭을 그룹화합니다.</translation>
-<translation id="3672452749423051839">탐색 오류 시 추천사항 표시</translation>
 <translation id="3692944402865947621">저장 위치에 연결할 수 없어 <ph name="FILE_NAME" />을(를) 다운로드할 수 없습니다.</translation>
 <translation id="3714981814255182093">찾기 창 열기</translation>
 <translation id="3716182511346448902">페이지에서 너무 많은 메모리를 사용하므로 Chrome에서 페이지를 일시중지했습니다.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">제목</translation>
 <translation id="4008040567710660924">특정 사이트의 쿠키를 허용합니다.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{#시간}other{#시간}}</translation>
-<translation id="4042870126885713738">웹 주소가 확인되지 않거나 연결되지 않는 경우 추천 주소 표시</translation>
 <translation id="4046123991198612571">다음 트랙</translation>
 <translation id="4048707525896921369">페이지에서 나가지 않고도 웹사이트에 언급된 주제에 관해 자세히 알아보세요. 탭하여 검색 기능은 단어와 관련 맥락을 Google 검색으로 전송하여 정의, 사진, 검색결과 및 기타 세부정보를 제공합니다.
 
@@ -438,7 +430,6 @@
     - 걸음걸이와 같은 움직임
 
     액세스를 허용하기 전에 사이트를 신뢰할 수 있는지 확인하세요.</translation>
-<translation id="424864128008805179">Chrome에서 로그아웃하시겠습니까?</translation>
 <translation id="4256782883801055595">오픈소스 라이선스</translation>
 <translation id="4259722352634471385">탐색이 차단됨: <ph name="URL" /></translation>
 <translation id="4269820728363426813">링크 주소 복사</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">전화기</translation>
 <translation id="4384468725000734951">검색할 때 Sogou 사용</translation>
 <translation id="4404568932422911380">북마크 없음</translation>
-<translation id="4409723563706114196">페이지 예측 사용</translation>
 <translation id="4411535500181276704">라이트 모드</translation>
 <translation id="4415276339145661267">Google 계정 관리</translation>
 <translation id="4432792777822557199">지금부터 <ph name="SOURCE_LANGUAGE" />로 된 페이지가 <ph name="TARGET_LANGUAGE" />로 번역됩니다.</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">이 사이트에서 VR 센서에 액세스하도록 허용하시겠습니까?</translation>
 <translation id="5210286577605176222">이전 탭으로 이동</translation>
 <translation id="5210365745912300556">탭 닫기</translation>
-<translation id="5222676887888702881">로그아웃</translation>
 <translation id="5224771365102442243">동영상 포함</translation>
 <translation id="5233638681132016545">새 탭</translation>
 <translation id="526421993248218238">이 페이지를 로드할 수 없습니다.</translation>
 <translation id="5271967389191913893">기기에서 다운로드하려는 콘텐츠를 열 수 없습니다.</translation>
 <translation id="528192093759286357">전체화면을 종료하려면 상단에서 드래그하여 뒤로 버튼을 터치하세요.</translation>
-<translation id="5284584623296338184">북마크, 방문 기록, 비밀번호, 기타 설정이 더 이상 Google 계정에 동기화되지 않습니다. 하지만 기존 데이터는 Google 계정에 계속 저장됩니다.</translation>
 <translation id="5292796745632149097">전송할 기기</translation>
 <translation id="5300589172476337783">표시</translation>
 <translation id="5301954838959518834">확인</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">시크릿 탭</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>
 <translation id="5797070761912323120">Google에서 내 방문 기록을 사용하여 Google 검색, 광고 및 다른 Google 서비스를 맞춤설정할 수 있습니다.</translation>
 <translation id="5804241973901381774">권한</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">이름이 너무 깁니다.</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{이미지 #개}other{이미지 #개}}</translation>
 <translation id="6447842834002726250">쿠키</translation>
-<translation id="6448273550210938826">추천 검색어 및 추천 URL</translation>
 <translation id="6461962085415701688">파일을 열 수 없습니다</translation>
 <translation id="6464977750820128603">Chrome에서 내가 방문한 사이트를 보고 사이트에 타이머를 설정할 수 있습니다.\n\nGoogle에서는 타이머가 설정된 사이트와 사이트 방문 시간 정보를 수집합니다. 이 정보는 디지털 웰빙을 개선하는 데 사용됩니다.</translation>
 <translation id="6475951671322991020">동영상 다운로드</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">기기를 스캔하려면 Chrome에서 위치 정보에 액세스해야 합니다. <ph name="BEGIN_LINK" />권한 업데이트<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">비밀번호</translation>
 <translation id="6659594942844771486">탭</translation>
-<translation id="666268767214822976">예상 검색어 서비스를 사용하여 검색주소창에 입력할 때 관련 검색어 및 인기 웹사이트 표시</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" />에서 열기</translation>
 <translation id="666981079809192359">Chrome 개인정보처리방침</translation>
 <translation id="6697492270171225480">페이지를 찾을 수 없을 때 비슷한 페이지 제안 표시</translation>
@@ -797,7 +782,7 @@
 <translation id="671481426037969117"><ph name="FQDN" /> 타이머가 종료되었습니다. 타이머는 내일 다시 시작됩니다.</translation>
 <translation id="6738867403308150051">다운로드 중...</translation>
 <translation id="6746124502594467657">아래로 이동</translation>
-<translation id="6751888224264752704">이 Chrome 데이터도 기기에서 삭제</translation>
+<translation id="6751888224264752704">이 기기에서도 이러한 Chrome 데이터 삭제</translation>
 <translation id="6766622839693428701">닫으려면 아래로 스와이프하세요.</translation>
 <translation id="6766758767654711248">탭하여 사이트로 이동</translation>
 <translation id="6767294960381293877">탭을 공유할 기기 목록이 절반 높이로 열렸습니다.</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">삭제</translation>
 <translation id="8266862848225348053">다운로드 위치</translation>
 <translation id="8274165955039650276">다운로드 항목 보기</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" />에 동기화 중</translation>
 <translation id="8284326494547611709">자막</translation>
 <translation id="8300705686683892304">앱에서 관리함</translation>
 <translation id="8310344678080805313">일반 탭</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">보류 중</translation>
 <translation id="8970887620466824814">문제 발생</translation>
 <translation id="8972098258593396643">기본 폴더에 다운로드하시겠습니까?</translation>
-<translation id="8981454092730389528">Google 활동 제어</translation>
 <translation id="8986494364107987395">사용 통계 및 비정상 종료 보고서를 Google에 자동으로 전송합니다.</translation>
 <translation id="8993760627012879038">시크릿 모드로 새 탭 열기</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" />에서 관리하는 계정으로 로그인합니다. 계정 관리자가 내 Chrome 데이터를 관리하게 되며 데이터는 이 계정에 영구적으로 연결됩니다. Chrome에서 로그아웃하면 데이터가 이 기기에서 삭제되지만 Google 계정에는 그대로 유지됩니다.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
index b4710d7..db4e11f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Išvalykite istoriją, slapukus, svetainės duomenis, talpyklą…</translation>
 <translation id="129553762522093515">Neseniai uždarytas</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – išsiųsta iš „<ph name="DEVICE_NAME" />“</translation>
-<translation id="1326317727527857210">Prisijunkite prie „Chrome“, kad pasiektumėte skirtukus iš kitų įrenginių.</translation>
 <translation id="1331212799747679585">Nepavyksta atnaujinti „Chrome“. Daugiau parinkčių.</translation>
 <translation id="1332501820983677155">„Google Chrome“ funkcijų spartieji klavišai</translation>
 <translation id="1360432990279830238">Atsijungti ir išjungti sinchronizavimą?</translation>
-<translation id="136248372334525878">Iš anksto įkeliami puslapiai, kad įkėlimo procesas vyktų greičiau ir būtų galima skaityti neprisijungus</translation>
 <translation id="1369915414381695676">Pridėta svetainė <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Nepakanka atminties pasirinktam turiniui atsisiųsti.</translation>
 <translation id="1376578503827013741">Apskaičiuojama...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Pasirinktas skirtukas</translation>
 <translation id="194341124344773587">Įjunkite „Chrome“ leidimą <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Slaptažodžių išsaugojimas</translation>
-<translation id="1946005195648379376">Galite pasirinkti, kaip „Google“ turėtų naudoti jūsų naršymo istoriją, kad suasmenintų Paiešką ir kitas „Google“ paslaugas.</translation>
 <translation id="1952172573699511566">Kai bus įmanoma, svetainėje tekstas bus rodomas pasirinkta kalba.</translation>
 <translation id="1960290143419248813">„Chrome“ naujiniai nebepalaikomi naudojant šios versijos „Android“.</translation>
 <translation id="1966710179511230534">Atnaujinkite išsamią prisijungimo informaciją.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Paliesti ir ieškoti</translation>
 <translation id="2079545284768500474">Anuliuoti</translation>
 <translation id="2082238445998314030">Rezultatų: <ph name="RESULT_NUMBER" /> iš <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Jei norite gauti „Google“ siūlomo suasmeninto turinio, prisijunkite prie „Chrome“.</translation>
 <translation id="2091887806945687916">Garsas</translation>
 <translation id="2096012225669085171">Sinchronizuoti ir suasmeninti įrenginiuose</translation>
 <translation id="2100273922101894616">Automatinis prisijungimas</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Vilkite šliaužiklį, kol bus patogu skaityti šį tekstą. Du kartus palietus pastraipą, tekstas turėtų būti mažiausiai tokio dydžio.</translation>
 <translation id="2323763861024343754">Svetainės saugykla</translation>
 <translation id="2328985652426384049">Nepavyksta prisijungti</translation>
-<translation id="2342981853652716282">Prisijunkite prie „Chrome“, kad galėtumėte naudoti žymes, slaptažodžius ir kitus nustatymus visuose įrenginiuose.</translation>
 <translation id="2349710944427398404">Bendras „Chrome“ naudojamų duomenų kiekis, įskaitant paskyras, žymes ir išsaugotus nustatymus</translation>
 <translation id="2351097562818989364">Vertimo nustatymai buvo nustatyti iš naujo.</translation>
 <translation id="2353636109065292463">Tikrinamas interneto ryšys</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Užblokuota kai kuriose svetainėse</translation>
 <translation id="3137521801621304719">Išjungti inkognito režimą</translation>
 <translation id="3143515551205905069">Atšaukti sinchronizavimą</translation>
-<translation id="3148434565183091099">Prisijunkite naršyklėje „Chrome“, kad pasiektumėte žymes visuose įrenginiuose.</translation>
 <translation id="3157842584138209013">Žr., kiek duomenų sutaupėte, spustelėję mygtuką „Daugiau parinkčių“</translation>
 <translation id="3166827708714933426">Skirtukų ir langų spartieji klavišai</translation>
 <translation id="3181954750937456830">Saugus naršymas (apsaugo jus ir jūsų įrenginį nuo pavojingų svetainių)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatiškai prisijungti prie svetainių naudojant išsaugotus prisijungimo duomenis. Kai funkcija išjungta, kaskart prisijungiant prie svetainės prašoma patvirtinti.</translation>
 <translation id="3658159451045945436">Nustačius iš naujo, bus ištrinta sutaupytų duomenų istorija, įskaitant aplankytų svetainių sąrašą.</translation>
 <translation id="3663367437272849150">Grupuokite <ph name="NUM_SELECTED" /> skirtuk.</translation>
-<translation id="3672452749423051839">Naršymo klaidų pasiūlymai</translation>
 <translation id="3692944402865947621">Nepavyko atsisiųsti „<ph name="FILE_NAME" />“, nes saugyklos vieta nepasiekiama.</translation>
 <translation id="3714981814255182093">Atidaryti radimo juostą</translation>
 <translation id="3716182511346448902">Šis puslapis naudoja per daug atminties, todėl „Chrome“ jį pristabdė.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Pavadinimas</translation>
 <translation id="4008040567710660924">Leisti konkrečios svetainės slapukus.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# val.}one{# val.}few{# val.}many{# val.}other{# val.}}</translation>
-<translation id="4042870126885713738">Rodyti pasiūlymus, kai žiniatinklio adresas nepasiekiamas arba nepavyksta užmegzti ryšio</translation>
 <translation id="4046123991198612571">Kitas takelis</translation>
 <translation id="4048707525896921369">Sužinokite apie temas svetainėse neišėję iš puslapio. Naudojant Paiešką palietus siunčiamas žodis ir jo kontekstas „Google“ paieškai, kuri pateikia apibrėžimų, nuotraukų, paieškos rezultatų ir kitos išsamios informacijos.
 
@@ -438,7 +430,6 @@
     – jūsų judesius, pvz., eiseną.
 
     Prieš suteikdami prieigą įsitikinkite, kad pasitikite šia svetaine.</translation>
-<translation id="424864128008805179">Atsijungti nuo „Chrome“?</translation>
 <translation id="4256782883801055595">Atvirojo šaltinio licencijos</translation>
 <translation id="4259722352634471385">Naršymas užblokuotas: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopijuoti nuorodos adresą</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefonas</translation>
 <translation id="4384468725000734951">Atliekant paiešką naudojama „Sogou“</translation>
 <translation id="4404568932422911380">Nėra jokių žymių</translation>
-<translation id="4409723563706114196">Naudoti puslapių numatymą</translation>
 <translation id="4411535500181276704">Supaprastintasis režimas</translation>
 <translation id="4415276339145661267">„Google“ paskyros tvarkymas</translation>
 <translation id="4432792777822557199">Puslapiai, parašyti <ph name="SOURCE_LANGUAGE" />, nuo dabar bus verčiami į <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Leisti šiai svetainei pasiekti jūsų VR jutiklius?</translation>
 <translation id="5210286577605176222">Pereiti prie ankstesnio skirtuko</translation>
 <translation id="5210365745912300556">Uždaryti skirtuką</translation>
-<translation id="5222676887888702881">Atsijungti</translation>
 <translation id="5224771365102442243">Su vaizdo įrašu</translation>
 <translation id="5233638681132016545">Naujas skirtukas</translation>
 <translation id="526421993248218238">Nepavyko įkelti šio puslapio</translation>
 <translation id="5271967389191913893">Įrenginyje nepavyksta atidaryti norimo atsisiųsti turinio.</translation>
 <translation id="528192093759286357">Vilkite žymeklį nuo viršaus ir palieskite mygtuką „Atgal“, kad išeitumėte iš viso ekrano režimo.</translation>
-<translation id="5284584623296338184">Žymių, istorijos, slaptažodžių ir kitų nustatymų pakeitimai nebebus sinchronizuojami su „Google“ paskyra. Tačiau esami duomenys ir toliau bus saugomi „Google“ paskyroje.</translation>
 <translation id="5292796745632149097">Siųsti į</translation>
 <translation id="5300589172476337783">Rodyti</translation>
 <translation id="5301954838959518834">Gerai, supratau</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognito skirtukai</translation>
 <translation id="5763514718066511291">Palieskite, jei norite nukopijuoti šios programos URL</translation>
 <translation id="5765780083710877561">Aprašas:</translation>
-<translation id="5777170031995031090">Valdykite, kaip „Google“ turėtų naudoti jūsų naršymo istoriją, kad suasmenintų Paiešką, skelbimus ir kitas „Google“ paslaugas.</translation>
 <translation id="5793665092639000975">Naudojama <ph name="SPACE_USED" /> iš <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">„Google“ gali naudoti jūsų istoriją, kad suasmenintų Paiešką, skelbimus ir kitas „Google“ paslaugas</translation>
 <translation id="5804241973901381774">Leidimai</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Pavadinimas yra per ilgas</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# vaizdas}one{# vaizdas}few{# vaizdai}many{# vaizdo}other{# vaizdų}}</translation>
 <translation id="6447842834002726250">Slapukai</translation>
-<translation id="6448273550210938826">Paieškos ir URL pasiūlymai</translation>
 <translation id="6461962085415701688">Nepavyksta atidaryti failo</translation>
 <translation id="6464977750820128603">Galite peržiūrėti svetaines, kuriose lankotės naudodami „Chrome“, ir nustatyti jų laikmačius.\n\n„Google“ gauna informaciją apie svetaines, kurių laikmačius nustatote, ir apie apsilankymų jose trukmę. Ši informacija naudojama norint patobulinti Skaitmeninės gerovės funkcijas.</translation>
 <translation id="6475951671322991020">Atsisiųsti vaizdo įrašą</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">„Chrome“ reikalinga prieiga prie vietos, kad galėtų nuskaityti įrenginius. <ph name="BEGIN_LINK" />Atnaujinkite leidimus<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Slaptažodis</translation>
 <translation id="6659594942844771486">Skirtukas</translation>
-<translation id="666268767214822976">Naudoti numatymo paslaugą, kad adreso juostoje įvedant tekstą būtų rodomos susijusios užklausos ir populiarios svetainės</translation>
 <translation id="666731172850799929">Atidaryti naudojant „<ph name="APP_NAME" />“</translation>
 <translation id="666981079809192359">„Chrome“ privatumo pranešimas</translation>
 <translation id="6697492270171225480">Rodyti panašių puslapių pasiūlymus, kai nepavyksta rasti puslapio</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Ištrinti</translation>
 <translation id="8266862848225348053">Atsisiuntimo vieta</translation>
 <translation id="8274165955039650276">Peržiūrėti atsisiuntimus</translation>
-<translation id="8283853025636624853">Sinchronizuojama su <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtitrai</translation>
 <translation id="8300705686683892304">Valdo programa</translation>
 <translation id="8310344678080805313">Įprasti skirtukai</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">laukiama</translation>
 <translation id="8970887620466824814">Kažkas ne taip.</translation>
 <translation id="8972098258593396643">Atsisiųsti į numatytąjį aplanką?</translation>
-<translation id="8981454092730389528">„Google“ veiklos valdikliai</translation>
 <translation id="8986494364107987395">Automatiškai siųsti naudojimo statistiką ir strigčių ataskaitas „Google“</translation>
 <translation id="8993760627012879038">Atidaryti naują skirtuką inkognito režimu</translation>
 <translation id="8998729206196772491">Prisijungiate naudodami „<ph name="MANAGED_DOMAIN" />“ tvarkomą paskyrą ir suteikiate jos administratoriui galimybę valdyti jūsų „Chrome“ duomenis. Duomenys bus visam laikui susieti su šia paskyra. Atsijungę nuo „Chrome“ ištrinsite duomenis iš šio įrenginio, bet jie ir toliau bus saugomi „Google“ paskyroje.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
index 91252a4..b32f846 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Dzēst vēsturi, sīkfailus, vietnes datus, kešatmiņu…</translation>
 <translation id="129553762522093515">Nesen aizvērtas</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> — nosūtīts no ierīces <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Pierakstieties pārlūkā Chrome, lai būtu pieejamas cilnes no citām jūsu ierīcēm.</translation>
 <translation id="1331212799747679585">Nevar atjaunināt Chrome — citas opcijas</translation>
 <translation id="1332501820983677155">Google Chrome funkciju īsinājumtaustiņi</translation>
 <translation id="1360432990279830238">Izrakstīties un izslēgt sinhronizēšanu?</translation>
-<translation id="136248372334525878">Veiciet lapu pirmsielādi, lai ātrāk ielādētu lapas un lasītu tās bezsaistē.</translation>
 <translation id="1369915414381695676">Tika pievienota vietne <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Nepietiek vietas, lai lejupielādētu atlasīto saturu.</translation>
 <translation id="1376578503827013741">Notiek aprēķināšana...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Atlasītā cilne</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android iestatījumos<ph name="END_LINK" /> ieslēdziet atļauju pārlūkam Chrome.</translation>
 <translation id="1943432128510653496">Paroļu saglabāšana</translation>
-<translation id="1946005195648379376">Kontrolējiet to, kā Google var izmantot jūsu pārlūkošanas vēsturi, lai personalizētu Meklēšanu un citus Google pakalpojumus.</translation>
 <translation id="1952172573699511566">Kad vien iespējams, vietnēs tiks rādīts teksts atlasītajā valodā.</translation>
 <translation id="1960290143419248813">Chrome atjauninājumi vairs netiek atbalstīti šajā Android versijā</translation>
 <translation id="1966710179511230534">Lūdzu, atjauniniet pierakstīšanās informāciju.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Pieskarties, lai meklētu</translation>
 <translation id="2079545284768500474">Atsaukt</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. rezultāts no <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Lai saņemtu Google ieteikto personalizēto saturu, pierakstieties pārlūkā Chrome.</translation>
 <translation id="2091887806945687916">Signāls</translation>
 <translation id="2096012225669085171">Sinhronizējiet un personalizējiet vairākās ierīcēs</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Velciet slīdni, kamēr varat ērti lasīt. Pēc dubultskāriena rindkopai tekstam ir jābūt vismaz šādā lielumā.</translation>
 <translation id="2323763861024343754">Vietnes krātuve</translation>
 <translation id="2328985652426384049">Nevar pierakstīties</translation>
-<translation id="2342981853652716282">Pierakstieties pārlūkā Chrome, lai iegūtu savas grāmatzīmes, paroles un citu saturu visās savās ierīcēs.</translation>
 <translation id="2349710944427398404">Kopējais pārlūkā Chrome izmantoto datu apjoms, ieskaitot kontus, grāmatzīmes un saglabātos iestatījumus</translation>
 <translation id="2351097562818989364">Tulkošanas iestatījumi ir atiestatīti.</translation>
 <translation id="2353636109065292463">Notiek interneta savienojuma pārbaude</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloķētas dažās vietnēs</translation>
 <translation id="3137521801621304719">Iziet no inkognito režīma</translation>
 <translation id="3143515551205905069">Atcelt sinhronizāciju</translation>
-<translation id="3148434565183091099">Pierakstieties pārlūkā Chrome, lai grāmatzīmes būtu pieejamas visās jūsu ierīcēs.</translation>
 <translation id="3157842584138209013">Izmantojiet pogu Vairāk opciju, lai uzzinātu ietaupīto datu apjomu</translation>
 <translation id="3166827708714933426">Ciļņu un logu īsinājumtaustiņi</translation>
 <translation id="3181954750937456830">Droša pārlūkošana (aizsargā jūs un ierīci pret bīstamām vietnēm)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automātiski pierakstīties vietnēs, izmantojot saglabātos akreditācijas datus. Ja funkcija ir izslēgta, verifikācija būs jāveic ikreiz, kad pierakstīsieties vietnē.</translation>
 <translation id="3658159451045945436">Veicot atiestatīšanu, tiek dzēsta saglabāto datu vēsture, tostarp apmeklēto vietņu saraksts.</translation>
 <translation id="3663367437272849150">Grupējiet <ph name="NUM_SELECTED" /> cilni(-es).</translation>
-<translation id="3672452749423051839">Navigācijas kļūdu ieteikumi</translation>
 <translation id="3692944402865947621">Faila <ph name="FILE_NAME" /> lejupielāde neizdevās, jo krātuves vieta nav sasniedzama.</translation>
 <translation id="3714981814255182093">Atvērt atrašanas joslu</translation>
 <translation id="3716182511346448902">Šī lapa izmanto pārāk daudz atmiņas, tādēļ Chrome to apturēja.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Nosaukums</translation>
 <translation id="4008040567710660924">Atļaut sīkfailus konkrētai vietnei.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}zero{# h}one{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Rādīt ieteikumus, ja nedarbojas tīmekļa adrese vai nevar izveidot savienojumu.</translation>
 <translation id="4046123991198612571">Nākamais ieraksts</translation>
 <translation id="4048707525896921369">Uzziniet par vietņu tēmām, neizejot no lapas. Izmantojot funkciju “Pieskarties, lai meklētu”, vārds un tā konteksts tiek nosūtīts pakalpojumam Google meklēšana, un tiek parādītas definīcijas, attēli, meklēšanas rezultāti un cita informācija.
 
@@ -438,7 +430,6 @@
     - jūsu kustības, piemēram, gaitas īpatnības.
 
     Atļaujiet piekļuvi tikai tad, ja uzticaties šai vietnei.</translation>
-<translation id="424864128008805179">Vai izrakstīties no pārlūka Chrome?</translation>
 <translation id="4256782883801055595">Atklātā pirmkoda licences</translation>
 <translation id="4259722352634471385">Navigācija ir bloķēta: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopēt saites adresi</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Tālrunis</translation>
 <translation id="4384468725000734951">Tiek izmantota meklētājprogramma Sogou</translation>
 <translation id="4404568932422911380">Nav grāmatzīmju</translation>
-<translation id="4409723563706114196">Lapu ieteikumu izmantošana</translation>
 <translation id="4411535500181276704">Vienkāršais režīms</translation>
 <translation id="4415276339145661267">Google konta pārvaldība</translation>
 <translation id="4432792777822557199">Turpmāk lapas šādā valodā: <ph name="SOURCE_LANGUAGE" /> tiks tulkotas šādā valodā: <ph name="TARGET_LANGUAGE" />.</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Vai atļaut šai vietnei piekļūt jūsu VR sensoriem?</translation>
 <translation id="5210286577605176222">Pāriet uz iepriekšējo cilni</translation>
 <translation id="5210365745912300556">Aizvērt cilni</translation>
-<translation id="5222676887888702881">Izrakstīties</translation>
 <translation id="5224771365102442243">Ar video</translation>
 <translation id="5233638681132016545">Jauna cilne</translation>
 <translation id="526421993248218238">Šo lapu nevar ielādēt</translation>
 <translation id="5271967389191913893">Ierīcē nevar atvērt lejupielādējamo saturu.</translation>
 <translation id="528192093759286357">Lai izietu no pilnekrāna režīma, velciet no augšas un pieskarieties pogai Atpakaļ.</translation>
-<translation id="5284584623296338184">Grāmatzīmju, vēstures, paroļu un citu iestatījumu izmaiņas vairs netiks sinhronizētas ar jūsu Google kontu. Tomēr esošie dati joprojām tiks glabāti jūsu Google kontā.</translation>
 <translation id="5292796745632149097">Sūtīt uz:</translation>
 <translation id="5300589172476337783">Rādīt</translation>
 <translation id="5301954838959518834">Labi, sapratu</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognito režīma cilnes</translation>
 <translation id="5763514718066511291">Pieskarieties, lai kopētu šīs lietotnes URL.</translation>
 <translation id="5765780083710877561">Apraksts:</translation>
-<translation id="5777170031995031090">Kontrolējiet to, kā Google izmanto jūsu pārlūkošanas vēsturi, lai personalizētu Meklēšanu, reklāmas un citus Google pakalpojumus.</translation>
 <translation id="5793665092639000975">Izmantotais apjoms: <ph name="SPACE_USED" /> no <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google var izmantot jūsu vēsturi, lai personalizētu Meklēšanu, reklāmas un citus Google pakalpojumus.</translation>
 <translation id="5804241973901381774">Atļaujas</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Vārds ir pārāk garš</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# attēls}zero{# attēli}one{# attēls}other{# attēli}}</translation>
 <translation id="6447842834002726250">Sīkfaili</translation>
-<translation id="6448273550210938826">Meklēšana un URL ieteikumi</translation>
 <translation id="6461962085415701688">Nevar atvērt failu.</translation>
 <translation id="6464977750820128603">Varat skatīt pārlūkā Chrome apmeklētās vietnes un iestatīt tām taimerus.\n\nGoogle saņem informāciju par vietnēm, kurām iestatāt taimerus, kā arī šo vietņu apmeklēšanas ilgumu. Šī informācija tiek izmantota, lai uzlabotu Digitālo labjutību.</translation>
 <translation id="6475951671322991020">Lejupielādēt videoklipu</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Lai meklētu ierīces, pārlūkam Chrome ir nepieciešama piekļuve atrašanās vietai. <ph name="BEGIN_LINK" />Atjauniniet atļaujas<ph name="END_LINK" />.</translation>
 <translation id="6657585470893396449">Parole</translation>
 <translation id="6659594942844771486">Cilne</translation>
-<translation id="666268767214822976">Izmantojiet ieteikumus, lai skatītu saistītos vaicājumus un populāras vietnes, kad rakstāt adreses joslā.</translation>
 <translation id="666731172850799929">Atvērt lietotnē <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chrome konfidencialitātes paziņojums</translation>
 <translation id="6697492270171225480">Ja lapu neizdotas atrast, rāda ieteikumus par līdzīgām lapām</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Dzēst</translation>
 <translation id="8266862848225348053">Lejupielādes atrašanās vieta</translation>
 <translation id="8274165955039650276">Skatīt lejupielādes</translation>
-<translation id="8283853025636624853">Sinhronizēšana ar <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Paraksti</translation>
 <translation id="8300705686683892304">Pārvalda lietotne</translation>
 <translation id="8310344678080805313">Standarta cilnes</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">gaida</translation>
 <translation id="8970887620466824814">Radās kļūda.</translation>
 <translation id="8972098258593396643">Vai lejupielādēt noklusējuma mapē?</translation>
-<translation id="8981454092730389528">Google aktivitātes vadīklas</translation>
 <translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation>
 <translation id="8993760627012879038">Atvērt jaunu cilni inkognito režīmā</translation>
 <translation id="8998729206196772491">Jūs pierakstāties kontā, kas tiek pārvaldīts domēnā <ph name="MANAGED_DOMAIN" />, un sniedzat tā administratoram kontroli pār saviem Chrome datiem. Jūsu dati tiks neatgriezeniski saistīti ar šo kontu. Izrakstoties no pārlūka Chrome, jūsu dati tiks dzēsti no šīs ierīces, taču tie tiks saglabāti jūsu Google kontā.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
index 5c3d482..76290c0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ചരിത്രവും കുക്കികളും സൈറ്റ് വിവരവും കാഷെയും മായ്‌ക്കുക...</translation>
 <translation id="129553762522093515">സമീപകാലത്ത് അടച്ചവ</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" />-ൽ നിന്ന് അയച്ചത്</translation>
-<translation id="1326317727527857210">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിൽ നിന്നുള്ള ടാബുകൾ ലഭിക്കാൻ, Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="1331212799747679585">Chrome അപ്‌ഡേറ്റ് ചെയ്യാനാവില്ല. കൂടുതൽ ഓപ്‌ഷനുകൾ</translation>
 <translation id="1332501820983677155">Google Chrome ഫീച്ചർ കുറുക്കുവഴികൾ</translation>
 <translation id="1360432990279830238">സൈൻ ഔട്ട് ചെയ്‌ത് സമന്വയം ഓഫാക്കണോ?</translation>
-<translation id="136248372334525878">വേഗത്തിൽ ലോഡ് ചെയ്യാനും ഓഫ്‍ലൈന്‍ വായനക്കുമായി പേജുകൾ മുൻകൂട്ടി ലോഡ് ചെയ്യുക</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> എന്ന സൈറ്റ് ചേർത്തൂ</translation>
 <translation id="1373696734384179344">തിരഞ്ഞെടുത്ത ഉള്ളടക്കം ഡൗൺലോഡ് ചെയ്യുന്നതിന് ആവശ്യമായ മെമ്മറിയില്ല.</translation>
 <translation id="1376578503827013741">കണക്കാക്കുന്നു…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">തിരഞ്ഞെടുത്ത ടാബ്</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android ക്രമീകരണത്തിൽ<ph name="END_LINK" /> Chrome-നായി അനുമതി ഓണാക്കുക.</translation>
 <translation id="1943432128510653496">സംരക്ഷിച്ച പാസ്‌വേഡുകള്‍</translation>
-<translation id="1946005195648379376">തിരയലും മറ്റ് Google സേവനങ്ങളും വ്യക്തിപരമാക്കാൻ, Google നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം ഉപയോഗിക്കുന്ന രീതി നിയന്ത്രിക്കുക.</translation>
 <translation id="1952172573699511566">വെബ്സൈറ്റുകൾ, സാധ്യമാകുന്നിടത്തെല്ലാം, നിങ്ങൾ തിരഞ്ഞെടുത്ത ഭാഷയിൽ ടെക്‌സ്‌റ്റ് കാണിക്കും.</translation>
 <translation id="1960290143419248813">Android-ന്റെ ഈ പതിപ്പിൽ ഇനിയങ്ങോട്ട് Chrome-ന്റെ അപ്‌ഡേറ്റുകൾ പിന്തുണയ്‌ക്കില്ല</translation>
 <translation id="1966710179511230534">നിങ്ങളുടെ സൈൻ ഇൻ വിശദാംശങ്ങൾ അപ്‌ഡേറ്റ് ചെയ്യുക.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">തിരയാൻ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="2079545284768500474">പഴയപടിയാക്കുക</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> / <ph name="TOTAL_RESULTS" /> ഫലം</translation>
-<translation id="2086652334978798447">Google നിർദ്ദേശിച്ച, വ്യക്തിപരമാക്കിയ ഉള്ളടക്കം സ്വന്തമാക്കാൻ, Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="2091887806945687916">ശബ്‌ദം</translation>
 <translation id="2096012225669085171">ഉപകരണങ്ങളിലുടനീളം സമന്വയിപ്പിക്കലും വ്യക്തിപരമാക്കലും നടത്തുക.</translation>
 <translation id="2100273922101894616">സ്വയമേവയുള്ള സൈൻ ഇൻ</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">നിങ്ങൾക്ക് ഇത് സൗകര്യപ്രദമായി വായിക്കാൻ കഴിയുന്നതുവരെ സ്ലൈഡർ വലിക്കുക. ഒരു ഖണ്ഡികയിൽ ഇരട്ട-ടാപ്പുചെയ്‌തതിനുശേഷം ടെക്‌സ്റ്റിന് ഈ വലുപ്പമെങ്കിലും ഉണ്ടായിരിക്കണം.</translation>
 <translation id="2323763861024343754">സൈറ്റ് സ്‌റ്റോറേജ്</translation>
 <translation id="2328985652426384049">സൈൻ ഇൻ ചെയ്യാനാകില്ല</translation>
-<translation id="2342981853652716282">നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകളും  ‌പാസ്‌വേഡുകളും മറ്റും എല്ലാ ഉപകരണങ്ങളിലും ലഭ്യമാക്കുന്നതിന് Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="2349710944427398404">അക്കൗണ്ടുകളും ബുക്ക്‌മാർക്കുകളും സംരക്ഷിച്ച ക്രമീകരണവും ഉൾപ്പെടെ Chrome ഉപയോഗിക്കുന്ന മൊത്തം വിവരങ്ങൾ</translation>
 <translation id="2351097562818989364">നിങ്ങളുടെ വിവർത്തന ക്രമീകരണം റീസെറ്റ് ചെയ്‌തു.</translation>
 <translation id="2353636109065292463">നിങ്ങളുടെ ഇന്‍റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുന്നു</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">ചില സൈറ്റുകളിൽ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു</translation>
 <translation id="3137521801621304719">അദൃശ്യ മോഡ് വിടുക</translation>
 <translation id="3143515551205905069">സമന്വയം റദ്ദാക്കുക</translation>
-<translation id="3148434565183091099">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്‌മാർക്കുകൾ ലഭിക്കാൻ, Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="3157842584138209013">'കൂടുതൽ ഓപ്ഷനുകൾ' ബട്ടണിൽ നിങ്ങൾ എത്ര ഡാറ്റ ലാഭിച്ചെന്ന് കാണുക</translation>
 <translation id="3166827708714933426">ടാബ്, വിൻഡോ കുറുക്കുവഴികൾ</translation>
 <translation id="3181954750937456830">സുരക്ഷിത ബ്രൗസിംഗ് (അപകടകരമായ സൈറ്റുകളിൽ നിന്ന് നിങ്ങളെയും ഉപകരണത്തെയും പരിരക്ഷിക്കുന്നു)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">സൂക്ഷിച്ചിരിക്കുന്ന ക്രെഡൻഷ്യലുകൾ ഉപയോഗിച്ച് വെബ്‌സൈറ്റുകളിലേക്ക് സ്വയമേവ സൈൻ ഇൻ ചെയ്യുക. ഫീച്ചർ ഓഫായിരിക്കുമ്പോൾ, ഒരു വെബ്‌സൈറ്റിലേക്ക് സൈൻ ഇൻ ചെയ്യുന്നതിനുമുമ്പ് പരിശോധിച്ചുറപ്പിക്കാൻ ഓരോ തവണയും നിങ്ങളോടാവശ്യപ്പെടും.</translation>
 <translation id="3658159451045945436">പുനഃസജ്ജീകരിക്കുന്നത്, സന്ദർശിച്ച സൈറ്റുകളുടെ ലിസ്‌റ്റ് അടക്കമുള്ള ഡാറ്റ ലാഭിക്കൽ ചരിത്രത്തെ മായ്ക്കുന്നു.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> ടാബുകൾ ഗ്രൂപ്പ് ചെയ്യുക.</translation>
-<translation id="3672452749423051839">നാവിഗേഷൻ പിശക് നിർദ്ദേശങ്ങൾ</translation>
 <translation id="3692944402865947621">സ്റ്റോറേജ് ലൊക്കേഷൻ കണ്ടെത്താനാകാത്തതിനാൽ <ph name="FILE_NAME" /> ഡൗൺലോഡ് ചെയ്യുന്നത് പരാജയപ്പെട്ടു.</translation>
 <translation id="3714981814255182093">കണ്ടെത്തൽ ബാർ തുറക്കുക</translation>
 <translation id="3716182511346448902">ഈ പേജ് ഒരുപാട് മെമ്മറി ഉപയോഗിക്കുന്നു, അതിനാൽ Chrome ഇത് താൽക്കാലികമായി അവസാനിപ്പിച്ചു.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">ശീർഷകം</translation>
 <translation id="4008040567710660924">ഒരു പ്രത്യേക സൈറ്റിനായി കുക്കികൾ അനുവദിക്കുക.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# മണിക്കൂർ}other{# മണിക്കൂർ}}</translation>
-<translation id="4042870126885713738">ഒരു വെബ് വിലാസം വ്യക്തമാക്കാത്തപ്പോഴോ ഒരു കണക്ഷൻ സ്ഥാപിക്കാൻ കഴിയാത്തപ്പോഴോ നിർദ്ദേശങ്ങൾ ദൃശ്യമാക്കുക</translation>
 <translation id="4046123991198612571">അടുത്ത ട്രാക്ക്</translation>
 <translation id="4048707525896921369">പേജ് വിട്ടുപോകാതെ തന്നെ വെബ്‌സൈറ്റുകളിലെ വിഷയങ്ങളെക്കുറിച്ച് അറിയുക. തിരയാൻ ടാപ്പ് ചെയ്യുക എന്നത്  പദവും അതിന്റെ സന്ദർഭവും Google തിരയലിലേക്ക് അയച്ച്, നിർവചനങ്ങളും ചിത്രങ്ങളും തിരയൽ ഫലങ്ങളും മറ്റ് വിശദാംശങ്ങളും ലഭ്യമാക്കുന്നു.
 
@@ -438,7 +430,6 @@
     - നിങ്ങളുടെ നടപ്പിൻ്റെ ശൈലി പോലെയുള്ള ചലനങ്ങൾ
 
     ആക്‌സസ് അനുവദിക്കുന്നതിന് മുമ്പ് നിങ്ങൾ ഈ സൈറ്റിനെ വിശ്വസിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക.</translation>
-<translation id="424864128008805179">Chrome-ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യണോ?</translation>
 <translation id="4256782883801055595">ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ</translation>
 <translation id="4259722352634471385">നാവിഗേഷൻ തടഞ്ഞിരിക്കുന്നു: <ph name="URL" /></translation>
 <translation id="4269820728363426813">ലിങ്ക് വിലാസം പകർത്തുക</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">ഫോൺ</translation>
 <translation id="4384468725000734951">തിരയാൻ Sogou ഉപയോഗിക്കുന്നു</translation>
 <translation id="4404568932422911380">ബുക്ക്‌മാർക്കുകളൊന്നുമില്ല</translation>
-<translation id="4409723563706114196">പേജ് പ്രവചനങ്ങൾ ഉപയോഗിക്കുക</translation>
 <translation id="4411535500181276704">ലൈറ്റ് മോഡ്</translation>
 <translation id="4415276339145661267">നിങ്ങളുടെ Google അക്കൗണ്ട് മാനേജ് ചെയ്യുക</translation>
 <translation id="4432792777822557199">ഇനിമുതൽ <ph name="SOURCE_LANGUAGE" /> ഭാഷയിലുള്ള പേജുകൾ <ph name="TARGET_LANGUAGE" /> ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യപ്പെടും</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">നിങ്ങളുടെ VR സെൻസറുകൾ ആക്‌സസ് ചെയ്യാൻ ഈ സൈറ്റിനെ അനുവദിക്കണോ?</translation>
 <translation id="5210286577605176222">മുമ്പത്തെ ടാബിലേക്ക് പോകുക</translation>
 <translation id="5210365745912300556">ടാബ് അടയ്ക്കൂക</translation>
-<translation id="5222676887888702881">പുറത്തുകടക്കുക</translation>
 <translation id="5224771365102442243">വീഡിയോ ഉണ്ട്</translation>
 <translation id="5233638681132016545">പുതിയ ടാബ്</translation>
 <translation id="526421993248218238">ഈ പേജ് ലോഡ് ചെയ്യാനായില്ല</translation>
 <translation id="5271967389191913893">ഡൗൺലോഡ് ചെയ്യേണ്ട ഉള്ളടക്കം ഉപകരണത്തിന് തുറക്കാനാവില്ല.</translation>
 <translation id="528192093759286357">പൂർണ്ണ സ്‌ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ, മുകളിൽ നിന്ന് വലിച്ചിട്ട് ബാക്ക് ബട്ടണിൽ സ്‌പർശിക്കുക.</translation>
-<translation id="5284584623296338184">ബുക്ക്‌മാർക്കുകൾ, ചരിത്രം, പാസ്‌വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവയിലുള്ള മാറ്റങ്ങൾ ഇനി നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കില്ല. എന്നിരുന്നാലും, നിങ്ങളുടെ നിലവിലെ ഡാറ്റ Google അക്കൗണ്ടിൽ തുടർന്നും സൂക്ഷിക്കും.</translation>
 <translation id="5292796745632149097">ഇതിലേക്ക് അയയ്ക്കുക</translation>
 <translation id="5300589172476337783">കാണിക്കുക</translation>
 <translation id="5301954838959518834">മനസ്സിലായി</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">ആൾമാറാട്ട ടാബുകൾ</translation>
 <translation id="5763514718066511291">ഈ ആപ്പിനായുള്ള URL പകർത്താൻ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="5765780083710877561">വിവരണം:</translation>
-<translation id="5777170031995031090">തിരയലും പരസ്യങ്ങളും മറ്റ് Google സേവനങ്ങളും വ്യക്തിപരമാക്കാൻ, Google നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം ഉപയോഗിക്കുന്ന രീതി നിയന്ത്രിക്കുക.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> / <ph name="SPACE_AVAILABLE" /> ഉപയോഗിക്കുന്നു</translation>
 <translation id="5797070761912323120">തിരയലും പരസ്യവും മറ്റ് Google സേവനങ്ങളും വ്യക്തിപരമാക്കാൻ Google നിങ്ങളുടെ ചരിത്രം ഉപയോഗിച്ചേക്കാം</translation>
 <translation id="5804241973901381774">അനുമതികൾ</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">പേര് വളരെ വലുതാണ്</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# ചിത്രം}other{# ചിത്രങ്ങൾ}}</translation>
 <translation id="6447842834002726250">കുക്കികള്‍</translation>
-<translation id="6448273550210938826">തിരയലും URL നിർദ്ദേശങ്ങളും</translation>
 <translation id="6461962085415701688">ഫയൽ തുറക്കാൻ കഴിയില്ല</translation>
 <translation id="6464977750820128603">നിങ്ങൾ Chrome- ൽ സന്ദർശിക്കുന്ന സൈറ്റുകൾ കാണാനും അവയ്ക്ക് ടൈമറുകൾ സജ്ജീകരിക്കാനുമാവും.\n\nനിങ്ങൾ ടൈമറുകൾ സജ്ജീകരിക്കുന്ന സൈറ്റുകളെക്കുറിച്ചും നിങ്ങൾ എത്ര സമയം അവ സന്ദർശിക്കുന്നു എന്നതിനെക്കുറിച്ചും Google ന് വിവരങ്ങൾ ലഭിക്കുന്നു. ഡിജിറ്റൽ ആരോഗ്യം മെച്ചപ്പെടുത്താൻ ഈ വിവരം ഉപയോഗിക്കുന്നു.</translation>
 <translation id="6475951671322991020">വീഡിയോ ഡൗൺലോഡ് ചെയ്യുക</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">ഉപകരണങ്ങൾ സ്‌കാൻ ചെയ്യുന്നതിന് Chrome-ന് ലൊക്കേഷൻ ആക്‌സസ് ആവശ്യമാണ്. <ph name="BEGIN_LINK" />അനുമതികൾ അപ്‌ഡേറ്റ് ചെയ്യുക<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">പാസ്‌വേഡ്</translation>
 <translation id="6659594942844771486">ടാബ്</translation>
-<translation id="666268767214822976">നിങ്ങൾ വിലാസ ബാറിൽ ടൈപ്പുചെയ്യുന്നതിനനുസരിച്ച് ബന്ധപ്പെട്ട അന്വേഷണങ്ങളും ജനപ്രിയ വെബ്‌സൈറ്റുകളും കാണിക്കുന്നതിന് ഒരു പ്രവചന സേവനം ഉപയോഗിക്കുക</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" />-ൽ തുറക്കുക</translation>
 <translation id="666981079809192359">Chrome സ്വകാര്യതാ അറിയിപ്പ്</translation>
 <translation id="6697492270171225480">ഒരു പേജ് കണ്ടെത്താനാകുന്നില്ലെങ്കിൽ, സമാന പേജുകൾക്കായുള്ള നിർദ്ദേശങ്ങൾ കാണിക്കുക</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation>
 <translation id="8266862848225348053">ഡൗൺലോഡ് ലൊക്കേഷൻ</translation>
 <translation id="8274165955039650276">ഡൗൺലോഡുകൾ കാണുക</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുന്നു</translation>
 <translation id="8284326494547611709">അടിക്കുറിപ്പുകൾ</translation>
 <translation id="8300705686683892304">ആപ്പ് മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="8310344678080805313">സ്റ്റാൻഡേർഡ് ടാബുകൾ</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">തീർച്ചപ്പെടുത്താത്തവ</translation>
 <translation id="8970887620466824814">എന്തോ കുഴപ്പമുണ്ടായി.</translation>
 <translation id="8972098258593396643">ഡിഫോൾട്ട് ഫോൾഡറിലേക്ക് ഡൗൺലോഡ് ചെയ്യണോ?</translation>
-<translation id="8981454092730389528">Google പ്രവർത്തന നിയന്ത്രണങ്ങൾ</translation>
 <translation id="8986494364107987395">Google ലേക്ക് സ്വപ്രേരിതമായി ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്‍ട്ടുകളും അയയ്ക്കുക</translation>
 <translation id="8993760627012879038">അദൃശ്യ മോഡിൽ പുതിയൊരു വിൻഡോ തുറക്കുക</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> മാനേജ് ചെയ്യുന്ന ഒരു അക്കൗണ്ട് ഉപയോഗിച്ച് നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുകയും ഇതിന്റെ അഡ്‌മിന് നിങ്ങളുടെ Chrome വിവരങ്ങളിന്മേൽ നിയന്ത്രണം നൽകുകയും ചെയ്യുന്നു. വിവരങ്ങളെ ഈ അക്കൗണ്ടുമായി ശാശ്വതമായി ബന്ധിപ്പിക്കും. Chrome-ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യുന്നത് ഈ ഉപകരണത്തിൽ നിന്ന് നിങ്ങളുടെ വിവരങ്ങളെ ഇല്ലാതാക്കുമെങ്കിലും, Google അക്കൗണ്ടിൽ തുടർന്നും അവയെ സൂക്ഷിക്കുന്നതാണ്.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
index 7846fad..9913d1e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">इतिहास, कुकी, साइट डेटा, कॅशे साफ करा…</translation>
 <translation id="129553762522093515">अलीकडे बंद केलेले</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> वरून पाठवले</translation>
-<translation id="1326317727527857210">आपल्या इतर डिव्हाइसेसवरील तुमचे टॅब प्राप्त करण्यासाठी, Chrome मध्ये साइन इन करा.</translation>
 <translation id="1331212799747679585">Chrome अपडेट होऊ शकत नाही. आणखी पर्याय</translation>
 <translation id="1332501820983677155">Google Chrome वैशिष्ट्य शॉर्टकट</translation>
 <translation id="1360432990279830238">साइन आउट करून सिंक बंद करायचे आहे का?</translation>
-<translation id="136248372334525878">जलद लोडिंग आणि ऑफलाइन वाचनासाठी पेज प्रीलोड करा</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> साइट जोडली</translation>
 <translation id="1373696734384179344">निवडलेला आशय डाउनलोड करण्यासाठी अपुरी मेमरी.</translation>
 <translation id="1376578503827013741">गणना करत आहे...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">निवडलेला टॅब</translation>
 <translation id="194341124344773587">Chrome साठी परवानगी <ph name="BEGIN_LINK" />Android सेटिंग्ज<ph name="END_LINK" /> मध्‍ये चालू करा.</translation>
 <translation id="1943432128510653496">पासवर्ड सेव्ह करा</translation>
-<translation id="1946005195648379376">शोध आणि इतर Google सेवा पर्सनलाइझ करण्यासाठी Google तुमच्या ब्राउझिंग इतिहासाचा कसा वापर करू शकते ते नियंत्रित करा.</translation>
 <translation id="1952172573699511566">वेबसाइट शक्य असताना तुमच्या प्राधान्य असलेल्‍या भाषेमध्ये मजकूर दाखवेल.</translation>
 <translation id="1960290143419248813">Android च्या या आवृत्तीसाठी Chrome अपडेटना सपोर्ट नाही</translation>
 <translation id="1966710179511230534">कृपया साइन इन तपशील अपडेट करा.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">शोधण्यासाठी टॅप करा</translation>
 <translation id="2079545284768500474">पहिल्यासारखे करा</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> पैकी <ph name="RESULT_NUMBER" /> परिणाम</translation>
-<translation id="2086652334978798447">Google ने सुचविलेली पर्सनलाइझ आशय मिळविण्यासाठी, Chrome मध्ये साइन इन करा.</translation>
 <translation id="2091887806945687916">ध्वनी</translation>
 <translation id="2096012225669085171">डिव्हाइसवर सिंक आणि पर्सनलाइझ करा</translation>
 <translation id="2100273922101894616">ऑटो साइन इन करा</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">तुम्ही हे व्यवस्थित वाचू शकण्यापार्यंत स्लायडर ड्रॅग करा. परिच्छेदावर डबल-टॅपिंग केल्यानंतर मजकूर कमीत कमी यापेक्षा मोठा दिसावा.</translation>
 <translation id="2323763861024343754">साइट स्टोरेज</translation>
 <translation id="2328985652426384049">साइन इन करू शकत नाही</translation>
-<translation id="2342981853652716282">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड आणि अधिक मिळवण्यासाठी Chromeमध्ये साइन इन करा.</translation>
 <translation id="2349710944427398404">खाती, बुकमार्क आणि सेव्ह केलेल्या सेटिंग्जसह, Chrome ने वापरलेला एकूण डेटा</translation>
 <translation id="2351097562818989364">आपल्या भाषांतर सेटिंग्ज रीसेट करण्यात आल्या आहेत.</translation>
 <translation id="2353636109065292463">तुमचे इंटरनेट कनेक्शन तपासत आहे</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">काही साइटवर ब्लॉक केले आहे</translation>
 <translation id="3137521801621304719">गुप्त मोड सोडा</translation>
 <translation id="3143515551205905069">सिंक रद्द करा</translation>
-<translation id="3148434565183091099">आपल्या सर्व डिव्हाइसेसवर तुमचे बुकमार्क प्राप्त करण्यासाठी, Chrome मध्ये साइन इन करा.</translation>
 <translation id="3157842584138209013">आणिखी पर्याय बटणावरून तुम्ही किती डेटा सेव्ह केला आहे ते पहा</translation>
 <translation id="3166827708714933426">टॅब आणि विंडो शॉर्टकट</translation>
 <translation id="3181954750937456830">सुरक्षित ब्राउझिंग (तुम्हाला आणि तुमच्या डिव्हाइसना धोकादायक साइटपासून सुरक्षित ठेवते)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">स्टोअर क्रेडेंशियल वापरून वेबसाइटवर आपोआप साइन इन करा. वैशिष्ट्य बंद असते तेव्हा, वेबसाइटवर साइन इन करण्यापूर्वी दरवेळी तुम्हाला पडताळणीसाठी विचारले जाईल.</translation>
 <translation id="3658159451045945436">रीसेट केल्याने तुमचा डेटा सेव्हिंग इतिहास, भेट दिलेल्या साइटच्या सूचीसह, मिटवला जातो.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> टॅबची गटामध्ये विभागणी करा.</translation>
-<translation id="3672452749423051839">नेव्हिगेशन एरर सूचना</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> download failed because storage location is not reachable.</translation>
 <translation id="3714981814255182093">शोध बार उघडा</translation>
 <translation id="3716182511346448902">हे पेज खूपच जास्त मेमरी वापरत असल्यामुळे Chrome ने ते थांबवून ठेवलेले आहे.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">शीर्षक</translation>
 <translation id="4008040567710660924">विशिष्ट साइटसाठी कुकीना अनुमती द्या.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# तास}other{# तास}}</translation>
-<translation id="4042870126885713738">वेब पत्ता निराकरण करत नाही किंवा कनेक्शन केले जाऊ शकत नाही तेव्हा सूचना दर्शवा</translation>
 <translation id="4046123991198612571">पुढील ट्रॅक</translation>
 <translation id="4048707525896921369">पेज न सोडता वेबसाइटवरील विषयांबद्दल जाणून घ्या. शोधण्यासाठी टॅप करा शब्द आणि त्याच्या आसपासचा संदर्भ Google शोध ला पाठवते आणि व्याख्या, चित्रे, शोध परिणाम आणि इतर तपशील मिळवते.
 
@@ -438,7 +430,6 @@
     - तुमच्या हालचाली, जसे की, तुम्ही कसे चालता
 
     ॲक्सेसची अनुमती देण्यापूर्वी तुम्ही या साइवर विश्वास ठेवता याची खात्री करा.</translation>
-<translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation>
 <translation id="4256782883801055595">मुक्त स्रोत परवाने</translation>
 <translation id="4259722352634471385">नेव्हिगेशन अवरोधित केले आहे: <ph name="URL" /></translation>
 <translation id="4269820728363426813">दुव्याचा पत्ता कॉपी करा</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">फोन</translation>
 <translation id="4384468725000734951">शोध करण्‍यासाठी Sogou वापरत आहे</translation>
 <translation id="4404568932422911380">कोणतेही बुकमार्क नाहीत</translation>
-<translation id="4409723563706114196">पेज पूर्वानुमान वापरा</translation>
 <translation id="4411535500181276704">लाइट मोड</translation>
 <translation id="4415276339145661267">तुमचे Google खाते व्यवस्थापित करा</translation>
 <translation id="4432792777822557199">आतापासून पेज <ph name="SOURCE_LANGUAGE" />मधून <ph name="TARGET_LANGUAGE" />मध्ये भाषांतरित केली जातील</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">या साइटला तुमचे VR सेन्सर ॲक्सेस करण्याची अनुमती द्यायची का?</translation>
 <translation id="5210286577605176222">मागील टॅबवर जा</translation>
 <translation id="5210365745912300556">टॅब बंद करा</translation>
-<translation id="5222676887888702881">साइन आउट करा</translation>
 <translation id="5224771365102442243">व्हिडिओसह</translation>
 <translation id="5233638681132016545">नवीन टॅब</translation>
 <translation id="526421993248218238">हे पेज लोड करू शकत नाही</translation>
 <translation id="5271967389191913893">डाउनलोड केली जाण्यासाठी डिव्हाइस आशय उघडू शकत नाही.</translation>
 <translation id="528192093759286357">शीर्ष पासून ड्रॅग करा आणि फुलस्क्रीन मधून बाहेर पडण्यासाठी परत बटणास स्पर्श करा.</translation>
-<translation id="5284584623296338184">तुमचे बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज मधील बदल यापुढे आपल्या Google खात्यात संकालित केले जाणार नाहीत. तथापि, तुमचा विद्यमान डेटा आपल्या Google खात्यात संचयित केलेला असेल.</translation>
 <translation id="5292796745632149097">यांना पाठवा</translation>
 <translation id="5300589172476337783">दर्शवा</translation>
 <translation id="5301954838959518834">ठीक आहे, समजले</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">गुप्त टॅब</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>
 <translation id="5797070761912323120">शोध, जाहिरात आणि इतर Google सेवा पर्सनलाइझ करण्यासाठी Google कदाचित तुमच्या इतिहासाचा वापर करू शकते</translation>
 <translation id="5804241973901381774">परवानग्या</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">नाव खूपच मोठे आहे</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# इमेज}other{# इमेज}}</translation>
 <translation id="6447842834002726250">कुकीज</translation>
-<translation id="6448273550210938826">शोध आणि URL सूचना</translation>
 <translation id="6461962085415701688">फाइल उघडू शकत नाही</translation>
 <translation id="6464977750820128603">तुम्ही Chrome मध्ये भेट दिलेल्या साइट पाहू शकता आणि त्यांच्यासाठी टायमर सेट करू शकता.\n\nGoogle ला तुम्ही ज्या साइटसाठी टायमर सेट केला आणि त्यांना किती वेळ भेट दिली याबद्दलची माहिती मिळते. ही माहिती डिजिटल संतुलन चांगले करण्यास वापरली जाते.</translation>
 <translation id="6475951671322991020">व्हिडिओ डाउनलोड करा</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">डिव्‍हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान अॅक्सेसची आवश्‍यकता असते. <ph name="BEGIN_LINK" />परवानग्या अपडेट करा<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6659594942844771486">टॅब</translation>
-<translation id="666268767214822976">तुम्ही अ‍ॅड्रेस बारमध्ये टाइप करता त्याप्रमाणे संबंधित क्वेरी आणि लोकप्रिय वेबसाइट दर्शविण्यासाठी एक पूर्वानुमान सेवा वापरा</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> मध्ये उघडा</translation>
 <translation id="666981079809192359">Chrome गोपनीयता सूचना</translation>
 <translation id="6697492270171225480">जेव्हा एखादे पेज सापडत नाही तेव्हा त्यासारख्या पेजच्या सूचना दाखवा</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8266862848225348053">डाउनलोड करण्याचे स्थान</translation>
 <translation id="8274165955039650276">डाउनलोड पाहा</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> वर संकालित करीत आहे</translation>
 <translation id="8284326494547611709">मथळे</translation>
 <translation id="8300705686683892304">अॅपद्वारे व्यवस्थापित</translation>
 <translation id="8310344678080805313">मानक टॅब</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">प्रलंबित</translation>
 <translation id="8970887620466824814">काहीतरी चूक झाली.</translation>
 <translation id="8972098258593396643">डीफॉल्ट फोल्डरमध्ये डाउनलोड करायचे?</translation>
-<translation id="8981454092730389528">Google ॲक्टिव्हिटी नियंत्रणे</translation>
 <translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवा</translation>
 <translation id="8993760627012879038">गुप्त मोडमध्ये एक नवीन टॅब उघडा</translation>
 <translation id="8998729206196772491">तुम्ही <ph name="MANAGED_DOMAIN" /> ने व्यवस्थापित केलेल्या खात्यासह साइन इन करत आहात आणि त्याच्या अॅडमिनिस्ट्रेटरला तुमच्या Chrome डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chrome मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</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 4d6d588..344c4db9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Hapuskan sejarah, kuki, data tapak, cache...</translation>
 <translation id="129553762522093515">Ditutup baru-baru ini</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Dihantar daripada <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Log masuk ke Chrome untuk mendapatkan tab daripada peranti anda yang lain.</translation>
 <translation id="1331212799747679585">Chrome tidak dapat dikemas kini. Lagi pilihan</translation>
 <translation id="1332501820983677155">Pintasan ciri Google Chrome</translation>
 <translation id="1360432990279830238">Log keluar dan matikan penyegerakan?</translation>
-<translation id="136248372334525878">Pramuat halaman untuk pemuatan yang lebih cepat dan bacaan luar talian</translation>
 <translation id="1369915414381695676">Tapak <ph name="SITE_NAME" /> telah ditambahkan</translation>
 <translation id="1373696734384179344">Memori tidak mencukupi untuk memuat turun kandungan yang dipilih.</translation>
 <translation id="1376578503827013741">Mengira...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Tab yang Dipilih</translation>
 <translation id="194341124344773587">Hidupkan kebenaran untuk Chrome dalam <ph name="BEGIN_LINK" />Tetapan Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Simpan kata laluan</translation>
-<translation id="1946005195648379376">Kawal cara Google menggunakan sejarah penyemakan imbas anda untuk memperibadikan Carian dan perkhidmatan Google yang lain.</translation>
 <translation id="1952172573699511566">Tapak web akan menunjukkan teks dalam bahasa pilihan anda, jika boleh.</translation>
 <translation id="1960290143419248813">Kemas kini Chrome tidak disokong untuk versi Android ini lagi</translation>
 <translation id="1966710179511230534">Sila kemas kini butiran log masuk anda.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Ketik untuk Mencari</translation>
 <translation id="2079545284768500474">Buat asal</translation>
 <translation id="2082238445998314030">Hasil carian <ph name="RESULT_NUMBER" /> daripada <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Untuk mendapatkan kandungan diperibadikan yang dicadangkan oleh Google, log masuk ke Chrome.</translation>
 <translation id="2091887806945687916">Bunyi</translation>
 <translation id="2096012225669085171">Segerakkan dan peribadikan pada semua peranti</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Seret gelangsar sehingga anda selesa membaca teks ini. Teks harus kelihatan sekurang-kurangnya sebesar ini selepas mengetik dua kali pada perenggan.</translation>
 <translation id="2323763861024343754">Storan tapak</translation>
 <translation id="2328985652426384049">Tidak dapat log masuk</translation>
-<translation id="2342981853652716282">Log masuk ke Chrome untuk mendapatkan penanda halaman, kata laluan anda dan pelbagai lagi pada semua peranti anda.</translation>
 <translation id="2349710944427398404">Jumlah data yang digunakan oleh Chrome, termasuk akaun, penanda halaman dan tetapan yang disimpan</translation>
 <translation id="2351097562818989364">Tetapan terjemahan anda telah ditetapkan semula.</translation>
 <translation id="2353636109065292463">Memeriksa sambungan Internet anda</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Disekat di sesetengah tapak</translation>
 <translation id="3137521801621304719">Tinggalkan mod inkognito</translation>
 <translation id="3143515551205905069">Batalkan penyegerakan</translation>
-<translation id="3148434565183091099">Log masuk ke Chrome untuk mendapatkan penanda halaman pada semua peranti anda.</translation>
 <translation id="3157842584138209013">Lihat jumlah data yang dapat dijimatkan daripada butang Lagi Pilihan</translation>
 <translation id="3166827708714933426">Pintasan tab dan tetingkap</translation>
 <translation id="3181954750937456830">Penyemakan Imbas Selamat (melindungi anda dan peranti anda daripada tapak yang berbahaya)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Log masuk secara automatik ke tapak web menggunakan bukti kelayakan yang disimpan. Apabila ciri ini dimatikan, anda akan diminta memberikan pengesahan setiap kali sebelum log masuk ke tapak web.</translation>
 <translation id="3658159451045945436">Penetapan semula akan memadamkan sejarah penjimatan data anda, termasuk senarai tapak yang dilawati.</translation>
 <translation id="3663367437272849150">Himpunkan <ph name="NUM_SELECTED" /> tab.</translation>
-<translation id="3672452749423051839">Cadangan ralat navigasi</translation>
 <translation id="3692944402865947621">Muat turun <ph name="FILE_NAME" /> gagal kerana lokasi storan tidak dapat dicapai.</translation>
 <translation id="3714981814255182093">Buka Bar Cari</translation>
 <translation id="3716182511346448902">Halaman ini menggunakan terlalu banyak memori, jadi Chrome menjeda halaman ini.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Tajuk</translation>
 <translation id="4008040567710660924">Benarkan kuki untuk tapak tertentu.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# jam}other{# jam}}</translation>
-<translation id="4042870126885713738">Tunjukkan cadangan apabila alamat web tidak selesai atau sambungan tidak boleh dibuat</translation>
 <translation id="4046123991198612571">Lagu seterusnya</translation>
 <translation id="4048707525896921369">Ketahui tentang topik berkenaan tapak web tanpa meninggalkan halaman. Ketik untuk Mencari akan menghantar perkataan dan konteks sekitarnya kepada Carian Google, mengembalikan takrif, gambar, hasil carian dan butiran lain.
 
@@ -438,7 +430,6 @@
     - Pergerakan anda, seperti cara anda berjalan
 
     Pastikan anda mempercayai tapak ini sebelum anda membenarkan akses.</translation>
-<translation id="424864128008805179">Log keluar daripada Chrome?</translation>
 <translation id="4256782883801055595">Lesen sumber terbuka</translation>
 <translation id="4259722352634471385">Navigasi disekat: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Salin alamat pautan</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Menggunakan Sogou untuk carian</translation>
 <translation id="4404568932422911380">Tiada penanda halaman</translation>
-<translation id="4409723563706114196">Gunakan ramalan halaman</translation>
 <translation id="4411535500181276704">Mod Ringkas</translation>
 <translation id="4415276339145661267">Urus Akaun Google anda</translation>
 <translation id="4432792777822557199">Halaman dalam <ph name="SOURCE_LANGUAGE" /> akan diterjemahkan kepada <ph name="TARGET_LANGUAGE" /> bermula dari sekarang</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Benarkan tapak ini mengakses penderia VR anda?</translation>
 <translation id="5210286577605176222">Lompat ke halaman sebelumnya</translation>
 <translation id="5210365745912300556">Tutup tab</translation>
-<translation id="5222676887888702881">Log keluar</translation>
 <translation id="5224771365102442243">Dengan video</translation>
 <translation id="5233638681132016545">Tab baharu</translation>
 <translation id="526421993248218238">Tidak dapat memuatkan halaman ini</translation>
 <translation id="5271967389191913893">Peranti tidak dapat membuka kandungan yang hendak dimuat turun.</translation>
 <translation id="528192093759286357">Seret dari atas dan sentuh butang kembali untuk keluar daripada skrin penuh.</translation>
-<translation id="5284584623296338184">Perubahan kepada penanda halaman, sejarah, kata laluan dan tetapan anda yang lain tidak akan disegerakkan ke Akaun Google anda lagi. Walau bagaimanapun, data sedia ada akan kekal disimpan dalam akaun Google anda.</translation>
 <translation id="5292796745632149097">Hantar ke</translation>
 <translation id="5300589172476337783">Paparkan</translation>
 <translation id="5301954838959518834">OK, faham</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Tab inkognito</translation>
 <translation id="5763514718066511291">Ketik untuk menyalin URL apl ini</translation>
 <translation id="5765780083710877561">Huraian:</translation>
-<translation id="5777170031995031090">Kawal cara Google menggunakan sejarah penyemakan imbas anda untuk memperibadikan Carian, iklan dan perkhidmatan Google yang lain.</translation>
 <translation id="5793665092639000975">Menggunakan <ph name="SPACE_USED" /> daripada <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google boleh menggunakan sejarah anda untuk memperibadikan Carian, iklan dan perkhidmatan Google yang lain</translation>
 <translation id="5804241973901381774">Kebenaran</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nama terlalu panjang</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Imej}other{# Imej}}</translation>
 <translation id="6447842834002726250">Kuki</translation>
-<translation id="6448273550210938826">Cadangan carian dan URL</translation>
 <translation id="6461962085415701688">Tidak dapat membuka fail</translation>
 <translation id="6464977750820128603">Anda dapat melihat tapak yang anda lawati dalam Chrome dan menetapkan pemasa untuk tapak tersebut.\n\nGoogle menerima maklumat tentang tapak yang pemasanya telah anda tetapkan dan tempoh anda berada di tapak itu. Maklumat ini digunakan untuk menambah baik Kesejahteraan Digital.</translation>
 <translation id="6475951671322991020">Muat turun video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome memerlukan akses lokasi untuk mengimbas peranti. <ph name="BEGIN_LINK" />Kemaskinikan kebenaran<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Kata laluan</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Gunakan khidmat ramalan untuk menunjukkan pertanyaan berkaitan dan tapak web popular semasa anda menaip dalam bar alamat</translation>
 <translation id="666731172850799929">Buka dalam <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Notis Privasi Chrome</translation>
 <translation id="6697492270171225480">Tunjukkan cadangan untuk halaman yang serupa apabila halaman tidak ditemui</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Padam</translation>
 <translation id="8266862848225348053">Lokasi muat turun</translation>
 <translation id="8274165955039650276">Lihat muat turun</translation>
-<translation id="8283853025636624853">Menyegerakkan ke <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Kapsyen</translation>
 <translation id="8300705686683892304">Diurus oleh apl</translation>
 <translation id="8310344678080805313">Tab standard</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">belum selesai</translation>
 <translation id="8970887620466824814">Kesilapan telah berlaku.</translation>
 <translation id="8972098258593396643">Muat turun ke folder lalai?</translation>
-<translation id="8981454092730389528">Kawalan Aktiviti Google</translation>
 <translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation>
 <translation id="8993760627012879038">Buka tetingkap baharu dalam mod Inkognito</translation>
 <translation id="8998729206196772491">Anda log masuk dengan akaun yang diurus oleh <ph name="MANAGED_DOMAIN" /> dan memberikan kawalan terhadap data Chrome anda kepada pentadbirnya. Data anda akan terikat secara kekal kepada akaun ini. Tindakan log keluar daripada Chrome akan memadamkan data anda daripada peranti ini, tetapi data itu akan kekal disimpan dalam Akaun Google anda.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
index 6508fd30..0f9d56c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Geschiedenis, cookies, sitegegevens, cachegeheugen wissen</translation>
 <translation id="129553762522093515">Recent gesloten</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: verzonden vanaf <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Log in bij Chrome om de tabbladen van je andere apparaten te bekijken.</translation>
 <translation id="1331212799747679585">Chrome kan niet updaten. Meer opties</translation>
 <translation id="1332501820983677155">Functiesneltoetsen in Google Chrome</translation>
 <translation id="1360432990279830238">Uitloggen en synchroniseren uitschakelen?</translation>
-<translation id="136248372334525878">Pagina's vooraf laden voor sneller laden en offline lezen</translation>
 <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> toegevoegd</translation>
 <translation id="1373696734384179344">Onvoldoende geheugen om de geselecteerde content te downloaden.</translation>
 <translation id="1376578503827013741">Berekenen…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Geselecteerd tabblad</translation>
 <translation id="194341124344773587">Geef Chrome toestemming via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Wachtwoorden opslaan</translation>
-<translation id="1946005195648379376">Beheer hoe Google je browsegeschiedenis gebruikt om Google Zoeken en andere Google-services te personaliseren.</translation>
 <translation id="1952172573699511566">Websites worden indien mogelijk weergegeven in je voorkeurstaal.</translation>
 <translation id="1960290143419248813">Updates van Chrome worden niet meer ondersteund voor deze versie van Android</translation>
 <translation id="1966710179511230534">Update je inloggegevens.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tikken om te zoeken</translation>
 <translation id="2079545284768500474">Ongedaan maken</translation>
 <translation id="2082238445998314030">Resultaat <ph name="RESULT_NUMBER" /> van <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Log in bij Chrome om suggesties met gepersonaliseerde content van Google te ontvangen.</translation>
 <translation id="2091887806945687916">Geluid</translation>
 <translation id="2096012225669085171">Synchronisatie en personalisatie op meerdere apparaten</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Sleep de schuifknop tot je deze tekst prettig kunt lezen. De tekst moet minimaal deze grootte hebben nadat je op een alinea hebt gedubbeltikt.</translation>
 <translation id="2323763861024343754">Site-opslag</translation>
 <translation id="2328985652426384049">Kan niet inloggen</translation>
-<translation id="2342981853652716282">Log in bij Chrome om je bladwijzers, wachtwoorden en meer op al je apparaten te gebruiken.</translation>
 <translation id="2349710944427398404">Totale gegevens gebruikt door Chrome, inclusief accounts, bladwijzers en opgeslagen instellingen</translation>
 <translation id="2351097562818989364">Je vertaalinstellingen zijn opnieuw ingesteld.</translation>
 <translation id="2353636109065292463">Je internetverbinding controleren…</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Geblokkeerd op bepaalde sites</translation>
 <translation id="3137521801621304719">Incognitomodus verlaten</translation>
 <translation id="3143515551205905069">Synchronisatie annuleren</translation>
-<translation id="3148434565183091099">Log in bij Chrome om al je bladwijzers op al je apparaten te bekijken.</translation>
 <translation id="3157842584138209013">Via de knop 'Meer opties' kun je zien hoeveel data je hebt bespaard</translation>
 <translation id="3166827708714933426">Sneltoetsen voor tabbladen en vensters</translation>
 <translation id="3181954750937456830">Safe Browsing (hiermee worden jij en je apparaat beschermd tegen gevaarlijke sites)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatisch inloggen bij websites met de opgeslagen inloggegevens. Wanneer de functie is uitgeschakeld, word je elke keer om verificatie gevraagd voordat je wordt ingelogd bij een website.</translation>
 <translation id="3658159451045945436">Als je reset, wordt je databesparingsgeschiedenis gewist, waaronder de lijst met bezochte sites.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> tabbladen groeperen.</translation>
-<translation id="3672452749423051839">Suggesties bij navigatiefouten</translation>
 <translation id="3692944402865947621">Downloaden van <ph name="FILE_NAME" /> mislukt omdat de opslaglocatie niet bereikbaar is.</translation>
 <translation id="3714981814255182093">De zoekbalk openen</translation>
 <translation id="3716182511346448902">Omdat deze pagina te veel geheugen gebruikt, heeft Chrome de pagina onderbroken.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titel</translation>
 <translation id="4008040567710660924">Cookies voor een specifieke site toestaan.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# uur}other{# uur}}</translation>
-<translation id="4042870126885713738">Suggesties weergeven wanneer een webadres onjuist is of er geen verbinding kan worden gemaakt</translation>
 <translation id="4046123991198612571">Volgend nummer</translation>
 <translation id="4048707525896921369">Meer informatie over onderwerpen op websites zonder dat je de pagina hoeft te verlaten. 'Tikken om te zoeken' stuurt een woord en contextuele informatie voor het woord naar Google Zoeken, waarna er definities, afbeeldingen, zoekresultaten en andere gegevens worden weergegeven.
 
@@ -438,7 +430,6 @@
     - Je bewegingen, zoals hoe je loopt
 
     Controleer of je de site vertrouwt voordat je deze toegang geeft.</translation>
-<translation id="424864128008805179">Uitloggen bij Chrome?</translation>
 <translation id="4256782883801055595">Open-sourcelicenties</translation>
 <translation id="4259722352634471385">Navigatie is geblokkeerd: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Linkadres kopiëren</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefoon</translation>
 <translation id="4384468725000734951">Sogou wordt gebruikt om te zoeken</translation>
 <translation id="4404568932422911380">Geen bladwijzers</translation>
-<translation id="4409723563706114196">Paginavoorspellingen gebruiken</translation>
 <translation id="4411535500181276704">Lite-versie</translation>
 <translation id="4415276339145661267">Je Google-account beheren</translation>
 <translation id="4432792777822557199">Pagina's in het <ph name="SOURCE_LANGUAGE" /> worden vanaf nu vertaald naar het <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Deze site toegang geven tot je VR-sensoren?</translation>
 <translation id="5210286577605176222">Naar het vorige tabblad gaan</translation>
 <translation id="5210365745912300556">Tabblad sluiten</translation>
-<translation id="5222676887888702881">Uitloggen</translation>
 <translation id="5224771365102442243">Met video</translation>
 <translation id="5233638681132016545">Nieuw tabblad</translation>
 <translation id="526421993248218238">Kan deze pagina niet laden</translation>
 <translation id="5271967389191913893">Het apparaat kan de content niet openen die moet worden gedownload.</translation>
 <translation id="528192093759286357">Sleep vanaf de bovenkant en tik op de knop Terug om het volledige scherm te sluiten.</translation>
-<translation id="5284584623296338184">Wijzigingen in je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden niet meer gesynchroniseerd met je Google-account. Je bestaande gegevens blijven echter opgeslagen in je Google-account.</translation>
 <translation id="5292796745632149097">Verzenden naar</translation>
 <translation id="5300589172476337783">Weergeven</translation>
 <translation id="5301954838959518834">OK, begrepen</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Incognitotabbladen</translation>
 <translation id="5763514718066511291">Tik om de URL voor deze app te kopiëren</translation>
 <translation id="5765780083710877561">Beschrijving:</translation>
-<translation id="5777170031995031090">Beheer hoe Google je browsegeschiedenis gebruikt om Google Zoeken, advertenties en andere Google-services te personaliseren.</translation>
 <translation id="5793665092639000975">Er wordt <ph name="SPACE_USED" /> van de <ph name="SPACE_AVAILABLE" /> gebruikt</translation>
 <translation id="5797070761912323120">Google kan je geschiedenis gebruiken om Google Zoeken, advertenties en andere Google-services te personaliseren</translation>
 <translation id="5804241973901381774">Rechten</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Naam is te lang</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# afbeelding}other{# afbeeldingen}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Zoek- en URL-suggesties</translation>
 <translation id="6461962085415701688">Kan bestand niet openen</translation>
 <translation id="6464977750820128603">Je kunt sites bekijken die je in Chrome bezoekt en timers hiervoor instellen.\n\nGoogle ontvangt informatie over de sites waarvoor je timers instelt en hoelang je ze bezoekt. Deze informatie wordt gebruikt om Digitaal welzijn te verbeteren.</translation>
 <translation id="6475951671322991020">Video downloaden</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome heeft locatietoegang nodig om naar apparaten te zoeken. <ph name="BEGIN_LINK" />Rechten updaten<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Wachtwoord</translation>
 <translation id="6659594942844771486">Tabblad</translation>
-<translation id="666268767214822976">Een voorspellingsservice gebruiken om gerelateerde zoekopdrachten en populaire websites te tonen terwijl je in de adresbalk typt</translation>
 <translation id="666731172850799929">Openen in <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Privacybeleid van Chrome</translation>
 <translation id="6697492270171225480">Suggesties voor vergelijkbare pagina's weergeven wanneer een pagina niet wordt gevonden</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Verwijderen</translation>
 <translation id="8266862848225348053">Downloadlocatie</translation>
 <translation id="8274165955039650276">Downloads bekijken</translation>
-<translation id="8283853025636624853">Synchroniseren met <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Ondertiteling</translation>
 <translation id="8300705686683892304">Beheerd door app</translation>
 <translation id="8310344678080805313">Standaardtabbladen</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">in behandeling</translation>
 <translation id="8970887620466824814">Er is iets misgegaan.</translation>
 <translation id="8972098258593396643">Downloaden naar standaardmap?</translation>
-<translation id="8981454092730389528">Google-activiteitsopties</translation>
 <translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation>
 <translation id="8993760627012879038">Een nieuw venster openen in de incognitomodus</translation>
 <translation id="8998729206196772491">Je logt in met een account dat wordt beheerd door <ph name="MANAGED_DOMAIN" /> waarmee je de eigenaar beheer geeft over je Chrome-gegevens. Je gegevens worden permanent gekoppeld aan dit account. Als je uitlogt van Chrome, worden je gegevens van dit apparaat verwijderd. Ze blijven echter opgeslagen in je Google-account.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
index b362da5..1be82c2f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Slett loggoppføringer, informasjonskapsler, nettstedsdata, bufferen …</translation>
 <translation id="129553762522093515">Nylig lukket</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – sendt fra <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">For å få fanene dine fra de andre enhetene du bruker, logg på Chrome.</translation>
 <translation id="1331212799747679585">Kan ikke oppdatere Chrome. Flere alternativer</translation>
 <translation id="1332501820983677155">Hurtigtaster for funksjoner i Google Chrome.</translation>
 <translation id="1360432990279830238">Vil du logge av og slå av synkronisering?</translation>
-<translation id="136248372334525878">Last inn sider på forhånd for raskere innlasting og lesing uten nett</translation>
 <translation id="1369915414381695676">Nettstedet <ph name="SITE_NAME" /> er lagt til</translation>
 <translation id="1373696734384179344">Det er ikke nok ledig minne til å laste ned det valgte innholdet.</translation>
 <translation id="1376578503827013741">Beregner …</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Valgt fane</translation>
 <translation id="194341124344773587">Slå på tillatelsen for Chrome i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Lagring av passord</translation>
-<translation id="1946005195648379376">Kontrollér hvordan Google bruker nettlesingsloggen din for å gi Søk og andre Google-tjenester et personlig preg.</translation>
 <translation id="1952172573699511566">Nettsteder viser tekst på språket du foretrekker, der dette er mulig.</translation>
 <translation id="1960290143419248813">Denne Android-versjonen støtter ikke lenger Chrome-oppdateringer</translation>
 <translation id="1966710179511230534">Oppdater påloggingsinformasjonen din.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Trykk for å søke</translation>
 <translation id="2079545284768500474">Angre</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> av <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">For å få forslag om personlig tilpasset innhold fra Google, logg på Chrome.</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2096012225669085171">Synkronisering og personlig tilpasning på alle enheter</translation>
 <translation id="2100273922101894616">Automatisk pålogging</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Dra glidebryteren til du kan lese dette uten problemer. Når du har dobbelttrykket på et avsnitt, bør teksten være minst like stor som dette.</translation>
 <translation id="2323763861024343754">Nettstedslagring</translation>
 <translation id="2328985652426384049">Kan ikke logge på</translation>
-<translation id="2342981853652716282">Logg på Chrome for å hente blant annet bokmerkene og passordene dine på alle enhetene du bruker.</translation>
 <translation id="2349710944427398404">Total datamengde som brukes av Chrome, deriblant kontoer, bokmerker og lagrede innstillinger</translation>
 <translation id="2351097562818989364">Oversettelsesinnstillingene dine er tilbakestilt.</translation>
 <translation id="2353636109065292463">Sjekker internettilkoblingen din</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokkert på enkelte nettsteder</translation>
 <translation id="3137521801621304719">Avslutt inkognitomodus</translation>
 <translation id="3143515551205905069">Avbryt synkronisering</translation>
-<translation id="3148434565183091099">Logg på Chrome for å få bokmerkene dine på alle enhetene du bruker.</translation>
 <translation id="3157842584138209013">Se hvor mye data du har spart, via Flere alternativer-knappen</translation>
 <translation id="3166827708714933426">Hurtigtaster for vinduer og faner</translation>
 <translation id="3181954750937456830">Safe Browsing (beskytter deg og enheten din mot farlige nettsteder)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Du logges på nettsteder automatisk ved hjelp av lagret legitimasjon. Når funksjonen er slått av, blir du bedt om å oppgi legitimasjonen din hver gang du logger på et nettsted.</translation>
 <translation id="3658159451045945436">Tilbakestilling fjerner historikken for datasparing, inkludert listen over besøkte nettsteder.</translation>
 <translation id="3663367437272849150">Gruppér <ph name="NUM_SELECTED" /> faner.</translation>
-<translation id="3672452749423051839">Forslag ved navigasjonsfeil</translation>
 <translation id="3692944402865947621">Nedlastingen av <ph name="FILE_NAME" /> ble avbrutt fordi lagringsstedet ikke kan nås.</translation>
 <translation id="3714981814255182093">Åpne søkeraden</translation>
 <translation id="3716182511346448902">Denne siden bruker for mye minne, så Chrome har satt den på pause.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Tittel</translation>
 <translation id="4008040567710660924">Tillat informasjonskapsler for et spesifikt nettsted.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# t}other{# t}}</translation>
-<translation id="4042870126885713738">Vis forslag når en nettadresse ikke fungerer eller en tilkobling ikke kan opprettes</translation>
 <translation id="4046123991198612571">Neste spor</translation>
 <translation id="4048707525896921369">Finn ut om emner på nettsteder uten å forlate siden. «Trykk for å søke» sender et ord og omkringliggende kontekst til Google Søk, slik at definisjoner, bilder, søkeresultater og annen informasjon returneres.
 
@@ -438,7 +430,6 @@
     - bevegelsene dine, for eksempel måten du går på
 
     Forsikre deg om at du stoler på dette nettstedet før du gir tilgang.</translation>
-<translation id="424864128008805179">Vil du logge av Chrome?</translation>
 <translation id="4256782883801055595">Lisenser for åpen kildekode</translation>
 <translation id="4259722352634471385">Nettadressen er blokkert: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiér linkadressen</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Bruker Sogou til å søke</translation>
 <translation id="4404568932422911380">Ingen bokmerker</translation>
-<translation id="4409723563706114196">Bruk sideforslag</translation>
 <translation id="4411535500181276704">Forenklet modus</translation>
 <translation id="4415276339145661267">Administrer Google-kontoen din</translation>
 <translation id="4432792777822557199">Fra nå av oversettes sider på <ph name="SOURCE_LANGUAGE" /> til <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Vil du gi dette nettstedet tilgang til VR-sensorene dine?</translation>
 <translation id="5210286577605176222">Gå til den forrige fanen</translation>
 <translation id="5210365745912300556">Lukk fanen</translation>
-<translation id="5222676887888702881">Logg av</translation>
 <translation id="5224771365102442243">Med video</translation>
 <translation id="5233638681132016545">Ny fane</translation>
 <translation id="526421993248218238">Kan ikke laste inn denne siden</translation>
 <translation id="5271967389191913893">Enheten kan ikke åpne innholdet som skal lastes ned.</translation>
 <translation id="528192093759286357">Dra ned fra toppen og trykk på tilbakeknappen for å avslutte fullskjerm.</translation>
-<translation id="5284584623296338184">Endringer i bokmerker, loggoppføringer, passord og andre innstillinger blir ikke synkronisert med Google-kontoen din lenger. Data som allerede er lagret i Google-kontoen din, blir imidlertid ikke fjernet.</translation>
 <translation id="5292796745632149097">Send til</translation>
 <translation id="5300589172476337783">Vis</translation>
 <translation id="5301954838959518834">Greit</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognitofaner</translation>
 <translation id="5763514718066511291">Trykk for å kopiere nettadressen for denne appen</translation>
 <translation id="5765780083710877561">Beskrivelse:</translation>
-<translation id="5777170031995031090">Kontrollér hvordan Google bruker nettlesingsloggen din for å gi Søk, annonser og andre Google-tjenester et personlig preg.</translation>
 <translation id="5793665092639000975">Bruker <ph name="SPACE_USED" /> av <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google kan bruke loggen din for å gi Søk, annonser og andre Google-tjenester et personlig preg</translation>
 <translation id="5804241973901381774">Tillatelser</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Navnet er for langt</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# bilde}other{# bilder}}</translation>
 <translation id="6447842834002726250">Informasjonskapsler</translation>
-<translation id="6448273550210938826">Nettadresse- og søkeforslag</translation>
 <translation id="6461962085415701688">Kan ikke åpne filen</translation>
 <translation id="6464977750820128603">Du kan se nettstedene du besøker i Chrome, og angi tidtakere for dem.\n\nGoogle får informasjon om nettstedene du angir tidtakere for, og hvor lenge du besøker dem. Denne informasjonen brukes til å gjøre Digital balanse bedre.</translation>
 <translation id="6475951671322991020">Last ned videoen</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome trenger posisjonstilgang for å søke etter enheter. <ph name="BEGIN_LINK" />Oppdater tillatelsene<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Passord</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Bruk en forslagstjeneste for å vise relaterte søkeord og populære nettsteder mens du skriver i adressefeltet</translation>
 <translation id="666731172850799929">Åpne i <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Merknad om personvern for Chrome</translation>
 <translation id="6697492270171225480">Viser forslag for lignende sider når en side ikke kan finnes</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Slett</translation>
 <translation id="8266862848225348053">Nedlastingssted</translation>
 <translation id="8274165955039650276">Se nedlastinger</translation>
-<translation id="8283853025636624853">Synkroniserer til <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Teksting</translation>
 <translation id="8300705686683892304">Administreres av app</translation>
 <translation id="8310344678080805313">Standardfaner</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">venter</translation>
 <translation id="8970887620466824814">Noe gikk galt.</translation>
 <translation id="8972098258593396643">Vil du laste ned til standardmappen?</translation>
-<translation id="8981454092730389528">Google Aktivitetslagring</translation>
 <translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation>
 <translation id="8993760627012879038">Åpne en ny fane i inkognitomodus</translation>
 <translation id="8998729206196772491">Du logger på med en konto som administreres av <ph name="MANAGED_DOMAIN" />, og du gir administratoren for dette domenet kontroll over Chrome-dataene dine. Dataene dine blir permanent knyttet til denne kontoen. Når du logger av Chrome, slettes dataene dine fra denne enheten, men de fortsetter å være lagret i Google-kontoen din.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index b4c7062..b0a12774 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Wyczyść historię, pliki cookie, dane witryn, pamięć podręczną…</translation>
 <translation id="129553762522093515">Ostatnio zamknięte</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – wysłane z: <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Aby korzystać z kart ze swoich innych urządzeń, zaloguj się w Chrome.</translation>
 <translation id="1331212799747679585">Nie udało się zaktualizować Chrome. Więcej opcji</translation>
 <translation id="1332501820983677155">Skróty do funkcji Google Chrome</translation>
 <translation id="1360432990279830238">Wylogować i wyłączyć synchronizację?</translation>
-<translation id="136248372334525878">Ładuj wstępnie strony, by szybciej się wczytywały i były dostępne do czytania w trybie offline</translation>
 <translation id="1369915414381695676">Strona <ph name="SITE_NAME" /> została dodana</translation>
 <translation id="1373696734384179344">Za mało pamięci, by pobrać te treści.</translation>
 <translation id="1376578503827013741">Obliczam…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Wybrana karta</translation>
 <translation id="194341124344773587">Przyznaj Chrome uprawnienie w <ph name="BEGIN_LINK" />ustawieniach Androida<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Zapisuj hasła</translation>
-<translation id="1946005195648379376">Określ, jak Google może korzystać z Twojej historii przeglądania, by dostosowywać wyniki wyszukiwania i działanie innych usług.</translation>
 <translation id="1952172573699511566">Gdy będzie to możliwe, tekst na stronach internetowych będzie się wyświetlać w Twoim preferowanym języku.</translation>
 <translation id="1960290143419248813">Aktualizacje Chrome nie są już dostępne w tej wersji Androida</translation>
 <translation id="1966710179511230534">Zaktualizuj swoje dane logowania.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Kliknij, by wyszukać</translation>
 <translation id="2079545284768500474">Cofnij</translation>
 <translation id="2082238445998314030">Wynik <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Aby uzyskać dostęp do spersonalizowanej treści proponowanej przez Google, zaloguj się w Chrome.</translation>
 <translation id="2091887806945687916">Dźwięk</translation>
 <translation id="2096012225669085171">Synchronizacja i personalizacja na urządzeniach</translation>
 <translation id="2100273922101894616">Automatyczne logowanie</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Przeciągaj suwak, by umożliwić wygodne czytanie. Gdy dwukrotnie klikniesz akapit, tekst powiększy się co najmniej do tej wielkości.</translation>
 <translation id="2323763861024343754">Dane witryn:</translation>
 <translation id="2328985652426384049">Nie można się zalogować</translation>
-<translation id="2342981853652716282">Zaloguj się w Chrome, by mieć dostęp do swoich zakładek, haseł i innych ustawień na wszystkich swoich urządzeniach.</translation>
 <translation id="2349710944427398404">Łączna ilość danych używanych przez Chrome, w tym konta, zakładki i zapisane ustawienia</translation>
 <translation id="2351097562818989364">Ustawienia tłumaczenia zostały zresetowane.</translation>
 <translation id="2353636109065292463">Sprawdzanie połączenia z internetem</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokowane na niektórych stronach</translation>
 <translation id="3137521801621304719">Wyłącz tryb incognito</translation>
 <translation id="3143515551205905069">Anuluj synchronizację</translation>
-<translation id="3148434565183091099">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, zaloguj się w Chrome.</translation>
 <translation id="3157842584138209013">Sprawdź ilość zaoszczędzonych danych, używając przycisku Więcej opcji</translation>
 <translation id="3166827708714933426">Skróty kart i okien</translation>
 <translation id="3181954750937456830">Bezpieczne przeglądanie (chroni Ciebie i Twoje urządzenie przed niebezpiecznymi witrynami)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Automatycznie loguj się na stronach, używając zapisanych danych logowania. Gdy ta funkcja jest wyłączona, przed każdym zalogowaniem się zobaczysz prośbę o weryfikację.</translation>
 <translation id="3658159451045945436">Resetowanie usuwa historię oszczędzania danych, w tym listę odwiedzonych stron.</translation>
 <translation id="3663367437272849150">Grupuj karty (<ph name="NUM_SELECTED" />).</translation>
-<translation id="3672452749423051839">Podpowiedzi przy błędach nawigacji</translation>
 <translation id="3692944402865947621">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu niedostępności pamięci.</translation>
 <translation id="3714981814255182093">Otwórz pasek wyszukiwania</translation>
 <translation id="3716182511346448902">Ta strona używa zbyt dużo pamięci, dlatego została wstrzymana w Chrome.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Tytuł</translation>
 <translation id="4008040567710660924">Zezwalaj na pliki cookie z określonej strony internetowej.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# godzina}few{# godziny}many{# godzin}other{# godziny}}</translation>
-<translation id="4042870126885713738">Pokazuj podpowiedzi, gdy nie można znaleźć adresu internetowego lub nawiązać połączenia</translation>
 <translation id="4046123991198612571">Następny utwór</translation>
 <translation id="4048707525896921369">Poznaj tematy w witrynach bez opuszczania strony. Funkcja Kliknij, by wyszukać kopiuje słowo wraz z kontekstem i wkleja je w wyszukiwarce Google. Dzięki temu otrzymujesz definicje, grafiki, wyniki wyszukiwania i inne informacje.
 
@@ -438,7 +430,6 @@
     – Twoje ruchy, na przykład sposób chodzenia.
 
     Zanim zezwolisz stronie na dostęp, upewnij się, że możesz jej zaufać.</translation>
-<translation id="424864128008805179">Wylogować z Chrome?</translation>
 <translation id="4256782883801055595">Licencje open source</translation>
 <translation id="4259722352634471385">Adres zablokowany: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiuj adres linku</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Korzystam z wyszukiwarki Sogou</translation>
 <translation id="4404568932422911380">Brak zakładek</translation>
-<translation id="4409723563706114196">Używaj przewidywania stron</translation>
 <translation id="4411535500181276704">Wersja uproszczona</translation>
 <translation id="4415276339145661267">Zarządzaj kontem Google</translation>
 <translation id="4432792777822557199">Od teraz strony, których językiem jest <ph name="SOURCE_LANGUAGE" />, będą tłumaczone na <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Zezwolić tej stronie na dostęp do czujników VR?</translation>
 <translation id="5210286577605176222">Przejdź do poprzedniej karty</translation>
 <translation id="5210365745912300556">Zamknij kartę</translation>
-<translation id="5222676887888702881">Wyloguj się</translation>
 <translation id="5224771365102442243">Z wideo</translation>
 <translation id="5233638681132016545">Nowa karta</translation>
 <translation id="526421993248218238">Nie udało się wczytać tej strony</translation>
 <translation id="5271967389191913893">Na tym urządzeniu nie można otworzyć treści, które chcesz pobrać.</translation>
 <translation id="528192093759286357">Przeciągnij od góry i kliknij przycisk Wstecz, by wyjść z trybu pełnoekranowego.</translation>
-<translation id="5284584623296338184">Zmiany w zakładkach, historii, hasłach i innych ustawieniach nie będą już synchronizowane z kontem Google. Twoje obecne dane będą jednak nadal na nim przechowywane.</translation>
 <translation id="5292796745632149097">Wyślij na</translation>
 <translation id="5300589172476337783">Pokaż</translation>
 <translation id="5301954838959518834">Rozumiem</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Karty incognito</translation>
 <translation id="5763514718066511291">Kliknij, by skopiować URL tej aplikacji</translation>
 <translation id="5765780083710877561">Opis:</translation>
-<translation id="5777170031995031090">Określ, jak Google może korzystać z Twojej historii przeglądania, by dostosowywać wyniki wyszukiwania, reklamy i działanie innych usług.</translation>
 <translation id="5793665092639000975">Zajmują <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google może korzystać z Twojej historii, by personalizować wyniki wyszukiwania, reklamy i działanie innych usług</translation>
 <translation id="5804241973901381774">Uprawnienia</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Nazwa jest zbyt długa</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# obraz}few{# obrazy}many{# obrazów}other{# obrazu}}</translation>
 <translation id="6447842834002726250">Pliki cookie</translation>
-<translation id="6448273550210938826">Podpowiedzi wyszukiwania i adresów URL</translation>
 <translation id="6461962085415701688">Nie można otworzyć pliku</translation>
 <translation id="6464977750820128603">Możesz wyświetlić strony otwierane w Chrome i ustawić dla nich liczniki czasu.\n\nGoogle otrzymuje informacje o stronach, dla których masz ustawione liczniki czasu, i o tym, jak długo je przeglądasz. Używamy tych informacji do udoskonalania Cyfrowej równowagi.</translation>
 <translation id="6475951671322991020">Pobierz film</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Aby wyszukać urządzenia, Chrome potrzebuje dostępu do lokalizacji. <ph name="BEGIN_LINK" />Zwiększ uprawnienia<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Hasło</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Gdy piszesz na pasku adresu, korzystaj z podpowiedzi, by wyświetlać podobne zapytania i adresy popularnych stron</translation>
 <translation id="666731172850799929">Otwórz w <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Informacje na temat ochrony prywatności w Chrome</translation>
 <translation id="6697492270171225480">Gdy nie można odnaleźć strony, pokazuj sugestie podobnych stron</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Usuń</translation>
 <translation id="8266862848225348053">Miejsce zapisywania pobranych plików</translation>
 <translation id="8274165955039650276">Zobacz pobrane</translation>
-<translation id="8283853025636624853">Synchronizacja z kontem <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Napisy</translation>
 <translation id="8300705686683892304">Zarządzane przez aplikację</translation>
 <translation id="8310344678080805313">Karty standardowe</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">Oczekiwanie</translation>
 <translation id="8970887620466824814">Coś poszło nie tak.</translation>
 <translation id="8972098258593396643">Czy pobrać do folderu domyślnego?</translation>
-<translation id="8981454092730389528">Zarządzanie aktywnością w Google</translation>
 <translation id="8986494364107987395">Automatycznie przesyłaj do Google statystyki użytkowania i raporty o awariach</translation>
 <translation id="8993760627012879038">Otwórz nową kartę w trybie incognito</translation>
 <translation id="8998729206196772491">Logujesz się na konto, którym zarządza <ph name="MANAGED_DOMAIN" />, i przekazujesz jego administratorowi kontrolę nad Twoimi danymi Chrome. Zostaną one trwale przypisane do tego konta. Gdy się wylogujesz, znikną one z tego urządzenia, ale pozostaną zapisane na Twoim koncie Google.</translation>
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 ef66cf3..2aa3bcc 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
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Limpar histórico, cookies, dados do site, cache…</translation>
 <translation id="129553762522093515">Recentemente fechadas</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" />: enviado de <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Para ver as guias dos seus outros dispositivos, faça login no Chrome.</translation>
 <translation id="1331212799747679585">Não é possível atualizar o Chrome. Mais opções</translation>
 <translation id="1332501820983677155">Atalhos de recursos do Google Chrome</translation>
 <translation id="1360432990279830238">Sair e desativar a sincronização?</translation>
-<translation id="136248372334525878">Pré-carrega as páginas para um carregamento mais rápido e leitura off-line</translation>
 <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> adicionado</translation>
 <translation id="1373696734384179344">Memória insuficiente para fazer o download do conteúdo selecionado.</translation>
 <translation id="1376578503827013741">Calculando…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Guia selecionada</translation>
 <translation id="194341124344773587">Ative a permissão para o Chrome nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Salvar senhas</translation>
-<translation id="1946005195648379376">Controle a maneira como o Google usa seu histórico de navegação para personalizar a Pesquisa e outros serviços do Google.</translation>
 <translation id="1952172573699511566">Os sites exibirão textos no idioma de sua preferência, quando for possível.</translation>
 <translation id="1960290143419248813">As atualizações do Chrome não são mais compatíveis com esta versão do Android</translation>
 <translation id="1966710179511230534">Atualize seus detalhes de login.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tocar para pesquisar</translation>
 <translation id="2079545284768500474">Desfazer</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Para receber conteúdo personalizado sugerido pelo Google, faça login no Chrome.</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
 <translation id="2100273922101894616">Login automático</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Arraste o controle deslizante até a leitura ficar confortável. Com o toque duplo em um parágrafo, o texto ficará pelo menos deste tamanho.</translation>
 <translation id="2323763861024343754">Armazenamento do site</translation>
 <translation id="2328985652426384049">Não consigo fazer login</translation>
-<translation id="2342981853652716282">Faça login no Chrome para ver seus favoritos, senhas e muito mais em todos os seus dispositivos.</translation>
 <translation id="2349710944427398404">Total de dados utilizados pelo Chrome, incluindo contas, favoritos e configurações salvas</translation>
 <translation id="2351097562818989364">As configurações de tradução foram redefinidas.</translation>
 <translation id="2353636109065292463">Verificando sua conexão de Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloqueados em alguns sites</translation>
 <translation id="3137521801621304719">Sair do modo de navegação anônima</translation>
 <translation id="3143515551205905069">Cancelar sincronização</translation>
-<translation id="3148434565183091099">Para ter seus favoritos em todos os seus dispositivos, faça login no Chrome.</translation>
 <translation id="3157842584138209013">Veja o volume de dados que você economizou no botão Mais opções</translation>
 <translation id="3166827708714933426">Atalhos de guias e janelas</translation>
 <translation id="3181954750937456830">Navegação segura: protege você e seu dispositivo de sites perigosos</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Faça login automaticamente nos websites usando as credenciais armazenadas. Se o recurso estiver desativado, será preciso fazer a verificação sempre antes de fazer login em um website.</translation>
 <translation id="3658159451045945436">A redefinição limpa o histórico da economia de dados, incluindo a lista de sites visitados.</translation>
 <translation id="3663367437272849150">Agrupar <ph name="NUM_SELECTED" /> guias.</translation>
-<translation id="3672452749423051839">Sugerir opções quando houver erro de navegação</translation>
 <translation id="3692944402865947621">Falha no download do arquivo <ph name="FILE_NAME" /> porque não foi possível acessar o local do armazenamento.</translation>
 <translation id="3714981814255182093">Abrir a barra Localizar</translation>
 <translation id="3716182511346448902">Como esta página usa muita memória, o Chrome a pausou.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Título</translation>
 <translation id="4008040567710660924">Permita cookies para um site específico.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Mostra sugestões quando houver falha em um endereço da Web ou uma conexão não puder ser estabelecida</translation>
 <translation id="4046123991198612571">Próxima faixa</translation>
 <translation id="4048707525896921369">Saiba mais sobre um determinado assunto de um site sem sair da página. Com o recurso "Tocar para pesquisar", você toca na palavra e o contexto relacionado é enviado para a Pesquisa Google, que então mostra definições, imagens, resultados da pesquisa e outros detalhes relacionados para você.
 
@@ -438,7 +430,6 @@
     - Seus movimentos, como a maneira como você caminha
 
     Certifique-se de que esse site seja confiável antes de conceder acesso.</translation>
-<translation id="424864128008805179">Sair do Google Chrome?</translation>
 <translation id="4256782883801055595">Licenças de código aberto</translation>
 <translation id="4259722352634471385">A Navegação GPS está bloqueada: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copiar endereço do link</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefone</translation>
 <translation id="4384468725000734951">Usando o Sogou para pesquisar</translation>
 <translation id="4404568932422911380">Nenhum favorito</translation>
-<translation id="4409723563706114196">Usar predições de páginas</translation>
 <translation id="4411535500181276704">Modo Lite</translation>
 <translation id="4415276339145661267">Gerenciar sua Conta do Google</translation>
 <translation id="4432792777822557199">Páginas em <ph name="SOURCE_LANGUAGE" /> serão traduzidas para <ph name="TARGET_LANGUAGE" /> de agora em diante</translation>
@@ -578,13 +568,11 @@
 <translation id="5202089186707505116">Permitir que este site acesse seus sensores de RV?</translation>
 <translation id="5210286577605176222">Ir para a guia anterior</translation>
 <translation id="5210365745912300556">Fechar guia</translation>
-<translation id="5222676887888702881">Sair</translation>
 <translation id="5224771365102442243">Com vídeo</translation>
 <translation id="5233638681132016545">Nova guia</translation>
 <translation id="526421993248218238">Não foi possível carregar a página</translation>
 <translation id="5271967389191913893">Não é possível abrir no dispositivo o conteúdo a ser transferido por download.</translation>
 <translation id="528192093759286357">Arraste a partir da parte superior e toque no botão "Voltar" para sair da tela cheia.</translation>
-<translation id="5284584623296338184">Alterações feitas nos seus favoritos, histórico, senhas e outras configurações não serão mais sincronizadas com sua Conta do Google. No entanto, os dados já existentes permanecerão armazenados na Conta do Google.</translation>
 <translation id="5292796745632149097">Enviar para</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Ok, entendi</translation>
@@ -661,7 +649,6 @@
 <translation id="5763382633136178763">Guias anônimas</translation>
 <translation id="5763514718066511291">Toque para copiar o URL desse app</translation>
 <translation id="5765780083710877561">Descrição:</translation>
-<translation id="5777170031995031090">Controle a maneira como o Google usa seu histórico de navegação para personalizar a Pesquisa Google, os anúncios e outros serviços nossos.</translation>
 <translation id="5793665092639000975">Usando <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">O Google pode usar seu histórico para personalizar a Pesquisa, os anúncios e outros serviços que ele oferece</translation>
 <translation id="5804241973901381774">Permissões</translation>
@@ -755,7 +742,6 @@
 <translation id="6441734959916820584">O nome é muito longo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# imagem}one{# imagem}other{# imagens}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Sugestões de pesquisa e URL</translation>
 <translation id="6461962085415701688">Não é possível abrir o arquivo</translation>
 <translation id="6464977750820128603">Você pode ver os sites que visita no Chrome e definir timers para eles.\n\nO Google recebe informações sobre os sites para os quais você definiu timers e sobre o tempo que você passa neles. Essas informações são usadas para melhorar o Bem-estar digital.</translation>
 <translation id="6475951671322991020">Fazer o download do vídeo</translation>
@@ -786,7 +772,6 @@
 <translation id="6656545060687952787">O Chrome precisa de acesso ao local para procurar por dispositivos. <ph name="BEGIN_LINK" />Atualizar permissões<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Senha</translation>
 <translation id="6659594942844771486">Guia</translation>
-<translation id="666268767214822976">Prevê as palavras da consulta à medida que você digita</translation>
 <translation id="666731172850799929">Abrir no <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Aviso de Privacidade do Chrome</translation>
 <translation id="6697492270171225480">Mostrar sugestões de páginas semelhantes quando uma página não for encontrada</translation>
@@ -1017,7 +1002,6 @@
 <translation id="8261506727792406068">Excluir</translation>
 <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="8284326494547611709">Legendas</translation>
 <translation id="8300705686683892304">Gerenciados por app</translation>
 <translation id="8310344678080805313">Guias padrão</translation>
@@ -1108,7 +1092,6 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Algo deu errado.</translation>
 <translation id="8972098258593396643">Fazer o download para a pasta padrão?</translation>
-<translation id="8981454092730389528">Controles de atividades do Google</translation>
 <translation id="8986494364107987395">Envia estatísticas de uso e relatórios de erros ao Google automaticamente</translation>
 <translation id="8993760627012879038">Abrir uma nova guia no modo de navegação anônima</translation>
 <translation id="8998729206196772491">Você está fazendo login com uma conta gerenciada por <ph name="MANAGED_DOMAIN" /> e dando ao administrador dela o controle sobre seus dados do Chrome, os quais ficarão permanentemente vinculados a essa conta. Se você sair do Chrome, seus dados serão excluídos desse dispositivo, mas permanecerão armazenados na sua Conta do Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
index 90ba131..a699b0b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Limpar histórico, cookies, dados de sites, cache…</translation>
 <translation id="129553762522093515">Fechados recentemente</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Enviado de <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Para obter os separadores dos seus outros dispositivos, inicie sessão no Chrome.</translation>
 <translation id="1331212799747679585">Não é possível atualizar o Chrome. Mais opções.</translation>
 <translation id="1332501820983677155">Atalhos das funcionalidades do Google Chrome</translation>
 <translation id="1360432990279830238">Terminar sessão e desativar a sincronização?</translation>
-<translation id="136248372334525878">Pré-carregar páginas para um carregamento mais rápido e para leitura offline</translation>
 <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> adicionado</translation>
 <translation id="1373696734384179344">Memória insuficiente para transferir o conteúdo selecionado.</translation>
 <translation id="1376578503827013741">A calcular…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Separador selecionado</translation>
 <translation id="194341124344773587">Ative a autorização para o Chrome nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Guardar palavras-passe</translation>
-<translation id="1946005195648379376">Controle a forma como a Google utiliza o seu histórico de navegação para personalizar a Pesquisa Google e outros serviços Google.</translation>
 <translation id="1952172573699511566">Quando possível, os Websites apresentam o texto no seu idioma preferido.</translation>
 <translation id="1960290143419248813">As atualizações do Chrome já não são suportadas para esta versão do Android.</translation>
 <translation id="1966710179511230534">Atualize os detalhes de início de sessão.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tocar para pesquisar</translation>
 <translation id="2079545284768500474">Anular</translation>
 <translation id="2082238445998314030">Resultado <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Para obter conteúdo personalizado sugerido pelo Google, inicie sessão no Chrome.</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2096012225669085171">Sincronizar e personalizar entre dispositivos</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Arraste o controlo de deslize até conseguir ler confortavelmente. O texto deve ter, pelo menos, este tamanho depois de tocar duas vezes num parágrafo.</translation>
 <translation id="2323763861024343754">Armazenamento do site</translation>
 <translation id="2328985652426384049">Não é possível iniciar sessão</translation>
-<translation id="2342981853652716282">Inicie sessão no Chrome para obter os seus marcadores, palavras-passe e muito mais em todos os dispositivos.</translation>
 <translation id="2349710944427398404">Total de dados utilizados pelo Chrome, incluindo contas, marcadores e definições guardadas</translation>
 <translation id="2351097562818989364">As definições de tradução foram repostas.</translation>
 <translation id="2353636109065292463">A verificar a sua ligação à Internet...</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bloqueado em alguns sites.</translation>
 <translation id="3137521801621304719">Sair do modo de navegação anónima</translation>
 <translation id="3143515551205905069">Cancelar sincronização</translation>
-<translation id="3148434565183091099">Para obter os seus marcadores em todos os dispositivos, inicie sessão no Chrome.</translation>
 <translation id="3157842584138209013">Veja a quantidade de dados que poupou através do botão Mais opções.</translation>
 <translation id="3166827708714933426">Atalhos de separadores e de janelas</translation>
 <translation id="3181954750937456830">Navegação segura (protege o utilizador e o seu dispositivo contra sites perigosos)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Inicie automaticamente sessão em Sites com as credenciais armazenadas. Quando a funcionalidade está desativada, é-lhe sempre pedida validação antes de iniciar sessão num Website.</translation>
 <translation id="3658159451045945436">A reposição apaga o histórico da poupança de dados, incluindo a lista de sites visitados.</translation>
 <translation id="3663367437272849150">Agrupe <ph name="NUM_SELECTED" /> separadores.</translation>
-<translation id="3672452749423051839">Sugestões de erros de navegação</translation>
 <translation id="3692944402865947621">A transferência de <ph name="FILE_NAME" /> falhou porque o local de armazenamento está fora do alcance.</translation>
 <translation id="3714981814255182093">Abrir a barra Localizar</translation>
 <translation id="3716182511346448902">Esta página utiliza demasiada memória, pelo que o Chrome a colocou em pausa.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Título</translation>
 <translation id="4008040567710660924">Permita cookies para um site específico.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Mostrar sugestões quando um endereço Web não responder ou não for possível estabelecer ligação</translation>
 <translation id="4046123991198612571">Faixa seguinte</translation>
 <translation id="4048707525896921369">Saiba mais acerca dos tópicos nos Websites sem sair da página. A funcionalidade Tocar para pesquisar envia uma palavra e o contexto circundante para a Pesquisa Google, que devolve definições, imagens, resultados da pesquisa e outros detalhes.
 
@@ -438,7 +430,6 @@
     - Os seus movimentos, como o seu modo de caminhar.
 
     Certifique-se de que confia neste site antes de permitir o acesso.</translation>
-<translation id="424864128008805179">Pretende terminar sessão no Chrome?</translation>
 <translation id="4256782883801055595">Licenças de código aberto</translation>
 <translation id="4259722352634471385">A navegação está bloqueada: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copiar endereço do link</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telemóvel</translation>
 <translation id="4384468725000734951">A utilizar o Sogou para pesquisa</translation>
 <translation id="4404568932422911380">Sem marcadores</translation>
-<translation id="4409723563706114196">Utilizar previsões de páginas</translation>
 <translation id="4411535500181276704">Modo Lite</translation>
 <translation id="4415276339145661267">Gerir a sua Conta Google</translation>
 <translation id="4432792777822557199">As páginas em <ph name="SOURCE_LANGUAGE" /> serão traduzidas para <ph name="TARGET_LANGUAGE" /> a partir de agora</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Pretende permitir que este site aceda aos sensores de RV?</translation>
 <translation id="5210286577605176222">Ir para o separador anterior</translation>
 <translation id="5210365745912300556">Fechar separador</translation>
-<translation id="5222676887888702881">Terminar sessão</translation>
 <translation id="5224771365102442243">Com vídeo</translation>
 <translation id="5233638681132016545">Novo separador</translation>
 <translation id="526421993248218238">Não é possível carregar esta página.</translation>
 <translation id="5271967389191913893">O dispositivo não consegue abrir o conteúdo a transferir.</translation>
 <translation id="528192093759286357">Arraste a partir da parte superior e toque no botão de retrocesso para sair do ecrã inteiro.</translation>
-<translation id="5284584623296338184">As alterações aos marcadores, ao histórico, às palavras-passe e a outras definições deixam de ser sincronizadas com a Conta Google. Contudo, os dados existentes permanecem armazenados na Conta Google.</translation>
 <translation id="5292796745632149097">Enviar para</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">OK, compreendi</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Separadores de navegação anónima</translation>
 <translation id="5763514718066511291">Toque para copiar o URL desta aplicação.</translation>
 <translation id="5765780083710877561">Descrição:</translation>
-<translation id="5777170031995031090">Controle a forma como a Google utiliza o seu histórico de navegação para personalizar a Pesquisa Google, os anúncios e outros serviços Google.</translation>
 <translation id="5793665092639000975">A utilizar <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" />.</translation>
 <translation id="5797070761912323120">A Google pode utilizar o seu histórico para personalizar a Pesquisa, os anúncios e outros serviços Google.</translation>
 <translation id="5804241973901381774">Permissões</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">O nome é demasiado longo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# imagem}other{# imagens}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Pesquisa e sugestões de URL</translation>
 <translation id="6461962085415701688">Não é possível abrir o ficheiro</translation>
 <translation id="6464977750820128603">Pode ver os sites que visita no Chrome e definir temporizadores para os mesmos.\n\nA Google obtém informações sobre os sites para os quais define temporizadores e durante quanto tempo os visita. Estas informações são utilizadas para melhorar o Bem-estar digital.</translation>
 <translation id="6475951671322991020">Transferir vídeo</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">O Chrome necessita de acesso à localização para procurar dispositivos. <ph name="BEGIN_LINK" />Atualizar autorizações<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Palavra-passe</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Utilizar um serviço de previsão para mostrar consultas relacionadas e Sites populares à medida que escreve na barra de endereço</translation>
 <translation id="666731172850799929">Abrir no <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Aviso de privacidade do Chrome</translation>
 <translation id="6697492270171225480">Mostrar sugestões de páginas semelhantes se não for possível encontrar uma página</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8266862848225348053">Localização da transferência</translation>
 <translation id="8274165955039650276">Ver transferências</translation>
-<translation id="8283853025636624853">A sincronizar com <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Legendas</translation>
 <translation id="8300705686683892304">Geridos por aplicação</translation>
 <translation id="8310344678080805313">Separadores padrão</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Ocorreu um erro.</translation>
 <translation id="8972098258593396643">Pretende transferir para a pasta predefinida?</translation>
-<translation id="8981454092730389528">Controlos da atividade Google</translation>
 <translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation>
 <translation id="8993760627012879038">Abrir novo separador no modo de navegação anónima</translation>
 <translation id="8998729206196772491">Está a iniciar sessão com uma conta gerida por <ph name="MANAGED_DOMAIN" /> e a conceder ao respetivo gestor o controlo dos seus dados do Chrome. Os dados ficarão permanentemente associados a esta conta. Terminar sessão no Chrome elimina os seus dados deste dispositivo, embora permaneçam armazenados na Conta Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
index 2ee362b8..ae4731e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Șterge istoricul, cookie-urile, datele privind site-urile și memoria cache…</translation>
 <translation id="129553762522093515">Închise recent</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Trimis de la <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Pentru a accesa filele de pe alte dispozitive, conectează-te la Chrome.</translation>
 <translation id="1331212799747679585">Chrome nu se poate actualiza. Mai multe opțiuni</translation>
 <translation id="1332501820983677155">Comenzi rapide pentru funcțiile Google Chrome</translation>
 <translation id="1360432990279830238">Te deconectezi și dezactivezi sincronizarea?</translation>
-<translation id="136248372334525878">Preîncarcă paginile pentru încărcare mai rapidă și lectură offline</translation>
 <translation id="1369915414381695676">Site-ul <ph name="SITE_NAME" /> a fost adăugat</translation>
 <translation id="1373696734384179344">Memorie insuficientă pentru descărcarea conținutului selectat.</translation>
 <translation id="1376578503827013741">Se calculează…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Fila selectată</translation>
 <translation id="194341124344773587">Activează permisiunea pentru Chrome din <ph name="BEGIN_LINK" />Setări Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Parole salvate</translation>
-<translation id="1946005195648379376">Controlează cum poate folosi Google istoricul de navigare pentru a personaliza Căutarea și alte servicii Google.</translation>
 <translation id="1952172573699511566">Site-urile vor afișa textul în limba ta preferată, dacă este posibil.</translation>
 <translation id="1960290143419248813">Actualizările Chrome nu mai sunt acceptate pentru această versiune de Android</translation>
 <translation id="1966710179511230534">Actualizați detaliile de conectare.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Atinge pentru a căuta</translation>
 <translation id="2079545284768500474">Anulează</translation>
 <translation id="2082238445998314030">Rezultatul <ph name="RESULT_NUMBER" /> din <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Pentru a obține sugestii de conținut personalizat de la Google, conectează-te la Chrome.</translation>
 <translation id="2091887806945687916">Sunet</translation>
 <translation id="2096012225669085171">Sincronizează și personalizează pe toate dispozitivele</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Trage cursorul până poți citi textul cu ușurință. Textul trebuie să fie cel puțin la fel de mare ca acesta după o atingere dublă pe un paragraf.</translation>
 <translation id="2323763861024343754">Stocarea site-urilor</translation>
 <translation id="2328985652426384049">Nu se poate conecta</translation>
-<translation id="2342981853652716282">Conectează-te la Chrome pentru a accesa marcajele, parolele și altele pe toate dispozitivele tale.</translation>
 <translation id="2349710944427398404">Totalul datelor folosite de Chrome, inclusiv conturile, marcajele și setările salvate</translation>
 <translation id="2351097562818989364">Setările de traducere au fost resetate.</translation>
 <translation id="2353636109065292463">Se verifică conexiunea la internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blocate pe anumite site-uri</translation>
 <translation id="3137521801621304719">Ieși din modul incognito</translation>
 <translation id="3143515551205905069">Anulează sincronizarea</translation>
-<translation id="3148434565183091099">Pentru a accesa marcajele pe toate dispozitivele, conectează-te la Chrome.</translation>
 <translation id="3157842584138209013">Vezi ce volum de date ai economisit folosind butonul Mai multe opțiuni</translation>
 <translation id="3166827708714933426">Comenzi rapide pentru file și ferestre</translation>
 <translation id="3181954750937456830">Navigare sigură (protecție împotriva site-urilor periculoase)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Te conectezi automat la site-uri folosind datele de conectare stocate. Când funcția este dezactivată, ți se va solicita verificarea de fiecare dată înainte de a te conecta la un site.</translation>
 <translation id="3658159451045945436">Prin resetare se șterge istoricul economisirii de date, inclusiv lista site-urilor vizitate.</translation>
 <translation id="3663367437272849150">Grupează <ph name="NUM_SELECTED" /> file.</translation>
-<translation id="3672452749423051839">Sugestii pentru erori de navigare</translation>
 <translation id="3692944402865947621">Descărcarea fișierului <ph name="FILE_NAME" /> nu a reușit, deoarece nu se poate contacta locația de stocare.</translation>
 <translation id="3714981814255182093">Deschide Bara de căutare</translation>
 <translation id="3716182511346448902">Această pagină folosește prea multă memorie, prin urmare Chrome a întrerupt-o.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titlu</translation>
 <translation id="4008040567710660924">Permite cookie-uri pentru un anumit site.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{O oră}few{# ore}other{# de ore}}</translation>
-<translation id="4042870126885713738">Afișează sugestii atunci când o adresă web nu se rezolvă sau nu poate fi stabilită o conexiune</translation>
 <translation id="4046123991198612571">Melodia următoare</translation>
 <translation id="4048707525896921369">Află despre subiectele de pe site-uri fără să părăsești pagina. Funcția Atinge pentru a căuta trimite un cuvânt și contextul aferent către Căutarea Google și returnează definiții, imagini, rezultate ale căutării și alte detalii.
 
@@ -438,7 +430,6 @@
     - mișcările tale, cum ar fi mersul.
 
     Asigură-te că ai încredere în acest site înainte să permiți accesul.</translation>
-<translation id="424864128008805179">Te deconectezi de la Chrome?</translation>
 <translation id="4256782883801055595">Licențe open source</translation>
 <translation id="4259722352634471385">Navigarea este blocată: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Copiază adresa linkului</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Pentru căutare se folosește Sogou</translation>
 <translation id="4404568932422911380">Niciun marcaj</translation>
-<translation id="4409723563706114196">Folosește predicțiile pentru pagini</translation>
 <translation id="4411535500181276704">Modul Lite</translation>
 <translation id="4415276339145661267">Gestionează-ți Contul Google</translation>
 <translation id="4432792777822557199">Paginile în <ph name="SOURCE_LANGUAGE" /> vor fi traduse în <ph name="TARGET_LANGUAGE" /> de acum înainte</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Permiți acestui site să îți acceseze senzorii RV?</translation>
 <translation id="5210286577605176222">Accesează fila anterioară</translation>
 <translation id="5210365745912300556">Închide fila</translation>
-<translation id="5222676887888702881">Deconectează-te</translation>
 <translation id="5224771365102442243">Cu videoclip</translation>
 <translation id="5233638681132016545">Filă nouă</translation>
 <translation id="526421993248218238">Această pagină nu poate fi încărcată.</translation>
 <translation id="5271967389191913893">Dispozitivul nu poate deschide conținutul de descărcat.</translation>
 <translation id="528192093759286357">Trage din partea de sus și atinge butonul Înapoi pentru a ieși din ecranul complet.</translation>
-<translation id="5284584623296338184">Modificările marcajelor, istoricului, parolelor sau ale altor setări nu vor mai fi sincronizate cu Contul Google. Totuși, datele existente vor rămâne stocate în Contul Google.</translation>
 <translation id="5292796745632149097">Trimite la</translation>
 <translation id="5300589172476337783">Afișează</translation>
 <translation id="5301954838959518834">OK, am înțeles</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">File incognito</translation>
 <translation id="5763514718066511291">Atinge pentru a copia adresa URL pentru această aplicație</translation>
 <translation id="5765780083710877561">Descriere:</translation>
-<translation id="5777170031995031090">Stabilește cum poate folosi Google istoricul de navigare pentru a personaliza Căutarea, anunțurile și alte servicii Google.</translation>
 <translation id="5793665092639000975">Se utilizează <ph name="SPACE_USED" /> din <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google poate folosi istoricul pentru a personaliza Căutarea, anunțurile și alte servicii Google</translation>
 <translation id="5804241973901381774">Permisiuni</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Numele este prea lung</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{O imagine}few{# imagini}other{# de imagini}}</translation>
 <translation id="6447842834002726250">Cookie-uri</translation>
-<translation id="6448273550210938826">Sugestii de căutare și pentru adrese URL</translation>
 <translation id="6461962085415701688">Fișierul nu poate fi deschis</translation>
 <translation id="6464977750820128603">Poți vedea site-urile pe care le vizitezi în Chrome și să setezi temporizatoare pentru ele.\n\nGoogle obține informații cu privire la site-urile pentru care setezi temporizatoare și la durata de accesare. Aceste informații sunt folosite pentru a îmbunătăți Bunăstarea digitală.</translation>
 <translation id="6475951671322991020">Descarcă videoclipul</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome necesită accesul la locație pentru a căuta dispozitive. <ph name="BEGIN_LINK" />Actualizează permisiunile<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Parolă</translation>
 <translation id="6659594942844771486">Filă</translation>
-<translation id="666268767214822976">Folosește un serviciu de predicții pentru a afișa interogări similare și site-uri populare în timp ce introduci text în bara de adrese.</translation>
 <translation id="666731172850799929">Deschide în <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Notificare privind confidențialitatea Chrome</translation>
 <translation id="6697492270171225480">Afișează sugestii pentru pagini similare atunci când o pagină nu poate fi găsită</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Șterge</translation>
 <translation id="8266862848225348053">Locația de descărcare</translation>
 <translation id="8274165955039650276">Vezi descărcările</translation>
-<translation id="8283853025636624853">Se sincronizează cu <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Subtitrări</translation>
 <translation id="8300705686683892304">Gestionate de aplicație</translation>
 <translation id="8310344678080805313">File standard</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">în așteptare</translation>
 <translation id="8970887620466824814">A apărut o eroare.</translation>
 <translation id="8972098258593396643">Descarci în dosarul prestabilit?</translation>
-<translation id="8981454092730389528">Opțiuni privind activitatea Google</translation>
 <translation id="8986494364107987395">Trimite automat la Google statistici de utilizare și rapoarte de blocare</translation>
 <translation id="8993760627012879038">Deschide o filă nouă în modul incognito</translation>
 <translation id="8998729206196772491">Te conectezi cu un cont gestionat de <ph name="MANAGED_DOMAIN" /> și acorzi administratorului acestuia controlul asupra datelor Chrome. Datele vor fi asociate definitiv acestui cont. Dacă te deconectezi de la Chrome, datele se vor șterge de pe acest dispozitiv, dar vor rămâne stocate în Contul Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
index 879fc645b..ccee4da 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Удалить файлы cookie и данные сайтов, очистить историю и кеш</translation>
 <translation id="129553762522093515">Недавно закрытые</translation>
 <translation id="1303507811548703290">Домен: <ph name="DOMAIN" />. Отправлено с устройства "<ph name="DEVICE_NAME" />".</translation>
-<translation id="1326317727527857210">Чтобы получить доступ к вкладкам на всех ваших устройствах, войдите в Chrome.</translation>
 <translation id="1331212799747679585">Не удалось обновить Chrome. Другие настройки</translation>
 <translation id="1332501820983677155">Функции Google Chrome</translation>
 <translation id="1360432990279830238">Выйти и отключить синхронизацию?</translation>
-<translation id="136248372334525878">Загружать страницы предварительно для повышения скорости работы и просмотра офлайн</translation>
 <translation id="1369915414381695676">Добавлен сайт <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Недостаточно памяти для скачивания выбранного контента.</translation>
 <translation id="1376578503827013741">Подсчет…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Выбранная вкладка</translation>
 <translation id="194341124344773587">Разрешение для Chrome можно предоставить в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Сохранение паролей</translation>
-<translation id="1946005195648379376">Укажите, как Google может использовать историю просмотров для персонализации Поиска и других сервисов.</translation>
 <translation id="1952172573699511566">Когда это возможно, текст на сайтах будет отображаться на выбранном вами языке.</translation>
 <translation id="1960290143419248813">Невозможно обновить Chrome в текущей версии Android.</translation>
 <translation id="1966710179511230534">Обновите учетные данные</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Нажмите для поиска</translation>
 <translation id="2079545284768500474">Отмена</translation>
 <translation id="2082238445998314030">Результат <ph name="RESULT_NUMBER" />, всего <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Чтобы мы могли рекомендовать вам интересный контент, войдите в свой аккаунт в Chrome.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизация и персонализация данных на всех устройствах.</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Перемещайте ползунок, пока текст не станет удобным для чтения. После двойного нажатия на абзац текст должен быть такого размера.</translation>
 <translation id="2323763861024343754">Данные сайтов</translation>
 <translation id="2328985652426384049">Не удается войти</translation>
-<translation id="2342981853652716282">Войдите в Chrome, чтобы синхронизировать закладки, пароли и другую информацию на всех ваших устройствах.</translation>
 <translation id="2349710944427398404">Общее количество данных Chrome, включая аккаунты, закладки и сохраненные настройки</translation>
 <translation id="2351097562818989364">Настройки перевода сброшены</translation>
 <translation id="2353636109065292463">Проверка подключения к Интернету</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Заблокировано на некоторых сайтах</translation>
 <translation id="3137521801621304719">Выключить режим инкогнито</translation>
 <translation id="3143515551205905069">Отмена</translation>
-<translation id="3148434565183091099">Чтобы получить доступ к закладкам на всех ваших устройствах, войдите в Chrome.</translation>
 <translation id="3157842584138209013">Чтобы узнать, сколько трафика вы сэкономили, нажмите кнопку "Ещё"</translation>
 <translation id="3166827708714933426">Работа с вкладками и окнами</translation>
 <translation id="3181954750937456830">Безопасный просмотр (защищает вас и ваше устройство от опасных сайтов)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Входить на веб-сайты с помощью сохраненного имени пользователя и пароля. Когда функция отключена, эти данные нужно указывать при каждом входе.</translation>
 <translation id="3658159451045945436">Будет удалена вся информация о сэкономленных данных, в том числе список просмотренных сайтов.</translation>
 <translation id="3663367437272849150">Сгруппировать вкладки (всего <ph name="NUM_SELECTED" />).</translation>
-<translation id="3672452749423051839">Подсказки при ошибке навигации</translation>
 <translation id="3692944402865947621">Не удалось скачать файл <ph name="FILE_NAME" />, так как хранилище недоступно.</translation>
 <translation id="3714981814255182093">Открыть панель поиска</translation>
 <translation id="3716182511346448902">Эта страница расходовала слишком много памяти, поэтому работа ее скриптов была приостановлена.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Название</translation>
 <translation id="4008040567710660924">Разрешить определенному сайту сохранять файлы cookie.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# час}one{# час}few{# часа}many{# часов}other{# часа}}</translation>
-<translation id="4042870126885713738">Предлагать альтернативы, если веб-адрес недоступен или с ним не удается установить соединение</translation>
 <translation id="4046123991198612571">Следующий трек</translation>
 <translation id="4048707525896921369">Ищите картинки, определения и другую информацию, не покидая выбранную страницу. Просто выберите слово, и оно будет отправлено в Google Поиск вместе с контекстом.
 
@@ -438,7 +430,6 @@
     – ваши движения и походку.
 
     Предоставляйте доступ только тем сайтам, которым вы доверяете.</translation>
-<translation id="424864128008805179">Выйти из Chrome?</translation>
 <translation id="4256782883801055595">Лицензии на ПО с открытым кодом</translation>
 <translation id="4259722352634471385">Навигация заблокирована: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Копировать адрес ссылки</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Sogou используется как поисковая система по умолчанию</translation>
 <translation id="4404568932422911380">Нет закладок</translation>
-<translation id="4409723563706114196">Загружать страницы предварительно</translation>
 <translation id="4411535500181276704">Упрощенный режим</translation>
 <translation id="4415276339145661267">Перейти в настройки аккаунта Google</translation>
 <translation id="4432792777822557199">Страницы на этом языке (<ph name="SOURCE_LANGUAGE" />) будут автоматически переводиться на <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Разрешить этому сайту доступ к датчикам VR?</translation>
 <translation id="5210286577605176222">Перейти к предыдущей вкладке</translation>
 <translation id="5210365745912300556">Закрыть вкладку</translation>
-<translation id="5222676887888702881">Выйти</translation>
 <translation id="5224771365102442243">Есть видео</translation>
 <translation id="5233638681132016545">Новая вкладка</translation>
 <translation id="526421993248218238">Не удалось загрузить страницу</translation>
 <translation id="5271967389191913893">Не удается открыть скачанный контент.</translation>
 <translation id="528192093759286357">Чтобы выйти из полноэкранного режима, проведите по экрану сверху вниз и нажмите кнопку "Назад".</translation>
-<translation id="5284584623296338184">Изменения в ваших закладках, паролях, истории и других настройках больше не будут синхронизироваться с аккаунтом Google. Это изменение не затронет данные, сохраненные в аккаунте ранее.</translation>
 <translation id="5292796745632149097">Куда отправить</translation>
 <translation id="5300589172476337783">Показать</translation>
 <translation id="5301954838959518834">ОК</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Вкладки в режиме инкогнито</translation>
 <translation id="5763514718066511291">Нажмите, чтобы скопировать URL этого приложения.</translation>
 <translation id="5765780083710877561">Описание:</translation>
-<translation id="5777170031995031090">Укажите, как Google может использовать историю браузера для персонализации Поиска, Рекламы и других сервисов.</translation>
 <translation id="5793665092639000975">Использовано: <ph name="SPACE_USED" /> из <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google может использовать вашу историю, чтобы персонализировать рекламу, а также Поиск и другие сервисы.</translation>
 <translation id="5804241973901381774">Разрешения</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Название слишком длинное.</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# изображение}one{# изображение}few{# изображения}many{# изображений}other{# изображения}}</translation>
 <translation id="6447842834002726250">Файлы сookie</translation>
-<translation id="6448273550210938826">Поиск и предложения URL</translation>
 <translation id="6461962085415701688">Не удалось открыть файл</translation>
 <translation id="6464977750820128603">Вы сможете просматривать список сайтов, посещенных в Chrome, и устанавливать для них таймеры.\n\nВ Google будут отправляться сведения о сайтах, для которых настроены таймеры, и времени их посещения. Мы собираем эти данные, чтобы улучшать сервис "Цифровое благополучие".</translation>
 <translation id="6475951671322991020">Скачать видео</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Чтобы выполнить поиск устройств, браузеру Chrome нужен доступ к геоданным. <ph name="BEGIN_LINK" />Обновить разрешения<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Пароль</translation>
 <translation id="6659594942844771486">Вкладка</translation>
-<translation id="666268767214822976">Показывать подсказки с похожими запросами и часто посещаемыми сайтами по мере ввода в адресную строку</translation>
 <translation id="666731172850799929">Открыть в <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Примечание о конфиденциальности Chrome</translation>
 <translation id="6697492270171225480">Предлагать варианты, если страница, которую вы пытаетесь открыть, не найдена</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Удалить</translation>
 <translation id="8266862848225348053">Расположение скачиваемых файлов</translation>
 <translation id="8274165955039650276">Показать скачанные файлы</translation>
-<translation id="8283853025636624853">Синхронизация с аккаунтом <ph name="SYNC_ACCOUNT_USER_NAME" />…</translation>
 <translation id="8284326494547611709">Титры</translation>
 <translation id="8300705686683892304">Под управлением приложения</translation>
 <translation id="8310344678080805313">Обычные вкладки</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">ожидание</translation>
 <translation id="8970887620466824814">Произошла ошибка</translation>
 <translation id="8972098258593396643">Скачать в папку по умолчанию?</translation>
-<translation id="8981454092730389528">Отслеживание действий в Google</translation>
 <translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation>
 <translation id="8993760627012879038">Открыть новое окно в режиме инкогнито</translation>
 <translation id="8998729206196772491">Вы входите в аккаунт, которым управляет администратор домена <ph name="MANAGED_DOMAIN" />. Он может контролировать ваши данные Chrome, которые теперь будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
index 34a165c..1ea0f0e3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Vymazať históriu, súbory cookie, dáta webov, vyrovnávaciu pamäť…</translation>
 <translation id="129553762522093515">Nedávno zatvorené</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – odoslané zo zariadenia <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Ak chcete získať karty z ďalších svojich zariadení, prihláste sa do Chromu.</translation>
 <translation id="1331212799747679585">Chrome sa nedá aktualizovať. Ďalšie možnosti</translation>
 <translation id="1332501820983677155">Skratky pre funkcie prehliadača Google Chrome</translation>
 <translation id="1360432990279830238">Odhlásiť sa a vypnúť synchronizáciu?</translation>
-<translation id="136248372334525878">Vopred načítavať stránky na zrýchlenie načítania a offline čítania</translation>
 <translation id="1369915414381695676">Boli pridané stránky <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Vybraný obsah nie je možné stiahnuť z dôvodu nedostatku pamäte</translation>
 <translation id="1376578503827013741">Vypočítava sa…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Vybratá karta</translation>
 <translation id="194341124344773587">Zapnite povolenie pre Chrome v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Ukladať heslá</translation>
-<translation id="1946005195648379376">Nastavte, ako má Google používať vašu históriu prehliadania na prispôsobenie Vyhľadávania a ďalších služieb Googlu.</translation>
 <translation id="1952172573699511566">Ak to bude možné, weby budú zobrazovať text vo vašom preferovanom jazyku.</translation>
 <translation id="1960290143419248813">Pre túto verziu Androidu už nie sú podporované aktualizácie Chromu</translation>
 <translation id="1966710179511230534">Aktualizujte svoje prihlasovacie údaje.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Vyhľadávanie klepnutím</translation>
 <translation id="2079545284768500474">Späť</translation>
 <translation id="2082238445998314030">Výsledok <ph name="RESULT_NUMBER" /> z <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Ak chcete získavať prispôsobený obsah navrhnutý Googlom, prihláste sa do Chromu.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2096012225669085171">Synchronizovať a prispôsobiť v rôznych zariadeniach</translation>
 <translation id="2100273922101894616">Automaticky prihlasovať</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Presúvajte posúvač, dokým nebude čítanie tohto textu pohodlné. Po dvojitom klepnutí na odsek by mal byť text aspoň takto veľký.</translation>
 <translation id="2323763861024343754">Úložisko webu</translation>
 <translation id="2328985652426384049">Nedá sa prihlásiť</translation>
-<translation id="2342981853652716282">Prihláste sa do Chromu a získajte svoje záložky, heslá a ďalšie nastavenia na všetkých zariadeniach.</translation>
 <translation id="2349710944427398404">Celkové dáta využívané Chromom vrátane účtov, záložiek a uložených nastavení</translation>
 <translation id="2351097562818989364">Nastavenia prekladov boli resetované.</translation>
 <translation id="2353636109065292463">Kontroluje sa internetové pripojenie</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokované na niektorých weboch</translation>
 <translation id="3137521801621304719">Ukončiť režim inkognito</translation>
 <translation id="3143515551205905069">Zrušiť synchronizáciu</translation>
-<translation id="3148434565183091099">Ak chcete mať záložky na všetkých zariadeniach, prihláste sa do Chromu.</translation>
 <translation id="3157842584138209013">Ak chcete zistiť, koľko dát ste ušetrili, klepnite na tlačidlo Ďalšie možnosti</translation>
 <translation id="3166827708714933426">Skratky pre karty a okná</translation>
 <translation id="3181954750937456830">Bezpečné prehliadanie (chráni vás aj zariadenie pred nebezpečnými webmi)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Povolí automatické prihlasovanie na webové stránky pomocou uložených poverení. Keď je funkcia vypnutá, zobrazí sa výzva na overenie vždy pred prihlásením na web.</translation>
 <translation id="3658159451045945436">Obnovením vymažete svoju históriu úspory dát aj zoznam navštívených webov.</translation>
 <translation id="3663367437272849150">Zoskupiť karty (počet: <ph name="NUM_SELECTED" />)</translation>
-<translation id="3672452749423051839">Návrhy v prípade chýb navigácie</translation>
 <translation id="3692944402865947621">Súbor <ph name="FILE_NAME" /> sa nepodarilo stiahnuť, pretože umiestnenie úložiska nie je k dispozícii.</translation>
 <translation id="3714981814255182093">Otvorenie Panela vyhľadávania</translation>
 <translation id="3716182511346448902">Táto stránka využíva príliš veľa pamäte, a preto ju Chrome pozastavil.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Názov</translation>
 <translation id="4008040567710660924">Povolenie súborov cookie konkrétneho webu</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# hod.}few{# hod.}many{# hod.}other{# hod.}}</translation>
-<translation id="4042870126885713738">Zobrazovať návrhy, ak sa nedá nájsť webová adresa alebo nadviazať spojenie</translation>
 <translation id="4046123991198612571">Ďalšia skladba</translation>
 <translation id="4048707525896921369">Získajte informácie o témach na weboch bez toho, aby ste museli opustiť stránku. Vyhľadávanie klepnutím odošle slovo a súvisiaci kontext do Vyhľadávania Google a vráti definície, obrázky, výsledky vyhľadávania a ďalšie podrobnosti.
 
@@ -438,7 +430,6 @@
     – pohybov, napríklad štýlu chôdze.
 
     Skôr ako povolíte prístup, skontrolujte, či ide o dôveryhodný web.</translation>
-<translation id="424864128008805179">Odhlásiť sa z Chromu?</translation>
 <translation id="4256782883801055595">Licencie open source</translation>
 <translation id="4259722352634471385">Navigácia je zablokovaná: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopírovať adresu odkazu</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefón</translation>
 <translation id="4384468725000734951">Na vyhľadávanie sa používa Sogou</translation>
 <translation id="4404568932422911380">Žiadne záložky</translation>
-<translation id="4409723563706114196">Používať predpovede stránok</translation>
 <translation id="4411535500181276704">Zjednodušený režim</translation>
 <translation id="4415276339145661267">Spravovať účet Google</translation>
 <translation id="4432792777822557199">Stránky v jazyku <ph name="SOURCE_LANGUAGE" /> budú odteraz prekladané do jazyka <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Chcete tomuto webu povoliť prístup k senzorom VR?</translation>
 <translation id="5210286577605176222">Prechod na predchádzajúcu kartu</translation>
 <translation id="5210365745912300556">Zatvoriť kartu</translation>
-<translation id="5222676887888702881">Odhlásiť sa</translation>
 <translation id="5224771365102442243">S videom</translation>
 <translation id="5233638681132016545">Nová karta</translation>
 <translation id="526421993248218238">Táto stránka sa nedá načítať</translation>
 <translation id="5271967389191913893">Zariadenie nemôže otvoriť obsah na stiahnutie</translation>
 <translation id="528192093759286357">Režim celej obrazovky ukončíte potiahnutím z hornej časti a klepnutím na tlačidlo Späť.</translation>
-<translation id="5284584623296338184">Záložky, história, heslá a ďalšie nastavenia sa už nebudú ďalej synchronizovať do vášho účtu Google. Vaše súčasné údaje však zostanú v účte Google zachované.</translation>
 <translation id="5292796745632149097">Odoslanie do zariadení</translation>
 <translation id="5300589172476337783">Zobraziť</translation>
 <translation id="5301954838959518834">Dobre</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Karty inkognito</translation>
 <translation id="5763514718066511291">Klepnutím skopírujete webovú adresu tejto aplikácie</translation>
 <translation id="5765780083710877561">Popis:</translation>
-<translation id="5777170031995031090">Nastavte, ako má Google používať vašu históriu prehliadania na prispôsobenie Vyhľadávania, reklám a ďalších služieb Googlu.</translation>
 <translation id="5793665092639000975">Využité: <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google môže pomocou vašej histórie prispôsobiť Vyhľadávanie, reklamy a ďalšie služby Googlu</translation>
 <translation id="5804241973901381774">Povolenia</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Názov je príliš dlhý</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# obrázok}few{# obrázky}many{# Images}other{# obrázkov}}</translation>
 <translation id="6447842834002726250">Súbory cookie</translation>
-<translation id="6448273550210938826">Návrhy dopytov a webových adries</translation>
 <translation id="6461962085415701688">Súbor sa nedá otvoriť</translation>
 <translation id="6464977750820128603">Môžete si zobraziť weby, ktoré navštevujete v Chrome, a nastaviť pre ne časovače.\n\nGoogle získa informácie o weboch, pre ktoré nastavíte časovače, a údaje o tom, koľko času na nich strávite. Tieto informácie sa použijú na zlepšenie digitálnej rovnováhy.</translation>
 <translation id="6475951671322991020">Stiahnuť video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Na to, aby mohol Chrome hľadať zariadenia, musí mať prístup k polohe. <ph name="BEGIN_LINK" />Aktualizovať povolenia<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Heslo</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Predpovedať súvisiace dopyty a populárne weby pri zadávaní textu do panela s adresou</translation>
 <translation id="666731172850799929">Otvoriť v aplikácii <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Oznámenie o ochrane súkromia prehliadača Chrome</translation>
 <translation id="6697492270171225480">Zobraziť návrhy podobných stránok, keď sa stránka nedá nájsť</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Odstrániť</translation>
 <translation id="8266862848225348053">Umiestnenie sťahovaných súborov</translation>
 <translation id="8274165955039650276">Zobraziť stiahnuté</translation>
-<translation id="8283853025636624853">Synchronizácia do účtu <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Titulky</translation>
 <translation id="8300705686683892304">Spravované aplikáciou</translation>
 <translation id="8310344678080805313">Štandardné karty</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">nespracované</translation>
 <translation id="8970887620466824814">Vyskytol sa problém.</translation>
 <translation id="8972098258593396643">Stiahnuť do predvoleného priečinka?</translation>
-<translation id="8981454092730389528">Riadenie aktivity Google</translation>
 <translation id="8986494364107987395">Automaticky odosielať Googlu štatistiky používania a správy o zlyhaní</translation>
 <translation id="8993760627012879038">Otvorenie novej karty v režime inkognito</translation>
 <translation id="8998729206196772491">Prihlasujete sa pomocou účtu spravovaného doménou <ph name="MANAGED_DOMAIN" /> a jej správcovi tým dávate kontrolu nad svojimi údajmi Chromu. Vaše údaje budú natrvalo prepojené s týmto účtom. Odhlásením z Chromu odstránite údaje z príslušného zariadenia, avšak naďalej zostanú uložené vo vašom účte Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
index 69526e1..6cd94af 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Izbris zgodovine, piškotkov, podatkov spletnih mest, predpomnilnika …</translation>
 <translation id="129553762522093515">Nedavno zaprto</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – poslano iz naprave <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Če želite dostopati do zavihkov v drugih napravah, se prijavite v Chrome.</translation>
 <translation id="1331212799747679585">Posodobitev Chroma ni mogoča. Več možnosti.</translation>
 <translation id="1332501820983677155">Bližnjice za funkcije Google Chroma</translation>
 <translation id="1360432990279830238">Odjava in izklop sinhronizacije?</translation>
-<translation id="136248372334525878">Vnaprejšnje nalaganje strani za hitrejše nalaganje in branje brez povezave</translation>
 <translation id="1369915414381695676">Spletno mesto <ph name="SITE_NAME" /> je bilo dodano</translation>
 <translation id="1373696734384179344">Za prenos izbrane vsebine ni dovolj pomnilnika.</translation>
 <translation id="1376578503827013741">Računanje …</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Izbrani zavihek</translation>
 <translation id="194341124344773587">V <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" /> vklopite dovoljenje za Chrome.</translation>
 <translation id="1943432128510653496">Shranjevanje gesel</translation>
-<translation id="1946005195648379376">Nadzirajte, kako Google na podlagi vaše zgodovine brskanja prilagaja Iskanje Google in druge Googlove storitve.</translation>
 <translation id="1952172573699511566">Spletna mesta bodo besedilo prikazala v izbranem jeziku, če je mogoče.</translation>
 <translation id="1960290143419248813">Posodobitve za Chrome v tej različici Androida niso več podprte.</translation>
 <translation id="1966710179511230534">Posodobite podrobnosti prijave.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Iskanje z dotikom</translation>
 <translation id="2079545284768500474">Razveljavi</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. rezultat od <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Če želite prejemati prilagojeno vsebino, ki jo predlaga Google, se prijavite v Chrome.</translation>
 <translation id="2091887806945687916">Zvok</translation>
 <translation id="2096012225669085171">Sinhronizacija in prilagajanje med napravami</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Drsnik povlecite tako daleč, da boste lahko to besedilo brez težave prebrali. Besedilo bo po dvakratnem dotiku odstavka vsaj tako veliko.</translation>
 <translation id="2323763861024343754">Shranjeni podatki splet. mesta</translation>
 <translation id="2328985652426384049">Ne morem se prijaviti</translation>
-<translation id="2342981853652716282">Prijavite se v Chrome, če želite dostopati do svojih zaznamkov, gesel in drugega v vseh napravah.</translation>
 <translation id="2349710944427398404">Skupna količina podatkov, ki jih uporablja Chrome, vključno z računi, zaznamki in shranjenimi nastavitvami.</translation>
 <translation id="2351097562818989364">Nastavitve za prevajanje so ponastavljene.</translation>
 <translation id="2353636109065292463">Preverjanje internetne povezave</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blokirano na nekaterih spletnih mestih</translation>
 <translation id="3137521801621304719">Izklop načina brez beleženja zgodovine</translation>
 <translation id="3143515551205905069">Prekliči sinhronizacijo</translation>
-<translation id="3148434565183091099">Če želite dostopati do zaznamkov v vseh napravah, se prijavite v Chrome.</translation>
 <translation id="3157842584138209013">Če pritisnete gumb za več možnosti, si lahko ogledate, koliko prenosa podatkov ste prihranili</translation>
 <translation id="3166827708714933426">Bližnjice za zavihke in okna</translation>
 <translation id="3181954750937456830">Varno brskanje (ščiti vas in napravo pred nevarnimi spletnimi mesti)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Samodejna prijava v spletna mesta s shranjenimi poverilnicami. Ko je ta funkcija izklopljena, bo pri vsaki prijavi v spletno mesto potrebno preverjanje.</translation>
 <translation id="3658159451045945436">Ponastavitev izbriše zgodovino prihrankov pri prenosu podatkov, vključno s seznamom obiskanih spletnih mest.</translation>
 <translation id="3663367437272849150">Združite toliko zavihkov: <ph name="NUM_SELECTED" />.</translation>
-<translation id="3672452749423051839">Predlogi za napake pri krmarjenju</translation>
 <translation id="3692944402865947621">Prenos datoteke <ph name="FILE_NAME" /> ni uspel, ker prostor za shranjevanje ni dosegljiv.</translation>
 <translation id="3714981814255182093">Odpiranje vrstice za iskanje</translation>
 <translation id="3716182511346448902">Ta stran uporablja preveč pomnilnika, zato jo je Chrome zaustavil.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Naslov</translation>
 <translation id="4008040567710660924">Omogočanje piškotkov za določeno spletno mesto.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}two{# h}few{# h}other{# h}}</translation>
-<translation id="4042870126885713738">Pokaži predloge, ko spletnega naslova ni mogoče najti ali povezave ni mogoče vzpostaviti</translation>
 <translation id="4046123991198612571">Naslednja skladba</translation>
 <translation id="4048707525896921369">Več informacij o temah na spletnih mestih, ne da bi zapustili stran. Funkcija »Iskanje z dotikom« pošlje besedo in njeno sobesedilo Iskanju Google in vrne definicije, slike, rezultate iskanja in druge podrobnosti.
 
@@ -438,7 +430,6 @@
     – vaše gibanje, na primer vaša hoja.
 
     Prepričajte se, da temu spletnemu mestu zaupate, preden mu odobrite dostop.</translation>
-<translation id="424864128008805179">Se želite odjaviti iz Chroma?</translation>
 <translation id="4256782883801055595">Odprtokodne licence</translation>
 <translation id="4259722352634471385">Krmarjenje je blokirano: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiraj naslov povezave</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Uporaba iskalnika Sogou za iskanje</translation>
 <translation id="4404568932422911380">Ni zaznamkov</translation>
-<translation id="4409723563706114196">Uporabite predvidevanja strani</translation>
 <translation id="4411535500181276704">Lahki način</translation>
 <translation id="4415276339145661267">Upravljanje Google Računa</translation>
 <translation id="4432792777822557199">Strani v jeziku <ph name="SOURCE_LANGUAGE" /> bodo od zdaj naprej prevedene v jezik <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Dovolite, da to spletno mesto dostopa do tipal za navidezno resničnost?</translation>
 <translation id="5210286577605176222">Premik na prejšnji zavihek</translation>
 <translation id="5210365745912300556">Zapri zavihek</translation>
-<translation id="5222676887888702881">Odjava</translation>
 <translation id="5224771365102442243">Z videoposnetkom</translation>
 <translation id="5233638681132016545">Nov zavihek</translation>
 <translation id="526421993248218238">Te strani ni mogoče naložiti</translation>
 <translation id="5271967389191913893">Naprava ne more odpreti vsebine za prenos.</translation>
 <translation id="528192093759286357">Povlecite z vrha in se dotaknite gumba za nazaj, če želite zapreti celozaslonski način.</translation>
-<translation id="5284584623296338184">Spremembe zaznamkov, zgodovine, gesel in drugih nastavitev ne bodo več sinhronizirane z Google Računom. Obstoječi podatki bodo še naprej shranjeni v Google Računu.</translation>
 <translation id="5292796745632149097">Pošiljanje v napravo</translation>
 <translation id="5300589172476337783">Pokaži</translation>
 <translation id="5301954838959518834">V redu, razumem</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Zavihki brez beleženja zgodovine</translation>
 <translation id="5763514718066511291">Dotaknite se, če želite kopirati URL za to aplikacijo</translation>
 <translation id="5765780083710877561">Opis:</translation>
-<translation id="5777170031995031090">Nadzirajte, kako Google na podlagi vaše zgodovine brskanja prilagaja Iskanje Google, oglase in druge Googlove storitve.</translation>
 <translation id="5793665092639000975">Uporaba <ph name="SPACE_USED" /> od <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google lahko vašo zgodovino uporabi za prilagajanje Iskanja Google, oglasov in drugih Googlovih storitev</translation>
 <translation id="5804241973901381774">Dovoljenja</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Ime je predolgo</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# slika}one{# slika}two{# sliki}few{# slike}other{# slik}}</translation>
 <translation id="6447842834002726250">Piškotki</translation>
-<translation id="6448273550210938826">Predlogi za iskanje in URL-je</translation>
 <translation id="6461962085415701688">Datoteke ni mogoče odpreti</translation>
 <translation id="6464977750820128603">Ogledate si lahko spletna mesta, ki jih obiščete v Chromu, in zanje nastavite merilnike časa.\n\nGoogle dobi podatke o spletnih mestih, za katere nastavite merilnike časa, in o tem, kako dolgo traja vaš obisk teh mest. Te podatke uporabljamo za izboljšanje Digitalne dobrobiti.</translation>
 <translation id="6475951671322991020">Prenos videoposnetka</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome za iskanje naprav potrebuje dostop do lokacije. <ph name="BEGIN_LINK" />Posodobite dovoljenja<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Geslo</translation>
 <translation id="6659594942844771486">Tabulator</translation>
-<translation id="666268767214822976">Uporabite storitev predvidevanja za prikaz povezanih poizvedb in priljubljenih spletnih mest med vnašanjem v naslovno vrstico</translation>
 <translation id="666731172850799929">Odpri v: <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Obvestilo o zasebnosti za Chrome</translation>
 <translation id="6697492270171225480">Prikaz predlogov za podobne strani, ko strani ni mogoče najti</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Izbriši</translation>
 <translation id="8266862848225348053">Mesto za prenos</translation>
 <translation id="8274165955039650276">Ogled prenosov</translation>
-<translation id="8283853025636624853">Sinhronizacija z računom <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Napisi</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8310344678080805313">Standardni zavihki</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">poteka</translation>
 <translation id="8970887620466824814">Prišlo je do napake.</translation>
 <translation id="8972098258593396643">Želite prenesti v privzeto mapo?</translation>
-<translation id="8981454092730389528">Googlovi kontrolniki za dejavnost</translation>
 <translation id="8986494364107987395">Samodejno pošlji statistične podatke o uporabi in poročila o zrušitvah Googlu</translation>
 <translation id="8993760627012879038">Odpiranje novega zavihka brez beleženja zgodovine</translation>
 <translation id="8998729206196772491">Prijavljate se z računom, ki ga upravlja <ph name="MANAGED_DOMAIN" />, in nadzor nad podatki v Chromu predajate skrbniku. Vaši podatki bodo trajno povezani s tem računom. Če se odjavite iz Chroma, boste izbrisali podatke iz te naprave, vendar bodo še naprej shranjeni v Google Računu.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
index 330091d..bf9b7a4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Обришите историју, колачиће, податке о сајтовима, кеш...</translation>
 <translation id="129553762522093515">Недавно затворено</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – послато је са уређаја <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Да би вам картице биле доступне на другим уређајима, пријавите се у Chrome.</translation>
 <translation id="1331212799747679585">Chrome не може да се ажурира. Још опција</translation>
 <translation id="1332501820983677155">Пречице за Google Chrome функције</translation>
 <translation id="1360432990279830238">Одјављујете се и искључујете синхрониз?</translation>
-<translation id="136248372334525878">Странице се учитавају унапред за брже учитавање и офлајн читање</translation>
 <translation id="1369915414381695676">Сајт <ph name="SITE_NAME" /> је додат</translation>
 <translation id="1373696734384179344">Нема довољно меморије за преузимање изабраног садржаја.</translation>
 <translation id="1376578503827013741">Рачуна се…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Изабране картице</translation>
 <translation id="194341124344773587">Укључите дозволу за Chrome у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Сачувај лозинке</translation>
-<translation id="1946005195648379376">Контролишите како Google користи историју прегледања за персонализацију Претраге и других Google услуга</translation>
 <translation id="1952172573699511566">Веб-сајтови ће приказивати текст на жељеном језику када је то могуће.</translation>
 <translation id="1960290143419248813">Chrome ажурирања више нису подржана за ову верзију Android-а</translation>
 <translation id="1966710179511230534">Ажурирајте податке за пријављивање.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Додирните за претрагу</translation>
 <translation id="2079545284768500474">Опозови</translation>
 <translation id="2082238445998314030"><ph name="RESULT_NUMBER" />. од <ph name="TOTAL_RESULTS" /> резултата</translation>
-<translation id="2086652334978798447">Да бисте добијали персонализовани садржај који предлаже Google, пријавите се у Chrome.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2096012225669085171">Синхронизација и персонализација на свим уређајима</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Превлачите клизач док ово не будете могли лако да прочитате. Када двапут додирнете пасус, текст треба да буде бар оволики.</translation>
 <translation id="2323763861024343754">Меморијски простор за сајт</translation>
 <translation id="2328985652426384049">Не могу да се пријавим</translation>
-<translation id="2342981853652716282">Пријавите се у Chrome да би вам обележивачи, лозинке и други садржај били доступни на свим уређајима.</translation>
 <translation id="2349710944427398404">Сви подаци које користи Chrome, укључујући налоге, обележиваче и сачувана подешавања</translation>
 <translation id="2351097562818989364">Подешавања за превођење су ресетована.</translation>
 <translation id="2353636109065292463">Проверава се интернет веза</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Блокирано на неким сајтовима</translation>
 <translation id="3137521801621304719">Изађи из режима без архивирања</translation>
 <translation id="3143515551205905069">Откажи синхронизацију</translation>
-<translation id="3148434565183091099">Да би вам обележивачи били доступни на свим уређајима, пријавите се у Chrome.</translation>
 <translation id="3157842584138209013">Погледајте колико сте података уштедели помоћу дугмета Још опција</translation>
 <translation id="3166827708714933426">Пречице за картице и прозоре</translation>
 <translation id="3181954750937456830">Безбедно прегледање (штити вас и уређај од опасних сајтова)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Аутоматски се пријављујте на веб-сајтове помоћу сачуваних акредитива. Када је ова функција искључена, тражићемо вам да се верификујете пре сваког пријављивања на веб-сајт.</translation>
 <translation id="3658159451045945436">Ресетовањем ћете обрисати историју Уштеде података, укључујући листу сајтова које сте посетили.</translation>
 <translation id="3663367437272849150">Групиши картице (<ph name="NUM_SELECTED" />).</translation>
-<translation id="3672452749423051839">Предлози за грешке при навигацији</translation>
 <translation id="3692944402865947621">Преузимање датотеке <ph name="FILE_NAME" /> није успело зато што локација меморијског простора није доступна.</translation>
 <translation id="3714981814255182093">Отварање траке за тражење</translation>
 <translation id="3716182511346448902">Ова страница користи превише меморије, па ју је Chrome паузирао.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Наслов</translation>
 <translation id="4008040567710660924">Омогућава колачиће за одређени сајт.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ч}one{# ч}few{# ч}other{# ч}}</translation>
-<translation id="4042870126885713738">Приказивање предлога када се веб-адреса не разреши или када није могуће успоставити везу</translation>
 <translation id="4046123991198612571">Следећа песма</translation>
 <translation id="4048707525896921369">Сазнајте више о темама на веб-сајтовима без напуштања странице. Функција „Додирните за претрагу“ шаље реч и њен контекст у Google претрагу и приказује дефиниције, слике, резултате претраге и друге детаље.
 
@@ -438,7 +430,6 @@
     - покрети, попут начина хода
 
     Уверите се да верујете овом сајту пре него што дозволите приступ.</translation>
-<translation id="424864128008805179">Желите ли да се одјавите из Chrome-а?</translation>
 <translation id="4256782883801055595">Лиценце отвореног кода</translation>
 <translation id="4259722352634471385">Навигација је блокирана: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Копирај адресу линка</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Користите Sogou за претрагу</translation>
 <translation id="4404568932422911380">Нема обележивача</translation>
-<translation id="4409723563706114196">Користите предвиђања страница</translation>
 <translation id="4411535500181276704">Lite режим</translation>
 <translation id="4415276339145661267">Управљајте Google налогом</translation>
 <translation id="4432792777822557199">Странице на језику <ph name="SOURCE_LANGUAGE" /> ће се од сада преводити на <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Желите ли да дозволите овом сајту да приступа ВР сензорима?</translation>
 <translation id="5210286577605176222">Прелазак на претходну картицу</translation>
 <translation id="5210365745912300556">Затвори картицу</translation>
-<translation id="5222676887888702881">Одјави ме</translation>
 <translation id="5224771365102442243">Са видеом</translation>
 <translation id="5233638681132016545">Нова картица</translation>
 <translation id="526421993248218238">Учитавање ове странице није успело</translation>
 <translation id="5271967389191913893">Уређај не може да отвори садржај за преузимање.</translation>
 <translation id="528192093759286357">Превуците од врха екрана и додирните дугме Назад да бисте изашли из режима целог екрана.</translation>
-<translation id="5284584623296338184">Промене обележивача, историје, лозинки и других подешавања се више неће синхронизовати са Google налогом. Међутим, постојећи подаци ће остати сачувани на Google налогу.</translation>
 <translation id="5292796745632149097">Пошаљите на</translation>
 <translation id="5300589172476337783">Прикажи</translation>
 <translation id="5301954838959518834">Важи</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Картице без архивирања</translation>
 <translation id="5763514718066511291">Додирните да бисте копирали URL за ову апликацију</translation>
 <translation id="5765780083710877561">Опис:</translation>
-<translation id="5777170031995031090">Контролишите како Google користи историју прегледања за персонализацију Претраге, огласа и других Google услуга.</translation>
 <translation id="5793665092639000975">Користи се <ph name="SPACE_USED" /> од <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google може да користи историју за персонализацију Претраге, огласа и других Google услуга</translation>
 <translation id="5804241973901381774">Дозволе</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Назив је предугачак</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# слика}one{# слика}few{# слике}other{# слика}}</translation>
 <translation id="6447842834002726250">Колачићи</translation>
-<translation id="6448273550210938826">Предлози за претрагу и URL-ове</translation>
 <translation id="6461962085415701688">Не можете да отворите датотеку</translation>
 <translation id="6464977750820128603">Можете да видите сајтове које посећујете у Chrome-у и да подесите тајмере за њих.\n\nGoogle добија информације о сајтовима за које подесите тајмере и о томе колико дуго их посећујете. Те информације се користе за побољшање Дигиталног благостања.</translation>
 <translation id="6475951671322991020">Преузми видео</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome-у је потребан приступ локацији за скенирање уређаја. <ph name="BEGIN_LINK" />Ажурирајте дозволе<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Лозинка</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Коришћење услуге предвиђања за приказивање сродних упита и популарних веб-сајтова док куцате у траци за адресу</translation>
 <translation id="666731172850799929">Отвори у <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chrome обавештење о приватности</translation>
 <translation id="6697492270171225480">Приказуј предлоге за сличне странице када нека страница не може да се пронађе</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8266862848225348053">Локација за преузимање</translation>
 <translation id="8274165955039650276">Погледајте преузимања</translation>
-<translation id="8283853025636624853">Синхронизује се са <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Титл</translation>
 <translation id="8300705686683892304">Управља апликација</translation>
 <translation id="8310344678080805313">Стандардне картице</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">на чекању</translation>
 <translation id="8970887620466824814">Дошло је до грешке.</translation>
 <translation id="8972098258593396643">Преузимате у подразумевани директоријум?</translation>
-<translation id="8981454092730389528">Google контроле активности</translation>
 <translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation>
 <translation id="8993760627012879038">Отварање нове картице у режиму без архивирања</translation>
 <translation id="8998729206196772491">Пријављујете се помоћу налога којим управља <ph name="MANAGED_DOMAIN" /> и дајете његовом администратору контролу над својим Chrome подацима. Подаци ће постати трајно повезани са тим налогом. Одјављивањем из Chrome-а ћете избрисати податке са овог уређаја, али ће они остати сачувани на Google налогу.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
index a23b0d8..3d404ac5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Rensa historiken, cookies, webbplatsdata, cacheminnet …</translation>
 <translation id="129553762522093515">Nyligen stängda</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Skickades från <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Logga in i Chrome om du vill ha samma flikar tillgängliga på alla enheter.</translation>
 <translation id="1331212799747679585">Det går inte att uppdatera Chrome. Fler alternativ</translation>
 <translation id="1332501820983677155">Kortkommandon för funktioner i Google Chrome</translation>
 <translation id="1360432990279830238">Logga ut och inaktivera synkronisering?</translation>
-<translation id="136248372334525878">Genom att läsa in sidor i förväg går det snabbare att läsa in sidor och läsa offline</translation>
 <translation id="1369915414381695676">Webbplatsen <ph name="SITE_NAME" /> har lagts till</translation>
 <translation id="1373696734384179344">Det finns inte tillräckligt med minne för att ladda ned det valda innehållet.</translation>
 <translation id="1376578503827013741">Beräknar …</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Vald flik</translation>
 <translation id="194341124344773587">Aktivera behörighet för Chrome i <ph name="BEGIN_LINK" />Android-inställningar<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Spara lösenord</translation>
-<translation id="1946005195648379376">Styr hur Google anpassar Sök och andra Google-tjänster utifrån webbhistoriken.</translation>
 <translation id="1952172573699511566">När det är möjligt visas text på webbplatser på önskat språk.</translation>
 <translation id="1960290143419248813">Uppdateringar av Chrome stöds inte längre för den här versionen av Android</translation>
 <translation id="1966710179511230534">Uppdatera dina inloggningsuppgifter.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Tryck för att söka</translation>
 <translation id="2079545284768500474">Ångra</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> av <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Logga in i Chrome om du vill få förslag på anpassat innehåll från Google.</translation>
 <translation id="2091887806945687916">Ljud</translation>
 <translation id="2096012225669085171">Synkronisera och anpassa på alla enheter</translation>
 <translation id="2100273922101894616">Automatisk inloggning</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Flytta reglaget tills du kan läsa texten ordentligt. Texten bör bli åtminstone så här stor när du trycker två gånger på ett stycke.</translation>
 <translation id="2323763861024343754">Webbplatslagring</translation>
 <translation id="2328985652426384049">Det gick inte att logga in</translation>
-<translation id="2342981853652716282">Logga in i Chrome om du vill få dina bokmärken, lösenord med mera på alla dina enheter.</translation>
 <translation id="2349710944427398404">Total data som används av Chrome, inklusive konton, bokmärken och sparade inställningar</translation>
 <translation id="2351097562818989364">Översättningsinställningarna har återställts.</translation>
 <translation id="2353636109065292463">Kontrollera internetanslutningen</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Blockeras på vissa webbplatser</translation>
 <translation id="3137521801621304719">Inaktivera inkognitoläge</translation>
 <translation id="3143515551205905069">Avbryt synkronisering</translation>
-<translation id="3148434565183091099">Logga in i Chrome om du vill få tillgång till samma bokmärken på alla enheter.</translation>
 <translation id="3157842584138209013">Under Fler alternativ kan du se hur mycket data du har sparat</translation>
 <translation id="3166827708714933426">Kortkommandon för flikar och fönster</translation>
 <translation id="3181954750937456830">Säker webbsökning (skyddar dig och enheten från skadliga webbplatser)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Logga in automatiskt på webbplatser med hjälp av lagrade inloggningsuppgifter. När funktionen är inaktiverad måste du verifiera dina uppgifter varje gång du besöker webbplatsen innan du kan logga in.</translation>
 <translation id="3658159451045945436">Om du återställer begränsat läge raderas databesparingshistoriken, inklusive listan med webbplatser som du har besökt.</translation>
 <translation id="3663367437272849150">Gruppera <ph name="NUM_SELECTED" /> flikar.</translation>
-<translation id="3672452749423051839">Förslag vid navigeringsfel</translation>
 <translation id="3692944402865947621">Det gick inte att ladda ned <ph name="FILE_NAME" /> eftersom det inte gick att nå lagringsplatsen.</translation>
 <translation id="3714981814255182093">Öppna sökfältet</translation>
 <translation id="3716182511346448902">Den här sidan har pausats i Chrome eftersom den använder för mycket minne.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Titel</translation>
 <translation id="4008040567710660924">Tillåt cookies för en enskild webbplats.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# tim}other{# tim}}</translation>
-<translation id="4042870126885713738">Visa förslag när det inte går att öppna en webbadress eller upprätta en anslutning</translation>
 <translation id="4046123991198612571">Nästa spår</translation>
 <translation id="4048707525896921369">Läs om olika ämnen på webbplatser utan att lämna sidan. Med funktionen Tryck för att söka skickas ett ord och dess kontext till Google Sök. Sedan visas definitioner, bilder, sökresultat och annan information.
 
@@ -438,7 +430,6 @@
     – dina rörelser, som hur du går.
 
     Tänk efter om du litar på webbplatsen innan du ger den åtkomst.</translation>
-<translation id="424864128008805179">Vill du logga ut från Chrome?</translation>
 <translation id="4256782883801055595">Licenser för öppen källkod</translation>
 <translation id="4259722352634471385">Webbadressen har blockerats: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Kopiera länkadress</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Mobil</translation>
 <translation id="4384468725000734951">Du söker med Sogou</translation>
 <translation id="4404568932422911380">Inga bokmärken</translation>
-<translation id="4409723563706114196">Använd sidförslag</translation>
 <translation id="4411535500181276704">Begränsat läge</translation>
 <translation id="4415276339145661267">Hantera Google-kontot</translation>
 <translation id="4432792777822557199">Sidor på <ph name="SOURCE_LANGUAGE" /> översätts till <ph name="TARGET_LANGUAGE" /> från och med nu</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Vill du ge webbplatsen åtkomst till VR-sensorer?</translation>
 <translation id="5210286577605176222">Hoppa till föregående flik</translation>
 <translation id="5210365745912300556">Stäng flik</translation>
-<translation id="5222676887888702881">Logga ut</translation>
 <translation id="5224771365102442243">Med video</translation>
 <translation id="5233638681132016545">Ny flik</translation>
 <translation id="526421993248218238">Det går inte att läsa in den här sidan</translation>
 <translation id="5271967389191913893">Innehållet som skulle laddas ned gick inte att öppna på enheten.</translation>
 <translation id="528192093759286357">Dra uppifrån och tryck på bakåtknappen för att lämna helskärmsläget.</translation>
-<translation id="5284584623296338184">Ändringar i bokmärken, historik, lösenord och andra inställningar synkroniseras inte längre med ditt Google-konto. Befintlig data fortsätter dock att lagras i Google-kontot.</translation>
 <translation id="5292796745632149097">Skicka till</translation>
 <translation id="5300589172476337783">Visa</translation>
 <translation id="5301954838959518834">Ok, jag förstår</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Inkognitoflikar</translation>
 <translation id="5763514718066511291">Tryck om du vill kopiera webbadressen till appen</translation>
 <translation id="5765780083710877561">Beskrivning:</translation>
-<translation id="5777170031995031090">Styr hur Google anpassar Sök, annonser och andra Google-tjänster utifrån webbhistoriken.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> av <ph name="SPACE_AVAILABLE" /> används</translation>
 <translation id="5797070761912323120">Google kan anpassa Sök, annonser och andra Google-tjänster utifrån historiken</translation>
 <translation id="5804241973901381774">Behörigheter</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Namnet är för långt</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# bild}other{# bilder}}</translation>
 <translation id="6447842834002726250">Cookies</translation>
-<translation id="6448273550210938826">Sökning och webbadressförslag</translation>
 <translation id="6461962085415701688">Det går inte att öppna filen</translation>
 <translation id="6464977750820128603">Du kan se vilka webbplatser du besökt i Chrome och ställa in en timer för dem.\n\nGoogle får information om vilka webbplatser du har ställt in en timer för och hur länge du har stannat på dem. Informationen används för att förbättra Digitalt välmående.</translation>
 <translation id="6475951671322991020">Ladda ned video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome behöver platsåtkomst för att söka efter enheter. <ph name="BEGIN_LINK" />Uppdatera behörigheter<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Lösenord</translation>
 <translation id="6659594942844771486">Flik</translation>
-<translation id="666268767214822976">Använd en tjänst som ger förslag på relaterade sökfrågor och populära webbplatser när du skriver i adressfältet</translation>
 <translation id="666731172850799929">Öppna i <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Chromes sekretessmeddelande</translation>
 <translation id="6697492270171225480">Visa förslag på liknande sidor om en sida inte hittas</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Radera</translation>
 <translation id="8266862848225348053">Nedladdningsplats</translation>
 <translation id="8274165955039650276">Visa nedladdningar</translation>
-<translation id="8283853025636624853">Synkroniseras med <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Textning</translation>
 <translation id="8300705686683892304">Hanteras av app</translation>
 <translation id="8310344678080805313">Standardflikar</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">väntar</translation>
 <translation id="8970887620466824814">Något gick fel.</translation>
 <translation id="8972098258593396643">Vill du ladda ned till standardmappen?</translation>
-<translation id="8981454092730389528">Googles aktivitetsinställningar</translation>
 <translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation>
 <translation id="8993760627012879038">Öppna en ny flik i inkognitoläge</translation>
 <translation id="8998729206196772491">Du håller på att logga in med ett konto som hanteras av <ph name="MANAGED_DOMAIN" />, vilket ger administratören kontroll över data i Chrome. Din data kopplas permanent till det här kontot. Om du loggar ut från Chrome raderas all din data från enheten, men den lagras fortfarande i Google-kontot.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
index 04beea3..2bde6085 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Futa historia, vidakuzi, data ya tovuti, akiba…</translation>
 <translation id="129553762522093515">Vilivyofungwa hivi karibuni</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - Imetumwa kutoka <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Ili upate vichupo kutoka kwenye vifaa vyako vingine, ingia katika Chrome.</translation>
 <translation id="1331212799747679585">Chrome haiwezi kusasisha. Chaguo zaidi</translation>
 <translation id="1332501820983677155">Njia za mikato za vipengele vya Google Chrome</translation>
 <translation id="1360432990279830238">Utaondoka na uzime usawazishaji?</translation>
-<translation id="136248372334525878">Pakia mapema kurasa ili zipakie kwa haraka na kwa usomaji wa nje ya mtandao</translation>
 <translation id="1369915414381695676">Tovuti <ph name="SITE_NAME" /> imeongezwa</translation>
 <translation id="1373696734384179344">Hakuna hifadhi ya kutosha ya kupakua maudhui yaliyochaguliwa.</translation>
 <translation id="1376578503827013741">Inakokotoa...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Kichupo Kilichochaguliwa</translation>
 <translation id="194341124344773587">Washa ruhusa ya Chrome katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Hifadhi manenosiri</translation>
-<translation id="1946005195648379376">Dhibiti namna Google inavyotumia historia yako ya kuvinjari ili uweke mapendeleo kwenye huduma ya Tafuta na huduma nyingine za Google.</translation>
 <translation id="1952172573699511566">Tovuti zitaonyesha maandishi katika lugha unayopendelea, panapowezekana.</translation>
 <translation id="1960290143419248813">Masasisho ya Chrome hayatumiki tena kwa toleo hili la Android</translation>
 <translation id="1966710179511230534">Tafadhali sasisha maelezo yako ya kuingia katika akaunti.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Gusa ili Utafute</translation>
 <translation id="2079545284768500474">Tendua</translation>
 <translation id="2082238445998314030">Tokeo <ph name="RESULT_NUMBER" /> kati ya <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Ili Google ikupendekezee maudhui yanayokufaa, ingia katika Chrome.</translation>
 <translation id="2091887806945687916">Sauti</translation>
 <translation id="2096012225669085171">Sawazisha na uweke mapendeleo kwenye vifaa vyote</translation>
 <translation id="2100273922101894616">Ingia katika Akaunti Kiotomatiki</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Buruta kitelezi hadi uweze kusoma haya kwa starehe. Maandishi yanapaswa kuonekana angalau kwa ukubwa huu baada ya kugonga mara mbili kwenye aya.</translation>
 <translation id="2323763861024343754">Hifadhi ya tovuti</translation>
 <translation id="2328985652426384049">Imeshindwa kuingia katika akaunti</translation>
-<translation id="2342981853652716282">Ingia katika Chrome ili upate alamisho, manenosiri yako na mengine mengi kwenye vifaa vyako vyote.</translation>
 <translation id="2349710944427398404">Jumla ya data iliyotumiwa na Chrome, ikiwa ni pamoja na akaunti, alamisho na mipangilio iliyohifadhiwa</translation>
 <translation id="2351097562818989364">Mipangilio yako ya kutafsiri imewekwa upya.</translation>
 <translation id="2353636109065292463">Inaangalia muunganisho wako wa intaneti</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Yamezuiwa kwenye baadhi ya tovuti</translation>
 <translation id="3137521801621304719">Ondoka kwenye hali fiche</translation>
 <translation id="3143515551205905069">Ghairi usawazishaji</translation>
-<translation id="3148434565183091099">Ingia katika Chrome ili upate alamisho zako kwenye vifaa vyako vyote.</translation>
 <translation id="3157842584138209013">Ona kiasi cha data ulichookoa kwa kubofya kitufe cha Chaguo Zaidi</translation>
 <translation id="3166827708714933426">Njia za mikato ya vichupo na vidirisha</translation>
 <translation id="3181954750937456830">Kuvinjari Salama (hukulinda wewe na kifaa chako dhidi ya tovuti hatari)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Ingia katika tovuti kiotomatiki kwa kutumia kitambulisho kilichohifadhiwa. Kipengele kikiwa kimezimwa, utaombwa kuthibitisha kila wakati kabla ya kuingia katika tovuti.</translation>
 <translation id="3658159451045945436">Hatua ya kuweka upya hufuta historia ya uokoaji wa data, ikiwa ni pamoja na orodha ya tovuti unazotembelea.</translation>
 <translation id="3663367437272849150">Weka pamoja vichupo <ph name="NUM_SELECTED" />.</translation>
-<translation id="3672452749423051839">Mapendekezo ya hitilafu ya kuelekea unapotaka</translation>
 <translation id="3692944402865947621">Imeshindwa kupakua <ph name="FILE_NAME" /> kwa sababu haikupata eneo la kuhifadhi.</translation>
 <translation id="3714981814255182093">Fungua Upau wa Kutafuta</translation>
 <translation id="3716182511346448902">Ukurasa huu unatumia hifadhi kubwa zaidi, kwa hivyo Chrome imeusitisha.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Kichwa</translation>
 <translation id="4008040567710660924">Ruhusu vidakuzi katika tovuti maalum.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{Saa #}other{Saa #}}</translation>
-<translation id="4042870126885713738">Onyesha mapendekezo wakati anwani ya wavuti inaposhindwa kutatuliwa au muunganisho ukiwa hauwezi kufanyika</translation>
 <translation id="4046123991198612571">Wimbo unaofuata</translation>
 <translation id="4048707525896921369">Pata maelezo kuhusu mada kwenye tovuti bila kuondoka kwenye ukurasa. Kipengele cha Gusa ili Utafute hutuma neno na muktadha wake kwenye huduma ya Tafuta na Google na kuonyesha ufafanuzi, picha, matokeo ya utafutaji na maelezo mengine.
 
@@ -438,7 +430,6 @@
     - Unavyosogea, kama vile jinsi unavyotembea
 
     Hakikisha kwamba unaamini tovuti hii kabla ya kuruhusu ufikiaji.</translation>
-<translation id="424864128008805179">Ungependa kuondoka kwenye Chrome?</translation>
 <translation id="4256782883801055595">Leseni za programu huria</translation>
 <translation id="4259722352634471385">Kudurusu kumezuiwa: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Nakili anwani ya kiungo</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Simu</translation>
 <translation id="4384468725000734951">Unatumia Sogou kutafuta</translation>
 <translation id="4404568932422911380">Hakuna alamisho</translation>
-<translation id="4409723563706114196">Tumia utabiri wa ukurasa</translation>
 <translation id="4411535500181276704">Hali nyepesi</translation>
 <translation id="4415276339145661267">Dhibiti Akaunti yako ya Google</translation>
 <translation id="4432792777822557199">Kurasa za <ph name="SOURCE_LANGUAGE" /> zitatafsiriwa katika <ph name="TARGET_LANGUAGE" /> kuanzia sasa</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Ungependa kuruhusu tovuti hii ifikie vitambuzi vyako vya Uhalisia Pepe?</translation>
 <translation id="5210286577605176222">Rudi kwenye kichupo cha awali</translation>
 <translation id="5210365745912300556">Funga kichupo</translation>
-<translation id="5222676887888702881">Ondoka</translation>
 <translation id="5224771365102442243">Ina video</translation>
 <translation id="5233638681132016545">Kichupo kipya</translation>
 <translation id="526421993248218238">Imeshindwa kupakia ukurasa huu</translation>
 <translation id="5271967389191913893">Kifaa hakiwezi kufungua maudhui yanayopaswa kupakuliwa.</translation>
 <translation id="528192093759286357">Buruta kutoka juu na uguse kitufe cha kurudi nyuma ili uondoke kwenye skrini nzima.</translation>
-<translation id="5284584623296338184">Mabadiliko kwenye alamisho, historia, manenosiri na mipangilio yako mingine haitasawazishwa tena kwenye Akaunti yako ya Google. Hata hivyo, data yako iliyopo itaendelea kuhifadhiwa katika akaunti yako ya Google.</translation>
 <translation id="5292796745632149097">Tuma kwenye</translation>
 <translation id="5300589172476337783">Onyesha</translation>
 <translation id="5301954838959518834">Sawa, nimeelewa</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Vichupo fiche</translation>
 <translation id="5763514718066511291">Gusa ili unakili URL ya programu hii</translation>
 <translation id="5765780083710877561">Maelezo:</translation>
-<translation id="5777170031995031090">Dhibiti namna Google inavyotumia historia ya jinsi unavyovinjari ili kuweka mapendeleo kwenye huduma ya Tafuta na Google, matangazo na huduma nyingine za Google.</translation>
 <translation id="5793665092639000975">Inatumia <ph name="SPACE_USED" /> kati ya <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google inaweza kutumia historia yako ili kuweka mapendeleo kwenye huduma ya Tafuta na Google, matangazo na huduma nyingine za Google</translation>
 <translation id="5804241973901381774">Idhini</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Jina ni ndefu mno</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{Picha #}other{Picha #}}</translation>
 <translation id="6447842834002726250">Vidakuzi</translation>
-<translation id="6448273550210938826">Mapendekezo ya utafutaji na URL</translation>
 <translation id="6461962085415701688">Imeshindwa kufungua faili</translation>
 <translation id="6464977750820128603">Unaweza kuona tovuti ambazo ulitembelea katika Chrome na kuziwekea vipima muda.\n\nGoogle inapata maelezo kuhusu tovuti ulizowekea vipima muda na muda unaozitembelea. Tunatumia maelezo haya kuboresha mpango wa Nidhamu Dijitali.</translation>
 <translation id="6475951671322991020">Pakua video</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome inahitaji idhini ya kufikia mahali ili ichanganue vifaa. <ph name="BEGIN_LINK" />Ruhusa za sasisho<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Nenosiri</translation>
 <translation id="6659594942844771486">Kichupo</translation>
-<translation id="666268767214822976">Tumia huduma ya ubashiri ili kuonyesha hoja zinazohusiana na tovuti maarufu unapocharaza katika sehemu ya anwani</translation>
 <translation id="666731172850799929">Fungua katika <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Ilani ya Faragha ya Chrome</translation>
 <translation id="6697492270171225480">Onyesha mapendekezo ya kurasa zinazofanana na ukurasa huu wakati haupatikani</translation>
@@ -1015,7 +1000,6 @@
 <translation id="8261506727792406068">Futa</translation>
 <translation id="8266862848225348053">Sehemu ya kuweka vipakuliwa</translation>
 <translation id="8274165955039650276">Angalia vipakuliwa</translation>
-<translation id="8283853025636624853">Inasawazisha kwenye <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Manukuu</translation>
 <translation id="8300705686683892304">Zinazodhibitiwa na programu</translation>
 <translation id="8310344678080805313">Vichupo muundo-msingi</translation>
@@ -1106,7 +1090,6 @@
 <translation id="8965591936373831584">inasubiri</translation>
 <translation id="8970887620466824814">Hitilafu imetokea.</translation>
 <translation id="8972098258593396643">Ungependa kupakua kwenye folda chaguomsingi?</translation>
-<translation id="8981454092730389528">Vidhibiti vya Shughuli za Google</translation>
 <translation id="8986494364107987395">Tumia Google takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi, moja kwa moja</translation>
 <translation id="8993760627012879038">Fungua kichupo kipya katika Hali fiche</translation>
 <translation id="8998729206196772491">Unaingia kwa kutumia akaunti inayodhibitiwa na <ph name="MANAGED_DOMAIN" /> na kumpa msimamizi wa kikoa hicho udhibiti wa data yako ya Chrome. Data yako ya Chrome itahusishwa na akaunti hii daima. Kuondoka kwenye Chrome kutafuta data yako kwenye kifaa hiki, lakini itaendelea kuhifadhiwa katika Akaunti yako ya Google.</translation>
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 ea21519..5f1bca09 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">வரலாறு, குக்கீகள், தளத் தரவு, தற்காலிகச் சேமிப்பை அழி…</translation>
 <translation id="129553762522093515">சமீபத்தில் மூடியவை</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> சாதனத்திலிருந்து அனுப்பப்பட்டது</translation>
-<translation id="1326317727527857210">உங்கள் பிற சாதனங்களிலிருந்து தாவல்களைப் பெற, Chrome இல் உள்நுழையவும்.</translation>
 <translation id="1331212799747679585">Chromeமைப் புதுப்பிக்க முடியாது. கூடுதல் விருப்பங்கள்</translation>
 <translation id="1332501820983677155">Google Chrome அம்சத்திற்கான ஷார்ட்கட்கள்</translation>
 <translation id="1360432990279830238">வெளியேறி, ஒத்திசைவை முடக்கவா?</translation>
-<translation id="136248372334525878">விரைவாக ஏற்றுவதற்கும் ஆஃப்லைனில் படிப்பதற்கும் பக்கங்களை முன்னதாக ஏற்றும்</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> தளம் சேர்க்கப்பட்டது</translation>
 <translation id="1373696734384179344">தேர்ந்தெடுத்ததைப் பதிவிறக்க, போதுமான நினைவகம் இல்லை.</translation>
 <translation id="1376578503827013741">கணக்கிடுகிறது…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">தேர்ந்தெடுத்த தாவல்</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android அமைப்புகளில்<ph name="END_LINK" /> Chromeக்கான அனுமதியை இயக்கவும்.</translation>
 <translation id="1943432128510653496">கடவுச்சொற்களைச் சேமி</translation>
-<translation id="1946005195648379376">தேடல் மற்றும் பிற Google சேவைகளைத் தனிப்பயனாக்க, உங்கள் உலாவல் வரலாற்றை Google எவ்வாறு பயன்படுத்துகிறது என்பதைக் கட்டுப்படுத்தலாம்.</translation>
 <translation id="1952172573699511566">சாத்தியமான போது, நீங்கள் விரும்பும் மொழியில் உரையை இணையதளங்கள் காட்டும்.</translation>
 <translation id="1960290143419248813">இந்த Android பதிப்பினை Chrome புதுப்பிப்புகள் இனி ஆதரிக்காது</translation>
 <translation id="1966710179511230534">உங்கள் உள்நுழைவு விவரங்களைப் புதுப்பிக்கவும்.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">தேடத் தட்டுக</translation>
 <translation id="2079545284768500474">செயல்தவிர்</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> முடிவுகளில் <ph name="RESULT_NUMBER" />வது முடிவு</translation>
-<translation id="2086652334978798447">Google பரிந்துரைக்கும் தனிப்பயனாக்கிய உள்ளடக்கத்தைப் பெற, Chrome இல் உள்நுழையவும்.</translation>
 <translation id="2091887806945687916">ஒலி</translation>
 <translation id="2096012225669085171">பல சாதனங்களுக்கிடையில் ஒத்திசைக்கலாம், தனிப்பயனாக்கலாம்</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">இதை வசதியாக படிப்பதற்கு, ஸ்லைடரை இழுக்கவும். பத்தியில் இரு முறை தட்டிய பிறகு, உரையானது குறைந்தது இந்த அளவு பெரியதாக தோன்ற வேண்டும்.</translation>
 <translation id="2323763861024343754">தளச் சேமிப்பகம்</translation>
 <translation id="2328985652426384049">உள்நுழைய முடியவில்லை</translation>
-<translation id="2342981853652716282">உங்கள் எல்லாச் சாதனங்களிலும் உங்கள் புக்மார்க்குகள், கடவுச்சொற்கள் மற்றும் பலவற்றைப் பெற, Chrome இல் உள்நுழையவும்.</translation>
 <translation id="2349710944427398404">கணக்குகள், புக்மார்க்குகள், சேமித்த அமைப்புகள் உள்பட Chrome பயன்படுத்தும் மொத்தத் தரவு</translation>
 <translation id="2351097562818989364">உங்களின் மொழியாக்க அமைப்புகள் மீட்டமைக்கப்பட்டன.</translation>
 <translation id="2353636109065292463">உங்கள் இணைய இணைப்பைச் சரிபார்க்கிறது</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">சில தளங்களில் தடுக்கப்பட்டுள்ளன</translation>
 <translation id="3137521801621304719">மறைநிலையிலிருந்து வெளியேறு</translation>
 <translation id="3143515551205905069">ஒத்திசைவை ரத்துசெய்</translation>
-<translation id="3148434565183091099">உங்கள் எல்லா சாதனங்களிலும் புத்தகக்குறிகளைப் பெற, Chrome இல் உள்நுழையவும்.</translation>
 <translation id="3157842584138209013">மேலும் விருப்பங்கள் பொத்தானைப் பயன்படுத்தி, எவ்வளவு தரவைச் சேமித்துள்ளீர்கள் என்பதைப் பார்க்கலாம்</translation>
 <translation id="3166827708714933426">தாவல் மற்றும் சாளரத்திற்கான ஷார்ட்கட்கள்</translation>
 <translation id="3181954750937456830">பாதுகாப்பு உலாவல் (ஆபத்தான தளங்களிலிருந்து உங்களையும் சாதனத்தையும் பாதுகாக்கும்)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">சேமிக்கப்பட்டுள்ள நற்சான்றிதழ்களைப் பயன்படுத்தி, இணையதளங்களில் தானாகவே உள்நுழையவும். இந்த அம்சம் முடக்கப்பட்டிருக்கும் போது, ஒவ்வொரு முறையும் இணையதளத்தில் உள்நுழைவதற்கு முன்பும் சரிபார்க்கும்படி கேட்கப்படுவீர்கள்.</translation>
 <translation id="3658159451045945436">மீட்டமைத்தால், பார்வையிட்ட தளங்களின் பட்டியல் உட்பட டேட்டா சேமிப்புகளின் வரலாறு அழிக்கப்படும்.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> தாவல்களைக் குழுவாக்கும்.</translation>
-<translation id="3672452749423051839">வழிநடத்தல் பிழை பரிந்துரைகள்</translation>
 <translation id="3692944402865947621">சேமிப்பிடம் இல்லாததால், <ph name="FILE_NAME" />ஐப் பதிவிறக்க முடியவில்லை.</translation>
 <translation id="3714981814255182093">கண்டறி பட்டியைத் திறக்கும்</translation>
 <translation id="3716182511346448902">இந்தப் பக்கம் அதிகளவு நினைவகத்தைப் பயன்படுத்துவதால், Chrome அதை இடைநிறுத்தியுள்ளது.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">தலைப்பு</translation>
 <translation id="4008040567710660924">குறிப்பிட்ட தளத்திற்கு, குக்கீகளை அனுமதிக்கும்.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# மணிநேரம்}other{# மணிநேரம்}}</translation>
-<translation id="4042870126885713738">இணைய முகவரியைத் தீர்க்க முடியாதபோது அல்லது இணைப்பை உருவாக்க முடியவில்லையெனில் பரிந்துரைகளைக் காட்டு</translation>
 <translation id="4046123991198612571">அடுத்த ட்ராக்</translation>
 <translation id="4048707525896921369">பக்கத்தை விட்டு விலகாமலே இணையதளங்களில் உள்ள தலைப்புகள் குறித்து அறிந்துகொள்ளலாம். "தேடுவதற்குத் தட்டு" அம்சமானது சொல்லையும் அதன் சூழலையும் Google தேடலுக்கு அனுப்புவதோடு வரையறைகள், படங்கள், தேடல் முடிவுகள், பிற விவரங்கள் ஆகியவற்றை வழங்குகிறது.
 
@@ -438,7 +430,6 @@
     - நடக்கும் விதம் போன்ற அசைவுகள்
 
     இந்தத் தளம் நம்பத்தகுந்தது எனக் கருதினால் மட்டுமே அணுகல் வழங்கவும்.</translation>
-<translation id="424864128008805179">Chrome இலிருந்து வெளியேறவா?</translation>
 <translation id="4256782883801055595">ஓப்பன் சோர்ஸ் உரிமங்கள்</translation>
 <translation id="4259722352634471385">செல்வது தடுக்கப்பட்டது: <ph name="URL" /></translation>
 <translation id="4269820728363426813">இணைப்பு முகவரியை நகலெடு</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">மொபைல்</translation>
 <translation id="4384468725000734951">தேடலுக்கு Sogouஐப் பயன்படுத்துகிறீர்கள்</translation>
 <translation id="4404568932422911380">புக்மார்க்குகள் இல்லை</translation>
-<translation id="4409723563706114196">பக்கக் கணிப்புகளைப் பயன்படுத்தவும்</translation>
 <translation id="4411535500181276704">லைட் பயன்முறை</translation>
 <translation id="4415276339145661267">Google கணக்கை நிர்வகி</translation>
 <translation id="4432792777822557199">இனி <ph name="SOURCE_LANGUAGE" /> மொழியில் உள்ள பக்கங்கள் <ph name="TARGET_LANGUAGE" /> மொழிக்கு மொழிபெயர்க்கப்படும்</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">உங்கள் VR சென்சார்களைப் பயன்படுத்த இந்த இணையதளத்தை அனுமதிக்கவா?</translation>
 <translation id="5210286577605176222">முந்தைய தாவலுக்குச் செல்லும்</translation>
 <translation id="5210365745912300556">தாவலை மூடுக</translation>
-<translation id="5222676887888702881">வெளியேறு</translation>
 <translation id="5224771365102442243">வீடியோவுடன்</translation>
 <translation id="5233638681132016545">புதிய தாவல்</translation>
 <translation id="526421993248218238">பக்கத்தை ஏற்ற முடியவில்லை</translation>
 <translation id="5271967389191913893">பதிவிறக்க வேண்டிய உள்ளடக்கத்தைச் சாதனத்தால் திறக்க முடியாது</translation>
 <translation id="528192093759286357">முழுத்திரையிலிருந்து வெளியேற, மேலிருந்து இழுத்து "முந்தையது" பொத்தானைத் தொடவும்.</translation>
-<translation id="5284584623296338184">புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள் ஆகியவற்றிலும் பிற அமைப்புகளிலும் செய்யும் மாற்றங்கள், இனி உங்கள் Google கணக்குடன் ஒத்திசைக்கப்படாது. எனினும், ஏற்கனவே சேமிக்கப்பட்ட உங்கள் தரவு Google கணக்கில் அப்படியே இருக்கும்.</translation>
 <translation id="5292796745632149097">இதற்கு அனுப்பு:</translation>
 <translation id="5300589172476337783">காண்பி</translation>
 <translation id="5301954838959518834">சரி, புரிந்தது</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">மறைநிலைத் தாவல்கள்</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>
 <translation id="5797070761912323120">தேடல், விளம்பரங்கள் மற்றும் பிற Google சேவைகளைத் தனிப்பயனாக்க, உங்கள் வரலாற்றை Google பயன்படுத்தக்கூடும்</translation>
 <translation id="5804241973901381774">அனுமதிகள்</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">பெயர் மிக நீளமாக உள்ளது</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# படம்}other{# படங்கள்}}</translation>
 <translation id="6447842834002726250">குக்கீகள்</translation>
-<translation id="6448273550210938826">தேடலும் URL பரிந்துரைகளும்</translation>
 <translation id="6461962085415701688">கோப்பைத் திறக்க முடியாது</translation>
 <translation id="6464977750820128603">Chromeமில் பார்த்தத் தளங்களைக் காணலாம், அவற்றுக்கு டைமர்களையும் அமைக்கலாம்.\n\nடைமர்களை அமைத்தத் தளங்களைப் பற்றிய விவரங்களையும் அவற்றில் செலவழித்த நேரத்தையும் Google சேகரிக்கும். இந்தத் தகவல் டிஜிட்டல் வெல்பீயிங்கை மேம்படுத்தப் பயன்படுத்தப்படும்.</translation>
 <translation id="6475951671322991020">வீடியோவைப் பதிவிறக்கு</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">சாதனங்களைக் கண்டறிய Chromeமுக்கு இருப்பிட அணுகல் தேவை. <ph name="BEGIN_LINK" />அனுமதிகளைப் புதுப்பிக்கவும்<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">கடவுச்சொல்</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">முகவரிப்பட்டியில் நீங்கள் உள்ளிடும்போதே தொடர்புடைய கேள்விகளையும், பிரபலமான இணையதளங்களையும் காட்டுவதற்கு, யூக சேவையைப் பயன்படுத்தவும்</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> இல் திற</translation>
 <translation id="666981079809192359">Chrome தனியுரிமை அறிக்கை</translation>
 <translation id="6697492270171225480">பக்கத்தைக் கண்டறிய முடியாத போது, அதே மாதிரியான பக்கங்களுக்கான பரிந்துரைகளைக் காட்டும்</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">நீக்கு</translation>
 <translation id="8266862848225348053">பதிவிறக்க இருப்பிடம்</translation>
 <translation id="8274165955039650276">பதிவிறக்கங்களைக் காட்டு</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> உடன் ஒத்திசைக்கிறது</translation>
 <translation id="8284326494547611709">வசனங்கள்</translation>
 <translation id="8300705686683892304">ஆப்ஸ் நிர்வகிப்பவை</translation>
 <translation id="8310344678080805313">நிலையான தாவல்கள்</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">நிலுவையிலுள்ளது</translation>
 <translation id="8970887620466824814">ஏதோ தவறாகிவிட்டது.</translation>
 <translation id="8972098258593396643">இயல்புக் கோப்புறைக்குப் பதிவிறக்கவா?</translation>
-<translation id="8981454092730389528">Google செயல்பாட்டுக் கட்டுப்பாடுகள்</translation>
 <translation id="8986494364107987395">பயன்பாட்டுப் புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் தானாகவே Google க்கு அனுப்பு</translation>
 <translation id="8993760627012879038">புதிய தாவலை மறைநிலையில் திறக்கும்</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> நிர்வகிக்கும் கணக்கில் உள்நுழைந்து, உங்கள் Chrome தரவு மீதான கட்டுப்பாட்டை அதன் நிர்வாகிக்கு வழங்குகிறீர்கள். இந்தக் கணக்குடன் தரவு நிரந்தரமாக இணைக்கப்படும். Chrome இலிருந்து வெளியேறினால், இந்தச் சாதனத்திலிருந்து தரவு நீக்கப்படும், எனினும் உங்கள் Google கணக்கில் தரவு தொடர்ந்து இருக்கும்.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
index 5a1bc922..0eb58b0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">చరిత్ర, కుక్కీలు, సైట్ డేటా, కాష్‌ను తీసివేస్తుంది…</translation>
 <translation id="129553762522093515">ఇటీవల మూసివెయ్యబడినవి</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - దీనిని పంపిన పరికరం <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">మీ ఇతర పరికరాల నుండి మీ ట్యాబ్‌లను పొందడానికి, Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="1331212799747679585">Chromeని అప్‌డేట్ చేయడం సాధ్యపడదు. మరిన్ని ఎంపికలు</translation>
 <translation id="1332501820983677155">Google Chrome లక్షణ సత్వరమార్గాలు</translation>
 <translation id="1360432990279830238">సైన్ అవుట్ చేసి, సమకాలీకరణను ఆఫ్ చేయలా?</translation>
-<translation id="136248372334525878">వేగమైన లోడింగ్, ఆఫ్‌లైన్‌లో చదవడం కోసం పేజీలను ప్రీలోడ్ చేయండి</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> సైట్ జోడించబడింది</translation>
 <translation id="1373696734384179344">ఎంచుకున్న కంటెంట్‌ను డౌన్‌లోడ్ చేయడానికి తగినంత మెమరీ లేదు.</translation>
 <translation id="1376578503827013741">గణిస్తోంది...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">ఎంచుకున్న ట్యాబ్</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android సెట్టిం‌గ్‌లు<ph name="END_LINK" />లో Chrome కోసం అనుమతిని ఆన్ చేయండి.</translation>
 <translation id="1943432128510653496">పాస్‌వర్డ్‌‌లను సేవ్ చేయండి</translation>
-<translation id="1946005195648379376">శోధన మరియు ఇతర Google సేవలను వ్యక్తిగతీకరించడం కోసం Google మీ బ్రౌజింగ్ చరిత్రను ఉపయోగించే విధానాన్ని నియంత్రించండి.</translation>
 <translation id="1952172573699511566">వీలైనప్పుడు వెబ్‌సైట్‌లు, మీ ప్రాధాన్య భాషలో వచనాన్ని చూపుతాయి.</translation>
 <translation id="1960290143419248813">Chrome అప్‌డేట్‌లకు ఈ Android వెర్షన్‌లో మద్దతు లేదు</translation>
 <translation id="1966710179511230534">దయచేసి మీ సైన్-ఇన్ వివరాలను అప్‌డేట్ చేయండి.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">వెతకడానికి నొక్కండి</translation>
 <translation id="2079545284768500474">చర్య రద్దు</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" />లో <ph name="RESULT_NUMBER" />వ ఫలితం</translation>
-<translation id="2086652334978798447">Google సూచించే వ్యక్తిగతీకరించిన కంటెంట్‌ను పొందడానికి, Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="2091887806945687916">ధ్వని</translation>
 <translation id="2096012225669085171">అన్ని పరికరాలలో సింక్ చేయండి మరియు వ్యక్తిగతీకరించండి</translation>
 <translation id="2100273922101894616">స్వీయ సైన్-ఇన్</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">మీరు దీనిని సౌకర్యవంతంగా చదవగలిగే వరకు స్లైడర్‌ను లాగండి. పేరాపై రెండుసార్లు నొక్కిన తర్వాత వచనం కనీసం ఇంత పెద్దదిగా కనిపించాలి.</translation>
 <translation id="2323763861024343754">సైట్ నిల్వ</translation>
 <translation id="2328985652426384049">సైన్ ఇన్ చేయడం సాధ్యపడదు</translation>
-<translation id="2342981853652716282">మీ పరికరాలన్నింటిలో మీ బుక్‌మార్క్‌లు, పాస్‌వర్డ్‌లు మరియు మరిన్నింటిని పొందడానికి Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="2349710944427398404">ఖాతాలు, బుక్‌మార్క్‌లు మరియు సేవ్ చేసిన సెట్టింగ్‌లతో సహా Chrome ద్వారా ఉపయోగించబడిన మొత్తం డేటా</translation>
 <translation id="2351097562818989364">మీ అనువాద సెట్టింగ్‌లు రీసెట్ చేయబడ్డాయి.</translation>
 <translation id="2353636109065292463">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేస్తోంది</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">కొన్ని సైట్‌లలో బ్లాక్ చేయబడింది</translation>
 <translation id="3137521801621304719">అజ్ఞాత మోడ్ నుండి నిష్క్రమించండి</translation>
 <translation id="3143515551205905069">సింక్‌ను రద్దు చేయి</translation>
-<translation id="3148434565183091099">మీ అన్ని పరికరాలలో మీ బుక్‌మార్క్‌లను పొందడానికి, Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="3157842584138209013">'మరిన్ని ఎంపికలు' బటన్ నుండి మీరు ఎంత డేటాను సేవ్ చేసారో చూడండి</translation>
 <translation id="3166827708714933426">ట్యాబ్ మరియు విండో షార్ట్‌కట్‌లు</translation>
 <translation id="3181954750937456830">సురక్షిత బ్రౌజింగ్ (ప్రమాదకరమైన సైట్‌ల నుండి మిమ్మల్ని, మీ పరికరాన్ని రక్షిస్తుంది)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">నిల్వ చేసిన ఆధారాలను ఉపయోగించి ఆటోమేటిక్‌గా వెబ్‌సైట్‌లకు సైన్ ఇన్ చేయండి. ఫీచర్ ఆఫ్ చేయబడినప్పుడు, మీరు వెబ్‌సైట్‌కు సైన్ ఇన్ చేసే ప్రతిసారి ధృవీకరణ కోసం మిమ్మల్ని అడుగుతుంది.</translation>
 <translation id="3658159451045945436">రీసెట్ చేసినట్లయితే, సందర్శించిన సైట్‌ల జాబితాతో పాటు మీ డేటా ఆదాల చరిత్ర తొలగించబడుతుంది.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> ట్యాబ్‌లను సమూహాలుగా వర్గీకరిస్తుంది.</translation>
-<translation id="3672452749423051839">నావిగేషన్ ఎర్రర్ సూచనలు</translation>
 <translation id="3692944402865947621">నిల్వ స్థానాన్ని చేరుకోలేకపోయిన కారణంగా <ph name="FILE_NAME" /> డౌన్‌లోడ్ విఫలమైంది.</translation>
 <translation id="3714981814255182093">శోధన పట్టీని తెరవండి</translation>
 <translation id="3716182511346448902">ఈ పేజీ చాలా మెమరీని ఉపయోగిస్తోంది, కాబట్టి దీన్ని Chrome పాజ్ చేయబడింది.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">శీర్షిక</translation>
 <translation id="4008040567710660924">నిర్దిష్ట సైట్ కోసం కుక్కీలను అనుమతించండి.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# గం}other{# గం}}</translation>
-<translation id="4042870126885713738">వెబ్ చిరునామా సంశయాత్మకంగా ఉన్నప్పుడు లేదా కనెక్షన్ సాధ్యం కానప్పుడు సూచనలను చూపుతుంది</translation>
 <translation id="4046123991198612571">తరువాత ట్రాక్</translation>
 <translation id="4048707525896921369">పేజీ నుండి నిష్క్రమించకుండానే వెబ్‌సైట్‌లలోని అంశాల గురించి తెలుసుకోండి. 'వెతకడానికి నొక్కండి' అనే ఫీచర్, ఒక పదాన్ని మరియు దాని చుట్టూ ఉన్న సంబంధిత సందర్భాన్ని Google శోధనకు పంపుతుంది, ప్రతిస్పందనగా దాని నుండి నిర్వచనాలు, చిత్రాలు, శోధన ఫలితాలు మరియు ఇతర వివరాలు అందించబడతాయి.
 
@@ -438,7 +430,6 @@
     - మీ కదలికలు, అంటే మీరు ఎలా నడుస్తారు లాంటివి
 
     మీరు యాక్సెస్ ఇచ్చే ముందు ఈ సైట్‌ను విశ్వసిస్తున్నట్లు నిర్ధారించండి.</translation>
-<translation id="424864128008805179">Chrome నుండి సైన్ అవుట్ చేయాలా?</translation>
 <translation id="4256782883801055595">ఓపెన్ సోర్స్ లైసెన్స్‌లు</translation>
 <translation id="4259722352634471385">నావిగేషన్ బ్లాక్ చేయబడింది: <ph name="URL" /></translation>
 <translation id="4269820728363426813">లింక్ చిరునామాను కాపీ చేయి</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">ఫోన్</translation>
 <translation id="4384468725000734951">శోధన కోసం Sogouను ఉపయోగిస్తుంది</translation>
 <translation id="4404568932422911380">బుక్‌మార్క్‌లు లేవు</translation>
-<translation id="4409723563706114196">పేజీ సూచనలను ఉపయోగించండి</translation>
 <translation id="4411535500181276704">లైట్ మోడ్</translation>
 <translation id="4415276339145661267">మీ Google ఖాతాను నిర్వహించండి</translation>
 <translation id="4432792777822557199">ఇప్పటి నుండి <ph name="SOURCE_LANGUAGE" />లో ఉన్న పేజీలు <ph name="TARGET_LANGUAGE" />కు అనువదించబడతాయి</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">మీ VR సెన్సార్‌లను యాక్సెస్ చేయడానికి ఈ సైట్‌ను అనుమతించాలా?</translation>
 <translation id="5210286577605176222">మునుపటి ట్యాబ్‌కు వెళ్లండి</translation>
 <translation id="5210365745912300556">ట్యాబ్‌ను మూసివేయి</translation>
-<translation id="5222676887888702881">సైన్ ఔట్</translation>
 <translation id="5224771365102442243">వీడియోతో</translation>
 <translation id="5233638681132016545">కొత్త‌ టాబ్</translation>
 <translation id="526421993248218238">ఈ పేజీని లోడ్ చేయడం సాధ్యం కాదు</translation>
 <translation id="5271967389191913893">పరికరం డౌన్‌లోడ్ చేయాల్సిన కంటెంట్‌ను తెరవలేదు.</translation>
 <translation id="528192093759286357">పూర్తి స్క్రీన్ నుండి నిష్క్రమించడానికి పైనుండి లాగి, వెనుకకు బటన్‌ను తాకండి.</translation>
-<translation id="5284584623296338184">మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు, ఇతర సెట్టింగ్‌లకు చేసే మార్పులు ఇకపై మీ Google ఖాతాకు సింక్ చేయ‌బడవు. అయితే, ఇప్పటికే ఉన్న మీ డేటా మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది.</translation>
 <translation id="5292796745632149097">ఈ పరికరానికి పంపండి</translation>
 <translation id="5300589172476337783">చూపించు</translation>
 <translation id="5301954838959518834">సరే, అర్థమైంది</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">అజ్ఞాత ట్యాబ్‌లు</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>
 <translation id="5797070761912323120">శోధన, ప్రకటనలు, ఇతర Google సేవలను వ్యక్తిగతీకరించడానికి Google మీ చరిత్రను ఉపయోగించే అవకాశం ఉంటుంది</translation>
 <translation id="5804241973901381774">అనుమతులు</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">పేరు చాలా పొడువు ఉంది</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# ఫోటో}other{# ఫోటోలు}}</translation>
 <translation id="6447842834002726250">కుక్కీలు</translation>
-<translation id="6448273550210938826">శోధన మరియు URL సూచనలు</translation>
 <translation id="6461962085415701688">ఫైల్‌ను తెరవడం సాధ్యపడదు</translation>
 <translation id="6464977750820128603">Chromeలో మీరు ఏయే సైట్‌లను సందర్శించారో చూడవచ్చు, వాటికి టైమర్‌లను సెట్ చేయవచ్చు.\n\nమీరు టైమర్‌లను సెట్ చేసిన సైట్‌ల సమాచారం, మీరు ఎంతసేపు వాటిని సందర్శించారనే వివరాలు Googleకు అందించబడతాయి. డిజిటల్ సంక్షేమాన్ని మరింత మెరుగుపరచడానికి ఈ సమాచారం ఉపయోగించబడుతుంది.</translation>
 <translation id="6475951671322991020">వీడియోను డౌన్‌లోడ్ చేయి</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">పరికరాల కోసం స్కాన్ చేయడానికి Chromeకు స్థాన యాక్సెస్ అవసరం. <ph name="BEGIN_LINK" />అనుమతులను అప్‌డేట్ చేయండి<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">పాస్‌వర్డ్</translation>
 <translation id="6659594942844771486">ట్యాబ్</translation>
-<translation id="666268767214822976">మీరు చిరునామా పట్టీలో టైప్ చేస్తున్నప్పుడు సంబంధిత ప్రశ్నలను మరియు జనాదరణ పొందిన వెబ్‌సైట్‌లను చూపడానికి సూచన సేవను ఉపయోగించండి</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" />లో తెరువు</translation>
 <translation id="666981079809192359">Chrome గోప్యతా నోటీసు</translation>
 <translation id="6697492270171225480">పేజీ కనుగొనబడనప్పుడు అటువంటి పేజీల కోసం సూచనలను చూపుతుంది</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">తొలగించు</translation>
 <translation id="8266862848225348053">డౌన్‌లోడ్‌ల ఫోల్డర్</translation>
 <translation id="8274165955039650276">డౌన్‌లోడ్‌లు చూడండి</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" />కు సమకాలీకరిస్తోంది</translation>
 <translation id="8284326494547611709">ఉపశీర్షికలు</translation>
 <translation id="8300705686683892304">యాప్ ద్వారా నిర్వహించబడుతున్నవి</translation>
 <translation id="8310344678080805313">ప్రామాణిక ట్యాబ్‌లు</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">పెండింగ్‌లో ఉంది</translation>
 <translation id="8970887620466824814">ఏదో తప్పు జరిగింది.</translation>
 <translation id="8972098258593396643">డిఫాల్ట్ ఫోల్డర్‌కు డౌన్‌లోడ్ చేయాలా?</translation>
-<translation id="8981454092730389528">Google కార్య‌క‌లాపాల నియంత్రణలు</translation>
 <translation id="8986494364107987395">Googleకు ఆటోమేటిక్‌గా వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను పంపు</translation>
 <translation id="8993760627012879038">కొత్త ట్యాబ్‌ను అజ్ఞాత మోడ్‌లో తెరవండి</translation>
 <translation id="8998729206196772491">మీరు <ph name="MANAGED_DOMAIN" /> నిర్వహణలో ఉన్న ఖాతా నుండి సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకులకు మీ Chrome డేటాపై నియంత్రణను అందిస్తున్నారు. మీ డేటా శాశ్వతంగా ఈ ఖాతాకు అనుబంధించబడుతుంది. Chrome నుండి సైన్ అవుట్ చేయడం వ‌ల్ల ఈ పరికరం నుండి మీ డేటా తొలగించబడుతుంది. కానీ ఇది మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
index 50ffc8c7..aabbe031 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">ล้างประวัติการเข้าชม คุกกี้ ข้อมูลเว็บไซต์ แคช…</translation>
 <translation id="129553762522093515">เพิ่งปิด</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - ส่งจาก <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">ลงชื่อเข้าใช้ Chrome เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
 <translation id="1331212799747679585">อัปเดต Chrome ไม่ได้ ตัวเลือกอื่นๆ</translation>
 <translation id="1332501820983677155">แป้นพิมพ์ลัดสำหรับฟีเจอร์ของ Google Chrome</translation>
 <translation id="1360432990279830238">ออกจากระบบและปิดการซิงค์ไหม</translation>
-<translation id="136248372334525878">โหลดหน้าเว็บไว้ล่วงหน้าเพื่อให้โหลดได้เร็วและไว้อ่านแบบออฟไลน์</translation>
 <translation id="1369915414381695676">เพิ่มเว็บไซต์ <ph name="SITE_NAME" /> แล้ว</translation>
 <translation id="1373696734384179344">หน่วยความจำไม่เพียงพอที่จะดาวน์โหลดเนื้อหาที่เลือก</translation>
 <translation id="1376578503827013741">กำลังประมวลผล…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">แท็บที่เลือก</translation>
 <translation id="194341124344773587">เปิดการใช้สิทธิ์สำหรับ Chrome ใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /></translation>
 <translation id="1943432128510653496">บันทึกรหัสผ่าน</translation>
-<translation id="1946005195648379376">ควบคุมวิธีที่ Google ใช้ประวัติการท่องเว็บของคุณเพื่อปรับเปลี่ยนการค้นหาในแบบของคุณและบริการอื่นๆ ของ Google</translation>
 <translation id="1952172573699511566">เมื่อเป็นไปได้ เว็บไซต์จะแสดงในภาษาที่คุณต้องการ</translation>
 <translation id="1960290143419248813">Android เวอร์ชันนี้ไม่รองรับการอัปเดต Chrome อีกต่อไปแล้ว</translation>
 <translation id="1966710179511230534">โปรดอัปเดตรายละเอียดการลงชื่อเข้าใช้ของคุณ</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">แตะเพื่อค้นหา</translation>
 <translation id="2079545284768500474">เลิกทำ</translation>
 <translation id="2082238445998314030">ผลลัพธ์ <ph name="RESULT_NUMBER" /> จาก <ph name="TOTAL_RESULTS" /> รายการ</translation>
-<translation id="2086652334978798447">หากต้องการรับคำแนะนำเนื้อหาที่เหมาะสำหรับคุณจาก Google ให้ลงชื่อเข้าใช้ Chrome</translation>
 <translation id="2091887806945687916">เสียง</translation>
 <translation id="2096012225669085171">ซิงค์และปรับแต่งในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">ลากแถบเลื่อนจนกว่าคุณจะสามารถอ่านได้อย่างสะดวก ข้อความควรมีขนาดเท่านี้เป็นอย่างน้อยหลังจากแตะ 2 ครั้งบนย่อหน้า</translation>
 <translation id="2323763861024343754">พื้นที่เก็บข้อมูลเว็บไซต์</translation>
 <translation id="2328985652426384049">ลงชื่อเข้าใช้ไม่ได้</translation>
-<translation id="2342981853652716282">ลงชื่อเข้าใช้ Chrome เพื่อรับบุ๊กมาร์ก รหัสผ่าน และข้อมูลอื่นๆ ในอุปกรณ์ทุกเครื่องของคุณ</translation>
 <translation id="2349710944427398404">ข้อมูลทั้งหมดที่ Chrome ใช้ รวมถึงบัญชี บุ๊กมาร์ก และการตั้งค่าที่บันทึกไว้</translation>
 <translation id="2351097562818989364">รีเซ็ตการตั้งค่าการแปลภาษาของคุณแล้ว</translation>
 <translation id="2353636109065292463">ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">บล็อกในบางเว็บไซต์</translation>
 <translation id="3137521801621304719">ออกจากโหมดไม่ระบุตัวตน</translation>
 <translation id="3143515551205905069">ยกเลิกการซิงค์</translation>
-<translation id="3148434565183091099">ลงชื่อเข้าใช้ Chrome เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation>
 <translation id="3157842584138209013">ดูปริมาณอินเทอร์เน็ตที่คุณประหยัดไปได้จากปุ่มตัวเลือกเพิ่มเติม</translation>
 <translation id="3166827708714933426">แป้นพิมพ์ลัดสำหรับแท็บและหน้าต่าง</translation>
 <translation id="3181954750937456830">Google Safe Browsing (ปกป้องคุณและอุปกรณ์จากเว็บไซต์ที่เป็นอันตราย)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">ลงชื่อเข้าใช้เว็บไซต์โดยอัตโนมัติโดยใช้ข้อมูลเข้าสู่ระบบที่เก็บไว้ เมื่อฟีเจอร์นี้ปิดอยู่ ระบบจะขอให้คุณยืนยันทุกครั้งก่อนลงชื่อเข้าใช้เว็บไซต์</translation>
 <translation id="3658159451045945436">การรีเซ็ตจะลบประวัติการประหยัดเน็ต รวมถึงรายการเว็บไซต์ที่เข้าชม</translation>
 <translation id="3663367437272849150">จับกลุ่ม <ph name="NUM_SELECTED" /> แท็บ</translation>
-<translation id="3672452749423051839">คำแนะนำเมื่อเกิดข้อผิดพลาดในการนำทาง</translation>
 <translation id="3692944402865947621">ดาวน์โหลด <ph name="FILE_NAME" /> ไม่สำเร็จเนื่องจากเข้าถึงตำแหน่งที่เก็บข้อมูลไม่ได้</translation>
 <translation id="3714981814255182093">เปิดแถบค้นหา</translation>
 <translation id="3716182511346448902">หน้านี้ใช้หน่วยความจำมากเกินไป Chrome จึงหยุดหน้าชั่วคราว</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">ชื่อ</translation>
 <translation id="4008040567710660924">อนุญาตคุกกี้ของเว็บไซต์ที่เจาะจง</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ชม.}other{# ชม.}}</translation>
-<translation id="4042870126885713738">แสดงคำแนะนำเมื่อไม่สามารถระบุที่อยู่เว็บหรือไม่สามารถเชื่อมต่อได้</translation>
 <translation id="4046123991198612571">แทร็กถัดไป</translation>
 <translation id="4048707525896921369">ดูข้อมูลเกี่ยวกับหัวข้อในเว็บไซต์โดยไม่ต้องออกจากหน้า แตะเพื่อค้นหาจะส่งคำและบริบทที่อยู่ข้างเคียงไปยัง Google Search เพื่อแสดงคำจำกัดความ รูปภาพ ผลการค้นหา และรายละเอียดอื่นๆ
 
@@ -438,7 +430,6 @@
     - การเคลื่อนไหว เช่น ลักษณะการเดิน
 
      โปรดตรวจสอบว่าเว็บไซต์นี้เชื่อถือได้ก่อนอนุญาตการเข้าถึง</translation>
-<translation id="424864128008805179">ต้องการออกจากระบบ Chrome ไหม</translation>
 <translation id="4256782883801055595">ใบอนุญาตโอเพนซอร์ส</translation>
 <translation id="4259722352634471385">มีการบล็อกการนำทาง: <ph name="URL" /></translation>
 <translation id="4269820728363426813">คัดลอกที่อยู่ลิงก์</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">โทรศัพท์</translation>
 <translation id="4384468725000734951">กำลังใช้ Sogou ในการค้นหา</translation>
 <translation id="4404568932422911380">ไม่มีบุ๊กมาร์ก</translation>
-<translation id="4409723563706114196">ใช้การคาดคะเนหน้า</translation>
 <translation id="4411535500181276704">โหมด Lite</translation>
 <translation id="4415276339145661267">จัดการบัญชี Google</translation>
 <translation id="4432792777822557199">จากนี้ไประบบจะแปลหน้าภาษา<ph name="SOURCE_LANGUAGE" />เป็นภาษา<ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">อนุญาตให้เว็บไซต์นี้เข้าถึงเซ็นเซอร์ VR ไหม</translation>
 <translation id="5210286577605176222">ข้ามไปยังแท็บก่อนหน้า</translation>
 <translation id="5210365745912300556">ปิดแท็บ</translation>
-<translation id="5222676887888702881">ออกจากระบบ</translation>
 <translation id="5224771365102442243">มีวิดีโอ</translation>
 <translation id="5233638681132016545">แท็บใหม่</translation>
 <translation id="526421993248218238">โหลดหน้านี้ไม่ได้</translation>
 <translation id="5271967389191913893">อุปกรณ์ไม่สามารถเปิดเนื้อหาที่จะดาวน์โหลดได้</translation>
 <translation id="528192093759286357">ลากจากด้านบน แล้วแตะปุ่มกลับเพื่อออกจากโหมดเต็มหน้าจอ</translation>
-<translation id="5284584623296338184">การเปลี่ยนแปลงบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะไม่ซิงค์กับบัญชี Google ของคุณอีกต่อไป อย่างไรก็ตาม ข้อมูลที่คุณมีจะยังคงจัดเก็บอยู่ในบัญชี Google ของคุณ</translation>
 <translation id="5292796745632149097">ส่งไปที่</translation>
 <translation id="5300589172476337783">แสดง</translation>
 <translation id="5301954838959518834">ตกลง เข้าใจแล้ว</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">แท็บที่ไม่ระบุตัวตน</translation>
 <translation id="5763514718066511291">แตะเพื่อคัดลอก URL สำหรับแอปนี้</translation>
 <translation id="5765780083710877561">คำอธิบาย:</translation>
-<translation id="5777170031995031090">ควบคุมวิธีที่ Google ใช้ประวัติการท่องเว็บของคุณเพื่อปรับเปลี่ยนการค้นหา โฆษณา และบริการอื่นๆ ของ Google ในแบบของคุณ</translation>
 <translation id="5793665092639000975">ใช้ไป <ph name="SPACE_USED" /> จาก <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google อาจใช้ประวัติการเข้าชมเพื่อปรับเปลี่ยน Search, โฆษณา และบริการอื่นๆ ของ Google ให้เข้ากับคุณ</translation>
 <translation id="5804241973901381774">การอนุญาต</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">ชื่อยาวเกินไป</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# ภาพ}other{# ภาพ}}</translation>
 <translation id="6447842834002726250">คุกกี้</translation>
-<translation id="6448273550210938826">การค้นหาและคำแนะนำ URL</translation>
 <translation id="6461962085415701688">เปิดไฟล์ไม่ได้</translation>
 <translation id="6464977750820128603">คุณดูเว็บไซต์ที่เข้าชมใน Chrome และตั้งตัวจับเวลาการใช้เว็บไซต์เหล่านั้นได้\n\nGoogle จะได้รับข้อมูลเกี่ยวกับเว็บไซต์ที่คุณตั้งตัวจับเวลาไว้และระยะเวลาที่คุณเข้าชมเว็บไซต์เหล่านั้น เราจะใช้ข้อมูลนี้เพื่อปรับปรุงไลฟ์สไตล์ดิจิทัลให้ดียิ่งขึ้น</translation>
 <translation id="6475951671322991020">ดาวน์โหลดวิดีโอ</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome ต้องมีสิทธิ์เข้าถึงตำแหน่งเพื่อสแกนหาอุปกรณ์ โปรด<ph name="BEGIN_LINK" />อัปเดตสิทธิ์<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">รหัสผ่าน</translation>
 <translation id="6659594942844771486">แท็บ</translation>
-<translation id="666268767214822976">ใช้บริการการคาดคะเนเพื่อแสดงคำค้นหาที่เกี่ยวข้องและเว็บไซต์ยอดนิยมขณะที่คุณพิมพ์ในแถบที่อยู่</translation>
 <translation id="666731172850799929">เปิดใน <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">ประกาศเกี่ยวกับนโยบายความเป็นส่วนตัวของ Chrome</translation>
 <translation id="6697492270171225480">แสดงคำแนะนำหน้าที่คล้ายกันเมื่อไม่พบหน้าเว็บ</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">ลบ</translation>
 <translation id="8266862848225348053">ตำแหน่งที่ดาวน์โหลด</translation>
 <translation id="8274165955039650276">ดูการดาวน์โหลด</translation>
-<translation id="8283853025636624853">กำลังซิงค์กับ <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">คำบรรยาย</translation>
 <translation id="8300705686683892304">จัดการโดยแอป</translation>
 <translation id="8310344678080805313">แท็บมาตรฐาน</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">รอดำเนินการ</translation>
 <translation id="8970887620466824814">มีบางอย่างผิดพลาด</translation>
 <translation id="8972098258593396643">ดาวน์โหลดลงโฟลเดอร์เริ่มต้นไหม</translation>
-<translation id="8981454092730389528">ส่วนควบคุมกิจกรรมของ Google</translation>
 <translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation>
 <translation id="8993760627012879038">เปิดแท็บใหม่ในโหมดไม่ระบุตัวตน</translation>
 <translation id="8998729206196772491">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการโดย <ph name="MANAGED_DOMAIN" /> และทำให้ผู้ดูแลระบบของโดเมนควบคุมข้อมูล Chrome ของคุณได้ ข้อมูลดังกล่าวจะโยงกับบัญชีนี้อย่างถาวร การออกจากระบบ Chrome จะลบข้อมูลของคุณออกจากอุปกรณ์เครื่องนี้ แต่ข้อมูลจะยังจัดเก็บอยู่ในบัญชี Google</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
index 5dd35388..899e44a1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Geçmişi, çerezleri, site verilerini, önbelleği temizleyin…</translation>
 <translation id="129553762522093515">Son kapatılan</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - <ph name="DEVICE_NAME" /> cihazından gönderildi</translation>
-<translation id="1326317727527857210">Diğer cihazlarınızdaki sekmelerinize ulaşmak için Chrome'da oturum açın.</translation>
 <translation id="1331212799747679585">Chrome güncellenemiyor. Diğer seçenekler</translation>
 <translation id="1332501820983677155">Google Chrome'un özellik kısayolları</translation>
 <translation id="1360432990279830238">Oturum ve senkronizasyon kapatılsın mı?</translation>
-<translation id="136248372334525878">Daha hızlı yükleme ve çevrimdışı okuma için sayfaları önceden yükle</translation>
 <translation id="1369915414381695676"><ph name="SITE_NAME" /> sitesi eklendi</translation>
 <translation id="1373696734384179344">Seçilen içeriği indirmek için bellek yetersiz.</translation>
 <translation id="1376578503827013741">Hesaplanıyor…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Seçili Sekme</translation>
 <translation id="194341124344773587"><ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda Chrome için izni açın.</translation>
 <translation id="1943432128510653496">Şifreleri kaydet</translation>
-<translation id="1946005195648379376">Google'ın, Arama ve diğer Google hizmetlerini kişiselleştirmek için tarama geçmişinizi nasıl kullanacağını kontrol edin.</translation>
 <translation id="1952172573699511566">Web siteleri, mümkün olduğunda metni tercih ettiğiniz dilde gösterir.</translation>
 <translation id="1960290143419248813">Chrome güncellemeleri Android'in bu sürümü için artık desteklenmiyor</translation>
 <translation id="1966710179511230534">Lütfen oturum açma ayrıntılarınızı güncelleyin.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Dokun ve Ara</translation>
 <translation id="2079545284768500474">Geri al</translation>
 <translation id="2082238445998314030"><ph name="TOTAL_RESULTS" /> sonuçtan <ph name="RESULT_NUMBER" /> numaralı sonuç</translation>
-<translation id="2086652334978798447">Google tarafından önerilen kişiselleştirilmiş içeriği almak için Chrome'da oturum açın.</translation>
 <translation id="2091887806945687916">Ses</translation>
 <translation id="2096012225669085171">Cihazlar arasında senkronizasyon ve kişiselleştirme</translation>
 <translation id="2100273922101894616">Otomatik Oturum Aç</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Bu yazıyı rahatça okuyana kadar kaydırma çubuğunu sürükleyin. Bir paragrafa iki kez hafifçe dokunduğunuzda metin en az bunun kadar büyük görünmelidir.</translation>
 <translation id="2323763861024343754">Site depolama alanı</translation>
 <translation id="2328985652426384049">Oturum açılamıyor</translation>
-<translation id="2342981853652716282">Tüm cihazlarınızda yer işaretlerinizi, şifrelerinizi almak ve daha pek çok şey yapmak için Chrome'da oturum açın.</translation>
 <translation id="2349710944427398404">Hesaplar, yer işaretleri ve kayıtlı ayarlar da dahil olmak üzere Chrome tarafından kullanılan tüm veriler</translation>
 <translation id="2351097562818989364">Çeviri ayarlarınız sıfırlandı.</translation>
 <translation id="2353636109065292463">İnternet bağlantınızı kontrol etme</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Bazı sitelerde engellendi</translation>
 <translation id="3137521801621304719">Gizli moddan çık</translation>
 <translation id="3143515551205905069">Senkronizasyonu iptal et</translation>
-<translation id="3148434565183091099">Yer işaretlerinizi tüm cihazlarınızda almak için Chrome'da oturum açın.</translation>
 <translation id="3157842584138209013">Diğer Seçenekler düğmesini kullanarak ne kadar veri tasarrufu sağladığınıza bakın</translation>
 <translation id="3166827708714933426">Sekme ve pencere kısayolları</translation>
 <translation id="3181954750937456830">Gizli Göz Atma (sizi ve cihazınızı tehlikelerden korur)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Depolanmış kimlik bilgileriyle web sitelerinde otomatik olarak oturum açın. Bu özellik kapatıldığında, bir web sitesinde oturum açmadan önce her defasında doğrulama yapmanız istenir.</translation>
 <translation id="3658159451045945436">Sıfırlama işlemi, ziyaret edilen sitelerin listesi de dahil olmak üzere veri tasarrufu geçmişinizi siler.</translation>
 <translation id="3663367437272849150"><ph name="NUM_SELECTED" /> sekmeyi grupla.</translation>
-<translation id="3672452749423051839">Gezinme hataları ile ilgili öneriler</translation>
 <translation id="3692944402865947621">Depolama konumuna erişilemediği için <ph name="FILE_NAME" /> dosyası indirilemedi.</translation>
 <translation id="3714981814255182093">Bulma Çubuğu'nu açar</translation>
 <translation id="3716182511346448902">Bu sayfa, bellekte çok fazla yer kapladığından Chrome tarafından duraklatıldı.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Başlık</translation>
 <translation id="4008040567710660924">Belirli bir site için çerezlere izin verin.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# sa.}other{# sa.}}</translation>
-<translation id="4042870126885713738">Bir web adresi çözümlenemezse veya bağlantı yapılamazsa öneriler göster</translation>
 <translation id="4046123991198612571">Sonraki parça</translation>
 <translation id="4048707525896921369">Sayfadan ayrılmadan web siteleriyle ilgili konuları öğrenin. Dokun ve Ara özelliği seçilen kelimeyi, çevresindeki içerikle birlikte Google Arama'ya gönderir ve karşılığında ilgili tanımlar, resimler, arama sonuçları ve diğer ayrıntıları döndürür.
 
@@ -438,7 +430,6 @@
     - Hareketleriniz (ör. yürüme biçiminiz)
 
     Erişime izin vermeden önce bu siteye güvendiğinizden emin olun.</translation>
-<translation id="424864128008805179">Chrome oturumu kapatılsın mı?</translation>
 <translation id="4256782883801055595">Açık kaynak lisansları</translation>
 <translation id="4259722352634471385">Gezinme engellendi: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Bağlantı adresini kopyala</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4384468725000734951">Arama için Sogou kullanılıyor</translation>
 <translation id="4404568932422911380">Yer işareti yok</translation>
-<translation id="4409723563706114196">Sayfa tahminlerini kullan</translation>
 <translation id="4411535500181276704">Basit mod</translation>
 <translation id="4415276339145661267">Google Hesabınızı yönetin</translation>
 <translation id="4432792777822557199"><ph name="SOURCE_LANGUAGE" /> dilindeki sayfalar artık <ph name="TARGET_LANGUAGE" /> diline çevrilecek</translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Bu sitenin VR sensörlerinize erişmesine izin verilsin mi?</translation>
 <translation id="5210286577605176222">Önceki sekmeye gider</translation>
 <translation id="5210365745912300556">Sekmeyi kapat</translation>
-<translation id="5222676887888702881">Çıkış</translation>
 <translation id="5224771365102442243">Videolu</translation>
 <translation id="5233638681132016545">Yeni sekme</translation>
 <translation id="526421993248218238">Bu sayfa yüklenemiyor</translation>
 <translation id="5271967389191913893">Cihaz, indirilecek içeriği açamıyor.</translation>
 <translation id="528192093759286357">Tam ekrandan çıkmak için yukarıdan sürükleyin ve geri düğmesine dokunun.</translation>
-<translation id="5284584623296338184">Yer işaretleri, geçmiş, şifreler ve diğer ayarlarınızda yaptığınız değişiklikler artık Google Hesabınız ile senkronize edilmeyecek. Ancak, mevcut verileriniz Google hesabınızda saklanmaya devam edecek.</translation>
 <translation id="5292796745632149097">Alıcılar</translation>
 <translation id="5300589172476337783">Göster</translation>
 <translation id="5301954838959518834">Tamam, anladım</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Gizli mod sekmeleri</translation>
 <translation id="5763514718066511291">Bu uygulamanın URL'sini kopyalamak için dokunun</translation>
 <translation id="5765780083710877561">Açıklama:</translation>
-<translation id="5777170031995031090">Google'ın Arama, reklamlar ve diğer Google hizmetlerini kişiselleştirmek için tarama geçmişinizi nasıl kullanacağını kontrol edin.</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> / <ph name="SPACE_AVAILABLE" /> kullanılıyor</translation>
 <translation id="5797070761912323120">Google; Arama, reklamlar ve diğer Google hizmetlerini kişiselleştirmek için geçmişinizi kullanabilir</translation>
 <translation id="5804241973901381774">İzinler</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Ad çok uzun</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# Resim}other{# Resim}}</translation>
 <translation id="6447842834002726250">Çerezler</translation>
-<translation id="6448273550210938826">Arama ve URL önerileri</translation>
 <translation id="6461962085415701688">Dosya açılamıyor</translation>
 <translation id="6464977750820128603">Chrome'da ziyaret ettiğiniz siteleri görebilir ve bunlar için zamanlayıcı ayarlayabilirsiniz.\n\nGoogle, hangi siteler için zamanlayıcı ayarladığınız ve bu siteleri ne kadar süre boyunca ziyaret ettiğiniz konusunda bilgi alır. Bu bilgi, Dijital Denge'yi daha iyi hale getirmek için kullanılır.</translation>
 <translation id="6475951671322991020">Videoyu indir</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome'un cihazları taraması için konuma erişmesi gerekiyor. <ph name="BEGIN_LINK" />İzinleri güncelleyin<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Şifre</translation>
 <translation id="6659594942844771486">Sekme</translation>
-<translation id="666268767214822976">Adres çubuğuna yazarken ilgili sorguları ve popüler siteleri göstermek için bir tahmin hizmeti kullan</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> uygulamasında aç</translation>
 <translation id="666981079809192359">Chrome Gizlilik Uyarısı</translation>
 <translation id="6697492270171225480">Bir sayfa bulunamadığında benzer sayfalar için önerileri göster</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Sil</translation>
 <translation id="8266862848225348053">İndirme konumu</translation>
 <translation id="8274165955039650276">İndirilenleri göster</translation>
-<translation id="8283853025636624853"><ph name="SYNC_ACCOUNT_USER_NAME" /> ile senkronize ediliyor</translation>
 <translation id="8284326494547611709">Altyazılar</translation>
 <translation id="8300705686683892304">Uygulama tarafından yönetiliyor</translation>
 <translation id="8310344678080805313">Standart sekmeler</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">beklemede</translation>
 <translation id="8970887620466824814">Bir hata oluştu.</translation>
 <translation id="8972098258593396643">Varsayılan klasöre indirilsin mi?</translation>
-<translation id="8981454092730389528">Google Etkinlik Kontrolleri</translation>
 <translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation>
 <translation id="8993760627012879038">Gizli modda yeni bir sekme açar</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> tarafından yönetilen bir hesapla oturum açıyorsunuz ve yöneticiye tüm Chrome verileriniz üzerinde denetim olanağı veriyorsunuz. Verileriniz kalıcı olarak bu hesaba bağlanacaktır. Chrome'da oturumu kapattığınızda verileriniz bu cihazdan silinir, ancak Google Hesabınızda kalmaya devam eder.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
index 56496e0..16c30d5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Очистити історію, файли cookie, дані сайтів, кеш…</translation>
 <translation id="129553762522093515">Нещодавно закриті</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Надіслано з пристрою "<ph name="DEVICE_NAME" />"</translation>
-<translation id="1326317727527857210">Щоб мати доступ до вкладок з інших пристроїв, увійдіть в обліковий запис Chrome.</translation>
 <translation id="1331212799747679585">Неможливо оновити Chrome. Більше опцій</translation>
 <translation id="1332501820983677155">Комбінації клавіш для функцій Google Chrome</translation>
 <translation id="1360432990279830238">Вийти й вимкнути синхронізацію?</translation>
-<translation id="136248372334525878">Попередньо завантажує сторінки, щоб швидше завантажувати та переглядати їх у режимі офлайн</translation>
 <translation id="1369915414381695676">Сайт <ph name="SITE_NAME" /> додано</translation>
 <translation id="1373696734384179344">Недостатньо пам’яті, щоб завантажити вибраний вміст.</translation>
 <translation id="1376578503827013741">Обчислення…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Вибрана вкладка</translation>
 <translation id="194341124344773587">Увімкніть дозвіл для Chrome у <ph name="BEGIN_LINK" />налаштуваннях Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Зберігання паролів</translation>
-<translation id="1946005195648379376">Укажіть, як Google має використовувати вашу історію веб-перегляду, щоб персоналізувати Пошук та інші служби Google.</translation>
 <translation id="1952172573699511566">Якщо можливо, текст на веб-сайтах відображатиметься вибраною мовою.</translation>
 <translation id="1960290143419248813">Chrome більше не оновлюється в цій версії Android</translation>
 <translation id="1966710179511230534">Оновіть свої дані для входу.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Торкніться, щоб шукати</translation>
 <translation id="2079545284768500474">Відмінити</translation>
 <translation id="2082238445998314030">Результат <ph name="RESULT_NUMBER" /> з <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Щоб отримувати персоналізовані пропозиції від Google, увійдіть в обліковий запис Chrome.</translation>
 <translation id="2091887806945687916">Сигнал</translation>
 <translation id="2096012225669085171">Синхронізація та персоналізація на всіх пристроях</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Перетягуйте повзунок, доки розмір тексту не стане зручним для читання. Якщо двічі торкнутись абзацу, розмір тексту має стати принаймні таким, як цей.</translation>
 <translation id="2323763861024343754">Дані сайтів</translation>
 <translation id="2328985652426384049">Не вдається ввійти</translation>
-<translation id="2342981853652716282">Увійдіть в обліковий запис у Chrome, щоб мати доступ до своїх закладок, паролів та інших даних на всіх пристроях.</translation>
 <translation id="2349710944427398404">Усі дані, які використовує Chrome, зокрема облікові записи, закладки та збережені налаштування</translation>
 <translation id="2351097562818989364">Налаштування перекладу скинуто.</translation>
 <translation id="2353636109065292463">Перевірка інтернет-з’єднання</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Заблоковано на деяких сайтах</translation>
 <translation id="3137521801621304719">Вийти з режиму анонімного перегляду</translation>
 <translation id="3143515551205905069">Скасувати синхронізацію</translation>
-<translation id="3148434565183091099">Щоб мати доступ до закладок на всіх своїх пристроях, увійдіть в обліковий запис Chrome.</translation>
 <translation id="3157842584138209013">Перевірте обсяг збережених даних за допомогою кнопки "Більше опцій"</translation>
 <translation id="3166827708714933426">Комбінації клавіш для роботи з вкладками та вікнами</translation>
 <translation id="3181954750937456830">Безпечний перегляд (захищає вас і ваш пристрій від небезпечних сайтів)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Автоматично входити в облікові записи на веб-сайтах за допомогою збережених даних. Якщо цю функцію вимкнено, потрібно вводити облікові дані під час кожного входу.</translation>
 <translation id="3658159451045945436">Буде скинуто історію заощадження трафіку, зокрема список відвіданих веб-сайтів.</translation>
 <translation id="3663367437272849150">Згрупувати стільки вкладок: <ph name="NUM_SELECTED" />.</translation>
-<translation id="3672452749423051839">Пропозиції у випадку помилок навігації</translation>
 <translation id="3692944402865947621">Не вдалося завантажити файл <ph name="FILE_NAME" />. Місце зберігання недоступне.</translation>
 <translation id="3714981814255182093">Відкрити рядок пошуку</translation>
 <translation id="3716182511346448902">Ця сторінка займає велику кількість пам’яті, тому Chrome призупинив її роботу.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Назва</translation>
 <translation id="4008040567710660924">Дозволити файли cookie для конкретного сайту.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# год}one{# год}few{# год}many{# год}other{# год}}</translation>
-<translation id="4042870126885713738">Показувати пропозиції, коли неможливо перейти за веб-адресою чи не вдається встановити з’єднання</translation>
 <translation id="4046123991198612571">Наступна композиція</translation>
 <translation id="4048707525896921369">Дізнавайтеся більше про певну тему, не залишаючи сторінку, яку переглядаєте. Просто торкніться певного слова, щоб надіслати його в Пошук Google разом із контекстом, і отримаєте визначення, зображення, результати пошуку й іншу інформацію.
 
@@ -438,7 +430,6 @@
     - рухів (наприклад, типу ходьби).
 
     Переконайтеся, що довіряєте цьому сайту, перш ніж надати доступ.</translation>
-<translation id="424864128008805179">Вийти з Chrome?</translation>
 <translation id="4256782883801055595">Ліцензії ПЗ з відкритим кодом</translation>
 <translation id="4259722352634471385">Веб-сторінку <ph name="URL" /> заблоковано</translation>
 <translation id="4269820728363426813">Копіювати адресу посилання</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Телефон</translation>
 <translation id="4384468725000734951">Пошук за допомогою Sogou</translation>
 <translation id="4404568932422911380">Немає закладок</translation>
-<translation id="4409723563706114196">Використання передбачень сторінки</translation>
 <translation id="4411535500181276704">Спрощений режим</translation>
 <translation id="4415276339145661267">Керуйте обліковим записом Google</translation>
 <translation id="4432792777822557199">Надалі сторінки цією мовою (<ph name="SOURCE_LANGUAGE" />) перекладатимуться такою мовою: <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Дозволити цьому сайту доступ до датчиків VR?</translation>
 <translation id="5210286577605176222">Перейти до попередньої вкладки</translation>
 <translation id="5210365745912300556">Закрити вкладку</translation>
-<translation id="5222676887888702881">Вийти</translation>
 <translation id="5224771365102442243">З відео</translation>
 <translation id="5233638681132016545">Нова вкладка</translation>
 <translation id="526421993248218238">Не вдається завантажити цю сторінку</translation>
 <translation id="5271967389191913893">Вміст, який ви хочете завантажити, не можна відкрити на цьому пристрої.</translation>
 <translation id="528192093759286357">Щоб вийти з повноекранного режиму, проведіть пальцем по екрану згори вниз і торкніться кнопки "Назад".</translation>
-<translation id="5284584623296338184">Зміни в закладках, історії, паролях та інших налаштуваннях більше не синхронізуватимуться з вашим обліковим записом Google. Однак наявні дані залишаться у вашому обліковому записі Google.</translation>
 <translation id="5292796745632149097">Кому надіслати:</translation>
 <translation id="5300589172476337783">Показати</translation>
 <translation id="5301954838959518834">OK</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Анонімні вкладки</translation>
 <translation id="5763514718066511291">Торкніться, щоб скопіювати URL-адресу цього додатка</translation>
 <translation id="5765780083710877561">Опис:</translation>
-<translation id="5777170031995031090">Укажіть, як Google може використовувати вашу історію веб-перегляду, щоб персоналізувати Пошук, рекламні оголошення й інші сервіси Google.</translation>
 <translation id="5793665092639000975">Використано <ph name="SPACE_USED" /> з <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google може використовувати вашу історію, щоб персоналізувати Пошук, оголошення й інші сервіси Google</translation>
 <translation id="5804241973901381774">Дозволи</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Задовга назва</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# зображення}one{# зображення}few{# зображення}many{# зображень}other{# зображення}}</translation>
 <translation id="6447842834002726250">Cookie-файли</translation>
-<translation id="6448273550210938826">Пропозиції пошуку та URL-адрес</translation>
 <translation id="6461962085415701688">Не вдається відкрити файл</translation>
 <translation id="6464977750820128603">Ви можете переглянути відвідані в Chrome сайти та встановити таймери для них.\n\nGoogle отримує дані про те, для яких сайтів ви встановлюєте таймери, а також відомості про тривалість перебування на них. Ця інформація використовується для покращення Цифрового добробуту.</translation>
 <translation id="6475951671322991020">Завантажити відео</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Щоб знаходити пристрої, Chrome потрібний доступ до геоданих. <ph name="BEGIN_LINK" />Оновлити дозволи<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Пароль</translation>
 <translation id="6659594942844771486">Вкладка</translation>
-<translation id="666268767214822976">Показувати підказки зі схожими запитами та популярними веб-сайтами під час введення запиту в адресному рядку</translation>
 <translation id="666731172850799929">Відкрити в програмі <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Примітка про конфіденційність Chrome</translation>
 <translation id="6697492270171225480">Показувати пропозиції схожих сторінок, коли не вдається знайти сторінку</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Видалити</translation>
 <translation id="8266862848225348053">Папка для завантажень</translation>
 <translation id="8274165955039650276">Переглянути завантаження</translation>
-<translation id="8283853025636624853">Синхронізація з обліковим записом <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Субтитри</translation>
 <translation id="8300705686683892304">Керуються додатком</translation>
 <translation id="8310344678080805313">Стандартні вкладки</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">очікується</translation>
 <translation id="8970887620466824814">Сталася помилка.</translation>
 <translation id="8972098258593396643">Завантажити в папку за умовчанням?</translation>
-<translation id="8981454092730389528">Відстеження дій у Google</translation>
 <translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation>
 <translation id="8993760627012879038">Відкрити нове вікно в режимі анонімного перегляду</translation>
 <translation id="8998729206196772491">Ви входите в обліковий запис, зареєстрований у домені <ph name="MANAGED_DOMAIN" />, і надаєте його адміністратору доступ до своїх даних Chrome. Ваші дані буде назавжди зв’язано з цим обліковим записом. Якщо ви вийдете з облікового запису в Chrome, дані буде видалено з цього пристрою, але вони залишаться у вашому обліковому записі Google.</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 a2bd2d67..deeb77e2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">Xóa lịch sử, cookie, dữ liệu trang web, bộ nhớ đệm…</translation>
 <translation id="129553762522093515">Các tab đã đóng gần đây</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> – Gửi từ <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">Để có các tab từ các thiết bị khác của bạn, hãy đăng nhập vào Chrome.</translation>
 <translation id="1331212799747679585">Chrome không thể cập nhật. Tùy chọn khác</translation>
 <translation id="1332501820983677155">Phím tắt cho các tính năng của Google Chrome</translation>
 <translation id="1360432990279830238">Đăng xuất và tắt tính năng đồng bộ hóa?</translation>
-<translation id="136248372334525878">Tải trước trang để tải nhanh hơn và đọc ngoại tuyến</translation>
 <translation id="1369915414381695676">Đã thêm trang web <ph name="SITE_NAME" /></translation>
 <translation id="1373696734384179344">Không đủ bộ nhớ để tải xuống nội dung được chọn.</translation>
 <translation id="1376578503827013741">Đang tính toán...</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">Tab được chọn</translation>
 <translation id="194341124344773587">Bật quyền cho Chrome trong <ph name="BEGIN_LINK" />Cài đặt Android<ph name="END_LINK" />.</translation>
 <translation id="1943432128510653496">Lưu mật khẩu</translation>
-<translation id="1946005195648379376">Kiểm soát cách Google sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm và các dịch vụ khác của Google.</translation>
 <translation id="1952172573699511566">Các trang web sẽ hiển thị văn bản bằng ngôn ngữ ưu tiên của bạn khi có thể.</translation>
 <translation id="1960290143419248813">Các bản cập nhật Chrome không còn được hỗ trợ cho phiên bản Android này</translation>
 <translation id="1966710179511230534">Vui lòng cập nhật chi tiết đăng nhập của bạn.</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">Nhấn để tìm kiếm</translation>
 <translation id="2079545284768500474">Hoàn tác</translation>
 <translation id="2082238445998314030">Kết quả <ph name="RESULT_NUMBER" /> trong tổng số <ph name="TOTAL_RESULTS" /></translation>
-<translation id="2086652334978798447">Để nhận nội dung được cá nhân hóa do Google đề xuất, hãy đăng nhập vào Chrome.</translation>
 <translation id="2091887806945687916">Âm thanh</translation>
 <translation id="2096012225669085171">Đồng bộ hóa và cá nhân hóa trên các thiết bị</translation>
 <translation id="2100273922101894616">Tự động đăng nhập</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">Kéo thanh trượt cho đến khi bạn có thể đọc nội dung này thoải mái. Chữ tối thiểu phải to như này sau khi bấm đúp vào một đoạn.</translation>
 <translation id="2323763861024343754">Bộ nhớ trang web</translation>
 <translation id="2328985652426384049">Không thể đăng nhập</translation>
-<translation id="2342981853652716282">Đăng nhập vào Chrome để nhận dấu trang, mật khẩu và nhiều nội dung khác trên tất cả các thiết bị của bạn.</translation>
 <translation id="2349710944427398404">Tổng số dữ liệu mà Chrome sử dụng, bao gồm tài khoản, dấu trang và cài đặt đã lưu</translation>
 <translation id="2351097562818989364">Đã đặt lại cài đặt dịch của bạn.</translation>
 <translation id="2353636109065292463">Kiểm tra kết nối Internet</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">Đã chặn trên một số trang web</translation>
 <translation id="3137521801621304719">Thoát chế độ ẩn danh</translation>
 <translation id="3143515551205905069">Hủy đồng bộ hóa</translation>
-<translation id="3148434565183091099">Để nhận dấu trang trên tất cả các thiết bị của bạn, hãy đăng nhập vào Chrome.</translation>
 <translation id="3157842584138209013">Xem lượng dữ liệu bạn đã tiết kiệm được từ nút Tùy chọn khác</translation>
 <translation id="3166827708714933426">Phím tắt dành cho tab và cửa sổ</translation>
 <translation id="3181954750937456830">Duyệt web an toàn (bảo vệ bạn cũng như thiết bị của bạn khỏi các trang web nguy hiểm)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">Tự động đăng nhập vào các trang web bằng thông tin đăng nhập được lưu trữ. Khi tính năng này tắt, bạn sẽ luôn được yêu cầu xác minh trước khi đăng nhập vào trang web.</translation>
 <translation id="3658159451045945436">Việc đặt lại sẽ xóa lịch sử tiết kiệm dữ liệu, bao gồm cả danh sách các trang web bạn đã truy cập.</translation>
 <translation id="3663367437272849150">Nhóm <ph name="NUM_SELECTED" /> tab.</translation>
-<translation id="3672452749423051839">Đề xuất cho lỗi điều hướng</translation>
 <translation id="3692944402865947621">Không tải <ph name="FILE_NAME" /> xuống được do không tìm thấy vị trí bộ nhớ.</translation>
 <translation id="3714981814255182093">Mở thanh Tìm kiếm</translation>
 <translation id="3716182511346448902">Chrome đã tạm dừng trang này vì trang dùng quá nhiều bộ nhớ.</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">Tiêu đề</translation>
 <translation id="4008040567710660924">Cho phép cookie của một trang web cụ thể.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# giờ}other{# giờ}}</translation>
-<translation id="4042870126885713738">Hiển thị các đề xuất khi địa chỉ web không khắc phục được hoặc kết nối không thể được thực hiện</translation>
 <translation id="4046123991198612571">Bản nhạc tiếp theo</translation>
 <translation id="4048707525896921369">Tìm hiểu về các chủ đề trên trang web mà không cần rời khỏi trang. Tính năng Nhấn để tìm kiếm sẽ gửi một từ và ngữ cảnh xung quanh từ đó tới Google Tìm kiếm, trả về định nghĩa, hình ảnh, kết quả tìm kiếm và các chi tiết khác.
 
@@ -438,7 +430,6 @@
     - Cử động của bạn, ví dụ như cách đi
 
     Đảm bảo bạn tin cậy trang web này trước khi cho phép truy cập.</translation>
-<translation id="424864128008805179">Đăng xuất khỏi Chrome?</translation>
 <translation id="4256782883801055595">Giấy phép nguồn mở</translation>
 <translation id="4259722352634471385">Điều hướng bị chặn: <ph name="URL" /></translation>
 <translation id="4269820728363426813">Sao chép địa chỉ liên kết</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">Điện thoại</translation>
 <translation id="4384468725000734951">Sử dụng Sogou để tìm kiếm</translation>
 <translation id="4404568932422911380">Không có dấu trang nào</translation>
-<translation id="4409723563706114196">Sử dụng truy vấn dự đoán trang</translation>
 <translation id="4411535500181276704">Chế độ thu gọn</translation>
 <translation id="4415276339145661267">Quản lý Tài khoản Google của bạn</translation>
 <translation id="4432792777822557199">Kể từ bây giờ trở đi, các trang viết bằng <ph name="SOURCE_LANGUAGE" /> sẽ được dịch sang <ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">Cho phép trang web này sử dụng các cảm biến thực tế ảo?</translation>
 <translation id="5210286577605176222">Quay về tab trước</translation>
 <translation id="5210365745912300556">Đóng tab</translation>
-<translation id="5222676887888702881">Đăng xuất</translation>
 <translation id="5224771365102442243">Có video</translation>
 <translation id="5233638681132016545">Tab mới</translation>
 <translation id="526421993248218238">Không thể tải trang này</translation>
 <translation id="5271967389191913893">Thiết bị không thể mở nội dung được tải xuống.</translation>
 <translation id="528192093759286357">Kéo từ trên xuống và chạm vào nút quay lại để thoát khỏi chế độ toàn màn hình.</translation>
-<translation id="5284584623296338184">Các thay đổi đối với dấu trang, lịch sử, mật khẩu và các tùy chọn cài đặt khác sẽ không đồng bộ hóa với Tài khoản Google của bạn nữa. Tuy nhiên, dữ liệu hiện có của bạn sẽ vẫn được lưu trữ trong tài khoản Google của bạn.</translation>
 <translation id="5292796745632149097">Gửi đến</translation>
 <translation id="5300589172476337783">Hiển thị</translation>
 <translation id="5301954838959518834">Ok</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">Tab ẩn danh</translation>
 <translation id="5763514718066511291">Nhấn để sao chép URL cho ứng dụng này</translation>
 <translation id="5765780083710877561">Mô tả:</translation>
-<translation id="5777170031995031090">Kiểm soát cách Google sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm, quảng cáo và các dịch vụ khác của Google.</translation>
 <translation id="5793665092639000975">Đang dùng: <ph name="SPACE_USED" />/<ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google có thể sử dụng lịch sử của bạn để điều chỉnh tính năng Tìm kiếm, quảng cáo và các dịch vụ khác của Google cho phù hợp với bạn</translation>
 <translation id="5804241973901381774">Quyền</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">Tên quá dài</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# hình ảnh}other{# hình ảnh}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">Đề xuất tìm kiếm và URL</translation>
 <translation id="6461962085415701688">Không thể mở tệp</translation>
 <translation id="6464977750820128603">Bạn có thể xem các trang web mà mình truy cập trên Chrome và hẹn giờ cho các trang web này.\n\nGoogle thu thập thông tin về các trang web mà bạn đã hẹn giờ và khoảng thời gian bạn truy cập các trang web đó. Thông tin này dùng để cải thiện Digital Wellbeing.</translation>
 <translation id="6475951671322991020">Tải video xuống</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome cần có quyền truy cập vị trí để quét tìm thiết bị. <ph name="BEGIN_LINK" />Cập nhật quyền<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">Mật khẩu</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">Sử dụng dịch vụ gợi ý để hiển thị các truy vấn có liên quan và các trang web phổ biến khi bạn nhập vào thanh địa chỉ</translation>
 <translation id="666731172850799929">Mở trong <ph name="APP_NAME" /></translation>
 <translation id="666981079809192359">Thông báo quyền riêng tư của Chrome</translation>
 <translation id="6697492270171225480">Hiển thị phần đề xuất các trang tương tự khi không tìm thấy một trang</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">Xóa</translation>
 <translation id="8266862848225348053">Vị trí tải xuống</translation>
 <translation id="8274165955039650276">Xem tệp đã tải xuống</translation>
-<translation id="8283853025636624853">Đang đồng bộ hóa với <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">Phụ đề</translation>
 <translation id="8300705686683892304">Do ứng dụng quản lý</translation>
 <translation id="8310344678080805313">Tab chuẩn</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">đang chờ xử lý</translation>
 <translation id="8970887620466824814">Đã xảy ra lỗi.</translation>
 <translation id="8972098258593396643">Tải xuống thư mục mặc định?</translation>
-<translation id="8981454092730389528">Kiểm soát hoạt động trên Google</translation>
 <translation id="8986494364107987395">Tự động gửi số liệu thống kê về việc sử dụng và báo cáo sự cố cho Google</translation>
 <translation id="8993760627012879038">Mở tab mới trong chế độ Ẩn danh</translation>
 <translation id="8998729206196772491">Bạn đang đăng nhập bằng tài khoản do <ph name="MANAGED_DOMAIN" /> quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chrome của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Việc đăng xuất khỏi Chrome sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu sẽ vẫn được lưu trữ trong Tài khoản Google.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
index f5a1174..f0b26fa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">清除历史记录、Cookie、网站数据、缓存内容…</translation>
 <translation id="129553762522093515">最近关闭的标签页</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - 发送者:<ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">要访问您在其他设备上的标签页,请登录 Chrome。</translation>
 <translation id="1331212799747679585">Chrome 无法更新。更多选项</translation>
 <translation id="1332501820983677155">Google Chrome 功能快捷键</translation>
 <translation id="1360432990279830238">退出帐号并关闭同步功能?</translation>
-<translation id="136248372334525878">预加载网页,以便更快地加载并实现离线阅读</translation>
 <translation id="1369915414381695676">网站 <ph name="SITE_NAME" /> 已添加</translation>
 <translation id="1373696734384179344">内存不足,无法下载所选内容。</translation>
 <translation id="1376578503827013741">正在计算…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">所选的标签页</translation>
 <translation id="194341124344773587">在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中为 Chrome 启用这项权限。</translation>
 <translation id="1943432128510653496">保存密码</translation>
-<translation id="1946005195648379376">控制 Google 如何使用您的浏览记录对 Google 搜索和其他 Google 服务进行个性化设置。</translation>
 <translation id="1952172573699511566">网站将尽可能以您的首选语言显示文字。</translation>
 <translation id="1960290143419248813">此版本的 Android 不再支持 Chrome 更新</translation>
 <translation id="1966710179511230534">请更新您的登录详细信息。</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">点按搜索</translation>
 <translation id="2079545284768500474">撤消</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 条结果,共 <ph name="TOTAL_RESULTS" /> 条</translation>
-<translation id="2086652334978798447">要获取 Google 推荐的个性化内容,请登录 Chrome。</translation>
 <translation id="2091887806945687916">声音</translation>
 <translation id="2096012225669085171">在所有设备上保持同步并进行个性化设置</translation>
 <translation id="2100273922101894616">自动登录</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">拖动该滑块,将文字调整到适合您阅读的大小。点按两次某段落后,显示的文字至少应是这么大。</translation>
 <translation id="2323763861024343754">网站存储数据</translation>
 <translation id="2328985652426384049">无法登录</translation>
-<translation id="2342981853652716282">登录 Chrome 即可获取您在所有设备上保存的书签、密码等。</translation>
 <translation id="2349710944427398404">Chrome 所使用的数据总量,包括帐号、书签和已保存的设置</translation>
 <translation id="2351097562818989364">您的翻译设置已重置。</translation>
 <translation id="2353636109065292463">检查互联网连接状况</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">已禁止部分网站显示广告</translation>
 <translation id="3137521801621304719">退出隐身模式</translation>
 <translation id="3143515551205905069">取消同步</translation>
-<translation id="3148434565183091099">要将您的书签同步到您所有的设备上,请登录 Chrome。</translation>
 <translation id="3157842584138209013">通过“更多选项”按钮查看您已节省多少数据流量</translation>
 <translation id="3166827708714933426">标签页和窗口快捷键</translation>
 <translation id="3181954750937456830">安全浏览(保护您和您的设备不受危险网站的侵害)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">使用存储的凭据自动登录网站。当该功能处于停用状态时,您每次都要通过验证才能登录网站。</translation>
 <translation id="3658159451045945436">这项重置操作会清空流量节省情况历史记录,包括曾访问过的网站的列表。</translation>
 <translation id="3663367437272849150">将 <ph name="NUM_SELECTED" /> 个标签页合为一组。</translation>
-<translation id="3672452749423051839">导航错误建议</translation>
 <translation id="3692944402865947621">未能成功下载“<ph name="FILE_NAME" />”,因为无法访问它的存储位置。</translation>
 <translation id="3714981814255182093">打开查找栏</translation>
 <translation id="3716182511346448902">此网页占用的内存过多,因此 Chrome 已将其暂停。</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">标题</translation>
 <translation id="4008040567710660924">允许特定网站使用 Cookie。</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# 小时}other{# 小时}}</translation>
-<translation id="4042870126885713738">无法解析网址或无法建立连接时显示建议</translation>
 <translation id="4046123991198612571">下一曲</translation>
 <translation id="4048707525896921369">无需离开所在页面,便可了解网站上的主题。“点按搜索”功能会将所选字词及上下文一起发送给 Google 搜索,后者即会据此返回相应的定义、图片、搜索结果及其他详情。
 
@@ -438,7 +430,6 @@
     - 您的动作,例如走路姿势
 
     请确保您信任此网站,然后再允许访问。</translation>
-<translation id="424864128008805179">退出 Chrome?</translation>
 <translation id="4256782883801055595">开放源代码许可</translation>
 <translation id="4259722352634471385">已屏蔽 <ph name="URL" /></translation>
 <translation id="4269820728363426813">复制链接地址</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">电话机</translation>
 <translation id="4384468725000734951">目前使用的搜索引擎是搜狗</translation>
 <translation id="4404568932422911380">没有书签</translation>
-<translation id="4409723563706114196">使用网页联想查询功能</translation>
 <translation id="4411535500181276704">精简模式</translation>
 <translation id="4415276339145661267">管理您的 Google 帐号</translation>
 <translation id="4432792777822557199">从现在开始,源语言为<ph name="SOURCE_LANGUAGE" />的网页一律会被翻译成<ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">要允许此网站访问您的 VR 传感器吗?</translation>
 <translation id="5210286577605176222">跳转到上一个标签页</translation>
 <translation id="5210365745912300556">关闭标签页</translation>
-<translation id="5222676887888702881">退出</translation>
 <translation id="5224771365102442243">包含视频</translation>
 <translation id="5233638681132016545">打开新的标签页</translation>
 <translation id="526421993248218238">无法加载此页面</translation>
 <translation id="5271967389191913893">设备无法打开要下载的内容。</translation>
 <translation id="528192093759286357">从顶部向下拖动并触摸“返回”按钮,即可退出全屏模式。</translation>
-<translation id="5284584623296338184">对您的书签、历史记录、密码和其他设置所做的更改将不再同步到您的 Google 帐号。但是,您的现有数据将继续存储在您的 Google 帐号中。</translation>
 <translation id="5292796745632149097">发送到</translation>
 <translation id="5300589172476337783">显示</translation>
 <translation id="5301954838959518834">知道了</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">隐身标签页</translation>
 <translation id="5763514718066511291">点按即可复制该应用的网址</translation>
 <translation id="5765780083710877561">说明:</translation>
-<translation id="5777170031995031090">控制 Google 如何利用您的浏览记录为您提供个性化的 Google 搜索、广告和其他 Google 服务。</translation>
 <translation id="5793665092639000975">已使用 <ph name="SPACE_USED" />,共 <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5797070761912323120">Google 可能会利用您的历史记录为您提供个性化的 Google 搜索、广告和其他 Google 服务</translation>
 <translation id="5804241973901381774">权限</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">名称太长</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# 张图片}other{# 张图片}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">搜索和网址建议</translation>
 <translation id="6461962085415701688">无法打开文件</translation>
 <translation id="6464977750820128603">您可以查看自己在 Chrome 中访问的网站并为这些网站设置计时器。\n\nGoogle 会获取这些设有计时器的网站的相关信息以及您对这些网站的访问时长。这些信息会被用于改进“数字健康”应用。</translation>
 <translation id="6475951671322991020">下载视频</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome 需要拥有位置信息权限才能扫描设备。<ph name="BEGIN_LINK" />更新权限<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">密码</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">当您在地址栏中输入查询内容时,使用联想查询服务显示相关查询和热门网站</translation>
 <translation id="666731172850799929">在 <ph name="APP_NAME" />中打开</translation>
 <translation id="666981079809192359">Chrome 隐私权声明</translation>
 <translation id="6697492270171225480">找不到相应网页时,显示有关类似网页的建议</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">删除</translation>
 <translation id="8266862848225348053">下载内容保存位置</translation>
 <translation id="8274165955039650276">查看下载内容</translation>
-<translation id="8283853025636624853">正在同步到 <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">由应用管理</translation>
 <translation id="8310344678080805313">标准标签页</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">待下载</translation>
 <translation id="8970887620466824814">出了点问题。</translation>
 <translation id="8972098258593396643">是否下载到默认文件夹?</translation>
-<translation id="8981454092730389528">Google 活动控件</translation>
 <translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation>
 <translation id="8993760627012879038">在无痕模式下打开新标签页</translation>
 <translation id="8998729206196772491">您正要登录由 <ph name="MANAGED_DOMAIN" /> 管理的帐号,并要授权其管理员控制您的 Chrome 数据。您的数据将与此帐号永久关联。退出 Chrome 后,您的数据将从这台设备上删除,但仍会保留在您的 Google 帐号中。</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
index cd7cd0a..7fba729 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -49,11 +49,9 @@
 <translation id="1291207594882862231">清除歷史記錄、Cookie、網站資料、快取…</translation>
 <translation id="129553762522093515">最近關閉的分頁</translation>
 <translation id="1303507811548703290"><ph name="DOMAIN" /> - 來自 <ph name="DEVICE_NAME" /></translation>
-<translation id="1326317727527857210">如要存取您在其他裝置上開啟的分頁,請登入 Chrome。</translation>
 <translation id="1331212799747679585">無法更新 Chrome。更多選項</translation>
 <translation id="1332501820983677155">Google Chrome 功能快速鍵</translation>
 <translation id="1360432990279830238">要登出並關閉同步處理功能嗎?</translation>
-<translation id="136248372334525878">預先載入網頁,以加快載入速度,並提供離線瀏覽功能</translation>
 <translation id="1369915414381695676">已新增 <ph name="SITE_NAME" /> 網站</translation>
 <translation id="1373696734384179344">記憶體不足,無法下載您選取的這項內容。</translation>
 <translation id="1376578503827013741">計算中…</translation>
@@ -132,7 +130,6 @@
 <translation id="1933845786846280168">選取的分頁</translation>
 <translation id="194341124344773587">請在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中為 Chrome 啟用這項權限。</translation>
 <translation id="1943432128510653496">儲存密碼</translation>
-<translation id="1946005195648379376">控制 Google 如何使用您的瀏覽記錄,為您提供個人化的搜尋服務和其他各項 Google 服務。</translation>
 <translation id="1952172573699511566">Chrome 會儘可能以你慣用的語言顯示網站文字。</translation>
 <translation id="1960290143419248813">這個版本的 Android 已停止支援 Chrome 更新</translation>
 <translation id="1966710179511230534">請更新你的登入詳細資料。</translation>
@@ -161,7 +158,6 @@
 <translation id="2063713494490388661">輕觸搜尋</translation>
 <translation id="2079545284768500474">復原</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 個結果,共 <ph name="TOTAL_RESULTS" /> 個</translation>
-<translation id="2086652334978798447">如要取得個人化的 Google 推薦內容,請登入 Chrome。</translation>
 <translation id="2091887806945687916">音訊</translation>
 <translation id="2096012225669085171">讓多部裝置保持同步,並提供人化體驗</translation>
 <translation id="2100273922101894616">自動登入</translation>
@@ -192,7 +188,6 @@
 <translation id="2321958826496381788">拖曳滑桿,將文字調整到適當的字體大小。當你輕觸兩下文字段落時,瀏覽器至少應呈現這樣的字體大小。</translation>
 <translation id="2323763861024343754">網站儲存資料量</translation>
 <translation id="2328985652426384049">無法登入</translation>
-<translation id="2342981853652716282">無論使用任何裝置,只要登入 Chrome,即可取得你的書籤、密碼,並沿用其他設定。</translation>
 <translation id="2349710944427398404">Chrome 使用的資料總量,包括帳戶、書籤和儲存的設定</translation>
 <translation id="2351097562818989364">您的翻譯設定已重設。</translation>
 <translation id="2353636109065292463">檢查你的網際網路連線</translation>
@@ -295,7 +290,6 @@
 <translation id="3123473560110926937">在某些網站上設定封鎖</translation>
 <translation id="3137521801621304719">離開無痕模式</translation>
 <translation id="3143515551205905069">取消同步處理</translation>
-<translation id="3148434565183091099">登入 Chrome 之後即可在你的所有裝置上使用自己的書籤。</translation>
 <translation id="3157842584138209013">如要查看節省的數據用量,請點選 [更多選項] 按鈕</translation>
 <translation id="3166827708714933426">分頁與視窗快速鍵</translation>
 <translation id="3181954750937456830">安全瀏覽 (保護你和你的裝置不受危險網站攻擊)</translation>
@@ -361,7 +355,6 @@
 <translation id="363596933471559332">自動使用已儲存的憑證登入網站。如果關閉這項功能,每次在您登入網站之前,網站一律會要求驗證。</translation>
 <translation id="3658159451045945436">如果確認重設,系統會清除你的數據用量節省記錄,包括你造訪過的網站清單。</translation>
 <translation id="3663367437272849150">將 <ph name="NUM_SELECTED" /> 個分頁加入群組。</translation>
-<translation id="3672452749423051839">瀏覽錯誤建議</translation>
 <translation id="3692944402865947621">無法連線至儲存位置,因此無法下載 <ph name="FILE_NAME" />。</translation>
 <translation id="3714981814255182093">開啟搜尋列</translation>
 <translation id="3716182511346448902">這個網頁使用了過多記憶體,因此遭到 Chrome 暫停。</translation>
@@ -404,7 +397,6 @@
 <translation id="4002066346123236978">標題</translation>
 <translation id="4008040567710660924">允許特定網站的 Cookie。</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# 小時}other{# 小時}}</translation>
-<translation id="4042870126885713738">在無法解析網址或建立連線時顯示建議</translation>
 <translation id="4046123991198612571">下一首曲目</translation>
 <translation id="4048707525896921369">不需離開網頁即可瞭解網站上的主題。「輕觸搜尋」可將特定字詞及其上下文內容傳送給 Google 搜尋,並傳回定義、圖片、搜尋結果和其他詳細資料。
 
@@ -438,7 +430,6 @@
     - 你的動作,例如走路的方式
 
     允許存取前,請確認你信任這個網站。</translation>
-<translation id="424864128008805179">要登出 Chrome 嗎?</translation>
 <translation id="4256782883801055595">開放原始碼授權</translation>
 <translation id="4259722352634471385">瀏覽的網址已封鎖:<ph name="URL" /></translation>
 <translation id="4269820728363426813">複製連結網址</translation>
@@ -452,7 +443,6 @@
 <translation id="4378154925671717803">電話</translation>
 <translation id="4384468725000734951">現已使用 Sogou 搜尋</translation>
 <translation id="4404568932422911380">沒有書籤</translation>
-<translation id="4409723563706114196">使用網頁預測功能</translation>
 <translation id="4411535500181276704">精簡模式</translation>
 <translation id="4415276339145661267">管理你的 Google 帳戶</translation>
 <translation id="4432792777822557199">從現在起,系統會將<ph name="SOURCE_LANGUAGE" />網頁內容翻譯成<ph name="TARGET_LANGUAGE" /></translation>
@@ -577,13 +567,11 @@
 <translation id="5202089186707505116">要允許這個網站存取你的 VR 感應器嗎?</translation>
 <translation id="5210286577605176222">跳至上一個分頁</translation>
 <translation id="5210365745912300556">關閉分頁</translation>
-<translation id="5222676887888702881">登出</translation>
 <translation id="5224771365102442243">含有影片</translation>
 <translation id="5233638681132016545">新增分頁</translation>
 <translation id="526421993248218238">無法載入這個網頁</translation>
 <translation id="5271967389191913893">裝置無法開啟您要下載的這項內容。</translation>
 <translation id="528192093759286357">從頂端拖曳並輕觸返回按鈕即可結束全螢幕模式。</translation>
-<translation id="5284584623296338184">你更改過的書籤、歷史記錄、密碼和其他設定不會繼續與 Google 帳戶中的資料保持同步,但是 Google 帳戶現有的資料仍會保留。</translation>
 <translation id="5292796745632149097">傳送到</translation>
 <translation id="5300589172476337783">顯示</translation>
 <translation id="5301954838959518834">好,我知道了</translation>
@@ -660,7 +648,6 @@
 <translation id="5763382633136178763">無痕式分頁</translation>
 <translation id="5763514718066511291">輕觸即可複製這個應用程式的網址</translation>
 <translation id="5765780083710877561">說明:</translation>
-<translation id="5777170031995031090">控管 Google 使用您瀏覽記錄的方式,針對 Google 所提供的個人化搜尋服務、廣告內容和其他各項 Google 服務調整相關設定。</translation>
 <translation id="5793665092639000975">使用量:<ph name="SPACE_USED" /> (共 <ph name="SPACE_AVAILABLE" />)</translation>
 <translation id="5797070761912323120">Google 可能會使用你的歷史記錄,為你提供個人化的搜尋服務、廣告內容和其他各項 Google 服務</translation>
 <translation id="5804241973901381774">權限</translation>
@@ -754,7 +741,6 @@
 <translation id="6441734959916820584">這個名稱太長</translation>
 <translation id="6444421004082850253">{FILE_COUNT,plural, =1{# 張圖片}other{# 張圖片}}</translation>
 <translation id="6447842834002726250">Cookie</translation>
-<translation id="6448273550210938826">搜尋與網址建議</translation>
 <translation id="6461962085415701688">無法開啟檔案</translation>
 <translation id="6464977750820128603">你可以查看自己透過 Chrome 造訪的網站,並對這些網站設定計時器。\n\nGoogle 會收到這些設有計時器的網站相關資訊以及你的造訪時間長度。這些資訊可協助我們改善數位健康。</translation>
 <translation id="6475951671322991020">下載影片</translation>
@@ -785,7 +771,6 @@
 <translation id="6656545060687952787">Chrome 需要位置資訊存取權才能掃描裝置。<ph name="BEGIN_LINK" />更新權限<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">密碼</translation>
 <translation id="6659594942844771486">Tab</translation>
-<translation id="666268767214822976">啟用預測查詢字串服務,讓您在網址列中輸入查詢內容時,能夠即時看到相關查詢和熱門網站</translation>
 <translation id="666731172850799929">在「<ph name="APP_NAME" />」中開啟</translation>
 <translation id="666981079809192359">Chrome 隱私權聲明</translation>
 <translation id="6697492270171225480">找不到網頁時顯示類似的網頁建議</translation>
@@ -1016,7 +1001,6 @@
 <translation id="8261506727792406068">刪除</translation>
 <translation id="8266862848225348053">下載位置</translation>
 <translation id="8274165955039650276">查看已下載的內容</translation>
-<translation id="8283853025636624853">同步的帳戶:<ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">由應用程式管理</translation>
 <translation id="8310344678080805313">標準分頁</translation>
@@ -1107,7 +1091,6 @@
 <translation id="8965591936373831584">正在等待下載</translation>
 <translation id="8970887620466824814">發生錯誤。</translation>
 <translation id="8972098258593396643">要下載至預設資料夾嗎?</translation>
-<translation id="8981454092730389528">Google 活動控制項</translation>
 <translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation>
 <translation id="8993760627012879038">在無痕模式下開啟新分頁</translation>
 <translation id="8998729206196772491">您即將使用由 <ph name="MANAGED_DOMAIN" /> 所管理的帳戶登入,並授權該網域的管理員控管您的 Chrome 資料。您的資料會與這個帳戶建立永久連結。登出 Chrome 後,系統會將您的資料從這個裝置上刪除,但繼續保留在您的 Google 帳戶中。</translation>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 8aedf50..a1b751d 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -44,7 +44,6 @@
 
 if (enable_arcore) {
   chrome_java_sources += [
-    "java/src/org/chromium/chrome/browser/vr/ArConsentDialog.java",
     "java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java",
     "java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java",
     "java/src/org/chromium/chrome/browser/vr/ArCoreShim.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuHeaderViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuHeaderViewTest.java
new file mode 100644
index 0000000..41879a7
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuHeaderViewTest.java
@@ -0,0 +1,182 @@
+// 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.contextmenu;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ui.DummyUiActivity;
+import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
+import org.chromium.ui.widget.RoundedCornerImageView;
+
+/**
+ * Tests for RevampedContextMenuHeader view and {@link RevampedContextMenuHeaderViewBinder}
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+public class RevampedContextMenuHeaderViewTest extends DummyUiActivityTestCase {
+    private static final String TITLE_STRING = "Some Very Cool Title";
+    private static final int TITLE_MAX_COUNT = 2;
+    private static final String URL_STRING = "www.website.com";
+    private static final int URL_MAX_COUNT = 1;
+
+    private View mHeaderView;
+    private TextView mTitle;
+    private TextView mUrl;
+    private RoundedCornerImageView mImage;
+    private View mCircleBg;
+    private PropertyModel mModel;
+    private PropertyModelChangeProcessor mMCP;
+
+    @BeforeClass
+    public static void setUpBeforeActivityLaunched() {
+        DummyUiActivity.setTestLayout(R.layout.revamped_context_menu_header);
+    }
+
+    @Override
+    public void setUpTest() throws Exception {
+        super.setUpTest();
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mHeaderView = getActivity().findViewById(android.R.id.content);
+            mTitle = mHeaderView.findViewById(R.id.menu_header_title);
+            mUrl = mHeaderView.findViewById(R.id.menu_header_url);
+            mImage = mHeaderView.findViewById(R.id.menu_header_image);
+            mCircleBg = mHeaderView.findViewById(R.id.circle_background);
+        });
+        mModel = new PropertyModel.Builder(RevampedContextMenuHeaderProperties.ALL_KEYS)
+                         .with(RevampedContextMenuHeaderProperties.TITLE, "")
+                         .with(RevampedContextMenuHeaderProperties.URL, "")
+                         .with(RevampedContextMenuHeaderProperties.URL_CLICK_LISTENER, null)
+                         .with(RevampedContextMenuHeaderProperties.IMAGE, null)
+                         .with(RevampedContextMenuHeaderProperties.CIRCLE_BG_VISIBLE, false)
+                         .build();
+        mMCP = PropertyModelChangeProcessor.create(
+                mModel, mHeaderView, RevampedContextMenuHeaderViewBinder::bind);
+    }
+
+    @Override
+    public void tearDownTest() throws Exception {
+        mMCP.destroy();
+        super.tearDownTest();
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testTitle() {
+        assertThat(
+                "Incorrect initial title visibility.", mTitle.getVisibility(), equalTo(View.GONE));
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModel.set(RevampedContextMenuHeaderProperties.TITLE, TITLE_STRING);
+            mModel.set(RevampedContextMenuHeaderProperties.TITLE_MAX_LINES, TITLE_MAX_COUNT);
+        });
+
+        assertThat("Incorrect title visibility.", mTitle.getVisibility(), equalTo(View.VISIBLE));
+        assertThat("Incorrect title string.", mTitle.getText(), equalTo(TITLE_STRING));
+        assertThat("Incorrect max line count for title.", mTitle.getMaxLines(),
+                equalTo(TITLE_MAX_COUNT));
+        assertThat("Incorrect title ellipsize mode.", mTitle.getEllipsize(),
+                equalTo(TextUtils.TruncateAt.END));
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testUrl() {
+        assertThat("Incorrect initial URL visibility.", mUrl.getVisibility(), equalTo(View.GONE));
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModel.set(RevampedContextMenuHeaderProperties.URL, URL_STRING);
+            mModel.set(RevampedContextMenuHeaderProperties.URL_MAX_LINES, URL_MAX_COUNT);
+        });
+
+        assertThat("Incorrect URL visibility.", mUrl.getVisibility(), equalTo(View.VISIBLE));
+        assertThat("Incorrect URL string.", mUrl.getText(), equalTo(URL_STRING));
+        assertThat("Incorrect max line count for URL.", mUrl.getMaxLines(), equalTo(URL_MAX_COUNT));
+        assertThat("Incorrect URL ellipsize mode.", mUrl.getEllipsize(),
+                equalTo(TextUtils.TruncateAt.END));
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> mModel.set(RevampedContextMenuHeaderProperties.URL_MAX_LINES,
+                                Integer.MAX_VALUE));
+
+        assertThat("Incorrect max line count for URL.", mUrl.getMaxLines(),
+                equalTo(Integer.MAX_VALUE));
+        assertNull("URL is ellipsized when it shouldn't be.", mUrl.getEllipsize());
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testUrlClick() {
+        assertFalse("URL has onClickListeners when it shouldn't, yet, have.",
+                mUrl.hasOnClickListeners());
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModel.set(RevampedContextMenuHeaderProperties.URL, URL_STRING);
+            mModel.set(RevampedContextMenuHeaderProperties.URL_MAX_LINES, URL_MAX_COUNT);
+            mModel.set(RevampedContextMenuHeaderProperties.URL_CLICK_LISTENER, (v) -> {
+                if (mModel.get(RevampedContextMenuHeaderProperties.URL_MAX_LINES)
+                        == Integer.MAX_VALUE) {
+                    mModel.set(RevampedContextMenuHeaderProperties.URL_MAX_LINES, URL_MAX_COUNT);
+                } else {
+                    mModel.set(
+                            RevampedContextMenuHeaderProperties.URL_MAX_LINES, Integer.MAX_VALUE);
+                }
+            });
+            mUrl.callOnClick();
+        });
+
+        assertThat("Incorrect max line count for URL.", mUrl.getMaxLines(),
+                equalTo(Integer.MAX_VALUE));
+        assertNull("URL is ellipsized when it shouldn't be.", mUrl.getEllipsize());
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> { mUrl.callOnClick(); });
+
+        assertThat("Incorrect max line count for URL.", mUrl.getMaxLines(), equalTo(URL_MAX_COUNT));
+        assertThat("Incorrect URL ellipsize mode.", mUrl.getEllipsize(),
+                equalTo(TextUtils.TruncateAt.END));
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testImage() {
+        assertThat("Incorrect initial circle background visibility.", mCircleBg.getVisibility(),
+                equalTo(View.INVISIBLE));
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> mModel.set(RevampedContextMenuHeaderProperties.CIRCLE_BG_VISIBLE, true));
+        assertThat("Incorrect circle background visibility.", mCircleBg.getVisibility(),
+                equalTo(View.VISIBLE));
+
+        assertNull("Thumbnail drawable isn't null when it should be, initially.",
+                mImage.getDrawable());
+        final Bitmap bitmap = Bitmap.createBitmap(4, 4, Bitmap.Config.ARGB_8888);
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> mModel.set(RevampedContextMenuHeaderProperties.IMAGE, bitmap));
+        assertThat("Incorrect thumbnail bitmap.",
+                ((BitmapDrawable) mImage.getDrawable()).getBitmap(), equalTo(bitmap));
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuItemViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuItemViewTest.java
new file mode 100644
index 0000000..61af81b
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuItemViewTest.java
@@ -0,0 +1,122 @@
+// 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.contextmenu;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ui.DummyUiActivity;
+import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
+
+/**
+ * Tests for RevampedContextMenu item view, {@link RevampedContextMenuItemViewBinder}, and {@link
+ * RevampedContextMenuShareItemViewBinder}.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+public class RevampedContextMenuItemViewTest extends DummyUiActivityTestCase {
+    private static final String TEXT = "Useful menu item";
+    private static final String APP = "Some app";
+
+    private View mShareItemView;
+    private TextView mText;
+    private ImageView mIcon;
+    private PropertyModel mModel;
+    private PropertyModelChangeProcessor mMCP;
+
+    private boolean mIsClicked;
+
+    @BeforeClass
+    public static void setUpBeforeActivityLaunched() {
+        DummyUiActivity.setTestLayout(org.chromium.chrome.R.layout.revamped_context_menu_share_row);
+    }
+
+    @Override
+    public void setUpTest() throws Exception {
+        super.setUpTest();
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mShareItemView = getActivity().findViewById(android.R.id.content);
+            mText = mShareItemView.findViewById(R.id.menu_row_text);
+            mIcon = mShareItemView.findViewById(R.id.menu_row_share_icon);
+        });
+        mModel = new PropertyModel.Builder(RevampedContextMenuShareItemProperties.ALL_KEYS)
+                         .with(RevampedContextMenuShareItemProperties.TEXT, "")
+                         .with(RevampedContextMenuShareItemProperties.IMAGE, null)
+                         .with(RevampedContextMenuShareItemProperties.CONTENT_DESC, "")
+                         .with(RevampedContextMenuShareItemProperties.CLICK_LISTENER, null)
+                         .build();
+        mMCP = PropertyModelChangeProcessor.create(
+                mModel, mShareItemView, RevampedContextMenuShareItemViewBinder::bind);
+    }
+
+    @Override
+    public void tearDownTest() throws Exception {
+        mMCP.destroy();
+        super.tearDownTest();
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testText() {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> mModel.set(RevampedContextMenuShareItemProperties.TEXT, TEXT));
+        assertThat("Incorrect item text.", mText.getText(), equalTo(TEXT));
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testShareIcon() {
+        assertThat("Incorrect initial icon visibility.", mIcon.getVisibility(), equalTo(View.GONE));
+        final Bitmap bitmap = Bitmap.createBitmap(4, 4, Bitmap.Config.ARGB_8888);
+        final BitmapDrawable drawable = new BitmapDrawable(mIcon.getResources(), bitmap);
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModel.set(RevampedContextMenuShareItemProperties.IMAGE, drawable);
+            mModel.set(RevampedContextMenuShareItemProperties.CONTENT_DESC, APP);
+        });
+        assertThat("Incorrect icon drawable.", mIcon.getDrawable(), equalTo(drawable));
+        assertThat("Incorrect icon visibility.", mIcon.getVisibility(), equalTo(View.VISIBLE));
+        assertThat("Incorrect icon content description.", mIcon.getContentDescription(),
+                equalTo(mShareItemView.getContext().getString(
+                        R.string.accessibility_menu_share_via, APP)));
+    }
+
+    @Test
+    @SmallTest
+    @UiThreadTest
+    public void testShareIconClick() {
+        assertFalse("Icon has onClickListeners when it shouldn't, yet, have.",
+                mIcon.hasOnClickListeners());
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mModel.set(RevampedContextMenuShareItemProperties.CLICK_LISTENER, this::click);
+            mIcon.callOnClick();
+        });
+        assertTrue("Icon hasn't been clicked.", mIsClicked);
+    }
+
+    private void click(View v) {
+        mIsClicked = true;
+    }
+}
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 33e832e..722bf26 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
@@ -1154,8 +1154,8 @@
         }
 
         @Override
-        public void getInstruments(Map<String, PaymentMethodData> methodData, String origin,
-                String iframeOrigin, byte[][] certificateChain,
+        public void getInstruments(String id, Map<String, PaymentMethodData> methodData,
+                String origin, String iframeOrigin, byte[][] certificateChain,
                 Map<String, PaymentDetailsModifier> modifiers,
                 InstrumentsCallback instrumentsCallback) {
             mCallback = instrumentsCallback;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinatorTest.java
new file mode 100644
index 0000000..c64132e
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/RevampedContextMenuCoordinatorTest.java
@@ -0,0 +1,128 @@
+// 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.contextmenu;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.app.Activity;
+import android.util.Pair;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.blink_public.web.WebContextMenuMediaType;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
+import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuGroup;
+import org.chromium.chrome.browser.contextmenu.RevampedContextMenuCoordinator.ListItemType;
+import org.chromium.ui.modelutil.PropertyModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Unit tests for the Revamped context menu.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+public class RevampedContextMenuCoordinatorTest {
+    private RevampedContextMenuCoordinator mCoordinator;
+    private Activity mActivity;
+
+    @Before
+    public void setUpTest() {
+        mActivity = Robolectric.setupActivity(Activity.class);
+        mCoordinator = new RevampedContextMenuCoordinator(0, null);
+    }
+
+    @Test
+    public void testGetItemListWithImageLink() {
+        final ContextMenuParams params = new ContextMenuParams(
+                WebContextMenuMediaType.IMAGE, "", "", "", "", "", "", null, false, 0, 0, 0);
+        List<Pair<Integer, List<ContextMenuItem>>> rawItems = new ArrayList<>();
+        // Link items
+        List<ContextMenuItem> groupOne = new ArrayList<>();
+        groupOne.add(new ChromeContextMenuItem(Item.OPEN_IN_NEW_TAB));
+        groupOne.add(new ChromeContextMenuItem(Item.OPEN_IN_INCOGNITO_TAB));
+        groupOne.add(new ChromeContextMenuItem(Item.SAVE_LINK_AS));
+        groupOne.add(new ShareContextMenuItem(0, R.string.contextmenu_share_link,
+                org.chromium.chrome.R.id.contextmenu_share_link, true));
+        rawItems.add(new Pair<>(ContextMenuGroup.LINK, groupOne));
+        // Image Items
+        List<ContextMenuItem> groupTwo = new ArrayList<>();
+        groupTwo.add(new ChromeContextMenuItem(Item.OPEN_IMAGE_IN_NEW_TAB));
+        groupTwo.add(new ChromeContextMenuItem(Item.SAVE_IMAGE));
+        groupTwo.add(new ShareContextMenuItem(0, R.string.contextmenu_share_image,
+                org.chromium.chrome.R.id.contextmenu_share_image, false));
+        rawItems.add(new Pair<>(ContextMenuGroup.IMAGE, groupTwo));
+
+        mCoordinator.initializeHeaderCoordinatorForTesting(mActivity, params);
+        List<Pair<Integer, PropertyModel>> itemList =
+                mCoordinator.getItemList(mActivity, rawItems, params);
+
+        assertThat(itemList.get(0).first, equalTo(ListItemType.HEADER));
+        assertThat(itemList.get(1).first, equalTo(ListItemType.DIVIDER));
+        assertThat(itemList.get(2).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(3).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(4).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(5).first, equalTo(ListItemType.CONTEXT_MENU_SHARE_ITEM));
+        assertThat(itemList.get(6).first, equalTo(ListItemType.DIVIDER));
+        assertThat(itemList.get(7).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(8).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(9).first, equalTo(ListItemType.CONTEXT_MENU_SHARE_ITEM));
+    }
+
+    @Test
+    public void testGetItemListWithLink() {
+        // We're testing it for a link, but the mediaType in params is image. That's because if it
+        // isn't image or video, the header mediator tries to get a favicon for us and calls
+        // Profile.getLastUsedProfile(), which throws an exception because native isn't initialized.
+        // mediaType here doesn't have any effect on what we're testing.
+        final ContextMenuParams params = new ContextMenuParams(
+                WebContextMenuMediaType.IMAGE, "", "", "", "", "", "", null, false, 0, 0, 0);
+        List<Pair<Integer, List<ContextMenuItem>>> rawItems = new ArrayList<>();
+        // Link items
+        List<ContextMenuItem> groupOne = new ArrayList<>();
+        groupOne.add(new ChromeContextMenuItem(Item.OPEN_IN_NEW_TAB));
+        groupOne.add(new ChromeContextMenuItem(Item.OPEN_IN_INCOGNITO_TAB));
+        groupOne.add(new ChromeContextMenuItem(Item.SAVE_LINK_AS));
+        groupOne.add(new ShareContextMenuItem(0, R.string.contextmenu_share_link,
+                org.chromium.chrome.R.id.contextmenu_share_link, true));
+        rawItems.add(new Pair<>(ContextMenuGroup.LINK, groupOne));
+
+        mCoordinator.initializeHeaderCoordinatorForTesting(mActivity, params);
+        List<Pair<Integer, PropertyModel>> itemList =
+                mCoordinator.getItemList(mActivity, rawItems, params);
+
+        assertThat(itemList.get(0).first, equalTo(ListItemType.HEADER));
+        assertThat(itemList.get(1).first, equalTo(ListItemType.DIVIDER));
+        assertThat(itemList.get(2).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(3).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(4).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+        assertThat(itemList.get(5).first, equalTo(ListItemType.CONTEXT_MENU_SHARE_ITEM));
+    }
+
+    @Test
+    public void testGetItemListWithVideo() {
+        final ContextMenuParams params = new ContextMenuParams(
+                WebContextMenuMediaType.VIDEO, "", "", "", "", "", "", null, false, 0, 0, 0);
+        List<Pair<Integer, List<ContextMenuItem>>> rawItems = new ArrayList<>();
+        // Video items
+        List<ContextMenuItem> groupOne = new ArrayList<>();
+        groupOne.add(new ChromeContextMenuItem(Item.SAVE_VIDEO));
+        rawItems.add(new Pair<>(ContextMenuGroup.LINK, groupOne));
+
+        mCoordinator.initializeHeaderCoordinatorForTesting(mActivity, params);
+        List<Pair<Integer, PropertyModel>> itemList =
+                mCoordinator.getItemList(mActivity, rawItems, params);
+
+        assertThat(itemList.get(0).first, equalTo(ListItemType.HEADER));
+        assertThat(itemList.get(1).first, equalTo(ListItemType.DIVIDER));
+        assertThat(itemList.get(2).first, equalTo(ListItemType.CONTEXT_MENU_ITEM));
+    }
+}
diff --git a/chrome/app/media_router_strings.grdp b/chrome/app/media_router_strings.grdp
index b4ed9eb5..6f30cae4 100644
--- a/chrome/app/media_router_strings.grdp
+++ b/chrome/app/media_router_strings.grdp
@@ -2,43 +2,14 @@
 <!-- Media Router-specific strings (included from generated_resources.grd). -->
 <grit-part>
   <!-- General -->
-  <message name="IDS_MEDIA_ROUTER_TITLE" desc="Title of a dialog offering possible actions for Media Router, which enables users to mirror individual tabs or desktop as well as cast content to a device.">
-    Media Router
-  </message>
   <message name="IDS_MEDIA_ROUTER_ICON_TOOLTIP_TEXT" desc="Tooltip for the Media Router Action icon, which appears in the toolbar. The tooltip appears on mouseover of the icon.">
    Display on another screen
   </message>
   <message name="IDS_MEDIA_ROUTER_MENU_ITEM_TITLE" desc="Title of menu item for Media Router, which appears in the overflow menu and page contextual menus.">
     &amp;Cast...
   </message>
-  <message name="IDS_MEDIA_ROUTER_CAST_DIALOG_TITLE" desc="Title of the dialog with which users can cast media contents to Chromecast and other devices. This text is shown at the top of the dialog on its own line, and should be considered a verb.">
-    Cast
-  </message>
-
-  <!-- Button Titles -->
-  <message name="IDS_MEDIA_ROUTER_BACK_BUTTON_TITLE" desc="Back button title, which is spoken when a screen reader is being used.">
-    Back
-  </message>
-  <message name="IDS_MEDIA_ROUTER_CLOSE_BUTTON_TITLE" desc="Close button title, which is spoken when a screen reader is being used.">
-    Close
-  </message>
-  <message name="IDS_MEDIA_ROUTER_SEARCH_BUTTON_TITLE" desc="Search button title, which is spoken when a screen reader is being used.">
-    Search
-  </message>
-  <message name="IDS_MEDIA_ROUTER_VIEW_CAST_MODE_LIST_BUTTON_TITLE" desc="View cast modes list button title, which is spoken when a screen reader is being used.">
-    View cast mode list
-  </message>
-  <message name="IDS_MEDIA_ROUTER_VIEW_DEVICE_LIST_BUTTON_TITLE" desc="View device list button title, which is spoken when a screen reader is being used.">
-    View device list
-  </message>
-  <message name="IDS_MEDIA_ROUTER_STOP_CASTING_BUTTON_ACCESSIBLE_NAME" desc="A label for the stop button that is read by screen readers when the button is in focus. It mentions device name and status to indicate which device the button is for.">
-    Stop, <ph name="SINK_NAME">$1<ex>Living Room TV</ex></ph>, <ph name="SINK_STATUS">$2<ex>Casting YouTube</ex></ph>
-  </message>
 
   <!-- Cast Modes -->
-  <message name="IDS_MEDIA_ROUTER_AUTO_CAST_MODE" desc="Title for auto cast mode that appears as the header of a list of devices. This represents the mode that will be initially shown, if the list of sinks supports more than one of the cast modes below. Note that auto mode is not a real cast mode and merely serves as a proxy for the other cast modes. This is NOT shown as a dropdown option.">
-    Cast to
-  </message>
   <message name="IDS_MEDIA_ROUTER_PRESENTATION_CAST_MODE" desc="Title for the presentation cast mode, which is used when the page is cast enabled. This is shown as a dropdown option, and if selected, also appears as the header of a list of devices.">
     Cast <ph name="HOST_NAME">$1<ex>google.com</ex></ph>
   </message>
@@ -53,15 +24,6 @@
   </message>
 
   <!-- Cast Mode Picker -->
-  <message name="IDS_MEDIA_ROUTER_SELECT_CAST_MODE_HEADER" desc="Header for the select cast mode view, which shows a list of cast modes that the user can select.">
-    Select source
-  </message>
-  <message name="IDS_MEDIA_ROUTER_SHARE_YOUR_SCREEN_SUBHEADING" desc="Subheading for screen sharing cast modes. The subheading appears above a list of screen sharing cast modes.">
-    Share your screen
-  </message>
-  <message name="IDS_MEDIA_ROUTER_CAST_LOCAL_MEDIA_SUBHEADING" desc="Subheading for local file cast modes. The subheading appears above a list of media cast modes.">
-    Stream a video or audio file
-  </message>
   <message name="IDS_MEDIA_ROUTER_CAST_LOCAL_MEDIA_TITLE" desc="Title of the local file cast mode after a local file is selected for casting.">
     Cast <ph name="FILE_NAME">$1<ex>my_media.mp3</ex></ph>
   </message>
@@ -92,39 +54,7 @@
     Optimize fullscreen videos
   </message>
 
-  <!-- First Run Flow -->
-  <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_CLOUD_PREF_TEXT" desc="Text of the cloud services preferences text in the first run flow, which is shown to the user if they are currently signed in and have enabled sync.">
-    Enable casting to cloud-based services like Google Hangouts.
-  </message>
-  <if expr="_google_chrome">
-    <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TITLE" desc="Title of the first run flow, which is shown to the user the first time they use Media Router, until they acknowledge the message. This is a welcome message that introduces Media Router to the user.">
-      Welcome to the Cast experience in Chrome!
-    </message>
-    <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TEXT" desc="Text of the first run flow, which is shown to the user the first time they use Media Router. This is an introductory description of what Media Router does.">
-      You can use this feature to display content from Chrome on your TV or other devices.
-    </message>
-  </if>
-  <if expr="not _google_chrome">
-    <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TITLE" desc="Title of the first run flow, which is shown to the user the first time they use Media Router, until they acknowledge the message. This is a welcome message that introduces Media Router to the user.">
-      Welcome to the Cast experience in Chromium!
-    </message>
-    <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TEXT" desc="Text of the first run flow, which is shown to the user the first time they use Media Router. This is an introductory description of what Media Router does.">
-      You can use this feature to display content from Chromium on your TV or other devices.
-    </message>
-  </if>
-  <message name="IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_BUTTON" desc="Acknowledge button for the first run flow, which, on click, will dismiss the first run flow and set the current profile's preference that the user has acknowledged the first run flow.">
-    Ok, got it
-  </message>
-
-  <!-- Issue Actions -->
-  <message name="IDS_MEDIA_ROUTER_DISMISS_BUTTON" desc="Dismiss button, which, on click, will dismiss the current issue.">
-    Dismiss
-  </message>
-
   <!-- Issue Messaging -->
-  <message name="IDS_MEDIA_ROUTER_ISSUE_HEADER" desc="Title of the header in the dialog when there is a user action blocking issue surfaced.">
-    Error
-  </message>
   <message name="IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT" desc="Title of an issue to show when the user attempts to create a route and the Media Router times out while waiting for a route creation response.">
     Unable to cast <ph name="HOST_NAME">$1<ex>youtube.com</ex></ph>.
   </message>
@@ -134,9 +64,6 @@
   <message name="IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB" desc="Title of an issue to show when the user attempts to create a route to mirror a tab and the Media Router times out while waiting for a route creation response.">
     Unable to cast tab.
   </message>
-  <message name="IDS_MEDIA_ROUTER_ISSUE_PENDING_ROUTE" desc="Title of an issue to show when the user attempts to create more than one route at a time.">
-    Only one session can be created at a time.
-  </message>
   <message name="IDS_MEDIA_ROUTER_ISSUE_UNABLE_TO_CAST_DESKTOP" desc="Title of an issue to show when creating a route for desktop mirroring fails for a reason other than timeout.">
     Unable to cast desktop.
   </message>
@@ -147,59 +74,6 @@
     Unable to cast <ph name="FILE_NAME">$1<ex>my_media.mp3</ex></ph>.
   </message>
 
-  <!-- Route Details -->
-  <message name="IDS_MEDIA_ROUTER_CASTING_ACTIVITY_STATUS" desc="Label of activity status, which describes the media that is currently being casted.">
-    Casting: <ph name="routeTitle">$1<ex>Video</ex></ph>
-  </message>
-  <message name="IDS_MEDIA_ROUTER_START_CASTING_BUTTON" desc="Start casting button, which, on click, will start casting to the current route.">
-    Cast
-  </message>
-  <message name="IDS_MEDIA_ROUTER_STOP_CASTING_BUTTON" desc="Stop casting button, which, on click, will stop the current route.">
-    Stop
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_PLAY_TITLE" desc="The title label for a button to play media contents.">
-    Play
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_PAUSE_TITLE" desc="The title label for a button to pause media contents.">
-    Pause
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_MUTE_TITLE" desc="The title label for a button to mute media contents.">
-    Mute
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_UNMUTE_TITLE" desc="The title label for a button to unmute media contents.">
-    Unmute
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_SEEK_TITLE" desc="The title label for a seek bar for media contents.">
-    Seek
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_VOLUME_TITLE" desc="The title label for a volume control bar for media contents.">
-    Volume
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_CURRENT_TIME_LABEL" desc="The label for the current time position of media contents.">
-    Current time
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_DURATION_LABEL" desc="The label for the total duration of media contents.">
-    Duration
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_HANGOUTS_LOCAL_PRESENT_TITLE" desc="The title for the local present mode toggle for casting to a Hangouts.">
-    Smooth Motion [beta]
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_HANGOUTS_LOCAL_PRESENT_SUBTITLE" desc="The subtitle for the local present mode toggle for casting to a Hangouts.">
-    Use high bandwidth for best video or animation. Other people with slow connections may not see your content.
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_ALWAYS_USE_MIRRORING_TITLE" desc="The title for a toggle setting to choose whether video should always be mirrored (played locally and remotely), or played only remotely.">
-    Always use mirroring
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_DROPDOWN_TITLE" desc="The title for a toggle setting to choose whether fullscreen videos should always be mirrored (played locally and remotely), or played only remotely.">
-    Show fullscreen videos on
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_BOTH_SCREENS" desc="Settings option to play fullscreen videos both locally and remotely.">
-    Both screens
-  </message>
-  <message name="IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_REMOTE_SCREEN" desc="Settings option to play fullscreen videos only remotely.">
-    Remote screen
-  </message>
-
   <!-- Sink List -->
   <message name="IDS_MEDIA_ROUTER_STATUS_LOOKING_FOR_DEVICES" desc="Status text temporarily shown while searching for Cast devices but none have been found.">
     Looking for devices
@@ -229,14 +103,6 @@
     Source not supported
   </message>
 
-  <!-- Sink Search -->
-  <message name="IDS_MEDIA_ROUTER_SEARCH_LABEL" desc="Label for search input in sink list.">
-    Search
-  </message>
-  <message name="IDS_MEDIA_ROUTER_SEARCH_NO_MATCHES" desc="Text to display when there are no sinks matching the user input search text.">
-    No matches
-  </message>
-
   <!-- File Dialog -->
   <message name="IDS_MEDIA_ROUTER_FILE_DIALOG_AUDIO_VIDEO_FILTER" desc="Label for the drop down menu in the file selection dialog to show only audio and
 video files, instead of all files.">
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 969499c6..aa66285 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -97,6 +97,7 @@
 <translation id="1128109161498068552">ማናቸውንም ጣቢያዎች ለሚመለከተው ስርዓት የተወሰኑ መልዕክቶችን MIDI መሳሪያዎችን ለመድረስ እንዲጠቀሙ አይፍቀዱ።</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">የፍለጋ ፕሮግራምን ያርትዑ</translation>
+<translation id="113124294734065964">ትከል ችግር አለው</translation>
 <translation id="1134009406053225289">ማንነትን በማያሳውቅ መስኮት ክፈት</translation>
 <translation id="1136712381129578788">ትክክል ያልሆነ ፒን ከልክ በላይ ለብዙ ጊዜ ስለገባ ይህ የደህንነት ቁልፍ ተቆልፏል። ለመክፈት፣ ያስወግዱት እና እንደገና ያስገቡት።</translation>
 <translation id="1137673463384776352">አገናኝን በ<ph name="APP" /> ውስጥ ክፈት</translation>
@@ -190,6 +191,7 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="1269405567167332785">የላቀ ውቅረት</translation>
 <translation id="1272079795634619415">አቁም</translation>
+<translation id="1272293450992660632">ፒን እሴቶች አይዛመዱም።</translation>
 <translation id="1272978324304772054">ይህ የተጠቃሚ መለያ መሣሪያው የተመዘገበበት ጎራ አካል አይደለም።  ወደተለየ ጎራ መመዝገብ ከፈለጉ መጀመሪያ የመሣሪያ ዳግም ማግኛን ማከናወን አለብዎት።</translation>
 <translation id="1274977772557788323">የAdobe Flash Player ማከማቻ ቅንብሮች</translation>
 <translation id="1274997165432133392">ኩኪዎች እና የሌላ ጣቢያ ውሂብ</translation>
@@ -238,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />፦ <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPDን ማግኘት አልተቻለም። የእርስዎ Chromebook መስመር ላይ መሆኑን ያረጋግጡና እንደገና ይሞክሩ።</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> ታግዷል</translation>
-<translation id="1357589289913453911">የቅጥያ መታወቂያ</translation>
 <translation id="1358741672408003399">እረማ ሆሄ እና ሰዋስው</translation>
 <translation id="1361164813881551742">ራስዎ ያክሉ</translation>
 <translation id="1361655923249334273">ጥቅም ላይ ያልዋለ</translation>
@@ -318,7 +319,6 @@
 <translation id="1470967055429794975">ይህ ፒኑን ጨምሮ በደህንነቱ ቁልፉ ላይ ያለው ሁሉምን ውሂብ ይደመስሳል</translation>
 <translation id="1475502736924165259">ከሌሎች ማንኛቸውም መደቦች ጋር የማይገጣጠሙ የእውቅና ማረጋገጫዎች በፋይል ላይ አለዎት</translation>
 <translation id="1476607407192946488">የ&amp;ቋንቋ ቅንብሮች...</translation>
-<translation id="1477301030751268706">የመታወቂያ ኤ ፒ አይ ማስመሰያ መሸጎጫ</translation>
 <translation id="1478340334823509079">ዝርዝሮች፦ <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">መጫን አልነቃም</translation>
 <translation id="1483493594462132177">ላክ</translation>
@@ -387,6 +387,7 @@
 <translation id="1572876035008611720">የእርስዎን ኢሜይል ያስገቡ</translation>
 <translation id="1576594961618857597">ነባሪ ነጭ አምሳያ</translation>
 <translation id="1581962803218266616">በፈላጊ ውስጥ አሳይ</translation>
+<translation id="1582955169539260415">ሰርዝ [<ph name="FINGERPRINT_NAME" />]</translation>
 <translation id="1584990664401018068">እየተጠቀሙ ያሉት Wi-Fi አውታረ መረብ (<ph name="NETWORK_ID" />) ማረጋገጫን ሊጠይቅ ይችላል።</translation>
 <translation id="1585717515139318619">በኮምፒውተርዎ ላይ ያለ ሌላ ፕሮግራም Chrome የሚሰራበት መንገድ ሊቀይር የሚችል አንድ ገጽታ አክሏል።
 
@@ -446,6 +447,7 @@
 <translation id="1657406563541664238">የአጠቃቀም ስታቲክሶችን እና የስንኩል ሪፖርቶችን ወደ Google በቀጥታ በመላክ <ph name="PRODUCT_NAME" />ን የተሻለ ለማድረግ እገዛ ያድርጉ።</translation>
 <translation id="1658424621194652532">ይህ ገጽ ማይክሮፎንዎን እየደረሰበት ነው።</translation>
 <translation id="1660204651932907780">ጣቢያዎች ድምጽን እንዲያጫውቱ ፍቀድ (የሚመከር)</translation>
+<translation id="1660763353352708040">የኃይል አስማሚ ችግር</translation>
 <translation id="1661156625580498328">የAES ምሥጠራን ተግብር (የሚመከር)።</translation>
 <translation id="166179487779922818">የይለፍ ቃሉ በጣም አጭር ነው።</translation>
 <translation id="1661867754829461514">ፒን ይጎድላል</translation>
@@ -537,6 +539,7 @@
 <translation id="1792619191750875668">የተቀጠለ ማሳያ</translation>
 <translation id="1794791083288629568">እኛ ይህን ችግር እንድንፈታው ለማገዝ ግብረመልስ ይላኩ።</translation>
 <translation id="1795214765651529549">የታወቀ ገጽታን ተጠቀም</translation>
+<translation id="1797738254362176886">የመለያ መግቢያ ውሂቡን ለመመልከት ያስገቡ እና የእርስዎን ደህንነት ቁልፍ ነካ ያድርጉ።</translation>
 <translation id="1799071797295057738">የ«<ph name="EXTENSION_NAME" />» ቅጥያ በራስ-ሰር ተሰናክሏል።</translation>
 <translation id="1802687198411089702">ይህ ገጽ ምላሽ እየሰጠ አይደለም። እሱን መጠበቅ ወይም ትተው መውጣት ይችላል።</translation>
 <translation id="1802931390041703523">Flash በዚህ ገጽ ላይ ታግዷል</translation>
@@ -613,6 +616,7 @@
 <translation id="1895934970388272448">ይህን ሂደት ለማጠናቀቅ በእርስዎ አታሚ ላይ ምዝገባ ማረጋገጥ አለብዎት - አሁን ያረጋግጡት።</translation>
 <translation id="1899826437968063457">Plugin VM ለማሄድ ፈቃድ ይፈልጋል</translation>
 <translation id="1901303067676059328">&amp;ሁሉንም ምረጥ</translation>
+<translation id="1901984611178952431">በመለያ መግቢያ ውሂብን አስተዳድር</translation>
 <translation id="1902576642799138955">የተገቢነት ክፍለ ጊዜ</translation>
 <translation id="1904394285866191268">{NUM_TABS,plural, =1{ትር ላይ ድምጸ-ከል አድርግ}one{ትሮች ላይ ድምጸ-ከል አድርግ}other{ትሮች ላይ ድምጸ-ከል አድርግ}}</translation>
 <translation id="1905375423839394163">የChromebook መሣሪያ ስም</translation>
@@ -722,7 +726,6 @@
 <translation id="2090876986345970080">የስርዓት ደህንነት ቅንብር</translation>
 <translation id="2091887806945687916">ድምፅ</translation>
 <translation id="2097372108957554726">አዲስ መሣሪያዎችን ለማስመዝገብ በመለያ ወደ Chrome መግባት አለብዎት</translation>
-<translation id="2098305189700762159">አልተገኘም</translation>
 <translation id="2099172618127234427">የsshd ስውር አገልጋይን የሚያዋቅሩ እና ከዩኤስቢ አንጻፊዎች ማስነሳትን የሚያነቁ የChrome OS ማረሚያ ባህሪያትን እያነቁ ነው።</translation>
 <translation id="2099686503067610784">«<ph name="CERTIFICATE_NAME" />» የአገልጋይ እውቅና ማረጋገጫ ይሰረዝ?</translation>
 <translation id="2100273922101894616">በራስ-ግባ</translation>
@@ -872,6 +875,7 @@
 <translation id="2294358108254308676"><ph name="PRODUCT_NAME" />ን መጫን ይፈልጋሉ?</translation>
 <translation id="2297705863329999812">አታሚዎችን ይፈልጉ</translation>
 <translation id="2300383962156589922"><ph name="APP_NAME" />ን ያብጁት እና ይቆጣጠሩት</translation>
+<translation id="2300800387751317588">ኩኪዎችን በማስጀመሪያ ላይ ስላጸዱ ስምረት ላፍታ ቆሟል። ስምረትን ለመቀጠል <ph name="COOKIE_SETTINGS_LINK" /> ይለውጡ።</translation>
 <translation id="2301382460326681002">የቅጥያ ስርወ ማውጫ ልክ አይደለም።</translation>
 <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» ተጨማሪ ፍቃዶችን ጠይቋል።</translation>
 <translation id="2307462900900812319">አውታረ መረብ አዋቅር</translation>
@@ -933,11 +937,11 @@
 <translation id="2386926718981642523">«Ok Google» ባሉ ማንኛውም ጊዜ ረዳትዎን ይድረሱ</translation>
 <translation id="2387458720915042159">የተኪ ግንኙነት አይነት</translation>
 <translation id="2391419135980381625">መደበኛ ቅርጸ-ቁምፊ</translation>
-<translation id="2391762656119864333">ሻር</translation>
 <translation id="2392369802118427583">አግብር</translation>
 <translation id="2394566832561516196">በቀጣይ እንደገና ሲጀምር ቅንብሮች ይወገዳሉ።</translation>
 <translation id="2395616325548404795">የእርስዎ <ph name="DEVICE_TYPE" /> በተሳካ ሁኔታ ለድርጅት አስተዳደር ተመዝግቧል፣ ነገር ግን የእሴት እና የአካባቢ መረጃውን መላክ አልተሳካም። እባክዎ ለዚህ መሣሪያ ይህን መረጃ ከእርስዎ መሥሪያዎ ላይ ራስዎ ያስገቡ።</translation>
 <translation id="2396783860772170191">ባለ4 አኃዝ ፒን (0000-9999) ያስገቡ</translation>
+<translation id="2399939490305346086">የደህንነት ቁልፍ በመለያ መግቢያ ውሂብ</translation>
 <translation id="2408955596600435184">የእርስዎን ፒን ያስገቡ</translation>
 <translation id="241082044617551207">ያልታወቀ ተሰኪ</translation>
 <translation id="2412593942846481727">ዝማኔ ይገኛል</translation>
@@ -957,6 +961,7 @@
 <translation id="2435457462613246316">የይለፍ ቃል አሳይ</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ሁሉንም የ<ph name="PROTOCOL" /> አገናኞች እንዲከፍት ይፈቀድለት?</translation>
 <translation id="2436707352762155834">አነስተኛ</translation>
+<translation id="2436720498717686157">የእርስዎ ድርጅት አሁኑኑ ከዚህ መሣሪያ ዝማኔን ይጠይቃል</translation>
 <translation id="2439545803278355377">አዲሱን የእርስዎ ፒን ያስገቡ። ፒን ቢያንስ የአራት ቁምፊዎች ርዝመት ሊኖረው ይገባል እና ፊደላትን፣ ቁጥሮችን እና ሌሎች ቁምፊዎችን ይይዛል።</translation>
 <translation id="2440604414813129000">ም&amp;ንጭ አሳይ</translation>
 <translation id="2444119669991608829">ገጽ በ<ph name="LANGUAGE" /> አይደለም?</translation>
@@ -1232,6 +1237,7 @@
 <translation id="2820957248982571256">በመቃኘት ላይ...</translation>
 <translation id="2822634587701817431">አሳንስ / ዘርጋ</translation>
 <translation id="2822910719211888134">Linuxን በምትኬ በማስቀመጥ ወቅት ስህተት</translation>
+<translation id="2824942875887026017"><ph name="IDS_SHORT_PRODUCT_NAME" /> ከእርስዎ አስተዳዳሪ የወኪል ቅንብሮችን እየተጠቀመ ነው</translation>
 <translation id="2825758591930162672">የርዕሰ ጉዳዩ ህዝባዊ ቁልፍ</translation>
 <translation id="2825848369316359348">በደህንነት ቁልፍዎ ጀርባ ላይ የታተመውን ስም ያግኙ</translation>
 <translation id="2828650939514476812">ወደ Wi-Fi አውታረ መረብ አገናኝ</translation>
@@ -1365,6 +1371,7 @@
 <translation id="3022978424994383087">አልሰማሁትም።</translation>
 <translation id="3023464535986383522">ለመናገር-ይምረጡ</translation>
 <translation id="3024374909719388945">ባለ 24 ሰዓት ይጠቀሙ</translation>
+<translation id="30256218463955326">ትከል ተኳዃኝ አይደለም</translation>
 <translation id="3031417829280473749">Agent X</translation>
 <translation id="3031557471081358569">ከውጪ ለማስመጣት ንጥሎችን ምረጥ፦</translation>
 <translation id="3031601332414921114">ማተምን ካቆምክበት ቀጥል</translation>
@@ -1555,6 +1562,7 @@
 <translation id="3348038390189153836">ተነቃይ መሣሪያ ተገኝቷል</translation>
 <translation id="3349933790966648062">የማህደረ ትውስታ</translation>
 <translation id="3350117557200012647">ወደ የማጣመር ሁኔታ ሂድ</translation>
+<translation id="3350263973613584174">ይህ የደህንነት ቁልፍ ምንም የተከማቸ በመለያ መግቢያ መረጃ የለውም።</translation>
 <translation id="3355936511340229503">የግንኙነት ስህተት</translation>
 <translation id="3356580349448036450">ተጠናቅቋል</translation>
 <translation id="3359256513598016054">የሰርቲፊኬት መመሪያ እገዳዎች</translation>
@@ -1882,6 +1890,7 @@
 <translation id="3812525830114410218">መጥፎ የእውቅና ማረጋገጫ</translation>
 <translation id="3813296892522778813">የሚፈልጉትን ነገር ማግኘት ካልቻሉ ወደ <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome እገዛ<ph name="END_LINK_CHROMIUM" /> ይሂዱ</translation>
 <translation id="3816118180265633665">Chrome ቀለማት</translation>
+<translation id="3817524650114746564">የእርስዎን ኮምፒውተር ወኪል ቅንብሮች ይክፈቱ</translation>
 <translation id="3817579325494460411">አልቀረበም</translation>
 <translation id="3819257035322786455">ምትኬ ያስቀምጡ</translation>
 <translation id="3819261658055281761">ሥርዓቱ ለዚህ መሣሪያ የረጅም ጊዜ ኤፒአይ መዳረሻ ማስመሰያን ማከማቸት አልቻለም።</translation>
@@ -1935,6 +1944,7 @@
 <translation id="3878840326289104869">ቁጥጥር ላይ ያለ ተጠቃሚ በመፍጠር ላይ</translation>
 <translation id="3879748587602334249">የማውረድ አቀናባሪ</translation>
 <translation id="3888550877729210209">ማስታወሻዎችን በ<ph name="LOCK_SCREEN_APP_NAME" /> በመውሰድ ላይ</translation>
+<translation id="388900914234409233">ይህን Chromebook ኃይል ለመሙላት፣ ተኳዃኝ የሆነ የ OEM ባትሪ ይጠቀሙ።</translation>
 <translation id="3892414795099177503">OpenVPN / L2TP ያክሉ...</translation>
 <translation id="3893536212201235195">የተደራሽነት ቅንብሮችዎን ያነብባል እና ይቀይራል</translation>
 <translation id="3893630138897523026">ChromeVox (የሚነገር ግብረመልስ)</translation>
@@ -1942,7 +1952,6 @@
 <translation id="3894123633473837029">በSherlog በኩል የቅርብ ጊዜ የረዳት ታሪክን አካትት። ይህ የእርስዎን ማንነት፣ አካባቢ እና የማረሚያ መረጃን ሊያካትት ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">አቃፊ ያክሉ</translation>
 <translation id="389589731200570180">ለእንግዳዎች ያጋሩ</translation>
-<translation id="3898521660513055167">የማስመሰያ ሁኔታ</translation>
 <translation id="389901847090970821">የቁልፍ ሰሌዳን ይምረጡ</translation>
 <translation id="3899879303189199559">ከአንድ ዓመት በላይ ከመስመር ውጪ</translation>
 <translation id="3900966090527141178">የይለፍ ቃላትን ወደ ውጭ ይላኩ</translation>
@@ -2047,6 +2056,7 @@
 <translation id="4044612648082411741">የእርስዎን የዕውቅና ማረጋገጫ ይለፍ ቃል ያስገቡ</translation>
 <translation id="404493185430269859">ነባሪ የፍለጋ ፕሮግራም</translation>
 <translation id="4046123991198612571">ቀጣይ ትራክ</translation>
+<translation id="4050225813016893843">የማረጋገጫ ዘዴ</translation>
 <translation id="4052120076834320548">በጣም ትንሽ</translation>
 <translation id="4055023634561256217">መሣሪያዎ በPowerwash ዳግም ሊጀምር ከመቻሉ በፊት ዳግም ማስጀመር ያስፈልጋል።</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
@@ -2094,6 +2104,7 @@
 <translation id="4109135793348361820">መስኮት ወደ <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) ውሰድ</translation>
 <translation id="4110490973560452005">ውርድ ተጠናቅቋል፦ <ph name="FILE_NAME" />። የውርዶች አሞሌ አካባቢውን ለመቀየር Shift+F6 ይጫኑ።</translation>
 <translation id="4110895898888439383">ድሩን በከፍተኛ ንጽጽር ሁነታ ያስሱ</translation>
+<translation id="4111407695731262203">የእርስዎ ቅንብሮች</translation>
 <translation id="4115002065223188701">አውታረ መረብ ከክልል ውጭ ነው</translation>
 <translation id="4115080753528843955">አንዳንድ የይዘት አገልግሎቶች የሚጠበቅ ይዘት መዳረሻን ለመፍቀድ ዓላማዎች ልዩ ለዪዎችን ይጠቀማሉ</translation>
 <translation id="4115378294792113321">ሮዝ</translation>
@@ -2119,6 +2130,7 @@
 <translation id="4147911968024186208">እባክዎ እንደገና ይሞክሩ። ይህን ስህተት በድጋሚ ከተመለከቱ እባክዎ የድጋፍ ተወካይዎን ያነጋግሩ።</translation>
 <translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">ማሳያ</translation>
+<translation id="4150234330364554482">ከዚህ Chromebook እንዲሠራ የተዘጋጀ የ OEM ተከላ ጣቢያን ይጠቀሙ።</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ትር}one{# ትሮች}other{# ትሮች}}</translation>
 <translation id="4154664944169082762">የጣት አሻራዎች</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -2265,6 +2277,7 @@
 <translation id="4412698727486357573">የእገዛ ማዕከል</translation>
 <translation id="44141919652824029">«<ph name="APP_NAME" />» የተያያዙ ዩኤስቢ መሣሪያዎችዎን ዝርዝር እንዲያገኝ ይፈቀድለት?</translation>
 <translation id="4414232939543644979">አዲስ ማን&amp;ነትን የማያሳውቅ መስኮት</translation>
+<translation id="4414386768539506503">በመለያ መግቢያ ውሂቡን ለማየት ለእርስዎ ደህንነት ቁልፍ ፒኑን ያስገቡ። ፒኑን የማያውቁት ከሆነ፣ የደህንነት ቁልፉን ዳግም ማቀናበር ያስፈልግዎታል።</translation>
 <translation id="4415245286584082850">ምንም መሣሪያዎች አልተገኙም። የእገዛ ማዕከል ጽሑፍ በአዲስ ትር ላይ ይክፈቱ።</translation>
 <translation id="4415276339145661267">የGoogle መለያዎን ያቀናብሩ</translation>
 <translation id="4415748029120993980">የSECG ሞላላ ጥምዝ secp384r1 (እንዲሁም NIST P-384 በመባል የሚታወቅ)</translation>
@@ -2644,6 +2657,7 @@
 <translation id="5017633213534173756">አስታውስ</translation>
 <translation id="5018207570537526145">የቅጥያ ድር ጣቢያን ክፈት</translation>
 <translation id="5021750053540820849">እስካሁን አልተዘመነም</translation>
+<translation id="5026688690798028095">የመተግበሪያ አስተዳደርን ክፈት</translation>
 <translation id="5026874946691314267">ይህን ዳግም አታሳይ</translation>
 <translation id="5027550639139316293">የኢሜይል ሰርቲፊኬት</translation>
 <translation id="5027562294707732951">ቅጥያ ያክሉ</translation>
@@ -2676,6 +2690,7 @@
 <translation id="5072836811783999860">የሚቀናበሩ ዕልባቶችን አሳይ</translation>
 <translation id="5074318175948309511">አዲሶቹ ቅንብሮች ከመተግበራቸው በፊት ይህ ገጽ ዳግም መጫን ሊኖርበት ይችላል።</translation>
 <translation id="5075131525758602494">የሲም ፒን ያስገቡ</translation>
+<translation id="507514548843781244">በእርስዎ የደህንነት ቁልፍ ላይ የተከማቸውን በመለያ መግቢያ ውሂብ ይመልከቱ እና ይደምስሱ</translation>
 <translation id="5078638979202084724">ለሁሉም ትሮች ዕልባት ያብጁ</translation>
 <translation id="5078796286268621944">የተሳሳተ ፒን</translation>
 <translation id="5079950360618752063">የተጠቆመ የይለፍ ቃልን ይጠቀሙ</translation>
@@ -2770,7 +2785,6 @@
 <translation id="5235050375939235066">መተግበሪያ ይራገፍ?</translation>
 <translation id="5235750401727657667">አዲስ ትር በሚከፈትበት ጊዜ የሚመለከቱትን ገጽ ይተኩ</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>
 <translation id="5243522832766285132">እባክዎ ከጥቂት ጊዜ በኋላ እንደገና ይሞክሩ</translation>
@@ -2948,6 +2962,7 @@
 <translation id="5496587651328244253">አደራጅ</translation>
 <translation id="549673810209994709">ይህ ገጽ ሊተረጎም አይችልም።</translation>
 <translation id="5499313591153584299">ይህ ፋይል ለኮምፒዩተርዎ ጎጂ ሊሆን ይችላል።</translation>
+<translation id="5500345327355928305">ኃይል መሙላትን እና የአፈጻጸም ችግሮችን ለማስቀረት ተኳዃኝ የሆነ OEM ወይም USB Type-C ኃይል አስማሚ ይጠቀሙ።</translation>
 <translation id="5502500733115278303">ከFirefox የመጣ</translation>
 <translation id="5507756662695126555">ክህደት የሌለበት</translation>
 <translation id="5509693895992845810">አስቀምጥ &amp;እንደ…</translation>
@@ -3092,6 +3107,7 @@
 <translation id="5708171344853220004">Microsoft Principal Name</translation>
 <translation id="5709557627224531708">Chromeን እንደ ነባሪ አሳሽዎ አድርገው ያቀናብሩት</translation>
 <translation id="5711983031544731014">ማስከፈት አልተቻለም። የይለፍ ቃልዎን ያስገቡ።</translation>
+<translation id="5713723565110096165">የተሳሳተ ፒን። በግራ በኩል ዳግም ይሞክራል፦ <ph name="RETRIES" />።</translation>
 <translation id="5715711091495208045">የተሰኪ አስማሚ፦ <ph name="PLUGIN_NAME" /></translation>
 <translation id="5719603411793408026">ነባሪ የፍለጋ ፕሮግራሞች</translation>
 <translation id="5720705177508910913">የአሁኑ ተጠቃሚ</translation>
@@ -3102,6 +3118,7 @@
 <translation id="5727728807527375859">ቅጥያዎች፣ መተግበሪያዎች እና ገፅታዎች ኮምፒውተርዎን ሊጎዱ ይችላሉ። እርግጠኛ ነዎት መቀጠል ይፈልጋሉ?</translation>
 <translation id="5729712731028706266">&amp;እይታ</translation>
 <translation id="5734362860645681824">ተግባቦት</translation>
+<translation id="5734697361979786483">ፋይል አጋራን ያክሉ</translation>
 <translation id="5736796278325406685">እባክዎ የሚሠራ የተጠቃሚ ስም ያስገቡ</translation>
 <translation id="5739235828260127894">ማረጋገጫን በመጠበቅ ላይ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">በጣም ትልቅ</translation>
@@ -3145,6 +3162,7 @@
 <translation id="5794414402486823030">ሁልጊዜ ከስርዓት ተመልካች ጋር ይክፈቱ</translation>
 <translation id="5794786537412027208">ከሁሉም የChrome መተግበሪያዎች ውጣ</translation>
 <translation id="5797070761912323120">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ የእርስዎን ታሪክ ሊጠቀም ይችላል</translation>
+<translation id="579915268381781820">የእርስዎ የደህንነት ቁልፍ ተወግዷል።</translation>
 <translation id="5799508265798272974">የLinux ምናባዊ ማሽን፦ <ph name="LINUX_VM_NAME" /></translation>
 <translation id="5800020978570554460">የመድረሻ ፋይሉ ከመጨረሻ ውርዱ በኋላ ተቋርጧል ወይም ተወግዷል።</translation>
 <translation id="5801568494490449797">አማራጮች</translation>
@@ -3205,7 +3223,6 @@
 <translation id="5870155679953074650">ከባድ ስህተቶች</translation>
 <translation id="5877064549588274448">ሰርጥ ተለውጧል። ለውጦችን ለመተግበር መሳሪያዎን ዳግም ያስጀምሩ።</translation>
 <translation id="5877584842898320529">የተመረጠው አታሚ የለም ወይም በትክክል አልተጫነም። <ph name="BR" /> አታሚዎን ይፈትሹት ወይም ሌላ አታሚ ለመምረጥ ይሞክሩ።</translation>
-<translation id="5880247576487732437">ማስመሰያ አለ</translation>
 <translation id="5882919346125742463">የታወቁ አውታረ መረቦች</translation>
 <translation id="5884474295213649357">ይህ ትር ከአንድ የዩኤስቢ መሣሪያ ጋር የተገናኘ ነው።</translation>
 <translation id="5885324376209859881">የማህደረ መረጃ ቅንብሮችን ያቀናብሩ...</translation>
@@ -3287,6 +3304,7 @@
 <translation id="6010869025736512584">የቪዲዮ ግብዓትን በመድረስ ላይ</translation>
 <translation id="6011193465932186973">የጣት አሻራ</translation>
 <translation id="6011449291337289699">የጣቢያ ውሂብን አጽዳ</translation>
+<translation id="6015266928248016057">ልክ ያልኾነ PUK። በግራ በኩል ዳግም ይሞክራል፦ <ph name="RETRIES" />።</translation>
 <translation id="6015796118275082299">ዓመት</translation>
 <translation id="6016551720757758985">ወደ ቀድሞው ስሪት ከመመለስ ጋር Powerwashን ያረጋግጡ</translation>
 <translation id="6016972670657536680">የቋንቋ እና የቁልፍ ሰሌዳ አዝራርን ይምረጡ። አሁን የተመረጠው ቋንቋ <ph name="LANGUAGE" /> ነው።</translation>
@@ -3359,16 +3377,19 @@
 <translation id="6103681770816982672">ማስጠንቀቂያ፦ ወደ የገንቢ ሰርጥ እየቀየሩ ነው</translation>
 <translation id="6104068876731806426">የGoogle መለያዎች</translation>
 <translation id="6104311680260824317">መሣሪያን ከጎራው ጋር ማቀላቀል አልተቻለም። አገልጋዩ የተጠቀሱትን የKerberos ምሥጠራ ዓይነቶችን አይደግፍም። ለምሥጠራ ቅንብሮች «ተጨማሪ አማራጮች» ላይ ምልክት ያድርጉ።</translation>
+<translation id="6106186653986077033">Plugin VM ፈቃድ ይጠይቃል</translation>
 <translation id="6107012941649240045">ለእዚህ ቀርቧል</translation>
 <translation id="6112294629795967147">መጠን ለመቀየር ይንኩ</translation>
 <translation id="6112931163620622315">ስልክዎን ይፈትሹ</translation>
 <translation id="6112952769866305444">ግለሰብ፣ <ph name="PROFILE_NAME" />፣ <ph name="USERNAME" /> ያርትዑ</translation>
+<translation id="6113942107547980621">Smart Lockን ለመጠቀም፣ በእርስው ስልክ ላይ ወደ ተቀዳሚ የተጠቃሚ መገለጫ ይቀይሩ</translation>
 <translation id="6116338172782435947">ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍ እና ምስሎችን ይመልከቱ</translation>
 <translation id="6116921718742659598">የቋንቋ እና ግቤት ቅንብሮችን ይቀይሩ</translation>
 <translation id="6120205520491252677">ይህን ገጽ የመነሻ ገጹ ላይ ይሰኩት...</translation>
 <translation id="6122081475643980456">የበይነመረብ ግንኙነትዎ ቁጥጥር እየተደረገበት ነው</translation>
 <translation id="6122095009389448667">ይህ ጣቢያ ቅንጥብ ሰሌዳውን እንዳያይ መታገዱን ቀጥል</translation>
 <translation id="6122875415561139701">የመጻፍ ክወና በዚህ ላይ አይፈቀድም፦ «<ph name="DEVICE_NAME" />»።</translation>
+<translation id="6123292156101652890">የደህንነት ቁልፉ ምንም በመለያ መግቢያ ውሂብ ማከማቸት አይችልም።</translation>
 <translation id="6124650939968185064">የሚከተሉት ቅጥያዎች በዚህ ቅጥያ ላይ ይወሰናሉ፦</translation>
 <translation id="6124698108608891449">ይህ ጣቢያ ተጨማሪ ፈቃዶችን ይፈልጋል።</translation>
 <translation id="6125479973208104919">የአጋጣሚ ነገር ሆኖ መለያዎን እንደገና ወደዚህ <ph name="DEVICE_TYPE" /> ማከል አለብዎት።</translation>
@@ -3892,6 +3913,7 @@
 <translation id="6950627417367801484">መተግበሪያዎች</translation>
 <translation id="6950943362443484797">መተግበሪያውን እንጭንልዎታለን</translation>
 <translation id="6951153907720526401">የክፍያ ተቆጣጣሪይዎች</translation>
+<translation id="6951663584153258142">የእርስዎ ድርጅት ይህን መሣሪያ እንዲያዘምኑት ይጠይቅዎታል</translation>
 <translation id="6953878494808481632">ተዛማጅ መረጃ</translation>
 <translation id="6955446738988643816">ብቅ-ባይ ይመርምሩ</translation>
 <translation id="6957044667612803194">ይህ የደህንነት ቁልፍ ፒኖችን አይደግፍም</translation>
@@ -3910,6 +3932,7 @@
 <translation id="6974609594866392343">የመስመር ውጭ ማሳያ ሁነታ</translation>
 <translation id="6977381486153291903">የጽኑ ትዕዛዝ ክለሳ</translation>
 <translation id="6978121630131642226">የፍለጋ ፕሮግራሞች</translation>
+<translation id="6979044105893951891">አስጀምር እና የሚተዳደሩ የእንግዳ ክፍለ ጊዜያትን ትተህ ውጣ</translation>
 <translation id="6979440798594660689">ድምጸ-ከል አድርግ (ነባሪ)</translation>
 <translation id="6979737339423435258">የምንጊዜም</translation>
 <translation id="6981982820502123353">ተደራሽነት</translation>
@@ -4035,6 +4058,7 @@
 <translation id="7143092389027215216">የማሳያ ሁነታን በመጀመር ላይ</translation>
 <translation id="7143207342074048698">በመያያዝ ላይ</translation>
 <translation id="7144878232160441200">እንደገና ሞክር</translation>
+<translation id="714687768418476028">የእርስዎ ደህንነት ቁልፍ በፒን ጥበቃ እየተደረገለት አይደለም ያለው። በመለያ መግቢያ ውሂብን ለማስተዳደር በመጀመሪያ ፒን ይፍጠሩ።</translation>
 <translation id="7149893636342594995">ባለፉት 24 ሰዓቶች</translation>
 <translation id="715118844758971915">አይነታቸው የሚታወቁ አታሚዎች</translation>
 <translation id="7152478047064750137">ይህ ቅጥያ ምንም ልዩ ፈቃዶችን አይፈልግም</translation>
@@ -4668,7 +4692,6 @@
 <translation id="8045923671629973368">የመተግበሪያ መታወቂያ ወይም የድር መደብር ዩአርኤል ያስገቡ</translation>
 <translation id="804786196054284061">የመጨረሻ ተጠቃሚ የፍቃድ ስምምነት</translation>
 <translation id="8049705080247101012">Google «<ph name="EXTENSION_NAME" />»ን ተንኮል-አዘል ብሎ ጠቁሞታል፣ እና እንዳይጫን ተከልክሏል</translation>
-<translation id="8049913480579063185">የቅጥያ ስም</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 ፋይሎች</translation>
 <translation id="8053390638574070785">ይህን ገጽ ዳግም ጫን</translation>
@@ -4699,6 +4722,7 @@
     <ph name="BEGIN_PARAGRAPH4" />የምትኬ ውሂብ በDrive ማከማቻ ኮታዎ ላይ አይቆጠርም።<ph name="END_PARAGRAPH4" />
     <ph name="BEGIN_PARAGRAPH5" />ይህን አገልግሎት በቅንብሮች ውስጥ ማጥፋት ይችላሉ።<ph name="END_PARAGRAPH5" /></translation>
 <translation id="80974698889265265">ፒኖቹ አይዛመዱም</translation>
+<translation id="809792523045608178"><ph name="IDS_SHORT_PRODUCT_NAME" /> ከቅጥያ የወኪል ቅንብሮችን እየተጠቀመ ነው</translation>
 <translation id="8099495042588009598">ተጨማሪ ፈቃዶች</translation>
 <translation id="8101987792947961127">በቀጣዩ ዳግም ማስነሳት ላይ Powerwash  ያስፈልጋል</translation>
 <translation id="8102159139658438129">ለተገናኘው ስልክዎ አማራጮችን ለማየት ወደ <ph name="LINK_BEGIN" />ቅንብሮች<ph name="LINK_END" /> ይሂዱ</translation>
@@ -4709,6 +4733,7 @@
 <translation id="8113043281354018522">የፈቃድ አይነት ይምረጡ</translation>
 <translation id="8116972784401310538">&amp;ዕልባት አቀናባሪ</translation>
 <translation id="8117620576188476503">ግንኙነቶችን፣ ዝማኔዎችን እና ቅንብሮችን በሁኔታ ትሪ ያቀናብሩ። በቁልፍ ሰሌዳ ወደዚህ ለመምጣት Alt + Shift + S ይጫኑ።</translation>
+<translation id="8118076340394175570">የእርስዎ ድርጅት ለዚህ መሣሪያ ዝማኔን ይጠይቃል</translation>
 <translation id="8118362518458010043">በChrome ተሰናክሏል። ይህ ቅጥያ ደህንነቱ ያልተጠበቀ ሊሆን ይችላል።</translation>
 <translation id="8118488170956489476">የእርስዎ <ph name="BEGIN_LINK" />አሳሽ በእርስዎ ድርጅት<ph name="END_LINK" /> የሚተዳደር ነው</translation>
 <translation id="8118860139461251237">ማውረድዎችዎን ያስተዳድሩ</translation>
@@ -4853,8 +4878,10 @@
 <translation id="8339059274628563283">በአካባቢው የተከማቸ የ<ph name="SITE" /> ውሂብ</translation>
 <translation id="833986336429795709">ይህን አገናኝ ለመክፈት አንድ መተግበሪያ ይምረጡ</translation>
 <translation id="8342861492835240085">አንድ ስብስብ ይምረጡ</translation>
+<translation id="834290227245955730">ልክ ያልኾነ ፒን። በግራ በኩል ዳግም ይሞክራል፦ <ph name="RETRIES" />።</translation>
 <translation id="8343956361364550006">ለምርጥ የቪዲዮ ወይም እነማ ከፍተኛ መተላለፊያ ይዘት ይጠቀሙ። ዝግተኛ ግንኙነቶች ያላቸው ሌሎች ሰዎች የእርስዎን ይዘት መመልከት ላይችሉ ይችላሉ።</translation>
 <translation id="8351419472474436977">ይህ ቅጥያ የተኪ ቅንብሮችዎን ተቆጣጥሯል፣ ይህ ማለት መስመር ላይ የሚያደርጉትን ማንኛውም ነገር ሊቀይር፣ ሊሰብር ወይም በድብቅ ሊከታተል ይችላል። ይሄ ለምን እንደተከሰተ እርግጠኛ ካልሆኑ የማይፈልጉት ነገር ሳይሆን አይቀርም።</translation>
+<translation id="8351630282875799764">ባትሪ ኃይል እየሞላ አይደለም</translation>
 <translation id="835238322900896202">በማራገፍ ጊዜ አንድ ስህተት ተከስቷል። እባክዎ በተርሚናሉ በኩል ያራግፉ።</translation>
 <translation id="8352772353338965963">አንድ መለያ ባለብዙ መለያ መግቢያ ላይ ያክሉ። ሁሉም የተገባባቸው መለያዎች ያለይለፍ ቃል ሊደረስባቸው ይችላሉ፣ ስለዚህ ይህ ባህሪ በታመኑ መለያዎች ላይ ብቻ ነው መጠቀም ያለባቸው።</translation>
 <translation id="8353683614194668312">ይህንን ማድረግ ይችላል፦</translation>
@@ -4914,7 +4941,6 @@
 <translation id="8449008133205184768">ለጥፍና ቅጥ አዛምድ</translation>
 <translation id="8449036207308062757">የማከማቻ ያቀናብሩ</translation>
 <translation id="8452135315243592079">ሲም ካርድ ይጎድላል</translation>
-<translation id="845627346958584683">ጊዜው የሚቃጠልበት ጊዜ</translation>
 <translation id="845702320058262034">ማገናኘት አይቻልም። የእርስዎ ስልክ ብሉቱዝ እንደበራ ያረጋግጡ።</translation>
 <translation id="8457451314607652708">ዕልባቶችን አስመጣ</translation>
 <translation id="8460336040822756677">ዘመናዊ ቁልፍን ለ<ph name="DEVICE_TYPE" /> ካጠፉ ስልክዎን ተጠቅመው የChrome መሣሪያዎችዎን ማስከፈት አይችሉም። የይለፍ ቃልዎን መተየብ ይኖርብዎታል።</translation>
@@ -4923,6 +4949,8 @@
 <translation id="8461914792118322307">ተኪ</translation>
 <translation id="8463215747450521436">በክትትል ስር ያለው ተጠቃሚ በአስተዳዳሪው ተሰርዞ ወይም ተሰናክሎ ሊሆን ይችላል። ልክ እንደዚህ ተጠቃሚ መግባት ከፈለጉ እባክዎ አስተዳዳሪውን ያግኙ።</translation>
 <translation id="846374874681391779">የውርዶች አሞሌ</translation>
+<translation id="8463807869745732775">"&gt;
+    የደህንነት ቁልፍ በመለያ መግቢያ ውሂብን አከማችቷል</translation>
 <translation id="8463955938112983119"><ph name="PLUGIN_NAME" /> ተሰናክሏል።</translation>
 <translation id="8464132254133862871">ይህ የተጠቃሚ መለያ ለአገልግሎቱ ብቁ አይደለም።</translation>
 <translation id="8465252176946159372">ልክ ያልሆነ</translation>
@@ -4947,6 +4975,7 @@
 <translation id="8497219075884839166">የWindows መገልገያዎች</translation>
 <translation id="8498214519255567734">ማያ ገጽዎን በደበዘዘ ብርሃን ላይ መመልከት ወይም ማንበብ ቀላል ያድርጉት</translation>
 <translation id="8498395510292172881">በChrome ውስጥ ማንበብ ይቀጥሉ</translation>
+<translation id="8500234928660943538">ትክክል ያልኾነ PUK። በግራ በኩል ዳግም ይሞክራል፦ <ph name="RETRIES" />።</translation>
 <translation id="8502536196501630039">ከGoogle Play መተግበሪያዎችን ለመጠቀም፣ የእርስዎን መተግበሪያዎች እነበሩበት በመጀመሪያ መመለስ አለብዎት። አንዳንድ ውሂብ ጠፍቶ ሊሆን ይችላል።</translation>
 <translation id="8503813439785031346">የተጣቃሚ ስም</translation>
 <translation id="850875081535031620">ምንም ጎጂ ሶፍትዌር አልተገኘም</translation>
@@ -5025,7 +5054,6 @@
 <translation id="8637542770513281060">የእርስዎ ኮምፒውተር  ደህንነቱ የተጠበቀ ሞዱል አለው፣ ይህም በChrome OS ውስጥ ብዙ ወሳኝ የደህንነት ባህሪያትን ለመተግበር ሥራ ላይ የሚውል ነው። የበለጠ ለመረዳት የChromebook እገዛ ማዕከሉን ይጎብኙ፦ https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">የስርዓት ዝማኔ አለ። ለማውረድ በመዘጋጀት ላይ…</translation>
 <translation id="8639047128869322042">ጎጂ ሶፍትዌር ካለ በመፈተሽ ላይ...</translation>
-<translation id="8642171459927087831">የመዳረሻ ማስመሰያ</translation>
 <translation id="8642900771896232685">2 ሰከንዶች</translation>
 <translation id="8642947597466641025">ጽሑፍ አተልቅ</translation>
 <translation id="8643418457919840804">ለመቀጠል አንድ አማራጭ ይምረጡ፦</translation>
@@ -5044,6 +5072,7 @@
 <translation id="8656768832129462377">አታረጋግጥ</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> የእርስዎን ማያ ገጽ እና ኦዲዮ ለ<ph name="TAB_NAME" /> እያጋራ ነው።</translation>
 <translation id="8659875081143553823">አንዴ ይጠብቁ</translation>
+<translation id="8660174278198826384">ከእርስዎ ድርጅት የመሣሪያ አስተዳዳሪውን ያነጋግሩ</translation>
 <translation id="8661290697478713397">አገናኙን ማን&amp;ነትን በማያሳውቅ መስኮት ክፈት</translation>
 <translation id="8662671328352114214">የ<ph name="TYPE" /> አውታረ መረብን ይቀላቀሉ</translation>
 <translation id="8662795692588422978">ሰዎች</translation>
@@ -5206,6 +5235,7 @@
 <translation id="8876307312329369159">ይህ ቅንብር በማሳያ ክፍለ-ጊዜ ላይ ሊቀየር አይችልም።</translation>
 <translation id="8877448029301136595">[ወላጅ ማውጫ]</translation>
 <translation id="8879284080359814990">&amp;በትር አሳይ</translation>
+<translation id="8879921471468674457">በመለያ መግቢያ መረጃን አስታውስ</translation>
 <translation id="8883847527783433352">ከሌላ መለያ ጋር ያስምሩ</translation>
 <translation id="8884570509232205463">መሣሪያዎ አሁን <ph name="UNLOCK_TIME" /> ላይ ይቆለፋል።</translation>
 <translation id="8885197664446363138">Smart Lock ሊገኝ አይችልም</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index d24f36b0..d2393d8 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">‏يتعذّر العثور على ملف PPD. تأكد من اتصال Chromebook بالإنترنت وأعد المحاولة.</translation>
 <translation id="1355466263109342573">تم حظر <ph name="PLUGIN_NAME" /></translation>
-<translation id="1357589289913453911">معرّف الإضافة</translation>
 <translation id="1358741672408003399">التدقيق الإملائي والتدقيق النحوي</translation>
 <translation id="1361164813881551742">الإضافة يدويًا</translation>
 <translation id="1361655923249334273">غير مستخدم</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">سيؤدي هذا الإجراء إلى محو جميع البيانات على مفتاح الأمان، بما في ذلك رقم تعريفه الشخصي.</translation>
 <translation id="1475502736924165259">لديك شهادات في الملف لا تندرج تحت أي فئة من الفئات الأخرى</translation>
 <translation id="1476607407192946488">إ&amp;عدادات اللغة</translation>
-<translation id="1477301030751268706">ذاكرة التخزين المؤقت للرمز المميز لواجهة برمجة تطبيقات الهوية</translation>
 <translation id="1478340334823509079">التفاصيل: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">التثبيت غير مُفعَّل</translation>
 <translation id="1483493594462132177">إرسال</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">إعداد أمان النظام</translation>
 <translation id="2091887806945687916">الصوت</translation>
 <translation id="2097372108957554726">‏يلزمك تسجيل الدخول إلى Chrome لتسجيل الأجهزة الجديدة</translation>
-<translation id="2098305189700762159">لم يتم العثور على الصفحة</translation>
 <translation id="2099172618127234427">‏أنت تمكن ميزات تصحيح الأخطاء لنظام التشغيل Chrome التي ستثبّت البرنامج الخفي لـ sshd وتمكن التشغيل من محركات الأقراص USB.</translation>
 <translation id="2099686503067610784">هل تريد حذف شهادة الخادم "<ph name="CERTIFICATE_NAME" />"؟</translation>
 <translation id="2100273922101894616">تسجيل الدخول تلقائيًا</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">‏يمكنك الوصول إلى "مساعد Google" في أي وقت بمجرّد قول العبارة "Ok Google".</translation>
 <translation id="2387458720915042159">نوع الاتصال بالخادم الوكيل</translation>
 <translation id="2391419135980381625">الخط القياسي</translation>
-<translation id="2391762656119864333">إبطال</translation>
 <translation id="2392369802118427583">تفعيل</translation>
 <translation id="2394566832561516196">سيتم محو الإعدادات عند إعادة التحميل في المرة التالية.</translation>
 <translation id="2395616325548404795">لقد تم تسجيل جهاز <ph name="DEVICE_TYPE" /> بنجاح لإدارة المؤسسة، لكن تعذّر إرسال بيانات الأصل والموقع. يُرجى إدخال هذه البيانات يدويًا من وحدة تحكُّم المشرف لهذا الجهاز.</translation>
@@ -1955,7 +1951,6 @@
 <translation id="3894123633473837029">‏تضمين سجل "مساعد Google" الأخير عبر Sherlog. قد يتضمن هذا الهوية والموقع الجغرافي ومعلومات تصحيح الأخطاء. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">إضافة مجلد</translation>
 <translation id="389589731200570180">مشاركة مع الضيوف</translation>
-<translation id="3898521660513055167">حالة الرمز المميز</translation>
 <translation id="389901847090970821">تحديد لوحة مفاتيح</translation>
 <translation id="3899879303189199559">بلا إنترنت لمدة تتجاوز عامًا</translation>
 <translation id="3900966090527141178">تصدير كلمات المرور</translation>
@@ -2788,7 +2783,6 @@
 <translation id="5235050375939235066">هل تريد إلغاء تثبيت التطبيق؟</translation>
 <translation id="5235750401727657667">استبدال الصفحة التي تشاهدها عند فتح علامة تبويب جديدة</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>
 <translation id="5243522832766285132">يُرجى إعادة المحاولة بعد بضع لحظات</translation>
@@ -3227,7 +3221,6 @@
 <translation id="5870155679953074650">الأخطاء الجسيمة</translation>
 <translation id="5877064549588274448">تم تغيير القناة. يمكنك إعادة تشغيل الجهاز لتدخل التغييرات حيز التنفيذ.</translation>
 <translation id="5877584842898320529">الطابعة المُختارة غير متاحة أو لم يتم تثبيتها بشكلٍ صحيح. <ph name="BR" /> يُرجى التحقُّق من الطابعة أو تجربة اختيار طابعة أخرى.</translation>
-<translation id="5880247576487732437">الرمز المميز جاهز للاستخدام</translation>
 <translation id="5882919346125742463">الشبكات المعروفة</translation>
 <translation id="5884474295213649357">‏علامة التبويب هذه متصلة بجهاز USB.</translation>
 <translation id="5885324376209859881">إدارة إعدادات الوسائط...</translation>
@@ -4693,7 +4686,6 @@
 <translation id="8045923671629973368">‏إدخال معرّف التطبيق أو عنوان URL للسوق الإلكتروني</translation>
 <translation id="804786196054284061">اتفاقية ترخيص المستخدم</translation>
 <translation id="8049705080247101012">‏وضعت Google علامة على الإضافة <ph name="EXTENSION_NAME" /> باعتبارها ضارة وتم منع تثبيتها.</translation>
-<translation id="8049913480579063185">اسم الإضافة</translation>
 <translation id="8050038245906040378">‏التوقيع بالرمز التجاري لـ Microsoft</translation>
 <translation id="8053278772142718589">‏ملفات PKCS #12</translation>
 <translation id="8053390638574070785">إعادة تحميل هذه الصفحة</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">لصق النمط ومطابقته</translation>
 <translation id="8449036207308062757">إدارة مساحة التخزين</translation>
 <translation id="8452135315243592079">‏شريحة SIM مفقودة</translation>
-<translation id="845627346958584683">وقت انتهاء الصلاحية:</translation>
 <translation id="845702320058262034">يتعذَّر الاتصال. يُرجى التأكّد من تفعيل البلوتوث في هاتفك.</translation>
 <translation id="8457451314607652708">استيراد الإشارات المرجعية</translation>
 <translation id="8460336040822756677">‏إذا أوقفت تشغيل Smart Lock لـ <ph name="DEVICE_TYPE" />، فلن تكون قادرًا على إلغاء قفل أجهزة Chrome باستخدام هاتفك. وستحتاج إلى كتابة كلمة المرور.</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">‏يحتوي الكمبيوتر على وحدة آمنة، والتي يتم استخدامها لتنفيذ العديد من ميزات الأمان المهمة في نظام التشغيل Chrome. ويُمكنك الانتقال إلى مركز مساعدة Chromebook للتعرف على مزيد من المعلومات: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">يتوفر تحديث النظام الآن. جارٍ التحضير للتنزيل...</translation>
 <translation id="8639047128869322042">جارٍ التحقق من البرامج الضارة...</translation>
-<translation id="8642171459927087831">رمز الدخول المميز</translation>
 <translation id="8642900771896232685">ثانيتان</translation>
 <translation id="8642947597466641025">لتكبير النص</translation>
 <translation id="8643418457919840804">للاستمرار، يُرجى تحديد خيار:</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index ecc5c07..5adc7a0 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: „<ph name="NETWORK_NAME" />“</translation>
 <translation id="1353980523955420967">PPD файлът не може да бъде намерен. Уверете се, че вашият Chromebook е онлайн, и опитайте отново.</translation>
 <translation id="1355466263109342573">Приставката <ph name="PLUGIN_NAME" /> е блокирана</translation>
-<translation id="1357589289913453911">Идент. № на разширението</translation>
 <translation id="1358741672408003399">Правопис и граматика</translation>
 <translation id="1361164813881551742">Ръчно добавяне</translation>
 <translation id="1361655923249334273">Не се използва</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Това ще изтрие всички данни на ключа за сигурност, включително ПИН кода му</translation>
 <translation id="1475502736924165259">Разполагате със сертификати, които не отговарят на нито една от другите категории</translation>
 <translation id="1476607407192946488">&amp;Езикови настройки</translation>
-<translation id="1477301030751268706">Кеш на означенията за приложния програмен интерфейс (API) за самоличност</translation>
 <translation id="1478340334823509079">Подробности: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Инсталирането не е активирано</translation>
 <translation id="1483493594462132177">Изпращане</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Системни защитни настройки</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2097372108957554726">За да регистрирате нови устройства, трябва да влезете в Chrome</translation>
-<translation id="2098305189700762159">Не е намерен</translation>
 <translation id="2099172618127234427">Активирате функциите за отстраняване на грешки в Chrome OS, които ще настроят демон sshd и ще позволят стартирането от USB дискове.</translation>
 <translation id="2099686503067610784">Да се изтрие ли сертификатът на сървър „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Осъществявайте достъп до Асистент всеки път, когато кажете „Ok Google“</translation>
 <translation id="2387458720915042159">Тип на връзката през прокси сървър</translation>
 <translation id="2391419135980381625">Стандартен шрифт</translation>
-<translation id="2391762656119864333">Оттегляне</translation>
 <translation id="2392369802118427583">Активиране</translation>
 <translation id="2394566832561516196">Настройките ще бъдат изчистени при следващото презареждане.</translation>
 <translation id="2395616325548404795">Устройството ви <ph name="DEVICE_TYPE" /> е успешно записано за корпоративно управление, но не успя да изпрати идентификатора на актива и информацията за местоположението си. Моля, въведете ръчно съответните данни от Admin Console.</translation>
@@ -1956,7 +1952,6 @@
 <translation id="3894123633473837029">Включване на скорошната история в Асистент посредством Sherlog. Тя може да включва самоличността ви, местоположението и информация за отстраняване на грешки. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Добавяне на папка</translation>
 <translation id="389589731200570180">Споделяне с гости</translation>
-<translation id="3898521660513055167">Състояние на означението</translation>
 <translation id="389901847090970821">Изберете клавиатура</translation>
 <translation id="3899879303189199559">Офлайн за повече от една година</translation>
 <translation id="3900966090527141178">Експортиране на паролите</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">Да се деинсталира ли приложението?</translation>
 <translation id="5235750401727657667">Замяна на страницата, която виждате, при отваряне на нов раздел</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>
 <translation id="5243522832766285132">Моля, опитайте отново след малко</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Съществени грешки</translation>
 <translation id="5877064549588274448">Каналът бе променен. Рестартирайте устройството си, за да се приложат промените.</translation>
 <translation id="5877584842898320529">Избраният принтер не е налице или не е инсталиран правилно.<ph name="BR" /> Проверете го или опитайте да изберете друг.</translation>
-<translation id="5880247576487732437">Съществува означение</translation>
 <translation id="5882919346125742463">Известни мрежи</translation>
 <translation id="5884474295213649357">Този раздел е свързан с USB устройство.</translation>
 <translation id="5885324376209859881">Управление на настройките за медия...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Въведете идентификационен номер на приложение или URL адрес в уеб магазина</translation>
 <translation id="804786196054284061">Лицензионно споразумение с крайния потребител</translation>
 <translation id="8049705080247101012">Google сигнализира, че разширението <ph name="EXTENSION_NAME" /> е злонамерено, и инсталирането бе предотвратено</translation>
-<translation id="8049913480579063185">Име на разширението</translation>
 <translation id="8050038245906040378">Подписване от Microsoft на код за търговски цели</translation>
 <translation id="8053278772142718589">Файлове PKCS #12</translation>
 <translation id="8053390638574070785">Презареждане на тази страница</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Поставяне и съобразяване със стила</translation>
 <translation id="8449036207308062757">Управление на хранилището</translation>
 <translation id="8452135315243592079">SIM картата липсва</translation>
-<translation id="845627346958584683">Час на изтичане</translation>
 <translation id="845702320058262034">Не може да бъде установена връзка. Уверете се, че функцията за Bluetooth на телефона ви е включена.</translation>
 <translation id="8457451314607652708">Импортиране на отметки</translation>
 <translation id="8460336040822756677">Ако изключите Smart Lock за <ph name="DEVICE_TYPE" />, няма да можете да отключвате устройствата си с Chrome чрез телефона си. Ще трябва да въвеждате паролата си.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Компютърът ви съдържа модул за сигурност, който служи за реализиране на множество критични защитни функции в Chrome OS. За да научите повече, посетете Помощния център на Chromebook: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Налице е системна актуализация. Подготвя се за изтегляне...</translation>
 <translation id="8639047128869322042">Извършва се проверка за опасен софтуер...</translation>
-<translation id="8642171459927087831">Означение за достъп</translation>
 <translation id="8642900771896232685">2 секунди</translation>
 <translation id="8642947597466641025">Шрифтът на текста се уголемява</translation>
 <translation id="8643418457919840804">За да продължите, изберете опция:</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 6243328..1142f79 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" /> : <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD খুঁজে পাওয়া যায়নি। আপনার Chromebook অনলাইন আছে কিনা দেখে নিয়ে আবার চেষ্টা করুন।</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> অবরুদ্ধ করা রয়েছে</translation>
-<translation id="1357589289913453911">এক্সটেনশন আইডি</translation>
 <translation id="1358741672408003399">বানান এবং ব্যাকরণ</translation>
 <translation id="1361164813881551742">নিজে যোগ করুন</translation>
 <translation id="1361655923249334273">অব্যবহৃত</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">এটি নিরাপত্তা কী ডিভাইসের পিন নম্বর সহ সমস্ত ডেটা মুছে ফেলবে</translation>
 <translation id="1475502736924165259">আপনার কাছে ফাইলে সেই শংসাপত্রগুলি আছে যা অন্য বিভাগগুলির একটিতেও মেলে না</translation>
 <translation id="1476607407192946488">&amp;ভাষা সেটিংস</translation>
-<translation id="1477301030751268706">পরিচয় এপিআই টোকেন ক্যাশে</translation>
 <translation id="1478340334823509079">বিবরণ: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ইনস্টলেশন চালু করা হয়নি</translation>
 <translation id="1483493594462132177">পাঠান</translation>
@@ -727,7 +725,6 @@
 <translation id="2090876986345970080">সিস্টেম সুরক্ষা সেটিং</translation>
 <translation id="2091887806945687916">আওয়াজ</translation>
 <translation id="2097372108957554726">নতুন ডিভাইস রেজিস্টার করতে আপনাকে Chrome-এ সাইন-ইন করতে হবে</translation>
-<translation id="2098305189700762159">খুঁজে পাওয়া যায় নি</translation>
 <translation id="2099172618127234427">আপনি Chrome OS ডিবাগিং বৈশিষ্ট্যগুলি চালু করছেন যা sshd daemon সেট-আপ করবে এবং USB ড্রাইভগুলি থেকে বুট করা চালু করবে৷</translation>
 <translation id="2099686503067610784">সার্ভার সার্টিফিকেট "<ph name="CERTIFICATE_NAME" />" মুছবেন?</translation>
 <translation id="2100273922101894616">অটো সাইন-ইন</translation>
@@ -939,7 +936,6 @@
 <translation id="2386926718981642523">যেকোনও সময়ে "হ্যালো Google" বলে অ্যাসিস্ট্যান্টকে অ্যাক্সেস করতে পারবেন</translation>
 <translation id="2387458720915042159">প্রক্সি কানেকশনের ধরণ</translation>
 <translation id="2391419135980381625">মানক হরফ</translation>
-<translation id="2391762656119864333">প্রত্যাহার করুন</translation>
 <translation id="2392369802118427583">সক্রিয় করুন</translation>
 <translation id="2394566832561516196">পরবর্তী রিলোডে সেটিংস সাফ করা হবে৷</translation>
 <translation id="2395616325548404795">আপনার <ph name="DEVICE_TYPE" /> কে এন্টারপ্রাইজ পরিচালনার জন্য সফলভাবে নথিভুক্ত করা হয়েছে, কিন্তু এর সম্পদ এবং অবস্থানের তথ্য পাঠানো ব্যর্থ হয়েছে৷ অনুগ্রহ করে এই ডিভাইসের জন্য আপনার অ্যাডমিন কনসোল থেকে নিজে এই তথ্য লিখুন৷</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">Sherlog-এর মাধ্যমে অ্যাসিস্ট্যান্টের সাম্প্রতিক ইতিহাস যোগ করুন। এর মধ্যে আপনার পরিচয়, লোকেশন এবং ডিবাগ সংক্রান্ত তথ্য থাকতে পারে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">ফোল্ডার যোগ করুন</translation>
 <translation id="389589731200570180">অতিথিদের সাথে শেয়ার করুন</translation>
-<translation id="3898521660513055167">টোকেন স্থিতি</translation>
 <translation id="389901847090970821">কীবোর্ড বেছে নিন</translation>
 <translation id="3899879303189199559">এক বছরের বেশি  অফ লাইন</translation>
 <translation id="3900966090527141178">পাসওয়ার্ড এক্সপোর্ট করুন</translation>
@@ -2788,7 +2783,6 @@
 <translation id="5235050375939235066">অ্যাপ আনইনস্টল করবেন?</translation>
 <translation id="5235750401727657667">নতুন ট্যাব খোলার সময় যে পৃষ্ঠাটি আপনি দেখেন সেটি বদলে দিন</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>
 <translation id="5243522832766285132">কয়েক মুহূর্তের মধ্যে আবার চেষ্টা করুন</translation>
@@ -3228,7 +3222,6 @@
 <translation id="5870155679953074650">হার্ড ফল্ট</translation>
 <translation id="5877064549588274448">চ্যানেল পরিবর্তিত হয়েছে৷ পরিবর্তনগুলি প্রয়োগ করার জন্য আপনার ডিভাইস আবার শুরু করুন৷</translation>
 <translation id="5877584842898320529">বেছে নেওয়া প্রিন্টারটি উপলভ্য নয় অথবা সেটি সঠিকভাবে ইনস্টল করা নেই। <ph name="BR" /> আপনার প্রিন্টারটি পরীক্ষা করুন অথবা অন্য একটি প্রিন্টার বেছে নিন।</translation>
-<translation id="5880247576487732437">টোকেন উপলব্ধ</translation>
 <translation id="5882919346125742463">পরিচিত নেটওয়ার্কগুলি</translation>
 <translation id="5884474295213649357">এই ট্যাব একটি USB ডিভাইসের সাথে সংযুক্ত করা আছে।</translation>
 <translation id="5885324376209859881">মিডিয়া সেটিংস পরিচালনা করুন...</translation>
@@ -4693,7 +4686,6 @@
 <translation id="8045923671629973368">অ্যাপ্লিকেশান আইডি বা ওয়েবস্টোরের URL লিখুন</translation>
 <translation id="804786196054284061">এন্ড ইউজার লাইসেন্স এগ্রিমেন্ট</translation>
 <translation id="8049705080247101012">Google <ph name="EXTENSION_NAME" /> কে ক্ষতিকারক হিসাবে ফ্ল্যাগ করেছে এবং ইনস্টলেশন বন্ধ করা হয়েছে</translation>
-<translation id="8049913480579063185">এক্সটেনশনের নাম</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 টি ফাইল</translation>
 <translation id="8053390638574070785">এই পৃষ্ঠাটি রিলোড করুন</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">পেস্ট ও ম্যাচ স্টাইল</translation>
 <translation id="8449036207308062757">স্টোরেজ পরিচালনা করুন</translation>
 <translation id="8452135315243592079">সিম কার্ড পাওয়া যাচ্ছে না</translation>
-<translation id="845627346958584683">মেয়াদ শেষ হওয়ার সময়</translation>
 <translation id="845702320058262034">কানেক্ট করা যাচ্ছে না। আপনার ফোনের ব্লুটুথ চালানো আছে কিনা দেখুন।</translation>
 <translation id="8457451314607652708">বুকমার্কগুলি ইমপোর্ট করুন</translation>
 <translation id="8460336040822756677">আপনি <ph name="DEVICE_TYPE" /> এর জন্য Smart Lock বন্ধ করলে, আপনি আপনার ফোন ব্যবহার করে Chrome ডিভাইসগুলি আনলক করতে পারবেন না। আপনাকে আপনার পাসওয়ার্ড লিখতে হবে।</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">আপনার কম্পিউটারে একটি নিরাপদ মডিউল আছে, যেটির সাহায্যে Chrome OS-এর বিভিন্ন জটিল নিরাপত্তা বৈশিষ্ট্য ব্যবহার করা হয়। আরও জানতে Chromebook সহায়তা কেন্দ্রে যান: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">সিস্টেম আপডেট উপলভ্য৷ ডাউনলোড করতে প্রস্তুত হচ্ছে...</translation>
 <translation id="8639047128869322042">ক্ষতিকর সফ্টওয়্যার খোঁজা হচ্ছে...</translation>
-<translation id="8642171459927087831">অ্যাক্সেস টোকেন</translation>
 <translation id="8642900771896232685">২ সেকেন্ড</translation>
 <translation id="8642947597466641025">পাঠ্যকে আরও বড় করুন</translation>
 <translation id="8643418457919840804">চালিয়ে যেতে, একটি বিকল্প বেছে নিন:</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index eacc1d9d..036985b 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">No hem trobat el fitxer PPD. Comprova que Chromebook estigui en línia i torna-ho a provar.</translation>
 <translation id="1355466263109342573">El connector <ph name="PLUGIN_NAME" /> està bloquejat</translation>
-<translation id="1357589289913453911">Identificador de l'extensió</translation>
 <translation id="1358741672408003399">Ortografia i gramàtica</translation>
 <translation id="1361164813881551742">Afegeix manualment</translation>
 <translation id="1361655923249334273">No utilitzat</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Amb aquesta acció s'esborraran totes les dades de la clau de seguretat, inclòs el PIN</translation>
 <translation id="1475502736924165259">Tens certificats arxivats que no s'ajusten a cap de les altres categories</translation>
 <translation id="1476607407192946488">&amp;Configuració d'idioma</translation>
-<translation id="1477301030751268706">Memòria cau del testimoni API d'identitat</translation>
 <translation id="1478340334823509079">Detalls: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instal·lació no està activada</translation>
 <translation id="1483493594462132177">Envia</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Configuració de seguretat del sistema</translation>
 <translation id="2091887806945687916">So</translation>
 <translation id="2097372108957554726">Inicieu la sessió a Chrome per registrar dispositius nous</translation>
-<translation id="2098305189700762159">No trobat</translation>
 <translation id="2099172618127234427">Esteu activant les funcions de depuració de Chrome OS, de manera que es configurarà el dimoni sshd i es permetrà iniciar el sistema des d'unitats USB.</translation>
 <translation id="2099686503067610784">Voleu suprimir el certificat de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Accedeix a l'Assistent cada vegada que diguis "Ok Google"</translation>
 <translation id="2387458720915042159">Tipus de connexió del servidor intermediari</translation>
 <translation id="2391419135980381625">Tipus de lletra estàndard</translation>
-<translation id="2391762656119864333">Revoca</translation>
 <translation id="2392369802118427583">Activa</translation>
 <translation id="2394566832561516196">La configuració s'esborrarà en tornar a carregar.</translation>
 <translation id="2395616325548404795">El teu dispositiu <ph name="DEVICE_TYPE" /> s'ha inscrit correctament a la gestió empresarial, però no ha pogut enviar la informació d'elements i d'ubicació. Introdueix aquesta informació manualment a la consola d'administració del dispositiu.</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">Inclou l'historial recent de l'Assistent a través de Sherlog. Pot incloure informació sobre la teva identitat, la teva ubicació i dades de depuració. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Afegeix una carpeta</translation>
 <translation id="389589731200570180">Compartiu amb els convidats</translation>
-<translation id="3898521660513055167">Estat del testimoni</translation>
 <translation id="389901847090970821">Selecciona el teclat</translation>
 <translation id="3899879303189199559">Fora de línia des de fa més d'un any</translation>
 <translation id="3900966090527141178">Exporta les contrasenyes</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">Vols desinstal·lar l'aplicació?</translation>
 <translation id="5235750401727657667">Substituir la pàgina que veus en obrir una pestanya nova</translation>
 <translation id="5238278114306905396">L'aplicació "<ph name="EXTENSION_NAME" />" s'ha eliminat automàticament.</translation>
-<translation id="5238369540257804368">Àmbits</translation>
 <translation id="5241128660650683457">Llegir totes les dades dels llocs web que es visitin</translation>
 <translation id="5242724311594467048">Vols activar "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Torna-ho a provar d'aquí a una estona</translation>
@@ -3229,7 +3223,6 @@
 <translation id="5870155679953074650">Errors greus</translation>
 <translation id="5877064549588274448">El canal ha canviat. Reinicieu el dispositiu perquè s'apliquin els canvis.</translation>
 <translation id="5877584842898320529">La impressora seleccionada no està disponible o no s'ha instal·lat correctament.<ph name="BR" />Comprova la impressora o prova de seleccionar-ne una altra.</translation>
-<translation id="5880247576487732437">Testimoni present</translation>
 <translation id="5882919346125742463">Xarxes conegudes</translation>
 <translation id="5884474295213649357">Aquesta pestanya està connectada a un dispositiu USB</translation>
 <translation id="5885324376209859881">Gestiona la configuració dels elements multimèdia...</translation>
@@ -4692,7 +4685,6 @@
 <translation id="8045923671629973368">Introdueix l'identificador de l'aplicació o l'URL de Web Store</translation>
 <translation id="804786196054284061">Acord de llicència d'usuari final</translation>
 <translation id="8049705080247101012">Google ha marcat l'extensió <ph name="EXTENSION_NAME" /> com a maliciosa i, per tant, s'ha evitat que s'instal·lés</translation>
-<translation id="8049913480579063185">Nom de l'extensió</translation>
 <translation id="8050038245906040378">Signatura de codi comercial de Microsoft</translation>
 <translation id="8053278772142718589">PKCS #12 fitxers</translation>
 <translation id="8053390638574070785">Torna a carregar aquesta pàgina</translation>
@@ -4942,7 +4934,6 @@
 <translation id="8449008133205184768">Enganxa i ajusta l'estil</translation>
 <translation id="8449036207308062757">Gestiona l'emmagatzematge</translation>
 <translation id="8452135315243592079">Falta la targeta SIM</translation>
-<translation id="845627346958584683">Hora de caducitat</translation>
 <translation id="845702320058262034">No es pot establir la connexió. Comprova que el Bluetooth del telèfon estigui activat.</translation>
 <translation id="8457451314607652708">Importa les adreces d'interès</translation>
 <translation id="8460336040822756677">Si desactives Smart Lock per a <ph name="DEVICE_TYPE" />, no podràs desbloquejar els dispositius Chrome amb el telèfon, sinó que hauràs d'escriure la contrasenya.</translation>
@@ -5056,7 +5047,6 @@
 <translation id="8637542770513281060">L'ordinador conté un mòdul de seguretat que s'utilitza per implementar un gran nombre de funcions de seguretat clau a Chrome OS. Visita el Centre d'ajuda de Chromebook per obtenir més informació: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Actualització del sistema disponible. S'està preparant la baixada…</translation>
 <translation id="8639047128869322042">S'està cercant programari nociu...</translation>
-<translation id="8642171459927087831">Testimoni d'accés</translation>
 <translation id="8642900771896232685">2 segons</translation>
 <translation id="8642947597466641025">Fa el text més gran</translation>
 <translation id="8643418457919840804">Per continuar, tria una opció:</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 1ad647f..18484f1 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Soubor PPD nebyl nalezen. Zkontrolujte, zda je Chromebook online, a zkuste to znovu.</translation>
 <translation id="1355466263109342573">Plugin <ph name="PLUGIN_NAME" /> je blokován</translation>
-<translation id="1357589289913453911">ID rozšíření</translation>
 <translation id="1358741672408003399">Pravopis a gramatika</translation>
 <translation id="1361164813881551742">Přidat ručně</translation>
 <translation id="1361655923249334273">Nepoužit</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Touto akcí vymažete veškerá data na bezpečnostním klíči, včetně jeho kódu PIN</translation>
 <translation id="1475502736924165259">Máte založené certifikáty, které se nehodí do žádné z ostatních kategorií</translation>
 <translation id="1476607407192946488">&amp;Jazyková nastavení</translation>
-<translation id="1477301030751268706">Mezipaměť tokenů rozhraní Identity API</translation>
 <translation id="1478340334823509079">Podrobnosti: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalace není povolena</translation>
 <translation id="1483493594462132177">Odeslat</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Bezpečnostní nastavení systému</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2097372108957554726">Chcete-li zaregistrovat nová zařízení, musíte se přihlásit do Chromu.</translation>
-<translation id="2098305189700762159">Nenalezeno</translation>
 <translation id="2099172618127234427">Aktivujete funkce ladění systému Chrome OS, které nastaví démona sshd a umožní spouštění z jednotek USB.</translation>
 <translation id="2099686503067610784">Smazat certifikát serveru <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Aktivovat Asistenta, kdykoliv řeknete „Ok Google“</translation>
 <translation id="2387458720915042159">Typ připojení k proxy serveru</translation>
 <translation id="2391419135980381625">Standardní písmo</translation>
-<translation id="2391762656119864333">Zrušit</translation>
 <translation id="2392369802118427583">Aktivovat</translation>
 <translation id="2394566832561516196">Nastavení budou vymazána při příštím opětovném načtení.</translation>
 <translation id="2395616325548404795">Vaše zařízení <ph name="DEVICE_TYPE" /> bylo úspěšně zaregistrováno do podnikové správy, ale neodeslalo informace o položce a umístění. Zadejte prosím tyto informace pro toto zařízení ručně z administrátorské konzole.</translation>
@@ -1954,7 +1950,6 @@
 <translation id="3894123633473837029">Zahrnout nedávnou historii Asistenta prostřednictvím služby Sherlog. Údaje mohou zahrnovat vaši totožnost, polohu a informace o ladění. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Přidat složku</translation>
 <translation id="389589731200570180">Sdílet s hosty</translation>
-<translation id="3898521660513055167">Stav tokenu</translation>
 <translation id="389901847090970821">Vybrat klávesnici</translation>
 <translation id="3899879303189199559">Offline déle než rok</translation>
 <translation id="3900966090527141178">Export hesel</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">Odinstalovat aplikaci?</translation>
 <translation id="5235750401727657667">Nahradit stránku, která se zobrazí po otevření nové karty</translation>
 <translation id="5238278114306905396">Aplikace <ph name="EXTENSION_NAME" /> byla automaticky odebrána.</translation>
-<translation id="5238369540257804368">Rozsahy</translation>
 <translation id="5241128660650683457">Čtení veškerých dat na navštívených webových stránkách</translation>
 <translation id="5242724311594467048">Aktivovat rozšíření <ph name="EXTENSION_NAME" />?</translation>
 <translation id="5243522832766285132">Zkuste to znovu za okamžik</translation>
@@ -3228,7 +3222,6 @@
 <translation id="5870155679953074650">Chyby stránkování na disk</translation>
 <translation id="5877064549588274448">Verze byla změněna. Změny se projeví po restartování zařízení.</translation>
 <translation id="5877584842898320529">Zvolená tiskárna není k dispozici nebo není správně nainstalovaná. <ph name="BR" /> Zkontrolujte tiskárnu nebo vyberte jinou.</translation>
-<translation id="5880247576487732437">Token je přítomen</translation>
 <translation id="5882919346125742463">Známé sítě</translation>
 <translation id="5884474295213649357">Tato karta je připojena k zařízení USB.</translation>
 <translation id="5885324376209859881">Spravovat nastavení médií...</translation>
@@ -4691,7 +4684,6 @@
 <translation id="8045923671629973368">Zadejte identifikátor aplikace nebo URL internetového obchodu</translation>
 <translation id="804786196054284061">Licenční smlouva s koncovým uživatelem</translation>
 <translation id="8049705080247101012">Rozšíření <ph name="EXTENSION_NAME" /> bylo společností Google označeno jako škodlivé a jeho instalace byla zablokována</translation>
-<translation id="8049913480579063185">Název rozšíření</translation>
 <translation id="8050038245906040378">Komerční podepisování kódu Microsoft</translation>
 <translation id="8053278772142718589">Soubory PKCS #12</translation>
 <translation id="8053390638574070785">Načíst tuto stránku znovu</translation>
@@ -4941,7 +4933,6 @@
 <translation id="8449008133205184768">Vložit a použít odpovídající styl</translation>
 <translation id="8449036207308062757">Spravovat úložiště</translation>
 <translation id="8452135315243592079">Chybí SIM karta</translation>
-<translation id="845627346958584683">Čas vypršení platnosti</translation>
 <translation id="845702320058262034">Nelze se připojit. Zkontrolujte, zda na telefonu máte zapnuté rozhraní Bluetooth.</translation>
 <translation id="8457451314607652708">Import záložek</translation>
 <translation id="8460336040822756677">Pokud v zařízení <ph name="DEVICE_TYPE" /> vypnete funkci Smart Lock, nebudete moci svá zařízení Chrome odemykat pomocí telefonu. Budete muset zadat heslo.</translation>
@@ -5055,7 +5046,6 @@
 <translation id="8637542770513281060">Ve vašem počítači je bezpečnostní modul, jehož pomocí je do systému Chrome OS implementováno mnoho důležitých bezpečnostních prvků. Další informace najdete v centru nápovědy k Chromebookům: http://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">K dispozici je aktualizace systému. Příprava stahování...</translation>
 <translation id="8639047128869322042">Vyhledávání škodlivého softwaru...</translation>
-<translation id="8642171459927087831">Přístupový token</translation>
 <translation id="8642900771896232685">2 sekundy</translation>
 <translation id="8642947597466641025">Zvětšit text</translation>
 <translation id="8643418457919840804">Chcete-li pokračovat, vyberte jednu možnost:</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 7feab48..0484bf04 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD-filen kan ikke findes. Sørg for, at din Chromebook er online, og prøv igen.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> er blokeret</translation>
-<translation id="1357589289913453911">Udvidelses-id</translation>
 <translation id="1358741672408003399">Stavning og grammatik</translation>
 <translation id="1361164813881551742">Tilføj manuelt</translation>
 <translation id="1361655923249334273">Ikke brugt</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Dette sletter alle data på sikkerhedsnøglen, herunder pinkoden</translation>
 <translation id="1475502736924165259">Du har lagrede certifikater, som ikke passer i nogen af de andre kategorier</translation>
 <translation id="1476607407192946488">&amp;Sprogindstillinger</translation>
-<translation id="1477301030751268706">Tokencache for Identity API</translation>
 <translation id="1478340334823509079">Detaljer: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installationen er ikke aktiveret</translation>
 <translation id="1483493594462132177">Send</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Indstillinger for systemsikkerhed</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2097372108957554726">Du skal logge ind i Chrome for at registrere nye enheder</translation>
-<translation id="2098305189700762159">Ikke fundet</translation>
 <translation id="2099172618127234427">Du aktiverer Chrome OS-fejlretningsfunktioner, som konfigurerer sshd daemon og aktiverer systemgenstart via USB-drev.</translation>
 <translation id="2099686503067610784">Slet servercertifikatet "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Få adgang til din assistent, hver gang du siger "Ok Google"</translation>
 <translation id="2387458720915042159">Proxy-forbindelsestype</translation>
 <translation id="2391419135980381625">Standardskriftstørrelse</translation>
-<translation id="2391762656119864333">Tilbagekald</translation>
 <translation id="2392369802118427583">Aktivér</translation>
 <translation id="2394566832561516196">Indstillingerne nulstilles ved næste genindlæsning.</translation>
 <translation id="2395616325548404795">Din <ph name="DEVICE_TYPE" /> er tilmeldt virksomhedsadministration, men den har ikke tilsendt oplysninger om aktiver og placering. Angiv disse oplysninger manuelt i administrationskonsollen for denne enhed.</translation>
@@ -1955,7 +1951,6 @@
 <translation id="3894123633473837029">Medtag seneste Assistent-historik via Sherlog. Dette kan omfatte din identitet, placering og fejlretningsoplysninger. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Tilføj mappe</translation>
 <translation id="389589731200570180">Del med gæster</translation>
-<translation id="3898521660513055167">Status for token</translation>
 <translation id="389901847090970821">Vælg tastatur</translation>
 <translation id="3899879303189199559">Offline i mere end et år</translation>
 <translation id="3900966090527141178">Eksportér adgangskoder</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">Vil du afinstallere appen?</translation>
 <translation id="5235750401727657667">Skift den side, du får vist, når du åbner en ny fane</translation>
 <translation id="5238278114306905396">Appen "<ph name="EXTENSION_NAME" />" blev automatisk fjernet.</translation>
-<translation id="5238369540257804368">Omfang</translation>
 <translation id="5241128660650683457">Læs alle dine data på de websites, du besøger</translation>
 <translation id="5242724311594467048">Skal "<ph name="EXTENSION_NAME" />" aktiveres?</translation>
 <translation id="5243522832766285132">Prøv igen om et øjeblik</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">Hårde fejl</translation>
 <translation id="5877064549588274448">Kanalen er ændret. Genstart din enhed for at anvende ændringerne.</translation>
 <translation id="5877584842898320529">Den valgte printer er enten ikke tilgængelig eller ikke installeret korrekt.<ph name="BR" />Tjek din printer, eller vælg en anden printer.</translation>
-<translation id="5880247576487732437">Token til stede</translation>
 <translation id="5882919346125742463">Kendte netværk</translation>
 <translation id="5884474295213649357">Denne fane er sluttet til en USB-enhed.</translation>
 <translation id="5885324376209859881">Administrer medieindstillinger...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">Angiv et app-id eller webadressen til Chrome Webshop</translation>
 <translation id="804786196054284061">Slutbrugerlicensaftale</translation>
 <translation id="8049705080247101012">Google har markeret "<ph name="EXTENSION_NAME" />" som skadelig, og installationen blev forhindret</translation>
-<translation id="8049913480579063185">Udvidelsesnavn</translation>
 <translation id="8050038245906040378">Microsoft-signering af kommerciel kode</translation>
 <translation id="8053278772142718589">PKCS #12-filer</translation>
 <translation id="8053390638574070785">Genindlæs denne side</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">Sæt ind og match stil</translation>
 <translation id="8449036207308062757">Administrer lagerplads</translation>
 <translation id="8452135315243592079">SIM-kort mangler</translation>
-<translation id="845627346958584683">Udløbstid</translation>
 <translation id="845702320058262034">Der kan ikke oprettes forbindelse. Sørg for, at Bluetooth er aktiveret på din telefon.</translation>
 <translation id="8457451314607652708">Importér bogmærker</translation>
 <translation id="8460336040822756677">Hvis du slår Smart Lock fra for <ph name="DEVICE_TYPE" />, kan du ikke låse dine Chrome-enheder op via din telefon. Du bliver nødt til at indtaste din adgangskode.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">Computeren indeholder et sikkerhedsmodul, som bruges til at implementere flere vigtige sikkerhedsfunktioner i Chrome OS. Du kan få flere oplysninger i Hjælp til Chromebook: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Der findes en tilgængelig opdatering til systemet. Forbereder download...</translation>
 <translation id="8639047128869322042">Søger efter skadelig software...</translation>
-<translation id="8642171459927087831">Adgangstoken</translation>
 <translation id="8642900771896232685">2 sekunder</translation>
 <translation id="8642947597466641025">Gør teksten større</translation>
 <translation id="8643418457919840804">Vælg en indstilling for at fortsætte:</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 202adc21..a93f208 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD kann nicht gefunden werden. Vergewissern Sie sich, dass Ihr Chromebook online ist und versuchen Sie es noch einmal.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> ist blockiert</translation>
-<translation id="1357589289913453911">Erweiterungs-ID</translation>
 <translation id="1358741672408003399">Rechtschreibung und Grammatik</translation>
 <translation id="1361164813881551742">Manuell hinzufügen</translation>
 <translation id="1361655923249334273">Nicht verwendet</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Damit werden alle Daten auf dem Sicherheitsschlüssel einschließlich seiner PIN gelöscht.</translation>
 <translation id="1475502736924165259">Einige Ihrer gespeicherten Zertifikate passen zu keiner der anderen Kategorien</translation>
 <translation id="1476607407192946488">&amp;Spracheinstellungen</translation>
-<translation id="1477301030751268706">Token-Cache für die Identity API</translation>
 <translation id="1478340334823509079">Details: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Die Installation ist nicht aktiviert</translation>
 <translation id="1483493594462132177">Senden</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Sicherheitseinstellung des Systems</translation>
 <translation id="2091887806945687916">Ton</translation>
 <translation id="2097372108957554726">Melden Sie sich in Chrome an, um neue Geräte zu registrieren.</translation>
-<translation id="2098305189700762159">Nicht gefunden</translation>
 <translation id="2099172618127234427">Sie aktivieren Debugging-Funktionen für Chrome OS. Dadurch wird der SSHD-Daemon eingerichtet und das Starten über USB aktiviert.</translation>
 <translation id="2099686503067610784">Serverzertifikat "<ph name="CERTIFICATE_NAME" />" löschen?</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Mit "Ok Google" können Sie jederzeit auf Assistant zugreifen</translation>
 <translation id="2387458720915042159">Proxy-Verbindungstyp</translation>
 <translation id="2391419135980381625">Standardschrift</translation>
-<translation id="2391762656119864333">Aufheben</translation>
 <translation id="2392369802118427583">Aktivieren</translation>
 <translation id="2394566832561516196">Die Einstellungen werden bei der nächsten Aktualisierung gelöscht.</translation>
 <translation id="2395616325548404795">Ihr <ph name="DEVICE_TYPE" /> wurde erfolgreich für die Unternehmensverwaltung angemeldet, aber es wurden keine Geräte- und Standortinformationen gesendet. Bitte geben Sie diese Informationen für das Gerät manuell über Ihre Admin-Konsole ein.</translation>
@@ -1182,7 +1178,7 @@
 <translation id="2740393541869613458">von dem betreuten Nutzer besuchte Websites überprüfen und</translation>
 <translation id="2741912629735277980">UI auf dem Anmeldebildschirm anzeigen</translation>
 <translation id="274290345632688601">Linux-Apps und -Dateien werden wiederhergestellt</translation>
-<translation id="2743387203779672305">In Zwischenablage kopieren</translation>
+<translation id="2743387203779672305">In die Zwischenablage kopieren</translation>
 <translation id="2745080116229976798">Microsoft - Qualifizierte Unterordnung</translation>
 <translation id="2749756011735116528">In <ph name="PRODUCT_NAME" /> anmelden</translation>
 <translation id="2749881179542288782">Grammatik zusammen mit Rechtschreibung prüfen</translation>
@@ -1952,7 +1948,6 @@
 <translation id="3894123633473837029">Letzten Assistant-Verlauf über Sherlog einbeziehen. Darin können Angaben zu Ihrer Identität und Ihrem Standort sowie Informationen zur Fehlerbehebung enthalten sein. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Ordner hinzufügen</translation>
 <translation id="389589731200570180">Mit Gastnutzern teilen</translation>
-<translation id="3898521660513055167">Token-Status</translation>
 <translation id="389901847090970821">Tastatur auswählen</translation>
 <translation id="3899879303189199559">Seit über einem Jahr offline</translation>
 <translation id="3900966090527141178">Passwörter exportieren</translation>
@@ -2788,7 +2783,6 @@
 <translation id="5235050375939235066">App deinstallieren?</translation>
 <translation id="5235750401727657667">Seite ändern, die beim Öffnen eines neuen Tabs angezeigt wird</translation>
 <translation id="5238278114306905396">Die App "<ph name="EXTENSION_NAME" />" wurde automatisch entfernt.</translation>
-<translation id="5238369540257804368">Umfang</translation>
 <translation id="5241128660650683457">Alle Ihre Daten auf von Ihnen besuchten Websites lesen</translation>
 <translation id="5242724311594467048">"<ph name="EXTENSION_NAME" />" aktivieren?</translation>
 <translation id="5243522832766285132">Bitte versuchen Sie es in einigen Minuten noch einmal</translation>
@@ -3227,7 +3221,6 @@
 <translation id="5870155679953074650">Harte Fehler</translation>
 <translation id="5877064549588274448">Kanal wurde geändert. Starten Sie Ihr Gerät neu, um die Änderungen zu übernehmen.</translation>
 <translation id="5877584842898320529">Der ausgewählte Drucker ist entweder nicht verfügbar oder nicht ordnungsgemäß installiert. <ph name="BR" /> Überprüfen Sie den Drucker oder wählen Sie einen anderen Drucker aus.</translation>
-<translation id="5880247576487732437">Token vorhanden</translation>
 <translation id="5882919346125742463">Bekannte Netzwerke</translation>
 <translation id="5884474295213649357">Dieser Tab ist mit einem USB-Gerät verbunden.</translation>
 <translation id="5885324376209859881">Medieneinstellungen verwalten...</translation>
@@ -4692,7 +4685,6 @@
 <translation id="8045923671629973368">Anwendungs-ID oder Webstore-URL eingeben</translation>
 <translation id="804786196054284061">Endnutzer-Lizenzvereinbarung</translation>
 <translation id="8049705080247101012">"<ph name="EXTENSION_NAME" />" wurde von Google als schädlich eingestuft und die Installation wurde blockiert</translation>
-<translation id="8049913480579063185">Name der Erweiterung</translation>
 <translation id="8050038245906040378">Kommerzielle Microsoft-Codesignatur</translation>
 <translation id="8053278772142718589">PKCS #12-Dateien</translation>
 <translation id="8053390638574070785">Diese Seite neu laden</translation>
@@ -4943,7 +4935,6 @@
 <translation id="8449008133205184768">Einfügen und Formatvorlage anpassen</translation>
 <translation id="8449036207308062757">Speicherplatz verwalten</translation>
 <translation id="8452135315243592079">Keine SIM-Karte vorhanden</translation>
-<translation id="845627346958584683">Ablaufzeit</translation>
 <translation id="845702320058262034">Verbindung nicht möglich. Kontrollieren Sie, ob Bluetooth auf Ihrem Smartphone aktiviert ist.</translation>
 <translation id="8457451314607652708">Lesezeichen importieren</translation>
 <translation id="8460336040822756677">Wenn Sie Smart Lock für <ph name="DEVICE_TYPE" /> deaktivieren, können Sie Ihre Chrome-Geräte nicht mit Ihrem Smartphone entsperren, sondern müssen Ihr Passwort eingeben.</translation>
@@ -5057,7 +5048,6 @@
 <translation id="8637542770513281060">Ihr Computer enthält ein Sicherheitsmodul, über das viele wichtige Sicherheitsfunktionen in Chrome OS implementiert werden. Weitere Informationen dazu finden Sie in der Chromebook-Hilfe unter https://support.google.com/chromebook/?p=sm.</translation>
 <translation id="8637688295594795546">Systemupdate verfügbar. Download wird vorbereitet...</translation>
 <translation id="8639047128869322042">Nach schädlicher Software wird gesucht...</translation>
-<translation id="8642171459927087831">Zugriffs-Token</translation>
 <translation id="8642900771896232685">2 Sekunden</translation>
 <translation id="8642947597466641025">Schriftgrad vergrößern</translation>
 <translation id="8643418457919840804">Wählen Sie eine Option aus, um fortzufahren:</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 274a32a..5f72b3c3 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Δεν είναι δυνατή η εύρεση του PPD. Βεβαιωθείτε ότι το Chromebook είναι συνδεδεμένο και δοκιμάστε ξανά.</translation>
 <translation id="1355466263109342573">Η προσθήκη <ph name="PLUGIN_NAME" /> είναι αποκλεισμένη</translation>
-<translation id="1357589289913453911">Αναγνωριστικό επέκτασης</translation>
 <translation id="1358741672408003399">Ορθογραφικός και γραμματικός έλεγχος</translation>
 <translation id="1361164813881551742">Μη αυτόματη προσθήκη</translation>
 <translation id="1361655923249334273">Δεν χρησιμοποιείται</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Με αυτήν την ενέργεια θα διαγραφούν όλα τα δεδομένα στο κλειδί ασφαλείας, συμπεριλαμβανομένου του PIN του</translation>
 <translation id="1475502736924165259">Έχετε καταχωρίσει πιστοποιητικά που δεν αντιστοιχούν σε καμία από τις άλλες κατηγορίες</translation>
 <translation id="1476607407192946488">Ρυθμίσεις &amp;γλώσσας</translation>
-<translation id="1477301030751268706">Κρυφή μνήμη διακριτικών API ταυτότητας</translation>
 <translation id="1478340334823509079">Λεπτομέρειες: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Η εγκατάσταση δεν έχει ενεργοποιηθεί</translation>
 <translation id="1483493594462132177">Αποστολή</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Ρύθμιση ασφαλείας συστήματος</translation>
 <translation id="2091887806945687916">Ήχος</translation>
 <translation id="2097372108957554726">Για να καταχωρίσετε νέες συσκευές, θα πρέπει να συνδεθείτε στο Chrome</translation>
-<translation id="2098305189700762159">Δεν βρέθηκε</translation>
 <translation id="2099172618127234427">Ενεργοποιείτε τις λειτουργίες εντοπισμού σφαλμάτων του Chrome OS οι οποίες θα ρυθμίσουν το sshd daemon και θα επιτρέψουν την εκκίνηση από μονάδες USB.</translation>
 <translation id="2099686503067610784">Να διαγραφεί το πιστοποιητικό διακομιστή "<ph name="CERTIFICATE_NAME" />";</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Αποκτήστε πρόσβαση στον Βοηθό ανά πάσα στιγμή λέγοντας "Ok Google"</translation>
 <translation id="2387458720915042159">Τύπος σύνδεσης διακομιστή μεσολάβησης</translation>
 <translation id="2391419135980381625">Τυπική γραμματοσειρά</translation>
-<translation id="2391762656119864333">Ανάκληση</translation>
 <translation id="2392369802118427583">Ενεργοποίηση</translation>
 <translation id="2394566832561516196">Στην επόμενη επαναφόρτωση θα γίνει διαγραφή των ρυθμίσεων.</translation>
 <translation id="2395616325548404795">Η συσκευή <ph name="DEVICE_TYPE" /> εγγράφηκε επιτυχώς για διαχείριση επιχειρήσεων, αλλά απέτυχε η αποστολή των πληροφοριών στοιχείων και τοποθεσίας. Εισαγάγετε μη αυτόματα αυτές τις πληροφορίες από την Κονσόλα διαχειριστή γι' αυτήν τη συσκευή.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Συμπερίληψη του πρόσφατου ιστορικού του Βοηθού μέσω του Sherlog. Αυτό μπορεί να περιλαμβάνει την ταυτότητά σας, την τοποθεσία σας και πληροφορίες εντοπισμού σφάλματος. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Προσθήκη φακέλου…</translation>
 <translation id="389589731200570180">Κοινή χρήση με επισκέπτες</translation>
-<translation id="3898521660513055167">Κατάσταση διακριτικού</translation>
 <translation id="389901847090970821">Επιλογή πληκτρολογίου</translation>
 <translation id="3899879303189199559">Εκτός σύνδεσης για περισσότερο από ένα έτος</translation>
 <translation id="3900966090527141178">Εξαγωγή κωδικών πρόσβασης</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Απεγκατάσταση εφαρμογής;</translation>
 <translation id="5235750401727657667">Αντικατάσταση της σελίδας που βλέπετε κατά το άνοιγμα νέας καρτέλας</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>
 <translation id="5243522832766285132">Δοκιμάστε ξανά σε λίγο</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Σοβαρά σφάλματα</translation>
 <translation id="5877064549588274448">Το κανάλι έχει αλλάξει. Επανεκκινήστε τη συσκευή σας για να εφαρμόσετε τις αλλαγές.</translation>
 <translation id="5877584842898320529">Ο επιλεγμένος εκτυπωτής δεν είναι διαθέσιμος ή δεν έχει εγκατασταθεί σωστά. <ph name="BR" /> Ελέγξτε τον εκτυπωτή σας ή δοκιμάστε να επιλέξετε άλλον εκτυπωτή.</translation>
-<translation id="5880247576487732437">Το διακριτικό υπάρχει</translation>
 <translation id="5882919346125742463">Γνωστά δίκτυα</translation>
 <translation id="5884474295213649357">Αυτή η καρτέλα είναι συνδεδεμένη σε μια συσκευή USB.</translation>
 <translation id="5885324376209859881">Διαχείριση ρυθμίσεων μέσων…</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">Εισαγάγετε αναγνωριστικό εφαρμογής ή URL στο webstore</translation>
 <translation id="804786196054284061">Άδεια χρήσης τελικού χρήστη</translation>
 <translation id="8049705080247101012">Η Google έχει επισημάνει την επέκταση "<ph name="EXTENSION_NAME" />" ως κακόβουλη και η εγκατάσταση έχει εμποδιστεί</translation>
-<translation id="8049913480579063185">Όνομα επέκτασης</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">Αρχεία PKCS #12</translation>
 <translation id="8053390638574070785">Επαναφόρτωση αυτής της σελίδας</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Επικόλληση και αντιστοίχιση στυλ</translation>
 <translation id="8449036207308062757">Διαχείριση αποθηκευτικού χώρου</translation>
 <translation id="8452135315243592079">Κάρτα SIM που λείπει</translation>
-<translation id="845627346958584683">Χρόνος λήξης</translation>
 <translation id="845702320058262034">Δεν είναι δυνατή η σύνδεση. Βεβαιωθείτε ότι το Bluetooth του τηλεφώνου σας είναι ενεργοποιημένο.</translation>
 <translation id="8457451314607652708">Εισαγωγή σελιδοδεικτών</translation>
 <translation id="8460336040822756677">Εάν απενεργοποιήσετε το Smart Lock για <ph name="DEVICE_TYPE" />, δεν θα μπορείτε να ξεκλειδώσετε τις συσκευές σας Chrome χρησιμοποιώντας το τηλέφωνό σας. Θα πρέπει να πληκτρολογείτε τον κωδικό πρόσβασης.</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">Ο υπολογιστής σας περιέχει μια ασφαλή λειτουργική μονάδα, η οποία χρησιμοποιείται για την εφαρμογή πολλών κρίσιμων λειτουργιών ασφαλείας στο Chrome OS. Επισκεφτείτε το Κέντρο βοήθειας του Chromebook, για να μάθετε περισσότερα:  https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Υπάρχει διαθέσιμη ενημέρωση του συστήματος. Προετοιμασία για λήψη...</translation>
 <translation id="8639047128869322042">Έλεγχος για επιβλαβές λογισμικό…</translation>
-<translation id="8642171459927087831">Διακριτικό πρόσβασης</translation>
 <translation id="8642900771896232685">2 δευτερόλεπτα</translation>
 <translation id="8642947597466641025">Μεγέθυνση κειμένου</translation>
 <translation id="8643418457919840804">Για να συνεχίσετε, ορίστε μια επιλογή:</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index b89c8cbe..c912929 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Can’t find PPD. Make sure that your Chromebook is online and try again.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> is blocked</translation>
-<translation id="1357589289913453911">Extension ID</translation>
 <translation id="1358741672408003399">Spelling and Grammar</translation>
 <translation id="1361164813881551742">Add Manually</translation>
 <translation id="1361655923249334273">Unused</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">This will erase all data on the security key, including its PIN</translation>
 <translation id="1475502736924165259">You have certificates on file that do not fit into any of the other categories</translation>
 <translation id="1476607407192946488">&amp;Language Settings</translation>
-<translation id="1477301030751268706">Identity API Token Cache</translation>
 <translation id="1478340334823509079">Details: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installation is not enabled</translation>
 <translation id="1483493594462132177">Send</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">System security setting</translation>
 <translation id="2091887806945687916">Sound</translation>
 <translation id="2097372108957554726">You need to sign in to Chrome to register new devices</translation>
-<translation id="2098305189700762159">Not Found</translation>
 <translation id="2099172618127234427">You are enabling Chrome OS debugging features which will set up sshd daemon and enable booting from USB drives.</translation>
 <translation id="2099686503067610784">Delete server certificate "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Sign-in</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Access your Assistant any time that you say "Ok Google"</translation>
 <translation id="2387458720915042159">Proxy connection type</translation>
 <translation id="2391419135980381625">Standard font</translation>
-<translation id="2391762656119864333">Revoke</translation>
 <translation id="2392369802118427583">Activate</translation>
 <translation id="2394566832561516196">Settings will be cleared on next reload.</translation>
 <translation id="2395616325548404795">Your <ph name="DEVICE_TYPE" /> has successfully been enrolled for enterprise management, but failed to send its asset and location information. Please manually enter this information from your Admin console for this device.</translation>
@@ -1956,7 +1952,6 @@
 <translation id="3894123633473837029">Include recent Assistant history via Sherlog. This may include your identity, location and debug info. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Add folder</translation>
 <translation id="389589731200570180">Share with guests</translation>
-<translation id="3898521660513055167">Token Status</translation>
 <translation id="389901847090970821">Select keyboard</translation>
 <translation id="3899879303189199559">Offline for more than a year</translation>
 <translation id="3900966090527141178">Export passwords</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">Uninstall app?</translation>
 <translation id="5235750401727657667">Replace the page that you see when opening a new tab</translation>
 <translation id="5238278114306905396">The app "<ph name="EXTENSION_NAME" />" was automatically removed.</translation>
-<translation id="5238369540257804368">Scopes</translation>
 <translation id="5241128660650683457">Read all your data on the websites that you visit</translation>
 <translation id="5242724311594467048">Enable "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Please try again in a few moments</translation>
@@ -3231,7 +3225,6 @@
 <translation id="5870155679953074650">Hard faults</translation>
 <translation id="5877064549588274448">Channel changed. Restart your device to apply changes.</translation>
 <translation id="5877584842898320529">The selected printer is not available or not installed correctly. <ph name="BR" /> Check your printer or try selecting another printer.</translation>
-<translation id="5880247576487732437">Token Present</translation>
 <translation id="5882919346125742463">Known Networks</translation>
 <translation id="5884474295213649357">This tab is connected to a USB device.</translation>
 <translation id="5885324376209859881">Manage media settings...</translation>
@@ -4696,7 +4689,6 @@
 <translation id="8045923671629973368">Enter application ID or web store URL</translation>
 <translation id="804786196054284061">End User Licence Agreement</translation>
 <translation id="8049705080247101012">Google has flagged '<ph name="EXTENSION_NAME" />' as malicious, and installation has been prevented</translation>
-<translation id="8049913480579063185">Extension Name</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS No.12 Files</translation>
 <translation id="8053390638574070785">Reload This Page</translation>
@@ -4947,7 +4939,6 @@
 <translation id="8449008133205184768">Paste and Match Style</translation>
 <translation id="8449036207308062757">Manage storage</translation>
 <translation id="8452135315243592079">Missing SIM card</translation>
-<translation id="845627346958584683">Expiry Time</translation>
 <translation id="845702320058262034">Can’t connect. Make sure that your phone’s Bluetooth is turned on.</translation>
 <translation id="8457451314607652708">Import bookmarks</translation>
 <translation id="8460336040822756677">If you turn off Smart Lock for <ph name="DEVICE_TYPE" />, you won’t be able to unlock your Chrome devices using your phone. You'll need to type your password.</translation>
@@ -5061,7 +5052,6 @@
 <translation id="8637542770513281060">Your computer contains a secure module, which is used to implement many critical security features in Chrome OS. Visit the Chromebook Help Centre to learn more: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">System update available. Preparing to download…</translation>
 <translation id="8639047128869322042">Checking for harmful software…</translation>
-<translation id="8642171459927087831">Access Token</translation>
 <translation id="8642900771896232685">2 seconds</translation>
 <translation id="8642947597466641025">Make Text Larger</translation>
 <translation id="8643418457919840804">To continue, choose an option:</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 78cc8ed..3afa423 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -97,6 +97,7 @@
 <translation id="1128109161498068552">No permitir que los sitios usen mensajes exclusivos del sistema para acceder a dispositivos MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Editar el motor de búsqueda</translation>
+<translation id="113124294734065964">Hay un problema en el conector</translation>
 <translation id="1134009406053225289">Abrir en una ventana de incógnito</translation>
 <translation id="1136712381129578788">Se ingresó el PIN de forma incorrecta demasiadas veces; por lo tanto, se bloqueó la llave de seguridad. Para desbloquearla, quítala y vuelve a insertarla.</translation>
 <translation id="1137673463384776352">Abrir vínculo en <ph name="APP" /></translation>
@@ -190,6 +191,7 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="1269405567167332785">Configuración avanzada</translation>
 <translation id="1272079795634619415">Interrumpir</translation>
+<translation id="1272293450992660632">Los valores del PIN no coinciden.</translation>
 <translation id="1272978324304772054">Esta cuenta de usuario no pertenece al dominio en el que se inscribió el dispositivo. Si deseas inscribirte en un dominio diferente, primero tendrás que realizar el proceso de recuperación del dispositivo.</translation>
 <translation id="1274977772557788323">Configuración de almacenamiento de Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies y otros datos de sitios</translation>
@@ -238,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">No se puede encontrar el archivo PPD. Comprueba que tu Chromebook esté en línea y vuelve a intentarlo.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> está bloqueado</translation>
-<translation id="1357589289913453911">ID de extensión</translation>
 <translation id="1358741672408003399">Ortografía y gramática</translation>
 <translation id="1361164813881551742">Agregar manualmente</translation>
 <translation id="1361655923249334273">No utilizado</translation>
@@ -318,7 +319,6 @@
 <translation id="1470967055429794975">Esta acción borrará todos los datos de la llave de seguridad, incluido su PIN</translation>
 <translation id="1475502736924165259">Tienes certificados archivados que no coinciden con ninguna de las demás categorías</translation>
 <translation id="1476607407192946488">&amp;Configuración de idiomas</translation>
-<translation id="1477301030751268706">Caché del token de la API de identidad</translation>
 <translation id="1478340334823509079">Detalles: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instalación no está habilitada</translation>
 <translation id="1483493594462132177">Enviar</translation>
@@ -384,6 +384,7 @@
 <translation id="1572876035008611720">Ingresa tu correo electrónico.</translation>
 <translation id="1576594961618857597">Avatar blanco predeterminado</translation>
 <translation id="1581962803218266616">Mostrar en Buscador</translation>
+<translation id="1582955169539260415">borrar [<ph name="FINGERPRINT_NAME" />]</translation>
 <translation id="1584990664401018068">La red Wi-Fi que estás usando (<ph name="NETWORK_ID" />) podría exigir autenticación.</translation>
 <translation id="1585717515139318619">Otro programa en tu computadora agregó un tema que puede cambiar el funcionamiento de Chrome.
 
@@ -443,6 +444,7 @@
 <translation id="1657406563541664238">Ayúdanos a <ph name="PRODUCT_NAME" /> mejorar enviando automáticamente estadísticas de uso e informes de fallos a Google.</translation>
 <translation id="1658424621194652532">Esta página está accediendo al micrófono.</translation>
 <translation id="1660204651932907780">Permitir que los sitios reproduzcan sonido (recomendado)</translation>
+<translation id="1660763353352708040">Problema en el adaptador de alimentación</translation>
 <translation id="1661156625580498328">Implementa la encriptación AES (recomendado).</translation>
 <translation id="166179487779922818">La contraseña es demasiado corta.</translation>
 <translation id="1661867754829461514">Falta el número de PIN </translation>
@@ -534,6 +536,7 @@
 <translation id="1792619191750875668">Pantalla extendida</translation>
 <translation id="1794791083288629568">Enviar comentarios para ayudarnos a solucionar este problema</translation>
 <translation id="1795214765651529549">Usar el tema clásico</translation>
+<translation id="1797738254362176886">Inserta y toca la llave de seguridad para ver los datos de acceso.</translation>
 <translation id="1799071797295057738">La extensión "<ph name="EXTENSION_NAME" />" se inhabilitó automáticamente.</translation>
 <translation id="1802687198411089702">La página no responde. Puedes esperar o salir.</translation>
 <translation id="1802931390041703523">Flash está bloqueado en esta página</translation>
@@ -610,6 +613,7 @@
 <translation id="1895934970388272448">Debes confirmar el registro en la impresora para finalizar este proceso. Compruébalo ahora.</translation>
 <translation id="1899826437968063457">Plugin VM necesita permiso para ejecutarse</translation>
 <translation id="1901303067676059328">Seleccionar &amp;todo</translation>
+<translation id="1901984611178952431">Administrar los datos de acceso</translation>
 <translation id="1902576642799138955">Período de validez</translation>
 <translation id="1904394285866191268">{NUM_TABS,plural, =1{Silenciar pestaña}other{Silenciar pestañas}}</translation>
 <translation id="1905375423839394163">Nombre de la Chromebook</translation>
@@ -719,7 +723,6 @@
 <translation id="2090876986345970080">Configuración de seguridad del sistema</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2097372108957554726">Debes acceder a Chrome para registrar nuevos dispositivos.</translation>
-<translation id="2098305189700762159">No se ha encontrado.</translation>
 <translation id="2099172618127234427">Estás habilitando las funciones de depuración del Sistema operativo Chrome que configurarán el daemon sshd y habilitarán el inicio desde unidades USB.</translation>
 <translation id="2099686503067610784">¿Eliminar certificado "<ph name="CERTIFICATE_NAME" />" del servidor?</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
@@ -869,6 +872,7 @@
 <translation id="2294358108254308676">¿Deseas instalar <ph name="PRODUCT_NAME" />?</translation>
 <translation id="2297705863329999812">Buscar impresoras</translation>
 <translation id="2300383962156589922">Personaliza y controla <ph name="APP_NAME" /></translation>
+<translation id="2300800387751317588">La sincronización está pausada porque borras cookies en el inicio. Para continuar con la sincronización, cambia <ph name="COOKIE_SETTINGS_LINK" />.</translation>
 <translation id="2301382460326681002">El directorio de raíz de la extensión no es válido.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ha solicitado permisos adicionales.</translation>
 <translation id="2307462900900812319">Configurar red</translation>
@@ -930,11 +934,11 @@
 <translation id="2386926718981642523">Di "Ok Google" para acceder al Asistente en cualquier momento</translation>
 <translation id="2387458720915042159">Tipo de conexión proxy</translation>
 <translation id="2391419135980381625">Fuente estándar</translation>
-<translation id="2391762656119864333">Revocar</translation>
 <translation id="2392369802118427583">Activar</translation>
 <translation id="2394566832561516196">Se borrará la configuración la próxima vez que se vuelva a cargar la página.</translation>
 <translation id="2395616325548404795">Tu dispositivo <ph name="DEVICE_TYPE" /> se inscribió correctamente para la administración empresarial, pero se produjo un error al intentar enviar la información de la ubicación y del recurso. Ingresa los datos manualmente en la Consola del administrador del dispositivo.</translation>
 <translation id="2396783860772170191">Ingresa un PIN de 4 dígitos (0000-9999)</translation>
+<translation id="2399939490305346086">Datos de acceso de la llave de seguridad</translation>
 <translation id="2408955596600435184">Ingresa tu PIN</translation>
 <translation id="241082044617551207">Complemento desconocido</translation>
 <translation id="2412593942846481727">Actualización disponible</translation>
@@ -955,6 +959,7 @@
 <translation id="2435457462613246316">Mostrar contraseña</translation>
 <translation id="2436186046335138073">¿Deseas permitir que <ph name="HANDLER_HOSTNAME" /> abra todos los vínculos de <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínimo</translation>
+<translation id="2436720498717686157">Tu organización debe actualizar este dispositivo de inmediato</translation>
 <translation id="2439545803278355377">Ingresa el PIN nuevo. Un PIN debe tener al menos cuatro caracteres y puede incluir letras, números y otros caracteres.</translation>
 <translation id="2440604414813129000">Ver códig&amp;o fuente</translation>
 <translation id="2444119669991608829">¿La página no está en <ph name="LANGUAGE" />?</translation>
@@ -1230,6 +1235,7 @@
 <translation id="2820957248982571256">Buscando…</translation>
 <translation id="2822634587701817431">Reducir/Ampliar</translation>
 <translation id="2822910719211888134">Se produjo un error al crear la copia de seguridad de Linux</translation>
+<translation id="2824942875887026017"><ph name="IDS_SHORT_PRODUCT_NAME" /> usa la configuración de proxy de tu administrador</translation>
 <translation id="2825758591930162672">Clave pública del sujeto</translation>
 <translation id="2825848369316359348">Busca el nombre impreso en la parte posterior de la llave de seguridad</translation>
 <translation id="2828650939514476812">Conectarse a la red Wi-Fi</translation>
@@ -1363,6 +1369,7 @@
 <translation id="3022978424994383087">No entendí.</translation>
 <translation id="3023464535986383522">Seleccionar para pronunciar</translation>
 <translation id="3024374909719388945">Utilizar reloj de 24 horas</translation>
+<translation id="30256218463955326">El conector no es compatible</translation>
 <translation id="3031417829280473749">Agente X</translation>
 <translation id="3031557471081358569">Selecciona elementos para importar:</translation>
 <translation id="3031601332414921114">Reanudar la impresión</translation>
@@ -1553,6 +1560,7 @@
 <translation id="3348038390189153836">Se detectó un dispositivo removible.</translation>
 <translation id="3349933790966648062">Espacio en memoria</translation>
 <translation id="3350117557200012647">Activar el modo de sincronización</translation>
+<translation id="3350263973613584174">Esta llave de seguridad no tiene almacenado ningún dato de acceso.</translation>
 <translation id="3355936511340229503">Error de conexión</translation>
 <translation id="3356580349448036450">Completo</translation>
 <translation id="3359256513598016054">Restricciones de directivas para certificados</translation>
@@ -1880,6 +1888,7 @@
 <translation id="3812525830114410218">Certificado incorrecto</translation>
 <translation id="3813296892522778813">Consulta la <ph name="BEGIN_LINK_CHROMIUM" />Ayuda de Google Chrome<ph name="END_LINK_CHROMIUM" /> si no encuentras lo que estás buscando</translation>
 <translation id="3816118180265633665">Colores de Chrome</translation>
+<translation id="3817524650114746564">Abre la configuración de proxy de tu computadora</translation>
 <translation id="3817579325494460411">No proporcionada</translation>
 <translation id="3819257035322786455">Copia de seguridad</translation>
 <translation id="3819261658055281761">El sistema no pudo obtener un token de acceso a la API a largo plazo para este dispositivo.</translation>
@@ -1933,6 +1942,7 @@
 <translation id="3878840326289104869">Creando usuario supervisado</translation>
 <translation id="3879748587602334249">Administrador de descargas</translation>
 <translation id="3888550877729210209">Tomar notas con <ph name="LOCK_SCREEN_APP_NAME" /></translation>
+<translation id="388900914234409233">Para cargar esta Chromebook, usa una batería OEM compatible.</translation>
 <translation id="3892414795099177503">Agregar OpenVPN/L2TP…</translation>
 <translation id="3893536212201235195">Leer y cambiar la configuración de accesibilidad</translation>
 <translation id="3893630138897523026">ChromeVox (comentarios por voz)</translation>
@@ -1940,7 +1950,6 @@
 <translation id="3894123633473837029">Incluir el historial reciente del Asistente a través de Sherlog. Estos datos pueden incluir tu identidad, ubicación y la información de depuración. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Agregar carpeta</translation>
 <translation id="389589731200570180">Compartir con usuarios invitados</translation>
-<translation id="3898521660513055167">Estado del token</translation>
 <translation id="389901847090970821">Seleccionar teclado</translation>
 <translation id="3899879303189199559">Sin conexión durante más de un año</translation>
 <translation id="3900966090527141178">Exportar contraseñas</translation>
@@ -2045,6 +2054,7 @@
 <translation id="4044612648082411741">Ingresar la contraseña del certificado</translation>
 <translation id="404493185430269859">Motor de búsqueda predeterminado</translation>
 <translation id="4046123991198612571">Siguiente pista</translation>
+<translation id="4050225813016893843">Método de autenticación</translation>
 <translation id="4052120076834320548">Diminuto</translation>
 <translation id="4055023634561256217">Es necesario que reinicies tu dispositivo para poder restablecerlo con Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
@@ -2094,6 +2104,7 @@
 <translation id="4109135793348361820">Mover ventana a <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />)</translation>
 <translation id="4110490973560452005">Se completó la descarga: <ph name="FILE_NAME" />. Presiona mayúscula + F6 para ir al área de la barra de descargas.</translation>
 <translation id="4110895898888439383">Navegar en la Web en el modo de contraste alto</translation>
+<translation id="4111407695731262203">tu configuración</translation>
 <translation id="4115002065223188701">La red está fuera de alcance</translation>
 <translation id="4115080753528843955">Algunos servicios de contenido usan identificadores únicos para autorizar el acceso a contenido protegido</translation>
 <translation id="4115378294792113321">Magenta</translation>
@@ -2119,6 +2130,7 @@
 <translation id="4147911968024186208">Vuelve a intentarlo. Si vuelves a ver este error, comunícate con tu representante de asistencia.</translation>
 <translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Pantalla</translation>
+<translation id="4150234330364554482">Usa una estación de conector OEM diseñada para funcionar con esta Chromebook.</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
 <translation id="4157869833395312646">Criptografía controlada por servidor de Microsoft</translation>
@@ -2265,6 +2277,7 @@
 <translation id="4412698727486357573">Centro de ayuda</translation>
 <translation id="44141919652824029">¿Deseas permitir que "<ph name="APP_NAME" />" obtenga la lista de los dispositivos USB conectados?</translation>
 <translation id="4414232939543644979">Nueva ventana de &amp;incógnito</translation>
+<translation id="4414386768539506503">Para ver los datos de acceso, ingresa el PIN de tu llave de seguridad. Si no lo conoces, restablece la llave.</translation>
 <translation id="4415245286584082850">No se encontraron dispositivos. Abre un artículo del Centro de ayuda en una pestaña nueva.</translation>
 <translation id="4415276339145661267">Administrar tu Cuenta de Google</translation>
 <translation id="4415748029120993980">Curva elíptica SECG secp384r1 (también conocido como NIST P-384)</translation>
@@ -2644,6 +2657,7 @@
 <translation id="5017633213534173756">Recordar</translation>
 <translation id="5018207570537526145">Abrir el sitio web de la extensión</translation>
 <translation id="5021750053540820849">Aún no se actualizó</translation>
+<translation id="5026688690798028095">Abrir la administración de apps</translation>
 <translation id="5026874946691314267">No volver a mostrar</translation>
 <translation id="5027550639139316293">Enviar certificado por correo electrónico</translation>
 <translation id="5027562294707732951">Agregar extensión</translation>
@@ -2676,6 +2690,7 @@
 <translation id="5072836811783999860">Mostrar favoritos administrados</translation>
 <translation id="5074318175948309511">Es posible que debas actualizar la página para que se aplique la nueva configuración.</translation>
 <translation id="5075131525758602494">Ingresar el PIN de la tarjeta SIM</translation>
+<translation id="507514548843781244">Visualiza y borra los datos de acceso almacenados en tu llave de seguridad</translation>
 <translation id="5078638979202084724">Agregar a favoritos todas las pestañas</translation>
 <translation id="5078796286268621944">Número de PIN incorrecto</translation>
 <translation id="5079950360618752063">Usar la contraseña sugerida</translation>
@@ -2770,7 +2785,6 @@
 <translation id="5235050375939235066">¿Desinstalar la app?</translation>
 <translation id="5235750401727657667">Reemplazar la página que ves cuando abres una pestaña nueva</translation>
 <translation id="5238278114306905396">Se eliminó automáticamente la aplicación "<ph name="EXTENSION_NAME" />".</translation>
-<translation id="5238369540257804368">Ámbitos</translation>
 <translation id="5241128660650683457">Leer todos los datos de los sitios web que visitas</translation>
 <translation id="5242724311594467048">¿Habilitar "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Vuelve a intentarlo en unos minutos</translation>
@@ -2948,6 +2962,7 @@
 <translation id="5496587651328244253">Organizar</translation>
 <translation id="549673810209994709">No se pudo traducir esta página.</translation>
 <translation id="5499313591153584299">Este archivo puede dañar el equipo.</translation>
+<translation id="5500345327355928305">Para evitar problemas de carga y rendimiento, usa un adaptador de alimentación con conexión USB tipo C o de un OEM compatible.</translation>
 <translation id="5502500733115278303">Importado desde Firefox</translation>
 <translation id="5507756662695126555">No rechazo</translation>
 <translation id="5509693895992845810">Gu&amp;ardar como...</translation>
@@ -3092,6 +3107,7 @@
 <translation id="5708171344853220004">Nombre principal de Microsoft</translation>
 <translation id="5709557627224531708">Establecer Chrome como tu navegador predeterminado</translation>
 <translation id="5711983031544731014">No se puede desbloquear. Ingresa la contraseña.</translation>
+<translation id="5713723565110096165">El PIN es incorrecto. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="5715711091495208045">Agente del complemento: <ph name="PLUGIN_NAME" /></translation>
 <translation id="5719603411793408026">Motores de búsqueda predeterminados</translation>
 <translation id="5720705177508910913">Usuario actual</translation>
@@ -3102,6 +3118,7 @@
 <translation id="5727728807527375859">Las extensiones, las aplicaciones y los temas pueden dañar tu computadora. ¿Estás seguro de que deseas continuar?</translation>
 <translation id="5729712731028706266">&amp;Ver</translation>
 <translation id="5734362860645681824">Comunicaciones</translation>
+<translation id="5734697361979786483">Agregar archivos compartidos</translation>
 <translation id="5736796278325406685">Ingresa un nombre de usuario válido</translation>
 <translation id="5739235828260127894">La verificación está pendiente. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Muy grande</translation>
@@ -3145,6 +3162,7 @@
 <translation id="5794414402486823030">Abrir siempre con el visualizador del sistema</translation>
 <translation id="5794786537412027208">Salir de todas las aplicaciones de Chrome</translation>
 <translation id="5797070761912323120">Es posible que Google use tu historial para personalizar la Búsqueda, los anuncios y otros servicios de Google</translation>
+<translation id="579915268381781820">Se quitó tu llave de seguridad.</translation>
 <translation id="5799508265798272974">Máquina virtual de Linux: <ph name="LINUX_VM_NAME" /></translation>
 <translation id="5800020978570554460">El archivo de destino se truncó o eliminó desde la última descarga.</translation>
 <translation id="5801568494490449797">Preferencias</translation>
@@ -3205,7 +3223,6 @@
 <translation id="5870155679953074650">Fallos graves</translation>
 <translation id="5877064549588274448">Se cambió el canal. Reinicia el dispositivo para aplicar los cambios.</translation>
 <translation id="5877584842898320529">La impresora seleccionada no está disponible o no se instaló correctamente. <ph name="BR" /> Comprueba tu impresora o selecciona otra.</translation>
-<translation id="5880247576487732437">Token presente</translation>
 <translation id="5882919346125742463">Redes conocidas</translation>
 <translation id="5884474295213649357">Esta pestaña está conectada a un dispositivo USB.</translation>
 <translation id="5885324376209859881">Administrar configuración de medios...</translation>
@@ -3287,6 +3304,7 @@
 <translation id="6010869025736512584">Accediendo a la entrada de video</translation>
 <translation id="6011193465932186973">Huella digital</translation>
 <translation id="6011449291337289699">Borrar los datos del sitio</translation>
+<translation id="6015266928248016057">PUK no válida. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Año</translation>
 <translation id="6016551720757758985">Confirmar Powerwash con retorno a la versión anterior</translation>
 <translation id="6016972670657536680">Selecciona el botón de idioma y teclado. Actualmente, el idioma seleccionado es <ph name="LANGUAGE" />.</translation>
@@ -3359,16 +3377,19 @@
 <translation id="6103681770816982672">Advertencia: vas a cambiar al canal de programadores</translation>
 <translation id="6104068876731806426">Cuentas de Google</translation>
 <translation id="6104311680260824317">No se puede unir el dispositivo con el dominio. El servidor no es compatible con los tipos de encriptación de Kerberos especificados. Para conocer la configuración de la encriptación, consulta "Más opciones".</translation>
+<translation id="6106186653986077033">Plugin VM requiere una licencia</translation>
 <translation id="6107012941649240045">Emitido a</translation>
 <translation id="6112294629795967147">Tocar para cambiar el tamaño</translation>
 <translation id="6112931163620622315">Revisa el teléfono</translation>
 <translation id="6112952769866305444">Editar persona, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
+<translation id="6113942107547980621">Para usar Smart Lock, cambia al perfil del usuario principal en tu teléfono</translation>
 <translation id="6116338172782435947">Ver el texto y las imágenes copiados en el portapapeles</translation>
 <translation id="6116921718742659598">Cambiar la configuración de idioma y de entrada de texto</translation>
 <translation id="6120205520491252677">Fijar esta página a la Pantalla de inicio...</translation>
 <translation id="6122081475643980456">Se está controlando tu conexión a Internet</translation>
 <translation id="6122095009389448667">Seguir impidiendo que este sitio vea el portapapeles</translation>
 <translation id="6122875415561139701">No se permite la operación de escritura en: "<ph name="DEVICE_NAME" />".</translation>
+<translation id="6123292156101652890">Esta llave de seguridad no puede almacenar datos de acceso.</translation>
 <translation id="6124650939968185064">Las siguientes extensiones dependen de esta extensión:</translation>
 <translation id="6124698108608891449">Este sitio necesita más permisos.</translation>
 <translation id="6125479973208104919">Lamentablemente, debes volver a agregar tu cuenta a este dispositivo <ph name="DEVICE_TYPE" />.</translation>
@@ -3892,6 +3913,7 @@
 <translation id="6950627417367801484">Restablecer apps</translation>
 <translation id="6950943362443484797">Instalaremos esa app por ti</translation>
 <translation id="6951153907720526401">Controladores de pago</translation>
+<translation id="6951663584153258142">Tu organización te solicita que actualices este dispositivo</translation>
 <translation id="6953878494808481632">Información relacionada</translation>
 <translation id="6955446738988643816">Inspeccionar ventana emergente</translation>
 <translation id="6957044667612803194">Esta llave de seguridad no es compatible con los PIN</translation>
@@ -3910,6 +3932,7 @@
 <translation id="6974609594866392343">Modo de demostración sin conexión</translation>
 <translation id="6977381486153291903">Revisión de firmware</translation>
 <translation id="6978121630131642226">Motores de búsqueda</translation>
+<translation id="6979044105893951891">Inicia las sesiones de invitado administradas y sale de ellas</translation>
 <translation id="6979440798594660689">Silenciar (predeterminado)</translation>
 <translation id="6979737339423435258">Todos</translation>
 <translation id="6981982820502123353">Accesibilidad</translation>
@@ -4035,6 +4058,7 @@
 <translation id="7143092389027215216">Iniciar el modo de demostración</translation>
 <translation id="7143207342074048698">Conectando</translation>
 <translation id="7144878232160441200">Volver a intentarlo</translation>
+<translation id="714687768418476028">Tu llave de seguridad no está protegida con un PIN. Crea uno para administrar los datos de acceso.</translation>
 <translation id="7149893636342594995">Últimas 24 horas</translation>
 <translation id="715118844758971915">Impresoras clásicas</translation>
 <translation id="7152478047064750137">Esta extensión no requiere permisos especiales</translation>
@@ -4663,7 +4687,6 @@
 <translation id="8045923671629973368">Ingresa el ID de aplicación o la URL de la tienda web</translation>
 <translation id="804786196054284061">Acuerdo de licencia de usuario final</translation>
 <translation id="8049705080247101012">Google marcó <ph name="EXTENSION_NAME" /> como extensión maliciosa y se canceló la instalación</translation>
-<translation id="8049913480579063185">Nombre de la extensión</translation>
 <translation id="8050038245906040378">Firma de código comercial de Microsoft</translation>
 <translation id="8053278772142718589">Archivos PKCS #12</translation>
 <translation id="8053390638574070785">Volver a cargar esta página</translation>
@@ -4694,6 +4717,7 @@
     <ph name="BEGIN_PARAGRAPH4" />La copia de seguridad de los datos no incide en la cuota de almacenamiento en Drive.<ph name="END_PARAGRAPH4" />
     <ph name="BEGIN_PARAGRAPH5" />Se puede desactivar este servicio en Configuración.<ph name="END_PARAGRAPH5" /></translation>
 <translation id="80974698889265265">Los PIN no coinciden</translation>
+<translation id="809792523045608178"><ph name="IDS_SHORT_PRODUCT_NAME" /> usa la configuración de proxy de una extensión</translation>
 <translation id="8099495042588009598">Más permisos</translation>
 <translation id="8101987792947961127">Se requiere Powerwash en el siguiente reinicio</translation>
 <translation id="8102159139658438129">Para ver las opciones para tu teléfono conectado, accede a la <ph name="LINK_BEGIN" />Configuración<ph name="LINK_END" /></translation>
@@ -4704,6 +4728,7 @@
 <translation id="8113043281354018522">Elige un tipo de licencia</translation>
 <translation id="8116972784401310538">&amp;Administrador de favoritos</translation>
 <translation id="8117620576188476503">Administra las conexiones, actualizaciones y configuración con la bandeja de estado. Presiona Alt + mayúscula + S para acceder.</translation>
+<translation id="8118076340394175570">Tu organización debe actualizar este dispositivo</translation>
 <translation id="8118362518458010043">Chrome la inhabilitó. Es posible que esta extensión no sea segura.</translation>
 <translation id="8118488170956489476">Tu organización <ph name="BEGIN_LINK" />administra el navegador<ph name="END_LINK" /></translation>
 <translation id="8118860139461251237">Administrar tus descargas</translation>
@@ -4849,9 +4874,11 @@
 <translation id="8339059274628563283">El sitio <ph name="SITE" /> almacenó datos de forma local</translation>
 <translation id="833986336429795709">Para abrir este vínculo, selecciona una app</translation>
 <translation id="8342861492835240085">Seleccionar una colección</translation>
+<translation id="834290227245955730">El PIN no es válido. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="8343956361364550006">Para disfrutar de animaciones y videos óptimos, aumenta el ancho de banda.
 Es posible que los usuarios con conexiones lentas no puedan ver tu contenido.</translation>
 <translation id="8351419472474436977">Esta extensión tomó control de tu configuración de proxy, lo que significa que puede cambiar, dañar o espiar cualquier actividad que realices en línea. Si sabes con certeza por qué se produjo este cambio, probablemente no lo desees.</translation>
+<translation id="8351630282875799764">No se está cargando la batería</translation>
 <translation id="835238322900896202">Se produjo un error durante la desinstalación. Completa la operación a través de la terminal.</translation>
 <translation id="8352772353338965963">Agrega una cuenta para el acceso múltiple. Puedes acceder a todas las cuentas abiertas sin una contraseña, por lo que esta función solo debe utilizarse con cuentas de confianza.</translation>
 <translation id="8353683614194668312">Puede:</translation>
@@ -4911,7 +4938,6 @@
 <translation id="8449008133205184768">Pegar con el mismo estilo</translation>
 <translation id="8449036207308062757">Administrar almacenamiento</translation>
 <translation id="8452135315243592079">Falta la tarjeta SIM</translation>
-<translation id="845627346958584683">Hora de vencimiento</translation>
 <translation id="845702320058262034">No se puede establecer la conexión. Asegúrate de que la conexión Bluetooth del teléfono esté activada.</translation>
 <translation id="8457451314607652708">Importar favoritos</translation>
 <translation id="8460336040822756677">Si desactivas Smart Lock para <ph name="DEVICE_TYPE" />, no podrás desbloquear los dispositivos Chrome que usan tu teléfono. Deberás escribir la contraseña.</translation>
@@ -4920,6 +4946,8 @@
 <translation id="8461914792118322307">Proxy</translation>
 <translation id="8463215747450521436">Es posible que el administrador haya eliminado o inhabilitado este usuario supervisado. Comunícate con el administrador si deseas seguir accediendo como este usuario.</translation>
 <translation id="846374874681391779">Barra de descargas</translation>
+<translation id="8463807869745732775">"&gt;
+    Datos de acceso almacenados en la llave de seguridad</translation>
 <translation id="8463955938112983119">Se inhabilitó <ph name="PLUGIN_NAME" />.</translation>
 <translation id="8464132254133862871">Esta cuenta de usuario no es elegible para el servicio.</translation>
 <translation id="8465252176946159372">No válido</translation>
@@ -4944,6 +4972,7 @@
 <translation id="8497219075884839166">Utilidades de Windows</translation>
 <translation id="8498214519255567734">Te permite ver o leer mejor en lugares con luz tenue</translation>
 <translation id="8498395510292172881">Seguir leyendo en Chrome</translation>
+<translation id="8500234928660943538">El PUK es incorrecto. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="8502536196501630039">Para usar apps de Google Play, primero debes restablecer tus apps. Es posible que se pierdan algunos datos.</translation>
 <translation id="8503813439785031346">Nombre de usuario</translation>
 <translation id="850875081535031620">No se encontró software dañino</translation>
@@ -5022,7 +5051,6 @@
 <translation id="8637542770513281060">Tu computadora cuenta con un módulo de seguridad que se usa para implementar varias funciones clave de seguridad en Sistema operativo Chrome. Para obtener más información, visita el Centro de ayuda de Chromebook: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Actualización del sistema disponible. Preparando para descargar...</translation>
 <translation id="8639047128869322042">Buscando software dañino…</translation>
-<translation id="8642171459927087831">Token de acceso</translation>
 <translation id="8642900771896232685">2 segundos</translation>
 <translation id="8642947597466641025">Aumentar el tamaño del texto</translation>
 <translation id="8643418457919840804">Para continuar, elige una opción:</translation>
@@ -5041,6 +5069,7 @@
 <translation id="8656768832129462377">No revisar</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> comparte tu pantalla y audio con <ph name="TAB_NAME" />.</translation>
 <translation id="8659875081143553823">Un momento</translation>
+<translation id="8660174278198826384">Comunícate con el administrador de dispositivos de tu organización</translation>
 <translation id="8661290697478713397">Abrir el vínculo en una ventana de incó&amp;gnito</translation>
 <translation id="8662671328352114214">Unirse a la red <ph name="TYPE" /></translation>
 <translation id="8662795692588422978">Personas</translation>
@@ -5203,6 +5232,7 @@
 <translation id="8876307312329369159">No se puede cambiar esta configuración en la sesión de demostración.</translation>
 <translation id="8877448029301136595">[directorio principal]</translation>
 <translation id="8879284080359814990">Mo&amp;strar como pestaña</translation>
+<translation id="8879921471468674457">Recordar la información de acceso</translation>
 <translation id="8883847527783433352">Sincronizar con otra cuenta</translation>
 <translation id="8884570509232205463">Ahora, el dispositivo se bloqueará a la(s) <ph name="UNLOCK_TIME" />.</translation>
 <translation id="8885197664446363138">Smart Lock no está disponible</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 1432bcb6..1682a9cf 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">No se ha podido encontrar el archivo PPD. Comprueba que el Chromebook esté conectado y vuelve a intentarlo.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> está bloqueado</translation>
-<translation id="1357589289913453911">ID de la extensión</translation>
 <translation id="1358741672408003399">Ortografía y gramática</translation>
 <translation id="1361164813881551742">Añadir manualmente</translation>
 <translation id="1361655923249334273">Sin utilizar</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Esta acción borrará todos los datos de la llave de seguridad, incluido el PIN</translation>
 <translation id="1475502736924165259">Tienes certificados registrados que no corresponden a ninguna otra categoría</translation>
 <translation id="1476607407192946488">&amp;Configuración de idioma</translation>
-<translation id="1477301030751268706">Caché del token de la API de identidad</translation>
 <translation id="1478340334823509079">Detalles: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instalación no está habilitada</translation>
 <translation id="1483493594462132177">Enviar</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Configuración de seguridad del sistema</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2097372108957554726">Debes iniciar sesión en Chrome para registrar nuevos dispositivos</translation>
-<translation id="2098305189700762159">No se ha encontrado.</translation>
 <translation id="2099172618127234427">Vas a habilitar las funciones de depuración de Chrome OS, que configurarán el daemon sshd y habilitará el arranque desde unidades USB.</translation>
 <translation id="2099686503067610784">¿Quieres eliminar el certificado de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Acceder al Asistente cuando digas "Ok Google"</translation>
 <translation id="2387458720915042159">Tipo de conexión con proxy</translation>
 <translation id="2391419135980381625">Fuente estándar</translation>
-<translation id="2391762656119864333">Revocar</translation>
 <translation id="2392369802118427583">Activar</translation>
 <translation id="2394566832561516196">La configuración se eliminará la próxima vez que se vuelva a cargar la página.</translation>
 <translation id="2395616325548404795">El dispositivo <ph name="DEVICE_TYPE" /> se ha registrado correctamente para ser administrado por la empresa, pero no ha podido enviar la información de la ubicación ni del recurso. Introduce manualmente esta información en la consola de administración de este dispositivo.</translation>
@@ -1955,7 +1951,6 @@
 <translation id="3894123633473837029">Incluir el historial reciente del Asistente mediante Sherlog. Puede contener datos de identidad y ubicación e información de depuración. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Añadir carpeta</translation>
 <translation id="389589731200570180">Compartir con invitados</translation>
-<translation id="3898521660513055167">Estado del token</translation>
 <translation id="389901847090970821">Seleccionar teclado</translation>
 <translation id="3899879303189199559">Sin conexión durante más de un año</translation>
 <translation id="3900966090527141178">Exportar contraseñas</translation>
@@ -2790,7 +2785,6 @@
 <translation id="5235050375939235066">¿Desinstalar aplicación?</translation>
 <translation id="5235750401727657667">Cambiar la página que ves al abrir una nueva pestaña</translation>
 <translation id="5238278114306905396">Se ha eliminado automáticamente la aplicación <ph name="EXTENSION_NAME" />.</translation>
-<translation id="5238369540257804368">Ámbitos</translation>
 <translation id="5241128660650683457">Leer todos tus datos en los sitios web a los que accedes</translation>
 <translation id="5242724311594467048">¿Habilitar "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Inténtalo de nuevo dentro de unos minutos.</translation>
@@ -3229,7 +3223,6 @@
 <translation id="5870155679953074650">Fallos graves</translation>
 <translation id="5877064549588274448">Se ha cambiado el canal. Reinicia el dispositivo para aplicar los cambios.</translation>
 <translation id="5877584842898320529">La impresora seleccionada no se encuentra disponible o no está bien instalada. <ph name="BR" /> Compruébala o prueba a seleccionar otra.</translation>
-<translation id="5880247576487732437">Token presente</translation>
 <translation id="5882919346125742463">Redes conocidas</translation>
 <translation id="5884474295213649357">Esta pestaña está conectada a un dispositivo USB.</translation>
 <translation id="5885324376209859881">Administrar configuración de medios...</translation>
@@ -4694,7 +4687,6 @@
 <translation id="8045923671629973368">Introducir el ID de la aplicación o la URL de Chrome Web Store</translation>
 <translation id="804786196054284061">Acuerdo de licencia de usuario final</translation>
 <translation id="8049705080247101012">Google ha marcado "<ph name="EXTENSION_NAME" />" como extensión maliciosa, por lo que ha evitado que se instale</translation>
-<translation id="8049913480579063185">Nombre de la extensión</translation>
 <translation id="8050038245906040378">Firma de código comercial de Microsoft</translation>
 <translation id="8053278772142718589">Archivos PKCS #12</translation>
 <translation id="8053390638574070785">Cargar página de nuevo</translation>
@@ -4945,7 +4937,6 @@
 <translation id="8449008133205184768">Pegar adaptando el estilo</translation>
 <translation id="8449036207308062757">Gestionar almacenamiento</translation>
 <translation id="8452135315243592079">Falta la tarjeta SIM</translation>
-<translation id="845627346958584683">Fecha de vencimiento</translation>
 <translation id="845702320058262034">No hay conexión Comprueba que el Bluetooth del teléfono esté activado.</translation>
 <translation id="8457451314607652708">Importar marcadores</translation>
 <translation id="8460336040822756677">Si desactivas Smart Lock para <ph name="DEVICE_TYPE" />, no podrás desbloquear los dispositivos Chrome con el teléfono. Deberás introducir la contraseña.</translation>
@@ -5059,7 +5050,6 @@
 <translation id="8637542770513281060">Tu ordenador contiene un módulo de seguridad, que se utiliza para implementar un gran número de funciones importantes de seguridad en Chrome OS. Accede al Centro de Ayuda de los Chromebooks (https://support.google.com/chromebook/?p=sm) para obtener más información.</translation>
 <translation id="8637688295594795546">Hay disponible una actualización del sistema. Preparando para descargar…</translation>
 <translation id="8639047128869322042">Buscando software dañino...</translation>
-<translation id="8642171459927087831">Token de acceso</translation>
 <translation id="8642900771896232685">2 segundos</translation>
 <translation id="8642947597466641025">Ampliar el tamaño del texto</translation>
 <translation id="8643418457919840804">Para continuar, selecciona una opción:</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d533cad..4bd6672f 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD-d ei leita. Veenduge, et teie Chromebook oleks võrguga ühendatud, ja proovige uuesti.</translation>
 <translation id="1355466263109342573">Pistikprogramm <ph name="PLUGIN_NAME" /> on blokeeritud</translation>
-<translation id="1357589289913453911">Laienduse ID</translation>
 <translation id="1358741672408003399">Õigekiri ja grammatika</translation>
 <translation id="1361164813881551742">Käsitsi lisamine</translation>
 <translation id="1361655923249334273">Kasutamata</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">See kustutab kõik turvavõtmel olevad andmed, sh selle PIN-koodi</translation>
 <translation id="1475502736924165259">Teil on sertifikaate, mis ei sobi ühtegi muusse kategooriasse</translation>
 <translation id="1476607407192946488">&amp;Keeleseaded</translation>
-<translation id="1477301030751268706">Identiteedi API loa vahemälu</translation>
 <translation id="1478340334823509079">Üksikasjad: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installimine ei ole lubatud</translation>
 <translation id="1483493594462132177">Saada</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Süsteemi turvaseade</translation>
 <translation id="2091887806945687916">Heli</translation>
 <translation id="2097372108957554726">Uute seadmete registreerimiseks peate Chrome'i sisse logima</translation>
-<translation id="2098305189700762159">Ei leitud</translation>
 <translation id="2099172618127234427">Soovite lubada Chrome OS-i silumisfunktsioonid, mis seadistavad üksuse sshd daemon ja lubavad käivitamise USB-kettalt.</translation>
 <translation id="2099686503067610784">Kustutada serveri sertifikaat „<ph name="CERTIFICATE_NAME" />”</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Pääsete oma assistendile juurde igal ajal, öeldes lihtsalt „Ok Google”</translation>
 <translation id="2387458720915042159">Puhverserveri ühenduse tüüp</translation>
 <translation id="2391419135980381625">Standardne font</translation>
-<translation id="2391762656119864333">Tühista</translation>
 <translation id="2392369802118427583">Aktiveeri</translation>
 <translation id="2394566832561516196">Seaded kustutatakse järgmise uuesti laadimise ajal.</translation>
 <translation id="2395616325548404795">Teie seade <ph name="DEVICE_TYPE" /> on ettevõtte halduse jaoks registreeritud, kuid varade ja asukoha teabe saatmine ebaõnnestus. Sisestage teave käsitsi selle seadme administraatorikonsoolil.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Assistendi hiljutise ajaloo kaasamine Sherlogi kaudu. See võib hõlmata teie identiteeti, asukohta ja silumisteavet. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Kausta lisamine</translation>
 <translation id="389589731200570180">Külalistega jagamine</translation>
-<translation id="3898521660513055167">Loa olek</translation>
 <translation id="389901847090970821">Klaviatuuri valimine</translation>
 <translation id="3899879303189199559">Üle ühe aasta võrguühenduseta</translation>
 <translation id="3900966090527141178">Paroolide eksportimine</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Kas desinstallida rakendus?</translation>
 <translation id="5235750401727657667">Asendatakse leht, mida uue vahelehe avamisel näete</translation>
 <translation id="5238278114306905396">Rakendus „<ph name="EXTENSION_NAME" />” eemaldati automaatselt.</translation>
-<translation id="5238369540257804368">Ulatused</translation>
 <translation id="5241128660650683457">Lugege kõiki teie külastatud veebisaitide andmeid</translation>
 <translation id="5242724311594467048">Kas lubada laiendus „<ph name="EXTENSION_NAME" />”?</translation>
 <translation id="5243522832766285132">Proovige mõne aja pärast uuesti</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Rängad vead</translation>
 <translation id="5877064549588274448">Kanal on muutunud. Muudatuste rakendamiseks taaskäivitage oma seade.</translation>
 <translation id="5877584842898320529">Valitud printer pole saadaval või pole õigesti installitud. <ph name="BR" /> Kontrollige printerit või valige teine printer.</translation>
-<translation id="5880247576487732437">Luba on olemas</translation>
 <translation id="5882919346125742463">Teadaolevad võrgud</translation>
 <translation id="5884474295213649357">See vaheleht on ühendatud USB-seadmega.</translation>
 <translation id="5885324376209859881">Meediaseadete haldamine ...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Sisestage rakenduse ID või veebipoe URL</translation>
 <translation id="804786196054284061">Lõppkasutaja litsentsileping</translation>
 <translation id="8049705080247101012">Google märgistas laienduse „<ph name="EXTENSION_NAME" />” pahatahtlikuks ja installimine blokeeriti</translation>
-<translation id="8049913480579063185">Laienduse nimi</translation>
 <translation id="8050038245906040378">Microsofti äriline koodsigneerimine</translation>
 <translation id="8053278772142718589">PKCS #12 failid</translation>
 <translation id="8053390638574070785">Laadi see leht uuesti</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Kleebi ja ühita laad</translation>
 <translation id="8449036207308062757">Halda salvestusruumi</translation>
 <translation id="8452135315243592079">SIM-kaart puudub</translation>
-<translation id="845627346958584683">Lõppemisaeg</translation>
 <translation id="845702320058262034">Ühendust ei saa luua. Veenduge, et telefonis oleks Bluetooth sisse lülitatud.</translation>
 <translation id="8457451314607652708">Impordi järjehoidjad</translation>
 <translation id="8460336040822756677">Kui lülitate teenuse Smart Lock seadmes <ph name="DEVICE_TYPE" /> välja, siis ei saa te Chrome'i seadmeid telefoniga avada. Sel juhul peate sisestama parooli.</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">Teie arvuti sisaldab turvamoodulit, mida kasutatakse paljude väga tähtsate turvafunktsioonide rakendamiseks Chrome OS-is. Lisateavet leiate Chromebooki abikeskusest: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Süsteemiuuendus on saadaval. Allalaadimiseks valmistumine …</translation>
 <translation id="8639047128869322042">Ohtliku tarkvara otsimine …</translation>
-<translation id="8642171459927087831">Juurdepääsuluba</translation>
 <translation id="8642900771896232685">2 sekundit</translation>
 <translation id="8642947597466641025">Saate teksti suurendada</translation>
 <translation id="8643418457919840804">Jätkamiseks tehke valik:</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 7ddfa0023..c213ea8 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">‏PPD پیدا نشد. مطمئن شوید Chromebook آنلاین باشد و دوباره امتحان کنید.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> مسدود شده است</translation>
-<translation id="1357589289913453911">شناسه افزودنی</translation>
 <translation id="1358741672408003399">املا و گرامر</translation>
 <translation id="1361164813881551742">افزودن دستی</translation>
 <translation id="1361655923249334273">استفاده نشده</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">با این کار، همه داده‌های موجود در کلید امنیتی، ازجمله پین آن، پاک‌سازی می‌شود</translation>
 <translation id="1475502736924165259">گواهی‌هایی برای فایل دارید که در هیچ‌کدام از دسته‌های دیگر قرار نمی‌گیرد</translation>
 <translation id="1476607407192946488">&amp;تنظیمات زبان</translation>
-<translation id="1477301030751268706">‏حافظه داخلی کد Identity API</translation>
 <translation id="1478340334823509079">جزئیات: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">نصب فعال نشده است</translation>
 <translation id="1483493594462132177">ارسال</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">تنظیم امنیتی سیستم</translation>
 <translation id="2091887806945687916">صدا</translation>
 <translation id="2097372108957554726">‏برای ثبت دستگاه‌های جدید باید به سیستم Chrome وارد شوید</translation>
-<translation id="2098305189700762159">یافت نشد</translation>
 <translation id="2099172618127234427">‏ویژگی‌های رفع اشکال سیستم عامل Chrome را فعال می‌کنید که sshd daemon را تنظیم خواهد کرد و راه‌اندازی از درایوهای USB را فعال می‌کند.</translation>
 <translation id="2099686503067610784">مجوز سرور "<ph name="CERTIFICATE_NAME" />" حذف شود؟</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">‏هرزمان می‌گویید «Ok Google»، به «دستیار» دسترسی داشته باشید</translation>
 <translation id="2387458720915042159">نوع اتصال پراکسی</translation>
 <translation id="2391419135980381625">قلم استاندارد</translation>
-<translation id="2391762656119864333">ابطال</translation>
 <translation id="2392369802118427583">فعالسازی</translation>
 <translation id="2394566832561516196">تنظیمات در تازه‌سازی بعدی حذف می‌شوند.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> شما باموفقیت برای مدیریت شرکت ثبت شد اما نتوانست اطلاعات مکان و دارایی‌اش را ارسال کند. لطفاً این اطلاعات را به‌صورت دستی از کنسول سرپرستتان برای این دستگاه وارد کنید.</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">‏شامل سابقه اخیر «دستیار» ازطریق Sherlog می‌شود. این مورد ممکن است شامل هویت، مکان، و اطلاعات اشکال‌زدایی شما شود <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">افزودن پوشه</translation>
 <translation id="389589731200570180">اشتراک‌گذاری با مهمان</translation>
-<translation id="3898521660513055167">وضعیت کد</translation>
 <translation id="389901847090970821">انتخاب صفحه‌کلید</translation>
 <translation id="3899879303189199559">آفلاین برای مدت بیش از یک سال</translation>
 <translation id="3900966090527141178">صادر کردن گذرواژه‌ها</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">برنامه حذف نصب شود؟</translation>
 <translation id="5235750401727657667">جایگزین کردن صفحه‌ای که هنگام باز کردن برگه جدید می‌بینید</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>
 <translation id="5243522832766285132">چند لحظه دیگر دوباره امتحان کنید</translation>
@@ -3228,7 +3222,6 @@
 <translation id="5870155679953074650">خطاهای سخت‌افزاری</translation>
 <translation id="5877064549588274448">کانال تغییر کرد. برای اعمال تغییرات دستگاه خود را مجدداً راه‌اندازی کنید.</translation>
 <translation id="5877584842898320529">چاپگر انتخابی موجود نیست یا به‌درستی نصب نشده است. <ph name="BR" /> چاپگر خود را بررسی کنید یا چاپگر دیگری را انتخاب کنید.</translation>
-<translation id="5880247576487732437">کد آماده است</translation>
 <translation id="5882919346125742463">شبکه‌های شناخته‌شده</translation>
 <translation id="5884474295213649357">‏این برگه به دستگاه USB متصل است.</translation>
 <translation id="5885324376209859881">مدیریت تنظیمات رسانه...</translation>
@@ -4693,7 +4686,6 @@
 <translation id="8045923671629973368">شناسه برنامه یا نشانی وب فروشگاه وب را وارد کنید</translation>
 <translation id="804786196054284061">قرارداد مجوز کاربر نهایی</translation>
 <translation id="8049705080247101012">‏‫Google‏ «<ph name="EXTENSION_NAME" />» را به عنوان برنامه مخرب پرچم‌‌گذاری کرده است و از نصب آن جلوگیری شده است</translation>
-<translation id="8049913480579063185">نام برنامه افزودنی</translation>
 <translation id="8050038245906040378">‏امضای کد تجاری Microsoft</translation>
 <translation id="8053278772142718589">‏فایل‌های PKCS #12</translation>
 <translation id="8053390638574070785">تازه سازی این صفحه</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">شیوه انطباق و جاگذاری</translation>
 <translation id="8449036207308062757">مدیریت فضای ذخیره‌سازی</translation>
 <translation id="8452135315243592079">سیم‌کارت وجود ندارد</translation>
-<translation id="845627346958584683">زمان انقضا</translation>
 <translation id="845702320058262034">اتصال برقرار نشد. مطمئن شوید که بلوتوث تلفن روشن است.</translation>
 <translation id="8457451314607652708">وارد کردن نشانک‌ها</translation>
 <translation id="8460336040822756677">‏اگر Smart Lock را برای <ph name="DEVICE_TYPE" /> خاموش کنید، نمی‌توانید قفل دستگاه‌های Chrome خود را با استفاده از تلفنتان باز کنید. باید گذرواژه‌تان را تایپ کنید.</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">‏رایانه شما مدول امنی دارد که برای پیاده‌سازی بسیاری از قابلیت‌های امنیتی ضروری در سیستم‌عامل Chrome استفاده می‌شود. برای اطلاعات بیشتر از «مرکز راهنمایی Chromebook» دیدن کنید: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">به‌روزرسانی سیستم موجود است. در حال آماده سازی برای بارگیری...</translation>
 <translation id="8639047128869322042">درحال بررسی وجود نرم‌افزار مضر...</translation>
-<translation id="8642171459927087831">کد دسترسی</translation>
 <translation id="8642900771896232685">۲ ثانیه</translation>
 <translation id="8642947597466641025">طولانی تر کردن متن</translation>
 <translation id="8643418457919840804">برای ادامه، گزینه‌ای را انتخاب کنید:</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index b6980f7d..b49932c 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD:tä ei löydy. Varmista, että Chromebook on verkossa, ja yritä uudelleen.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> on estetty</translation>
-<translation id="1357589289913453911">Laajennustunnus</translation>
 <translation id="1358741672408003399">Oikeinkirjoitus ja kielioppi</translation>
 <translation id="1361164813881551742">Lisää manuaalisesti</translation>
 <translation id="1361655923249334273">Käyttämätön</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Tämä poistaa kaiken suojausavaimen datan, mukaan lukien sen PIN-koodin</translation>
 <translation id="1475502736924165259">Sinulla on tallennettuja varmenteita, jotka eivät sovi muihin luokkiin.</translation>
 <translation id="1476607407192946488">&amp;Kieliasetukset</translation>
-<translation id="1477301030751268706">Henkilöllisyyssovellusliittymän tunnuksen välimuisti</translation>
 <translation id="1478340334823509079">Lisätiedot: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Asentaminen ei ole käytössä.</translation>
 <translation id="1483493594462132177">Lähetä</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Järjestelmän turva-asetus</translation>
 <translation id="2091887806945687916">Ääni</translation>
 <translation id="2097372108957554726">Sinun on kirjauduttava sisään Chromeen, jos haluat rekisteröidä uusia laitteita</translation>
-<translation id="2098305189700762159">Ei löydy</translation>
 <translation id="2099172618127234427">Olet ottamassa käyttöön Chrome-käyttöjärjestelmän viankorjausominaisuudet, jotka määrittävät sshd daemon -toiminnon ja ottavat käyttöön USB-muistitikulta käynnistyksen.</translation>
 <translation id="2099686503067610784">Poistetaanko palvelimen varmenne <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Käytä Assistantia milloin tahansa sanomalla Ok Google</translation>
 <translation id="2387458720915042159">Välityspalvelinyhteyden tyyppi</translation>
 <translation id="2391419135980381625">Peruskirjasin</translation>
-<translation id="2391762656119864333">Peruuta</translation>
 <translation id="2392369802118427583">Aktivoi</translation>
 <translation id="2394566832561516196">Asetukset tyhjennetään seuraavan päivityksen yhteydessä.</translation>
 <translation id="2395616325548404795">Yrityshallinta on otettu käyttöön laitteessa <ph name="DEVICE_TYPE" />, mutta laitetunnuksen ja sijaintitietojen lähettäminen epäonnistui. Lisää nämä laitetta koskevat tiedot hallintakonsolista manuaalisesti.</translation>
@@ -1958,7 +1954,6 @@
 <translation id="3894123633473837029">Lisää viimeaikainen Assistant-historia Sherlogin kautta. Se voi sisältää henkilöllisyys-, sijainti- ja virheenkorjaustietojasi. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Lisää kansio</translation>
 <translation id="389589731200570180">Jaa vierailijoiden kanssa</translation>
-<translation id="3898521660513055167">Tunnuksen tila</translation>
 <translation id="389901847090970821">Valitse näppäimistö</translation>
 <translation id="3899879303189199559">Offline-tilassa yli vuoden</translation>
 <translation id="3900966090527141178">Vie salasanat</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">Poistetaanko sovellus?</translation>
 <translation id="5235750401727657667">Korvaa sivu, joka näkyy uuden välilehden avaamisen yhteydessä</translation>
 <translation id="5238278114306905396">Sovellus <ph name="EXTENSION_NAME" /> poistettiin automaattisesti.</translation>
-<translation id="5238369540257804368">Laajuudet</translation>
 <translation id="5241128660650683457">Lukea kaikkia tietojasi vierailemissasi sivustoissa</translation>
 <translation id="5242724311594467048">Otetaanko <ph name="EXTENSION_NAME" /> käyttöön?</translation>
 <translation id="5243522832766285132">Yritä uudelleen hetken kuluttua</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">Levyn sivuvirheet</translation>
 <translation id="5877064549588274448">Kanava vaihdettiin. Ota muutokset käyttöön käynnistämällä laite uudelleen.</translation>
 <translation id="5877584842898320529">Valittu tulostin ei ole käytettävissä tai sitä ei ole asennettu oikein. <ph name="BR" /> Tarkista tulostin tai valitse toinen tulostin.</translation>
-<translation id="5880247576487732437">Tunnus paikalla</translation>
 <translation id="5882919346125742463">Tunnetut verkot</translation>
 <translation id="5884474295213649357">Tämä välilehti on yhdistetty USB-laitteeseen.</translation>
 <translation id="5885324376209859881">Media-asetusten hallinta…</translation>
@@ -4696,7 +4689,6 @@
 <translation id="8045923671629973368">Anna sovellustunnus tai verkkokaupan URL-osoite.</translation>
 <translation id="804786196054284061">Käyttölupasopimus</translation>
 <translation id="8049705080247101012"><ph name="EXTENSION_NAME" /> on Googlen haitalliseksi merkitsemä, joten sen asennus on estetty.</translation>
-<translation id="8049913480579063185">Laajennuksen nimi</translation>
 <translation id="8050038245906040378">Microsoftin kaupallinen koodin allekirjoitus</translation>
 <translation id="8053278772142718589">PKCS #12 -tiedostot</translation>
 <translation id="8053390638574070785">Lataa tämä sivu uudelleen</translation>
@@ -4947,7 +4939,6 @@
 <translation id="8449008133205184768">Liitä ja sovita tyyli</translation>
 <translation id="8449036207308062757">Hallinnoi tallennustilaa</translation>
 <translation id="8452135315243592079">SIM-kortti puuttuu.</translation>
-<translation id="845627346958584683">Päättymisaika</translation>
 <translation id="845702320058262034">Ei yhteyttä. Varmista, että puhelimen Bluetooth on käytössä.</translation>
 <translation id="8457451314607652708">Tuo kirjanmerkkejä</translation>
 <translation id="8460336040822756677">Jos poistat käytöstä Smart Lockin laitteelle <ph name="DEVICE_TYPE" />, et voi avata Chrome-laitteiden lukitusta käyttämällä puhelintasi. Sinun täytyy antaa salasanasi.</translation>
@@ -5061,7 +5052,6 @@
 <translation id="8637542770513281060">Tietokoneesi sisältää suojausmoduulin, jonka avulla käytetään monia tärkeitä turvallisuusominaisuuksia Chrome-käyttöjärjestelmässä. Lisätietoja on Chromebook-ohjekeskuksessa: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Järjestelmäpäivitys saatavilla. Valmistellaan latausta...</translation>
 <translation id="8639047128869322042">Etsitään haittaohjelmia…</translation>
-<translation id="8642171459927087831">Käyttötunnus</translation>
 <translation id="8642900771896232685">2 sekuntia</translation>
 <translation id="8642947597466641025">Suurenna tekstiä</translation>
 <translation id="8643418457919840804">Jatka valitsemalla vaihtoehto:</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 8b95fae..bae0733 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -97,6 +97,7 @@
 <translation id="1128109161498068552">Huwag payagan ang anumang mga site na gamitin ang mga eksklusibong mensahe ng system upang i-access ang mga MIDI device</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">I-edit ang search engine</translation>
+<translation id="113124294734065964">May isyu ang dock</translation>
 <translation id="1134009406053225289">Buksan sa incognito window</translation>
 <translation id="1136712381129578788">Na-lock ang security key dahil napakaraming beses nang nailagay ang maling PIN. Para i-unlock ito, alisin at ipasok ulit ito.</translation>
 <translation id="1137673463384776352">Buksan ang link sa <ph name="APP" /></translation>
@@ -190,6 +191,7 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="1269405567167332785">Advanced na configuration</translation>
 <translation id="1272079795634619415">Stop</translation>
+<translation id="1272293450992660632">Hindi nagtutugma ang mga value ng PIN.</translation>
 <translation id="1272978324304772054">Ang user account na ito ay hindi pagmamay-ari ng domain kung saan nakatala ang device.  Kung nais mong magpatala sa ibang domain, kailangan mo munang sumailalim sa pagbawi ng device.</translation>
 <translation id="1274977772557788323">Mga setting ng Storage ng Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies at iba pang data ng site</translation>
@@ -238,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Hindi makita ang PPD. Tiyaking online ang iyong Chromebook at subukang muli.</translation>
 <translation id="1355466263109342573">Naka-block ang <ph name="PLUGIN_NAME" /></translation>
-<translation id="1357589289913453911">Id ng Extension</translation>
 <translation id="1358741672408003399">Spelling and Grammar</translation>
 <translation id="1361164813881551742">Idagdag nang Manual</translation>
 <translation id="1361655923249334273">Hindi nagamit</translation>
@@ -318,7 +319,6 @@
 <translation id="1470967055429794975">Buburahin nito ang lahat ng data sa security key, kabilang ang PIN nito</translation>
 <translation id="1475502736924165259">Mayroon kang mga certificate sa file na hindi umaangkop sa alinman sa iba pang mga kategorya</translation>
 <translation id="1476607407192946488">&amp;Mga Setting ng Wika</translation>
-<translation id="1477301030751268706">Identity API Token Cache</translation>
 <translation id="1478340334823509079">Mga detalye: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Hindi naka-enable ang pag-install</translation>
 <translation id="1483493594462132177">Ipadala</translation>
@@ -387,6 +387,7 @@
 <translation id="1572876035008611720">Ilagay ang iyong email</translation>
 <translation id="1576594961618857597">Default na puting avatar</translation>
 <translation id="1581962803218266616">Show in Finder</translation>
+<translation id="1582955169539260415">i-delete ang [<ph name="FINGERPRINT_NAME" />]</translation>
 <translation id="1584990664401018068">Maaaring mangailangan ng pagpapatotoo ang Wi-Fi network na ginagamit mo (<ph name="NETWORK_ID" />).</translation>
 <translation id="1585717515139318619">Isa pang program sa iyong computer ang nagdagdag tema na maaaring magpabago sa paraan ng paggana ng Chrome.
 
@@ -446,6 +447,7 @@
 <translation id="1657406563541664238">Tulungan ang <ph name="PRODUCT_NAME" /> na maging mas mahusay sa pamamagitan ng awtomatikong pagpapadala ng mga istatistika ng paggamit at mga crash report sa Google</translation>
 <translation id="1658424621194652532">Ina-access ng pahinang ito ang iyong mikropono.</translation>
 <translation id="1660204651932907780">Payagan ang mga site na mag-play ng tunog (inirerekomenda)</translation>
+<translation id="1660763353352708040">Isyu ng power adapter</translation>
 <translation id="1661156625580498328">Ipatupad ang AES encryption (inirerekomenda).</translation>
 <translation id="166179487779922818">Masyadong maikli ang password.</translation>
 <translation id="1661867754829461514">Nawawala ang PIN</translation>
@@ -537,6 +539,7 @@
 <translation id="1792619191750875668">Pinalawak na display</translation>
 <translation id="1794791083288629568">Magpadala ng feedback upang tulungan kaming ayusin ang isyung ito.</translation>
 <translation id="1795214765651529549">Gamitin ang Classic</translation>
+<translation id="1797738254362176886">Ipasok at pindutin ang iyong security key para tingnan ang data ng pag-sign in nito.</translation>
 <translation id="1799071797295057738">Awtomatikong na-disable ang extension na "<ph name="EXTENSION_NAME" />."</translation>
 <translation id="1802687198411089702">Hindi tumutugon ang page. Maaari mo itong hintayin o maaari kang lumabas.</translation>
 <translation id="1802931390041703523">Naka-block ang Flash sa page na ito</translation>
@@ -613,6 +616,7 @@
 <translation id="1895934970388272448">Dapat mong kumpirmahin ang pagpaparehistro sa iyong printer upang tapusin ang prosesong ito - tingnan ito ngayon.</translation>
 <translation id="1899826437968063457">Kailangan ng Plugin VM ng pahintulot para tumakbo</translation>
 <translation id="1901303067676059328">Piliin ang &amp;lahat</translation>
+<translation id="1901984611178952431">Pamahalaan ang data ng pag-sign in</translation>
 <translation id="1902576642799138955">Takdang Petsa ng Pagkakabisa</translation>
 <translation id="1904394285866191268">{NUM_TABS,plural, =1{I-mute ang tab}one{I-mute ang mga tab}other{I-mute ang mga tab}}</translation>
 <translation id="1905375423839394163">Pangalan ng Chromebook device</translation>
@@ -722,7 +726,6 @@
 <translation id="2090876986345970080">Setting ng seguridad ng system</translation>
 <translation id="2091887806945687916">Tunog</translation>
 <translation id="2097372108957554726">Kailangan mong mag-sign in sa Chrome upang makapagrehistro ng mga bagong device</translation>
-<translation id="2098305189700762159">Hindi Natagpuan</translation>
 <translation id="2099172618127234427">Ie-enable mo ang mga feature para sa pagde-debug ng Chrome OS na magse-set up ng sshd daemon at mag-e-enable ng pagbu-boot mula sa mga USB drive.</translation>
 <translation id="2099686503067610784">Tanggalin ang certificate ng server na "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Awtomatikong Mag-sign in</translation>
@@ -872,6 +875,7 @@
 <translation id="2294358108254308676">Nais mo bang i-install ang <ph name="PRODUCT_NAME" />?</translation>
 <translation id="2297705863329999812">Maghanap ng mga printer</translation>
 <translation id="2300383962156589922">I-customize at kontrolin ang <ph name="APP_NAME" /></translation>
+<translation id="2300800387751317588">Ipo-pause ang pag-sync dahil kini-clear mo ang cookies sa start up. Baguhin ang <ph name="COOKIE_SETTINGS_LINK" /> para patuloy na mag-sync.</translation>
 <translation id="2301382460326681002">Hindi wasto ang pinagmulang direktoryo ng extension.</translation>
 <translation id="23030561267973084">Humiling ng karagdagang mga pahintulot ang "<ph name="EXTENSION_NAME" />."</translation>
 <translation id="2307462900900812319">I-configure ang network</translation>
@@ -933,11 +937,11 @@
 <translation id="2386926718981642523">I-access ang iyong Assistant sa tuwing sinasabi mo ang "Ok Google"</translation>
 <translation id="2387458720915042159">Uri ng koneksyon sa proxy</translation>
 <translation id="2391419135980381625">Karaniwang font</translation>
-<translation id="2391762656119864333">Bawiin</translation>
 <translation id="2392369802118427583">I-activate</translation>
 <translation id="2394566832561516196">Maki-clear ang mga setting sa susunod na pag-reload.</translation>
 <translation id="2395616325548404795">Matagumpay na na-enroll ang iyong <ph name="DEVICE_TYPE" /> para sa pamamahala ng enterprise, ngunit hindi naipadala ang impormasyon ng asset at lokasyon nito. Pakilagay nang manual ang impormasyong ito na mula sa iyong Admin console para sa device na ito.</translation>
 <translation id="2396783860772170191">Ilagay ang 4 na digit na pin (0000-9999)</translation>
+<translation id="2399939490305346086">Data ng pag-sign in ng security key</translation>
 <translation id="2408955596600435184">Ilagay ang iyong PIN</translation>
 <translation id="241082044617551207">Hindi kilalang plugin</translation>
 <translation id="2412593942846481727">May available na update</translation>
@@ -958,6 +962,7 @@
 <translation id="2435457462613246316">Ipakita ang password</translation>
 <translation id="2436186046335138073">Papayagan ang <ph name="HANDLER_HOSTNAME" /> na buksan ang lahat ng link ng <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimum</translation>
+<translation id="2436720498717686157">Humihiling kaagad ang iyong organisasyon ng update sa device na ito</translation>
 <translation id="2439545803278355377">Ilagay ang bago mong PIN. Dapat ay may hindi bababa sa apat na character ang PIN, at puwede itong maglaman ng mga titik, numero, at iba pang character.</translation>
 <translation id="2440604414813129000">Tingnan s&amp;ource</translation>
 <translation id="2444119669991608829">Hindi <ph name="LANGUAGE" /> Ang Page ?</translation>
@@ -1233,6 +1238,7 @@
 <translation id="2820957248982571256">Nagsa-scan...</translation>
 <translation id="2822634587701817431">Paliitin / Palawakin</translation>
 <translation id="2822910719211888134">Nagka-error habang bina-back up ang Linux</translation>
+<translation id="2824942875887026017">Ginagamit ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang mga setting ng proxy mula sa iyong administrator</translation>
 <translation id="2825758591930162672">Pampublikong Key ng Paksa</translation>
 <translation id="2825848369316359348">Hanapin ang pangalang naka-print sa likod ng iyong security key</translation>
 <translation id="2828650939514476812">Kumonekta sa Wi-Fi network</translation>
@@ -1366,6 +1372,7 @@
 <translation id="3022978424994383087">Hindi iyon nakuha.</translation>
 <translation id="3023464535986383522">Select to speak</translation>
 <translation id="3024374909719388945">Gamitin ang 24-oras na orasan</translation>
+<translation id="30256218463955326">Hindi compatible ang dock</translation>
 <translation id="3031417829280473749">Agent X</translation>
 <translation id="3031557471081358569">Pumili ng mga item na ii-import:</translation>
 <translation id="3031601332414921114">Ituloy ang pag-print</translation>
@@ -1556,6 +1563,7 @@
 <translation id="3348038390189153836">Natuklasan ang natatanggal na device</translation>
 <translation id="3349933790966648062">Footprint ng Memory</translation>
 <translation id="3350117557200012647">Pumunta sa pairing mode</translation>
+<translation id="3350263973613584174">Walang anumang naka-save na data ng pag-sign in ang security key na ito.</translation>
 <translation id="3355936511340229503">Error sa koneksyon</translation>
 <translation id="3356580349448036450">Kumpleto na</translation>
 <translation id="3359256513598016054">Mga Limitasyon sa Patakaran ng Certificate</translation>
@@ -1883,6 +1891,7 @@
 <translation id="3812525830114410218">Maling certificate</translation>
 <translation id="3813296892522778813">Pumunta sa <ph name="BEGIN_LINK_CHROMIUM" />tulong ng Google Chrome<ph name="END_LINK_CHROMIUM" /> kung hindi mo makita ang hinahanap mo</translation>
 <translation id="3816118180265633665">Mga Kulay ng Chrome</translation>
+<translation id="3817524650114746564">Buksan ang mga setting ng proxy ng iyong computer</translation>
 <translation id="3817579325494460411">Hindi naibigay</translation>
 <translation id="3819257035322786455">Backup</translation>
 <translation id="3819261658055281761">Hindi na-store ng system ang pangmatagalang token ng access ng API para sa device na ito.</translation>
@@ -1936,6 +1945,7 @@
 <translation id="3878840326289104869">Gumagawa ng pinangangasiwaang user</translation>
 <translation id="3879748587602334249">Download manager</translation>
 <translation id="3888550877729210209">Nagtatala gamit ang <ph name="LOCK_SCREEN_APP_NAME" /></translation>
+<translation id="388900914234409233">Para charge ang Chromebook na ito, gumamit ng tugmang OEM na baterya.</translation>
 <translation id="3892414795099177503">Idagdag ang OpenVPN / L2TP...</translation>
 <translation id="3893536212201235195">Basahin at baguhin ang iyong mga setting ng accessibility</translation>
 <translation id="3893630138897523026">ChromeVox (pasalitang feedback)</translation>
@@ -1943,7 +1953,6 @@
 <translation id="3894123633473837029">Isama ang kamakailang history ng Assistant sa pamamagitan ng Sherlog. Puwedeng kasama rito ang iyong pagkakakilanlan, lokasyon, at impormasyon sa pag-debug. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Magdagdag ng folder</translation>
 <translation id="389589731200570180">Ibahagi sa mga bisita</translation>
-<translation id="3898521660513055167">Status ng Token</translation>
 <translation id="389901847090970821">Pumili ng keyboard</translation>
 <translation id="3899879303189199559">Offline nang mahigit sa isang taon</translation>
 <translation id="3900966090527141178">I-export ang mga password</translation>
@@ -2048,6 +2057,7 @@
 <translation id="4044612648082411741">Ilagay ang password ng iyong certificate</translation>
 <translation id="404493185430269859">Default na search engine</translation>
 <translation id="4046123991198612571">Susunod na track</translation>
+<translation id="4050225813016893843">Paraan ng pag-authenticate</translation>
 <translation id="4052120076834320548">Maliit</translation>
 <translation id="4055023634561256217">Kinakailangang mag-restart bago maaaring ma-reset ang iyong device gamit ang Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
@@ -2097,6 +2107,7 @@
 <translation id="4109135793348361820">Ilipat ang window sa <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />)</translation>
 <translation id="4110490973560452005">Na-download na: <ph name="FILE_NAME" />. Pindutin ang Shift+F6 para mag-cycle sa lugar ng bar ng mga download.</translation>
 <translation id="4110895898888439383">I-browse ang web sa high contrast mode</translation>
+<translation id="4111407695731262203">iyong mga setting</translation>
 <translation id="4115002065223188701">Hindi nasasagap ang network</translation>
 <translation id="4115080753528843955">Gumagamit ang ilang serbisyo ng content ng mga natatanging identifier para sa pagpapahintulot ng access sa pinoprotektahang content</translation>
 <translation id="4115378294792113321">Magenta</translation>
@@ -2122,6 +2133,7 @@
 <translation id="4147911968024186208">Pakisubukang muli. Kung makikita mong muli ang error na ito, makipag-ugnayan sa iyong kinatawan ng suporta.</translation>
 <translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Display</translation>
+<translation id="4150234330364554482">Gumamit ng OEM na istasyon ng pag-dock na idinisenyo para gumana sa Chromebook na ito.</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}one{# tab}other{# na tab}}</translation>
 <translation id="4154664944169082762">Mga fingerprint</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -2268,6 +2280,7 @@
 <translation id="4412698727486357573">Help center</translation>
 <translation id="44141919652824029">Payagan ang "<ph name="APP_NAME" />" na makuha ang listahan ng iyong mga naka-attach na USB device?</translation>
 <translation id="4414232939543644979">Bagong &amp;Incognito Window</translation>
+<translation id="4414386768539506503">Ilagay ang PIN para sa iyong security key para tingnan ang data ng pag-sign in nito. Kung hindi mo alam ang PIN, kakailanganin mong i-reset ang security key.</translation>
 <translation id="4415245286584082850">Walang nakitang device. Magbukas ng artikulo sa help center sa isang bagong tab.</translation>
 <translation id="4415276339145661267">Pamahalaan ang iyong Google Account</translation>
 <translation id="4415748029120993980">SECG elliptic curve secp384r1 (na tinatawag ding NIST P-384)</translation>
@@ -2647,6 +2660,7 @@
 <translation id="5017633213534173756">Tandaan</translation>
 <translation id="5018207570537526145">Buksan ang website ng extension</translation>
 <translation id="5021750053540820849">Hindi pa na-update</translation>
+<translation id="5026688690798028095">Buksan ang Pamamahala ng App</translation>
 <translation id="5026874946691314267">Huwag itong ipakita muli</translation>
 <translation id="5027550639139316293">Email Certificate</translation>
 <translation id="5027562294707732951">Idagdag ang extension</translation>
@@ -2679,6 +2693,7 @@
 <translation id="5072836811783999860">Ipakita ang mga pinamamahalaang bookmark</translation>
 <translation id="5074318175948309511">Maaaring kailangan na muling i-load ang page na ito bago gumana ang mga bagong setting.</translation>
 <translation id="5075131525758602494">Ilagay ang PIN ng SIM</translation>
+<translation id="507514548843781244">Tingnan at burahin ang data ng pag-sign in na naka-save sa iyong security key</translation>
 <translation id="5078638979202084724">I-bookmark ang lahat ng mga tab</translation>
 <translation id="5078796286268621944">Maling PIN</translation>
 <translation id="5079950360618752063">Gamitin ang iminumungkahing password</translation>
@@ -2773,7 +2788,6 @@
 <translation id="5235050375939235066">I-uninstall ang app?</translation>
 <translation id="5235750401727657667">Palitan ang page na nakikita mo kapag nagbubukas ng bagong tab</translation>
 <translation id="5238278114306905396">Awtomatikong inalis ang app na "<ph name="EXTENSION_NAME" />."</translation>
-<translation id="5238369540257804368">Mga Saklaw</translation>
 <translation id="5241128660650683457">Basahin ang lahat ng iyong data sa mga website na binibisita mo</translation>
 <translation id="5242724311594467048">I-enable ang "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Pakisubukang muli pagkalipas ng ilang sandali</translation>
@@ -2951,6 +2965,7 @@
 <translation id="5496587651328244253">Isaayos</translation>
 <translation id="549673810209994709">Hindi maaaring isalin ang pahinang ito.</translation>
 <translation id="5499313591153584299">Maaaring nakakapinsala ang file na ito para sa iyong computer.</translation>
+<translation id="5500345327355928305">Para maiwasan ang mga isyu sa pagcha-charge at performance, gumamit ng tugmang OEM o USB Type-C na power adapter.</translation>
 <translation id="5502500733115278303">Nai-import Mula sa Firefox</translation>
 <translation id="5507756662695126555">Hindi makokontra</translation>
 <translation id="5509693895992845810">I-save &amp;Bilang...</translation>
@@ -3095,6 +3110,7 @@
 <translation id="5708171344853220004">Microsoft Principal Name</translation>
 <translation id="5709557627224531708">Itakda ang Chrome bilang iyong default na browser</translation>
 <translation id="5711983031544731014">Hindi mai-unlock. Ilagay ang iyong password.</translation>
+<translation id="5713723565110096165">Mali ang PIN. Natitirang muling pagsubok: <ph name="RETRIES" />.</translation>
 <translation id="5715711091495208045">Broker ng plugin: <ph name="PLUGIN_NAME" /></translation>
 <translation id="5719603411793408026">Mga default na search engine</translation>
 <translation id="5720705177508910913">Kasalukuyang user</translation>
@@ -3105,6 +3121,7 @@
 <translation id="5727728807527375859">Maaaring mapinsala ng mga extension, apps, at mga tema ang iyong computer. Sigurado ka bang gusto mong magpatuloy?</translation>
 <translation id="5729712731028706266">&amp;Tingnan</translation>
 <translation id="5734362860645681824">Komunikasyon</translation>
+<translation id="5734697361979786483">Magdagdag ng file share</translation>
 <translation id="5736796278325406685">Mangyaring maglagay ng wastong username</translation>
 <translation id="5739235828260127894">Naghihintay ng pag-verify. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Napakalaki</translation>
@@ -3148,6 +3165,7 @@
 <translation id="5794414402486823030">Palaging buksan gamit ang system viewer</translation>
 <translation id="5794786537412027208">Umalis sa lahat ng Chrome Apps</translation>
 <translation id="5797070761912323120">Maaaring gamitin ng Google ang iyong history para i-personalize ang Search, mga ad, at iba pang serbisyo ng Google</translation>
+<translation id="579915268381781820">Inalis ang iyong security key.</translation>
 <translation id="5799508265798272974">Linux Virtual Machine: <ph name="LINUX_VM_NAME" /></translation>
 <translation id="5800020978570554460">Naputol o natanggal ang patutunguhang file simula noong huling pag-download.</translation>
 <translation id="5801568494490449797">Mga Kagustuhan</translation>
@@ -3208,7 +3226,6 @@
 <translation id="5870155679953074650">Mga hard fault</translation>
 <translation id="5877064549588274448">Binago ang channel. I-restart ang iyong device upang ilapat ang mga pagbabago.</translation>
 <translation id="5877584842898320529">Hindi available o hindi naka-install nang tama ang napiling printer. <ph name="BR" /> Suriin ang iyong printer o subukang pumili ng ibang printer.</translation>
-<translation id="5880247576487732437">May Token</translation>
 <translation id="5882919346125742463">Mga Kilalang Network</translation>
 <translation id="5884474295213649357">Nakakonekta ang tab na ito sa isang USB device.</translation>
 <translation id="5885324376209859881">Pamahalaan ang mga setting ng media...</translation>
@@ -3290,6 +3307,7 @@
 <translation id="6010869025736512584">Ina-access ang input ng video</translation>
 <translation id="6011193465932186973">Fingerprint</translation>
 <translation id="6011449291337289699">I-clear ang data ng site</translation>
+<translation id="6015266928248016057">Di-wasto ang PUK. Natitirang muling pagsubok: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Taon</translation>
 <translation id="6016551720757758985">Kumpirmahin ang Powerwash na maaaring bumalik sa dating bersyon</translation>
 <translation id="6016972670657536680">Button ng pumili ng wika at keyboard. Ang kasalukuyang napiling wika ay <ph name="LANGUAGE" />.</translation>
@@ -3362,16 +3380,19 @@
 <translation id="6103681770816982672">Babala: lumilipat ka sa channel ng developer</translation>
 <translation id="6104068876731806426">Mga Google Account</translation>
 <translation id="6104311680260824317">Hindi maisama ang device sa domain. Hindi sinusuportahan ng server ang mga natukoy na uri ng Kerberos na pag-encrypt. Suriin ang "Higit pang opsyon" para sa mga setting ng pag-encrypt.</translation>
+<translation id="6106186653986077033">Kailangan ng Plugin VM ng lisensya</translation>
 <translation id="6107012941649240045">Ibinigay Kay</translation>
 <translation id="6112294629795967147">Pindutin para i-resize</translation>
 <translation id="6112931163620622315">Tingnan ang iyong telepono</translation>
 <translation id="6112952769866305444">I-edit ang tao, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
+<translation id="6113942107547980621">Para gamitin ang Smart Lock, lumipat sa profile ng pangunahing user sa iyong telepono</translation>
 <translation id="6116338172782435947">Tingnan ang text at mga larawang kinopya sa clipboard</translation>
 <translation id="6116921718742659598">Baguhin ang mga setting ng wika at input</translation>
 <translation id="6120205520491252677">I-pin ang pahinang ito screen ng Simula...</translation>
 <translation id="6122081475643980456">Kinokontrol ang iyong koneksyon sa Internet</translation>
 <translation id="6122095009389448667">Patuloy na i-block ang site na ito sa pagtingin sa clipboard</translation>
 <translation id="6122875415561139701">Hindi pinapahintulutan ang write na operation sa: "<ph name="DEVICE_NAME" />".</translation>
+<translation id="6123292156101652890">Hindi puwedeng mag-store ang security key na ito ng anumang data ng pag-sign in.</translation>
 <translation id="6124650939968185064">Nakadepende ang mga sumusunod na extension sa extension na ito:</translation>
 <translation id="6124698108608891449">Kailangan ng site na ito ng higit pang pahintulot.</translation>
 <translation id="6125479973208104919">Sa kasamaang-palad, kakailanganin mong idagdag muli ang iyong account sa <ph name="DEVICE_TYPE" /> na ito.</translation>
@@ -3895,6 +3916,7 @@
 <translation id="6950627417367801484">I-restore ang mga app</translation>
 <translation id="6950943362443484797">Ii-install namin ang app na iyon para sa iyo</translation>
 <translation id="6951153907720526401">Mga Tagapangasiwa ng Pagbabayad</translation>
+<translation id="6951663584153258142">Hinihiling ng iyong organisasyon na i-update mo ang device na ito</translation>
 <translation id="6953878494808481632">Nauugnay na impormasyon</translation>
 <translation id="6955446738988643816">Siyasatin ang Popup</translation>
 <translation id="6957044667612803194">Hindi sinusuportahan ng security key na ito ang mga PIN</translation>
@@ -3913,6 +3935,7 @@
 <translation id="6974609594866392343">Offline na demo mode</translation>
 <translation id="6977381486153291903">Rebisyon ng firmware</translation>
 <translation id="6978121630131642226">Mga Search Engine</translation>
+<translation id="6979044105893951891">Ilunsad ang at lumabas sa mga pinapamahalaang session ng bisita</translation>
 <translation id="6979440798594660689">I-mute (default)</translation>
 <translation id="6979737339423435258">Lahat ng oras</translation>
 <translation id="6981982820502123353">Pagiging Accessible</translation>
@@ -4038,6 +4061,7 @@
 <translation id="7143092389027215216">Sinisimulan ang demo mode</translation>
 <translation id="7143207342074048698">Kumokonekta</translation>
 <translation id="7144878232160441200">Subukang muli</translation>
+<translation id="714687768418476028">Hindi pinoprotektahan ng PIN ang iyong security key. Gumawa muna ng PIN para pamahalaan ang data ng pag-sign in.</translation>
 <translation id="7149893636342594995">Nakalipas na 24 na oras</translation>
 <translation id="715118844758971915">Mga classic na printer</translation>
 <translation id="7152478047064750137">Hindi nangangailangan ang extension na ito ng mga espesyal na pahintulot</translation>
@@ -4666,7 +4690,6 @@
 <translation id="8045923671629973368">Maglagay ng application ID o URL ng webstore</translation>
 <translation id="804786196054284061">Kasunduan sa Lisensya ng End User</translation>
 <translation id="8049705080247101012">Na-flag ng Google ang "<ph name="EXTENSION_NAME" />" bilang nakakahamak at pinigilan ang pag-install</translation>
-<translation id="8049913480579063185">Pangalan ng Extension</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">Mga PKCS #12 File</translation>
 <translation id="8053390638574070785">Reload This Page</translation>
@@ -4697,6 +4720,7 @@
     <ph name="BEGIN_PARAGRAPH4" />Hindi mabibilang sa quota sa storage ng iyong Drive ang data ng backup.<ph name="END_PARAGRAPH4" />
     <ph name="BEGIN_PARAGRAPH5" />Maaari mong i-off ang serbisyong ito sa Mga Setting.<ph name="END_PARAGRAPH5" /></translation>
 <translation id="80974698889265265">Hindi nagtutugma ang mga PIN</translation>
+<translation id="809792523045608178">Gumagamit ang <ph name="IDS_SHORT_PRODUCT_NAME" /> ng mga setting ng proxy mula sa isang extension</translation>
 <translation id="8099495042588009598">Higit pang pahintulot</translation>
 <translation id="8101987792947961127">Kinakailangan ng Powerwash sa susunod na reboot</translation>
 <translation id="8102159139658438129">Pumunta sa <ph name="LINK_BEGIN" />Mga Setting<ph name="LINK_END" /> para makakita ng mga opsyon para sa iyong nakakonektang telepono</translation>
@@ -4707,6 +4731,7 @@
 <translation id="8113043281354018522">Pumili ng uri ng lisensya</translation>
 <translation id="8116972784401310538">&amp;Tagapangasiwa ng bookmark</translation>
 <translation id="8117620576188476503">Pamahalaan ang mga koneksyon, update, at setting gamit ang status tray. Upang makapunta rito sa pamamagitan ng keyboard, pindutin ang Alt + Shift + S.</translation>
+<translation id="8118076340394175570">Kinakailangan ng iyong organisasyon ng update sa device na ito</translation>
 <translation id="8118362518458010043">Na-disable ng Chrome. Maaaring hindi ligtas ang extension na ito.</translation>
 <translation id="8118488170956489476">Ang iyong <ph name="BEGIN_LINK" />browser ay pinamamahalaan<ph name="END_LINK" /> ng organisasyon mo</translation>
 <translation id="8118860139461251237">Pamahalaan ang iyong mga download</translation>
@@ -4852,8 +4877,10 @@
 <translation id="8339059274628563283">Lokal na naka-store na data ng <ph name="SITE" /></translation>
 <translation id="833986336429795709">Para buksan ang link na ito, pumili ng app</translation>
 <translation id="8342861492835240085">Pumili ng koleksyon</translation>
+<translation id="834290227245955730">Di-wasto ang PIN. Natitirang muling pagsubok: <ph name="RETRIES" />.</translation>
 <translation id="8343956361364550006">Gumamit ng mataas na bandwidth para sa pinakamagandang video o animation. Maaaring hindi makita ng ibang taong may mababagal na koneksyon sa internet ang iyong content.</translation>
 <translation id="8351419472474436977">Kinokontrol na ng extension na ito ang iyong mga setting ng proxy, na nangangahulugang maaari nitong baguhin, sirain o alamin ang anumang bagay na gagawin mo online. Kung hindi ka sigurado kung bakit naganap ang pagbabagong ito, malamang na hindi mo ito ginustong mangyari.</translation>
+<translation id="8351630282875799764">Hindi nagcha-charge ang baterya</translation>
 <translation id="835238322900896202">Nagka-error habang nag-a-uninstall. Mag-uninstall sa pamamagitan ng Terminal.</translation>
 <translation id="8352772353338965963">Magdagdag ng account sa multiple na pag-sign in. Maa-access ang lahat ng naka-sign in na account nang walang password, kaya dapat na gamitin lang ang feature na ito sa mga pinagkakatiwalaang account.</translation>
 <translation id="8353683614194668312">Maaari itong:</translation>
@@ -4914,7 +4941,6 @@
 <translation id="8449008133205184768">I-paste at Itugma ang Estilo</translation>
 <translation id="8449036207308062757">Pamahalaan ang storage</translation>
 <translation id="8452135315243592079">Walang nakalagay na SIM card</translation>
-<translation id="845627346958584683">Oras ng Expiration</translation>
 <translation id="845702320058262034">Hindi makakonekta. Tiyaking naka-on ang Bluetooth ng iyong telepono.</translation>
 <translation id="8457451314607652708">Mag-import ng mga bookmark</translation>
 <translation id="8460336040822756677">Kung io-off mo ang Smart Lock para sa <ph name="DEVICE_TYPE" />, hindi mo maa-unlock ang iyong mga Chrome device gamit ang iyong telepono. Kakailanganin mong i-type ang iyong password.</translation>
@@ -4923,6 +4949,8 @@
 <translation id="8461914792118322307">Proxy</translation>
 <translation id="8463215747450521436">Maaaring tinanggal o na-disable na ng tagapamahala ang pinangangasiwaang user na ito. Mangyaring makipag-ugnay sa tagapamahala kung gusto mong patuloy na mag-sign in bilang ang user na ito.</translation>
 <translation id="846374874681391779">Bar ng mga download</translation>
+<translation id="8463807869745732775">"&gt;
+    Na-store ang data ng pag-sign in ng security key</translation>
 <translation id="8463955938112983119">Na-disable ang <ph name="PLUGIN_NAME" />.</translation>
 <translation id="8464132254133862871">Hindi karapat-dapat para sa serbisyo ang user account na ito.</translation>
 <translation id="8465252176946159372">Hindi wasto</translation>
@@ -4947,6 +4975,7 @@
 <translation id="8497219075884839166">Mga Utility ng Windows</translation>
 <translation id="8498214519255567734">Pinapadali nitong tumingin sa iyong screen o magbasa sa dilim</translation>
 <translation id="8498395510292172881">Ipagpatuloy ang pagbabasa sa Chrome</translation>
+<translation id="8500234928660943538">Mali ang PUK. Natitirang muling pagsubok: <ph name="RETRIES" />.</translation>
 <translation id="8502536196501630039">Para magamit ang mga app mula sa Google Play, dapat mo munang i-restore ang iyong mga app. Maaaring mawala ang ilang data.</translation>
 <translation id="8503813439785031346">Username</translation>
 <translation id="850875081535031620">Walang nahanap na mapaminsalang software</translation>
@@ -5025,7 +5054,6 @@
 <translation id="8637542770513281060">Naglalaman ng secure na module ang iyong computer, na ginagamit upang magpatupad ng maraming mahalagang feature ng seguridad sa Chrome OS. Bisitahin ang Help Center ng Chromebook upang matuto pa: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Available ang update sa system. Hinahandang i-download…</translation>
 <translation id="8639047128869322042">Tinitingnan kung may mapaminsalang software...</translation>
-<translation id="8642171459927087831">Token ng Access</translation>
 <translation id="8642900771896232685">2 segundo</translation>
 <translation id="8642947597466641025">Gawing Mas Malaki Ang Teksto</translation>
 <translation id="8643418457919840804">Para magpatuloy, pumili ng opsyon:</translation>
@@ -5044,6 +5072,7 @@
 <translation id="8656768832129462377">Huwag suriin</translation>
 <translation id="8658645149275195032">Ibinabahagi ng <ph name="APP_NAME" /> ang iyong screen at audio sa <ph name="TAB_NAME" />.</translation>
 <translation id="8659875081143553823">Sandali lang</translation>
+<translation id="8660174278198826384">Makipag-ugnayan sa admin ng device para sa iyong organisasyon</translation>
 <translation id="8661290697478713397">Buksan ang link sa Inco&amp;gnito Window</translation>
 <translation id="8662671328352114214">Sumali sa <ph name="TYPE" /> network</translation>
 <translation id="8662795692588422978">Mga Tao</translation>
@@ -5207,6 +5236,7 @@
 <translation id="8876307312329369159">Hindi mababago ang setting na ito sa demo session.</translation>
 <translation id="8877448029301136595">[parent directory]</translation>
 <translation id="8879284080359814990">&amp;Ipakita Bilang Tab</translation>
+<translation id="8879921471468674457">Tandaan ang impormasyon sa pag-sign in</translation>
 <translation id="8883847527783433352">I-sync sa Isa pang Account</translation>
 <translation id="8884570509232205463">Nagla-lock na ngayon ang iyong device sa ganap na <ph name="UNLOCK_TIME" />.</translation>
 <translation id="8885197664446363138">Hindi available ang Smart Lock</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 1d6661f0..47ecac7f 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207">"<ph name="PROVIDER_NAME" />" : "<ph name="NETWORK_NAME" />"</translation>
 <translation id="1353980523955420967">Impossible de trouver le fichier PPD. Vérifiez que votre Chromebook est connecté, puis réessayez.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> est bloqué</translation>
-<translation id="1357589289913453911">Identifiant d'extension</translation>
 <translation id="1358741672408003399">Grammaire et orthographe</translation>
 <translation id="1361164813881551742">Ajouter manuellement</translation>
 <translation id="1361655923249334273">Non utilisé</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Cette opération effacera toutes les données stockées sur la clé de sécurité, y compris son code</translation>
 <translation id="1475502736924165259">Vous disposez de certificats qui n'appartiennent à aucune autre catégorie.</translation>
 <translation id="1476607407192946488">&amp;Paramètres linguistiques</translation>
-<translation id="1477301030751268706">Cache du jeton de l'API Identity</translation>
 <translation id="1478340334823509079">Détails : <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">L'installation n'a pas été activée</translation>
 <translation id="1483493594462132177">Envoyer</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Paramètres de sécurité du système</translation>
 <translation id="2091887806945687916">Son</translation>
 <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux périphériques.</translation>
-<translation id="2098305189700762159">Introuvable</translation>
 <translation id="2099172618127234427">Les fonctionnalités de débogage de Chrome OS que vous activez configurent le démon sshd et autorisent le démarrage à partir de clés USB.</translation>
 <translation id="2099686503067610784">Supprimer le certificat de serveur "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Accédez à l'Assistant Google en disant simplement "Ok Google"</translation>
 <translation id="2387458720915042159">Type de connexion proxy</translation>
 <translation id="2391419135980381625">Police standard</translation>
-<translation id="2391762656119864333">Révoquer</translation>
 <translation id="2392369802118427583">Activer</translation>
 <translation id="2394566832561516196">Les paramètres seront effacés lors du prochain chargement de la page.</translation>
 <translation id="2395616325548404795">Votre <ph name="DEVICE_TYPE" /> a bien été enregistré pour bénéficier de la gestion d'entreprise, mais l'envoi d'informations concernant ses éléments et sa position a échoué. Veuillez saisir ces informations manuellement depuis la console d'administration de cet appareil.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Inclure l'historique récent de l'Assistant via Sherlog. Ceci peut comprendre votre identité, votre position et des informations de débogage. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Ajouter un dossier</translation>
 <translation id="389589731200570180">Partager avec des invités</translation>
-<translation id="3898521660513055167">État du jeton</translation>
 <translation id="389901847090970821">Sélectionner un clavier</translation>
 <translation id="3899879303189199559">Hors connexion pendant plus d'un an</translation>
 <translation id="3900966090527141178">Exporter des mots de passe</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Désinstaller l'application ?</translation>
 <translation id="5235750401727657667">Remplace la page qui s'affiche lorsque vous ouvrez un nouvel onglet</translation>
 <translation id="5238278114306905396">L'application "<ph name="EXTENSION_NAME" />" a été automatiquement supprimée.</translation>
-<translation id="5238369540257804368">Champs d'application</translation>
 <translation id="5241128660650683457">Lire toutes vos données sur les sites auxquels vous accédez</translation>
 <translation id="5242724311594467048">Activer "<ph name="EXTENSION_NAME" />" ?</translation>
 <translation id="5243522832766285132">Veuillez réessayer dans quelques instants</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Défauts matériels</translation>
 <translation id="5877064549588274448">La version a été modifiée. Redémarrez votre appareil pour appliquer les modifications.</translation>
 <translation id="5877584842898320529">L'imprimante sélectionnée n'est pas disponible ou n'est pas installée correctement. <ph name="BR" /> Vérifiez votre imprimante ou sélectionnez-en une autre.</translation>
-<translation id="5880247576487732437">Jeton présent</translation>
 <translation id="5882919346125742463">Réseaux connus</translation>
 <translation id="5884474295213649357">Cet onglet est associé à un périphérique USB.</translation>
 <translation id="5885324376209859881">Gérer les paramètres multimédias…</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">Saisissez l'ID de l'application ou l'URL du Chrome Web Store</translation>
 <translation id="804786196054284061">Contrat de licence utilisateur final</translation>
 <translation id="8049705080247101012">Google a signalé l'extension <ph name="EXTENSION_NAME" /> comme malveillante et a bloqué son installation</translation>
-<translation id="8049913480579063185">Nom d'extension</translation>
 <translation id="8050038245906040378">Signature du code commercial Microsoft</translation>
 <translation id="8053278772142718589">Fichiers PKCS #12</translation>
 <translation id="8053390638574070785">Actualiser cette page</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Coller en adaptant le style</translation>
 <translation id="8449036207308062757">Gérer l'espace de stockage</translation>
 <translation id="8452135315243592079">Carte SIM manquante</translation>
-<translation id="845627346958584683">Délai d'expiration</translation>
 <translation id="845702320058262034">Connexion impossible. Assurez-vous que le Bluetooth est activé sur votre téléphone.</translation>
 <translation id="8457451314607652708">Importer les favoris</translation>
 <translation id="8460336040822756677">Si vous désactivez Smart Lock pour <ph name="DEVICE_TYPE" />, vous ne pourrez pas déverrouiller vos appareils Chrome avec votre téléphone. Vous devrez saisir votre mot de passe.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Votre ordinateur contient un module sécurisé qui permet de mettre en œuvre de nombreuses fonctionnalités de sécurité critiques dans Chrome OS. Consultez le centre d'aide Chromebook pour en savoir plus : https://support.google.com/chromebook/?p=sm.</translation>
 <translation id="8637688295594795546">Mise à jour du système disponible. Préparation du téléchargement…</translation>
 <translation id="8639047128869322042">Recherche de logiciels malveillants…</translation>
-<translation id="8642171459927087831">Jeton d'accès</translation>
 <translation id="8642900771896232685">2 secondes</translation>
 <translation id="8642947597466641025">Augmente la taille du texte</translation>
 <translation id="8643418457919840804">Pour continuer, sélectionnez une option :</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index af7aaa9..db599471 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD શોધી શકતાં નથી. ખાતરી કરશો કે તમારી Chromebook ઑનલાઇન છે અને ફરી પ્રયાસ કરો.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> અવરોધિત છે</translation>
-<translation id="1357589289913453911">એક્સ્ટેન્શન ID</translation>
 <translation id="1358741672408003399">જોડણી અને વ્યાકરણ</translation>
 <translation id="1361164813881551742">મેન્યુઅલી ઉમેરો</translation>
 <translation id="1361655923249334273">બિનવપરાયેલ</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">પિન સહિત સુરક્ષા કોડ પર રહેલા બધા ડેટાને આ કાઢી નાખશે</translation>
 <translation id="1475502736924165259">તમારી પાસે ફાઇલ પર પ્રમાણપત્રો છે જે અન્ય કોઈપણ કૅટેગરીઝમાં ફિટ થતાં નથી</translation>
 <translation id="1476607407192946488">&amp;ભાષા સેટિંગ્સ</translation>
-<translation id="1477301030751268706">ઓળખ API ટોકન કૅશ મેમરી</translation>
 <translation id="1478340334823509079">વિગતો: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ઇન્સ્ટૉલેશન ચાલુ કર્યું નથી</translation>
 <translation id="1483493594462132177">મોકલો</translation>
@@ -724,7 +722,6 @@
 <translation id="2090876986345970080">સિસ્ટમ સુરક્ષા સેટિંગ</translation>
 <translation id="2091887806945687916">ધ્વનિ</translation>
 <translation id="2097372108957554726">નવા ડિવાઇસને નોંધવા માટે તમારે Chromeમાં સાઇન ઇન કરવાની જરૂર છે</translation>
-<translation id="2098305189700762159">મળ્યું નથી</translation>
 <translation id="2099172618127234427">તમે Chrome OS ડિબગીંગ સુવિધાઓને ચાલુ કરી રહ્યાં છો જે sshd daemon સેટ કરશે અને USB ડ્રાઇવથી બૂટ કરવું ચાલુ કરશે.</translation>
 <translation id="2099686503067610784">સર્વર પ્રમાણપત્ર "<ph name="CERTIFICATE_NAME" />"ને ડિલીટ કરી દઈએ?</translation>
 <translation id="2100273922101894616">સ્વતઃ સાઇન-ઇન</translation>
@@ -936,7 +933,6 @@
 <translation id="2386926718981642523">કોઈપણ સમયે "ઓકે Google" બોલીને તમારા આસિસ્ટંટને ઍક્સેસ કરો</translation>
 <translation id="2387458720915042159">પ્રૉક્સી કનેક્શનનો પ્રકાર</translation>
 <translation id="2391419135980381625">માનક ફૉન્ટ</translation>
-<translation id="2391762656119864333">રદબાતલ કરો</translation>
 <translation id="2392369802118427583">સક્રિય કરો</translation>
 <translation id="2394566832561516196">પછી ફરી લોડ થવા પર સેટિંગ્સ સાફ થઈ જશે.</translation>
 <translation id="2395616325548404795">એન્ટરપ્રાઇઝ સંચાલન માટે તમારા <ph name="DEVICE_TYPE" /> ની સફળતાપૂર્વક નોંધણી કરવામાં આવી, પરંતુ તેની એસેટ અને સ્થાન માહિતી મોકલવામાં નિષ્ફળ થયાં. કૃપા કરીને આ ઉપકરણ માટે તમારા Admin console માંથી આ માહિતી જાતે દાખલ કરો.</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">Sherlog મારફત તાજેતરના આસિસ્ટંટ ઇતિહાસનો સમાવેશ કરો. આમાં તમારી ઓળખ, સ્થાન અને ડિબગ માહિતીનો સમાવેશ હોઈ શકે છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">ફોલ્ડર ઉમેરો</translation>
 <translation id="389589731200570180">અતિથિઓ સાથે શેર કરો</translation>
-<translation id="3898521660513055167">ટોકન સ્થિતિ</translation>
 <translation id="389901847090970821">કીબોર્ડ પસંદ કરો</translation>
 <translation id="3899879303189199559">એક વર્ષ કરતાં વધુ સમય માટે ઑફલાઇન</translation>
 <translation id="3900966090527141178">પાસવર્ડની નિકાસ કરો</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">ઍપ્લિકેશનને અનઇન્સ્ટૉલ કરીએ?</translation>
 <translation id="5235750401727657667">નવું ટૅબ ખોલતી વખતે તમને દેખાય છે તે પેજને બદલો</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>
 <translation id="5243522832766285132">કૃપા કરીને થોડીવારમાં ફરી પ્રયાસ કરો</translation>
@@ -3229,7 +3223,6 @@
 <translation id="5870155679953074650">મોટી ભૂલ</translation>
 <translation id="5877064549588274448">ચેનલ બદલી. ફેરફારો લાગુ કરવા માટે તમારા ઉપકરણને પુનઃપ્રારંભ કરો.</translation>
 <translation id="5877584842898320529">પસંદ કરેલું પ્રિન્ટર ઉપલબ્ધ નથી અથવા યોગ્ય રીતે ઇન્સ્ટૉલ થયેલું નથી. <ph name="BR" /> તમારા પ્રિન્ટરને ચેક કરો અથવા બીજા પ્રિન્ટરને અજમાવી જુઓ.</translation>
-<translation id="5880247576487732437">ટોકન હાજર છે</translation>
 <translation id="5882919346125742463">જાણીતા નેટવર્ક્સ</translation>
 <translation id="5884474295213649357">આ ટૅબ USB ઉપકરણ સાથે કનેક્ટ થયેલ છે.</translation>
 <translation id="5885324376209859881">મીડિયા સેટિંગ્સ સંચાલિત કરો...</translation>
@@ -4689,7 +4682,6 @@
 <translation id="8045923671629973368">ઍપ્લિકેશન ID અથવા વેબસ્ટોર URL દાખલ કરો</translation>
 <translation id="804786196054284061">વાપરનાર લાઇસન્સ કરાર</translation>
 <translation id="8049705080247101012">Googleએ "<ph name="EXTENSION_NAME" />"ને બ્લેકલિસ્ટેડ ચિહ્નિત કર્યું છે અને ઇન્સ્ટૉલેશન અટકાવવામાં આવ્યું છે</translation>
-<translation id="8049913480579063185">એક્સ્ટેન્શન નામ</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 ફાઇલો</translation>
 <translation id="8053390638574070785">આ પૃષ્ઠને રીલોડ કરો</translation>
@@ -4940,7 +4932,6 @@
 <translation id="8449008133205184768">શૈલી પેસ્ટ કરો અને મેળ બેસાડો</translation>
 <translation id="8449036207308062757">સ્ટોરેજ સંચાલિત કરો</translation>
 <translation id="8452135315243592079">SIM કાર્ડ ખૂટે છે</translation>
-<translation id="845627346958584683">સમાપ્તિ સમય</translation>
 <translation id="845702320058262034">કનેક્ટ કરી શકાતું નથી. તમારા ફોનનું બ્લૂટૂથ ચાલુ હોવાની ખાતરી કરો.</translation>
 <translation id="8457451314607652708">બુકમાર્ક્સ આયાત કરો</translation>
 <translation id="8460336040822756677">જો તમે <ph name="DEVICE_TYPE" /> માટે Smart Lock બંધ કરો, તો તમે તમારા ફોનનો ઉપયોગ કરીને તમારા Chrome ઉપકરણોને અનલૉક કરવામાં સમર્થ હશો નહીં. તમારે તમારો પાસવર્ડ લખવો પડશે.</translation>
@@ -5054,7 +5045,6 @@
 <translation id="8637542770513281060">તમારું કમ્પ્યુટર એક સુરક્ષા મૉડ્યૂલ ધરાવે છે, જેનો ઉપયોગ Chrome OSમાં ઘણી મહત્ત્વની સુરક્ષા સુવિધાઓ લાગુ પાડવા માટે કરવામાં આવે છે. વધુ જાણવા માટે Chromebook સહાયતા કેન્દ્રની મુલાકાત લો: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">સિસ્ટમ અપડેટ ઉપલબ્ધ છે. ડાઉનલોડ કરવા માટે તૈયાર થઈ રહ્યું છે...</translation>
 <translation id="8639047128869322042">નુકસાનકારક સૉફ્ટવેરની તપાસ કરી રહ્યાં છીએ…</translation>
-<translation id="8642171459927087831">ઍક્સેસ ટોકન</translation>
 <translation id="8642900771896232685">2 સેકન્ડ</translation>
 <translation id="8642947597466641025">ટેક્સ્ટ મોટો કરો</translation>
 <translation id="8643418457919840804">આગળ વધવા માટે, એક વિકલ્પ પસંદ કરો:</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index c32264eb..cce09c5 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD नहीं मिला. पक्का करें कि आपका Chromebook ऑनलाइन है और दोबारा आज़माएं.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> अवरोधित है</translation>
-<translation id="1357589289913453911">एक्सटेंशन आईडी</translation>
 <translation id="1358741672408003399">वर्तनी और व्याकरण</translation>
 <translation id="1361164813881551742">मैन्युअल रूप से जोड़ें</translation>
 <translation id="1361655923249334273">अप्रयुक्त</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">ऐसा करने से सुरक्षा कुंजी पर मौजूद सभी डेटा और इसका पिन भी मिट जाएगा</translation>
 <translation id="1475502736924165259">आपके पास फ़ाइल पर ऐसे प्रमाणपत्र हैं जो किसी भी अन्य श्रेणी में फ़िट नहीं होते</translation>
 <translation id="1476607407192946488">&amp;भाषा सेटिंग</translation>
-<translation id="1477301030751268706">पहचान API (एपीआई) टोकन कैश</translation>
 <translation id="1478340334823509079">विवरण: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">इंस्टॉलेशन चालू नहीं है</translation>
 <translation id="1483493594462132177">भेजें</translation>
@@ -541,7 +539,7 @@
 <translation id="1792619191750875668">बढ़ाया हुआ डिसप्ले</translation>
 <translation id="1794791083288629568">इस समस्या को ठीक करने में हमारी सहायता करने के लिए फ़ीडबैक भेजें.</translation>
 <translation id="1795214765651529549">क्लासिक का उपयोग करें</translation>
-<translation id="1797738254362176886">अपनी सुरक्षा कुंजी डिवाइस में लगाकर उसे छुएं और साइन-इन का डेटा देखें.</translation>
+<translation id="1797738254362176886">अपनी सुरक्षा कुंजी डिवाइस में लगाकर उसे छुएं और साइन इन का डेटा देखें.</translation>
 <translation id="1799071797295057738">"<ph name="EXTENSION_NAME" />" एक्सटेंशन अपने आप अक्षम हो गया था.</translation>
 <translation id="1802687198411089702">पेज काम नहीं कर रहा है. आप इंतज़ार कर सकते हैं या बाहर निकल सकते हैं.</translation>
 <translation id="1802931390041703523">इस पेज पर फ़्लैश ब्लॉक कर दिया गया था</translation>
@@ -618,7 +616,7 @@
 <translation id="1895934970388272448">यह प्रोसेस पूरा करने के लिए आपको अपने प्रिंटर पर रजिस्ट्रेशन की पुष्टि करनी होगी - इसे अभी चुनें.</translation>
 <translation id="1899826437968063457">प्लग इन VM को चलाने के लिए अनुमति की ज़रूरत है</translation>
 <translation id="1901303067676059328">&amp;सभी को चुनें</translation>
-<translation id="1901984611178952431">साइन-इन का डेटा प्रबंधित करें</translation>
+<translation id="1901984611178952431">साइन इन का डेटा प्रबंधित करें</translation>
 <translation id="1902576642799138955">मान्यता अवधि</translation>
 <translation id="1904394285866191268">{NUM_TABS,plural, =1{टैब म्यूट करें}one{टैब म्यूट करें}other{टैब म्यूट करें}}</translation>
 <translation id="1905375423839394163">Chromebook डिवाइस का नाम</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">सिस्‍टम सुरक्षा सेटिंग</translation>
 <translation id="2091887806945687916">आवाज़</translation>
 <translation id="2097372108957554726">नए डिवाइस रजिस्टर करने के लिए आपको Chrome में साइन इन करना होगा.</translation>
-<translation id="2098305189700762159">नहीं मिला</translation>
 <translation id="2099172618127234427">आप Chrome OS की डीबग करने वाली सुविधाएं चालू कर रहे हैं जिससे sshd daemon सेट हो जाएगा और यूएसबी डिवाइस से बूट करना चालू हो जाएगा.</translation>
 <translation id="2099686503067610784">सर्वर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" मिटाएं?</translation>
 <translation id="2100273922101894616">अपने आप साइन इन करने की सुविधा</translation>
@@ -940,12 +937,11 @@
 <translation id="2386926718981642523">बस "Ok Google" कहें और अपनी Assistant सेवा एक्सेस करें</translation>
 <translation id="2387458720915042159">प्रॉक्सी कनेक्शन प्रकार</translation>
 <translation id="2391419135980381625">मानक फ़ॉन्ट</translation>
-<translation id="2391762656119864333">निरस्‍त करें</translation>
 <translation id="2392369802118427583">सक्रिय करें</translation>
 <translation id="2394566832561516196">अगली बार फिर से लोड करने पर सेटिंग साफ़ हो जाएंगी.</translation>
 <translation id="2395616325548404795">आपका <ph name="DEVICE_TYPE" /> डिवाइस एंटरप्राइज़ प्रबंधन के लिए सफलतापूर्वक नामांकित हो गया है, लेकिन वह अपनी एसेट और स्‍थान की जानकारी भेजने में विफल रहा है. कृपया इस डिवाइस के लिए अपने Admin console से यह जानकारी मैन्‍युअल रूप से डालें.</translation>
 <translation id="2396783860772170191">चार अंकों वाला पिन (0000-9999) डालें</translation>
-<translation id="2399939490305346086">सुरक्षा कुंजी पर साइन-इन का डेटा</translation>
+<translation id="2399939490305346086">सुरक्षा कुंजी पर साइन इन का डेटा</translation>
 <translation id="2408955596600435184">अपना पिन डालें</translation>
 <translation id="241082044617551207">अज्ञात प्लग इन</translation>
 <translation id="2412593942846481727">अपडेट मौजूद है</translation>
@@ -1567,7 +1563,7 @@
 <translation id="3348038390189153836">निकालने योग्‍य डिवाइस का पता चला</translation>
 <translation id="3349933790966648062">मेमोरी फ़ुटप्रिंट</translation>
 <translation id="3350117557200012647">दूसरे डिवाइस से जोड़ने के मोड में जाएं</translation>
-<translation id="3350263973613584174">इस सुरक्षा कुंजी में साइन-इन का कोई डेटा सेव नहीं है</translation>
+<translation id="3350263973613584174">इस सुरक्षा कुंजी में साइन इन का कोई डेटा सेव नहीं है</translation>
 <translation id="3355936511340229503">कनेक्शन गड़बड़ी</translation>
 <translation id="3356580349448036450">पूरा हुआ</translation>
 <translation id="3359256513598016054">प्रमाणपत्र नीति बाध्यताएं</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Sherlog की मदद से हाल ही का Assistant इतिहास शामिल करें. इसमें आपकी पहचान, जगह, और डीबग की जानकारी शामिल हो सकती है. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">फ़ोल्डर जोड़ें</translation>
 <translation id="389589731200570180">अतिथियों से शेयर करें</translation>
-<translation id="3898521660513055167">टोकन स्थिति</translation>
 <translation id="389901847090970821">कीबोर्ड चुनें</translation>
 <translation id="3899879303189199559">एक वर्ष से ज़्यादा समय से ऑफ़लाइन</translation>
 <translation id="3900966090527141178">पासवर्ड निर्यात करें</translation>
@@ -2137,7 +2132,7 @@
 <translation id="4147911968024186208">कृपया फिर से कोशिश करें. अगर आपको यह गड़बड़ी फिर से दिखाई देती है, तो कृपया अपने सहायता प्रतिनिधि से संपर्क करें.</translation>
 <translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">डिसप्ले</translation>
-<translation id="4150234330364554482">ऐसा OEM डॉकिंग स्टेशन इस्तेमाल करें जो इस Chromebook के साथ काम करने के लिए बनाया गया हो.</translation>
+<translation id="4150234330364554482">ऐसा OEM डॉकिंग स्टेशन इस्तेमाल करें जिसे इस Chromebook के साथ काम करने के लिए बनाया गया हो.</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टैब}one{# टैब}other{# टैब}}</translation>
 <translation id="4154664944169082762">फ़िंगरप्रिंट</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -2284,7 +2279,7 @@
 <translation id="4412698727486357573">सहायता केंद्र</translation>
 <translation id="44141919652824029">"<ph name="APP_NAME" />" को आपके अटैच किए हुए USB डिवाइसों की सूची पाने दें?</translation>
 <translation id="4414232939543644979">नई &amp;गुप्त विंडो</translation>
-<translation id="4414386768539506503">अपनी सुरक्षा कुंजी पर मौजूद साइन-इन का डेटा देखने के लिए, उसका पिन डालें. अगर आपको पिन नहीं पता है, तो सुरक्षा कुंजी रीसेट करनी होगी.</translation>
+<translation id="4414386768539506503">अपनी सुरक्षा कुंजी पर मौजूद साइन इन का डेटा देखने के लिए, उसका पिन डालें. अगर आपको पिन नहीं पता है, तो सुरक्षा कुंजी रीसेट करनी होगी.</translation>
 <translation id="4415245286584082850">कोई डिवाइस नहीं मिला. नए टैब में सहायता केंद्र लेख खोलें.</translation>
 <translation id="4415276339145661267">अपना Google खाता प्रबंधित करें</translation>
 <translation id="4415748029120993980">SECG अंडाकार वक्र secp384r1 (अर्थात NIST P-384)</translation>
@@ -2697,7 +2692,7 @@
 <translation id="5072836811783999860">प्रबंधित बुकमार्क दिखाएं</translation>
 <translation id="5074318175948309511">नई सेटिंग के प्रभावी होने से पहले इस पृष्‍ठ को रीलोड करने की आवश्‍यकता हो सकती है.</translation>
 <translation id="5075131525758602494">सिम PIN डालें</translation>
-<translation id="507514548843781244">अपनी सुरक्षा कुंजी पर सेव किया गया साइन-इन का डेटा देखें और हमेशा के लिए मिटाएं</translation>
+<translation id="507514548843781244">अपनी सुरक्षा कुंजी पर सेव किया गया साइन इन का डेटा देखें और हमेशा के लिए मिटाएं</translation>
 <translation id="5078638979202084724">सभी टैब बुकमार्क करें</translation>
 <translation id="5078796286268621944">गलत पिन</translation>
 <translation id="5079950360618752063">सुझाए गए पासवर्ड का इस्तेमाल करें</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">ऐप्लिकेशन अनइंस्टॉल करें?</translation>
 <translation id="5235750401727657667">नया टैब खोलते समय दिखाई देने वाला पेज बदलें</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>
 <translation id="5243522832766285132">कृपया कुछ देर बाद कोशिश करें</translation>
@@ -3057,7 +3051,7 @@
 <translation id="5618075537869101857">अरे नहीं, कियोस्क ऐप्स  लॉन्च नहीं किया जा सका.</translation>
 <translation id="5618333180342767515">(इसमें कुछ मिनट लग सकते हैं.)</translation>
 <translation id="56197088284879152">दूरस्थ डिवाइस के लिए कनेक्शन अत्यधिक धीमा है: "<ph name="DEVICE_NAME" />".</translation>
-<translation id="5620568081365989559">DevTools <ph name="FOLDER_PATH" /> का पूरा एक्सेस चाहता है. पक्का करें कि आप किसी भी संवेदनशील जानकारी का खुलासा ना करें.</translation>
+<translation id="5620568081365989559">DevTools <ph name="FOLDER_PATH" /> का पूरा एक्सेस चाहता है. पक्का करें कि आप किसी भी संवेदनशील जानकारी न बताएं.</translation>
 <translation id="5620612546311710611">इस्तेमाल के आंकड़े</translation>
 <translation id="5620655347161642930">पासवर्ड निर्यात करें...</translation>
 <translation id="5623282979409330487">यह साइट आपके हलचल पकड़ने वाले सेंसर को एक्सेस कर रही है.</translation>
@@ -3231,7 +3225,6 @@
 <translation id="5870155679953074650">हार्ड फ़ॉल्ट</translation>
 <translation id="5877064549588274448">चैनल बदल दिया गया है. बदलावों का लागू करने के लिए अपने डिवाइस को फिर से प्रारंभ करें.</translation>
 <translation id="5877584842898320529">चुना गया प्रिंटर उपलब्ध नहीं है या ठीक से इंस्टॉल नहीं किया गया है. <ph name="BR" /> अपना प्रिंटर जाँचें या कोई दूसरा प्रिंटर चुनकर देखें.</translation>
-<translation id="5880247576487732437">टोकन उपस्थित</translation>
 <translation id="5882919346125742463">ज्ञात नेटवर्क</translation>
 <translation id="5884474295213649357">यह टैब किसी USB डिवाइस से कनेक्ट है.</translation>
 <translation id="5885324376209859881">मीडिया सेटिंग प्रबंधित करें...</translation>
@@ -3398,7 +3391,7 @@
 <translation id="6122081475643980456">आपका इंटरनेट कनेक्शन नियंत्रित किया जा रहा है</translation>
 <translation id="6122095009389448667">इस साइट को क्लिपबोर्ड देखने से ब्लॉक करते रहें</translation>
 <translation id="6122875415561139701">लिखें कार्रवाई की इस पर अनुमति नहीं है: "<ph name="DEVICE_NAME" />".</translation>
-<translation id="6123292156101652890">इस सुरक्षा कुंजी में साइन-इन डेटा सेव नहीं किया जा सकता.</translation>
+<translation id="6123292156101652890">इस सुरक्षा कुंजी में साइन इन डेटा सेव नहीं किया जा सकता.</translation>
 <translation id="6124650939968185064">निम्न एक्सटेंशन इस एक्सटेंशन पर निर्भर हैं:</translation>
 <translation id="6124698108608891449">इस साइट को ज़्यादा अनुमतियां चाहिए.</translation>
 <translation id="6125479973208104919">दुर्भाग्यवश, आपको इस <ph name="DEVICE_TYPE" /> में अपना खाता फिर से जोड़ना होगा.</translation>
@@ -3941,7 +3934,7 @@
 <translation id="6974609594866392343">ऑफ़लाइन डेमो मोड</translation>
 <translation id="6977381486153291903">फ़र्मवेयर पुनरीक्षण</translation>
 <translation id="6978121630131642226">सर्च इंजन</translation>
-<translation id="6979044105893951891">मेहमान के तौर पर ब्राउज़ करने के प्रबंधित किए गए सेशन लॉन्च करें और उनसे बाहर आएं</translation>
+<translation id="6979044105893951891">मेहमान के तौर पर ब्राउज़ करने के लिए प्रबंधित किए गए सेशन लॉन्च करें और उनसे बाहर आएं</translation>
 <translation id="6979440798594660689">म्यूट करें (डिफ़ॉल्ट)</translation>
 <translation id="6979737339423435258">हमेशा</translation>
 <translation id="6981982820502123353">सुलभता</translation>
@@ -4067,7 +4060,7 @@
 <translation id="7143092389027215216">डेमो मोड चालू किया जा रहा है</translation>
 <translation id="7143207342074048698">कनेक्‍ट हो रहा है</translation>
 <translation id="7144878232160441200">फिर से प्रयास करें</translation>
-<translation id="714687768418476028">आपकी सुरक्षा कुंजी को पिन से सुरक्षित नहीं किया गया है. साइन-इन का डेटा प्रबंधित करने के लिए, पहले पिन बनाएं.</translation>
+<translation id="714687768418476028">आपकी सुरक्षा कुंजी को पिन से सुरक्षित नहीं किया गया है. साइन इन का डेटा प्रबंधित करने के लिए, पहले पिन बनाएं.</translation>
 <translation id="7149893636342594995">पिछले 24 घंटे</translation>
 <translation id="715118844758971915">क्‍लासि‍क प्रिंटर</translation>
 <translation id="7152478047064750137">इस एक्‍सटेंशन को कोई खास अनुमति नहीं चाहिए</translation>
@@ -4431,7 +4424,7 @@
 <translation id="7704521324619958564">Play स्टोर खोलें</translation>
 <translation id="7704628569466676326">अपनी 'सुरक्षा चाबी' को इस डिवाइस से जोड़ें ताकि आप अपने खाते में साइन इन करने के लिए इसका इस्तेमाल कर सकें</translation>
 <translation id="7705276765467986571">बुकमार्क मॉडल लोड नहीं कर सका.</translation>
-<translation id="7705524343798198388">VPN</translation>
+<translation id="7705524343798198388">वीपीएन</translation>
 <translation id="7707108266051544351">इस साइट को हलचल वाले सेंसर का इस्तेमाल करने से रोक दिया गया है.</translation>
 <translation id="7707922173985738739">मोबाइल डेटा का उपयोग करें</translation>
 <translation id="7709152031285164251">विफल - <ph name="INTERRUPT_REASON" /></translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">ऐप्लिकेशन आईडी या वेबस्टोर यूआरएल डालें</translation>
 <translation id="804786196054284061">असली उपयोगकर्ता के लाइसेंस का समझौता</translation>
 <translation id="8049705080247101012">Google ने <ph name="EXTENSION_NAME" /> को नुकसान पहुंचाने वाले के रूप में फ़्लैग किया है और इंस्टॉलेशन रोक दिया गया है</translation>
-<translation id="8049913480579063185">एक्सटेंशन का नाम</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 फ़ाइलें</translation>
 <translation id="8053390638574070785">यह पेज फिर से लोड करें</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">चिपकाएं और शैली का मिलान करें</translation>
 <translation id="8449036207308062757">जगह प्रबंधित करें</translation>
 <translation id="8452135315243592079">अनुपलब्ध SIM कार्ड</translation>
-<translation id="845627346958584683">समाप्ति समय</translation>
 <translation id="845702320058262034">कनेक्ट नहीं किया जा सकता. देखें कि आपके फ़ोन का ब्लूटूथ चालू है या नहीं.</translation>
 <translation id="8457451314607652708">बुकमार्क आयात करें</translation>
 <translation id="8460336040822756677">अगर आप <ph name="DEVICE_TYPE" /> के लिए Smart Lock बंद कर देते हैं, तो आप अपने फ़ोन का उपयोग करके अपने Chrome डिवाइस अनलॉक नहीं कर सकेंगे. आपको अपना पासवर्ड लिखना होगा.</translation>
@@ -4956,7 +4947,7 @@
 <translation id="8463215747450521436">इस निगरानी में रखे गए उपयोगकर्ता को प्रबंधक ने मिटा दिया है या बंद कर दिया है. अगर आप इस उपयोगकर्ता के रूप में साइन इन किए हुए रहना चाहते हैं, तो कृपया प्रबंधक से संपर्क करें.</translation>
 <translation id="846374874681391779">डाउनलोड बार</translation>
 <translation id="8463807869745732775">"&gt;
-    सुरक्षा कुंजी पर साइन-इन का डेटा सेव किया गया</translation>
+    सुरक्षा कुंजी पर साइन इन का डेटा सेव किया गया</translation>
 <translation id="8463955938112983119"><ph name="PLUGIN_NAME" /> बंद किया गया.</translation>
 <translation id="8464132254133862871">यह उपयोगकर्ता खाता सेवा के लिए योग्‍य नहीं है.</translation>
 <translation id="8465252176946159372">मान्य नहीं है</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">आपके कंप्यूटर में एक ऐसा सुरक्षित मॉड्यूल है, जिसका उपयोग Chrome OS की कई महत्वपूर्ण सुरक्षा सुविधाओं को लागू करने में किया जाता है. ज़्यादा जानने के लिए Chromebook सहायता केंद्र पर जाएं: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">सिस्टम अपडेट उपलब्ध है. डाउनलोड करने के लिए तैयार हो रहा है...</translation>
 <translation id="8639047128869322042">नुकसान पहुंचाने वाला सॉफ़्टवेयर ढूंढा जा रहा है...</translation>
-<translation id="8642171459927087831">एक्सेस टोकन</translation>
 <translation id="8642900771896232685">2 सेकंड</translation>
 <translation id="8642947597466641025">लेख को बड़ा करें</translation>
 <translation id="8643418457919840804">जारी रखने के लिए, कोई विकल्प चुनें:</translation>
@@ -5242,7 +5232,7 @@
 <translation id="8876307312329369159">यह सेटिंग किसी डेमो सत्र में बदली नहीं जा सकती है.</translation>
 <translation id="8877448029301136595">[मूल निर्देशिका]</translation>
 <translation id="8879284080359814990">टैब के रूप में &amp;दिखाएं</translation>
-<translation id="8879921471468674457">साइन-इन की जानकारी याद रखें</translation>
+<translation id="8879921471468674457">साइन इन की जानकारी याद रखें</translation>
 <translation id="8883847527783433352">'किसी दूसरे खाते से सिंक करें'</translation>
 <translation id="8884570509232205463">आपका डिवाइस अब <ph name="UNLOCK_TIME" /> बजे अनलॉक होगा.</translation>
 <translation id="8885197664446363138">Smart Lock अनुपलब्‍ध है</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 4b1d407..e782c5eb 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD nije pronađen. Provjerite je li Chromebook online i pokušajte ponovo.</translation>
 <translation id="1355466263109342573">Dodatak <ph name="PLUGIN_NAME" /> je blokiran</translation>
-<translation id="1357589289913453911">ID proširenja</translation>
 <translation id="1358741672408003399">Pravopis i gramatika</translation>
 <translation id="1361164813881551742">Dodaj ručno</translation>
 <translation id="1361655923249334273">Nekorišteno</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Time će se izbrisati svi podaci na sigurnosnom ključu, uključujući njegov PIN</translation>
 <translation id="1475502736924165259">U arhivi imate certifikate koji ne odgovaraju nijednoj od ostalih kategorija</translation>
 <translation id="1476607407192946488">&amp;Postavke jezika</translation>
-<translation id="1477301030751268706">Predmemoriranje oznake API-ja Identity</translation>
 <translation id="1478340334823509079">Pojedinosti: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalacija nije omogućena</translation>
 <translation id="1483493594462132177">Pošalji</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Postavka sigurnosti sustava</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2097372108957554726">Morate se prijaviti na Chrome da biste registrirali nove uređaje</translation>
-<translation id="2098305189700762159">Nije pronađeno</translation>
 <translation id="2099172618127234427">Omogućujete značajke za otklanjanje pogrešaka OS-a Chrome koje će postaviti sshd daemon i omogućiti pokretanje s USB pogona.</translation>
 <translation id="2099686503067610784">Izbrisati certifikat poslužitelja "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Pristupite svojem Asistentu svaki put kad izgovorite "Ok Google"</translation>
 <translation id="2387458720915042159">Vrsta proxy veze</translation>
 <translation id="2391419135980381625">Standardni font</translation>
-<translation id="2391762656119864333">Opozovi</translation>
 <translation id="2392369802118427583">Aktiviraj</translation>
 <translation id="2394566832561516196">Postavke će biti poništene prilikom sljedećeg ponovnog učitavanja.</translation>
 <translation id="2395616325548404795">Vaš <ph name="DEVICE_TYPE" /> uređaj uspješno je registriran za poslovno upravljanje, ali nije poslao podatke o uređaju i lokaciji. Unesite te podatke ručno putem Admin consolea za taj uređaj.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Uključite nedavnu povijest Asistenta putem Sherloga. To može uključivati vaš identitet, lokaciju i informacije o otklanjanju pogrešaka. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Dodavanje mape</translation>
 <translation id="389589731200570180">Dijeljenje s gostima</translation>
-<translation id="3898521660513055167">Status oznake</translation>
 <translation id="389901847090970821">Odaberite tipkovnicu</translation>
 <translation id="3899879303189199559">Izvan mreže više od godinu dana</translation>
 <translation id="3900966090527141178">Izvoz zaporki</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Želite li deinstalirati aplikaciju?</translation>
 <translation id="5235750401727657667">Zamijenite stranicu koja se prikazuje prilikom otvaranja nove kartice</translation>
 <translation id="5238278114306905396">Aplikacija "<ph name="EXTENSION_NAME" />" automatski je uklonjena.</translation>
-<translation id="5238369540257804368">Rasponi</translation>
 <translation id="5241128660650683457">čitati sve vaše podatke s web-lokacija koje posjetite</translation>
 <translation id="5242724311594467048">Omogućiti proširenje "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Pokušajte ponovo za nekoliko trenutaka.</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Pogreške tvrdog diska</translation>
 <translation id="5877064549588274448">Kanal je promijenjen. Ponovo pokrenite uređaj za primjenu promjena.</translation>
 <translation id="5877584842898320529">Odabrani pisač nije dostupan ili nije ispravno instaliran. <ph name="BR" /> Provjerite pisač ili pokušajte odabrati neki drugi.</translation>
-<translation id="5880247576487732437">Oznaka je prisutna</translation>
 <translation id="5882919346125742463">Poznate mreže</translation>
 <translation id="5884474295213649357">Kartica je povezana s USB uređajem.</translation>
 <translation id="5885324376209859881">Upravljanje postavkama medija...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Unesite ID aplikacije ili URL web-trgovine</translation>
 <translation id="804786196054284061">Licencni ugovor za krajnjeg korisnika</translation>
 <translation id="8049705080247101012">Google je označio proširenje "<ph name="EXTENSION_NAME" />" kao zlonamjerno, pa je instalacija spriječena</translation>
-<translation id="8049913480579063185">Naziv proširenja</translation>
 <translation id="8050038245906040378">Microsoftovo komercijalno kodno potpisivanje</translation>
 <translation id="8053278772142718589">Datoteke PKCS #12</translation>
 <translation id="8053390638574070785">Ponovo učitaj ovu stranicu</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Zalijepi i podesi stil</translation>
 <translation id="8449036207308062757">Upravljanje pohranom</translation>
 <translation id="8452135315243592079">Nedostaje SIM kartica</translation>
-<translation id="845627346958584683">Vrijeme isteka</translation>
 <translation id="845702320058262034">Povezivanje nije uspjelo. Provjerite je li Bluetooth na telefonu uključen.</translation>
 <translation id="8457451314607652708">Uvezi oznake</translation>
 <translation id="8460336040822756677">Ako isključite Smart Lock za uređaj <ph name="DEVICE_TYPE" />, nećete moći otključati svoje Chrome uređaje pomoću telefona. Morat ćete unijeti zaporku.</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">Vaše računalo sadrži sigurni modul koji se upotrebljava za primjenu mnogih važnih sigurnosnih značajki u OS-u Chrome. Posjetite Chromebookov centar za pomoć da biste saznali više: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Dostupno ažuriranje sustava. Priprema za preuzimanje…</translation>
 <translation id="8639047128869322042">Traženje štetnog softvera...</translation>
-<translation id="8642171459927087831">Token pristupa</translation>
 <translation id="8642900771896232685">Dvije sekunde</translation>
 <translation id="8642947597466641025">Uvećaj tekst</translation>
 <translation id="8643418457919840804">Da biste nastavili, odaberite opciju:</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 94c7db1..eeb58f1 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nem található a PPD. Győződjön meg arról, hogy a Chromebook csatlakozik az internetre, majd próbálja újra.</translation>
 <translation id="1355466263109342573">A(z) <ph name="PLUGIN_NAME" /> le van tiltva</translation>
-<translation id="1357589289913453911">Bővítményazonosító</translation>
 <translation id="1358741672408003399">Helyesírás és nyelvhelyesség</translation>
 <translation id="1361164813881551742">Hozzáadás manuálisan</translation>
 <translation id="1361655923249334273">Nem használt</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Ezzel törli a biztonsági hardverkulcson tárolt összes adatot, köztük a PIN-kódot is</translation>
 <translation id="1475502736924165259">Vannak olyan tanúsítványok, amelyek nem illenek a többi kategória egyikébe se</translation>
 <translation id="1476607407192946488">&amp;Nyelvi beállítások</translation>
-<translation id="1477301030751268706">Azonosítási API token-gyorsítótára</translation>
 <translation id="1478340334823509079">Részletek: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">A telepítés nincs engedélyezve</translation>
 <translation id="1483493594462132177">Küldés</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Rendszerbiztonsági beállítás</translation>
 <translation id="2091887806945687916">Hang</translation>
 <translation id="2097372108957554726">Új eszközök regisztrálásához be kell jelentkeznie a Chrome-ba</translation>
-<translation id="2098305189700762159">Nem található</translation>
 <translation id="2099172618127234427">Ön engedélyezi a Chrome OS hibakeresési funkcióit, melyek be fogják állítani az sshd daemon szolgáltatást, és engedélyezni fogják az USB-meghajtókról való indítást.</translation>
 <translation id="2099686503067610784">Törli a(z) "<ph name="CERTIFICATE_NAME" />" szervertanúsítványt?</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Bármikor hozzáférhet Segédjéhez, csak mondja azt, hogy „Ok Google”</translation>
 <translation id="2387458720915042159">Proxykapcsolat típusa</translation>
 <translation id="2391419135980381625">Alapértelmezett betűtípus</translation>
-<translation id="2391762656119864333">Visszavonás</translation>
 <translation id="2392369802118427583">Aktiválás</translation>
 <translation id="2394566832561516196">A beállításokat az oldal következő újratöltésekor törli a rendszer.</translation>
 <translation id="2395616325548404795">A(z) <ph name="DEVICE_TYPE" /> eszköz vállalati kezelés céljából történő rögzítése sikerült, de a tartalmi és helyadatainak elküldése nem. Kérjük, az eszköz ezen adatait írja be manuálisan a Felügyeleti konzolból.</translation>
@@ -1958,7 +1954,6 @@
 <translation id="3894123633473837029">Friss Segéd-előzmények felvétele a Sherlogon keresztül. Szerepelhetnek közöttük hibakeresési információk, valamint adatok az Ön személyazonosságáról és tartózkodási helyéről. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation>
 <translation id="3894427358181296146">Mappa hozzáadása</translation>
 <translation id="389589731200570180">Megosztás vendégekkel</translation>
-<translation id="3898521660513055167">Token állapota</translation>
 <translation id="389901847090970821">Billentyűzet kiválasztása</translation>
 <translation id="3899879303189199559">Több mint egy éve offline</translation>
 <translation id="3900966090527141178">Jelszavak exportálása</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Eltávolítja az alkalmazást?</translation>
 <translation id="5235750401727657667">Új lap megnyitásakor látható oldal cseréje</translation>
 <translation id="5238278114306905396">A(z) „<ph name="EXTENSION_NAME" />” alkalmazás automatikusan törölve.</translation>
-<translation id="5238369540257804368">Hatáskörök</translation>
 <translation id="5241128660650683457">Az összes adat beolvasása a felkeresett webhelyekről</translation>
 <translation id="5242724311594467048">Engedélyezi a következőt: „<ph name="EXTENSION_NAME" />”?</translation>
 <translation id="5243522832766285132">Próbálkozzon újra néhány pillanat múlva</translation>
@@ -3234,7 +3228,6 @@
 <translation id="5870155679953074650">Súlyos hibák</translation>
 <translation id="5877064549588274448">Módosult a csatorna. Indítsa újra az eszközt a módosítások alkalmazásához.</translation>
 <translation id="5877584842898320529">A kiválasztott nyomtató nem áll rendelkezésre, vagy nincs megfelelően telepítve. <ph name="BR" /> Ellenőrizze a nyomtatót, vagy válasszon másikat.</translation>
-<translation id="5880247576487732437">Token található</translation>
 <translation id="5882919346125742463">Ismert hálózatok</translation>
 <translation id="5884474295213649357">Ez a lap USB-eszközhöz csatlakozik.</translation>
 <translation id="5885324376209859881">Médiabeállítások kezelése...</translation>
@@ -4699,7 +4692,6 @@
 <translation id="8045923671629973368">Adja meg az alkalmazás azonosítóját vagy internetes áruházi URL-jét</translation>
 <translation id="804786196054284061">Végfelhasználói licencszerződés</translation>
 <translation id="8049705080247101012">A Google rosszindulatúként jelölte meg a(z) „<ph name="EXTENSION_NAME" />” bővítményt, és megakadályozta a telepítést</translation>
-<translation id="8049913480579063185">Bővítmény neve</translation>
 <translation id="8050038245906040378">Microsoft kereskedelmi kódaláírás</translation>
 <translation id="8053278772142718589">PKCS #12 fájlok</translation>
 <translation id="8053390638574070785">Az oldal újratöltése</translation>
@@ -4950,7 +4942,6 @@
 <translation id="8449008133205184768">Beillesztés és stílus egyeztetése</translation>
 <translation id="8449036207308062757">Tárhely kezelése</translation>
 <translation id="8452135315243592079">Hiányzó SIM-kártya</translation>
-<translation id="845627346958584683">Lejárat időpontja</translation>
 <translation id="845702320058262034">Nem sikerült kapcsolódni. A telefon Bluetooth funkciójának bekapcsolt állapotban kell lennie.</translation>
 <translation id="8457451314607652708">Könyvjelzők importálása</translation>
 <translation id="8460336040822756677">Ha kikapcsolja a Smart Lock <ph name="DEVICE_TYPE" /> eszközhöz funkciót, akkor a jövőben nem tudja feloldani Chrome-eszközeit a telefonja használatával, hanem be kell írnia jelszavát.</translation>
@@ -5064,7 +5055,6 @@
 <translation id="8637542770513281060">Számítógépe olyan biztonsági modult tartalmaz, amely számos kritikus biztonsági funkció megvalósítására szolgál Chrome OS-en. További információt a Chromebook Súgóban talál: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="8637688295594795546">Megjelent egy rendszerfrissítés. Felkészülés a letöltésre...</translation>
 <translation id="8639047128869322042">Kártékony szoftverek keresése…</translation>
-<translation id="8642171459927087831">Hozzáférési token</translation>
 <translation id="8642900771896232685">2 másodperc</translation>
 <translation id="8642947597466641025">Szöveg nagyítása</translation>
 <translation id="8643418457919840804">A folytatáshoz válasszon a lehetőségek közül:</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 95c64c1..579b5cf121 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Tidak dapat menemukan PPD. Pastikan Chromebook sudah online dan coba lagi.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> diblokir</translation>
-<translation id="1357589289913453911">ID Ekstensi</translation>
 <translation id="1358741672408003399">Ejaan dan Grammar</translation>
 <translation id="1361164813881551742">Tambahkan Secara Manual</translation>
 <translation id="1361655923249334273">Tidak digunakan</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Tindakan ini akan menghapus semua data di kunci keamanan, termasuk PIN-nya</translation>
 <translation id="1475502736924165259">Anda memiliki sertifikat pada file yang tidak sesuai dengan kategori lain mana pun</translation>
 <translation id="1476607407192946488">&amp;Setelan Bahasa</translation>
-<translation id="1477301030751268706">Cache Token API Identitas</translation>
 <translation id="1478340334823509079">Detail: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Penginstalan tidak diaktifkan</translation>
 <translation id="1483493594462132177">Kirim</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Setelan keamanan sistem</translation>
 <translation id="2091887806945687916">Suara</translation>
 <translation id="2097372108957554726">Anda perlu masuk ke Chrome untuk mendaftarkan perangkat baru</translation>
-<translation id="2098305189700762159">Tidak Ditemukan</translation>
 <translation id="2099172618127234427">Anda mengaktifkan fitur debug Chrome OS yang akan menyiapkan daemon sshd dan memungkinkan booting dari perangkat USB.</translation>
 <translation id="2099686503067610784">Hapus sertifikat server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Login Otomatis</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Akses Asisten setiap kali Anda mengucapkan "Ok Google"</translation>
 <translation id="2387458720915042159">Jenis sambungan proxy</translation>
 <translation id="2391419135980381625">Font standar</translation>
-<translation id="2391762656119864333">Cabut</translation>
 <translation id="2392369802118427583">Aktifkan</translation>
 <translation id="2394566832561516196">Setelan akan dihapus pada pemuatan ulang berikutnya.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> berhasil didaftarkan untuk pengelolaan perusahaan, namun gagal mengirimkan informasi lokasi dan asetnya. Masukkan informasi ini secara manual dari Konsol Admin untuk perangkat ini.</translation>
@@ -1955,7 +1951,6 @@
 <translation id="3894123633473837029">Sertakan histori Asisten terbaru melalui Sherlog. Informasi ini mencakup identitas, lokasi, dan info debug Anda <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Tambah folder</translation>
 <translation id="389589731200570180">Berbagi dengan tamu</translation>
-<translation id="3898521660513055167">Status Token</translation>
 <translation id="389901847090970821">Pilih keyboard</translation>
 <translation id="3899879303189199559">Offline selama lebih dari satu tahun</translation>
 <translation id="3900966090527141178">Ekspor sandi</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">Uninstal aplikasi?</translation>
 <translation id="5235750401727657667">Ganti halaman yang ditampilkan saat membuka tab baru</translation>
 <translation id="5238278114306905396">Aplikasi "<ph name="EXTENSION_NAME" />" dihapus secara otomatis.</translation>
-<translation id="5238369540257804368">Cakupan</translation>
 <translation id="5241128660650683457">Membaca semua data pada situs web yang Anda kunjungi</translation>
 <translation id="5242724311594467048">Aktifkan "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Coba lagi setelah beberapa saat</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">Hard fault</translation>
 <translation id="5877064549588274448">Saluran diubah. Mulai ulang perangkat Anda untuk menerapkan perubahan.</translation>
 <translation id="5877584842898320529">Printer yang dipilih tidak tersedia atau tidak terinstal dengan benar. <ph name="BR" /> Periksa printer atau coba pilih printer lain.</translation>
-<translation id="5880247576487732437">Token Tersedia</translation>
 <translation id="5882919346125742463">Jaringan yang Dikenal</translation>
 <translation id="5884474295213649357">Tab ini terhubung dengan perangkat USB.</translation>
 <translation id="5885324376209859881">Kelola setelan media...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">Masukan ID aplikasi atau URL toko web</translation>
 <translation id="804786196054284061">Perjanjian Lisensi Pengguna Akhir</translation>
 <translation id="8049705080247101012">Google telah menandai "<ph name="EXTENSION_NAME" />" sebagai berbahaya dan penginstalannya telah dicegah</translation>
-<translation id="8049913480579063185">Nama Ekstensi</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 File</translation>
 <translation id="8053390638574070785">Muat Ulang Halaman Ini</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">Tempel dan Cocokkan Gaya</translation>
 <translation id="8449036207308062757">Kelola penyimpanan</translation>
 <translation id="8452135315243592079">Kartu SIM tidak ada</translation>
-<translation id="845627346958584683">Waktu Kedaluwarsa</translation>
 <translation id="845702320058262034">Tidak dapat terhubung. Pastikan Bluetooth ponsel Anda diaktifkan.</translation>
 <translation id="8457451314607652708">Impor bookmark</translation>
 <translation id="8460336040822756677">Jika fitur Smart Lock untuk <ph name="DEVICE_TYPE" /> dinonaktifkan, perangkat Chrome tidak dapat dibuka menggunakan ponsel. Anda perlu mengetikkan sandi untuk membukanya.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">Komputer Anda berisi modul aman, yang digunakan untuk menerapkan banyak fitur keamanan kritis di Chrome OS. Buka Pusat Bantuan Chromebook untuk mempelajari lebih lanjut: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Pembaruan sistem tersedia. Bersiap mendownload...</translation>
 <translation id="8639047128869322042">Memeriksa software berbahaya...</translation>
-<translation id="8642171459927087831">Token Akses</translation>
 <translation id="8642900771896232685">2 detik</translation>
 <translation id="8642947597466641025">Perbesar Teks</translation>
 <translation id="8643418457919840804">Untuk melanjutkan, pilih salah satu opsi:</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 7437143b..f05e3ce 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Impossibile trovare il file PPD. Assicurati che il Chromebook sia online e riprova.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> è bloccato</translation>
-<translation id="1357589289913453911">ID estensione</translation>
 <translation id="1358741672408003399">Ortografia e grammatica</translation>
 <translation id="1361164813881551742">Aggiungi manualmente</translation>
 <translation id="1361655923249334273">Inutilizzato</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Questa operazione cancellerà tutti i dati sul token di sicurezza, incluso il suo PIN</translation>
 <translation id="1475502736924165259">Hai certificati su file che non rientrano in nessuna delle altre categorie</translation>
 <translation id="1476607407192946488">&amp;Impostazioni lingua</translation>
-<translation id="1477301030751268706">Cache token dell'API Identity</translation>
 <translation id="1478340334823509079">Dettagli: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">L'installazione non è attiva</translation>
 <translation id="1483493594462132177">Invia</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Impostazioni di sicurezza del sistema</translation>
 <translation id="2091887806945687916">Audio</translation>
 <translation id="2097372108957554726">Devi accedere a Chrome per registrare nuovi dispositivi</translation>
-<translation id="2098305189700762159">Non trovato</translation>
 <translation id="2099172618127234427">Stai attivando le funzioni di debug di Chrome OS, che a loro volta impostano il daemon sshd e abilitano l'avvio da unità USB.</translation>
 <translation id="2099686503067610784">Eliminare il certificato del server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Accedi all'assistente ogni volta che dici "Ok Google"</translation>
 <translation id="2387458720915042159">Tipo di connessione proxy</translation>
 <translation id="2391419135980381625">Carattere standard</translation>
-<translation id="2391762656119864333">Revoca</translation>
 <translation id="2392369802118427583">Attiva</translation>
 <translation id="2394566832561516196">Le impostazioni verranno cancellate al prossimo aggiornamento della pagina.</translation>
 <translation id="2395616325548404795">Il dispositivo <ph name="DEVICE_TYPE" /> è stato registrato correttamente per la gestione aziendale, ma l'invio delle relative informazioni su asset e posizione non è riuscito. Inserisci manualmente queste informazioni nella Console di amministrazione del dispositivo.</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">Includi la cronologia recente dell'assistente tramite Sherlog. La cronologia potrebbe includere informazioni sulla tua identità, sulla posizione e di debug. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Aggiungi cartella</translation>
 <translation id="389589731200570180">Condividi con gli ospiti</translation>
-<translation id="3898521660513055167">Stato token</translation>
 <translation id="389901847090970821">Seleziona la tastiera</translation>
 <translation id="3899879303189199559">Offline per più di un anno</translation>
 <translation id="3900966090527141178">Esportazione delle password</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">Disinstallare l'app?</translation>
 <translation id="5235750401727657667">Sostituzione della pagina visualizzata quando viene aperta una nuova scheda</translation>
 <translation id="5238278114306905396">L'applicazione "<ph name="EXTENSION_NAME" />" è stata rimossa automaticamente.</translation>
-<translation id="5238369540257804368">Ambiti</translation>
 <translation id="5241128660650683457">Lettura di tutti i dati sui siti web visitati</translation>
 <translation id="5242724311594467048">Attivare "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Riprova tra qualche istante</translation>
@@ -3228,7 +3222,6 @@
 <translation id="5870155679953074650">Errori hardware</translation>
 <translation id="5877064549588274448">Canale cambiato. Riavvia il dispositivo per applicare le modifiche.</translation>
 <translation id="5877584842898320529">La stampante selezionata non è disponibile o non è installata correttamente. <ph name="BR" /> Controlla la stampante o prova a selezionarne un'altra.</translation>
-<translation id="5880247576487732437">Token presente</translation>
 <translation id="5882919346125742463">Reti note</translation>
 <translation id="5884474295213649357">La scheda è connessa a un dispositivo USB.</translation>
 <translation id="5885324376209859881">Gestisci impostazioni dei dispositivi multimediali...</translation>
@@ -4691,7 +4684,6 @@
 <translation id="8045923671629973368">Inserisci l'ID applicazione o l'URL del webstore</translation>
 <translation id="804786196054284061">Contratto di licenza con l'utente finale</translation>
 <translation id="8049705080247101012">Google ha contrassegnato l'estensione "<ph name="EXTENSION_NAME" />" come dannosa ed è stata impedita l'installazione</translation>
-<translation id="8049913480579063185">Nome estensione</translation>
 <translation id="8050038245906040378">Firma codice commerciale Microsoft</translation>
 <translation id="8053278772142718589">File PKCS #12</translation>
 <translation id="8053390638574070785">Ricarica questa pagina</translation>
@@ -4941,7 +4933,6 @@
 <translation id="8449008133205184768">Incolla e mantieni lo stile</translation>
 <translation id="8449036207308062757">Gestisci spazio di archiviazione</translation>
 <translation id="8452135315243592079">Scheda SIM mancante</translation>
-<translation id="845627346958584683">Data di scadenza</translation>
 <translation id="845702320058262034">Impossibile stabilire una connessione. Assicurati che il Bluetooth del telefono sia attivo.</translation>
 <translation id="8457451314607652708">Importa Preferiti</translation>
 <translation id="8460336040822756677">Se disattivi Smart Lock per <ph name="DEVICE_TYPE" />, non puoi sbloccare i tuoi dispositivi Chrome utilizzando il telefono. Dovrai digitare la password.</translation>
@@ -5055,7 +5046,6 @@
 <translation id="8637542770513281060">Il computer contiene un modulo per la sicurezza che viene utilizzato per implementare in Chrome OS molte funzionalità di sicurezza fondamentali. Per ulteriori informazioni, visita il Centro assistenza Chromebook all'indirizzo: https://support.google.com/chromebook/?p=sm.</translation>
 <translation id="8637688295594795546">Aggiornamento del sistema disponibile. Preparazione per il download in corso…</translation>
 <translation id="8639047128869322042">Controllo della presenza di software dannoso...</translation>
-<translation id="8642171459927087831">Token di accesso</translation>
 <translation id="8642900771896232685">2 secondi</translation>
 <translation id="8642947597466641025">Ingrandisci le dimensioni del testo</translation>
 <translation id="8643418457919840804">Per continuare, scegli un'opzione:</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 239ddad..f342ea8 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">‏אי אפשר למצוא קובץ PPD. יש לוודא כי ה-Chromebook מחובר לרשת ולנסות שוב.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> חסום</translation>
-<translation id="1357589289913453911">מזהה תוסף</translation>
 <translation id="1358741672408003399">איות ודקדוק</translation>
 <translation id="1361164813881551742">הוסף ידנית</translation>
 <translation id="1361655923249334273">לא בשימוש</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">הפעולה הזו תמחק את כל הנתונים במפתח האבטחה, כולל קוד האימות שלו</translation>
 <translation id="1475502736924165259">יש לך אישורים בקובץ שאינם מתאימים לאף אחת מהקטגוריות האחרות</translation>
 <translation id="1476607407192946488">הגד&amp;רות שפה</translation>
-<translation id="1477301030751268706">‏מטמון של אסימון ממשק API של זהות</translation>
 <translation id="1478340334823509079">פרטים: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ההתקנה אינה מופעלת</translation>
 <translation id="1483493594462132177">שלח</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">הגדרה של אבטחת מערכת</translation>
 <translation id="2091887806945687916">צליל</translation>
 <translation id="2097372108957554726">‏עליך להיכנס מחדש ל-Chrome כדי לרשום מכשירים חדשים</translation>
-<translation id="2098305189700762159">לא נמצא</translation>
 <translation id="2099172618127234427">‏אתה מאפשר תכונות ניפוי באגים במערכת ההפעלה של Chrome שיגדירו sshd daemon ויאפשרו אתחול מכונני USB.</translation>
 <translation id="2099686503067610784">למחוק את אישור השרת "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">‏גישה אל ה-Assistant בכל פעם שנאמר הביטוי "Ok Google"</translation>
 <translation id="2387458720915042159">‏סוג חיבור לשרת proxy</translation>
 <translation id="2391419135980381625">גופן רגיל</translation>
-<translation id="2391762656119864333">בטל</translation>
 <translation id="2392369802118427583">הפעל</translation>
 <translation id="2394566832561516196">ההגדרות יימחקו בפעם הבאה שתבוצה טעינה מחדש.</translation>
 <translation id="2395616325548404795">רישום המכשיר שלך <ph name="DEVICE_TYPE" /> לניהול ארגוני הסתיים בהצלחה, אך השליחה של פרטי הנכס והמיקום שלו נכשלה. יש להזין את המידע הזה ידנית במסוף הניהול של המכשיר.</translation>
@@ -1954,7 +1950,6 @@
 <translation id="3894123633473837029">‏הדוח יכלול את ההיסטוריה של Assistant מהזמן האחרון דרך Sherlog. הפרטים עשויים לכלול את הזהות והמיקום שלך, כמו גם מידע על תוצאות ניפוי באגים. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">הוספת תיקייה</translation>
 <translation id="389589731200570180">שיתוף עם אורחים</translation>
-<translation id="3898521660513055167">סטטוס אסימון</translation>
 <translation id="389901847090970821">בחירת מקלדת</translation>
 <translation id="3899879303189199559">לא מקוונת במשך יותר משנה</translation>
 <translation id="3900966090527141178">ייצוא סיסמאות</translation>
@@ -2790,7 +2785,6 @@
 <translation id="5235050375939235066">להסיר את התקנת האפליקציה?</translation>
 <translation id="5235750401727657667">החלפת הדף שמוצג בפתיחה של כרטיסייה חדשה</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>
 <translation id="5243522832766285132">צריך לנסות שוב בעוד כמה רגעים</translation>
@@ -3229,7 +3223,6 @@
 <translation id="5870155679953074650">שגיאות חמורות</translation>
 <translation id="5877064549588274448">הערוץ שונה. הפעל מחדש את המכשיר להחלת השינויים.</translation>
 <translation id="5877584842898320529">המדפסת שבחרת אינה זמינה או שאינה מותקנת כראוי. <ph name="BR" /> יש לבדוק את המדפסת או לנסות לבחור מדפסת אחרת.</translation>
-<translation id="5880247576487732437">אסימון קיים</translation>
 <translation id="5882919346125742463">רשתות מוכרות</translation>
 <translation id="5884474295213649357">‏הכרטיסייה הזו מחוברת להתקן USB.</translation>
 <translation id="5885324376209859881">נהל הגדרות מדיה...</translation>
@@ -4691,7 +4684,6 @@
 <translation id="8045923671629973368">הזנה של מזהה יישום או כתובת אתר של חנות אינטרנט</translation>
 <translation id="804786196054284061">הסכם רישיון למשתמש קצה</translation>
 <translation id="8049705080247101012">‏Google סימנה את "<ph name="EXTENSION_NAME" />" כזדוני, וההתקנה נמנעה</translation>
-<translation id="8049913480579063185">שם תוסף</translation>
 <translation id="8050038245906040378">‏חתימת קוד מסחרי של Microsoft</translation>
 <translation id="8053278772142718589">‏קבצים של PKCS #12</translation>
 <translation id="8053390638574070785">טען דף זה מחדש</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">הדבק והתאם סגנון</translation>
 <translation id="8449036207308062757">נהל אחסון</translation>
 <translation id="8452135315243592079">‏כרטיס SIM חסר</translation>
-<translation id="845627346958584683">מועד תפוגה</translation>
 <translation id="845702320058262034">‏לא ניתן להתחבר. יש לוודא שה-Bluetooth של הטלפון מופעל.</translation>
 <translation id="8457451314607652708">יבא סימניות</translation>
 <translation id="8460336040822756677">‏אם תשבית את Smart Lock‏ ב-<ph name="DEVICE_TYPE" />, לא תוכל לבטל את נעילת מכשירי ה-Chrome שלך באמצעות הטלפון, ותצטרך להזין את הסיסמה.</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">‏המחשב שלך מכיל מודול מאובטח המשמש ליישום תכונות אבטחה קריטיות רבות ב-Chrome OS. היכנס למרכז העזרה של Chromebook כדי לקבל מידע נוסף: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">עדכון מערכת זמין. מתכונן להוריד…</translation>
 <translation id="8639047128869322042">מחפש תוכנות מזיקות...</translation>
-<translation id="8642171459927087831">אסימון גישה</translation>
 <translation id="8642900771896232685">שתי שניות</translation>
 <translation id="8642947597466641025">הגדל טקסט</translation>
 <translation id="8643418457919840804">כדי להמשיך יש לבחור אפשרות:</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 5b2955cf..7cf144e 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD が見つかりません。Chromebook がオンラインになっていることを確認して、もう一度お試しください。</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> はブロックされています</translation>
-<translation id="1357589289913453911">拡張機能 ID</translation>
 <translation id="1358741672408003399">スペルと文法</translation>
 <translation id="1361164813881551742">手動で追加</translation>
 <translation id="1361655923249334273">使用されていない</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">セキュリティ キーに保存されているすべてのデータ(PIN を含む)が消去されます</translation>
 <translation id="1475502736924165259">他のどのカテゴリにも適合しない証明書がファイルに格納されています</translation>
 <translation id="1476607407192946488">言語設定(&amp;L)</translation>
-<translation id="1477301030751268706">Identity API トークン キャッシュ</translation>
 <translation id="1478340334823509079">詳細: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">インストールが有効になっていません</translation>
 <translation id="1483493594462132177">送信</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">システム セキュリティの設定</translation>
 <translation id="2091887806945687916">音声</translation>
 <translation id="2097372108957554726">新しいデバイスを登録するには、Chrome にログインする必要があります</translation>
-<translation id="2098305189700762159">見つかりませんでした</translation>
 <translation id="2099172618127234427">Chrome OS デバッグ機能を有効にしています。この機能を有効にすると、sshd デーモンが設定され USB デバイスからの起動が可能になります。</translation>
 <translation id="2099686503067610784">サーバー証明書「<ph name="CERTIFICATE_NAME" />」を削除しますか?</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">「OK Google」と話すといつでもアシスタントにアクセスできます</translation>
 <translation id="2387458720915042159">プロキシ接続タイプ</translation>
 <translation id="2391419135980381625">標準フォント</translation>
-<translation id="2391762656119864333">取り消し</translation>
 <translation id="2392369802118427583">有効にする</translation>
 <translation id="2394566832561516196">設定は次の再読み込みで消去されます。</translation>
 <translation id="2395616325548404795">この <ph name="DEVICE_TYPE" /> は組織の管理対象として登録されましたが、アセットと位置情報を送信できませんでした。このデバイスの管理コンソールで、この情報を手動で入力してください。</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Sherlog から最近のアシスタント履歴を含める。これには、ID、位置情報、デバッグ情報などが含まれる可能性があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">フォルダの追加</translation>
 <translation id="389589731200570180">ゲストと共有</translation>
-<translation id="3898521660513055167">トークンのステータス</translation>
 <translation id="389901847090970821">キーボードを選択</translation>
 <translation id="3899879303189199559">1 年以上オフライン</translation>
 <translation id="3900966090527141178">パスワードのエクスポート</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">アプリをアンインストールしますか?</translation>
 <translation id="5235750401727657667">新しいタブを開いたときの表示ページを変更する</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>
 <translation id="5243522832766285132">しばらくしてからもう一度お試しください</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">ハードの障害数</translation>
 <translation id="5877064549588274448">チャンネルが変更されました。変更を適用するには、デバイスを再起動してください。</translation>
 <translation id="5877584842898320529">選択したプリンタは利用できないか、正しくインストールされていません。<ph name="BR" />プリンタを確認するか、別のプリンタを選択してみてください。</translation>
-<translation id="5880247576487732437">トークンあり</translation>
 <translation id="5882919346125742463">既知のネットワーク</translation>
 <translation id="5884474295213649357">このタブは USB デバイスに接続されています。</translation>
 <translation id="5885324376209859881">メディア設定を管理...</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">アプリケーション ID またはウェブストアの URL を入力します</translation>
 <translation id="804786196054284061">エンドユーザー使用許諾契約</translation>
 <translation id="8049705080247101012">「<ph name="EXTENSION_NAME" />」は、不正な拡張機能として認識されているためインストールされませんでした</translation>
-<translation id="8049913480579063185">拡張機能名</translation>
 <translation id="8050038245906040378">Microsoft 商用コード署名</translation>
 <translation id="8053278772142718589">PKCS #12 ファイル</translation>
 <translation id="8053390638574070785">ページを再読み込み</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">ペーストしてスタイルを合わせる</translation>
 <translation id="8449036207308062757">ストレージを管理</translation>
 <translation id="8452135315243592079">SIM カードがありません</translation>
-<translation id="845627346958584683">有効期限</translation>
 <translation id="845702320058262034">接続できません。スマートフォンの Bluetooth がオンになっていることを確認してください。</translation>
 <translation id="8457451314607652708">ブックマークをインポート</translation>
 <translation id="8460336040822756677">Smart Lock for <ph name="DEVICE_TYPE" /> を無効にすると、スマートフォンを使って Chrome デバイスのロックを解除することはできなくなり、パスワードの入力が必要になります。</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">ご使用のパソコンにはセキュア モジュールが組み込まれています。これは Chrome OS の多くの重要なセキュリティ機能を実装するために使用されます。詳しくは Chromebook ヘルプセンター(https://support.google.com/chromebook/?p=sm)をご覧ください。</translation>
 <translation id="8637688295594795546">システムのアップデートが見つかりました。ダウンロードの準備をしています...</translation>
 <translation id="8639047128869322042">有害なソフトウェアを確認しています...</translation>
-<translation id="8642171459927087831">アクセス トークン</translation>
 <translation id="8642900771896232685">2秒</translation>
 <translation id="8642947597466641025">テキストを拡大する</translation>
 <translation id="8643418457919840804">続行するには次のいずれかを選択してください。</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 12923a8..ae7c7b1f 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ Chromebook ಆನ್‌ಲೈನ್‌ನಲ್ಲಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಂಡು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
-<translation id="1357589289913453911">ವಿಸ್ತರಣೆ ಐಡಿ</translation>
 <translation id="1358741672408003399">ಕಾಗುಣಿತ ಮತ್ತು ವ್ಯಾಕರಣ</translation>
 <translation id="1361164813881551742">ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸು</translation>
 <translation id="1361655923249334273">ಬಳಸದ</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">ಸುರಕ್ಷತಾ ಕೀಯ ಪಿನ್ ಸೇರಿದಂತೆ, ಅದರಲ್ಲಿರುವ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸಿಹಾಕುತ್ತದೆ</translation>
 <translation id="1475502736924165259">ಇತರ ಯಾವುದೇ ವರ್ಗಗಳಿಗೆ ಹೊಂದದಿರುವಂತಹ ಫೈಲ್‌ನಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ನೀವು ಹೊಂದಿರುವಿರಿ</translation>
 <translation id="1476607407192946488">&amp;ಭಾಷೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
-<translation id="1477301030751268706">ಗುರುತಿಸುವಿಕೆ API ಟೋಕನ್ ಕ್ಯಾಶ್</translation>
 <translation id="1478340334823509079">ವಿವರಗಳು: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ಇನ್‌ಸ್ಟಾಲೇಶನ್ ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ</translation>
 <translation id="1483493594462132177">ಕಳುಹಿಸು</translation>
@@ -729,7 +727,6 @@
 <translation id="2090876986345970080">ಸಿಸ್ಟಂ ಸುರಕ್ಷತಾ ಸೆಟ್ಟಿಂಗ್</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
 <translation id="2097372108957554726">ಹೊಸ ಸಾಧನಗಳನ್ನು ನೋಂದಾಯಿಸಲು ನೀವು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ</translation>
-<translation id="2098305189700762159">ದೊರೆಯಲಿಲ್ಲ</translation>
 <translation id="2099172618127234427">sshd daemon ಅನ್ನು ಹೊಂದಿಸುವಂತಹ Chrome OS ಡೀಬಗ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತಿರುವಿರಿ ಮತ್ತು USB ಡ್ರೈವ್‌ಗಳಿಂದ ಬೂಟ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಅಳಿಸುವುದೆ?</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
@@ -879,7 +876,7 @@
 <translation id="2294358108254308676">ನೀವು <ph name="PRODUCT_NAME" /> ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="2297705863329999812">ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಹುಡುಕಿ</translation>
 <translation id="2300383962156589922"><ph name="APP_NAME" /> ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ</translation>
-<translation id="2300800387751317588">ನಿಮ್ಮ ಕುಕೀಗಳ ತೆರವುಗೊಳಿಸುವಿಕೆ ಪ್ರಾರಂಭದಲ್ಲಿರುವುದರಿಂದ ಸಿಂಕ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು <ph name="COOKIE_SETTINGS_LINK" /> ಅನ್ನು ಬದಲಾಯಿಸಿ.</translation>
+<translation id="2300800387751317588">ಸ್ಟಾರ್ಟ್ ಅಪ್‍ನಲ್ಲಿ ನೀವು ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸುವ ಕಾರಣ ಸಿಂಕ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು <ph name="COOKIE_SETTINGS_LINK" /> ಅನ್ನು ಬದಲಾಯಿಸಿ.</translation>
 <translation id="2301382460326681002">ವಿಸ್ತರಣೆ ಮೂಲ ಡೈರೆಕ್ಟರಿ ಅಮಾನ್ಯವಾಗಿದೆ.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳನ್ನು ವಿನಂತಿಸಿದ್ದಾರೆ.</translation>
 <translation id="2307462900900812319">ನೆಟ್‌ವರ್ಕ್ ಕಾನ್ಫಿಗರ್ ಮಾಡು</translation>
@@ -941,7 +938,6 @@
 <translation id="2386926718981642523">ಯಾವಾಗ ಬೇಕಾದರೂ "Ok Google" ಎಂದು ಹೇಳಿ ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
 <translation id="2387458720915042159">ಪ್ರಾಕ್ಸಿ ಪ್ರಕಾರ ಸಂಪರ್ಕ</translation>
 <translation id="2391419135980381625">ರೂಢಿಯಲ್ಲಿರುವ ಫಾಂಟ್</translation>
-<translation id="2391762656119864333">ಹಿಂತೆಗೆದುಕೊ</translation>
 <translation id="2392369802118427583">ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="2394566832561516196">ನಂತರದ ಮರುಲೋಡ್‌ನಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುವುದು.</translation>
 <translation id="2395616325548404795">ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆಗಾಗಿ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಲಾಗಿದೆ, ಆದರೆ ಅದರ ಸ್ವತ್ತು ಹಾಗೂ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಕಳುಹಿಸಲು ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಈ ಸಾಧನಕ್ಕಾಗಿ ನಿಮ್ಮ ನಿರ್ವಾಹಕ ಕನ್ಸೋಲ್‌ನಿಂದ ಈ ಮಾಹಿತಿಯನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಮೂದಿಸಿ.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Sherlog ಮೂಲಕ ಇತ್ತೀಚಿನ ಅಸಿಸ್ಟೆಂಟ್ ಇತಿಹಾಸವನ್ನು ಸೇರಿಸಿ. ಇದು ನಿಮ್ಮ ಗುರುತು, ಸ್ಥಳ ಮತ್ತು ಡೀಬಗ್ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">ಫೋಲ್ಡರ್ ಸೇರಿಸು</translation>
 <translation id="389589731200570180">ಅತಿಥಿಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ</translation>
-<translation id="3898521660513055167">ಟೋಕನ್ ಸ್ಥಿತಿ</translation>
 <translation id="389901847090970821">ಕೀಬೋರ್ಡ್ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="3899879303189199559">ಒಂದು ವರ್ಷ‌ಕ್ಕಿಂತಲೂ ಹೆಚ್ಚು ಕಾಲ ಆಫ್‌ಲೈನ್</translation>
 <translation id="3900966090527141178">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಿ</translation>
@@ -2285,7 +2280,7 @@
 <translation id="4412698727486357573">ಸಹಾಯ ಕೇಂದ್ರ</translation>
 <translation id="44141919652824029">ನಿಮ್ಮ ಲಗತ್ತಿಸಲಾದ USB ಸಾಧನಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಲು "<ph name="APP_NAME" />" ಅನ್ನು ಅನುಮತಿಸಬೇಕೆ?</translation>
 <translation id="4414232939543644979">ಹೊಸ &amp;ಅಜ್ಞಾತ ವಿಂಡೋ</translation>
-<translation id="4414386768539506503">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಲು ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮಗೆ ಪಿನ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ನೀವು ಭದ್ರತೆ ಕೀ ಅನ್ನು ಮರುಹೊಂದಿಸುವ ಅಗತ್ಯವಿದೆ.</translation>
+<translation id="4414386768539506503">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಲು ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮಗೆ ಪಿನ್ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ನೀವು ಭದ್ರತೆ ಕೀಯನ್ನು ಮರುಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="4415245286584082850">ಯಾವುದೇ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ಹೊಸ ಟ್ಯಾಬ್ ಒಂದರಲ್ಲಿ ಸಹಾಯ ಕೇಂದ್ರದ ಲೇಖನವೊಂದನ್ನು ತೆರೆಯಿರಿ.</translation>
 <translation id="4415276339145661267">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="4415748029120993980">SECG ಎಲಿಪ್ಟಿಕ್ ಕರ್ವ್ secp384r1 (aka NIST P-384)</translation>
@@ -2794,7 +2789,6 @@
 <translation id="5235050375939235066">ಆ್ಯಪ್ ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುವುದೇ?</translation>
 <translation id="5235750401727657667">ಹೊಸ ಟ್ಯಾಬ್ ತೆರೆದಿರುವಾಗ ಬದಲಾಯಿಸಿದ ಪುಟವನ್ನು ನೀವು ನೋಡಿ</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>
 <translation id="5243522832766285132">ದಯವಿಟ್ಟು ಕೆಲವು ಕ್ಷಣಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
@@ -2972,7 +2966,7 @@
 <translation id="5496587651328244253">ವ್ಯವಸ್ಥಿತಗೊಳಿಸಿ</translation>
 <translation id="549673810209994709">ಈ ಪುಟವನ್ನು ಅನುವಾದಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="5499313591153584299">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಈ ಫೈಲ್ ಅಪಾಯಕಾರಿ ಆಗಿರಬಹುದು.</translation>
-<translation id="5500345327355928305">ಚಾರ್ಜಿಂಗ್ ಮತ್ತ ಕಾರ್ಯಕ್ಷಮತೆ ಸಮಸ್ಯೆಗಳನ್ನು ತಡೆಯಲು, ಹೊಂದಾಣಿಕೆಯಾಗುವ OEM ಅಥವಾ USB ಟೈಪ್-C ಪವರ್ ಅಡಾಪ್ಟರ್ ಅನ್ನು ಬಳಸಿ.</translation>
+<translation id="5500345327355928305">ಚಾರ್ಜಿಂಗ್ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಸಮಸ್ಯೆಗಳನ್ನು ತಡೆಯಲು, ಹೊಂದಾಣಿಕೆಯಾಗುವ OEM ಅಥವಾ USB ಟೈಪ್-C ಪವರ್ ಅಡಾಪ್ಟರ್ ಅನ್ನು ಬಳಸಿ.</translation>
 <translation id="5502500733115278303">Firefox ಇಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ</translation>
 <translation id="5507756662695126555">ನಿರಾಕರಣ-ರಹಿತ</translation>
 <translation id="5509693895992845810">&amp;ಇದರಂತೆ ಉಳಿಸು...</translation>
@@ -3234,7 +3228,6 @@
 <translation id="5870155679953074650">ಹಾರ್ಡ್ ಫಾಲ್ಟ್ಸ್</translation>
 <translation id="5877064549588274448">ಚಾನಲ್ ಬದಲಾಗಿದೆ. ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation>
 <translation id="5877584842898320529">ಆಯ್ಕೆಮಾಡಿದ ಪ್ರಿಂಟರ್ ಲಭ್ಯವಿಲ್ಲ ಅಥವಾ ಸರಿಯಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿಲ್ಲ. <ph name="BR" /> ನಿಮ್ಮ ಪ್ರಿಂಟರ್ ಪರೀಕ್ಷಿಸಿ ಅಥವಾ ಬೇರೊಂದು ಪ್ರಿಂಟರ್ ಆಯ್ಕೆಮಾಡಿ.</translation>
-<translation id="5880247576487732437">ಟೋಕನ್ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ</translation>
 <translation id="5882919346125742463">ತಿಳಿದಿರುವ ನೆಟ್‌ವರ್ಕ್‌ಗಳು</translation>
 <translation id="5884474295213649357">ಈ ಟ್ಯಾಬ್ USB ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ.</translation>
 <translation id="5885324376209859881">ಮಾಧ್ಯಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ...</translation>
@@ -3945,7 +3938,7 @@
 <translation id="6974609594866392343">ಆಫ್‌ಲೈನ್ ಡೆಮೊ ಮೋಡ್</translation>
 <translation id="6977381486153291903">ಫರ್ಮ್‌ವೇರ್ ಮರುಪರಿಶೀಲನೆ</translation>
 <translation id="6978121630131642226">ಹುಡುಕಾಟ ಇಂಜಿನ್‌ಗಳು</translation>
-<translation id="6979044105893951891">ನಿರ್ವಹಿಸಿದ ಅತಿಥಿ ಸೆಷನ್‌ಗಳನ್ನು ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿ ಮತ್ತು ನಿರ್ಗಮಿಸಿ</translation>
+<translation id="6979044105893951891">ನಿರ್ವಹಿಸಿದ ಅತಿಥಿ ಸೆಷನ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಅವುಗಳಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="6979440798594660689">ಮ್ಯೂಟ್ (ಡಿಫಾಲ್ಟ್)</translation>
 <translation id="6979737339423435258">ಎಲ್ಲ ಸಮಯ</translation>
 <translation id="6981982820502123353">ಪ್ರವೇಶ</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">ಅಪ್ಲಿಕೇಶನ್ ಐಡಿ ಅಥವಾ ವೆಬ್‌ಅಂಗಡಿ URL ನಮೂದಿಸಿ</translation>
 <translation id="804786196054284061">ಅಂತಿಮ ಬಳಕೆದಾರ ಪರವಾನಗಿ ಒಪ್ಪಂದ</translation>
 <translation id="8049705080247101012"><ph name="EXTENSION_NAME" /> ದೋಷಪೂರಿತವೆಂದು Google ಫ್ಲ್ಯಾಗ್ ಮಾಡಿದೆ ಹಾಗೂ ಅದರ ಇನ್‌ಸ್ಟಾಲೇಶನ್ ಅನ್ನು ತಡೆಗಟ್ಟಲಾಗಿದೆ</translation>
-<translation id="8049913480579063185">ವಿಸ್ತರಣೆಯ ಹೆಸರು</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 ಫೈಲ್‌ಗಳು</translation>
 <translation id="8053390638574070785">ಈ ಪುಟವನ್ನು ರೀಲೋಡ್ ಮಾಡಿ</translation>
@@ -4729,7 +4721,7 @@
     <ph name="BEGIN_PARAGRAPH4" />ಬ್ಯಾಕಪ್‌ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಡ್ರೈವ್‌ ಸಂಗ್ರಹಣೆ ಕೋಟಾದಲ್ಲಿ ಪರಿಗಣಿಸಲಾಗುವುದಿಲ್ಲ.<ph name="END_PARAGRAPH4" />
     <ph name="BEGIN_PARAGRAPH5" />ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಈ ಸೇವೆಯನ್ನು ಆಫ್ ಮಾಡಬಹುದು.<ph name="END_PARAGRAPH5" /></translation>
 <translation id="80974698889265265">ಪಿನ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ</translation>
-<translation id="809792523045608178"><ph name="IDS_SHORT_PRODUCT_NAME" /> ನಿಮ್ಮ ವಿಸ್ತರಣೆಯಿಂದ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
+<translation id="809792523045608178">ವಿಸ್ತರಣೆಯೊಂದರಿಂದ <ph name="IDS_SHORT_PRODUCT_NAME" />, ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
 <translation id="8099495042588009598">ಇನ್ನಷ್ಟು ಅನುಮತಿಗಳು</translation>
 <translation id="8101987792947961127">ಮುಂದಿನ ರೀಬೂಟ್‌ನಲ್ಲಿ ಪವರ್‌ವಾಷ್ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="8102159139658438129">ನಿಮ್ಮ ಸಂಪರ್ಕಿತ ಫೋನ್‌ಗಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ನೋಡಲು, <ph name="LINK_BEGIN" />ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ<ph name="LINK_END" /> ಹೋಗಿ</translation>
@@ -4950,7 +4942,6 @@
 <translation id="8449008133205184768">ಅಂಟಿಸು  ಮತ್ತು  ಶೈಲಿ ಹೊಂದಿಸು</translation>
 <translation id="8449036207308062757">ಸಂಗ್ರಹಣೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="8452135315243592079">ಕಾಣೆಯಾಗಿರುವ ಸಿಮ್ ಕಾರ್ಡ್</translation>
-<translation id="845627346958584683">ಅವಧಿ ಮೀರುವ ಸಮಯ</translation>
 <translation id="845702320058262034">ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಫೋನ್‌ನ ಬ್ಲೂಟೂತ್ ಆನ್‌ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
 <translation id="8457451314607652708">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಿ</translation>
 <translation id="8460336040822756677"><ph name="DEVICE_TYPE" /> ಗೆ Smart Lock ಅನ್ನು ನೀವು ಆಫ್ ಮಾಡಿದರೆ, ನಿಮ್ಮ ಫೋನ್ ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ Chrome 
@@ -5066,7 +5057,6 @@
 <translation id="8637542770513281060">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್, ಸುಭದ್ರ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಹೊಂದಿದೆ. Chrome OS ನಲ್ಲಿ ಹಲವು ಪ್ರಮುಖ ಭದ್ರತಾ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಇದರ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಲು Chromebook ಸಹಾಯ ಕೇಂದ್ರಕ್ಕೆ ಭೇಟಿ ನೀಡಿ: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">ಸಿಸ್ಟಂ ಅಪ್‌ಡೇಟ್‌‌ ಲಭ್ಯವಿದೆ. ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಿದ್ಧಗೊಳ್ಳುತ್ತಿದೆ...</translation>
 <translation id="8639047128869322042">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
-<translation id="8642171459927087831">ಪ್ರವೇಶ ಟೋಕನ್</translation>
 <translation id="8642900771896232685">2 ಸೆಕೆಂಡುಗಳು</translation>
 <translation id="8642947597466641025">ಪಠ್ಯವನ್ನು ದೊಡ್ಡದಾಗಿ ಮಾಡಿಕೊಳ್ಳಿ</translation>
 <translation id="8643418457919840804">ಮುಂದುವರಿಸಲು, ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ:</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index a0238be5..949bad4 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD를 찾을 수 없습니다. Chromebook이 온라인 상태인지 확인하고 다시 시도해 보세요.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" />이(가) 차단되었습니다.</translation>
-<translation id="1357589289913453911">확장 프로그램 ID</translation>
 <translation id="1358741672408003399">영문 철자 및 문법</translation>
 <translation id="1361164813881551742">직접 추가</translation>
 <translation id="1361655923249334273">사용되지 않음</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">PIN을 포함하여 보안 키에 저장된 모든 데이터가 삭제됩니다.</translation>
 <translation id="1475502736924165259">모든 기타 카테고리에 맞지 않는 인증서가 등록되어 있습니다.</translation>
 <translation id="1476607407192946488">언어 설정(&amp;L)</translation>
-<translation id="1477301030751268706">Identity API 토큰 캐시</translation>
 <translation id="1478340334823509079">세부정보: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">설치하도록 설정되어 있지 않습니다</translation>
 <translation id="1483493594462132177">보내기</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">시스템 보안 설정</translation>
 <translation id="2091887806945687916">소리</translation>
 <translation id="2097372108957554726">새 기기를 등록하려면 Chrome에 로그인하세요.</translation>
-<translation id="2098305189700762159">찾을 수 없음</translation>
 <translation id="2099172618127234427">sshd 데몬을 설정하고 USB 드라이브에서 부팅하도록 사용 설정하는 Chrome OS 디버깅 기능을 사용 설정 중입니다.</translation>
 <translation id="2099686503067610784">서버 인증서 '<ph name="CERTIFICATE_NAME" />'을(를) 삭제하시겠습니까?</translation>
 <translation id="2100273922101894616">자동 로그인</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">"Ok Google"이라고 말할 때마다 어시스턴트에 액세스합니다.</translation>
 <translation id="2387458720915042159">프록시 연결 유형</translation>
 <translation id="2391419135980381625">표준 글꼴</translation>
-<translation id="2391762656119864333">취소</translation>
 <translation id="2392369802118427583">활성화</translation>
 <translation id="2394566832561516196">새로고침하면 설정이 삭제됩니다.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> 기기가 엔터프라이즈 관리용으로 등록되었지만 애셋과 위치 정보를 전송하지 못했습니다. 기기의 관리 콘솔에서 애셋과 위치 정보를 직접 입력하세요.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Sherlog를 통해 최근 어시스턴트 기록을 포함합니다. ID, 위치 및 디버그 정보가 포함될 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">폴더 추가</translation>
 <translation id="389589731200570180">게스트와 공유</translation>
-<translation id="3898521660513055167">토큰 상태</translation>
 <translation id="389901847090970821">키보드 선택</translation>
 <translation id="3899879303189199559">1년 이상 오프라인 상태</translation>
 <translation id="3900966090527141178">비밀번호 내보내기</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">앱을 제거하시겠습니까?</translation>
 <translation id="5235750401727657667">새 탭을 열 때 표시되는 페이지 변경</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>
 <translation id="5243522832766285132">잠시 후 다시 시도해 주세요.</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">하드 결함</translation>
 <translation id="5877064549588274448">채널이 변경되었습니다. 변경사항을 적용하려면 기기를 다시 시작하세요.</translation>
 <translation id="5877584842898320529">선택한 프린터가 사용할 수 없거나 제대로 설치되어 있지 않습니다. <ph name="BR" /> 프린터를 확인하거나 다른 프린터를 선택해 보세요.</translation>
-<translation id="5880247576487732437">유효한 토큰</translation>
 <translation id="5882919346125742463">알려진 네트워크</translation>
 <translation id="5884474295213649357">이 탭이 USB 기기에 연결되었습니다.</translation>
 <translation id="5885324376209859881">미디어 설정 관리...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">애플리케이션 ID 또는 웹 스토어 URL 입력</translation>
 <translation id="804786196054284061">최종 사용자 라이선스 계약</translation>
 <translation id="8049705080247101012">Google에서 '<ph name="EXTENSION_NAME" />'을(를) 악성 프로그램으로 분류했으며 설치가 금지되었습니다</translation>
-<translation id="8049913480579063185">확장 프로그램 이름</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 파일</translation>
 <translation id="8053390638574070785">페이지 새로고침</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">붙여넣고 스타일 일치시킴</translation>
 <translation id="8449036207308062757">저장용량 관리</translation>
 <translation id="8452135315243592079">SIM 카드 없음</translation>
-<translation id="845627346958584683">만료 시간</translation>
 <translation id="845702320058262034">연결할 수 없습니다. 휴대전화의 블루투스가 켜져 있는지 확인하세요.</translation>
 <translation id="8457451314607652708">북마크 가져오기</translation>
 <translation id="8460336040822756677"><ph name="DEVICE_TYPE" />용 Smart Lock을 사용 중지하면 휴대전화를 사용하여 Chrome 기기를 잠금 해제할 수 없으며 비밀번호를 입력해야 합니다.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">컴퓨터에 보안 모듈이 있습니다. 보안 모듈은 Chrome OS에서 여러 중요한 보안 기능을 구현하는 데 사용됩니다. 자세히 알아보려면 Chromebook 고객센터의 다음 페이지를 방문하세요. https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">시스템 업데이트 사용가능. 다운로드 준비 중…</translation>
 <translation id="8639047128869322042">유해한 소프트웨어 확인 중...</translation>
-<translation id="8642171459927087831">액세스 토큰</translation>
 <translation id="8642900771896232685">2초</translation>
 <translation id="8642947597466641025">텍스트 확대</translation>
 <translation id="8643418457919840804">계속하려면 옵션을 선택하세요.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index c7fe459..923d0a9 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207">„<ph name="PROVIDER_NAME" />“: „<ph name="NETWORK_NAME" />“</translation>
 <translation id="1353980523955420967">Nepavyko rasti PPD. Įsitikinkite, kad „Chromebook“ prijungtas, ir bandykite dar kartą.</translation>
 <translation id="1355466263109342573">„<ph name="PLUGIN_NAME" />“ užblokuotas</translation>
-<translation id="1357589289913453911">Plėtinio ID</translation>
 <translation id="1358741672408003399">Rašyba ir gramatika</translation>
 <translation id="1361164813881551742">Pridėti neautomatiškai</translation>
 <translation id="1361655923249334273">Nenaudota</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Taip bus ištrinti visi saugos rakte išsaugoti duomenys, įskaitant jo PIN kodą</translation>
 <translation id="1475502736924165259">Turite pateiktų sertifikatų, kurie neatitinka jokių kitų kategorijų</translation>
 <translation id="1476607407192946488">&amp;Kalbos nustatymai</translation>
-<translation id="1477301030751268706">Tapatybės API prieigos rakto talpykla</translation>
 <translation id="1478340334823509079">Išsami informacija: „<ph name="FILE_NAME" />“</translation>
 <translation id="1478607704480248626">Diegimas neįgalintas</translation>
 <translation id="1483493594462132177">Siųsti</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Sistemos saugos nustatymas</translation>
 <translation id="2091887806945687916">Garsas</translation>
 <translation id="2097372108957554726">Reikia prisijungti prie „Chrome“, kad būtų galima užregistruoti naujus įrenginius</translation>
-<translation id="2098305189700762159">Nerasta</translation>
 <translation id="2099172618127234427">Įgalinsite „Chrome“ OS derinimo funkcijas ir bus nustatyta „sshd daemon“, kad būtų galima paleisti programas iš atmintuko.</translation>
 <translation id="2099686503067610784">Ištrinti „<ph name="CERTIFICATE_NAME" />“ serverio sertifikatą?</translation>
 <translation id="2100273922101894616">Automatinis prisijungimas</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Pasiekite „Google Assistant“ bet kuriuo metu pasakę „Ok Google“</translation>
 <translation id="2387458720915042159">Tarpinio serverio ryšio tipas</translation>
 <translation id="2391419135980381625">Standartinis šriftas</translation>
-<translation id="2391762656119864333">Anuliuoti</translation>
 <translation id="2392369802118427583">Suaktyvinti</translation>
 <translation id="2394566832561516196">Nustatymai bus išvalyti kitą kartą iš naujo įkeliant.</translation>
 <translation id="2395616325548404795">„<ph name="DEVICE_TYPE" />“ sėkmingai užregistruotas kaip tvarkomas įmonėje, bet nepavyko išsiųsti jo išteklių ir vietovės informacijos. Įveskite šią informaciją neautomatiškai įrenginio skiltyje „Admin console“.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Įtraukti pastarąją Padėjėjo istoriją naudojant „Sherlog“. Gali būti įtraukta jūsų tapatybės, vietovės ir derinimo informacija. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Aplanko pridėjimas</translation>
 <translation id="389589731200570180">Bendrinti su svečiais</translation>
-<translation id="3898521660513055167">Prieigos rakto būsena</translation>
 <translation id="389901847090970821">Pasirinkti klaviatūrą</translation>
 <translation id="3899879303189199559">Neprijungta daugiau nei metus</translation>
 <translation id="3900966090527141178">Eksportuokite slaptažodžius</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Pašalinti programą?</translation>
 <translation id="5235750401727657667">Pakeisti puslapį, kuris rodomas atidarant naują skirtuką</translation>
 <translation id="5238278114306905396">Programa „<ph name="EXTENSION_NAME" />“ automatiškai pašalinta.</translation>
-<translation id="5238369540257804368">Apimtys</translation>
 <translation id="5241128660650683457">Skaityti visus duomenis svetainėse, kuriose apsilankote</translation>
 <translation id="5242724311594467048">Įgalinti „<ph name="EXTENSION_NAME" />“?</translation>
 <translation id="5243522832766285132">Po kelių minučių bandykite dar kartą</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Sunkūs gedimai</translation>
 <translation id="5877064549588274448">Kanalas pakeistas. Kad pritaikytumėte pakeitimus, iš naujo paleiskite įrenginį.</translation>
 <translation id="5877584842898320529">Pasirinktas spausdintuvas nepasiekiamas arba netinkamai įdiegtas. <ph name="BR" /> Patikrinkite spausdintuvą arba pabandykite pasirinkti kitą spausdintuvą.</translation>
-<translation id="5880247576487732437">Yra prieigos raktas</translation>
 <translation id="5882919346125742463">Žinomi tinklai</translation>
 <translation id="5884474295213649357">Šis skirtukas susietas su USB įrenginiu.</translation>
 <translation id="5885324376209859881">Valdyti medijos nustatymus...</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">Įveskite programos ID arba žiniatinklio parduotuvės URL</translation>
 <translation id="804786196054284061">Galutinio naudotojo licencijos sutartis</translation>
 <translation id="8049705080247101012">„Google“ pažymėjo plėtinį „<ph name="EXTENSION_NAME" />“ kaip kenkėjišką ir neleido jo įdiegti</translation>
-<translation id="8049913480579063185">Plėtinio pavadinimas</translation>
 <translation id="8050038245906040378">„Microsoft“ komercinio kodo pasirašymas</translation>
 <translation id="8053278772142718589">PKCS Nr. 12 failai</translation>
 <translation id="8053390638574070785">Iš naujo įkelti šį puslapį</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Įklijuoti ir atitikti stilių</translation>
 <translation id="8449036207308062757">Tvarkyti saugyklą</translation>
 <translation id="8452135315243592079">Nėra SIM kortelės</translation>
-<translation id="845627346958584683">Galiojimo laikas</translation>
 <translation id="845702320058262034">Nepavyko prisijungti. Patikrinkite, ar įjungtas telefono „Bluetooth“ ryšys.</translation>
 <translation id="8457451314607652708">Importuoti žymes</translation>
 <translation id="8460336040822756677">Jei išjungsite „Smart Lock“, skirtą „<ph name="DEVICE_TYPE" />“, negalėsite atrakinti „Chrome“ įrenginių naudodami telefoną. Turėsite įvesti slaptažodį.</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">Jūsų kompiuteryje yra saugus modulis, kuris naudojamas „Chrome“ OS įdiegiant daug svarbių saugos funkcijų. Jei norite sužinoti daugiau, apsilankykite „Chromebook“ pagalbos centre adresu https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Galimas sistemos naujinys. Ruošiamasi atsisiųsti...</translation>
 <translation id="8639047128869322042">Tikrinama, ar nėra kenkėjiškos programinės įrangos...</translation>
-<translation id="8642171459927087831">Prieigos raktas</translation>
 <translation id="8642900771896232685">2 sek.</translation>
 <translation id="8642947597466641025">Padidinti tekstą</translation>
 <translation id="8643418457919840804">Norėdami tęsti pasirinkite toliau pateiktą parinktį.</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 70bfbb77..887a89b5 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nevar atrast PPD failu. Pārbaudiet, vai jūsu Chromebook dators ir tiešsaistē, un mēģiniet vēlreiz.</translation>
 <translation id="1355466263109342573">Spraudnis <ph name="PLUGIN_NAME" /> ir bloķēts</translation>
-<translation id="1357589289913453911">Paplašinājuma ID</translation>
 <translation id="1358741672408003399">Pareizrakstība un gramatika</translation>
 <translation id="1361164813881551742">Pievienot manuāli</translation>
 <translation id="1361655923249334273">Neizmantots</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Tas izdzēsīs visus drošības atslēgas datus, ieskaitot tās PIN</translation>
 <translation id="1475502736924165259">Sistēmā ir sertifikāti, kas neiederas nevienā no citām kategorijām</translation>
 <translation id="1476607407192946488">&amp;Valodas iestatījumi</translation>
-<translation id="1477301030751268706">Identifikācijas datu API pilnvaru kešatmiņa</translation>
 <translation id="1478340334823509079">Detalizēta informācija: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalēšana nav iespējota</translation>
 <translation id="1483493594462132177">Sūtīt</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Sistēmas drošības iestatījumi</translation>
 <translation id="2091887806945687916">Signāls</translation>
 <translation id="2097372108957554726">Lai reģistrētu jaunas ierīces, jums ir jāpierakstās pārlūkā Chrome.</translation>
-<translation id="2098305189700762159">Nevar atrast</translation>
 <translation id="2099172618127234427">Jūs iespējojat operētājsistēmas Chrome OS atkļūdošanas funkcijas, kas iestatīs sshd dēmonu un iespējos palaišanu no USB diskiem.</translation>
 <translation id="2099686503067610784">Vai dzēst servera sertifikātu “<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Piekļūt Asistentam katru reizi, kad sakāt: “Ok Google”</translation>
 <translation id="2387458720915042159">Starpniekservera savienojuma veids</translation>
 <translation id="2391419135980381625">Standarta fonts</translation>
-<translation id="2391762656119864333">Atsaukt</translation>
 <translation id="2392369802118427583">Aktivizēt</translation>
 <translation id="2394566832561516196">Iestatījumi tiks notīrīti pēc nākamās atkārtotās ielādes.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> ierīce ir sekmīgi reģistrēta uzņēmuma pārvaldībai, taču neizdevās nosūtīt tās līdzekļu un atrašanās vietas informāciju. Lūdzu, manuāli ievadiet šo informāciju, izmantojot šīs ierīces administratora konsoli.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Iekļaut neseno Asistenta vēsturi, izmantojot Sherlog. Tādējādi var tikt iekļauta jūsu identitāte, atrašanās vieta un atkļūdošanas informācija. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation>
 <translation id="3894427358181296146">Mapes pievienošana</translation>
 <translation id="389589731200570180">Dalīšanās ar viesiem</translation>
-<translation id="3898521660513055167">Pilnvaras statuss</translation>
 <translation id="389901847090970821">Tastatūras atlasīšana</translation>
 <translation id="3899879303189199559">Bezsaistē ilgāk par gadu</translation>
 <translation id="3900966090527141178">Paroļu eksportēšana</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Vai atinstalēt lietotni?</translation>
 <translation id="5235750401727657667">Aizstāt lapu, kas tiek parādīta jaunā cilnē</translation>
 <translation id="5238278114306905396">Lietotne <ph name="EXTENSION_NAME" /> tika automātiski noņemta.</translation>
-<translation id="5238369540257804368">Tvērumi</translation>
 <translation id="5241128660650683457">Lasīt visus apmeklēto vietņu datus</translation>
 <translation id="5242724311594467048">Vai iespējot “<ph name="EXTENSION_NAME" />”?</translation>
 <translation id="5243522832766285132">Lūdzu, pēc brīža mēģiniet vēlreiz.</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Nopietnas kļūdas</translation>
 <translation id="5877064549588274448">Kanāls tika mainīts. Lai lietotu izmaiņas, restartējiet ierīci.</translation>
 <translation id="5877584842898320529">Atlasītais printeris nav pieejams vai nav instalēts pareizi. <ph name="BR" /> Pārbaudiet savu printeri vai pamēģiniet atlasīt citu printeri.</translation>
-<translation id="5880247576487732437">Marķieris pastāv</translation>
 <translation id="5882919346125742463">Zināmie tīkli</translation>
 <translation id="5884474295213649357">Šī cilne ir piesaistīta USB ierīcei.</translation>
 <translation id="5885324376209859881">Pārvaldīt multivides iestatījumus...</translation>
@@ -4696,7 +4689,6 @@
 <translation id="8045923671629973368">Ievadiet lietojumprogrammas ID vai interneta veikala URL</translation>
 <translation id="804786196054284061">Galalietotāja licences līgums</translation>
 <translation id="8049705080247101012">Google atzīmēja paplašinājumu <ph name="EXTENSION_NAME" /> kā ļaunprātīgu un nepieļāva instalēšanu.</translation>
-<translation id="8049913480579063185">Paplašinājuma nosaukums</translation>
 <translation id="8050038245906040378">Microsoft tirdzniecības koda parakstīšana</translation>
 <translation id="8053278772142718589">PKCS #12 faili</translation>
 <translation id="8053390638574070785">Atkārtoti ielādēt šo lapu</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Ielīmēt un pielāgot stilam</translation>
 <translation id="8449036207308062757">Pārvaldīt krātuvi</translation>
 <translation id="8452135315243592079">Nav SIM kartes.</translation>
-<translation id="845627346958584683">Termiņa beigu laiks</translation>
 <translation id="845702320058262034">Nevar izveidot savienojumu. Tālruņa Bluetooth savienojumam ir jābūt ieslēgtam.</translation>
 <translation id="8457451314607652708">Importēt grāmatzīmes</translation>
 <translation id="8460336040822756677">Ja izslēgsiet sistēmu Smart Lock ierīcei <ph name="DEVICE_TYPE" />, nevarēsiet atbloķēt savas Chrome ierīces, izmantojot tālruni. Jums būs jāievada parole.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Jūsu datorā ir ietverts drošības modulis, kas tiek izmantots, lai operētājsistēmā Chrome OS ieviestu daudz svarīgu drošības funkciju. Lai uzzinātu vairāk, apmeklējiet Chromebook palīdzības centru: https://support.google.com/chromebook/?p=sm.</translation>
 <translation id="8637688295594795546">Ir pieejams sistēmas atjauninājums. Notiek sagatavošana lejupielādei…</translation>
 <translation id="8639047128869322042">Notiek kaitīgas programmatūras meklēšana...</translation>
-<translation id="8642171459927087831">Piekļuves pilnvara</translation>
 <translation id="8642900771896232685">2 sekundes</translation>
 <translation id="8642947597466641025">Palielināt tekstu</translation>
 <translation id="8643418457919840804">Lai turpinātu, izvēlieties opciju:</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 3ef9e1b09..fe626a85 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD കണ്ടെത്താനാവുന്നില്ല. നിങ്ങളുടെ Chromebook ഓൺലൈനിലാണോ എന്നുറപ്പാക്കുക, വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> പ്ലഗിൻ ബ്ലോക്കുചെയ്‌തു</translation>
-<translation id="1357589289913453911">വിപുലീകരണ ഐഡി</translation>
 <translation id="1358741672408003399">സ്‌പെല്ലിംഗും വ്യാകരണവും</translation>
 <translation id="1361164813881551742">നേരിട്ട് ചേർക്കുക</translation>
 <translation id="1361655923249334273">ഉപയോഗിക്കാത്ത</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">സുരക്ഷാ കീയിലെ പിൻ ഉൾപ്പെടെയുള്ള എല്ലാ ഡാറ്റയും ഇത് മായ്‌ക്കും</translation>
 <translation id="1475502736924165259">മറ്റ് വിഭാഗങ്ങളിലൊന്നും യോജിക്കാത്ത സര്‍‌ട്ടിഫിക്കറ്റുകള്‍‌ നിങ്ങളുടെ ഫയലിലുണ്ട്</translation>
 <translation id="1476607407192946488">&amp;ഭാഷ ക്രമീകരണം</translation>
-<translation id="1477301030751268706">ഐഡന്റിറ്റി API ടോക്കൺ കാഷെ</translation>
 <translation id="1478340334823509079">വിശദാംശങ്ങൾ: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ഇൻസ്റ്റലേഷൻ പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ല</translation>
 <translation id="1483493594462132177">അയയ്‌ക്കുക</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">സിസ്റ്റം സുരക്ഷ ക്രമീകരണങ്ങള്‍</translation>
 <translation id="2091887806945687916">ശബ്‌ദം</translation>
 <translation id="2097372108957554726">പുതിയ ഉപകരണങ്ങൾ രജിസ്റ്റർ ചെയ്യാൻ നിങ്ങൾ Chrome-ൽ സൈൻ ഇൻ ചെയ്യണം</translation>
-<translation id="2098305189700762159">കണ്ടെത്തിയില്ല</translation>
 <translation id="2099172618127234427">sshd daemon സജ്ജീകരിക്കുന്നതും USB ഡ്രൈവുകളിൽ നിന്ന് ബൂട്ട് ചെയ്യൽ പ്രവർത്തനക്ഷമമാക്കുന്നതുമായ Chrome OS ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" എന്ന സെർവർ സർട്ടിഫിക്കറ്റ് ഇല്ലാതാക്കണോ?</translation>
 <translation id="2100273922101894616">സ്വയമേവയുള്ള സൈൻ ഇൻ</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">ഏതുസമയത്തും "Ok Google" എന്ന് പറഞ്ഞ് നിങ്ങളുടെ അസിസ്‌റ്റന്‍റ് ആക്‌സസ് ചെയ്യൂ</translation>
 <translation id="2387458720915042159">പ്രോക്‌സി കണക്ഷൻ തരം</translation>
 <translation id="2391419135980381625">സാധാരണ ഫോണ്ട്</translation>
-<translation id="2391762656119864333">റദ്ദാക്കുക</translation>
 <translation id="2392369802118427583">സജീവമാക്കുക</translation>
 <translation id="2394566832561516196">അടുത്ത തവണ വീണ്ടും ലോഡ് ചെയ്യുമ്പോൾ ക്രമീകരണങ്ങള്‍ മായ്‌ക്കപ്പെടും.</translation>
 <translation id="2395616325548404795">എന്റർപ്രൈസ് മാനേജ്‌മെന്റിന് വേണ്ടി നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> എൻറോൾ ചെയ്‌തെങ്കിലും അതിന്റെ അസറ്റും ലൊക്കേഷൻ വിവരങ്ങളും അയയ്‌ക്കാനായില്ല. ഈ ഉപകരണത്തിനുവേണ്ടി നിങ്ങളുടെ അഡ്‍മിൻ കൺസോളിൽ നിന്ന് ഈ വിവരങ്ങൾ നേരിട്ട് നൽകുക.</translation>
@@ -1954,7 +1950,6 @@
 <translation id="3894123633473837029">അടുത്തിടെയുള്ള അസിസ്‌റ്റൻ്റ് ചരിത്രം Sherlog വഴി ഉൾപ്പെടുത്തുക. ഇതിൽ നിങ്ങളുടെ ഐഡൻ്റിറ്റി, ലൊക്കേഷൻ, ഡീബഗ് വിവരം എന്നിവ ഉൾപ്പെട്ടേക്കാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">ഫോൾഡർ ചേർക്കുക</translation>
 <translation id="389589731200570180">അതിഥികളുമായി പങ്കിടുക</translation>
-<translation id="3898521660513055167">ടോക്കൺ നില</translation>
 <translation id="389901847090970821">കീബോർഡ് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="3899879303189199559">ഒരു വർഷത്തിലേറെയായി ഓഫ്‌ലൈനിലാണ്</translation>
 <translation id="3900966090527141178">പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യുക</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">ആപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്യണോ?</translation>
 <translation id="5235750401727657667">പുതിയ ടാബ് തുറക്കുമ്പോൾ കാണിക്കേണ്ട പേജ് മാറ്റുക</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>
 <translation id="5243522832766285132">അൽപ്പസമയത്തിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.</translation>
@@ -3229,7 +3223,6 @@
 <translation id="5870155679953074650">ഹാർഡ് ഫോൾട്ടുകൾ</translation>
 <translation id="5877064549588274448">ചാനൽ മാറ്റി. മാറ്റങ്ങൾ ബാധകമാകാൻ നിങ്ങളുടെ ഉപകരണം പുനരാരംഭിക്കുക.</translation>
 <translation id="5877584842898320529">തിരഞ്ഞെടുത്ത പ്രിന്റര്‍ ലഭ്യമല്ല, അല്ലെങ്കിൽ ശരിയായി ഇന്‌സ്‌റ്റാൾ ചെയ്‌തിട്ടില്ല. <ph name="BR" /> നിങ്ങളുടെ പ്രിന്റര്‍ പരിശോധിക്കുക അല്ലെങ്കില്‍ മറ്റൊരു പ്രിന്റര്‍ തിരഞ്ഞെടുക്കുക.</translation>
-<translation id="5880247576487732437">ടോക്കൺ ലഭ്യമാണ്</translation>
 <translation id="5882919346125742463">അറിയാവുന്ന നെറ്റ്‌വർക്കുകൾ</translation>
 <translation id="5884474295213649357">ഈ ടാബ് ഒരു USB ഉപകരണവുമായി കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു.</translation>
 <translation id="5885324376209859881">മീഡിയ ക്രമീകരണങ്ങൾ നിയന്ത്രിക്കുക...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">അപ്ലിക്കേഷൻ ഐഡി അല്ലെങ്കിൽ വെബ്സ്റ്റോർ URL നൽകുക</translation>
 <translation id="804786196054284061">അന്തിമ ഉപയോക്തൃ ലൈസൻസ് ഉടമ്പടി</translation>
 <translation id="8049705080247101012">"<ph name="EXTENSION_NAME" />" എന്നതിനെ Google ക്ഷുദ്രകരമെന്ന് ഫ്ലാഗ് ചെയ്‌തതിനാൽ ഇൻസ്റ്റലേഷൻ തടയപ്പെട്ടു</translation>
-<translation id="8049913480579063185">വിപുലീകരണത്തിന്റെ പേര്</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 ഫയലുകള്‍</translation>
 <translation id="8053390638574070785">ഈ പേജ് വീണ്ടും ലോഡ് ചെയ്യുക</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">ശൈലി ഒട്ടിക്കുകയും പൊരുത്തപ്പെടുത്തുകയും ചെയ്യുക</translation>
 <translation id="8449036207308062757">സ്റ്റോറേജ് മാനേജുചെയ്യുക</translation>
 <translation id="8452135315243592079">സിം കാർഡ് കാണുന്നില്ല</translation>
-<translation id="845627346958584683">കാലഹരണപ്പെടല്‍ സമയം</translation>
 <translation id="845702320058262034">കണക്‌റ്റ് ചെയ്യാനാവുന്നില്ല. ഫോണിൻ്റെ Bluetooth ഓണാണന്ന് ഉറപ്പുവരുത്തുക.</translation>
 <translation id="8457451314607652708">ബുക്ക്‌മാർക്കുകൾ ഇമ്പോർട്ടുചെയ്യുക</translation>
 <translation id="8460336040822756677"><ph name="DEVICE_TYPE" />-നുള്ള Smart Lock ഓഫാക്കിയെങ്കിൽ, ഫോൺ ഉപയോഗിച്ച് നിങ്ങളുടെ Chrome ഉപകരണങ്ങൾ അൺലോക്ക് ചെയ്യാനാവില്ല. പാസ്‌വേഡ് നൽകേണ്ടതുണ്ട്.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ, Chrome OS-ലെ നിർണ്ണായകമായ നിരവധി സുരക്ഷാ ഫീച്ചറുകൾ നടപ്പിലാക്കാൻ ഉപയോഗിക്കുന്ന സുരക്ഷാ മൊഡ്യൂൾ അടങ്ങിയിരിക്കുന്നു. കൂടുതലറിയാൻ Chromebook സഹായകേന്ദ്രം സന്ദർശിക്കുക: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">സിസ്റ്റം അപ്ഡേറ്റ് ലഭ്യമാണ്. ഡൌണ്‍ലോഡ് ചെയ്യുന്നതിന് തയ്യാറെടുക്കുന്നു...</translation>
 <translation id="8639047128869322042">ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ ഉണ്ടോയെന്ന് പരിശോധിക്കുന്നു...</translation>
-<translation id="8642171459927087831">ആക്‌സസ് ടോക്കൺ</translation>
 <translation id="8642900771896232685">2 സെക്കൻഡ്</translation>
 <translation id="8642947597466641025">പാഠത്തെ വലുതാക്കുക</translation>
 <translation id="8643418457919840804">തുടരാൻ, ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക:</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index bdeabb1..9b3fe8b1 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD सापडत नाही. तुमचे Chromebook ऑनलाइन असल्याची खात्री करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> अवरोधित केले आहे</translation>
-<translation id="1357589289913453911">एक्स्टेंशन Id</translation>
 <translation id="1358741672408003399">शुद्धलेखन आणि व्याकरण</translation>
 <translation id="1361164813881551742">व्यक्तिचलितपणे जोडा</translation>
 <translation id="1361655923249334273">न वापरलेले</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">हे सिक्युरिटी कीच्या पिनसह, तिच्यावरील सर्व डेटा मिटवेल</translation>
 <translation id="1475502736924165259">आपल्याकडे फाईलवर प्रमाणपत्रे आहेत जी अन्य कोणत्याही श्रेणींसाठी योग्य नाहीत</translation>
 <translation id="1476607407192946488">&amp;भाषा सेटिंग्ज</translation>
-<translation id="1477301030751268706">ओळख API टोकन कॅशे</translation>
 <translation id="1478340334823509079">तपशील: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">इंस्टॉल करणे सुरू केलेले नाही</translation>
 <translation id="1483493594462132177">पाठवा</translation>
@@ -727,7 +725,6 @@
 <translation id="2090876986345970080">सिस्टम सुरक्षा सेटिंग्ज</translation>
 <translation id="2091887806945687916">ध्वनी</translation>
 <translation id="2097372108957554726">नवीन डिव्हाइसेसची नोंदणी करण्यासाठी तुम्हाला Chrome वर साइन इन करणे आवश्यक आहे</translation>
-<translation id="2098305189700762159">आढळली नाही</translation>
 <translation id="2099172618127234427">तुम्ही Chrome OS डीबगिंग वैशिष्ट्ये सुरू करत आहात जी ssh केलेल्या daemon सेट आणि USB ड्राइव्हवरून बूट करणे सुरू करतील.</translation>
 <translation id="2099686503067610784">सर्व्हर सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="2100273922101894616">ऑटो साइन इन करा</translation>
@@ -939,7 +936,6 @@
 <translation id="2386926718981642523">कधीही "Ok Google" म्हणून तुमचे असिस्टंट अ‍ॅक्सेस करा</translation>
 <translation id="2387458720915042159">प्रॉक्सी कनेक्शन प्रकार</translation>
 <translation id="2391419135980381625">मानक फॉन्ट</translation>
-<translation id="2391762656119864333">मागे घ्या</translation>
 <translation id="2392369802118427583">सक्रिय करा</translation>
 <translation id="2394566832561516196">पुढील रीलोडच्या वेळी सेटिंग्ज साफ केली जातील.</translation>
 <translation id="2395616325548404795">एंटरप्राइझ व्यवस्‍थापनासाठी आपल्या <ph name="DEVICE_TYPE" /> ची यशस्वीरित्या नोंदणी केली आहे परंतु त्याची मालमत्ता आणि स्थान माहिती पाठविण्यात अयशस्वी झाले. कृपया या डिव्हाइससाठी आपल्या Admin console मधून ही माहिती व्यक्तीचलितरित्या प्रविष्‍ट करा.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">शेरलॉग वरून अलीकडील असिस्टंट इतिहासाचा समावेश करा. यामध्ये कदाचित तुमची ओळख, स्थान आणि डीबग माहिती यांचा समावेश असू शकतो. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">फोल्डर जोडा</translation>
 <translation id="389589731200570180">अतिथींसह शेअर करा</translation>
-<translation id="3898521660513055167">टोकन स्थिती</translation>
 <translation id="389901847090970821">कीबोर्ड निवडा</translation>
 <translation id="3899879303189199559">एक वर्षापेक्षा जास्त ऑफलाइन</translation>
 <translation id="3900966090527141178">पासवर्ड एक्सपोर्ट करा</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">अॅप अनइंस्टॉल करायचे?</translation>
 <translation id="5235750401727657667">एखादा नवीन टॅब उघडताना दिसत असलेले पेज बदला</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>
 <translation id="5243522832766285132">कृपया थोड्या वेळानंतर पुन्हा प्रयत्न करा</translation>
@@ -3231,7 +3225,6 @@
 <translation id="5870155679953074650">हार्ड फॉल्‍ट</translation>
 <translation id="5877064549588274448">चॅनेल बदलले. बदल लागू करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा.</translation>
 <translation id="5877584842898320529">निवडलेले प्रिंटर उपलब्ध नाही किंवा योग्यरीत्या इंस्टॉल केलेले नाही. <ph name="BR" /> तुमचा प्रिंटर तपासा किंवा दुसरा प्रिंटर निवडून पहा.</translation>
-<translation id="5880247576487732437">टोकन सादर</translation>
 <translation id="5882919346125742463">ज्ञात नेटवर्क</translation>
 <translation id="5884474295213649357">हा टॅब USB डिव्हाइसशी कनेक्ट केला आहे.</translation>
 <translation id="5885324376209859881">माध्यम सेटिंग्ज व्यवस्थापित करा...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">ॲप्लिकेशन आयडी किंवा वेबस्टोअर URL टाका</translation>
 <translation id="804786196054284061">अंतिम वापरकर्ता परवाना करारनामा</translation>
 <translation id="8049705080247101012">Google ने "<ph name="EXTENSION_NAME" />" ला दुर्भावनापूर्ण म्हणून फ्लॅग केले आहे आणि इंस्टॉल करणे रोखले गेले आहे</translation>
-<translation id="8049913480579063185">एक्स्टेंशन नाव</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 फायली</translation>
 <translation id="8053390638574070785">हे पृष्ठ रीलोड करा</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">पेस्ट करा आणि शैली जुळवा</translation>
 <translation id="8449036207308062757">स्टोरेज व्यवस्थापित करा</translation>
 <translation id="8452135315243592079">गहाळ सिम कार्ड</translation>
-<translation id="845627346958584683">कालावधी समाप्ती वेळ</translation>
 <translation id="845702320058262034">कनेक्ट करू शकत नाही. तुमच्या फोनचे ब्लूटूथ सुरू केले असल्याची खात्री करा</translation>
 <translation id="8457451314607652708">बुकमार्क इंपोर्ट करा</translation>
 <translation id="8460336040822756677">तुम्ही <ph name="DEVICE_TYPE" /> साठी Smart Lock बंद केल्यास, तुम्हाला तुमचा फोन वापरून तुमचे Chrome डिव्हाइस अनलॉक करता येणार नाही. तुम्हाला तुमचा पासवर्ड टाइप करणे आवश्यक आहे.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">तुमच्या काँप्युटरमध्ये एक सुरक्षित मॉड्यूल आहे, जे Chrome OSमध्‍ये अनेक गंभीर सुरक्षितता वैशिष्‍ट्ये अंमलात आणण्‍यासाठी वापरले जाते. आणखी जाणून घेण्यासाठी Chromebook मदत केंद्राला भेट द्या: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">सिस्टम अपडेट उपलब्ध. डाउनलोड करण्याची तयारी करत आहे…</translation>
 <translation id="8639047128869322042">हानिकारक सॉफ्टवेअरसाठी तपासत आहे...</translation>
-<translation id="8642171459927087831">अॅक्सेस टोकन</translation>
 <translation id="8642900771896232685">दोन सेकंद</translation>
 <translation id="8642947597466641025">मजकूर मोठा करा</translation>
 <translation id="8643418457919840804">पुढे सुरू ठेवण्यासाठी, पर्याय निवडा:</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index e75d194..ac78c11 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Tidak menemui PPD. Pastikan Chromebook anda berada dalam talian dan cuba lagi.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> disekat</translation>
-<translation id="1357589289913453911">Id Sambungan</translation>
 <translation id="1358741672408003399">Ejaan dan Tatabahasa</translation>
 <translation id="1361164813881551742">Tambahkan Secara Manual</translation>
 <translation id="1361655923249334273">Tidak digunakan</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Tindakan ini akan memadamkan semua data pada kunci keselamatan, termasuk PINnya</translation>
 <translation id="1475502736924165259">Anda mempunyai sijil pada fail yang tidak sepadan dengan mana-mana kategori lain</translation>
 <translation id="1476607407192946488">&amp;Tetapan Bahasa</translation>
-<translation id="1477301030751268706">Cache Token API Identiti</translation>
 <translation id="1478340334823509079">Butiran: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Pemasangan tidak didayakan</translation>
 <translation id="1483493594462132177">Hantar</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Tetapan keselamatan sistem</translation>
 <translation id="2091887806945687916">Bunyi</translation>
 <translation id="2097372108957554726">Anda perlu log masuk ke Chrome untuk mendaftarkan peranti baharu</translation>
-<translation id="2098305189700762159">Tidak Ditemui</translation>
 <translation id="2099172618127234427">Anda mendayakan ciri penyahpepijatan OS Chrome yang akan menetapkan daemon sshd dan mendayakan pengebutan dari pemacu USB.</translation>
 <translation id="2099686503067610784">Padamkan sijil pelayan "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Akses Assistant pada bila-bila masa anda menyebut "Ok Google"</translation>
 <translation id="2387458720915042159">Jenis sambungan proksi</translation>
 <translation id="2391419135980381625">Fon standard</translation>
-<translation id="2391762656119864333">Batalkan</translation>
 <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>
@@ -1958,7 +1954,6 @@
 <translation id="3894123633473837029">Sertakan sejarah Assistant terbaharu melalui Sherlog. Maklumat ini boleh mengandungi identiti, lokasi dan maklumat nyahpepijat anda. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Tambah folder</translation>
 <translation id="389589731200570180">Berkongsi dengan tetamu</translation>
-<translation id="3898521660513055167">Status Token</translation>
 <translation id="389901847090970821">Pilih papan kekunci</translation>
 <translation id="3899879303189199559">Di luar talian selama lebih setahun</translation>
 <translation id="3900966090527141178">Eksport kata laluan</translation>
@@ -2794,7 +2789,6 @@
 <translation id="5235050375939235066">Nyahpasang apl?</translation>
 <translation id="5235750401727657667">Gantikan halaman yang anda lihat semasa membuka tab baharu</translation>
 <translation id="5238278114306905396">Apl "<ph name="EXTENSION_NAME" />" telah dialih keluar secara automatik.</translation>
-<translation id="5238369540257804368">Skop</translation>
 <translation id="5241128660650683457">Baca semua data anda di tapak web yang anda lawati</translation>
 <translation id="5242724311594467048">Dayakan "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Sila cuba lagi dalam beberapa ketika</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Kesalahan keras</translation>
 <translation id="5877064549588274448">Saluran berubah. Mulakan semula peranti anda untuk menggunakan perubahan.</translation>
 <translation id="5877584842898320529">Pencetak yang dipilih tidak tersedia atau tidak dipasang dengan betul. <ph name="BR" /> Periksa pencetak anda atau cuba pilih pencetak lain.</translation>
-<translation id="5880247576487732437">Token Ada</translation>
 <translation id="5882919346125742463">Rangkaian Yang Diketahui</translation>
 <translation id="5884474295213649357">Tab ini disambungkan ke peranti USB.</translation>
 <translation id="5885324376209859881">Uruskan tetapan media...</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">Masukkan ID aplikasi atau URL gedung web</translation>
 <translation id="804786196054284061">Perjanjian Lesen Pengguna Akhir</translation>
 <translation id="8049705080247101012">Google telah menandai <ph name="EXTENSION_NAME" /> sebagai berhasad dan pemasangan telah dihalang</translation>
-<translation id="8049913480579063185">Nama Sambungan</translation>
 <translation id="8050038245906040378">Menandatangani Kod Komersial Microsoft</translation>
 <translation id="8053278772142718589">Fail PKCS #12</translation>
 <translation id="8053390638574070785">Muatkan Semula Halaman Ini</translation>
@@ -4950,7 +4942,6 @@
 <translation id="8449008133205184768">Gaya Tampal dan Padan</translation>
 <translation id="8449036207308062757">Urus storan</translation>
 <translation id="8452135315243592079">Kad SIM tiada</translation>
-<translation id="845627346958584683">Masa Tamat Tempoh</translation>
 <translation id="845702320058262034">Tidak dapat bersambung. Pastikan Bluetooth telefon anda dihidupkan.</translation>
 <translation id="8457451314607652708">Import penanda halaman</translation>
 <translation id="8460336040822756677">Jika anda mematikan Smart Lock untuk <ph name="DEVICE_TYPE" />, anda tidak akan dapat membuka kunci peranti Chrome anda menggunakan telefon. Anda perlu menaip kata laluan.</translation>
@@ -5064,7 +5055,6 @@
 <translation id="8637542770513281060">Komputer anda mengandungi modul selamat, yang digunakan untuk melaksanakan banyak ciri keselamatan penting dalam OS Chrome. Lawati Pusat Bantuan Chromebook untuk mengetahui lebih lanjut: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Kemas kini sistem tersedia. Bersedia untuk  muat turun…</translation>
 <translation id="8639047128869322042">Menyemak untuk mengesan perisian berbahaya...</translation>
-<translation id="8642171459927087831">Token Akses</translation>
 <translation id="8642900771896232685">2 saat</translation>
 <translation id="8642947597466641025">Jadikan Teks Lebih Besar</translation>
 <translation id="8643418457919840804">Buat pilihan untuk meneruskan:</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 1ea18ce2..ce7366e 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD kan niet worden gevonden. Zorg dat je Chromebook online is en probeer het opnieuw.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> wordt geblokkeerd</translation>
-<translation id="1357589289913453911">Extensie-ID</translation>
 <translation id="1358741672408003399">Spelling en grammatica</translation>
 <translation id="1361164813881551742">Handmatig toevoegen</translation>
 <translation id="1361655923249334273">Ongebruikt</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Hierdoor worden alle gegevens op de beveiligingssleutel, waaronder de pincode, gewist.</translation>
 <translation id="1475502736924165259">Je hebt certificaten die niet in een van de andere categorieën vallen</translation>
 <translation id="1476607407192946488">&amp;Taalinstellingen</translation>
-<translation id="1477301030751268706">Tokencache van Identity API</translation>
 <translation id="1478340334823509079">Details: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installatie is niet ingeschakeld</translation>
 <translation id="1483493594462132177">Verzenden</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Instelling voor systeembeveiliging</translation>
 <translation id="2091887806945687916">Geluid</translation>
 <translation id="2097372108957554726">Je moet inloggen bij Chrome om nieuwe apparaten te registreren</translation>
-<translation id="2098305189700762159">Niet gevonden</translation>
 <translation id="2099172618127234427">Je schakelt foutopsporingsfuncties in voor Chrome OS waarmee de sshd daemon wordt ingesteld en opstarten vanaf USB-stations wordt ingeschakeld.</translation>
 <translation id="2099686503067610784">Servercertificaat '<ph name="CERTIFICATE_NAME" />' verwijderen?</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Open je Assistent door 'Oké Google' te zeggen</translation>
 <translation id="2387458720915042159">Proxyverbindingstype</translation>
 <translation id="2391419135980381625">Standaard lettertype</translation>
-<translation id="2391762656119864333">Intrekken</translation>
 <translation id="2392369802118427583">Activeren</translation>
 <translation id="2394566832561516196">De instellingen worden gewist bij opnieuw laden.</translation>
 <translation id="2395616325548404795">Je <ph name="DEVICE_TYPE" /> is aangemeld voor bedrijfsbeheer, maar kan de item- en locatiegegevens niet verzenden. Voer deze gegevens handmatig in via je Beheerdersconsole voor dit apparaat.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Ook de recente Assistent-geschiedenis opnemen via Sherlog. Deze geschiedenis kan je identiteit, locatie en foutopsporingsinformatie omvatten. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Map toevoegen</translation>
 <translation id="389589731200570180">Delen met gasten</translation>
-<translation id="3898521660513055167">Status van token</translation>
 <translation id="389901847090970821">Toetsenbord selecteren</translation>
 <translation id="3899879303189199559">Langer dan een jaar offline</translation>
 <translation id="3900966090527141178">Wachtwoorden exporteren</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">App verwijderen?</translation>
 <translation id="5235750401727657667">De pagina vervangen die wordt weergegeven wanneer je een nieuw tabblad opent</translation>
 <translation id="5238278114306905396">De app '<ph name="EXTENSION_NAME" />' is automatisch verwijderd.</translation>
-<translation id="5238369540257804368">Bereik</translation>
 <translation id="5241128660650683457">Al je gegevens lezen voor de websites die je bezoekt</translation>
 <translation id="5242724311594467048">'<ph name="EXTENSION_NAME" />' inschakelen?</translation>
 <translation id="5243522832766285132">Probeer het over enige tijd opnieuw</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Harde fouten</translation>
 <translation id="5877064549588274448">Kanaal gewijzigd. Start het apparaat opnieuw op om de wijzigingen door te voeren.</translation>
 <translation id="5877584842898320529">De geselecteerde printer is niet beschikbaar of niet correct geïnstalleerd.<ph name="BR" />Controleer de printer of probeer een andere printer te selecteren.</translation>
-<translation id="5880247576487732437">Token aanwezig</translation>
 <translation id="5882919346125742463">Bekende netwerken</translation>
 <translation id="5884474295213649357">Dit tabblad is gekoppeld aan een USB-apparaat.</translation>
 <translation id="5885324376209859881">Media-instellingen beheren...</translation>
@@ -4696,7 +4689,6 @@
 <translation id="8045923671629973368">Geef de app-ID of URL voor Web Store op</translation>
 <translation id="804786196054284061">Licentieovereenkomst voor eindgebruikers</translation>
 <translation id="8049705080247101012">Google heeft <ph name="EXTENSION_NAME" /> als schadelijk gemarkeerd en de installatie is geblokkeerd</translation>
-<translation id="8049913480579063185">Extensienaam</translation>
 <translation id="8050038245906040378">Commerciële handtekening bij programmacode van Microsoft</translation>
 <translation id="8053278772142718589">Bestanden van het type PKCS #12</translation>
 <translation id="8053390638574070785">Laad pagina opnieuw</translation>
@@ -4947,7 +4939,6 @@
 <translation id="8449008133205184768">Plakken en stijl aanpassen</translation>
 <translation id="8449036207308062757">Opslag beheren</translation>
 <translation id="8452135315243592079">Simkaart ontbreekt</translation>
-<translation id="845627346958584683">Vervaltijd</translation>
 <translation id="845702320058262034">Kan geen verbinding maken. Controleer of Bluetooth is ingeschakeld op je telefoon.</translation>
 <translation id="8457451314607652708">Bladwijzers importeren</translation>
 <translation id="8460336040822756677">Als je Smart Lock voor <ph name="DEVICE_TYPE" /> uitschakelt, kun je je Chrome-apparaten niet meer ontgrendelen met je telefoon. Je moet je wachtwoord typen.</translation>
@@ -5061,7 +5052,6 @@
 <translation id="8637542770513281060">Je computer bevat een beveiligde module die wordt gebruikt om veel van de belangrijke beveiligingsfuncties in Chrome OS te implementeren. Ga voor meer informatie naar het Helpcentrum voor Chromebooks: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Systeemupdate beschikbaar. Download voorbereiden...</translation>
 <translation id="8639047128869322042">Controleren op schadelijke software...</translation>
-<translation id="8642171459927087831">Toegangstoken</translation>
 <translation id="8642900771896232685">2 seconden</translation>
 <translation id="8642947597466641025">De tekst groter maken</translation>
 <translation id="8643418457919840804">Kies een optie om door te gaan:</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 69a0958..ae49c85 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Finner ikke PPD. Sjekk at Chromebooken din er på nettet, og prøv på nytt.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> er blokkert</translation>
-<translation id="1357589289913453911">Utvidelses-ID</translation>
 <translation id="1358741672408003399">Stavekontroll og grammatikk</translation>
 <translation id="1361164813881551742">Legg til manuelt</translation>
 <translation id="1361655923249334273">Ubrukt</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Dette fører til at alle dataene på sikkerhetsnøkkelen, inkludert PIN-koden, blir slettet</translation>
 <translation id="1475502736924165259">Du har en fil med sertifikater som ikke passer inn i noen av de andre kategoriene</translation>
 <translation id="1476607407192946488">&amp;Språkinnstillinger</translation>
-<translation id="1477301030751268706">Tokenbuffer for identitets-API</translation>
 <translation id="1478340334823509079">Detaljer: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installasjon er ikke aktivert</translation>
 <translation id="1483493594462132177">Send</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Systemets sikkerhetsinnstillinger</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2097372108957554726">Du må logge på Chrome for å registrere nye enheter</translation>
-<translation id="2098305189700762159">Ikke funnet</translation>
 <translation id="2099172618127234427">Du er i ferd med å slå på Chrome OS-feilsøkingsfunksjoner som kommer til å konfigurere sshd daemon og muliggjøre oppstart fra USB-stasjoner.</translation>
 <translation id="2099686503067610784">Slette tjenersertifikatet «<ph name="CERTIFICATE_NAME" />»?</translation>
 <translation id="2100273922101894616">Automatisk pålogging</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Du kan når som helst snakke til assistenten ved å si «Ok Google»</translation>
 <translation id="2387458720915042159">Tilkoblingstype for proxy-tjener</translation>
 <translation id="2391419135980381625">Standardskrift</translation>
-<translation id="2391762656119864333">Opphev</translation>
 <translation id="2392369802118427583">Aktiver</translation>
 <translation id="2394566832561516196">Innstillingene slettes neste gang siden lastes inn på nytt</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" />-enheten din er nå registrert for bedriftsadministrering. Den sendte imidlertid ikke ressurs- og plasseringsinformasjon. Denne informasjonen må legges inn manuelt i administrasjonskonsollen for denne enheten.</translation>
@@ -1952,7 +1948,6 @@
 <translation id="3894123633473837029">Legg ved en logg over nylig Assistent-aktivitet via Sherlog. Dette kan inkludere identiteten din, posisjonen din og feilsøkingsinformasjon. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Legg til en mappe</translation>
 <translation id="389589731200570180">Del med gjester</translation>
-<translation id="3898521660513055167">Tokenstatus</translation>
 <translation id="389901847090970821">Velg tastatur</translation>
 <translation id="3899879303189199559">Frakoblet i over ett år</translation>
 <translation id="3900966090527141178">Eksportér passord</translation>
@@ -2131,7 +2126,7 @@
 <translation id="4147911968024186208">Prøv på nytt. Hvis du ser denne feilen igjen, kan du kontakte brukerstøtterepresentanten din.</translation>
 <translation id="4150125039112138020">|</translation>
 <translation id="4150201353443180367">Skjerm</translation>
-<translation id="4150234330364554482">Bruk en dokkingstasjon fra produsenten som er utformet for å virke sammen med denne Chromebooken.</translation>
+<translation id="4150234330364554482">Bruk en dokkingstasjon fra produsenten som er laget for å fungere sammen med denne Chromebooken.</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}other{# faner}}</translation>
 <translation id="4154664944169082762">Fingeravtrykk</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -2786,7 +2781,6 @@
 <translation id="5235050375939235066">Vil du avinstallere appen?</translation>
 <translation id="5235750401727657667">Erstatt siden du ser når du åpner nye faner</translation>
 <translation id="5238278114306905396">Programmet «<ph name="EXTENSION_NAME" />» ble automatisk fjernet.</translation>
-<translation id="5238369540257804368">Omfang</translation>
 <translation id="5241128660650683457">Les alle dataene på nettstedene du besøker</translation>
 <translation id="5242724311594467048">Vil du slå på «<ph name="EXTENSION_NAME" />»?</translation>
 <translation id="5243522832766285132">Prøv på nytt om en liten stund</translation>
@@ -2964,7 +2958,7 @@
 <translation id="5496587651328244253">Organiser</translation>
 <translation id="549673810209994709">Denne siden kunne ikke oversettes.</translation>
 <translation id="5499313591153584299">Denne filen kan være skadelig for datamaskinen din.</translation>
-<translation id="5500345327355928305">For å unngå problemer med lading og ytelse, bruk en kompatibel strømadapter fra produsenten eller USB-C-strømadapter.</translation>
+<translation id="5500345327355928305">For å unngå problemer med lading og ytelse, bruk en kompatibel strømadapter fra produsenten eller en USB-C-strømadapter.</translation>
 <translation id="5502500733115278303">Importert fra Firefox</translation>
 <translation id="5507756662695126555">Ikke-avvisning</translation>
 <translation id="5509693895992845810">L&amp;agre som</translation>
@@ -3225,7 +3219,6 @@
 <translation id="5870155679953074650">Harde feil</translation>
 <translation id="5877064549588274448">Kanalen ble endret. Start enheten på nytt for å aktivere endringene.</translation>
 <translation id="5877584842898320529">Den valgte skriveren er ikke tilgjengelig, eller den er ikke installert på riktig måte. <ph name="BR" /> Kontrollér skriveren din, eller prøv å velge en annen skriver.</translation>
-<translation id="5880247576487732437">Token er tilgjengelig</translation>
 <translation id="5882919346125742463">Kjente nettverk</translation>
 <translation id="5884474295213649357">Denne fanen er koblet til en USB-enhet.</translation>
 <translation id="5885324376209859881">Administrer medieinnstillingene</translation>
@@ -3935,7 +3928,7 @@
 <translation id="6974609594866392343">Demomodus uten nett</translation>
 <translation id="6977381486153291903">Fastvareversjon</translation>
 <translation id="6978121630131642226">Søkemotorer</translation>
-<translation id="6979044105893951891">Starte og avslutte administrerte gjesteøkter</translation>
+<translation id="6979044105893951891">starte og avslutte administrerte gjesteøkter</translation>
 <translation id="6979440798594660689">Kutt lyden (standard)</translation>
 <translation id="6979737339423435258">Alle datoer</translation>
 <translation id="6981982820502123353">Tilgjengelighet</translation>
@@ -4688,7 +4681,6 @@
 <translation id="8045923671629973368">Skriv inn app-ID-en eller nettadressen til nettbutikken</translation>
 <translation id="804786196054284061">Brukerlisensavtale</translation>
 <translation id="8049705080247101012">Google har merket <ph name="EXTENSION_NAME" /> som skadelig, og installasjonen har blitt avbrutt</translation>
-<translation id="8049913480579063185">Navn på utvidelse</translation>
 <translation id="8050038245906040378">Microsoft-signering med kommersiell kode</translation>
 <translation id="8053278772142718589">Filer for PKCS #12</translation>
 <translation id="8053390638574070785">Last inn denne siden på nytt</translation>
@@ -4939,7 +4931,6 @@
 <translation id="8449008133205184768">Lim inn og tilpass til stil</translation>
 <translation id="8449036207308062757">Administrer lagringsplassen</translation>
 <translation id="8452135315243592079">SIM-kort mangler</translation>
-<translation id="845627346958584683">Utløpstid</translation>
 <translation id="845702320058262034">Kan ikke koble til. Kontrollér at telefonens Bluetooth er på.</translation>
 <translation id="8457451314607652708">Importér bokmerker</translation>
 <translation id="8460336040822756677">Hvis du slår av Smart Lock for <ph name="DEVICE_TYPE" />, kan du ikke låse opp Chrome-enhetene dine ved hjelp av telefonen. Du må skrive inn passordet.</translation>
@@ -5053,7 +5044,6 @@
 <translation id="8637542770513281060">Datamaskinen din inneholder en sikker modul som brukes til å implementere mange viktige sikkerhetsfunksjoner i Chrome OS. Gå til Chromebook-brukerstøtten for å finne ut mer: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Systemoppdatering er tilgjengelig. Forbereder nedlasting ...</translation>
 <translation id="8639047128869322042">Ser etter skadelig programvare …</translation>
-<translation id="8642171459927087831">Tilgangstoken</translation>
 <translation id="8642900771896232685">2 sekunder</translation>
 <translation id="8642947597466641025">Forstørr teksten</translation>
 <translation id="8643418457919840804">Velg et alternativ for å fortsette:</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 0399611..4c7b75e 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nie można znaleźć pliku PPD. Upewnij się, że Chromebook jest podłączony do internetu, i spróbuj ponownie.</translation>
 <translation id="1355466263109342573">Wtyczka <ph name="PLUGIN_NAME" /> jest zablokowana</translation>
-<translation id="1357589289913453911">Identyfikator rozszerzenia</translation>
 <translation id="1358741672408003399">Pisownia i gramatyka</translation>
 <translation id="1361164813881551742">Dodaj ręcznie</translation>
 <translation id="1361655923249334273">Nieużywany</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Spowoduje to usunięcie z klucza bezpieczeństwa wszystkich danych, w tym kodu PIN</translation>
 <translation id="1475502736924165259">Masz zapisane certyfikaty, które nie pasują do żadnej z pozostałych kategorii</translation>
 <translation id="1476607407192946488">&amp;Ustawienia języka</translation>
-<translation id="1477301030751268706">Pamięć podręczna tokenów interfejsu API Identity</translation>
 <translation id="1478340334823509079">Szczegóły: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalacja nie została włączona</translation>
 <translation id="1483493594462132177">Wyślij</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Ustawienie zabezpieczeń systemu</translation>
 <translation id="2091887806945687916">Dźwięk</translation>
 <translation id="2097372108957554726">Aby móc rejestrować nowe urządzenia, musisz się zalogować w Chrome</translation>
-<translation id="2098305189700762159">Nie znaleziono</translation>
 <translation id="2099172618127234427">Chcesz włączyć funkcje debugowania w systemie operacyjnym Chrome – spowoduje to włączenie demona sshd i umożliwi rozruch urządzenia z dysku USB.</translation>
 <translation id="2099686503067610784">Czy usunąć certyfikat serwera „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Automatyczne logowanie</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Uruchamiaj Asystenta w dowolnej chwili, mówiąc „OK Google”</translation>
 <translation id="2387458720915042159">Typ połączenia z serwerem proxy</translation>
 <translation id="2391419135980381625">Czcionka standardowa</translation>
-<translation id="2391762656119864333">Unieważnij</translation>
 <translation id="2392369802118427583">Aktywuj</translation>
 <translation id="2394566832561516196">Ustawienia zostaną wyczyszczone przy następnym ponownym ładowaniu.</translation>
 <translation id="2395616325548404795">Urządzenie <ph name="DEVICE_TYPE" /> zostało zarejestrowane do zarządzania w firmie, ale nie wysłało informacji o zasobie ani lokalizacji. Wpisz te informacje ręcznie przy urządzeniu w konsoli administracyjnej.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Uwzględnij ostatnią historię Asystenta w Sherlog. Może ona obejmować informacje na temat Twojej tożsamości i lokalizacji oraz dane debugowania. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Dodaj folder</translation>
 <translation id="389589731200570180">Udostępnij gościom</translation>
-<translation id="3898521660513055167">Stan tokena</translation>
 <translation id="389901847090970821">Wybierz klawiaturę</translation>
 <translation id="3899879303189199559">Offline od ponad roku</translation>
 <translation id="3900966090527141178">Eksportuj hasła</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Odinstalować aplikację?</translation>
 <translation id="5235750401727657667">Zmiana strony, która wyświetla się, gdy otwierasz nową kartę</translation>
 <translation id="5238278114306905396">Aplikacja „<ph name="EXTENSION_NAME" />” została automatycznie usunięta.</translation>
-<translation id="5238369540257804368">Zakresy</translation>
 <translation id="5241128660650683457">Odczyt wszystkich Twoich danych na odwiedzanych stronach internetowych</translation>
 <translation id="5242724311594467048">Włączyć rozszerzenie „<ph name="EXTENSION_NAME" />”?</translation>
 <translation id="5243522832766285132">Spróbuj ponownie za kilka chwil</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Poważne błędy</translation>
 <translation id="5877064549588274448">Kanał został zmieniony. Aby zastosować zmiany, uruchom ponownie urządzenie.</translation>
 <translation id="5877584842898320529">Wybrana drukarka jest niedostępna lub nieprawidłowo zainstalowana. <ph name="BR" /> Sprawdź ją lub wybierz inną.</translation>
-<translation id="5880247576487732437">Token istnieje</translation>
 <translation id="5882919346125742463">Znane sieci</translation>
 <translation id="5884474295213649357">Ta karta jest połączona z urządzeniem USB.</translation>
 <translation id="5885324376209859881">Zarządzaj ustawieniami multimediów...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Wpisz identyfikator aplikacji lub URL sklepu internetowego</translation>
 <translation id="804786196054284061">Umowa licencyjna użytkownika</translation>
 <translation id="8049705080247101012">Google uznaje rozszerzenie „<ph name="EXTENSION_NAME" />” za złośliwe, dlatego nie dopuściliśmy do jego zainstalowania</translation>
-<translation id="8049913480579063185">Nazwa rozszerzenia</translation>
 <translation id="8050038245906040378">Podpisywanie kodu handlowego firmy Microsoft</translation>
 <translation id="8053278772142718589">Pliki PKCS #12</translation>
 <translation id="8053390638574070785">Załaduj ponownie tę stronę</translation>
@@ -4949,7 +4941,6 @@
 <translation id="8449008133205184768">Wklej i dopasuj do stylu</translation>
 <translation id="8449036207308062757">Zarządzaj pamięcią</translation>
 <translation id="8452135315243592079">Brak karty SIM</translation>
-<translation id="845627346958584683">Data ważności</translation>
 <translation id="845702320058262034">Nie można nawiązać połączenia. Sprawdź, czy Bluetooth w telefonie jest włączony.</translation>
 <translation id="8457451314607652708">Importuj zakładki</translation>
 <translation id="8460336040822756677">Jeśli wyłączysz Smart Lock na urządzenie <ph name="DEVICE_TYPE" />, nie odblokujesz urządzenia z Chrome przy użyciu telefonu. Trzeba będzie wpisać hasło.</translation>
@@ -5063,7 +5054,6 @@
 <translation id="8637542770513281060">Twój komputer ma moduł zabezpieczeń, który umożliwia zastosowanie wielu krytycznych funkcji zabezpieczeń w systemie operacyjnym Chrome. Więcej informacji znajdziesz w Centrum pomocy Chromebooka na stronie: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Jest dostępna aktualizacja systemu. Trwa przygotowanie do pobrania…</translation>
 <translation id="8639047128869322042">Szukam szkodliwego oprogramowania…</translation>
-<translation id="8642171459927087831">Token dostępu</translation>
 <translation id="8642900771896232685">2 s</translation>
 <translation id="8642947597466641025">Powiększ tekst</translation>
 <translation id="8643418457919840804">Aby kontynuować, wybierz opcję:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index c025839..c53917e 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Não é possível encontrar o PPD. Verifique se seu Chromebook está on-line e tente novamente.</translation>
 <translation id="1355466263109342573">O <ph name="PLUGIN_NAME" /> está bloqueado</translation>
-<translation id="1357589289913453911">ID da extensão</translation>
 <translation id="1358741672408003399">Ortografia e gramática</translation>
 <translation id="1361164813881551742">Adicionar manualmente</translation>
 <translation id="1361655923249334273">Não utilizado</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Essa ação apaga todos os dados na chave de segurança, inclusive os PINs.</translation>
 <translation id="1475502736924165259">Você tem certificados no arquivo que não correspondem a nenhuma das outras categorias</translation>
 <translation id="1476607407192946488">&amp;Configurações de idioma</translation>
-<translation id="1477301030751268706">Cache do token da API de identidade</translation>
 <translation id="1478340334823509079">Detalhes: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">A instalação não está ativada</translation>
 <translation id="1483493594462132177">Enviar</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Configuração de segurança do sistema</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2097372108957554726">É necessário fazer login no Chrome para registrar novos dispositivos</translation>
-<translation id="2098305189700762159">Não encontrado</translation>
 <translation id="2099172618127234427">Você está ativando recursos de depuração do Chrome OS que definirão sshd daemon e permitirão a inicialização a partir de drives USB.</translation>
 <translation id="2099686503067610784">Tem certeza que quer excluir o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Login automático</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Acessar seu Assistente sempre que você disser "Ok Google"</translation>
 <translation id="2387458720915042159">Tipo de conexão proxy</translation>
 <translation id="2391419135980381625">Fonte padrão</translation>
-<translation id="2391762656119864333">Revogar</translation>
 <translation id="2392369802118427583">Ativar</translation>
 <translation id="2394566832561516196">As configurações serão apagadas na próxima atualização.</translation>
 <translation id="2395616325548404795">Seu <ph name="DEVICE_TYPE" /> foi registrado para o gerenciamento empresarial, mas as informações de localização e recurso não foram enviadas. Forneça essas informações manualmente no Admin Console do dispositivo.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Incluir o histórico recente do Assistente via Sherlog. Isso pode conter sua identidade, seu local e suas informações de depuração. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Adicionar pasta</translation>
 <translation id="389589731200570180">Compartilhar com convidados</translation>
-<translation id="3898521660513055167">Status do token</translation>
 <translation id="389901847090970821">Selecionar teclado</translation>
 <translation id="3899879303189199559">Off-line há mais de um ano</translation>
 <translation id="3900966090527141178">Exportar senhas</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Desinstalar app?</translation>
 <translation id="5235750401727657667">Substituir a página que você vê ao abrir uma nova guia</translation>
 <translation id="5238278114306905396">O aplicativo "<ph name="EXTENSION_NAME" />" foi removido automaticamente.</translation>
-<translation id="5238369540257804368">Escopos</translation>
 <translation id="5241128660650683457">Ler todos os dados sobre os websites que você visita</translation>
 <translation id="5242724311594467048">Ativar "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Tente novamente em alguns instantes</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Falhas graves</translation>
 <translation id="5877064549588274448">Canal alterado. Reinicie o dispositivo para aplicar as alterações.</translation>
 <translation id="5877584842898320529">A impressora selecionada não está disponível ou não foi instalada corretamente. <ph name="BR" /> Verifique a impressora ou selecione outra.</translation>
-<translation id="5880247576487732437">Token presente</translation>
 <translation id="5882919346125742463">Redes conhecidas</translation>
 <translation id="5884474295213649357">Esta guia está conectada a um dispositivo USB.</translation>
 <translation id="5885324376209859881">Gerenciar configurações de mídia...</translation>
@@ -4699,7 +4692,6 @@
 <translation id="8045923671629973368">Informe o ID do aplicativo ou o URL da loja on-line</translation>
 <translation id="804786196054284061">Contrato de licença do usuário final</translation>
 <translation id="8049705080247101012">O Google sinalizou a extensão "<ph name="EXTENSION_NAME" />" como maliciosa e impediu a instalação</translation>
-<translation id="8049913480579063185">Nome da extensão</translation>
 <translation id="8050038245906040378">Assinatura do código comercial da Microsoft</translation>
 <translation id="8053278772142718589">Arquivos PKCS #12</translation>
 <translation id="8053390638574070785">Recarregar esta página</translation>
@@ -4951,7 +4943,6 @@
 <translation id="8449008133205184768">Colar com o Mesmo Estilo</translation>
 <translation id="8449036207308062757">Gerenciar armazenamento</translation>
 <translation id="8452135315243592079">Chip ausente</translation>
-<translation id="845627346958584683">Tempo de vencimento</translation>
 <translation id="845702320058262034">Não foi possível conectar. Verifique se o Bluetooth do smartphone está ativado.</translation>
 <translation id="8457451314607652708">Importar favoritos</translation>
 <translation id="8460336040822756677">Se você desativar o Smart Lock para <ph name="DEVICE_TYPE" />, não poderá desbloquear dispositivos Chrome usando seu smartphone. Será necessário digitar uma senha.</translation>
@@ -5065,7 +5056,6 @@
 <translation id="8637542770513281060">Seu computador possui um módulo de segurança, que é utilizado para implementar muitos recursos de segurança importantes no Chrome OS. Visite a Central de Ajuda do Chromebook para saber mais: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">A atualização do sistema está disponível. Preparando para fazer download...</translation>
 <translation id="8639047128869322042">Procurando softwares perigosos…</translation>
-<translation id="8642171459927087831">Token de acesso</translation>
 <translation id="8642900771896232685">2 segundos</translation>
 <translation id="8642947597466641025">Aumentar o texto</translation>
 <translation id="8643418457919840804">Para continuar, escolha uma opção:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 1825520..b21a7d82 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Não é possível encontrar o PPD. Certifique-se de que o Chromebook está online e tente novamente.</translation>
 <translation id="1355466263109342573">O <ph name="PLUGIN_NAME" /> está bloqueado</translation>
-<translation id="1357589289913453911">ID de Extensão</translation>
 <translation id="1358741672408003399">Ortografia e gramática</translation>
 <translation id="1361164813881551742">Adicionar manualmente</translation>
 <translation id="1361655923249334273">Não utilizado</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Isto apaga todos os dados na chave de segurança, incluindo o respetivo PIN</translation>
 <translation id="1475502736924165259">Tem certificados em arquivo que não encaixam em nenhuma das restantes categorias</translation>
 <translation id="1476607407192946488">&amp;Definições de idioma</translation>
-<translation id="1477301030751268706">Cache do Símbolo da API de Identidade</translation>
 <translation id="1478340334823509079">Detalhes: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">A instalação não está ativada.</translation>
 <translation id="1483493594462132177">Enviar</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Definição de segurança do sistema</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2097372108957554726">É necessário iniciar sessão no Chrome para registar novos dispositivos</translation>
-<translation id="2098305189700762159">Não encontrado</translation>
 <translation id="2099172618127234427">Está a ativar as funcionalidades de depuração do Chrome OS, o que vai configurar o sshd daemon e ativar o arranque a partir de unidades USB.</translation>
 <translation id="2099686503067610784">Eliminar o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Aceda ao Assistente sempre que disser "Ok Google"</translation>
 <translation id="2387458720915042159">Tipo de ligação proxy</translation>
 <translation id="2391419135980381625">Tipo de letra padrão</translation>
-<translation id="2391762656119864333">Revogar</translation>
 <translation id="2392369802118427583">Ativar</translation>
 <translation id="2394566832561516196">As definições serão limpas na atualização seguinte.</translation>
 <translation id="2395616325548404795">O seu <ph name="DEVICE_TYPE" /> foi inscrito com êxito para gestão empresarial, mas não enviou as respetivas informações de recurso e de localização. Introduza essas informações para este dispositivo manualmente a partir da Consola do gestor.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Incluir o histórico recente do Assistente através do Sherlog. Podem ser incluídas as suas informações de identidade, localização e depuração. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Adicionar pasta</translation>
 <translation id="389589731200570180">Partilhar com convidados</translation>
-<translation id="3898521660513055167">Estado do Símbolo</translation>
 <translation id="389901847090970821">Selecionar teclado</translation>
 <translation id="3899879303189199559">Offline durante mais de um ano</translation>
 <translation id="3900966090527141178">Exportar palavras-passe</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Pretende desinstalar a aplicação?</translation>
 <translation id="5235750401727657667">Substituir a página visualizada ao abrir um novo separador</translation>
 <translation id="5238278114306905396">A aplicação "<ph name="EXTENSION_NAME" />" foi automaticamente removida.</translation>
-<translation id="5238369540257804368">Âmbitos</translation>
 <translation id="5241128660650683457">Ler todos os dados nos Sites visitados</translation>
 <translation id="5242724311594467048">Ativar a extensão "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Tente novamente dentro de alguns momentos.</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Falhas principais</translation>
 <translation id="5877064549588274448">Canal alterado. Reinicie o dispositivo para aplicar as alterações.</translation>
 <translation id="5877584842898320529">A impressora selecionada não está disponível ou não está instalada corretamente. <ph name="BR" /> Verifique a impressora ou tente selecionar outra impressora.</translation>
-<translation id="5880247576487732437">Símbolo Presente</translation>
 <translation id="5882919346125742463">Redes conhecidas</translation>
 <translation id="5884474295213649357">Este separador está associado a um dispositivo USB.</translation>
 <translation id="5885324376209859881">Gerir definições de multimédia...</translation>
@@ -4698,7 +4691,6 @@
 <translation id="8045923671629973368">Introduza o ID da aplicação ou o URL da loja online.</translation>
 <translation id="804786196054284061">Contrato de Licença de Utilizador Final</translation>
 <translation id="8049705080247101012">A Google sinalizou a extensão "<ph name="EXTENSION_NAME" />" como sendo maliciosa e a instalação foi impedida.</translation>
-<translation id="8049913480579063185">Nome da Extensão</translation>
 <translation id="8050038245906040378">Assinatura de código comercial Microsoft</translation>
 <translation id="8053278772142718589">Ficheiros PKCS #12</translation>
 <translation id="8053390638574070785">Recarregar esta página</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Colar e fazer corresponder estilo</translation>
 <translation id="8449036207308062757">Gerir armazenamento</translation>
 <translation id="8452135315243592079">Cartão SIM em falta</translation>
-<translation id="845627346958584683">Prazo de validade</translation>
 <translation id="845702320058262034">Não é possível estabelecer a ligação. Certifique-se de que o Bluetooth do telemóvel está ativado.</translation>
 <translation id="8457451314607652708">Importar marcadores</translation>
 <translation id="8460336040822756677">Se desativar o Smart Lock para <ph name="DEVICE_TYPE" />, não pode utilizar o telemóvel para desbloquear os dispositivos Chrome. Tem de introduzir a palavra-passe.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">O seu computador contém um módulo seguro, que é utilizado para implementar várias funcionalidades de segurança essenciais no Chrome OS. Aceda ao Centro de Ajuda do Chromebook em https://support.google.com/chromebook/?p=sm para saber mais.</translation>
 <translation id="8637688295594795546">Actualização do sistema disponível. A preparar para transferir…</translation>
 <translation id="8639047128869322042">A procurar software prejudicial...</translation>
-<translation id="8642171459927087831">Chave de Acesso</translation>
 <translation id="8642900771896232685">2 segundos</translation>
 <translation id="8642947597466641025">Aumentar o tamanho do texto</translation>
 <translation id="8643418457919840804">Para continuar, selecione uma opção:</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 986aa5bb5..127b9240 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nu se poate găsi fișierul PPD. Asigură-te că Chromebookul este online și încearcă din nou.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> este blocat</translation>
-<translation id="1357589289913453911">Codul extensiei</translation>
 <translation id="1358741672408003399">Ortografie și gramatică</translation>
 <translation id="1361164813881551742">Adaugă manual</translation>
 <translation id="1361655923249334273">Neutilizat</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Această acțiune va șterge toate datele de pe cheia de securitate, inclusiv codul său PIN</translation>
 <translation id="1475502736924165259">Ai stocate certificate care nu se încadrează în niciuna dintre celelalte categorii</translation>
 <translation id="1476607407192946488">&amp;Setări de limbă</translation>
-<translation id="1477301030751268706">Memorie cache pentru indicativele API-ului Identity</translation>
 <translation id="1478340334823509079">Detalii: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalarea nu este activată</translation>
 <translation id="1483493594462132177">Trimite</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Setare de securitate a sistemului</translation>
 <translation id="2091887806945687916">Sunet</translation>
 <translation id="2097372108957554726">Pentru a înregistra dispozitive noi, este necesar să vă conectați la Chrome</translation>
-<translation id="2098305189700762159">Nu a fost găsit</translation>
 <translation id="2099172618127234427">În prezent, activezi funcțiile de remediere a erorilor în sistemul de operare Chrome, care vor configura SSH daemon și vor activa pornirea de pe dispozitive USB.</translation>
 <translation id="2099686503067610784">Șterge certificatul de server „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Accesează Asistentul oricând rostești „Ok Google”</translation>
 <translation id="2387458720915042159">Tip de conexiune prin proxy</translation>
 <translation id="2391419135980381625">Font standard</translation>
-<translation id="2391762656119864333">Revocați</translation>
 <translation id="2392369802118427583">Activează</translation>
 <translation id="2394566832561516196">Setările vor fi șterse la următoarea reîncărcare.</translation>
 <translation id="2395616325548404795">Dispozitivul <ph name="DEVICE_TYPE" /> a fost înscris pentru gestionarea de întreprindere, dar nu a putut trimite informațiile despre locație și articol. Introdu manual aceste informații din consola de administrare pentru acest dispozitiv.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Include istoricul recent al Asistentului prin Sherlog. Acesta poate include identitatea, locația și informațiile de remediere a erorilor. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Adaugă un dosar</translation>
 <translation id="389589731200570180">Permiteți accesul invitaților</translation>
-<translation id="3898521660513055167">Stare indicativ</translation>
 <translation id="389901847090970821">Selectează tastatura</translation>
 <translation id="3899879303189199559">Offline pentru mai mult de un an</translation>
 <translation id="3900966090527141178">Exportă parolele</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Dezinstalezi aplicația?</translation>
 <translation id="5235750401727657667">Înlocuiește pagina pe care o vezi la deschiderea unei file noi</translation>
 <translation id="5238278114306905396">Aplicația „<ph name="EXTENSION_NAME" />” a fost eliminată automat.</translation>
-<translation id="5238369540257804368">Domenii</translation>
 <translation id="5241128660650683457">Citește toate datele de pe site-urile pe care le vizitezi</translation>
 <translation id="5242724311594467048">Activați extensia „<ph name="EXTENSION_NAME" />”?</translation>
 <translation id="5243522832766285132">Încearcă din nou în câteva momente</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Erori de hardware</translation>
 <translation id="5877064549588274448">Canalul a fost schimbat. Reporniți dispozitivul pentru a aplica modificările.</translation>
 <translation id="5877584842898320529">Imprimanta selectată nu este disponibilă sau nu este instalată corect. <ph name="BR" /> Verifică imprimanta sau încearcă să selectezi altă imprimantă.</translation>
-<translation id="5880247576487732437">Indicativ prezent</translation>
 <translation id="5882919346125742463">Rețele cunoscute</translation>
 <translation id="5884474295213649357">Această filă este conectată la un dispozitiv USB.</translation>
 <translation id="5885324376209859881">Gestionați setările media...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Introdu ID-ul aplicației sau adresa URL din magazinul web</translation>
 <translation id="804786196054284061">Acord de licență pentru utilizatorul final</translation>
 <translation id="8049705080247101012">Google a semnalat „<ph name="EXTENSION_NAME" />” ca extensie rău intenționată și instalarea nu a fost permisă</translation>
-<translation id="8049913480579063185">Numele extensiei</translation>
 <translation id="8050038245906040378">Semnare comercială a codului Microsoft</translation>
 <translation id="8053278772142718589">Fișiere PKCS #12</translation>
 <translation id="8053390638574070785">Reîncarcă această pagină</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Inserează și potrivește stilul</translation>
 <translation id="8449036207308062757">Gestionează stocarea</translation>
 <translation id="8452135315243592079">Lipsește cardul SIM</translation>
-<translation id="845627346958584683">Ora expirării</translation>
 <translation id="845702320058262034">Nu se poate conecta. Asigură-te că funcția Bluetooth a telefonului este pornită.</translation>
 <translation id="8457451314607652708">Importă marcajele</translation>
 <translation id="8460336040822756677">Dacă dezactivezi Smart Lock pentru <ph name="DEVICE_TYPE" />, nu vei putea debloca dispozitivele Chrome folosind telefonul. Va fi necesar să introduci parola.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Computerul conține un modul securizat, care este folosit pentru a implementa numeroase funcții esențiale de securitate în sistemul de operare Chrome. Accesează Centrul de ajutor Chromebook pentru a afla mai multe: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Este disponibilă o actualizare de sistem. Se pregătește descărcarea...</translation>
 <translation id="8639047128869322042">Se caută software dăunător...</translation>
-<translation id="8642171459927087831">Indicativ de acces</translation>
 <translation id="8642900771896232685">2 secunde</translation>
 <translation id="8642947597466641025">Măriți textul</translation>
 <translation id="8643418457919840804">Pentru a continua, alege o opțiune:</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 6ff52907..e1a5444 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="NETWORK_NAME" /> (<ph name="PROVIDER_NAME" />)</translation>
 <translation id="1353980523955420967">Не удается найти файл PPD. Убедитесь, что устройство Chromebook подключено к Интернету, и повторите попытку.</translation>
 <translation id="1355466263109342573">Плагин "<ph name="PLUGIN_NAME" />" заблокирован</translation>
-<translation id="1357589289913453911">Идентификатор расширения</translation>
 <translation id="1358741672408003399">Правописание и грамматика</translation>
 <translation id="1361164813881551742">Добавить вручную</translation>
 <translation id="1361655923249334273">Не используется</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">С электронного ключа будут удалены все данные, включая PIN-код</translation>
 <translation id="1475502736924165259">У вас имеются сертификаты, которые не попадают ни в одну из других категорий</translation>
 <translation id="1476607407192946488">&amp;Язык</translation>
-<translation id="1477301030751268706">Кеш токенов API идентификационных данных</translation>
 <translation id="1478340334823509079">Подробные сведения: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Установка не разрешена</translation>
 <translation id="1483493594462132177">Отправить</translation>
@@ -727,7 +725,6 @@
 <translation id="2090876986345970080">Настройка безопасности системы</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2097372108957554726">Войдите в Chrome, чтобы зарегистрировать новое устройство</translation>
-<translation id="2098305189700762159">Не найдено</translation>
 <translation id="2099172618127234427">Вы включаете функции отладки Chrome OS. Будет настроен SSHD-демон и разрешена загрузка с USB-дисков.</translation>
 <translation id="2099686503067610784">Удалить сертификат сервера <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
@@ -939,7 +936,6 @@
 <translation id="2386926718981642523">Чтобы обратиться к Ассистенту, скажите "Окей, Google"</translation>
 <translation id="2387458720915042159">Тип подключения через прокси-сервер</translation>
 <translation id="2391419135980381625">Стандартный шрифт</translation>
-<translation id="2391762656119864333">Отменить</translation>
 <translation id="2392369802118427583">Активировать</translation>
 <translation id="2394566832561516196">Настройки будут сброшены при следующей перезагрузке.</translation>
 <translation id="2395616325548404795">Устройство <ph name="DEVICE_TYPE" /> зарегистрировано в организации, но при передаче данных об объекте и местоположении произошла ошибка. Введите эту информацию вручную в консоли администратора.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Добавить в отчет недавнюю историю Ассистента с помощью Sherlog. В ней могут содержаться ваши личные данные, информация о местонахождении и сведения для отладки. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Добавление папки</translation>
 <translation id="389589731200570180">Проявляйте гостеприимство</translation>
-<translation id="3898521660513055167">Статус токена</translation>
 <translation id="389901847090970821">Выберите раскладку клавиатуры</translation>
 <translation id="3899879303189199559">Не в Сети больше года</translation>
 <translation id="3900966090527141178">Экспорт паролей</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Удалить приложение?</translation>
 <translation id="5235750401727657667">Замена страницы, которая появляется на новой вкладке</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>
 <translation id="5243522832766285132">Повторите попытку через несколько секунд</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Ошибки отсутствия страницы в памяти</translation>
 <translation id="5877064549588274448">Канал изменен. Чтобы изменения вступили в силу, перезапустите устройство.</translation>
 <translation id="5877584842898320529">Этот принтер недоступен или настроен неправильно.<ph name="BR" />Проверьте его или выберите другой.</translation>
-<translation id="5880247576487732437">Наличие токена</translation>
 <translation id="5882919346125742463">Сохраненные сети</translation>
 <translation id="5884474295213649357">Эта вкладка подключена к USB-устройству</translation>
 <translation id="5885324376209859881">Управление настройками мультимедийных устройств...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Введите идентификатор приложения или URL интернет-магазина</translation>
 <translation id="804786196054284061">Лицензионное соглашение с конечным пользователем</translation>
 <translation id="8049705080247101012">Google заблокировал установку потенциально опасной программы (<ph name="EXTENSION_NAME" />).</translation>
-<translation id="8049913480579063185">Название расширения</translation>
 <translation id="8050038245906040378">Подписывание коммерческого кода Microsoft</translation>
 <translation id="8053278772142718589">Файлы PKCS #12</translation>
 <translation id="8053390638574070785">Обновить страницу</translation>
@@ -4947,7 +4939,6 @@
 <translation id="8449008133205184768">Вставить с соблюдением стиля</translation>
 <translation id="8449036207308062757">Управление хранилищем</translation>
 <translation id="8452135315243592079">SIM-карта не обнаружена</translation>
-<translation id="845627346958584683">Время окончания срока действия</translation>
 <translation id="845702320058262034">Не удается подключиться к телефону. Убедитесь, что на нем включен Bluetooth.</translation>
 <translation id="8457451314607652708">Импортировать закладки</translation>
 <translation id="8460336040822756677">Если вы отключите Smart Lock для устройства <ph name="DEVICE_TYPE" />, то не сможете разблокировать устройства Chrome с помощью телефона и вам потребуется вводить пароль.</translation>
@@ -5061,7 +5052,6 @@
 <translation id="8637542770513281060">Компьютер оснащен безопасным модулем, который используется для выполнения многих важных функций защиты в Chrome OS. Более подробную информацию можно получить в Справочном центре Chromebook: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Доступно обновление системы. Подготовка к скачиванию…</translation>
 <translation id="8639047128869322042">Поиск вредоносного ПО…</translation>
-<translation id="8642171459927087831">Токен доступа</translation>
 <translation id="8642900771896232685">2 секунды</translation>
 <translation id="8642947597466641025">Увеличить размер шрифта</translation>
 <translation id="8643418457919840804">Чтобы продолжить, выберите один из вариантов:</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index fa176c1..973012c 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Súbor PPD sa nepodarilo nájsť. Skontrolujte, či je Chromebook online, a skúste to znova.</translation>
 <translation id="1355466263109342573">Doplnok <ph name="PLUGIN_NAME" /> je blokovaný</translation>
-<translation id="1357589289913453911">ID rozšírenia</translation>
 <translation id="1358741672408003399">Pravopis a gramatika</translation>
 <translation id="1361164813881551742">Pridať ručne</translation>
 <translation id="1361655923249334273">Nepoužitý</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Vymažú sa všetky údaje v bezpečnostnom kľúči vrátane kódu PIN</translation>
 <translation id="1475502736924165259">V súbore máte certifikáty, ktoré sa nedajú zaradiť do žiadnej z iných kategórií:</translation>
 <translation id="1476607407192946488">&amp;Nastavenia jazyka</translation>
-<translation id="1477301030751268706">Vyrovnávacia pamäť tokenu rozhrania Identity API</translation>
 <translation id="1478340334823509079">Podrobnosti: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Inštalácia nie je povolená</translation>
 <translation id="1483493594462132177">Odoslať</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Nastavenie zabezpečenia systému</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2097372108957554726">Ak chcete registrovať nové zariadenia, musíte sa prihlásiť do prehliadača Chrome</translation>
-<translation id="2098305189700762159">Nebolo nájdené</translation>
 <translation id="2099172618127234427">Aktivujete funkcie ladenia systému OS Chrome, ktoré nastavia démona sshd a umožnia spúšťanie z jednotiek USB.</translation>
 <translation id="2099686503067610784">Odstrániť certifikát servera „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Automaticky prihlasovať</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Aktivovať Asistenta pri každom vyslovení výrazu „Ok Google“</translation>
 <translation id="2387458720915042159">Typ pripojenia proxy</translation>
 <translation id="2391419135980381625">Štandardné písmo</translation>
-<translation id="2391762656119864333">Odvolať</translation>
 <translation id="2392369802118427583">Aktivovať</translation>
 <translation id="2394566832561516196">Pri ďalšom opätovnom načítaní budú nastavenia vymazané.</translation>
 <translation id="2395616325548404795">Zariadenie <ph name="DEVICE_TYPE" /> bolo úspešne zaregistrované na podnikovú správu. Nepodarilo sa však odoslať informácie o obsahu a polohe. Zadajte tieto informácie ručne v Správcovskej konzole pre toto zariadenie.</translation>
@@ -1955,7 +1951,6 @@
 <translation id="3894123633473837029">Zahrnúť nedávnu históriu Asistenta prostredníctvom aplikácie Sherlog (môže zahrnovať vašu totožnosť, polohu a informácie o ladení) <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Pridanie priečinka</translation>
 <translation id="389589731200570180">Zdieľanie s hosťami</translation>
-<translation id="3898521660513055167">Stav tokenu</translation>
 <translation id="389901847090970821">Výber klávesnice</translation>
 <translation id="3899879303189199559">Offline viac ako rok</translation>
 <translation id="3900966090527141178">Exportovanie hesiel</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">Odinštalovať aplikáciu?</translation>
 <translation id="5235750401727657667">Nahradiť stránku, ktorá sa zobrazí pri otvorení novej karty</translation>
 <translation id="5238278114306905396">Aplikácia <ph name="EXTENSION_NAME" /> bola automaticky odstránená.</translation>
-<translation id="5238369540257804368">Rozsahy</translation>
 <translation id="5241128660650683457">Čítať všetky vaše údaje na weboch, ktoré navštevujete</translation>
 <translation id="5242724311594467048">Povoliť rozšírenie <ph name="EXTENSION_NAME" />?</translation>
 <translation id="5243522832766285132">Skúste to znova o chvíľu</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">Závažné chyby</translation>
 <translation id="5877064549588274448">Kanál sa zmenil. Ak chcete zmeny použiť, reštartujte zariadenie.</translation>
 <translation id="5877584842898320529">Vybraná tlačiareň nie je k dispozícii alebo nie je správne nainštalovaná. <ph name="BR" />Skontrolujte tlačiareň alebo skúste vybrať inú.</translation>
-<translation id="5880247576487732437">Token je k dispozícii</translation>
 <translation id="5882919346125742463">Známe siete</translation>
 <translation id="5884474295213649357">Táto karta je pripojená k zariadeniu USB.</translation>
 <translation id="5885324376209859881">Spravovať nastavenia médií...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">Zadajte ID aplikácie alebo adresu webového obchodu</translation>
 <translation id="804786196054284061">Licenčná zmluva koncového používateľa</translation>
 <translation id="8049705080247101012">Google označil rozšírenie <ph name="EXTENSION_NAME" /> ako škodlivé a jeho inštalácia bola zakázaná</translation>
-<translation id="8049913480579063185">Názov rozšírenia</translation>
 <translation id="8050038245906040378">Komerčné podpisovanie kódu Microsoft</translation>
 <translation id="8053278772142718589">Súbory PKCS #12</translation>
 <translation id="8053390638574070785">Obnoviť túto stránku</translation>
@@ -4945,7 +4937,6 @@
 <translation id="8449008133205184768">Prilepiť a prispôsobiť štýlu</translation>
 <translation id="8449036207308062757">Spravovať úložisko</translation>
 <translation id="8452135315243592079">Chýba SIM karta</translation>
-<translation id="845627346958584683">Čas vypršania platnosti</translation>
 <translation id="845702320058262034">Nedá sa pripojiť. Skontrolujte, či je v telefóne zapnuté rozhranie Bluetooth.</translation>
 <translation id="8457451314607652708">Import záložiek</translation>
 <translation id="8460336040822756677">Ak funkciu Smart Lock pre <ph name="DEVICE_TYPE" /> vypnete, nebudete môcť svoje zariadenia Chrome odomknúť pomocou telefónu. Budete musieť zadať heslo.</translation>
@@ -5059,7 +5050,6 @@
 <translation id="8637542770513281060">Váš počítač obsahuje bezpečnostný modul, ktorý sa v systéme Chrome OS používa na implementáciu mnohých dôležitých bezpečnostných funkcií. Ďalšie informácie nájdete v centre pomoci pre Chromebooky na adrese https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">K dispozícii je systémová aktualizácia. Pripravuje sa stiahnutie...</translation>
 <translation id="8639047128869322042">Vyhľadáva sa škodlivý softvér…</translation>
-<translation id="8642171459927087831">Prístupový token</translation>
 <translation id="8642900771896232685">2 sekundy</translation>
 <translation id="8642947597466641025">Zväčšiť text</translation>
 <translation id="8643418457919840804">Ak chcete pokračovať, vyberte možnosť:</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 439b5be..0af1d25 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Datoteke PPD ni mogoče najti. Preverite, ali je Chromebook povezan v splet, in poskusite znova.</translation>
 <translation id="1355466263109342573">Vtičnik <ph name="PLUGIN_NAME" /> je blokiran</translation>
-<translation id="1357589289913453911">ID razširitve</translation>
 <translation id="1358741672408003399">Črkovanje in slovnica</translation>
 <translation id="1361164813881551742">Ročno dodajanje</translation>
 <translation id="1361655923249334273">Neuporabljeno</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">S tem bodo izbrisani vsi podatki na varnostnem ključu, vključno z njegovo kodo PIN</translation>
 <translation id="1475502736924165259">V dokumentu so potrdila, ki ne sodijo v nobeno od drugih kategorij</translation>
 <translation id="1476607407192946488">&amp;Jezikovne nastavitve</translation>
-<translation id="1477301030751268706">Predpomnilnik žetonov za API za identiteto</translation>
 <translation id="1478340334823509079">Podatki: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Namestitev ni omogočena</translation>
 <translation id="1483493594462132177">Pošlji</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Varnostna nastavitev sistema</translation>
 <translation id="2091887806945687916">Zvok</translation>
 <translation id="2097372108957554726">Za registracijo novih naprav se morate prijaviti v Chrome</translation>
-<translation id="2098305189700762159">Ni najdeno</translation>
 <translation id="2099172618127234427">Omogočili boste funkcije za odpravljanje napak sistema Chrome OS, tako da boste nastavili sshd daemon in omogočili zagon prek pogonov USB.</translation>
 <translation id="2099686503067610784">Ali želite izbrisati strežniško potrdilo »<ph name="CERTIFICATE_NAME" />«?</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Dostopajte do Pomočnika, kadar koli izgovorite »Ok Google«</translation>
 <translation id="2387458720915042159">Vrsta povezave strežnika proxy</translation>
 <translation id="2391419135980381625">Standardna pisava</translation>
-<translation id="2391762656119864333">Prekliči</translation>
 <translation id="2392369802118427583">Aktiviraj</translation>
 <translation id="2394566832561516196">Nastavitve bodo izbrisane pri naslednjem vnovičnem nalaganju.</translation>
 <translation id="2395616325548404795">Naprava <ph name="DEVICE_TYPE" /> je bila uspešno prijavljena v upravljanje v podjetju, vendar ni poslala svojih podatkov o sredstvih in lokaciji. Te podatke ročno vnesite iz konzole Admin console za to napravo.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Vključitev nedavne zgodovine Pomočnika prek Sherloga. To morda vključuje vašo identiteto, lokacijo in podatke o odpravljanju napak. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Dodajanje mape</translation>
 <translation id="389589731200570180">Skupna raba z gosti</translation>
-<translation id="3898521660513055167">Stanje žetona</translation>
 <translation id="389901847090970821">Izbira tipkovnice</translation>
 <translation id="3899879303189199559">Brez povezave več kot eno leto</translation>
 <translation id="3900966090527141178">Izvoz gesel</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Želite odstraniti aplikacijo?</translation>
 <translation id="5235750401727657667">Zamenjaj prikazano stran pri odpiranju novega zavihka</translation>
 <translation id="5238278114306905396">Aplikacija »<ph name="EXTENSION_NAME" />« je bila samodejno odstranjena.</translation>
-<translation id="5238369540257804368">Obsegi</translation>
 <translation id="5241128660650683457">Branje vseh vaših podatkov na spletnih mestih, ki jih obiščete</translation>
 <translation id="5242724311594467048">Ali želite omogočiti »<ph name="EXTENSION_NAME" />«?</translation>
 <translation id="5243522832766285132">Poskusite znova čez nekaj trenutkov</translation>
@@ -3234,7 +3228,6 @@
 <translation id="5870155679953074650">Težke napake</translation>
 <translation id="5877064549588274448">Kanal spremenjen. Znova zaženite napravo, da uveljavite spremembe.</translation>
 <translation id="5877584842898320529">Izbrani tiskalnik ni na voljo ali ni pravilno nameščen. <ph name="BR" /> Preverite tiskalnik ali izberite drugega.</translation>
-<translation id="5880247576487732437">Žeton je na voljo</translation>
 <translation id="5882919346125742463">Znana omrežja</translation>
 <translation id="5884474295213649357">Ta zavihek je povezan z napravo USB.</translation>
 <translation id="5885324376209859881">Upravljanje nastavitev predstavnosti ...</translation>
@@ -4699,7 +4692,6 @@
 <translation id="8045923671629973368">Vnesite ID aplikacije ali URL spletne trgovine</translation>
 <translation id="804786196054284061">Licenčna pogodba za končnega uporabnika</translation>
 <translation id="8049705080247101012">Google je z zastavico označil razširitev »<ph name="EXTENSION_NAME" />« kot zlonamerno in preprečil namestitev</translation>
-<translation id="8049913480579063185">Ime razširitve</translation>
 <translation id="8050038245906040378">Microsoftovo komercialno podpisovanje kode</translation>
 <translation id="8053278772142718589">Datoteke PKCS #12</translation>
 <translation id="8053390638574070785">Znova naloži to stran</translation>
@@ -4950,7 +4942,6 @@
 <translation id="8449008133205184768">Prilepite in uskladite slog</translation>
 <translation id="8449036207308062757">Upravljanje shrambe</translation>
 <translation id="8452135315243592079">Ni kartice SIM</translation>
-<translation id="845627346958584683">Ura poteka</translation>
 <translation id="845702320058262034">Povezave ni mogoče vzpostaviti. Bluetooth v telefonu mora biti vklopljen.</translation>
 <translation id="8457451314607652708">Uvozi zaznamke</translation>
 <translation id="8460336040822756677">Če izklopite Smart Lock za napravo <ph name="DEVICE_TYPE" />, naprav Chrome ne boste mogli odkleniti s telefonom. Vnesti boste morali geslo.</translation>
@@ -5064,7 +5055,6 @@
 <translation id="8637542770513281060">V računalnik je vgrajen varni modul, potreben za številne nujne varnostne funkcije v sistemu OS Chrome. Več o njem lahko preberete v centru za pomoč za Chromebook: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="8637688295594795546">Na voljo je sistemska posodobitev. Priprava za prenos ...</translation>
 <translation id="8639047128869322042">Iskanje škodljive programske opreme ...</translation>
-<translation id="8642171459927087831">Žeton za dostop</translation>
 <translation id="8642900771896232685">2 sekundi</translation>
 <translation id="8642947597466641025">Povečaj besedilo</translation>
 <translation id="8643418457919840804">Če želite nadaljevati, izberite možnost:</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 8cf743a..4084517 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Не можемо да пронађемо PPD. Проверите да ли је Chromebook онлајн и пробајте поново.</translation>
 <translation id="1355466263109342573">Додатна компонента <ph name="PLUGIN_NAME" /> је блокирана</translation>
-<translation id="1357589289913453911">ИД додатка</translation>
 <translation id="1358741672408003399">Правопис и граматика</translation>
 <translation id="1361164813881551742">Додајте ручно</translation>
 <translation id="1361655923249334273">Није коришћен</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Тиме ћете обрисати све податке са безбедносног кључа, укључујући његов PIN</translation>
 <translation id="1475502736924165259">На датотеци има сертификата који се не уклапају ни у једну другу категорију</translation>
 <translation id="1476607407192946488">&amp;Подешавања језика</translation>
-<translation id="1477301030751268706">Кеш токена API-ја за идентитет</translation>
 <translation id="1478340334823509079">Детаљи: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Инсталација није омогућена</translation>
 <translation id="1483493594462132177">Пошаљи</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Безбедносно подешавање система</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2097372108957554726">Потребно је да се пријавите у Chrome да бисте регистровали нове уређаје</translation>
-<translation id="2098305189700762159">Није пронађено</translation>
 <translation id="2099172618127234427">Омогућавате Chrome ОС функције за отклањање грешака које ће подесити sshd daemon и омогућити укључивање са USB дискова.</translation>
 <translation id="2099686503067610784">Желите да избришете серверски сертификат „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Приступајте Помоћнику сваки пут када кажете „Ок Google“</translation>
 <translation id="2387458720915042159">Тип везе са проксијем</translation>
 <translation id="2391419135980381625">Стандардни фонт</translation>
-<translation id="2391762656119864333">Опозови</translation>
 <translation id="2392369802118427583">Активирај</translation>
 <translation id="2394566832561516196">Подешавања ће бити обрисана при следећем поновном учитавању.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> је регистрован за управљање предузећем, али није послао информације о елементу и локацији. Унесите те информације ручно на Admin console-у за овај уређај.</translation>
@@ -1953,7 +1949,6 @@
 <translation id="3894123633473837029">Уврсти недавну историју Помоћника преко Sherlog-а. Она може да обухвата ваш идентитет, локацију и информације о отклањању грешака. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Додајте директоријум</translation>
 <translation id="389589731200570180">Делите са гостима</translation>
-<translation id="3898521660513055167">Статус токена</translation>
 <translation id="389901847090970821">Изаберите тастатуру</translation>
 <translation id="3899879303189199559">Офлајн дуже од годину дана</translation>
 <translation id="3900966090527141178">Извезите лозинке</translation>
@@ -2789,7 +2784,6 @@
 <translation id="5235050375939235066">Желите ли да деинсталирате апликацију?</translation>
 <translation id="5235750401727657667">Замените страницу која се прикаже кад отворите нову картицу</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>
 <translation id="5243522832766285132">Пробајте поново за неколико тренутака</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">Грешке у вези са хард-диском</translation>
 <translation id="5877064549588274448">Канал је промењен. Покрените поново уређај да бисте применили промене.</translation>
 <translation id="5877584842898320529">Изабрани штампач није доступан или није правилно инсталиран. <ph name="BR" /> Проверите штампач или изаберите неки други.</translation>
-<translation id="5880247576487732437">Токен је присутан</translation>
 <translation id="5882919346125742463">Познате мреже</translation>
 <translation id="5884474295213649357">Ова картица је повезана са USB уређајем.</translation>
 <translation id="5885324376209859881">Управљај подешавањима медија...</translation>
@@ -4695,7 +4688,6 @@
 <translation id="8045923671629973368">Унесите ИД апликације или URL веб-продавнице</translation>
 <translation id="804786196054284061">Уговор о лиценцирању са крајњим корисником</translation>
 <translation id="8049705080247101012">Google је означио додатак „<ph name="EXTENSION_NAME" />“ као злонамеран и инсталација је спречена</translation>
-<translation id="8049913480579063185">Назив додатка</translation>
 <translation id="8050038245906040378">Microsoft потписивање комерцијалних кодова</translation>
 <translation id="8053278772142718589">PKCS #12 датотеке</translation>
 <translation id="8053390638574070785">Поново учитај ову страницу</translation>
@@ -4946,7 +4938,6 @@
 <translation id="8449008133205184768">Налепи са подударањем стила</translation>
 <translation id="8449036207308062757">Управљај меморијским простором</translation>
 <translation id="8452135315243592079">SIM картица недостаје</translation>
-<translation id="845627346958584683">Време истека</translation>
 <translation id="845702320058262034">Повезивање није успело. Проверите да ли је Bluetooth на телефону укључен.</translation>
 <translation id="8457451314607652708">Увези обележиваче</translation>
 <translation id="8460336040822756677">Ако искључите Smart Lock за <ph name="DEVICE_TYPE" />, нећете моћи да откључавате Chrome уређаје помоћу телефона. Мораћете да уносите лозинку.</translation>
@@ -5060,7 +5051,6 @@
 <translation id="8637542770513281060">Рачунар садржи безбедносни модул, који се користи за примену многих изузетно важних безбедносних функција у Chrome ОС-у. Посетите центар за помоћ за Chromebook да бисте сазнали више: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Доступно је ажурирање система. Припрема за преузимање...</translation>
 <translation id="8639047128869322042">Тражи се штетни софтвер…</translation>
-<translation id="8642171459927087831">Ознака приступа</translation>
 <translation id="8642900771896232685">2 секунде</translation>
 <translation id="8642947597466641025">Увећај текст</translation>
 <translation id="8643418457919840804">Да бисте наставили, изаберите неку опцију:</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 872e33d6..e22fa16 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Det gick inte att hitta PPD-filen. Kontrollera att Chromebook är ansluten till internet och försök igen.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> har blockerats</translation>
-<translation id="1357589289913453911">Tilläggs-ID</translation>
 <translation id="1358741672408003399">Stavning och grammatik</translation>
 <translation id="1361164813881551742">Lägg till manuellt</translation>
 <translation id="1361655923249334273">Oanvänd</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">All data på säkerhetsnyckeln raderas, inklusive pinkoden</translation>
 <translation id="1475502736924165259">Du har certifikat i din dator som inte passar i några av de andra kategorierna</translation>
 <translation id="1476607407192946488">&amp;Språkinställningar</translation>
-<translation id="1477301030751268706">Tokencacheminne för identitets-API</translation>
 <translation id="1478340334823509079">Detaljer: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Installationen är inte aktiverad</translation>
 <translation id="1483493594462132177">Skicka</translation>
@@ -727,7 +725,6 @@
 <translation id="2090876986345970080">Systemets säkerhetsinställning</translation>
 <translation id="2091887806945687916">Ljud</translation>
 <translation id="2097372108957554726">Du måste logga in i Chrome för att kunna registrera nya enheter</translation>
-<translation id="2098305189700762159">Hittades inte</translation>
 <translation id="2099172618127234427">Du aktiverar felsökningsfunktioner i Chrome OS som konfigurerar sshd daemon och aktiverar start från USB-enheter.</translation>
 <translation id="2099686503067610784">Vill du ta bort servercertifikatet <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automatisk inloggning</translation>
@@ -939,7 +936,6 @@
 <translation id="2386926718981642523">Starta assistenten när du säger ”Ok Google”</translation>
 <translation id="2387458720915042159">Proxyanslutningstyp</translation>
 <translation id="2391419135980381625">Standardteckensnitt</translation>
-<translation id="2391762656119864333">Återkalla</translation>
 <translation id="2392369802118427583">Aktivera</translation>
 <translation id="2394566832561516196">Inställningarna tas bort vid nästa inläsning.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> har registrerats för företagshantering, men har inte skickat tillgångs- och platsinformation. Ange informationen manuellt i administratörskonsolen för enheten.</translation>
@@ -1956,7 +1952,6 @@
 <translation id="3894123633473837029">Inkludera ny historik för assistenten via Sherlog. Historiken kan innehålla din identitet, plats och felsökningsinformation. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Lägg till mapp</translation>
 <translation id="389589731200570180">Dela med gäster</translation>
-<translation id="3898521660513055167">Tokenstatus</translation>
 <translation id="389901847090970821">Välj tangentbord</translation>
 <translation id="3899879303189199559">Offline i mer än ett år</translation>
 <translation id="3900966090527141178">Exportera lösenord</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">Vill du avinstallera appen?</translation>
 <translation id="5235750401727657667">Ersätt den aktuella sidan när du öppnar en ny flik</translation>
 <translation id="5238278114306905396">Appen <ph name="EXTENSION_NAME" /> togs bort automatiskt.</translation>
-<translation id="5238369540257804368">Omfattningar</translation>
 <translation id="5241128660650683457">Läsa all din data på webbplatserna som du besöker</translation>
 <translation id="5242724311594467048">Vill du aktivera <ph name="EXTENSION_NAME" />?</translation>
 <translation id="5243522832766285132">Försök igen om en liten stund</translation>
@@ -3231,7 +3225,6 @@
 <translation id="5870155679953074650">Växlingsfel</translation>
 <translation id="5877064549588274448">Kanalen har ändrats. Starta om enheten om du vill tillämpa ändringarna.</translation>
 <translation id="5877584842898320529">Den valda skrivaren är inte tillgänglig eller har inte installerats korrekt. <ph name="BR" /> Kontrollera skrivaren eller välj en annan.</translation>
-<translation id="5880247576487732437">En token finns</translation>
 <translation id="5882919346125742463">Kända nätverk</translation>
 <translation id="5884474295213649357">Den här fliken är ansluten till en USB-enhet.</translation>
 <translation id="5885324376209859881">Hantera inställningar för media ...</translation>
@@ -4696,7 +4689,6 @@
 <translation id="8045923671629973368">Ange program-id eller adress i webbutik</translation>
 <translation id="804786196054284061">Licensavtal för slutanvändare</translation>
 <translation id="8049705080247101012">Google har flaggat <ph name="EXTENSION_NAME" /> som skadligt och installationen har förhindrats</translation>
-<translation id="8049913480579063185">Tilläggets namn</translation>
 <translation id="8050038245906040378">Microsofts kommersiella kodsignering</translation>
 <translation id="8053278772142718589">PKCS #12-filer</translation>
 <translation id="8053390638574070785">Hämta sidan igen</translation>
@@ -4947,7 +4939,6 @@
 <translation id="8449008133205184768">Klistra in och matcha stilen</translation>
 <translation id="8449036207308062757">Hantera lagringsutrymme</translation>
 <translation id="8452135315243592079">SIM-kort saknas</translation>
-<translation id="845627346958584683">Giltig till</translation>
 <translation id="845702320058262034">Det gick inte att ansluta. Kontrollera att Bluetooth har aktiverats på mobilen.</translation>
 <translation id="8457451314607652708">Importera bokmärken</translation>
 <translation id="8460336040822756677">Om du inaktiverar Smart Lock för <ph name="DEVICE_TYPE" /> kan du inte låsa upp dina Chrome-enheter med mobilen. Du måste ange ditt lösenord.</translation>
@@ -5061,7 +5052,6 @@
 <translation id="8637542770513281060">Datorn innehåller en säker modul som används för att implementera flera viktiga säkerhetsfunktioner i Chrome OS. Besök hjälpcentret för Chromebook om du vill läsa mer: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Systemuppdatering tillgänglig. Förbereder nedladdning...</translation>
 <translation id="8639047128869322042">Söker efter skadlig programvara …</translation>
-<translation id="8642171459927087831">Åtkomsttoken</translation>
 <translation id="8642900771896232685">2 sekunder</translation>
 <translation id="8642947597466641025">Förstora texten</translation>
 <translation id="8643418457919840804">Välj ett av alternativen:</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index bdbcd21..2d5888b 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -191,7 +191,7 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="1269405567167332785">Mipangilio ya kina</translation>
 <translation id="1272079795634619415">Simamisha</translation>
-<translation id="1272293450992660632">Thamani za PIN hazilingani.</translation>
+<translation id="1272293450992660632">Nambari za PIN hazilingani.</translation>
 <translation id="1272978324304772054">Akaunti hii ya mtumiaji siyo ya kikoa ambacho kifaa kimesajiliwa. Ikiwa unataka kujisajili kwenye kikoa tofauti unahitaji kuenda katika ufufuaji wa kifaa kwanza.</translation>
 <translation id="1274977772557788323">Mipangilio ya Hifadhi ya Adobe Flash Player</translation>
 <translation id="1274997165432133392">Vidakuzi na data ya tovuti nyingine</translation>
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Imeshindwa kupata PPD. Hakikisha kuwa Chromebook yako iko mtandaoni kisha ujaribu tena.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> imezuiwa</translation>
-<translation id="1357589289913453911">Kitambulisho cha Kiendelezi</translation>
 <translation id="1358741672408003399">Tahajia na Sarufi</translation>
 <translation id="1361164813881551742">Ongeza Mwenyewe</translation>
 <translation id="1361655923249334273">Haijatumiwa</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Hatua hii itafuta data yote kwenye ufunguo wa usalama ikiwa ni pamoja na PIN.</translation>
 <translation id="1475502736924165259">Una vyeti kwenye faili ambavyo havilangani na aina nyingine yoyote</translation>
 <translation id="1476607407192946488">Mipangilio ya Lugha</translation>
-<translation id="1477301030751268706">Akiba ya Kitambulisho cha Tokeni ya API</translation>
 <translation id="1478340334823509079">Maelezo: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Hujawasha kipengele cha kusakinisha</translation>
 <translation id="1483493594462132177">Tuma</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">Mpangilio wa usalama wa mfumo</translation>
 <translation id="2091887806945687916">Sauti</translation>
 <translation id="2097372108957554726">Unahitaji kuingia katika akaunti kwenye Chrome ili usajili vifaa vipya</translation>
-<translation id="2098305189700762159">Haikupatikana</translation>
 <translation id="2099172618127234427">Unawasha vipengele vya kutatua vya Chrome OS ambavyo vitasanidi sshd daemon na kuwezesha uwashaji kutoka kwenye hifadhi za USB.</translation>
 <translation id="2099686503067610784">Futa cheti cha seva "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Ingia katika Akaunti Kiotomatiki</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">Fikia programu ya Mratibu wakati wowote unaposema "Ok Google"</translation>
 <translation id="2387458720915042159">Aina ya muunganisho wa seva mbadala</translation>
 <translation id="2391419135980381625">Fonti wastani</translation>
-<translation id="2391762656119864333">Kufuta</translation>
 <translation id="2392369802118427583">Amilisha</translation>
 <translation id="2394566832561516196">Mipangilio itafutwa utakapopakia tena.</translation>
 <translation id="2395616325548404795">Kifaa chako cha <ph name="DEVICE_TYPE" /> kimesajiliwa kwa usimamizi wa biashara, lakini hakikuweza kutuma kipengee na maelezo yake ya mahali. Tafadhali weka maelezo haya mwenyewe kutoka kwenye dashibodi ya Msimamizi wako wa kifaa hiki.</translation>
@@ -1311,7 +1307,7 @@
 <translation id="2932483646085333864">Ondoka kisha uingie katika akaunti tena ili uanze kusawazisha</translation>
 <translation id="2932883381142163287">Ripoti matumizi mabaya</translation>
 <translation id="2936851848721175671">Hifadhi nakala na urejeshe</translation>
-<translation id="2938225289965773019">Fungua viungo vya <ph name="PROTOCOL" /></translation>
+<translation id="2938225289965773019">Kufungua viungo vya <ph name="PROTOCOL" /></translation>
 <translation id="2939938020978911855">Onyesha vifaa vya Bluetooth vinavyopatikana</translation>
 <translation id="2941112035454246133">Chini</translation>
 <translation id="2942560570858569904">Inasubiri...</translation>
@@ -1950,7 +1946,6 @@
 <translation id="3894123633473837029">Jumuisha historia ya hivi majuzi ya programu ya Mratibu kupitia Sherlog. Huenda hali hii ikajumuisha maelezo ya utatuzi, utambulisho na mahali uliko. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Ongeza folda</translation>
 <translation id="389589731200570180">Shiriki na walioalikwa</translation>
-<translation id="3898521660513055167">Hali ya Tokeni</translation>
 <translation id="389901847090970821">Chagua kibodi</translation>
 <translation id="3899879303189199559">Nje ya mkando kwa zaidi ya mwaka mmoja</translation>
 <translation id="3900966090527141178">Hamisha manenosiri</translation>
@@ -2276,7 +2271,7 @@
 <translation id="4412698727486357573">Kituo cha usaidizi</translation>
 <translation id="44141919652824029">Ungependa kuiruhusu "<ph name="APP_NAME" />" ipate orodha ya vifaa vyako vya USB vilivyounganishwa?</translation>
 <translation id="4414232939543644979">Dirisha &amp;Fiche Jipya</translation>
-<translation id="4414386768539506503">Weka PIN ya ufunguo wako wa usalama ili uangalie data yake ya kuingia katika akaunti. Ikiwa hujui PIN, utahitaji kubadilisha ufunguo wa usalama.</translation>
+<translation id="4414386768539506503">Weka PIN ya ufunguo wako wa usalama ili uangalie data yake ya kuingia katika akaunti. Ikiwa hujui PIN, utahitaji kuweka upya mipangilio ya ufunguo wa usalama.</translation>
 <translation id="4415245286584082850">Haikupata kifaa chochote. Fungua makala kutoka kituo cha usaidizi katika kichupo kipya.</translation>
 <translation id="4415276339145661267">Dhibiti Akaunti yako ya Google</translation>
 <translation id="4415748029120993980">SECG kizingo cha mviringo secp384r1 (pia inayojuliakana kama NIST P-384)</translation>
@@ -2784,7 +2779,6 @@
 <translation id="5235050375939235066">Ungependa kuondoa programu?</translation>
 <translation id="5235750401727657667">Badilisha ukurasa unaoona unapokifungua kichupo kipya</translation>
 <translation id="5238278114306905396">Programu ya "<ph name="EXTENSION_NAME" />" iliondolewa kiotomatiki.</translation>
-<translation id="5238369540257804368">Upeo</translation>
 <translation id="5241128660650683457">Soma data yako yote kwenye tovuti unazotembelea</translation>
 <translation id="5242724311594467048">Ungependa kuwasha "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Tafadhali jaribu tena baada ya muda mfupi</translation>
@@ -3223,7 +3217,6 @@
 <translation id="5870155679953074650">Mabadiliko ya hifadhi</translation>
 <translation id="5877064549588274448">Kituo kimebadilishwa. Zima na uwashe kifaa chako ili mabadiliko yaanze kutumika.</translation>
 <translation id="5877584842898320529">Printa iliyochaguliwa haipatikani au haijasakinishwa vizuri. <ph name="BR" />Angalia printa yako au ujaribu kuchagua printa nyingine.</translation>
-<translation id="5880247576487732437">Tokeni Ipo</translation>
 <translation id="5882919346125742463">Mitandao Inayojulikana</translation>
 <translation id="5884474295213649357">Kichupo hiki kimeunganishwa kwenye kifaa cha USB.</translation>
 <translation id="5885324376209859881">Dhibiti mipangilio ya mawasiliano...</translation>
@@ -4690,7 +4683,6 @@
 <translation id="8045923671629973368">Weka kitambulisho cha programu au URL ya duka la wavuti</translation>
 <translation id="804786196054284061">Makubaliano ya Leseni ya Mtumiaji wa Hatima</translation>
 <translation id="8049705080247101012">Google imeripoti kuwa "<ph name="EXTENSION_NAME" />" ni programu hasidi na imezuia kuisakinisha</translation>
-<translation id="8049913480579063185">Jina la Kiendelezi</translation>
 <translation id="8050038245906040378">Uwekaji Sahihi kwa Misimbo kwa Biashara kutoka Microsoft</translation>
 <translation id="8053278772142718589">Faili PKCS #12</translation>
 <translation id="8053390638574070785">Pakia Ukurasa Huu Upya</translation>
@@ -4942,7 +4934,6 @@
 <translation id="8449008133205184768">Bandika na Ulinganishe Mtindo</translation>
 <translation id="8449036207308062757">Dhibiti hifadhi</translation>
 <translation id="8452135315243592079">Hakuna SIM kadi</translation>
-<translation id="845627346958584683">Wakati wa Muda Kuisha</translation>
 <translation id="845702320058262034">Imeshindwa kuunganisha. Hakikisha kwamba umewasha Bluetooth ya simu yako.</translation>
 <translation id="8457451314607652708">Leta alamisho</translation>
 <translation id="8460336040822756677">Ukizima kipengele cha Smart Lock cha <ph name="DEVICE_TYPE" />, hutaweza kufungua vifaa vya Chrome ukitumia simu yako. Utahitajika kuandika nenosiri lako.</translation>
@@ -5056,7 +5047,6 @@
 <translation id="8637542770513281060">Kompyuta yako ina sehemu salama ambayo inatumiwa kutekeleza vipengele vingi muhimu vya usalama kwenye Mfumo wa Uendeshaji wa Chrome. Tembelea Kituo cha Usaidizi cha Chromebook ili upate malezo zaidi: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Usasishaji wa mfumo unaopatikana. Inajitayarisha kupakua...</translation>
 <translation id="8639047128869322042">Inatafuta programu hatari...</translation>
-<translation id="8642171459927087831">Tokeni ya Ufikiaji</translation>
 <translation id="8642900771896232685">Sekunde 2</translation>
 <translation id="8642947597466641025">Fanya Matini Kuwa Makubwa</translation>
 <translation id="8643418457919840804">Ili uendelee, teua chaguo moja:</translation>
@@ -5137,7 +5127,7 @@
 <translation id="8734073480934656039">Kuwasha mpangilio huu huruhusu programu ya skrini nzima kuzindua kiotomatiki kifaa kinapowashwa.</translation>
 <translation id="873545264931343897"><ph name="PLUGIN_NAME" /> ikikamilisha kusasisha, pakia upya ukurasa ili kuiwasha</translation>
 <translation id="8736288397686080465">Tovuti hii imesasishwa chini chini.</translation>
-<translation id="8737685506611670901">Fungua viungo vya <ph name="PROTOCOL" /> badala ya <ph name="REPLACED_HANDLER_TITLE" /></translation>
+<translation id="8737685506611670901">Kufungua viungo vya <ph name="PROTOCOL" /> badala ya <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8743390665131937741">Kiwango cha ukuzaji wa skrini nzima:</translation>
 <translation id="8743864605301774756">Ulisasishwa saa 1 iliyopita</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 56e25b4..a6cce3b 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPDயைக் கண்டறிய முடியவில்லை. உங்கள் Chromebook ஆன்லைனில் இருப்பதை உறுதிசெய்து, மீண்டும் முயலவும்.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> தடுக்கப்பட்டுள்ளது</translation>
-<translation id="1357589289913453911">நீட்டிப்பு ஐடி</translation>
 <translation id="1358741672408003399">இலக்கணம் மற்றும் எழுத்துப்பிழை</translation>
 <translation id="1361164813881551742">கைமுறையாகச் சேர்</translation>
 <translation id="1361655923249334273">பயன்படுத்தாத</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">பாதுகாப்பு விசையில் சேமிக்கப்பட்டுள்ள பின் உட்பட அனைத்துத் தரவையும் இது அழிக்கும்</translation>
 <translation id="1475502736924165259">பிற வகைகள் எவற்றிலும் பொருந்தாத சான்றிதழ்கள் கோப்பில் உள்ளன</translation>
 <translation id="1476607407192946488">&amp;மொழி அமைப்புகள்</translation>
-<translation id="1477301030751268706">அடையாள API இன் டோக்கன் தேக்ககம்</translation>
 <translation id="1478340334823509079">விவரங்கள்: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">நிறுவுதல் இயக்கப்படவில்லை</translation>
 <translation id="1483493594462132177">அனுப்பு</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">முறைமை பாதுகாப்பு அமைப்பு</translation>
 <translation id="2091887806945687916">ஒலி</translation>
 <translation id="2097372108957554726">புதிய சாதனங்களைப் பதிவுசெய்ய நீங்கள் Chrome இல் உள்நுழைய வேண்டும்</translation>
-<translation id="2098305189700762159">கண்டறிய முடியவில்லை</translation>
 <translation id="2099172618127234427">sshd daemonனை அமைத்து, USB டிரைவ்களிலிருந்து தொடங்குவதை இயக்கும் Chrome OS பிழைத் திருத்த அம்சங்களை இயக்குகிறீர்கள்.</translation>
 <translation id="2099686503067610784">சேவையக சான்றிதழ் "<ph name="CERTIFICATE_NAME" />" ஐ நீக்கவா?</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">"Ok Google" என்று சொல்லி எந்த நேரத்திலும் அசிஸ்டண்ட்டை அணுகலாம்</translation>
 <translation id="2387458720915042159">ப்ராக்ஸி இணைப்பு வகை</translation>
 <translation id="2391419135980381625">நிலையான எழுத்துரு</translation>
-<translation id="2391762656119864333">திரும்பப்பெறு</translation>
 <translation id="2392369802118427583">செயல்படுத்து</translation>
 <translation id="2394566832561516196">அடுத்த மறுஏற்றத்தில் அமைப்புகள் அழிக்கப்படும்.</translation>
 <translation id="2395616325548404795">உங்கள் <ph name="DEVICE_TYPE" /> சாதனம் நிறுவன மேலாண்மைக்குப் பதிவுசெய்யப்பட்டது, ஆனால் அதன் பண்பையும் இருப்பிடத் தகவலையும் அனுப்ப முடியவில்லை. இந்தச் சாதனத்திற்கான இந்தத் தகவலை உங்கள் Admin console இலிருந்து நீங்களாகவே உள்ளிடவும்.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">சமீபத்தில் அசிஸ்டண்ட்டைப் பயன்படுத்தித் தேடியவற்றையும் Sherlog மூலம் சேர். இதில் உங்கள் அடையாளம், இருப்பிடம் மற்றும் பிழைத்திருத்தத் தகவல் ஆகியவை இருக்கக்கூடும். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">கோப்புறையைச் சேர்</translation>
 <translation id="389589731200570180">விருந்தினர்களுடன் பகிரவும்</translation>
-<translation id="3898521660513055167">டோக்கன் நிலை</translation>
 <translation id="389901847090970821">விசைப்பலகையைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="3899879303189199559">ஒரு வருடத்திற்கும் மேலாக ஆஃப்லைனில் உள்ளது</translation>
 <translation id="3900966090527141178">கடவுச்சொற்களை ஏற்று</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">ஆப்ஸை நிறுவல் நீக்கவா?</translation>
 <translation id="5235750401727657667">புதிய தாவலைத் திறக்கும் போது காண்பிக்கப்படும் பக்கத்தை மாற்று</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>
 <translation id="5243522832766285132">ஒரு சில வினாடிகளில் மீண்டும் முயலவும்</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">ஹார்டு ஃபால்ட்கள்</translation>
 <translation id="5877064549588274448">சேனல் மாற்றப்பட்டது. மாற்றங்களைச் செயல்படுத்த உங்கள் சாதனத்தை மீண்டும் தொடங்கவும்.</translation>
 <translation id="5877584842898320529">தேர்ந்தெடுத்த பிரிண்டர் இல்லை அல்லது சரியாக நிறுவப்படவில்லை.<ph name="BR" /> பிரிண்டரைச் சரிபார்க்கவும் அல்லது மற்றொரு பிரிண்டரைத் தேர்ந்தெடுக்கவும்.</translation>
-<translation id="5880247576487732437">டோக்கன் உள்ளது</translation>
 <translation id="5882919346125742463">தெரிந்த நெட்வொர்க்குகள்</translation>
 <translation id="5884474295213649357">இந்தத் தாவல் USB சாதனத்துடன் இணைக்கப்பட்டுள்ளது.</translation>
 <translation id="5885324376209859881">மீடியா அமைப்புகளை நிர்வகி...</translation>
@@ -4700,7 +4693,6 @@
 <translation id="8045923671629973368">பயன்பாட்டு ஐடி அல்லது இணைய அங்காடி URLஐ உள்ளிடவும்</translation>
 <translation id="804786196054284061">இறுதிப் பயனர் உரிம ஒப்பந்தம்</translation>
 <translation id="8049705080247101012">"<ph name="EXTENSION_NAME" />"ஐத் தீங்கானது என Google கொடியிட்டுள்ளது, மேலும் நிறுவல் தடுக்கப்பட்டுள்ளது</translation>
-<translation id="8049913480579063185">நீட்டிப்பின் பெயர்</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 கோப்புகள்</translation>
 <translation id="8053390638574070785">இந்த பக்கத்தை மீண்டும் ஏற்றுக</translation>
@@ -4951,7 +4943,6 @@
 <translation id="8449008133205184768">நடையை ஒட்டி, பொருத்துக</translation>
 <translation id="8449036207308062757">சேமிப்பிடத்தை நிர்வகி</translation>
 <translation id="8452135315243592079">சிம் கார்டு இல்லை</translation>
-<translation id="845627346958584683">காலாவதியாகும் நேரம்</translation>
 <translation id="845702320058262034">இணைக்க முடியவில்லை மொபைலின் புளூடூத் ஆன் ஆகியிருப்பதை உறுதிப்படுத்தவும்</translation>
 <translation id="8457451314607652708">புத்தகக்குறிகளை இறக்குமதி செய்</translation>
 <translation id="8460336040822756677"><ph name="DEVICE_TYPE" /> சாதனத்திற்கு Smart Lockஐ முடக்கினால், உங்கள் மொபைலைப் பயன்படுத்தி Chrome சாதனங்களைத் திறக்க முடியாது. கடவுச்சொல்லை உள்ளிட வேண்டியிருக்கும்.</translation>
@@ -5065,7 +5056,6 @@
 <translation id="8637542770513281060">உங்கள் கம்ப்யூட்டரில் இருக்கும் பாதுகாப்பு மாடியூல் Chrome OSஸில் உள்ள பல முக்கியமான பாதுகாப்பு அம்சங்களைச் செயல்படுத்தப் பயன்படுத்தப்படுகிறது. மேலும் அறிய, Chromebook உதவி மையத்திற்குச் செல்லவும்: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">கணினிப் புதுப்பிப்பு உள்ளது. பதிவிறக்கத் தயாராகிறது...</translation>
 <translation id="8639047128869322042">தீங்கிழைக்கும் மென்பொருள் உள்ளதா எனத் தேடுகிறது...</translation>
-<translation id="8642171459927087831">அணுகல் டோக்கன்</translation>
 <translation id="8642900771896232685">2 வினாடிகள்</translation>
 <translation id="8642947597466641025">உரையை இன்னும் பெரிதாக்கு</translation>
 <translation id="8643418457919840804">தொடர, விருப்பத்தைத் தேர்வுசெய்யவும்:</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 7c4714a..59ad3c1 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPDని కనుగొనడం సాధ్యం కాదు. మీ Chromebook ఇంటర్నెట్‌కు కనెక్ట్ అయ్యి ఉందని నిర్ధారించుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> బ్లాక్ చేయబడింది</translation>
-<translation id="1357589289913453911">ఎక్స్‌టెన్షన్‌ Id</translation>
 <translation id="1358741672408003399">అక్షరక్రమం మరియు వ్యాకరణం</translation>
 <translation id="1361164813881551742">మాన్యువల్‌గా జోడించండి</translation>
 <translation id="1361655923249334273">ఉపయోగించనిది</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">ఇది సెక్యూరిటీ కీలోని మొత్తం డేటాను, అలాగే దాని పిన్‌ను తొలగిస్తుంది</translation>
 <translation id="1475502736924165259">మీకు ఫైల్‌లో మరే ఇతర వర్గంలోనూ సరిపోని ప్రమాణపత్రాలు ఉన్నాయి</translation>
 <translation id="1476607407192946488">&amp;భాష సెట్టింగ్‌లు</translation>
-<translation id="1477301030751268706">గుర్తింపు API టోకెన్ కాష్</translation>
 <translation id="1478340334823509079">వివరాలు: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ఇన్‌స్టాలేషన్ ప్రారంభించబడలేదు</translation>
 <translation id="1483493594462132177">పంపు</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">సిస్టమ్ భద్రతా సెట్టింగ్</translation>
 <translation id="2091887806945687916">ధ్వని</translation>
 <translation id="2097372108957554726">మీరు కొత్త పరికరాలను నమోదు చేయడానికి Chromeకు సైన్ ఇన్ చేయాలి</translation>
-<translation id="2098305189700762159">దొరకలేదు</translation>
 <translation id="2099172618127234427">మీరు sshd daemonను సెటప్ చేసే మరియు USB డ్రైవ్‌ల నుండి బూటింగ్‌ను ప్రారంభించే Chrome OS డీబగ్గింగ్ ఫీచ‌ర్‌లను ప్రారంభిస్తున్నారు.</translation>
 <translation id="2099686503067610784">సర్వర్ ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />" తొలగించాలా?</translation>
 <translation id="2100273922101894616">స్వీయ సైన్-ఇన్</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">మీరు "Ok Google" అని చెప్పి ఎప్పుడైనా మీ అసిస్టెంట్‌ని యాక్సెస్ చేయండి</translation>
 <translation id="2387458720915042159">ప్రాక్సీ కనెక్షన్ రకం</translation>
 <translation id="2391419135980381625">ప్రామాణిక ఫాంట్</translation>
-<translation id="2391762656119864333">ఉపసంహరించు</translation>
 <translation id="2392369802118427583">సక్రియం చెయ్యి</translation>
 <translation id="2394566832561516196">సెట్టింగ్‌లు తర్వాతిసారి మళ్లీ లోడ్‌ చేసే సమయంలో క్లియర్ చేయబడతాయి.</translation>
 <translation id="2395616325548404795">మీ <ph name="DEVICE_TYPE" /> ఎంటర్‌ప్రైజ్ నిర్వహణ కోసం విజయవంతంగా నమోదు చేయబడింది, కానీ దాని లక్షణ మరియు స్థాన సమాచారాన్ని పంపడంలో విఫలమైంది. దయచేసి ఈ పరికరం కోసం ఈ సమాచారాన్ని మీ నిర్వాహక కన్సోల్ నుండి మాన్యువల్‌గా నమోదు చేయండి.</translation>
@@ -1956,7 +1952,6 @@
 <translation id="3894123633473837029">ఇటీవలి అసిస్టెంట్ చరిత్రను Sherlog ద్వారా చేర్చండి. ఇందులో మీ గుర్తింపు, స్థానం, డీబగ్ సమాచారం ఉండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">ఫోల్డర్‌ను జోడించండి</translation>
 <translation id="389589731200570180">అతిథులతో భాగస్వామ్యం చేయండి</translation>
-<translation id="3898521660513055167">టోకెన్ స్థితి</translation>
 <translation id="389901847090970821">కీబోర్డ్‌ను ఎంచుకోండి</translation>
 <translation id="3899879303189199559">సంవత్సరానికి పైగా ఆఫ్‌లైన్‌లో ఉంది</translation>
 <translation id="3900966090527141178">పాస్‌వర్డ్‌లను ఎగుమతి చేయండి</translation>
@@ -2792,7 +2787,6 @@
 <translation id="5235050375939235066">యాప్‌ను అన్‌ఇన్‌స్టాల్ చేయాలా?</translation>
 <translation id="5235750401727657667">కొత్త ట్యాబ్‌ను తెరిచేటప్పుడు మీరు చూసే పేజీని భర్తీ చేయండి</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>
 <translation id="5243522832766285132">దయచేసి కొన్ని నిమిషాల్లో మళ్లీ ప్రయత్నించండి</translation>
@@ -3231,7 +3225,6 @@
 <translation id="5870155679953074650">క్లిష్టమైన లోపాలు</translation>
 <translation id="5877064549588274448">ఛానెల్ మార్చబడింది. మార్పులను వర్తింపజేయడానికి మీ పరికరాన్ని పునఃప్రారంభించండి.</translation>
 <translation id="5877584842898320529">ఎంచుకున్న ప్రింటర్ అందుబాటులో లేదు లేదా సరిగ్గా ఇన్‌స్టాల్ చేయబడలేదు. <ph name="BR" /> మీ ప్రింటర్‌ను తనిఖీ చేయండి లేదా మరొక ప్రింటర్‌ను ఎంచుకోవడాన్ని ప్రయత్నించండి.</translation>
-<translation id="5880247576487732437">టోకెన్ ఉంది</translation>
 <translation id="5882919346125742463">తెలిసిన నెట్‌వర్క్‌లు</translation>
 <translation id="5884474295213649357">ఈ ట్యాబ్ USB పరికరానికి కనెక్ట్ చేయబడింది.</translation>
 <translation id="5885324376209859881">మీడియా సెట్టింగ్‌లను నిర్వహించండి...</translation>
@@ -4692,7 +4685,6 @@
 <translation id="8045923671629973368">అప్లికేషన్ id లేదా వెబ్‌స్టోర్ URLను నమోదు చేయండి</translation>
 <translation id="804786196054284061">తుది వినియోగదారు లైసెన్స్ ఒప్పందం</translation>
 <translation id="8049705080247101012">Google "<ph name="EXTENSION_NAME" />"ను హానికరమైనదిగా ఫ్లాగ్ చేసినందున ఇన్‌స్టాలేషన్ నిరోధించబడింది</translation>
-<translation id="8049913480579063185">పొడిగింపు పేరు</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
 <translation id="8053278772142718589">PKCS #12 ఫైళ్ళు</translation>
 <translation id="8053390638574070785">ఈ పేజీని మళ్లీ లోడ్ చేయి</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">శైలిని పేస్ట్ చేసి, సరిపోల్చు</translation>
 <translation id="8449036207308062757">నిల్వను నిర్వహించు</translation>
 <translation id="8452135315243592079">SIM కార్డ్ లేదు</translation>
-<translation id="845627346958584683">గడువు సమయం</translation>
 <translation id="845702320058262034">కనెక్ట్ చేయడం సాధ్యపడదు. మీ ఫోన్‌లో బ్లూటూత్ ఆన్ చేసి ఉందని నిర్ధారించుకోండి.</translation>
 <translation id="8457451314607652708">బుక్‌మార్క్‌లను దిగుమతి చేయి</translation>
 <translation id="8460336040822756677">మీరు <ph name="DEVICE_TYPE" /> కోసం Smart Lockను ఆఫ్ చేస్తే, మీ ఫోన్‌ను ఉపయోగించి మీ Chrome పరికరాలను అన్‌లాక్ చేయలేరు. మీరు మీ పాస్‌వర్డ్‌ను టైప్ చేయాల్సి ఉంటుంది.</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">మీ కంప్యూటర్‌లో ఒక సురక్షిత మాడ్యూల్ ఉంది, Chrome OSలో అనేక కీలకమైన భద్రతా ఫీచర్‌లను అమలు చేయడానికి ఇది ఉపయోగించబడుతుంది. Chromebook సహాయ కేంద్రంలో దీని గురించి మరింత తెలుసుకోండి, ఇక్కడికి వెళ్లండి: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">సిస్టమ్ అప్‌డేట్‌ అందుబాటులో ఉంది. డౌన్‌లోడ్ చేయ‌డానికి సిద్ధం చేస్తోంది...</translation>
 <translation id="8639047128869322042">హానికరమైన సాఫ్ట్‌వేర్‌ కోసం తనిఖీ చేస్తోంది...</translation>
-<translation id="8642171459927087831">యాక్సెస్ టోకెన్</translation>
 <translation id="8642900771896232685">2 సెకన్లు</translation>
 <translation id="8642947597466641025">టెక్స్ట్‌ని పెద్దదిగా చెయ్యి</translation>
 <translation id="8643418457919840804">కొనసాగడానికి, ఒక ఎంపికను ఎంచుకోండి:</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index d0b35b1..45f693d 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">ไม่พบ PPD โปรดตรวจสอบว่า Chromebook ออนไลน์อยู่และลองอีกครั้ง</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> ถูกบล็อก</translation>
-<translation id="1357589289913453911">รหัสส่วนขยาย</translation>
 <translation id="1358741672408003399">ตัวสะกดและไวยากรณ์</translation>
 <translation id="1361164813881551742">เพิ่มด้วยตนเอง</translation>
 <translation id="1361655923249334273">ไม่ได้ใช้</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">การดำเนินการนี้จะลบข้อมูลทั้งหมดในคีย์ความปลอดภัย รวมถึง PIN ของคีย์ด้วย</translation>
 <translation id="1475502736924165259">คุณมีใบรับรองของไฟล์ที่ไม่เข้ากับหมวดหมู่อื่นๆ</translation>
 <translation id="1476607407192946488">&amp;การตั้งค่าภาษา</translation>
-<translation id="1477301030751268706">แคชโทเค็น API ข้อมูลประจำตัว</translation>
 <translation id="1478340334823509079">รายละเอียด: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ไม่ได้เปิดใช้การติดตั้ง</translation>
 <translation id="1483493594462132177">ส่ง</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">การตั้งค่าความปลอดภัยของระบบ</translation>
 <translation id="2091887806945687916">เสียง</translation>
 <translation id="2097372108957554726">คุณต้องลงชื่อเข้าใช้ Chrome เพื่อลงทะเบียนอุปกรณ์ใหม่</translation>
-<translation id="2098305189700762159">ไม่พบ</translation>
 <translation id="2099172618127234427">คุณกำลังเปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องของ Chrome OS ซึ่งจะตั้งค่า sshd daemon และเปิดใช้การเปิดเครื่องจากไดรฟ์ USB</translation>
 <translation id="2099686503067610784">ลบใบรับรองของเซิร์ฟเวอร์ "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">เข้าถึง Assistant ได้ทุกเมื่อเพียงพูดว่า "Ok Google"</translation>
 <translation id="2387458720915042159">ประเภทการเชื่อมต่อพร็อกซี</translation>
 <translation id="2391419135980381625">แบบอักษรมาตรฐาน</translation>
-<translation id="2391762656119864333">เพิกถอน</translation>
 <translation id="2392369802118427583">เปิดใช้งาน</translation>
 <translation id="2394566832561516196">การตั้งค่าจะถูกล้างในการโหลดซ้ำครั้งถัดไป</translation>
 <translation id="2395616325548404795">ลงทะเบียน <ph name="DEVICE_TYPE" /> ของคุณสำหรับการจัดการองค์กรเรียบร้อยแล้ว แต่ไม่สามารถส่งเนื้อหาและข้อมูลตำแหน่งของอุปกรณ์ โปรดป้อนข้อมูลนี้ด้วยตนเองจากคอนโซลผู้ดูแลระบบสำหรับอุปกรณ์นี้</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">รวมประวัติล่าสุดของ Assistant ผ่านทาง Sherlog ซึ่งอาจมีข้อมูลประจำตัว ตำแหน่งของคุณ และข้อมูลการแก้ไขข้อบกพร่อง <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">เพิ่มโฟลเดอร์</translation>
 <translation id="389589731200570180">แชร์กับผู้เยี่ยมชม</translation>
-<translation id="3898521660513055167">สถานะโทเค็น</translation>
 <translation id="389901847090970821">เลือกแป้นพิมพ์</translation>
 <translation id="3899879303189199559">ออฟไลน์นานกว่าหนึ่งปี</translation>
 <translation id="3900966090527141178">ส่งออกรหัสผ่าน</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">ถอนการติดตั้งแอปไหม</translation>
 <translation id="5235750401727657667">แทนที่หน้าที่คุณจะเห็นเมื่อเปิดแท็บใหม่</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>
 <translation id="5243522832766285132">โปรดลองอีกครั้งในอีกสักครู่</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">ฮาร์ดฟอลต์</translation>
 <translation id="5877064549588274448">เปลี่ยนช่องแล้ว รีสตาร์ทอุปกรณ์เพื่อใช้การเปลี่ยนแปลง</translation>
 <translation id="5877584842898320529">เครื่องพิมพ์ที่เลือกไว้ไม่พร้อมใช้งานหรือไม่ได้ติดตั้งไว้อย่างถูกต้อง <ph name="BR" /> โปรดตรวจสอบเครื่องพิมพ์หรือลองเลือกเครื่องพิมพ์อื่น</translation>
-<translation id="5880247576487732437">โทเค็นพร้อมใช้งาน</translation>
 <translation id="5882919346125742463">เครือข่ายที่รู้จัก</translation>
 <translation id="5884474295213649357">แท็บนี้เชื่อมต่อกับอุปกรณ์ USB อยู่</translation>
 <translation id="5885324376209859881">จัดการการตั้งค่าสื่อ...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">ป้อนรหัสแอปพลิเคชันหรือ URL เว็บสโตร์</translation>
 <translation id="804786196054284061">ข้อตกลงใบอนุญาตผู้ใช้ปลายทาง</translation>
 <translation id="8049705080247101012">Google ได้ตั้งค่าสถานะ "<ph name="EXTENSION_NAME" />" ว่าเป็นอันตราย และป้องกันไม่ให้มีการติดตั้งแล้ว</translation>
-<translation id="8049913480579063185">ชื่อส่วนขยาย</translation>
 <translation id="8050038245906040378">การรับรองรหัสเชิงพาณิชย์ของ Microsoft</translation>
 <translation id="8053278772142718589">ไฟล์ PKCS #12</translation>
 <translation id="8053390638574070785">โหลดหน้านี้ใหม่</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">วางและจับคู่รูปแบบ</translation>
 <translation id="8449036207308062757">จัดการพื้นที่เก็บข้อมูล</translation>
 <translation id="8452135315243592079">ไม่มีซิมการ์ด</translation>
-<translation id="845627346958584683">เวลาหมดอายุ</translation>
 <translation id="845702320058262034">เชื่อมต่อไม่ได้ ตรวจสอบว่าบลูทูธโทรศัพท์เปิดอยู่</translation>
 <translation id="8457451314607652708">นำเข้าบุ๊กมาร์ก</translation>
 <translation id="8460336040822756677">หากคุณปิด Smart Lock for <ph name="DEVICE_TYPE" /> คุณจะไม่สามารถปลดล็อกอุปกรณ์ Chrome โดยใช้โทรศัพท์ได้ คุณจะต้องพิมพ์รหัสผ่าน</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">คอมพิวเตอร์ของคุณมีโมดูลความปลอดภัย ซึ่งใช้เพื่อนำฟีเจอร์การรักษาความปลอดภัยที่สำคัญจำนวนมากมาใช้ใน Chrome OS โปรดไปที่ศูนย์ช่วยเหลือของ Chromebook เพื่อดูข้อมูลเพิ่มเติม: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">มีอัปเดตระบบพร้อมใช้งาน กำลังเตรียมการดาวน์โหลด…</translation>
 <translation id="8639047128869322042">กำลังตรวจหาซอฟต์แวร์ที่เป็นอันตราย...</translation>
-<translation id="8642171459927087831">โทเค็นการเข้าถึง</translation>
 <translation id="8642900771896232685">2 วินาที</translation>
 <translation id="8642947597466641025">ทำให้ข้อความใหญ่ขึ้น</translation>
 <translation id="8643418457919840804">เลือกตัวเลือกใดก็ได้เพื่อดำเนินการต่อ</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 06cc738a..32dfe0e 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD bulunamıyor. Chromebook'unuzun internete bağlı olduğundan emin olun ve tekrar deneyin.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> engellendi</translation>
-<translation id="1357589289913453911">Uzantı kimliği</translation>
 <translation id="1358741672408003399">Yazım ve Dilbilgisi</translation>
 <translation id="1361164813881551742">Manuel Olarak Ekle</translation>
 <translation id="1361655923249334273">Kullanılmıyor</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Bu işlem, PIN'i de dahil olmak üzere güvenlik anahtarındaki tüm verileri silecek.</translation>
 <translation id="1475502736924165259">Dosyanızda diğer kategorilerin hiçbirine uymayan sertifikalar var</translation>
 <translation id="1476607407192946488">&amp;Dil Ayarları</translation>
-<translation id="1477301030751268706">Kimlik API'sı Jeton Önbelleği</translation>
 <translation id="1478340334823509079">Ayrıntılar: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Yükleme etkin değil</translation>
 <translation id="1483493594462132177">Gönder</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Sistem güvenlik ayarı</translation>
 <translation id="2091887806945687916">Ses</translation>
 <translation id="2097372108957554726">Yeni cihazlar kaydettirebilmeniz için Chrome'da oturum açmanız gerekir</translation>
-<translation id="2098305189700762159">Bulunamadı</translation>
 <translation id="2099172618127234427">sshd yardımcı programını ayarlayacak ve USB sürücülerinden önyüklemeyi etkinleştirecek Chrome OS hata ayıklama özelliklerini etkinleştiriyorsunuz.</translation>
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" sunucusu sertifikası silinsin mi?</translation>
 <translation id="2100273922101894616">Otomatik Oturum Aç</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">"Ok Google" diyerek istediğiniz zaman Asistanınıza erişin</translation>
 <translation id="2387458720915042159">Proxy bağlantısı türü</translation>
 <translation id="2391419135980381625">Standart yazı tipi</translation>
-<translation id="2391762656119864333">İptal et</translation>
 <translation id="2392369802118427583">Etkinleştir</translation>
 <translation id="2394566832561516196">Ayarlar, sonraki yeniden yüklemede silinecektir.</translation>
 <translation id="2395616325548404795"><ph name="DEVICE_TYPE" /> cihazınız kurumsal yönetim için başarıyla kaydettirildi, ancak öğe ve konum bilgilerini gönderemedi. Lütfen bu cihaza ilişkin bu bilgileri Yönetici konsolunuzdan manuel olarak girin.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Son Asistan geçmişini Sherlog ile ekleyin. Eklenen geçmiş bilgilerinde kimliğiniz, konumunuz ve hata ayıklama bilgileri bulunabilir. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Klasör ekleyin</translation>
 <translation id="389589731200570180">Misafirlerle paylaş</translation>
-<translation id="3898521660513055167">Jeton Durumu</translation>
 <translation id="389901847090970821">Klavye seçin</translation>
 <translation id="3899879303189199559">Bir yıldan fazladır çevrimdışı</translation>
 <translation id="3900966090527141178">Şifreleri dışa aktarın</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Uygulamanın yüklemesi kaldırılsın mı?</translation>
 <translation id="5235750401727657667">Yeni bir sekme açarken gördüğünüz sayfayı değiştirme</translation>
 <translation id="5238278114306905396">"<ph name="EXTENSION_NAME" />" uygulaması otomatik olarak kaldırıldı.</translation>
-<translation id="5238369540257804368">Kapsamlar</translation>
 <translation id="5241128660650683457">Ziyaret ettiğiniz web sitelerindeki tüm verilerinizi okuma</translation>
 <translation id="5242724311594467048">"<ph name="EXTENSION_NAME" />" etkinleştirilsin mi?</translation>
 <translation id="5243522832766285132">Lütfen kısa bir süre sonra tekrar deneyin</translation>
@@ -3233,7 +3227,6 @@
 <translation id="5870155679953074650">Donanım hataları</translation>
 <translation id="5877064549588274448">Kanal değişti. Değişikliklerin uygulanması için cihazınızı yeniden başlatın.</translation>
 <translation id="5877584842898320529">Seçilen yazıcı kullanılamıyor veya doğru yüklenmemiş. <ph name="BR" /> Yazıcınızı kontrol edin veya başka yazıcı seçmeyi deneyin.</translation>
-<translation id="5880247576487732437">Jeton Mevcut</translation>
 <translation id="5882919346125742463">Bilinen Ağlar</translation>
 <translation id="5884474295213649357">Bu sekme bir USB cihazına bağlı.</translation>
 <translation id="5885324376209859881">Medya ayarlarını yönet...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Uygulama kimliğini veya web mağazası URL'sini girin</translation>
 <translation id="804786196054284061">Son Kullanıcı Lisans Sözleşmesi</translation>
 <translation id="8049705080247101012">Google <ph name="EXTENSION_NAME" /> uzantısını kötü amaçlı olarak işaretledi ve yükleme işlemi engellendi</translation>
-<translation id="8049913480579063185">Uzantı Adı</translation>
 <translation id="8050038245906040378">Microsoft Ticari Kod İmzalama</translation>
 <translation id="8053278772142718589">PKCS #12 Dosyaları</translation>
 <translation id="8053390638574070785">Bu Sayfayı Tekrar Yükle</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Stili Yapıştır ve Eşleştir</translation>
 <translation id="8449036207308062757">Depolama alanını yönet</translation>
 <translation id="8452135315243592079">SIM kart yok</translation>
-<translation id="845627346958584683">Son Kullanma Tarihi</translation>
 <translation id="845702320058262034">Bağlanılamıyor. Telefonunuzda Bluetooth'un açık olduğundan emin olun.</translation>
 <translation id="8457451314607652708">Yer işaretlerini içe aktar</translation>
 <translation id="8460336040822756677"><ph name="DEVICE_TYPE" /> için Smart Lock'u kapatırsanız, telefonunuzu kullanarak Chrome cihazlarınızın kilidini açamazsınız. Şifrenizi yazmanız gerekecektir.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Bilgisayarınızda, Chrome OS'teki pek çok kritik güvenlik özelliğini uygulamak için kullanılan bir güvenli modül bulunmaktadır. Daha fazla bilgi edinmek için Chromebook Yardım Merkezi'ni ziyaret edin: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Kullanılabilir sistem güncellemesi mevcut. İndirmeye hazırlanılıyor...</translation>
 <translation id="8639047128869322042">Zararlı yazılımlar denetleniyor...</translation>
-<translation id="8642171459927087831">Erişim Verisi</translation>
 <translation id="8642900771896232685">2 saniye</translation>
 <translation id="8642947597466641025">Metni Büyüt</translation>
 <translation id="8643418457919840804">Devam etmek için bir seçenek belirleyin:</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 9e18ea16..cb5b278 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Не вдається знайти файл PPD. Переконайтеся, що Chromebook під’єднано до Інтернету, і повторіть спробу.</translation>
 <translation id="1355466263109342573">Плагін <ph name="PLUGIN_NAME" /> заблоковано</translation>
-<translation id="1357589289913453911">Ідентифікатор розширення</translation>
 <translation id="1358741672408003399">Правопис і граматика</translation>
 <translation id="1361164813881551742">Додати вручну</translation>
 <translation id="1361655923249334273">Не використаний</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Усі дані на ключі безпеки, зокрема PIN-код, буде видалено</translation>
 <translation id="1475502736924165259">У вас є сертифікати, які не відповідають іншим категоріям</translation>
 <translation id="1476607407192946488">&amp;Налаштування мови</translation>
-<translation id="1477301030751268706">Кеш маркера API ідентифікації</translation>
 <translation id="1478340334823509079">Деталі: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Встановлення не підтримується</translation>
 <translation id="1483493594462132177">Надіслати</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Налаштування безпеки системи</translation>
 <translation id="2091887806945687916">Сигнал</translation>
 <translation id="2097372108957554726">Щоб зареєструвати нові пристрої, потрібно ввійти в Chrome</translation>
-<translation id="2098305189700762159">Не знайдено</translation>
 <translation id="2099172618127234427">Ви ввімкнути функції налагодження ОС Chrome, які встановлять демон SSHD та ввімкнуть завантаження з носіїв USB.</translation>
 <translation id="2099686503067610784">Видалити сертифікат сервера "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Відкривайте Асистент командою "Ok Google"</translation>
 <translation id="2387458720915042159">Тип з’єднання з проксі-сервером</translation>
 <translation id="2391419135980381625">Стандартний шрифт</translation>
-<translation id="2391762656119864333">Анулювати</translation>
 <translation id="2392369802118427583">Активувати</translation>
 <translation id="2394566832561516196">Налаштування буде видалено після перезавантаження.</translation>
 <translation id="2395616325548404795">Ваш пристрій <ph name="DEVICE_TYPE" /> зареєстровано для корпоративного керування, однак ми не отримали інформацію про його об’єкти та місцезнаходження. Введіть ці дані вручну на Консолі адміністратора.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Включати у звіт нещодавню історію Асистента через Sherlog. Це можуть бути особисті дані, геодані й інформація про налагодження. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Додати папку</translation>
 <translation id="389589731200570180">Використовувати спільно з гостями</translation>
-<translation id="3898521660513055167">Статус маркера</translation>
 <translation id="389901847090970821">Виберіть клавіатуру</translation>
 <translation id="3899879303189199559">Офлайн понад рік</translation>
 <translation id="3900966090527141178">Експортувати паролі</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Видалити додаток?</translation>
 <translation id="5235750401727657667">Відкривати нову вкладку на місці поточної сторінки</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>
 <translation id="5243522832766285132">Повторіть спробу через кілька хвилин</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Тривалі затримки</translation>
 <translation id="5877064549588274448">Канал змінено. Перезапустіть пристрій, щоб застосувати зміни.</translation>
 <translation id="5877584842898320529">Вибраний принтер недоступний або неправильно встановлений. <ph name="BR" /> Перевірте принтер або спробуйте вибрати інший.</translation>
-<translation id="5880247576487732437">Маркер присутній</translation>
 <translation id="5882919346125742463">Відомі мережі</translation>
 <translation id="5884474295213649357">Цю вкладку під’єднано до пристрою USB.</translation>
 <translation id="5885324376209859881">Керувати налаштуваннями засобів зв’язку…</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Введіть ідентифікатор додатка або URL-адресу веб-магазину</translation>
 <translation id="804786196054284061">Ліцензійна угода кінцевого користувача</translation>
 <translation id="8049705080247101012">Система Google позначила розширення <ph name="EXTENSION_NAME" /> як шкідливе та заборонила встановлення</translation>
-<translation id="8049913480579063185">Назва розширення</translation>
 <translation id="8050038245906040378">Підписування комерційного коду Microsoft</translation>
 <translation id="8053278772142718589">Файли PKCS #12</translation>
 <translation id="8053390638574070785">Перезавантажити цю сторінку</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Вставити та застосувати стиль</translation>
 <translation id="8449036207308062757">Керувати пам’яттю</translation>
 <translation id="8452135315243592079">Немає SIM-карти</translation>
-<translation id="845627346958584683">Закінчення терміну дії</translation>
 <translation id="845702320058262034">Не вдається під’єднатися. Переконайтеся, що на телефоні ввімкнено Bluetooth.</translation>
 <translation id="8457451314607652708">Імпортувати закладки</translation>
 <translation id="8460336040822756677">Якщо вимкнути функцію Smart Lock для пристрою <ph name="DEVICE_TYPE" />, ви не зможете розблоковувати пристрої Chrome за допомогою телефона. Потрібно буде вводити пароль.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Ваш комп’ютер містить модуль безпеки, який виконує багато важливих функцій захисту в ОС Chrome. Щоб дізнатися більше, відвідайте Довідковий центр Chromebook: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Доступне оновлення системи. Підготовка до завантаження…</translation>
 <translation id="8639047128869322042">Пошук шкідливих програм…</translation>
-<translation id="8642171459927087831">Маркер доступу</translation>
 <translation id="8642900771896232685">2 секунди</translation>
 <translation id="8642947597466641025">Збільшити розмір тексту</translation>
 <translation id="8643418457919840804">Щоб продовжити, виберіть опцію:</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 967e02f..80807b3 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Không tìm thấy PPD. Hãy đảm bảo Chromebook của bạn đã kết nối mạng rồi thử lại.</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> đã bị chặn</translation>
-<translation id="1357589289913453911">Id tiện ích</translation>
 <translation id="1358741672408003399">Chính tả và Ngữ pháp</translation>
 <translation id="1361164813881551742">Thêm thủ công</translation>
 <translation id="1361655923249334273">Không sử dụng</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">Thao tác này sẽ xóa toàn bộ dữ liệu trên khóa bảo mật, bao gồm cả mã PIN của khóa</translation>
 <translation id="1475502736924165259">Bạn có các chứng chỉ trên tệp không phù hợp với bất kỳ danh mục nào khác</translation>
 <translation id="1476607407192946488">&amp;Cài đặt ngôn ngữ</translation>
-<translation id="1477301030751268706">Lưu bộ nhớ đệm mã thông báo API nhận dạng</translation>
 <translation id="1478340334823509079">Chi tiết: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Cài đặt chưa được bật</translation>
 <translation id="1483493594462132177">Gửi</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">Cài đặt bảo mật hệ thống</translation>
 <translation id="2091887806945687916">Âm thanh</translation>
 <translation id="2097372108957554726">Bạn cần đăng nhập Chrome để đăng ký thiết bị mới</translation>
-<translation id="2098305189700762159">Không Tìm thấy</translation>
 <translation id="2099172618127234427">Bạn đâng bật tính năng gỡ lỗi của Chrome OS, thao tác này sẽ thiết lập sshd daemon và bật tính năng khởi động từ ổ USB.</translation>
 <translation id="2099686503067610784">Xóa chứng chỉ máy chủ "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Tự động đăng nhập</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">Nói "Ok Google" bất cứ lúc nào bạn muốn sử dụng Trợ lý</translation>
 <translation id="2387458720915042159">Loại kết nối proxy</translation>
 <translation id="2391419135980381625">Phông chữ tiêu chuẩn</translation>
-<translation id="2391762656119864333">Thu hồi</translation>
 <translation id="2392369802118427583">Kích hoạt</translation>
 <translation id="2394566832561516196">Cài đặt sẽ được xóa trong lần tải lại tiếp theo.</translation>
 <translation id="2395616325548404795">Thiết bị <ph name="DEVICE_TYPE" /> của bạn đã được đăng ký thành công cho quản lý doanh nghiệp, nhưng không gửi được thông tin phần tử và vị trí. Vui lòng nhập thủ công thông tin này từ Bảng điều khiển dành cho quản trị viên của thiết bị này.</translation>
@@ -1957,7 +1953,6 @@
 <translation id="3894123633473837029">Thêm lịch sử hoạt động gần đây của Trợ lý qua Sherlog. Lịch sử này có thể bao gồm thông tin gỡ lỗi, vị trí và danh tính của bạn. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">Thêm thư mục</translation>
 <translation id="389589731200570180">Chia sẻ với khách</translation>
-<translation id="3898521660513055167">Trạng thái mã thông báo</translation>
 <translation id="389901847090970821">Chọn bàn phím</translation>
 <translation id="3899879303189199559">Ngoại tuyến hơn một năm</translation>
 <translation id="3900966090527141178">Xuất mật khẩu</translation>
@@ -2793,7 +2788,6 @@
 <translation id="5235050375939235066">Gỡ cài đặt ứng dụng?</translation>
 <translation id="5235750401727657667">Thay thế trang bạn sẽ nhìn thấy khi mở tab mới</translation>
 <translation id="5238278114306905396">Ứng dụng "<ph name="EXTENSION_NAME" />" đã được tự động xóa.</translation>
-<translation id="5238369540257804368">Phạm vi</translation>
 <translation id="5241128660650683457">Đọc tất cả dữ liệu của bạn trên các trang web bạn truy cập</translation>
 <translation id="5242724311594467048">Cho phép "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="5243522832766285132">Vui lòng thử lại sau giây lát</translation>
@@ -3232,7 +3226,6 @@
 <translation id="5870155679953074650">Lỗi phần cứng</translation>
 <translation id="5877064549588274448">Kênh đã thay đổi. Hãy khởi động lại thiết bị để áp dụng thay đổi.</translation>
 <translation id="5877584842898320529">Máy in đã chọn không sử dụng được hoặc không được cài đặt chính xác. <ph name="BR" /> Hãy kiểm tra máy in hoặc thử chọn một máy in khác.</translation>
-<translation id="5880247576487732437">Mã thông báo hiện có</translation>
 <translation id="5882919346125742463">Mạng đã biết</translation>
 <translation id="5884474295213649357">Tab này được kết nối với một thiết bị USB.</translation>
 <translation id="5885324376209859881">Quản lý cài đặt phương tiện...</translation>
@@ -4697,7 +4690,6 @@
 <translation id="8045923671629973368">Hãy nhập ID ứng dụng hoặc URL cửa hàng trực tuyến</translation>
 <translation id="804786196054284061">Thỏa thuận cấp phép người dùng cuối</translation>
 <translation id="8049705080247101012">Google đã gắn cờ "<ph name="EXTENSION_NAME" />" là độc hại và cài đặt đã bị chặn</translation>
-<translation id="8049913480579063185">Tên tiện ích</translation>
 <translation id="8050038245906040378">Ký Mã Thương mại của Microsoft</translation>
 <translation id="8053278772142718589">Tệp PKCS #12</translation>
 <translation id="8053390638574070785">Tải lại Trang Này</translation>
@@ -4948,7 +4940,6 @@
 <translation id="8449008133205184768">Dán và Khớp Kiểu</translation>
 <translation id="8449036207308062757">Quản lý bộ nhớ</translation>
 <translation id="8452135315243592079">Thiếu thẻ SIM</translation>
-<translation id="845627346958584683">Thời gian hết hạn</translation>
 <translation id="845702320058262034">Không thể kết nối. Hãy đảm bảo bạn đã bật Bluetooth trên điện thoại.</translation>
 <translation id="8457451314607652708">Nhập dấu trang</translation>
 <translation id="8460336040822756677">Nếu tắt Smart Lock cho <ph name="DEVICE_TYPE" />, bạn sẽ không thể mở khóa thiết bị Chrome bằng điện thoại của mình. Bạn cần phải nhập mật khẩu của mình.</translation>
@@ -5062,7 +5053,6 @@
 <translation id="8637542770513281060">Máy tính của bạn chứa một mô-đun an toàn dùng để triển khai nhiều tính năng bảo mật quan trọng trong Chrome OS. Hãy truy cập Trung tâm trợ giúp Chromebook để tìm hiểu thêm: https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">Cập nhật hệ thống có sẵn. Đang chuẩn bị tải xuống…</translation>
 <translation id="8639047128869322042">Đang kiểm tra để tìm phần mềm độc hại...</translation>
-<translation id="8642171459927087831">Mã thông báo truy cập</translation>
 <translation id="8642900771896232685">2 giây</translation>
 <translation id="8642947597466641025">Phóng to Văn bản</translation>
 <translation id="8643418457919840804">Để tiếp tục, hãy chọn một tùy chọn:</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 5b4448cb..e91c9dda 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />:<ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">找不到 PPD。请确保您的 Chromebook 已连接到网络,然后重试。</translation>
 <translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> 已被屏蔽</translation>
-<translation id="1357589289913453911">扩展程序 ID</translation>
 <translation id="1358741672408003399">拼写和语法</translation>
 <translation id="1361164813881551742">手动添加</translation>
 <translation id="1361655923249334273">未使用</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">这会清空该安全密钥上的所有数据,包括它的 PIN 码</translation>
 <translation id="1475502736924165259">您有一些证书不属于前面的任何类别</translation>
 <translation id="1476607407192946488">语言设置(&amp;L)</translation>
-<translation id="1477301030751268706">Identity API 令牌缓存</translation>
 <translation id="1478340334823509079">详细信息:<ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">未启用安装功能</translation>
 <translation id="1483493594462132177">发送</translation>
@@ -725,7 +723,6 @@
 <translation id="2090876986345970080">系统安全设置</translation>
 <translation id="2091887806945687916">声音</translation>
 <translation id="2097372108957554726">您需要登录 Chrome 才能注册新设备</translation>
-<translation id="2098305189700762159">未找到</translation>
 <translation id="2099172618127234427">您正在启用 Chrome 操作系统调试功能,此功能将设置 sshd 守护程序并允许从 U 盘启动设备。</translation>
 <translation id="2099686503067610784">要删除服务器证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="2100273922101894616">自动登录</translation>
@@ -937,7 +934,6 @@
 <translation id="2386926718981642523">随时访问您的 Google 助理,只需说“Ok Google”即可</translation>
 <translation id="2387458720915042159">代理连接类型</translation>
 <translation id="2391419135980381625">标准字体</translation>
-<translation id="2391762656119864333">撤消</translation>
 <translation id="2392369802118427583">激活</translation>
 <translation id="2394566832561516196">系统将在您下次重新加载网页后清除设置。</translation>
 <translation id="2395616325548404795">您的 <ph name="DEVICE_TYPE" /> 已成功注册企业管理服务,但未能发送其资产和位置信息。请通过管理控制台为此设备手动输入这些信息。</translation>
@@ -1950,7 +1946,6 @@
 <translation id="3894123633473837029">通过 Sherlog 将最近的 Google 助理历史记录包含在内。这可能包括您的身份、地理位置和调试信息。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">添加文件夹</translation>
 <translation id="389589731200570180">与访客共享</translation>
-<translation id="3898521660513055167">令牌状态</translation>
 <translation id="389901847090970821">选择键盘</translation>
 <translation id="3899879303189199559">离线超过 1 年</translation>
 <translation id="3900966090527141178">导出密码</translation>
@@ -2785,7 +2780,6 @@
 <translation id="5235050375939235066">要卸载该应用吗?</translation>
 <translation id="5235750401727657667">替换您在打开新标签页时看到的页面</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>
 <translation id="5243522832766285132">请稍后重试</translation>
@@ -3224,7 +3218,6 @@
 <translation id="5870155679953074650">硬故障数</translation>
 <translation id="5877064549588274448">版本已更改。请重新启动设备来应用这些变更。</translation>
 <translation id="5877584842898320529">所选打印机不可用或未正确安装。<ph name="BR" />请检查打印机,或尝试另选一台打印机。</translation>
-<translation id="5880247576487732437">已提供令牌</translation>
 <translation id="5882919346125742463">已知网络</translation>
 <translation id="5884474295213649357">此标签页已连接到 USB 设备。</translation>
 <translation id="5885324376209859881">管理媒体设置...</translation>
@@ -4687,7 +4680,6 @@
 <translation id="8045923671629973368">输入应用 ID 或网上应用店网址</translation>
 <translation id="804786196054284061">最终用户许可协议</translation>
 <translation id="8049705080247101012">Google 已将“<ph name="EXTENSION_NAME" />”标记为恶意扩展程序并已阻止系统安装它</translation>
-<translation id="8049913480579063185">扩展程序名称</translation>
 <translation id="8050038245906040378">Microsoft 商业代码签名</translation>
 <translation id="8053278772142718589">PKCS #12 文件</translation>
 <translation id="8053390638574070785">重新加载此页</translation>
@@ -4937,7 +4929,6 @@
 <translation id="8449008133205184768">粘贴并匹配样式</translation>
 <translation id="8449036207308062757">管理存储空间</translation>
 <translation id="8452135315243592079">缺少 SIM 卡</translation>
-<translation id="845627346958584683">失效时间</translation>
 <translation id="845702320058262034">无法连接。请确保您手机的蓝牙已开启。</translation>
 <translation id="8457451314607652708">导入书签</translation>
 <translation id="8460336040822756677">如果您关闭了 Smart Lock(<ph name="DEVICE_TYPE" /> 版),将不能使用配对手机为 Chrome 设备解锁。在这种情况下,您需要输入密码才能解锁。</translation>
@@ -5051,7 +5042,6 @@
 <translation id="8637542770513281060">您的计算机包含一个安全模块,该模块可用于在 Chrome 操作系统中实施许多关键的安全功能。要了解详情,请访问 Chromebook 帮助中心:https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">有系统更新,开始下载...</translation>
 <translation id="8639047128869322042">正在查找有害软件…</translation>
-<translation id="8642171459927087831">访问令牌</translation>
 <translation id="8642900771896232685">2 秒</translation>
 <translation id="8642947597466641025">放大文字</translation>
 <translation id="8643418457919840804">要继续,请选择一个选项:</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index f82ab6ab..5d2fc8d 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -240,7 +240,6 @@
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />:<ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">找不到 PPD。請確認 Chromebook 已連上網路,然後再試一次。</translation>
 <translation id="1355466263109342573">「<ph name="PLUGIN_NAME" />」遭到封鎖</translation>
-<translation id="1357589289913453911">擴充功能 ID</translation>
 <translation id="1358741672408003399">拼字與文法</translation>
 <translation id="1361164813881551742">手動新增</translation>
 <translation id="1361655923249334273">未使用</translation>
@@ -320,7 +319,6 @@
 <translation id="1470967055429794975">這項操作將清除這個安全金鑰上的所有資料,包括 PIN 碼</translation>
 <translation id="1475502736924165259">您儲存的這些憑證不屬於任何其他類別</translation>
 <translation id="1476607407192946488">語言設定(&amp;L)</translation>
-<translation id="1477301030751268706">Identity API 憑證快取</translation>
 <translation id="1478340334823509079">詳細資料:<ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">未啟用安裝功能</translation>
 <translation id="1483493594462132177">傳送</translation>
@@ -728,7 +726,6 @@
 <translation id="2090876986345970080">系統安全性設定</translation>
 <translation id="2091887806945687916">音訊</translation>
 <translation id="2097372108957554726">你必須登入 Chrome 註冊新裝置</translation>
-<translation id="2098305189700762159">找不到</translation>
 <translation id="2099172618127234427">你即將啟用 Chrome 作業系統偵錯功能,這會一併設定 sshd 精靈,並允許從 USB 磁碟機執行啟動作業。</translation>
 <translation id="2099686503067610784">要刪除伺服器憑證「<ph name="CERTIFICATE_NAME" />」嗎?</translation>
 <translation id="2100273922101894616">自動登入</translation>
@@ -940,7 +937,6 @@
 <translation id="2386926718981642523">只要說出「Ok Google」,就能隨時存取 Google 助理</translation>
 <translation id="2387458720915042159">Proxy 連線類型</translation>
 <translation id="2391419135980381625">標準字型</translation>
-<translation id="2391762656119864333">撤銷</translation>
 <translation id="2392369802118427583">啟用</translation>
 <translation id="2394566832561516196">系統將在你重新載入網頁後清除設定</translation>
 <translation id="2395616325548404795">你的 <ph name="DEVICE_TYPE" /> 已成功註冊企業管理服務,但無法傳送資產和位置資訊。請前往管理控制台,為這個裝置手動輸入這些資訊。</translation>
@@ -1956,7 +1952,6 @@
 <translation id="3894123633473837029">透過 Sherlog 納入最近的 Google 助理歷史記錄。這可能包括你的身分、位置和偵錯資訊。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="3894427358181296146">新增資料夾</translation>
 <translation id="389589731200570180">與訪客共用</translation>
-<translation id="3898521660513055167">憑證狀態</translation>
 <translation id="389901847090970821">選取鍵盤</translation>
 <translation id="3899879303189199559">離線超過一年</translation>
 <translation id="3900966090527141178">匯出密碼</translation>
@@ -2791,7 +2786,6 @@
 <translation id="5235050375939235066">要解除安裝應用程式嗎?</translation>
 <translation id="5235750401727657667">取代新分頁開啟時顯示的網頁</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>
 <translation id="5243522832766285132">請稍後再試</translation>
@@ -3230,7 +3224,6 @@
 <translation id="5870155679953074650">硬性錯誤數</translation>
 <translation id="5877064549588274448">版本已變更。請重新啟動裝置以套用變更。</translation>
 <translation id="5877584842898320529">選取的印表機無法使用或未正確安裝。<ph name="BR" />請檢查你的印表機,或改選其他印表機。</translation>
-<translation id="5880247576487732437">提供的憑證</translation>
 <translation id="5882919346125742463">已知網路</translation>
 <translation id="5884474295213649357">這個分頁已連上 USB 裝置。</translation>
 <translation id="5885324376209859881">管理媒體設定...</translation>
@@ -4694,7 +4687,6 @@
 <translation id="8045923671629973368">輸入應用程式 ID 或線上應用程式商店網址</translation>
 <translation id="804786196054284061">使用者授權協議</translation>
 <translation id="8049705080247101012">Google 已將「<ph name="EXTENSION_NAME" />」標示為惡意擴充功能並禁止安裝</translation>
-<translation id="8049913480579063185">擴充功能名稱</translation>
 <translation id="8050038245906040378">Microsoft 商用程式碼簽署</translation>
 <translation id="8053278772142718589">PKCS #12 檔案</translation>
 <translation id="8053390638574070785">重新載入此網頁</translation>
@@ -4944,7 +4936,6 @@
 <translation id="8449008133205184768">貼上並符合樣式</translation>
 <translation id="8449036207308062757">管理儲存空間</translation>
 <translation id="8452135315243592079">找不到 SIM 卡</translation>
-<translation id="845627346958584683">到期時間</translation>
 <translation id="845702320058262034">無法連線。請確認手機的藍牙功能已開啟。</translation>
 <translation id="8457451314607652708">匯入書籤</translation>
 <translation id="8460336040822756677">關閉 <ph name="DEVICE_TYPE" /> 專用 Smart Lock 後,您必須輸入密碼才能解鎖 Chrome 裝置,無法直接使用手機解鎖。</translation>
@@ -5058,7 +5049,6 @@
 <translation id="8637542770513281060">你的電腦含有安全模組,用於實作 Chrome 作業系統中許多重要的安全性功能。如需瞭解詳情,請造訪 Chromebook 說明中心:https://support.google.com/chromebook/?p=sm</translation>
 <translation id="8637688295594795546">可安裝系統更新,正在準備下載…</translation>
 <translation id="8639047128869322042">正在檢查有害軟體...</translation>
-<translation id="8642171459927087831">存取憑證</translation>
 <translation id="8642900771896232685">2 秒</translation>
 <translation id="8642947597466641025">放大文字</translation>
 <translation id="8643418457919840804">如要繼續,請選擇一個選項:</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 79a036a0..226e64a 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -5172,9 +5172,6 @@
   <message name="IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_DIALOG_TITLE" desc="The title of a dialog that lets users view and erase credentials on their security key (an authentication hardware device).">
     Security key sign-in data
   </message>
-  <message name="IDS_SETTINGS_SECURITY_KEYS_SAVED_CREDENTIALS_TITLE" desc="The heading of a table that lists credentials stored on a security key (an authentication hardware device).">">
-    Stored security key sign-in data
-  </message>
   <message name="IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_WEBSITE" desc="A column heading of a table that lists credentials stored on a security key (an authentication hardware device). This column contains the domain name (e.g. google.com) for each credential.">
     Website
   </message>
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index 4fea1be..2592ddda 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -236,7 +236,7 @@
     "+services/network/initiator_lock_compatibility.h",
   ],
   "input_method_manager_impl.cc": [
-    "+ash/keyboard/ui/keyboard_controller.h",
+    "+ash/keyboard/ui/keyboard_ui_controller.h",
   ],
   "chrome_browsing_data_remover_delegate_unittest.cc": [
     "+services/network/network_context.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 54738cc..1521d56 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4059,6 +4059,10 @@
      FEATURE_VALUE_TYPE(spellcheck::kWinUseBrowserSpellChecker)},
 #endif  // BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN)
 
+    {"safety-tips", flag_descriptions::kSafetyTipName,
+     flag_descriptions::kSafetyTipDescription, kOsAll,
+     FEATURE_VALUE_TYPE(features::kSafetyTipUI)},
+
     // 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
diff --git a/chrome/browser/android/compositor/tab_content_manager.cc b/chrome/browser/android/compositor/tab_content_manager.cc
index be92bc2..24ceee9 100644
--- a/chrome/browser/android/compositor/tab_content_manager.cc
+++ b/chrome/browser/android/compositor/tab_content_manager.cc
@@ -398,6 +398,13 @@
   RunObjectCallbackAndroid(j_callback, j_bitmap);
 }
 
+void TabContentManager::SetCaptureMinRequestTimeForTesting(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& obj,
+    jint timeMs) {
+  thumbnail_cache_->SetCaptureMinRequestTimeForTesting(timeMs);
+}
+
 // ----------------------------------------------------------------------------
 // Native JNI methods
 // ----------------------------------------------------------------------------
diff --git a/chrome/browser/android/compositor/tab_content_manager.h b/chrome/browser/android/compositor/tab_content_manager.h
index f6a8895..b85ad021 100644
--- a/chrome/browser/android/compositor/tab_content_manager.h
+++ b/chrome/browser/android/compositor/tab_content_manager.h
@@ -111,6 +111,10 @@
       const base::android::JavaParamRef<jobject>& obj,
       jint tab_id,
       const base::android::JavaParamRef<jobject>& j_callback);
+  void SetCaptureMinRequestTimeForTesting(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>& obj,
+      jint timeMs);
 
   // ThumbnailCacheObserver implementation;
   void OnFinishedThumbnailRead(TabId tab_id) override;
diff --git a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
index b2149a8..5e44a549 100644
--- a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
+++ b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
@@ -26,6 +26,7 @@
 #include "content/public/browser/web_contents.h"
 #include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
 #include "ui/gfx/android/java_bitmap.h"
+#include "url/gurl.h"
 #include "url/origin.h"
 
 namespace {
@@ -351,6 +352,8 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& jweb_contents,
     jlong registration_id,
+    const JavaParamRef<jstring>& jservice_worker_scope,
+    const JavaParamRef<jstring>& jpayment_request_id,
     const JavaParamRef<jstring>& jtop_origin,
     const JavaParamRef<jstring>& jpayment_request_origin,
     const JavaParamRef<jobjectArray>& jmethod_data,
@@ -401,7 +404,10 @@
   }
 
   content::PaymentAppProvider::GetInstance()->CanMakePayment(
-      web_contents->GetBrowserContext(), registration_id, std::move(event_data),
+      web_contents->GetBrowserContext(), registration_id,
+      url::Origin::Create(
+          GURL(ConvertJavaStringToUTF8(env, jservice_worker_scope))),
+      ConvertJavaStringToUTF8(env, jpayment_request_id), std::move(event_data),
       base::BindOnce(&OnCanMakePayment,
                      ScopedJavaGlobalRef<jobject>(env, jweb_contents),
                      ScopedJavaGlobalRef<jobject>(env, jcallback)));
@@ -411,6 +417,7 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& jweb_contents,
     jlong registration_id,
+    const JavaParamRef<jstring>& jservice_worker_scope,
     const JavaParamRef<jstring>& jtop_origin,
     const JavaParamRef<jstring>& jpayment_request_origin,
     const JavaParamRef<jstring>& jpayment_request_id,
@@ -424,6 +431,8 @@
 
   content::PaymentAppProvider::GetInstance()->InvokePaymentApp(
       web_contents->GetBrowserContext(), registration_id,
+      url::Origin::Create(
+          GURL(ConvertJavaStringToUTF8(env, jservice_worker_scope))),
       ConvertPaymentRequestEventDataFromJavaToNative(
           env, jtop_origin, jpayment_request_origin, jpayment_request_id,
           jmethod_data, jtotal, jmodifiers, payment_handler_host),
@@ -475,12 +484,17 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& jweb_contents,
     jlong registration_id,
+    const JavaParamRef<jstring>& jservice_worker_scope,
+    const JavaParamRef<jstring>& jpayment_request_id,
     const JavaParamRef<jobject>& jcallback) {
   content::WebContents* web_contents =
       content::WebContents::FromJavaWebContents(jweb_contents);
 
   content::PaymentAppProvider::GetInstance()->AbortPayment(
       web_contents->GetBrowserContext(), registration_id,
+      url::Origin::Create(
+          GURL(ConvertJavaStringToUTF8(env, jservice_worker_scope))),
+      ConvertJavaStringToUTF8(env, jpayment_request_id),
       base::BindOnce(&OnPaymentAppAborted,
                      ScopedJavaGlobalRef<jobject>(env, jweb_contents),
                      ScopedJavaGlobalRef<jobject>(env, jcallback)));
diff --git a/chrome/browser/android/thumbnail/thumbnail_cache.cc b/chrome/browser/android/thumbnail/thumbnail_cache.cc
index 8085a57..71bff47 100644
--- a/chrome/browser/android/thumbnail/thumbnail_cache.cc
+++ b/chrome/browser/android/thumbnail/thumbnail_cache.cc
@@ -39,7 +39,7 @@
 namespace {
 
 const float kApproximationScaleFactor = 4.f;
-const base::TimeDelta kCaptureMinRequestTimeMs(
+const base::TimeDelta kDefaultCaptureMinRequestTimeMs(
     base::TimeDelta::FromMilliseconds(1000));
 
 const int kCompressedKey = 0xABABABAB;
@@ -133,6 +133,7 @@
       write_queue_max_size_(write_queue_max_size),
       use_approximation_thumbnail_(use_approximation_thumbnail),
       save_jpeg_thumbnails_(save_jpeg_thumbnails),
+      capture_min_request_time_ms_(kDefaultCaptureMinRequestTimeMs),
       compression_tasks_count_(0),
       write_tasks_count_(0),
       read_in_progress_(false),
@@ -279,7 +280,7 @@
   if (meta_data_iter != thumbnail_meta_data_.end() &&
       meta_data_iter->second.url() == url &&
       (current_time - meta_data_iter->second.capture_time()) <
-          kCaptureMinRequestTimeMs) {
+          capture_min_request_time_ms_) {
     return false;
   }
 
@@ -523,6 +524,10 @@
   }
 }
 
+void ThumbnailCache::SetCaptureMinRequestTimeForTesting(int timeMs) {
+  capture_min_request_time_ms_ = base::TimeDelta::FromMilliseconds(timeMs);
+}
+
 void ThumbnailCache::InvalidateCachedThumbnail(Thumbnail* thumbnail) {
   DCHECK(thumbnail);
   TabId tab_id = thumbnail->tab_id();
diff --git a/chrome/browser/android/thumbnail/thumbnail_cache.h b/chrome/browser/android/thumbnail/thumbnail_cache.h
index acaa935..380f0f9 100644
--- a/chrome/browser/android/thumbnail/thumbnail_cache.h
+++ b/chrome/browser/android/thumbnail/thumbnail_cache.h
@@ -73,6 +73,7 @@
   // Called when resident textures were evicted, which requires paging
   // in bitmaps.
   void OnUIResourcesWereEvicted();
+  void SetCaptureMinRequestTimeForTesting(int timeMs);
 
   // ThumbnailDelegate implementation
   void InvalidateCachedThumbnail(Thumbnail* thumbnail) override;
@@ -163,6 +164,7 @@
   const size_t write_queue_max_size_;
   const bool use_approximation_thumbnail_;
   const bool save_jpeg_thumbnails_;
+  base::TimeDelta capture_min_request_time_ms_;
 
   size_t compression_tasks_count_;
   size_t write_tasks_count_;
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn
index 7497ce23..e17977b 100644
--- a/chrome/browser/android/vr/BUILD.gn
+++ b/chrome/browser/android/vr/BUILD.gn
@@ -71,6 +71,8 @@
       "arcore_device/ar_renderer.cc",
       "arcore_device/ar_renderer.h",
       "arcore_device/arcore.h",
+      "arcore_device/arcore_consent_prompt.cc",
+      "arcore_device/arcore_consent_prompt.h",
       "arcore_device/arcore_device.cc",
       "arcore_device/arcore_device.h",
       "arcore_device/arcore_device_provider.cc",
diff --git a/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc
new file mode 100644
index 0000000..b1fe89a5
--- /dev/null
+++ b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.cc
@@ -0,0 +1,85 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/android/vr/arcore_device/arcore_consent_prompt.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "chrome/android/features/vr/jni_headers/ArConsentDialog_jni.h"
+#include "chrome/browser/android/tab_android.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+
+using base::android::AttachCurrentThread;
+using base::android::ScopedJavaLocalRef;
+
+namespace vr {
+
+namespace {
+
+ArcoreConsentPrompt* g_instance = nullptr;
+
+base::android::ScopedJavaLocalRef<jobject> GetTabFromRenderer(
+    int render_process_id,
+    int render_frame_id) {
+  content::RenderFrameHost* render_frame_host =
+      content::RenderFrameHost::FromID(render_process_id, render_frame_id);
+  DCHECK(render_frame_host);
+
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderFrameHost(render_frame_host);
+  DCHECK(web_contents);
+
+  TabAndroid* tab_android = TabAndroid::FromWebContents(web_contents);
+  DCHECK(tab_android);
+
+  base::android::ScopedJavaLocalRef<jobject> j_tab_android =
+      tab_android->GetJavaObject();
+  DCHECK(!j_tab_android.is_null());
+
+  return j_tab_android;
+}
+
+}  // namespace
+
+ArcoreConsentPrompt::ArcoreConsentPrompt() = default;
+
+ArcoreConsentPrompt::~ArcoreConsentPrompt() = default;
+
+void ArcoreConsentPrompt::GetUserPermission(
+    int render_process_id,
+    int render_frame_id,
+    base::OnceCallback<void(bool)> response_callback) {
+  on_user_consent_callback_ = std::move(response_callback);
+
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> jdelegate = Java_ArConsentDialog_showDialog(
+      env, reinterpret_cast<jlong>(this),
+      GetTabFromRenderer(render_process_id, render_frame_id));
+  if (jdelegate.is_null()) {
+    std::move(on_user_consent_callback_).Run(false);
+  }
+}
+
+void ArcoreConsentPrompt::OnUserConsentResult(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& j_caller,
+    jboolean is_granted) {
+  DCHECK(on_user_consent_callback_);
+  std::move(on_user_consent_callback_).Run(is_granted);
+}
+
+// static
+void ArcoreConsentPrompt::ShowConsentPrompt(
+    int render_process_id,
+    int render_frame_id,
+    base::OnceCallback<void(bool)> response_callback) {
+  if (!g_instance)
+    g_instance = new ArcoreConsentPrompt();
+  g_instance->GetUserPermission(render_process_id, render_frame_id,
+                                std::move(response_callback));
+}
+
+}  // namespace vr
diff --git a/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.h b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.h
new file mode 100644
index 0000000..257d5abc
--- /dev/null
+++ b/chrome/browser/android/vr/arcore_device/arcore_consent_prompt.h
@@ -0,0 +1,41 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_ARCORE_CONSENT_PROMPT_H_
+#define CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_ARCORE_CONSENT_PROMPT_H_
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_weak_ref.h"
+#include "base/callback.h"
+#include "chrome/browser/vr/service/arcore_consent_prompt_interface.h"
+#include "chrome/browser/vr/vr_export.h"
+
+namespace vr {
+
+class VR_EXPORT ArcoreConsentPrompt : public ArcoreConsentPromptInterface {
+ public:
+  void ShowConsentPrompt(
+      int render_process_id,
+      int render_frame_id,
+      base::OnceCallback<void(bool)> response_callback) override;
+
+  ArcoreConsentPrompt();
+  ~ArcoreConsentPrompt();
+
+  // device::VrDevicePermissionProvider:
+  void GetUserPermission(int render_process_id,
+                         int render_frame_id,
+                         base::OnceCallback<void(bool)> response_callback);
+
+  void OnUserConsentResult(JNIEnv* env,
+                           const base::android::JavaParamRef<jobject>& j_caller,
+                           jboolean is_granted);
+
+ private:
+  base::OnceCallback<void(bool)> on_user_consent_callback_;
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_ARCORE_CONSENT_PROMPT_H_
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.cc b/chrome/browser/android/vr/arcore_device/arcore_device.cc
index b6999f3..535231c7 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_device.cc
@@ -20,7 +20,6 @@
 #include "chrome/browser/permissions/permission_manager.h"
 #include "chrome/browser/permissions/permission_result.h"
 #include "chrome/browser/permissions/permission_update_infobar_delegate_android.h"
-#include "device/vr/vr_display_impl.h"
 #include "ui/display/display.h"
 
 using base::android::JavaRef;
diff --git a/chrome/browser/android/vr/arcore_device/arcore_install_utils.h b/chrome/browser/android/vr/arcore_device/arcore_install_utils.h
index ae16038..f1156983 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_install_utils.h
+++ b/chrome/browser/android/vr/arcore_device/arcore_install_utils.h
@@ -17,11 +17,6 @@
 // Immersive AR sessions use callbacks in the following sequence:
 //
 // RequestArSession
-// [show consent prompt]
-// if consent declined, or if camera permission refused after consent:
-//   DestroyedCallback
-//
-// if accepted:
 //   SurfaceReadyCallback
 //   SurfaceTouchCallback (repeated for each touch)
 //   [exit session via "back" button, or via JS session exit]
diff --git a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
index ed7fe69..111e9a31 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
@@ -4,6 +4,9 @@
 
 #include "chrome/browser/android/vr/arcore_device/arcore_java_utils.h"
 
+#include <memory>
+#include <utility>
+
 #include "base/android/jni_string.h"
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/android/vr/ar_jni_headers/ArCoreJavaUtils_jni.h"
@@ -107,13 +110,13 @@
   DVLOG(1) << __func__;
   JNIEnv* env = AttachCurrentThread();
 
-  Java_ArCoreJavaUtils_launchArConsentDialog(
-      env, j_arcore_java_utils_,
-      getTabFromRenderer(render_process_id, render_frame_id));
-
   surface_ready_callback_ = std::move(ready_callback);
   surface_touch_callback_ = std::move(touch_callback);
   surface_destroyed_callback_ = std::move(destroyed_callback);
+
+  Java_ArCoreJavaUtils_startSession(
+      env, j_arcore_java_utils_,
+      getTabFromRenderer(render_process_id, render_frame_id));
 }
 
 void ArCoreJavaUtils::DestroyDrawingSurface() {
diff --git a/chrome/browser/android/vr/vr_module_provider.cc b/chrome/browser/android/vr/vr_module_provider.cc
index 623e897..0eda650b 100644
--- a/chrome/browser/android/vr/vr_module_provider.cc
+++ b/chrome/browser/android/vr/vr_module_provider.cc
@@ -13,6 +13,11 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "device/vr/android/gvr/vr_module_delegate.h"
+#include "device/vr/buildflags/buildflags.h"
+
+#if BUILDFLAG(ENABLE_ARCORE)
+#include "chrome/browser/android/vr/arcore_device/arcore_consent_prompt.h"
+#endif
 
 namespace vr {
 
@@ -84,6 +89,9 @@
   device::VrModuleDelegateFactory::Set(
       std::make_unique<VrModuleProviderFactory>());
   GvrConsentHelper::SetInstance(std::make_unique<vr::GvrConsentHelperImpl>());
+#if BUILDFLAG(ENABLE_ARCORE)
+  ArcoreConsentPromptInterface::SetInstance(new ArcoreConsentPrompt());
+#endif
 }
 
 static void JNI_VrModuleProvider_RegisterJni(JNIEnv* env) {
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index ddfd33e3..4936f45 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -1103,10 +1103,6 @@
       std::make_unique<SecureOriginPrefsObserver>(local_state());
   site_isolation_prefs_observer_ =
       std::make_unique<SiteIsolationPrefsObserver>(local_state());
-
-  // TODO(mmenke): This can be created on first use.
-  if (!SystemNetworkContextManager::GetInstance())
-    SystemNetworkContextManager::CreateInstance(local_state());
 }
 
 void BrowserProcessImpl::PreMainMessageLoopRun() {
diff --git a/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc b/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
index 133b07a..dbce23de 100644
--- a/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
+++ b/chrome/browser/browsing_data/counters/autofill_counter_browsertest.cc
@@ -40,6 +40,12 @@
     SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME);
   }
 
+  void TearDownOnMainThread() override {
+    // Release our ref to let browser tear down of services complete in the same
+    // order as usual.
+    web_data_service_ = nullptr;
+  }
+
   // Autocomplete suggestions --------------------------------------------------
 
   void AddAutocompleteSuggestion(const std::string& name,
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index d13f89d7..5b3b534 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -454,7 +454,6 @@
 #include "components/crash/content/browser/child_exit_observer_android.h"
 #include "components/crash/content/browser/crash_memory_metrics_collector_android.h"
 #include "components/navigation_interception/intercept_navigation_delegate.h"
-#include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
 #include "content/public/browser/android/java_interfaces.h"
 #include "services/proxy_resolver/proxy_resolver_service.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
@@ -5115,10 +5114,13 @@
   if (!data_use_measurement::ChromeDataUseMeasurement::GetInstance())
     data_use_measurement::ChromeDataUseMeasurement::CreateInstance(local_state);
 
-  if (!SystemNetworkContextManager::GetInstance())
+  // Create SystemNetworkContextManager if it has not been created yet. We need
+  // to set up global NetworkService state before anything else uses it and this
+  // is the first opportunity to initialize SystemNetworkContextManager with the
+  // NetworkService.
+  if (!SystemNetworkContextManager::HasInstance())
     SystemNetworkContextManager::CreateInstance(local_state);
 
-  // Need to set up global NetworkService state before anything else uses it.
   SystemNetworkContextManager::GetInstance()->OnNetworkServiceCreated(
       network_service);
 }
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
index 5b92a0a..15ef7e3 100644
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -12,7 +12,7 @@
 #include <sstream>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/ash_features.h"
 #include "base/bind.h"
 #include "base/feature_list.h"
@@ -1373,11 +1373,11 @@
 InputMethodManagerImpl::GetInputMethodKeyboardController() {
   // Callers expect a nullptr when the keyboard is disabled. See
   // https://crbug.com/850020.
-  if (!keyboard::KeyboardController::HasInstance() ||
-      !keyboard::KeyboardController::Get()->IsEnabled()) {
+  if (!keyboard::KeyboardUIController::HasInstance() ||
+      !keyboard::KeyboardUIController::Get()->IsEnabled()) {
     return nullptr;
   }
-  return keyboard::KeyboardController::Get()
+  return keyboard::KeyboardUIController::Get()
       ->input_method_keyboard_controller();
 }
 
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index 9815cf7c..2c05b4d 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -33,6 +33,7 @@
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/session_manager/fake_session_manager_client.h"
 #include "chromeos/dbus/session_manager/session_manager_client.h"
+#include "chromeos/dbus/shill/shill_manager_client.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_launcher.h"
@@ -187,6 +188,13 @@
     ResetTest::SetUpCommandLine(command_line);
     command_line->AppendSwitch(switches::kFirstExecAfterBoot);
   }
+
+  void SetUpOnMainThread() override {
+    DBusThreadManager::Get()
+        ->GetShillManagerClient()
+        ->GetTestInterface()
+        ->SetupDefaultEnvironment();
+  }
 };
 
 class ResetFirstAfterBootTestWithRollback : public ResetTest {
diff --git a/chrome/browser/download/download_manager_utils.cc b/chrome/browser/download/download_manager_utils.cc
index e6f31da0..1657c464 100644
--- a/chrome/browser/download/download_manager_utils.cc
+++ b/chrome/browser/download/download_manager_utils.cc
@@ -17,7 +17,6 @@
 #include "components/download/public/common/simple_download_manager_coordinator.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/download_request_utils.h"
-#include "content/public/browser/network_service_instance.h"
 #include "content/public/browser/system_connector.h"
 
 #if defined(OS_ANDROID)
@@ -95,7 +94,6 @@
             base::BindRepeating(&IgnoreOriginSecurityCheck),
             base::BindRepeating(&content::DownloadRequestUtils::IsURLSafe),
             connector);
-    content::GetNetworkServiceFromConnector(connector);
     download::SimpleDownloadManagerCoordinator* coordinator =
         SimpleDownloadManagerCoordinatorFactory::GetForKey(key);
     coordinator->SetSimpleDownloadManager(in_progress_manager.get(),
diff --git a/chrome/browser/download/mixed_content_download_blocking.cc b/chrome/browser/download/mixed_content_download_blocking.cc
index 3268861..767a61b8 100644
--- a/chrome/browser/download/mixed_content_download_blocking.cc
+++ b/chrome/browser/download/mixed_content_download_blocking.cc
@@ -14,6 +14,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "chrome/common/chrome_features.h"
+#include "components/download/public/common/download_stats.h"
 #include "content/public/browser/download_item_utils.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/origin_util.h"
@@ -142,6 +143,10 @@
   base::UmaHistogramEnumeration(
       kInsecureDownloadHistogramName,
       GetDownloadBlockingEnum(initiator, is_download_secure));
+  download::RecordDownloadValidationMetrics(
+      download::DownloadMetricsCallsite::kMixContentDownloadBlocking,
+      download::CheckDownloadConnectionSecurity(dl_url, item.GetUrlChain()),
+      download::DownloadContentFromMimeType(item.GetMimeType(), false));
 
   if (!(initiator.has_value() && initiator->GetURL().SchemeIsCryptographic() &&
         !is_download_secure && found_blocked_extension &&
diff --git a/chrome/browser/external_protocol/external_protocol_handler.cc b/chrome/browser/external_protocol/external_protocol_handler.cc
index a3f16ad..85b4ac0 100644
--- a/chrome/browser/external_protocol/external_protocol_handler.cc
+++ b/chrome/browser/external_protocol/external_protocol_handler.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
+#include "build/build_config.h"
 #include "chrome/browser/platform_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/tab_contents/tab_util.h"
@@ -23,6 +24,11 @@
 #include "net/base/escape.h"
 #include "url/gurl.h"
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#endif
+
 namespace {
 
 // Whether we accept requests for launching external protocols. This is set to
@@ -103,6 +109,20 @@
 
   platform_util::OpenExternal(
       Profile::FromBrowserContext(web_contents->GetBrowserContext()), url);
+
+#if !defined(OS_ANDROID)
+  // If the protocol navigation occurs in a new tab, close it.
+  // Avoid calling CloseContents if the tab is not in this browser's tab strip
+  // model; this can happen if the protocol was initiated by something
+  // internal to Chrome.
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
+  if (browser && web_contents->GetController().IsInitialNavigation() &&
+      browser->tab_strip_model()->count() > 1 &&
+      browser->tab_strip_model()->GetIndexOfWebContents(web_contents) !=
+          TabStripModel::kNoTab) {
+    web_contents->Close();
+  }
+#endif
 }
 
 // When we are about to launch a URL with the default OS level application, we
diff --git a/chrome/browser/external_protocol/external_protocol_handler_browsertest.cc b/chrome/browser/external_protocol/external_protocol_handler_browsertest.cc
new file mode 100644
index 0000000..125d7aa6
--- /dev/null
+++ b/chrome/browser/external_protocol/external_protocol_handler_browsertest.cc
@@ -0,0 +1,24 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/browser.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+
+class ExternalProtocolHandlerBrowserTest : public InProcessBrowserTest {};
+
+const char kScript[] =
+    "new Promise(res => {"
+    "   const tab = window.open('mailto:test@site.test', '_blank');"
+    "   tab.addEventListener('unload', () => {"
+    "     res(true);"
+    "   });"
+    "});";
+
+IN_PROC_BROWSER_TEST_F(ExternalProtocolHandlerBrowserTest,
+                       AutoCloseTabOnNonWebProtocolNavigation) {
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_EQ(true, EvalJs(web_contents, kScript));
+}
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 480b3ee2..852f5032 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2737,6 +2737,11 @@
     "expiry_milestone": 76
   },
   {
+    "name": "safety-tips",
+    "owners": [ "jdeblasio", "estark", "meacer" ],
+    "expiry_milestone": 82
+  },
+  {
     "name": "same-site-by-default-cookies",
     "owners": [ "chlily", "morlovich" ],
     "expiry_milestone": 83
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 5274dc4..e0d0421 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1595,6 +1595,12 @@
     "verdicts from Safe Browsing. These will provide stronger protections "
     "from files Safe Browsing is unsure about.";
 
+const char kSafetyTipName[] =
+    "Show Safety Tip UI when visiting low-reputation websites";
+const char kSafetyTipDescription[] =
+    "If enabled, a Safety Tip UI may be displayed when visiting or interacting "
+    "with a site Chrome believes may be suspicious.";
+
 const char kSameSiteByDefaultCookiesName[] = "SameSite by default cookies";
 const char kSameSiteByDefaultCookiesDescription[] =
     "Treat cookies that don't specify a SameSite attribute as if they were "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 94d6fca..dfc10c5 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -948,6 +948,9 @@
 extern const char kSafeBrowsingUseAPDownloadVerdictsName[];
 extern const char kSafeBrowsingUseAPDownloadVerdictsDescription[];
 
+extern const char kSafetyTipName[];
+extern const char kSafetyTipDescription[];
+
 extern const char kSameSiteByDefaultCookiesName[];
 extern const char kSameSiteByDefaultCookiesDescription[];
 
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
index 52e02eb..156b0226 100644
--- a/chrome/browser/net/system_network_context_manager.cc
+++ b/chrome/browser/net/system_network_context_manager.cc
@@ -73,7 +73,6 @@
 
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
 #include "chrome/common/chrome_paths_internal.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/grit/chromium_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #endif  // defined(OS_LINUX) && !defined(OS_CHROMEOS)
@@ -326,7 +325,23 @@
 }
 
 // static
+bool SystemNetworkContextManager::HasInstance() {
+  return !!g_system_network_context_manager;
+}
+
+// static
 SystemNetworkContextManager* SystemNetworkContextManager::GetInstance() {
+  if (!g_system_network_context_manager) {
+    // Initialize the network service, which will trigger
+    // ChromeContentBrowserClient::OnNetworkServiceCreated(), which calls
+    // CreateInstance() to initialize |g_system_network_context_manager|.
+    content::GetNetworkService();
+
+    // TODO(crbug.com/981057): There should be a DCHECK() here to make sure
+    // |g_system_network_context_manager| has been created, but that is not
+    // true in many unit tests.
+  }
+
   return g_system_network_context_manager;
 }
 
diff --git a/chrome/browser/net/system_network_context_manager.h b/chrome/browser/net/system_network_context_manager.h
index 3600c12..59c34253 100644
--- a/chrome/browser/net/system_network_context_manager.h
+++ b/chrome/browser/net/system_network_context_manager.h
@@ -63,7 +63,12 @@
   // instance already exists, this will cause a DCHECK failure.
   static SystemNetworkContextManager* CreateInstance(PrefService* pref_service);
 
-  // Gets the global SystemNetworkContextManager instance.
+  // Checks if the global SystemNetworkContextManager has been created.
+  static bool HasInstance();
+
+  // Gets the global SystemNetworkContextManager instance. If it has not been
+  // created yet, NetworkService is called, which will cause the
+  // SystemNetworkContextManager to be created.
   static SystemNetworkContextManager* GetInstance();
 
   // Destroys the global SystemNetworkContextManager instance.
diff --git a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
index e2558136..bf8819f 100644
--- a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
+++ b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
@@ -45,7 +45,6 @@
 #include "components/offline_pages/core/prefetch/suggested_articles_observer.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/network_service_instance.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace offline_pages {
@@ -109,10 +108,6 @@
   auto prefetch_dispatcher =
       std::make_unique<PrefetchDispatcherImpl>(profile_key->GetPrefs());
 
-  // Starts the network service if it hasn't yet. This is because when network
-  // service is enabled in the reduced mode, it only starts upon request.
-  content::GetNetworkService();
-
   auto* system_network_context_manager =
       SystemNetworkContextManager::GetInstance();
   scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory;
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
index 9c33c386..bb2c15fa 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/metrics/metrics_hashes.h"
 #include "base/optional.h"
 #include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
@@ -1022,7 +1023,15 @@
         page_load_metrics::PageEndReason::END_NEW_NAVIGATION, 2);
 }
 
-TEST_F(PreviewsUKMObserverTest, TestPageEndReasonUMACoinFlipHoldback) {
+// TODO(crbug.com/981058): Re-enable this test on Linux.
+#if defined(OS_LINUX)
+#define MAYBE_TestPageEndReasonUMACoinFlipHoldback \
+  DISABLED_TestPageEndReasonUMACoinFlipHoldback
+#else
+#define MAYBE_TestPageEndReasonUMACoinFlipHoldback \
+  TestPageEndReasonUMACoinFlipHoldback
+#endif
+TEST_F(PreviewsUKMObserverTest, MAYBE_TestPageEndReasonUMACoinFlipHoldback) {
   base::HistogramTester tester;
 
   // No preview:
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb
index 82ab1c3c..5c8fc5c 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb
@@ -69,6 +69,7 @@
 <translation id="1383876407941801731">ፍለጋ </translation>
 <translation id="1385214448885562192">ለመቀበል enter ወይም ይቅር ለማለት escape፣ ለቀጣዩ ታች እና ለቀዳሚው ላይን ይጫኑ።</translation>
 <translation id="1396114365388024581">tablst</translation>
+<translation id="139902759009894363">የበለጸገ ጽሑፍ መገለጫ ባህሪያትን አስታውቅ</translation>
 <translation id="1405567553485452995">ፈካ ያለ አረንጓዴ</translation>
 <translation id="1417889266572670458">ባህር ኃይል</translation>
 <translation id="1431911867058218151">ፕላም</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
index 85374051..35c80c34 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
@@ -69,6 +69,7 @@
 <translation id="1383876407941801731">Buscar</translation>
 <translation id="1385214448885562192">Presiona Enter para aceptar, Escape para cancelar, la tecla de flecha hacia abajo para ver el siguiente resultado y la tecla de flecha hacia arriba para ver el resultado anterior.</translation>
 <translation id="1396114365388024581">tablst</translation>
+<translation id="139902759009894363">Anunciar los atributos de texto enriquecido</translation>
 <translation id="1405567553485452995">Verde claro</translation>
 <translation id="1417889266572670458">Azul marino</translation>
 <translation id="1431911867058218151">Ciruela</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
index 7b051fe4..6d8f002 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
@@ -69,6 +69,7 @@
 <translation id="1383876407941801731">Hanapin</translation>
 <translation id="1385214448885562192">Pindutin ang enter upang tanggapin o escape upang kanselahin, down para sa susunod at up para sa nakaraan.</translation>
 <translation id="1396114365388024581">tablst</translation>
+<translation id="139902759009894363">Ianunsyo ang mga attribute ng rich text</translation>
 <translation id="1405567553485452995">Light Green</translation>
 <translation id="1417889266572670458">Navy</translation>
 <translation id="1431911867058218151">Plum</translation>
diff --git a/chrome/browser/resources/local_ntp/customize.css b/chrome/browser/resources/local_ntp/customize.css
index b2d6f1b..b3df0a0 100644
--- a/chrome/browser/resources/local_ntp/customize.css
+++ b/chrome/browser/resources/local_ntp/customize.css
@@ -2,7 +2,8 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file. */
 
-#custom-bg {
+#custom-bg,
+#custom-bg-preview {
   background-position: center center;
   background-repeat: no-repeat;
   background-size: cover;
diff --git a/chrome/browser/resources/local_ntp/customize.js b/chrome/browser/resources/local_ntp/customize.js
index 10079a0..6b6b9e8 100644
--- a/chrome/browser/resources/local_ntp/customize.js
+++ b/chrome/browser/resources/local_ntp/customize.js
@@ -98,6 +98,7 @@
   COLORS_MENU: 'colors-menu',
   CUSTOMIZATION_MENU: 'customization-menu',
   CUSTOM_BG: 'custom-bg',
+  CUSTOM_BG_PREVIEW: 'custom-bg-preview',
   CUSTOM_LINKS_RESTORE_DEFAULT: 'custom-links-restore-default',
   CUSTOM_LINKS_RESTORE_DEFAULT_TEXT: 'custom-links-restore-default-text',
   DEFAULT_WALLPAPERS: 'edit-bg-default-wallpapers',
@@ -853,18 +854,18 @@
   // TODO(crbug/971853): add browertests for previews.
   // Set preview images at 720p by replacing the params in the url.
   const re = /w\d+\-h\d+/;
-  $(customize.IDS.CUSTOM_BG).style.backgroundImage =
+  $(customize.IDS.CUSTOM_BG_PREVIEW).style.backgroundImage =
       tile.style.backgroundImage.replace(re, 'w1280-h720');
-  $(customize.IDS.CUSTOM_BG).style.opacity = 1;
+  $(customize.IDS.CUSTOM_BG_PREVIEW).style.opacity = 1;
+  $(customize.IDS.CUSTOM_BG).style.opacity = 0;
 };
 
 /**
  * Remove a preview image of a custom backgrounds.
- * @param {!Element} tile The tile that was deselected.
  */
-customize.richerPicker_unpreviewImage = function(tile) {
-  $(customize.IDS.CUSTOM_BG).style.backgroundImage =
-      customize.originalBackground;
+customize.richerPicker_unpreviewImage = function() {
+  $(customize.IDS.CUSTOM_BG_PREVIEW).style.opacity = 0;
+  $(customize.IDS.CUSTOM_BG).style.opacity = 1;
 };
 
 /**
@@ -894,7 +895,7 @@
   customize.selectedOptions.background = null;
   customize.richerPicker_removeSelectedState(tile);
   customize.richerPicker_maybeToggleDone();
-  customize.richerPicker_unpreviewImage(tile);
+  customize.richerPicker_unpreviewImage();
 };
 
 /**
@@ -1289,6 +1290,8 @@
 customize.richerPicker_closeCustomizationMenu = function() {
   $(customize.IDS.CUSTOMIZATION_MENU).close();
   customize.richerPicker_resetCustomizationMenu();
+
+  customize.richerPicker_unpreviewImage();
 };
 
 /**
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css
index a265b36..f544efa3 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.css
+++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -861,7 +861,7 @@
 
 .menu-option-icon-wrapper {
   display: inline-block;
-  height: 20px;
+  height: 32px;
   margin-inline-start: 24px;
   width: 20px;
 }
@@ -906,8 +906,12 @@
   height: 32px;
   line-height: 32px;
   margin-inline-start: 16px;
+  max-width: 128px;
+  overflow: hidden;
   text-align: center;
+  text-overflow: ellipsis;
   user-select: none;
+  white-space: nowrap;
 }
 
 #menu-header {
diff --git a/chrome/browser/resources/local_ntp/local_ntp.html b/chrome/browser/resources/local_ntp/local_ntp.html
index d95b476c..e99b7ddd 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.html
+++ b/chrome/browser/resources/local_ntp/local_ntp.html
@@ -32,6 +32,7 @@
 </head>
 <body>
   <div id="custom-bg"></div>
+  <div id="custom-bg-preview"></div>
   <!-- Container for the OneGoogleBar HTML. -->
   <div id="one-google"></div>
 
diff --git a/chrome/browser/resources/welcome/onboarding_welcome/BUILD.gn b/chrome/browser/resources/welcome/onboarding_welcome/BUILD.gn
index c817f1f..ad2a0c5 100644
--- a/chrome/browser/resources/welcome/onboarding_welcome/BUILD.gn
+++ b/chrome/browser/resources/welcome/onboarding_welcome/BUILD.gn
@@ -67,7 +67,6 @@
     "./shared:nux_types",
     "//ui/webui/resources/cr_elements/cr_view_manager:cr_view_manager",
     "//ui/webui/resources/js:load_time_data",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
diff --git a/chrome/browser/resources/welcome/onboarding_welcome/welcome_app.html b/chrome/browser/resources/welcome/onboarding_welcome/welcome_app.html
index c173035b..76f7eb4 100644
--- a/chrome/browser/resources/welcome/onboarding_welcome/welcome_app.html
+++ b/chrome/browser/resources/welcome/onboarding_welcome/welcome_app.html
@@ -3,7 +3,6 @@
 <link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_view_manager/cr_view_manager.html">
 <link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html">
-<link rel="import" href="chrome://resources/html/promise_resolver.html">
 <link rel="import" href="google_apps/nux_google_apps.html">
 <link rel="import" href="landing_view.html">
 <link rel="import" href="navigation_behavior.html">
diff --git a/chrome/browser/search/chrome_colors/chrome_colors_service.cc b/chrome/browser/search/chrome_colors/chrome_colors_service.cc
index f5ad71bc..c8890042 100644
--- a/chrome/browser/search/chrome_colors/chrome_colors_service.cc
+++ b/chrome/browser/search/chrome_colors/chrome_colors_service.cc
@@ -13,27 +13,40 @@
 
 ChromeColorsService::~ChromeColorsService() = default;
 
-void ChromeColorsService::ApplyDefaultTheme() {
-  if (revert_theme_changes_.is_null())
-    revert_theme_changes_ = theme_service_->GetRevertThemeCallback();
+void ChromeColorsService::ApplyDefaultTheme(content::WebContents* tab) {
+  SaveThemeRevertState(tab);
   theme_service_->UseDefaultTheme();
 }
 
-void ChromeColorsService::ApplyAutogeneratedTheme(SkColor color) {
-  if (revert_theme_changes_.is_null())
-    revert_theme_changes_ = theme_service_->GetRevertThemeCallback();
+void ChromeColorsService::ApplyAutogeneratedTheme(SkColor color,
+                                                  content::WebContents* tab) {
+  SaveThemeRevertState(tab);
   theme_service_->BuildFromColor(color);
 }
 
+void ChromeColorsService::RevertThemeChangesForTab(content::WebContents* tab) {
+  if (dialog_tab_ == tab)
+    RevertThemeChanges();
+}
+
 void ChromeColorsService::RevertThemeChanges() {
   if (!revert_theme_changes_.is_null()) {
     std::move(revert_theme_changes_).Run();
-    revert_theme_changes_.Reset();
+    ConfirmThemeChanges();
   }
 }
 
 void ChromeColorsService::ConfirmThemeChanges() {
   revert_theme_changes_.Reset();
+  dialog_tab_ = nullptr;
+}
+
+void ChromeColorsService::SaveThemeRevertState(content::WebContents* tab) {
+  // TODO(crbug.com/980745): Support theme reverting for multiple tabs.
+  if (revert_theme_changes_.is_null()) {
+    revert_theme_changes_ = theme_service_->GetRevertThemeCallback();
+    dialog_tab_ = tab;
+  }
 }
 
 void ChromeColorsService::Shutdown() {}
diff --git a/chrome/browser/search/chrome_colors/chrome_colors_service.h b/chrome/browser/search/chrome_colors/chrome_colors_service.h
index 8fb73d9..55c71a4 100644
--- a/chrome/browser/search/chrome_colors/chrome_colors_service.h
+++ b/chrome/browser/search/chrome_colors/chrome_colors_service.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "components/keyed_service/core/keyed_service.h"
+#include "content/public/browser/web_contents.h"
 #include "third_party/skia/include/core/SkColor.h"
 
 class TestChromeColorsService;
@@ -23,14 +24,18 @@
   explicit ChromeColorsService(Profile* profile);
   ~ChromeColorsService() override;
 
-  // Applies a theme that can be reverted. Saves the previous theme state if
-  // needed.
-  void ApplyDefaultTheme();
-  void ApplyAutogeneratedTheme(SkColor color);
+  // Applies a theme that can be reverted by saving the previous theme state and
+  // the |tab| that changes are made from.
+  void ApplyDefaultTheme(content::WebContents* tab);
+  void ApplyAutogeneratedTheme(SkColor color, content::WebContents* tab);
 
-  // Reverts to the previous theme state before Apply* was used.
+  // Reverts to the previous theme state before first Apply* was used.
   void RevertThemeChanges();
 
+  // Same as |RevertThemeChanges| but only reverts theme changes if they were
+  // made from the same tab. Used for reverting changes from a closing NTP.
+  void RevertThemeChangesForTab(content::WebContents* tab);
+
   // Confirms current theme changes. Since the theme is already installed by
   // Apply*, this only clears the previously saved state.
   void ConfirmThemeChanges();
@@ -38,14 +43,23 @@
  private:
   friend class ::TestChromeColorsService;
 
+  // Saves the necessary state(revert callback and the current tab) for
+  // performing theme change revert. Saves the state only if it is not set.
+  void SaveThemeRevertState(content::WebContents* tab);
+
   // KeyedService implementation:
   void Shutdown() override;
 
   ThemeService* const theme_service_;
 
+  // The first tab that used Apply* and hasn't Confirm/Revert the changes.
+  content::WebContents* dialog_tab_ = nullptr;
+
   // Callback that will revert the theme to the state it was at the time of this
   // callback's creation.
   base::OnceClosure revert_theme_changes_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeColorsService);
 };
 
 }  // namespace chrome_colors
diff --git a/chrome/browser/search/chrome_colors/chrome_colors_service_unittest.cc b/chrome/browser/search/chrome_colors/chrome_colors_service_unittest.cc
index 5043a01..8e8ec3e4c 100644
--- a/chrome/browser/search/chrome_colors/chrome_colors_service_unittest.cc
+++ b/chrome/browser/search/chrome_colors/chrome_colors_service_unittest.cc
@@ -7,6 +7,7 @@
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
+#include "content/public/test/web_contents_tester.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 class TestChromeColorsService : public BrowserWithTestWindowTest {
@@ -17,6 +18,9 @@
     BrowserWithTestWindowTest::SetUp();
     chrome_colors_service_ =
         chrome_colors::ChromeColorsFactory::GetForProfile(profile());
+
+    tab_ = content::WebContentsTester::CreateTestWebContents(profile(), nullptr)
+               .get();
   }
 
   bool HasThemeRevertCallback() {
@@ -24,6 +28,7 @@
   }
 
   chrome_colors::ChromeColorsService* chrome_colors_service_;
+  content::WebContents* tab_;
 };
 
 TEST_F(TestChromeColorsService, ApplyAndConfirmAutogeneratedTheme) {
@@ -31,12 +36,12 @@
   ASSERT_TRUE(theme_service->UsingDefaultTheme());
 
   SkColor theme_color1 = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color1);
+  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color1, tab_);
   EXPECT_TRUE(theme_service->UsingAutogenerated());
   EXPECT_TRUE(HasThemeRevertCallback());
 
   SkColor theme_color2 = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color2);
+  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color2, tab_);
   EXPECT_TRUE(theme_service->UsingAutogenerated());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -52,12 +57,12 @@
   ASSERT_TRUE(theme_service->UsingDefaultTheme());
 
   SkColor theme_color1 = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color1);
+  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color1, tab_);
   EXPECT_TRUE(theme_service->UsingAutogenerated());
   EXPECT_TRUE(HasThemeRevertCallback());
 
   SkColor theme_color2 = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color2);
+  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color2, tab_);
   EXPECT_TRUE(theme_service->UsingAutogenerated());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -75,7 +80,7 @@
   ASSERT_EQ(prev_theme_color, theme_service->GetThemeColor());
 
   SkColor new_theme_color = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(new_theme_color);
+  chrome_colors_service_->ApplyAutogeneratedTheme(new_theme_color, tab_);
   EXPECT_EQ(new_theme_color, theme_service->GetThemeColor());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -93,7 +98,7 @@
   ASSERT_EQ(prev_theme_color, theme_service->GetThemeColor());
 
   SkColor new_theme_color = SkColorSetRGB(100, 0, 200);
-  chrome_colors_service_->ApplyAutogeneratedTheme(new_theme_color);
+  chrome_colors_service_->ApplyAutogeneratedTheme(new_theme_color, tab_);
   EXPECT_EQ(new_theme_color, theme_service->GetThemeColor());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -110,7 +115,7 @@
   ASSERT_EQ(prev_theme_color, theme_service->GetThemeColor());
   ASSERT_FALSE(theme_service->UsingDefaultTheme());
 
-  chrome_colors_service_->ApplyDefaultTheme();
+  chrome_colors_service_->ApplyDefaultTheme(tab_);
   EXPECT_TRUE(theme_service->UsingDefaultTheme());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -127,7 +132,7 @@
   ASSERT_EQ(prev_theme_color, theme_service->GetThemeColor());
   ASSERT_FALSE(theme_service->UsingDefaultTheme());
 
-  chrome_colors_service_->ApplyDefaultTheme();
+  chrome_colors_service_->ApplyDefaultTheme(tab_);
   EXPECT_TRUE(theme_service->UsingDefaultTheme());
   EXPECT_TRUE(HasThemeRevertCallback());
 
@@ -136,3 +141,28 @@
   EXPECT_EQ(prev_theme_color, theme_service->GetThemeColor());
   EXPECT_FALSE(HasThemeRevertCallback());
 }
+
+TEST_F(TestChromeColorsService, RevertThemeChangesForTab) {
+  ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile());
+  ASSERT_TRUE(theme_service->UsingDefaultTheme());
+
+  SkColor theme_color1 = SkColorSetRGB(100, 0, 200);
+  chrome_colors_service_->ApplyAutogeneratedTheme(theme_color1, tab_);
+  EXPECT_TRUE(theme_service->UsingAutogenerated());
+  EXPECT_TRUE(HasThemeRevertCallback());
+
+  chrome_colors_service_->RevertThemeChangesForTab(nullptr);
+  EXPECT_TRUE(theme_service->UsingAutogenerated());
+  EXPECT_TRUE(HasThemeRevertCallback());
+
+  AddTab(browser(), GURL("chrome://newtab"));
+  content::WebContents* new_tab =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  chrome_colors_service_->RevertThemeChangesForTab(new_tab);
+  EXPECT_TRUE(theme_service->UsingAutogenerated());
+  EXPECT_TRUE(HasThemeRevertCallback());
+
+  chrome_colors_service_->RevertThemeChangesForTab(tab_);
+  EXPECT_FALSE(theme_service->UsingAutogenerated());
+  EXPECT_FALSE(HasThemeRevertCallback());
+}
diff --git a/chrome/browser/signin/identity_manager_factory.cc b/chrome/browser/signin/identity_manager_factory.cc
index 7e598be8..2a57a641 100644
--- a/chrome/browser/signin/identity_manager_factory.cc
+++ b/chrome/browser/signin/identity_manager_factory.cc
@@ -20,7 +20,6 @@
 #include "components/signin/core/browser/account_fetcher_service.h"
 #include "components/signin/core/browser/account_tracker_service.h"
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 #include "components/signin/core/browser/primary_account_manager.h"
 #include "components/signin/core/browser/primary_account_policy_manager_impl.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
@@ -120,14 +119,14 @@
 // static
 identity::IdentityManager* IdentityManagerFactory::GetForProfile(
     Profile* profile) {
-  return static_cast<IdentityManagerWrapper*>(
+  return static_cast<identity::IdentityManager*>(
       GetInstance()->GetServiceForBrowserContext(profile, true));
 }
 
 // static
 identity::IdentityManager* IdentityManagerFactory::GetForProfileIfExists(
     const Profile* profile) {
-  return static_cast<IdentityManagerWrapper*>(
+  return static_cast<identity::IdentityManager*>(
       GetInstance()->GetServiceForBrowserContext(const_cast<Profile*>(profile),
                                                  false));
 }
@@ -192,7 +191,7 @@
           ChromeSigninClientFactory::GetForProfile(profile),
           token_service.get(), account_tracker_service.get());
 
-  auto identity_manager = std::make_unique<IdentityManagerWrapper>(
+  auto identity_manager = std::make_unique<identity::IdentityManager>(
       std::move(account_tracker_service), std::move(token_service),
       std::move(gaia_cookie_manager_service),
       std::move(primary_account_manager), std::move(account_fetcher_service),
@@ -207,7 +206,7 @@
 
 void IdentityManagerFactory::BrowserContextShutdown(
     content::BrowserContext* context) {
-  auto* identity_manager = static_cast<IdentityManagerWrapper*>(
+  auto* identity_manager = static_cast<identity::IdentityManager*>(
       GetServiceForBrowserContext(context, false));
   if (identity_manager) {
     for (Observer& observer : observer_list_)
diff --git a/chrome/browser/signin/identity_test_environment_profile_adaptor.cc b/chrome/browser/signin/identity_test_environment_profile_adaptor.cc
index f63fdc40..e3dc5fd 100644
--- a/chrome/browser/signin/identity_test_environment_profile_adaptor.cc
+++ b/chrome/browser/signin/identity_test_environment_profile_adaptor.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "chrome/browser/signin/chrome_signin_client_factory.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 
 // static
 std::unique_ptr<TestingProfile> IdentityTestEnvironmentProfileAdaptor::
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index afb209c..768d00ab 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1219,20 +1219,10 @@
       "webui/management_ui.h",
       "webui/management_ui_handler.cc",
       "webui/management_ui_handler.h",
-      "webui/media_router/media_router_dialog_controller_webui_impl.cc",
-      "webui/media_router/media_router_dialog_controller_webui_impl.h",
       "webui/media_router/media_router_internals_ui.cc",
       "webui/media_router/media_router_internals_ui.h",
       "webui/media_router/media_router_internals_webui_message_handler.cc",
       "webui/media_router/media_router_internals_webui_message_handler.h",
-      "webui/media_router/media_router_localized_strings_provider.cc",
-      "webui/media_router/media_router_localized_strings_provider.h",
-      "webui/media_router/media_router_resources_provider.cc",
-      "webui/media_router/media_router_resources_provider.h",
-      "webui/media_router/media_router_ui.cc",
-      "webui/media_router/media_router_ui.h",
-      "webui/media_router/media_router_webui_message_handler.cc",
-      "webui/media_router/media_router_webui_message_handler.h",
       "webui/media_router/web_contents_display_observer.h",
       "webui/ntp/app_icon_webui_handler.cc",
       "webui/ntp/app_icon_webui_handler.h",
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc
index 713b345..fc6f36a 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -941,25 +941,21 @@
     const auto find_in_app_list = id_to_app_list_index.find(app->id());
     const base::Time time = app->GetLastActivityTime();
 
-    if (app->id() == kInternalAppIdContinueReading) {
-      // Case 1: if it's |kInternalAppIdContinueReading|, set relevance as 1.0
-      // (always show it as the first).
-      result->set_relevance(1.0);
-    } else if (find_in_ranker != ranker_scores.end()) {
-      // Case 2: if it's recommended by |ranker_|, set relevance as a score
-      // in [0.67, 0.99].
-      result->set_relevance(ReRange(find_in_ranker->second, 0.67, 0.99));
+    if (find_in_ranker != ranker_scores.end()) {
+      // Case 1: if it's recommended by |ranker_|, set relevance as a score
+      // in [0.67, 1.0].
+      result->set_relevance(ReRange(find_in_ranker->second, 0.67, 1.0));
     } else if (!time.is_null()) {
-      // Case 3: if it has last activity time or install time, set the relevance
+      // Case 2: if it has last activity time or install time, set the relevance
       // in [0.34, 0.66] based on the time.
       result->UpdateFromLastLaunchedOrInstalledTime(clock_->Now(), time);
       result->set_relevance(ReRange(result->relevance(), 0.34, 0.66));
     } else if (find_in_app_list != id_to_app_list_index.end()) {
-      // Case 4: if it's in the app_list_index, set the relevance in [0.1, 0.33]
+      // Case 3: if it's in the app_list_index, set the relevance in [0.1, 0.33]
       result->set_relevance(
           ReRange(1.0f / (1.0f + find_in_app_list->second), 0.1, 0.33));
     } else {
-      // Case 5: otherwise set the relevance as 0.0f;
+      // Case 4: otherwise set the relevance as 0.0f;
       result->set_relevance(0.0f);
     }
 
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.cc b/chrome/browser/ui/app_list/search/chrome_search_result.cc
index 1c83a129..3508be8d 100644
--- a/chrome/browser/ui/app_list/search/chrome_search_result.cc
+++ b/chrome/browser/ui/app_list/search/chrome_search_result.cc
@@ -18,94 +18,78 @@
 
 void ChromeSearchResult::SetActions(const Actions& actions) {
   metadata_->actions = actions;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetDisplayScore(double display_score) {
   metadata_->display_score = display_score;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetIsInstalling(bool is_installing) {
   metadata_->is_installing = is_installing;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetTitle(const base::string16& title) {
   metadata_->title = title;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetTitleTags(const Tags& tags) {
   metadata_->title_tags = tags;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetDetails(const base::string16& details) {
   metadata_->details = details;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetDetailsTags(const Tags& tags) {
   metadata_->details_tags = tags;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetAccessibleName(const base::string16& name) {
   metadata_->accessible_name = name;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetRating(float rating) {
   metadata_->rating = rating;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetFormattedPrice(
     const base::string16& formatted_price) {
   metadata_->formatted_price = formatted_price;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetDisplayType(DisplayType display_type) {
   metadata_->display_type = display_type;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetResultType(ResultType result_type) {
   metadata_->result_type = result_type;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
+}
+
+void ChromeSearchResult::SetDisplayIndex(DisplayIndex display_index) {
+  metadata_->display_index = display_index;
+  SetSearchResultMetadata();
+}
+
+void ChromeSearchResult::SetDisplayLocation(DisplayLocation display_location) {
+  metadata_->display_location = display_location;
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetIsOmniboxSearch(bool is_omnibox_search) {
   metadata_->is_omnibox_search = is_omnibox_search;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetPercentDownloaded(int percent_downloaded) {
@@ -132,25 +116,19 @@
 void ChromeSearchResult::SetIcon(const gfx::ImageSkia& icon) {
   icon.EnsureRepsForSupportedScales();
   metadata_->icon = icon;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetChipIcon(const gfx::ImageSkia& chip_icon) {
   chip_icon.EnsureRepsForSupportedScales();
   metadata_->chip_icon = chip_icon;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetBadgeIcon(const gfx::ImageSkia& badge_icon) {
   badge_icon.EnsureRepsForSupportedScales();
   metadata_->badge_icon = badge_icon;
-  AppListModelUpdater* updater = model_updater();
-  if (updater)
-    updater->SetSearchResultMetadata(id(), CloneMetadata());
+  SetSearchResultMetadata();
 }
 
 void ChromeSearchResult::SetNotifyVisibilityChange(
@@ -164,6 +142,12 @@
     updater->NotifySearchResultItemInstalled(id());
 }
 
+void ChromeSearchResult::SetSearchResultMetadata() {
+  AppListModelUpdater* updater = model_updater();
+  if (updater)
+    updater->SetSearchResultMetadata(id(), CloneMetadata());
+}
+
 void ChromeSearchResult::InvokeAction(int action_index, int event_flags) {}
 
 void ChromeSearchResult::OnVisibilityChanged(bool visibility) {
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.h b/chrome/browser/ui/app_list/search/chrome_search_result.h
index 96930a7..bacccf2 100644
--- a/chrome/browser/ui/app_list/search/chrome_search_result.h
+++ b/chrome/browser/ui/app_list/search/chrome_search_result.h
@@ -32,6 +32,8 @@
   using Tags = ash::SearchResultTags;
   using Action = ash::SearchResultAction;
   using Actions = ash::SearchResultActions;
+  using DisplayIndex = ash::SearchResultDisplayIndex;
+  using DisplayLocation = ash::SearchResultDisplayLocation;
 
   ChromeSearchResult();
   virtual ~ChromeSearchResult();
@@ -47,6 +49,10 @@
   const std::string& id() const { return metadata_->id; }
   DisplayType display_type() const { return metadata_->display_type; }
   ResultType result_type() const { return metadata_->result_type; }
+  DisplayIndex display_index() const { return metadata_->display_index; }
+  DisplayLocation display_location() const {
+    return metadata_->display_location;
+  }
   const Actions& actions() const { return metadata_->actions; }
   double display_score() const { return metadata_->display_score; }
   bool is_installing() const { return metadata_->is_installing; }
@@ -73,6 +79,8 @@
   void SetFormattedPrice(const base::string16& formatted_price);
   void SetDisplayType(DisplayType display_type);
   void SetResultType(ResultType result_type);
+  void SetDisplayIndex(DisplayIndex display_index);
+  void SetDisplayLocation(DisplayLocation display_location);
   void SetDisplayScore(double display_score);
   void SetActions(const Actions& actions);
   void SetIsOmniboxSearch(bool is_omnibox_search);
@@ -86,6 +94,8 @@
 
   // The following methods call model updater to update Ash.
   void SetPercentDownloaded(int percent_downloaded);
+
+  void SetSearchResultMetadata();
   void NotifyItemInstalled();
 
   void SetMetadata(std::unique_ptr<ash::SearchResultMetadata> metadata) {
diff --git a/chrome/browser/ui/app_list/search/internal_app_result.cc b/chrome/browser/ui/app_list/search/internal_app_result.cc
index 3095cee..9be85ae 100644
--- a/chrome/browser/ui/app_list/search/internal_app_result.cc
+++ b/chrome/browser/ui/app_list/search/internal_app_result.cc
@@ -59,6 +59,12 @@
     large_icon_service_ =
         LargeIconServiceFactory::GetForBrowserContext(profile);
     UpdateContinueReadingFavicon(/*continue_to_google_server=*/true);
+
+    // Set these values to make sure that the chip will show up
+    // in the proper position.
+    SetDisplayIndex(ash::SearchResultDisplayIndex::kFirstIndex);
+    SetDisplayLocation(
+        ash::SearchResultDisplayLocation::kSuggestionChipContainer);
   }
 
   RecordShowHistogram(app_id);
diff --git a/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
index 99254c5..355cf01 100644
--- a/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
@@ -161,6 +161,39 @@
     return result_str;
   }
 
+  // Used for testing Continue Reading. Because the result is placed in the
+  // container based on index flags instead of relevance, use this methodology
+  // to generate list of test results.
+  std::string RunQueryNotSortingByRelevance(const std::string& query) {
+    app_search_->Start(base::UTF8ToUTF16(query));
+
+    std::vector<ChromeSearchResult*> non_relevance_results;
+    std::vector<ChromeSearchResult*> priority_results;
+    for (const auto& result : app_search_->results()) {
+      if (result->display_index() == ash::kFirstIndex &&
+          result->display_location() == ash::kSuggestionChipContainer) {
+        priority_results.emplace_back(result.get());
+      } else {
+        non_relevance_results.emplace_back(result.get());
+      }
+    }
+
+    if (priority_results.size() != 0) {
+      non_relevance_results.insert(non_relevance_results.begin(),
+                                   priority_results.begin(),
+                                   priority_results.end());
+    }
+
+    std::string result_str;
+    for (auto* result : non_relevance_results) {
+      if (!result_str.empty())
+        result_str += ',';
+
+      result_str += base::UTF16ToUTF8(result->title());
+    }
+    return result_str;
+  }
+
   std::string AddArcApp(const std::string& name,
                         const std::string& package,
                         const std::string& activity) {
@@ -466,7 +499,7 @@
         sync_pb::SyncEnums::TYPE_PHONE;
 
     EXPECT_EQ("title2,Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 2: test that ContinueReading is not recommended for local session.
@@ -491,7 +524,7 @@
         sync_pb::SyncEnums::TYPE_PHONE;
 
     EXPECT_EQ("Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 3: test that ContinueReading is not recommended for foreign tab more
@@ -517,7 +550,7 @@
         sync_pb::SyncEnums::TYPE_PHONE;
 
     EXPECT_EQ("Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 4: test that ContinueReading is recommended for foreign tab with
@@ -543,7 +576,7 @@
         sync_pb::SyncEnums::TYPE_TABLET;
 
     EXPECT_EQ("title1,Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 5: test that ContinueReading is not recommended for foreign tab with
@@ -569,7 +602,7 @@
         sync_pb::SyncEnums::TYPE_CROS;
 
     EXPECT_EQ("Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 6: test that ContinueReading is not recommended for foreign tab which
@@ -595,7 +628,7 @@
         sync_pb::SyncEnums::TYPE_CROS;
 
     EXPECT_EQ("Hosted App,Packaged App 1,Packaged App 2,Settings,Camera",
-              RunQuery(""));
+              RunQueryNotSortingByRelevance(""));
   }
 
   // Case 7: test that ContinueReading is not recommended when searching.
@@ -618,7 +651,7 @@
         kTimestamp1;
     session_tracker()->GetSession(kForeignSessionTag1)->device_type =
         sync_pb::SyncEnums::TYPE_PHONE;
-    EXPECT_EQ("Settings", RunQuery("ti"));
+    EXPECT_EQ("Settings", RunQueryNotSortingByRelevance("ti"));
   }
 }
 
diff --git a/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.cc b/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.cc
index 2ac63f5..b5b4b3d9 100644
--- a/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.cc
+++ b/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/resources/keyboard_resource_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/interfaces/constants.mojom.h"
@@ -115,10 +115,10 @@
   if (session_manager::SessionManager::Get())
     session_manager::SessionManager::Get()->RemoveObserver(this);
   pref_change_registrar_.RemoveAll();
-  if (keyboard::KeyboardController::HasInstance()) {
+  if (keyboard::KeyboardUIController::HasInstance()) {
     // In classic Ash, keyboard::KeyboardController owns ChromeKeyboardUI which
     // accesses this class, so make sure that the UI has been destroyed.
-    keyboard::KeyboardController::Get()->Shutdown();
+    keyboard::KeyboardUIController::Get()->Shutdown();
   }
   keyboard_contents_.reset();
 }
@@ -244,7 +244,7 @@
 }
 
 aura::Window* ChromeKeyboardControllerClient::GetKeyboardWindow() const {
-  return keyboard::KeyboardController::Get()->GetKeyboardWindow();
+  return keyboard::KeyboardUIController::Get()->GetKeyboardWindow();
 }
 
 void ChromeKeyboardControllerClient::OnKeyboardEnableFlagsChanged(
diff --git a/chrome/browser/ui/ash/keyboard/chrome_keyboard_ui.cc b/chrome/browser/ui/ash/keyboard/chrome_keyboard_ui.cc
index e20f0a3..7481433 100644
--- a/chrome/browser/ui/ash/keyboard/chrome_keyboard_ui.cc
+++ b/chrome/browser/ui/ash/keyboard/chrome_keyboard_ui.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/shell.h"
 #include "base/bind.h"
 #include "base/bind_helpers.h"
diff --git a/chrome/browser/ui/ash/keyboard/keyboard_controller_browsertest.cc b/chrome/browser/ui/ash/keyboard/keyboard_controller_browsertest.cc
index fd17cda6..2821a4a8 100644
--- a/chrome/browser/ui/ash/keyboard/keyboard_controller_browsertest.cc
+++ b/chrome/browser/ui/ash/keyboard/keyboard_controller_browsertest.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 "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/resources/keyboard_resource_util.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "base/bind_helpers.h"
@@ -210,7 +210,7 @@
   ChromeKeyboardControllerClient::Get()->SetContainerType(
       keyboard::ContainerType::kFloating, base::nullopt, base::DoNothing());
 
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
   controller->ShowKeyboard(false);
   KeyboardVisibleWaiter(true).Wait();
 
@@ -375,7 +375,7 @@
 // whether this needs to be tested in a keyboard::KeyboardController unit test.
 
 IN_PROC_BROWSER_TEST_F(KeyboardControllerStateTest, StateResolvesAfterPreload) {
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
   EXPECT_EQ(controller->GetStateForTest(), keyboard::KeyboardUIState::kLoading);
   KeyboardLoadedWaiter().Wait();
   EXPECT_EQ(controller->GetStateForTest(), keyboard::KeyboardUIState::kHidden);
@@ -383,7 +383,7 @@
 
 IN_PROC_BROWSER_TEST_F(KeyboardControllerStateTest,
                        OpenAndCloseAndOpenInternal) {
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
   controller->ShowKeyboard(false);
   // Need to wait the extension to be loaded. Hence LOADING_EXTENSION.
   EXPECT_EQ(controller->GetStateForTest(), keyboard::KeyboardUIState::kLoading);
@@ -400,7 +400,7 @@
 // See crbug.com/755354.
 IN_PROC_BROWSER_TEST_F(KeyboardControllerStateTest,
                        DisablingKeyboardGoesToInitialState) {
-  auto* controller = keyboard::KeyboardController::Get();
+  auto* controller = keyboard::KeyboardUIController::Get();
 
   EXPECT_EQ(controller->GetStateForTest(), keyboard::KeyboardUIState::kLoading);
 
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 95dbd565..0b29860 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -2095,6 +2095,7 @@
       chrome::NOTIFICATION_TAB_CLOSING,
       content::Source<NavigationController>(&contents->GetController()),
       content::NotificationService::NoDetails());
+  SearchTabHelper::FromWebContents(contents)->OnTabClosing();
 }
 
 void Browser::OnTabDetached(WebContents* contents, bool was_active) {
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index e86c6ff..eed68f27 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -983,6 +983,10 @@
          !(GetContentRestrictions(browser) & CONTENT_RESTRICTION_SAVE);
 }
 
+void ShowFindBar(Browser* browser) {
+  browser->GetFindBarController()->Show();
+}
+
 void Print(Browser* browser) {
 #if BUILDFLAG(ENABLE_PRINTING)
   auto* web_contents = browser->tab_strip_model()->GetActiveWebContents();
@@ -1077,7 +1081,7 @@
 
 void Find(Browser* browser) {
   base::RecordAction(UserMetricsAction("Find"));
-  FindInPage(browser, false, true);
+  FindInPage(browser, false, false);
 }
 
 void FindNext(Browser* browser) {
@@ -1091,7 +1095,21 @@
 }
 
 void FindInPage(Browser* browser, bool find_next, bool forward_direction) {
-  browser->GetFindBarController()->Show(find_next, forward_direction);
+  ShowFindBar(browser);
+  if (find_next) {
+    base::string16 find_text;
+    FindTabHelper* find_helper = FindTabHelper::FromWebContents(
+        browser->tab_strip_model()->GetActiveWebContents());
+#if defined(OS_MACOSX)
+    // We always want to search for the current contents of the find bar on
+    // OS X. For regular profile it's always the current find pboard. For
+    // Incognito window it's the newest value of the find pboard content and
+    // user-typed text.
+    FindBar* find_bar = browser->GetFindBarController()->find_bar();
+    find_text = find_bar->GetFindText();
+#endif
+    find_helper->StartFinding(find_text, forward_direction, false);
+  }
 }
 
 bool CanCloseFind(Browser* browser) {
diff --git a/chrome/browser/ui/browser_commands.h b/chrome/browser/ui/browser_commands.h
index 583ab50f..cd872bc 100644
--- a/chrome/browser/ui/browser_commands.h
+++ b/chrome/browser/ui/browser_commands.h
@@ -122,6 +122,7 @@
 void SendTabToSelfFromPageAction(Browser* browser);
 void SavePage(Browser* browser);
 bool CanSavePage(const Browser* browser);
+void ShowFindBar(Browser* browser);
 void Print(Browser* browser);
 bool CanPrint(Browser* browser);
 #if BUILDFLAG(ENABLE_PRINTING)
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_uitest.cc
index 1d94c70..0946acb 100644
--- a/chrome/browser/ui/browser_focus_uitest.cc
+++ b/chrome/browser/ui/browser_focus_uitest.cc
@@ -493,19 +493,19 @@
   ui_test_utils::NavigateToURL(browser(), url);
   EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER));
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
   EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
 
   chrome::FocusLocationBar(browser());
   EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX));
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
   EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
 
   ClickOnView(VIEW_ID_TAB_CONTAINER);
   EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER));
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
   EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
 }
 
diff --git a/chrome/browser/ui/find_bar/find_bar_controller.cc b/chrome/browser/ui/find_bar/find_bar_controller.cc
index 1f847b25..8d453fd 100644
--- a/chrome/browser/ui/find_bar/find_bar_controller.cc
+++ b/chrome/browser/ui/find_bar/find_bar_controller.cc
@@ -26,7 +26,6 @@
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
-#include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/range/range.h"
@@ -104,7 +103,7 @@
   DCHECK(!web_contents_);
 }
 
-void FindBarController::Show(bool find_next, bool forward_direction) {
+void FindBarController::Show() {
   FindTabHelper* find_tab_helper =
       FindTabHelper::FromWebContents(web_contents_);
 
@@ -117,24 +116,6 @@
     find_bar_->Show(true);
   }
   find_bar_->SetFocusAndSelection();
-
-  base::string16 find_text = GetSelectedText();
-
-#if defined(OS_MACOSX)
-  // We always want to search for the current contents of the find bar on
-  // OS X. For regular profile it's always the current find pboard. For
-  // Incognito window it's the newest value of the find pboard content and
-  // user-typed text.
-  find_text = find_bar_->GetFindText();
-#endif
-
-  if (!find_text.empty() || find_next) {
-    // Don't update the local input if we're using the global pasteboard.
-    if (!find_bar_->HasGlobalFindPasteboard())
-      find_bar_->SetFindTextAndSelectedRange(find_text,
-                                             find_tab_helper->selected_range());
-    find_tab_helper->StartFinding(find_text, forward_direction, false);
-  }
 }
 
 void FindBarController::EndFindSession(SelectionAction selection_action,
@@ -368,10 +349,3 @@
   find_bar_->SetFindTextAndSelectedRange(find_string,
                                          find_tab_helper->selected_range());
 }
-
-base::string16 FindBarController::GetSelectedText() {
-  auto* host_view = web_contents_->GetRenderWidgetHostView();
-  return host_view
-             ? base::CollapseWhitespace(host_view->GetSelectedText(), false)
-             : base::string16();
-}
diff --git a/chrome/browser/ui/find_bar/find_bar_controller.h b/chrome/browser/ui/find_bar/find_bar_controller.h
index 967cfc6f..f6c5692c 100644
--- a/chrome/browser/ui/find_bar/find_bar_controller.h
+++ b/chrome/browser/ui/find_bar/find_bar_controller.h
@@ -48,11 +48,7 @@
   ~FindBarController() override;
 
   // Shows the find bar. Any previous search string will again be visible.
-  // The find operation will also be started depending on |find_next| and
-  // if there is currently a text selection. |find_next| means the user
-  // used a command to advance the search and |forward_direction| indicates if
-  // the find should be forward or backwards.
-  void Show(bool find_next = false, bool forward_direction = true);
+  void Show();
 
   // Ends the current session. |selection_action| specifies what to do with the
   // selection on the page created by the find operation. |results_action|
@@ -108,9 +104,6 @@
   // Mac.
   void MaybeSetPrepopulateText();
 
-  // Gets the text that is selected in the current tab, or an empty string.
-  base::string16 GetSelectedText();
-
   content::NotificationRegistrar registrar_;
 
   std::unique_ptr<FindBar> find_bar_;
diff --git a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
index fd12ab8d..b6f8904 100644
--- a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
+++ b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
@@ -130,7 +130,7 @@
   }
 
   void EnsureFindBoxOpenForBrowser(Browser* browser) {
-    chrome::Find(browser);
+    chrome::ShowFindBar(browser);
     gfx::Point position;
     bool fully_visible = false;
     EXPECT_TRUE(GetFindBarWindowInfoForBrowser(
@@ -840,7 +840,7 @@
   GURL url2 = GetURL(kFramePage);
   ui_test_utils::NavigateToURL(browser(), url);
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   gfx::Point position;
   bool fully_visible = false;
@@ -861,7 +861,7 @@
   EXPECT_FALSE(fully_visible);
 
   // Open the find bar again.
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   // Make sure it is open.
   EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible));
@@ -879,7 +879,7 @@
   GURL url = GetURL(kAnchorPage);
   ui_test_utils::NavigateToURL(browser(), url);
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   gfx::Point position;
   bool fully_visible = false;
@@ -906,7 +906,7 @@
   GURL url = GetURL(kSimple);
   ui_test_utils::NavigateToURL(browser(), url);
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   gfx::Point position;
   bool fully_visible = false;
@@ -942,7 +942,7 @@
   GURL url = GetURL(kMoveIfOver);
   ui_test_utils::NavigateToURL(browser(), url);
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   // This is needed on GTK because the reposition operation is asynchronous.
   base::RunLoop().RunUntilIdle();
@@ -1034,7 +1034,7 @@
   GURL url = GetURL(kSimple);
   ui_test_utils::NavigateToURL(browser(), url);
 
-  chrome::Find(browser());
+  chrome::ShowFindBar(browser());
 
   // Simulate a user clearing the search string. Ideally, we should be
   // simulating keypresses here for searching for something and pressing
diff --git a/chrome/browser/ui/login/login_handler_browsertest.cc b/chrome/browser/ui/login/login_handler_browsertest.cc
index 42af222..b7f8abd 100644
--- a/chrome/browser/ui/login/login_handler_browsertest.cc
+++ b/chrome/browser/ui/login/login_handler_browsertest.cc
@@ -76,6 +76,9 @@
     EXPECT_EQ(true, content::EvalJs(contents, "document.body === null"));
   }
 
+  // The URL should be hidden to avoid origin confusion issues.
+  EXPECT_TRUE(browser->location_bar_model()->GetFormattedFullURL().empty());
+
   // Cancel the prompt. On HTTPS pages, the error page content still shouldn't
   // be shown.
   {
@@ -86,6 +89,7 @@
     if (https) {
       EXPECT_EQ(true, content::EvalJs(contents, "document.body === null"));
     }
+    EXPECT_FALSE(browser->location_bar_model()->GetFormattedFullURL().empty());
   }
 
   // Reload; this time, supply credentials and check that the page loads.
@@ -95,6 +99,7 @@
                                    WindowOpenDisposition::CURRENT_TAB,
                                    ui::PAGE_TRANSITION_TYPED, false));
     auth_needed_waiter.Wait();
+    EXPECT_TRUE(browser->location_bar_model()->GetFormattedFullURL().empty());
   }
 
   WindowedAuthSuppliedObserver auth_supplied_waiter(controller);
@@ -105,6 +110,7 @@
   base::string16 expected_title = base::ASCIIToUTF16("OK");
   content::TitleWatcher title_watcher(contents, expected_title);
   EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+  EXPECT_FALSE(browser->location_bar_model()->GetFormattedFullURL().empty());
 }
 
 content::InterstitialPageDelegate* GetInterstitialDelegate(
diff --git a/chrome/browser/ui/login/login_tab_helper.cc b/chrome/browser/ui/login/login_tab_helper.cc
index 044a35a9..b6545bc 100644
--- a/chrome/browser/ui/login/login_tab_helper.cc
+++ b/chrome/browser/ui/login/login_tab_helper.cc
@@ -118,6 +118,21 @@
           // callback, it's safe to use base::Unretained here; the |delegate_|
           // cannot outlive its owning LoginTabHelper.
           base::Unretained(this)));
+
+  // If the challenge comes from a proxy, the URL should be hidden in the
+  // omnibox to avoid origin confusion. Call DidChangeVisibleSecurityState() to
+  // trigger the omnibox to update, picking up the result of ShouldDisplayURL().
+  if (challenge_.is_proxy) {
+    navigation_handle->GetWebContents()->DidChangeVisibleSecurityState();
+  }
+}
+
+bool LoginTabHelper::ShouldDisplayURL() const {
+  return !delegate_ || !challenge_.is_proxy;
+}
+
+bool LoginTabHelper::IsShowingPrompt() const {
+  return !!delegate_;
 }
 
 LoginTabHelper::LoginTabHelper(content::WebContents* web_contents)
@@ -128,19 +143,25 @@
   delegate_.reset();
   url_for_delegate_ = GURL();
 
-  if (!credentials.has_value()) {
-    return;
+  if (credentials.has_value()) {
+    // Pass a weak pointer for the callback, as the WebContents (and thus this
+    // LoginTabHelper) could be destroyed while the network service is
+    // processing the new cache entry.
+    content::BrowserContext::GetDefaultStoragePartition(
+        web_contents()->GetBrowserContext())
+        ->GetNetworkContext()
+        ->AddAuthCacheEntry(challenge_, credentials.value(),
+                            base::BindOnce(&LoginTabHelper::Reload,
+                                           weak_ptr_factory_.GetWeakPtr()));
   }
 
-  // Pass a weak pointer for the callback, as the WebContents (and thus this
-  // LoginTabHelper) could be destroyed while the network service is processing
-  // the new cache entry.
-  content::BrowserContext::GetDefaultStoragePartition(
-      web_contents()->GetBrowserContext())
-      ->GetNetworkContext()
-      ->AddAuthCacheEntry(challenge_, credentials.value(),
-                          base::BindOnce(&LoginTabHelper::Reload,
-                                         weak_ptr_factory_.GetWeakPtr()));
+  // Once credentials have been provided, in the case of proxy auth where the
+  // URL is hidden when the prompt is showing, trigger
+  // DidChangeVisibleSecurityState() to re-show the URL now that the prompt is
+  // gone.
+  if (challenge_.is_proxy) {
+    web_contents()->DidChangeVisibleSecurityState();
+  }
 }
 
 void LoginTabHelper::Reload() {
diff --git a/chrome/browser/ui/login/login_tab_helper.h b/chrome/browser/ui/login/login_tab_helper.h
index 541b8a4..298bb07 100644
--- a/chrome/browser/ui/login/login_tab_helper.h
+++ b/chrome/browser/ui/login/login_tab_helper.h
@@ -29,6 +29,13 @@
   void DidFinishNavigation(
       content::NavigationHandle* navigation_handle) override;
 
+  // Returns false if the omnibox should hide the URL due to a proxy auth
+  // prompt, and true otherwise. The URL should not be shown during a proxy auth
+  // prompt to avoid origin confusion.
+  bool ShouldDisplayURL() const;
+  // Returns true if an auth prompt is currently visible.
+  bool IsShowingPrompt() const;
+
  private:
   friend class content::WebContentsUserData<LoginTabHelper>;
 
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc
index 70317af6..eeeca342 100644
--- a/chrome/browser/ui/search/search_tab_helper.cc
+++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -153,6 +153,11 @@
   ipc_router_.OnTabDeactivated();
 }
 
+void SearchTabHelper::OnTabClosing() {
+  if (search::IsInstantNTP(web_contents_) && chrome_colors_service_)
+    chrome_colors_service_->RevertThemeChangesForTab(web_contents_);
+}
+
 void SearchTabHelper::DidStartNavigation(
     content::NavigationHandle* navigation_handle) {
   if (!navigation_handle->IsInMainFrame() ||
@@ -477,12 +482,12 @@
 
 void SearchTabHelper::OnApplyDefaultTheme() {
   if (chrome_colors_service_)
-    chrome_colors_service_->ApplyDefaultTheme();
+    chrome_colors_service_->ApplyDefaultTheme(web_contents_);
 }
 
 void SearchTabHelper::OnApplyAutogeneratedTheme(SkColor color) {
   if (chrome_colors_service_)
-    chrome_colors_service_->ApplyAutogeneratedTheme(color);
+    chrome_colors_service_->ApplyAutogeneratedTheme(color, web_contents_);
 }
 
 void SearchTabHelper::OnRevertThemeChanges() {
diff --git a/chrome/browser/ui/search/search_tab_helper.h b/chrome/browser/ui/search/search_tab_helper.h
index fafc41c..eab7f593 100644
--- a/chrome/browser/ui/search/search_tab_helper.h
+++ b/chrome/browser/ui/search/search_tab_helper.h
@@ -65,6 +65,9 @@
   // Called when the tab corresponding to |this| instance is deactivated.
   void OnTabDeactivated();
 
+  // Called when the tab corresponding to |this| instance is closing.
+  void OnTabClosing();
+
   SearchIPCRouter& ipc_router_for_testing() { return ipc_router_; }
 
  private:
diff --git a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
index f8b3ad7..6fd4fe9 100644
--- a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
+++ b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
+#include "chrome/browser/ui/login/login_tab_helper.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "components/google/core/common/google_util.h"
@@ -94,11 +95,18 @@
   if (!entry)
     return true;
 
-  security_interstitials::SecurityInterstitialTabHelper* tab_helper =
-      security_interstitials::SecurityInterstitialTabHelper::FromWebContents(
-          GetActiveWebContents());
-  if (tab_helper && tab_helper->IsDisplayingInterstitial())
-    return tab_helper->ShouldDisplayURL();
+  security_interstitials::SecurityInterstitialTabHelper*
+      security_interstitial_tab_helper =
+          security_interstitials::SecurityInterstitialTabHelper::
+              FromWebContents(GetActiveWebContents());
+  if (security_interstitial_tab_helper &&
+      security_interstitial_tab_helper->IsDisplayingInterstitial())
+    return security_interstitial_tab_helper->ShouldDisplayURL();
+
+  LoginTabHelper* login_tab_helper =
+      LoginTabHelper::FromWebContents(GetActiveWebContents());
+  if (login_tab_helper && login_tab_helper->IsShowingPrompt())
+    return login_tab_helper->ShouldDisplayURL();
 
   if (entry->IsViewSourceMode() ||
       entry->GetPageType() == content::PAGE_TYPE_INTERSTITIAL) {
diff --git a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
index e90952b..d7c7299 100644
--- a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
+++ b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
@@ -21,7 +21,6 @@
 #include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/notification_service.h"
-#include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "ui/base/clipboard/clipboard.h"
@@ -35,7 +34,7 @@
 using ui_test_utils::IsViewFocused;
 
 namespace {
-const char kSimplePage[] = "/find_in_page/simple.html";
+static const char kSimplePage[] = "/find_in_page/simple.html";
 }  // namespace
 
 class FindInPageTest : public InProcessBrowserTest {
@@ -582,38 +581,6 @@
   observer.Wait();
 }
 
-// FindInPage on Mac doesn't use prepopulated values. Search there is global.
-#if !defined(OS_MACOSX)
-IN_PROC_BROWSER_TEST_F(FindInPageTest, SelectionDuringFind) {
-  ASSERT_TRUE(embedded_test_server()->Start());
-  // Make sure Chrome is in the foreground, otherwise sending input
-  // won't do anything and the test will hang.
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-
-  ui_test_utils::NavigateToURL(
-      browser(),
-      embedded_test_server()->GetURL("/find_in_page/find_from_selection.html"));
-
-  WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-
-  // Tab to the input (which selects the text inside)
-  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
-      browser(), ui::VKEY_TAB, false, false, false, false,
-      content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE,
-      content::Source<content::RenderViewHost>(
-          web_contents->GetRenderViewHost())));
-
-  browser()->GetFindBarController()->Show();
-  EXPECT_TRUE(IsViewFocused(browser(), VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
-
-  // verify the text matches the selection
-  EXPECT_EQ(ASCIIToUTF16("text"), GetFindBarText());
-  FindNotificationDetails details = WaitForFindResult();
-  EXPECT_TRUE(details.number_of_matches() > 0);
-}
-#endif
-
 IN_PROC_BROWSER_TEST_F(FindInPageTest, GlobalEscapeClosesFind) {
   ASSERT_TRUE(embedded_test_server()->Start());
   // Make sure Chrome is in the foreground, otherwise sending input
@@ -624,7 +591,7 @@
                                embedded_test_server()->GetURL(kSimplePage));
 
   // Open find
-  browser()->GetFindBarController()->Show(false, true);
+  browser()->GetFindBarController()->Show();
   EXPECT_TRUE(IsViewFocused(browser(), VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
 
   // Put focus into location bar
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
index 8694b97..29ecb23c 100644
--- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/ui/views/frame/top_container_view.h"
 #include "chrome/browser/ui/views/media_router/cast_dialog_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
 
 namespace media_router {
 
@@ -21,15 +20,15 @@
 MediaRouterDialogControllerImplBase*
 MediaRouterDialogControllerImplBase::GetOrCreateForWebContents(
     content::WebContents* web_contents) {
-    return MediaRouterDialogControllerViews::GetOrCreateForWebContents(
-        web_contents);
+  return MediaRouterDialogControllerViews::GetOrCreateForWebContents(
+      web_contents);
 }
 
 // static
 MediaRouterDialogControllerImplBase*
 MediaRouterDialogControllerImplBase::FromWebContents(
     content::WebContents* web_contents) {
-    return MediaRouterDialogControllerViews::FromWebContents(web_contents);
+  return MediaRouterDialogControllerViews::FromWebContents(web_contents);
 }
 
 MediaRouterDialogControllerViews::~MediaRouterDialogControllerViews() {
diff --git a/chrome/browser/ui/views/status_icons/status_icon_linux_x11.cc b/chrome/browser/ui/views/status_icons/status_icon_linux_x11.cc
index 56dbca9..f078708 100644
--- a/chrome/browser/ui/views/status_icons/status_icon_linux_x11.cc
+++ b/chrome/browser/ui/views/status_icons/status_icon_linux_x11.cc
@@ -34,7 +34,8 @@
 constexpr long kSystemTrayRequestDock = 0;
 
 constexpr int kXembedInfoProtocolVersion = 0;
-constexpr int kXembedInfoFlags = 0;
+constexpr int kXembedFlagMap = 1 << 0;
+constexpr int kXembedInfoFlags = kXembedFlagMap;
 
 const int16_t kInitialWindowPos = std::numeric_limits<int16_t>::min();
 
@@ -45,7 +46,7 @@
 StatusIconLinuxX11::~StatusIconLinuxX11() = default;
 
 void StatusIconLinuxX11::SetIcon(const gfx::ImageSkia& image) {
-  // Nothing to do.
+  SchedulePaint();
 }
 
 void StatusIconLinuxX11::SetToolTip(const base::string16& tool_tip) {
@@ -76,6 +77,9 @@
       widget_.get(), native_widget.get());
   host_ = host.get();
 
+  // We outlive the host, so no need to remove ourselves as an observer.
+  host->AddObserver(this);
+
   int visual_id;
   if (ui::GetIntProperty(manager, "_NET_SYSTEM_TRAY_VISUAL", &visual_id))
     host->SetVisualId(visual_id);
@@ -104,6 +108,21 @@
   Window window = host_->GetAcceleratedWidget();
   DCHECK(window);
 
+  ui::SetIntArrayProperty(window, "_XEMBED_INFO", "CARDINAL",
+                          {kXembedInfoProtocolVersion, kXembedInfoFlags});
+
+  XSetWindowAttributes attrs;
+  unsigned long flags = 0;
+  if (widget_->ShouldWindowContentsBeTransparent()) {
+    flags |= CWBackPixel;
+    attrs.background_pixel = 0;
+  } else {
+    ui::SetIntProperty(window, "CHROMIUM_COMPOSITE_WINDOW", "CARDINAL", 1);
+    flags |= CWBackPixmap;
+    attrs.background_pixmap = ParentRelative;
+  }
+  XChangeWindowAttributes(display, window, flags, &attrs);
+
   widget_->SetContentsView(this);
   set_owned_by_client();
 
@@ -112,11 +131,6 @@
   SetTooltipText(delegate_->GetToolTip());
   set_context_menu_controller(this);
 
-  widget_->Show();
-
-  ui::SetIntArrayProperty(window, "_XEMBED_INFO", "CARDINAL",
-                          {kXembedInfoProtocolVersion, kXembedInfoFlags});
-
   XEvent ev;
   memset(&ev, 0, sizeof(ev));
   ev.xclient.type = ClientMessage;
@@ -182,3 +196,12 @@
   canvas->DrawImageInt(image, 0, 0, image.width(), image.height(), 0, 0,
                        image.width(), image.height(), true, flags);
 }
+
+void StatusIconLinuxX11::OnWindowMapped(unsigned long xid) {
+  // The window gets mapped by the system tray implementation.  Show() the
+  // window (which will be a no-op) so aura is convinced the window is mapped
+  // and will begin drawing frames.
+  widget_->Show();
+}
+
+void StatusIconLinuxX11::OnWindowUnmapped(unsigned long xid) {}
diff --git a/chrome/browser/ui/views/status_icons/status_icon_linux_x11.h b/chrome/browser/ui/views/status_icons/status_icon_linux_x11.h
index 6c73148dc..c19b8762 100644
--- a/chrome/browser/ui/views/status_icons/status_icon_linux_x11.h
+++ b/chrome/browser/ui/views/status_icons/status_icon_linux_x11.h
@@ -13,6 +13,7 @@
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/menu/menu_runner.h"
 #include "ui/views/linux_ui/status_icon_linux.h"
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host_observer_x11.h"
 #include "ui/views/widget/widget.h"
 
 namespace aura {
@@ -24,7 +25,8 @@
 class StatusIconLinuxX11 : public views::StatusIconLinux,
                            public views::Button,
                            public views::ContextMenuController,
-                           public views::ButtonListener {
+                           public views::ButtonListener,
+                           public views::DesktopWindowTreeHostObserverX11 {
  public:
   StatusIconLinuxX11();
   ~StatusIconLinuxX11() override;
@@ -46,6 +48,10 @@
   // views::Button:
   void PaintButtonContents(gfx::Canvas* canvas) override;
 
+  // views::DesktopWindowTreeHostObserverX11:
+  void OnWindowMapped(unsigned long xid) override;
+  void OnWindowUnmapped(unsigned long xid) override;
+
  private:
   std::unique_ptr<views::Widget> widget_;
 
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index b7b11315..f434f7e7 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -114,7 +114,6 @@
 #include "chrome/browser/ui/webui/app_management/app_management_ui.h"
 #include "chrome/browser/ui/webui/management_ui.h"
 #include "chrome/browser/ui/webui/media_router/media_router_internals_ui.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
 #endif
 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
 #include "chrome/browser/ui/webui/cast/cast_ui.h"
@@ -653,10 +652,6 @@
   if (url.host_piece() == chrome::kChromeUIWebRtcLogsHost)
     return &NewWebUI<WebRtcLogsUI>;
 #if !defined(OS_ANDROID)
-  if (url.host_piece() == chrome::kChromeUIMediaRouterHost &&
-      media_router::MediaRouterEnabled(profile)) {
-    return &NewWebUI<media_router::MediaRouterUI>;
-  }
   if (url.host_piece() == chrome::kChromeUIMediaRouterInternalsHost &&
       media_router::MediaRouterEnabled(profile)) {
     return &NewWebUI<media_router::MediaRouterInternalsUI>;
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.cc
deleted file mode 100644
index 6ca08d6..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.cc
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/trace_event/trace_event.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-#include "chrome/common/url_constants.h"
-#include "components/guest_view/browser/guest_view_base.h"
-#include "components/web_modal/web_contents_modal_dialog_host.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/host_zoom_map.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_details.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "ui/web_dialogs/web_dialog_delegate.h"
-#include "ui/web_dialogs/web_dialog_web_contents_delegate.h"
-#include "url/gurl.h"
-
-using content::LoadCommittedDetails;
-using content::NavigationController;
-using content::WebContents;
-using content::WebUIMessageHandler;
-using ui::WebDialogDelegate;
-
-namespace media_router {
-
-namespace {
-
-constexpr const int kMaxHeight = 2000;
-constexpr const int kMinHeight = 80;
-constexpr const int kWidth = 340;
-
-// WebDialogDelegate that specifies what the Media Router dialog
-// will look like.
-class MediaRouterDialogDelegate : public WebDialogDelegate {
- public:
-  explicit MediaRouterDialogDelegate(
-      const base::WeakPtr<MediaRouterDialogControllerWebUIImpl>& controller)
-      : controller_(controller) {}
-  ~MediaRouterDialogDelegate() override {}
-
-  // WebDialogDelegate implementation.
-  ui::ModalType GetDialogModalType() const override {
-    // Not used, returning dummy value.
-    return ui::MODAL_TYPE_WINDOW;
-  }
-
-  base::string16 GetDialogTitle() const override { return base::string16(); }
-
-  GURL GetDialogContentURL() const override {
-    return GURL(chrome::kChromeUIMediaRouterURL);
-  }
-
-  void GetWebUIMessageHandlers(
-      std::vector<WebUIMessageHandler*>* handlers) const override {
-    // MediaRouterUI adds its own message handlers.
-  }
-
-  void GetDialogSize(gfx::Size* size) const override {
-    DCHECK(size);
-    // We set the dialog width if it's not set, so that the dialog is
-    // center-aligned horizontally when it appears.
-    if (size->width() != kWidth)
-      size->set_width(kWidth);
-    // GetDialogSize() is called when the browser window resizes. We may want to
-    // update the maximum height of the dialog and scale the WebUI to the new
-    // height. |size| is not set because the dialog is auto-resizeable.
-    controller_->UpdateMaxDialogSize();
-  }
-
-  std::string GetDialogArgs() const override { return std::string(); }
-
-  void OnDialogClosed(const std::string& json_retval) override {
-    // We don't delete |this| here because this class is owned
-    // by ConstrainedWebDialogDelegate.
-  }
-
-  void OnCloseContents(WebContents* source, bool* out_close_dialog) override {
-    if (out_close_dialog)
-      *out_close_dialog = true;
-  }
-
-  bool ShouldShowDialogTitle() const override { return false; }
-
- private:
-  base::WeakPtr<MediaRouterDialogControllerWebUIImpl> controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogDelegate);
-};
-
-}  // namespace
-
-#if !defined(TOOLKIT_VIEWS)
-// static
-MediaRouterDialogControllerImplBase*
-MediaRouterDialogControllerImplBase::GetOrCreateForWebContents(
-    content::WebContents* web_contents) {
-  return MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents(
-      web_contents);
-}
-
-// static
-MediaRouterDialogControllerImplBase*
-MediaRouterDialogControllerImplBase::FromWebContents(
-    content::WebContents* web_contents) {
-  return MediaRouterDialogControllerWebUIImpl::FromWebContents(web_contents);
-}
-#endif  // !defined(TOOLKIT_VIEWS)
-
-class MediaRouterDialogControllerWebUIImpl::DialogWebContentsObserver
-    : public content::WebContentsObserver {
- public:
-  DialogWebContentsObserver(
-      WebContents* web_contents,
-      MediaRouterDialogControllerWebUIImpl* dialog_controller)
-      : content::WebContentsObserver(web_contents),
-        dialog_controller_(dialog_controller) {}
-
- private:
-  void WebContentsDestroyed() override {
-    // The dialog is already closed. No need to call Close() again.
-    // NOTE: |this| is deleted after Reset() returns.
-    dialog_controller_->Reset();
-  }
-
-  void NavigationEntryCommitted(
-      const LoadCommittedDetails& load_details) override {
-    dialog_controller_->OnDialogNavigated(load_details);
-  }
-
-  void RenderProcessGone(base::TerminationStatus status) override {
-    // NOTE: |this| is deleted after CloseMediaRouterDialog() returns.
-    dialog_controller_->CloseMediaRouterDialog();
-  }
-
-  MediaRouterDialogControllerWebUIImpl* const dialog_controller_;
-};
-
-// static
-MediaRouterDialogControllerWebUIImpl*
-MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents(
-    content::WebContents* web_contents) {
-  DCHECK(web_contents);
-  // This call does nothing if the controller already exists.
-  CreateForWebContents(web_contents);
-  return FromWebContents(web_contents);
-}
-
-MediaRouterDialogControllerWebUIImpl::~MediaRouterDialogControllerWebUIImpl() {
-  Reset();
-}
-
-WebContents* MediaRouterDialogControllerWebUIImpl::GetMediaRouterDialog()
-    const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  return dialog_observer_.get() ? dialog_observer_->web_contents() : nullptr;
-}
-
-void MediaRouterDialogControllerWebUIImpl::CreateMediaRouterDialog() {
-  MediaRouterDialogControllerImplBase::CreateMediaRouterDialog();
-
-  DCHECK(!dialog_observer_.get());
-
-  base::Time dialog_creation_time = base::Time::Now();
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media_router", "UI", initiator());
-
-  Profile* profile =
-      Profile::FromBrowserContext(initiator()->GetBrowserContext());
-  DCHECK(profile);
-
-  auto web_dialog_delegate = std::make_unique<MediaRouterDialogDelegate>(
-      weak_ptr_factory_.GetWeakPtr());
-  WebDialogDelegate* web_dialog_delegate_ptr = web_dialog_delegate.get();
-
-  // |ShowConstrainedWebDialogWithAutoResize()| will end up creating
-  // ConstrainedWebDialogDelegateViewViews containing a WebContents containing
-  // the MediaRouterUI, using the provided |web_dialog_delegate|. Then, the
-  // view is shown as a modal dialog constrained to the |initiator| WebContents.
-  // The dialog will resize between the given minimum and maximum size bounds
-  // based on the currently rendered contents.
-  // |constrained_delegate| is owned by the parent |views::View|.
-  ConstrainedWebDialogDelegate* constrained_delegate =
-      ShowConstrainedWebDialogWithAutoResize(
-          profile, std::move(web_dialog_delegate), initiator(),
-          gfx::Size(kWidth, kMinHeight), gfx::Size(kWidth, kMaxHeight));
-
-  WebContents* media_router_dialog = constrained_delegate->GetWebContents();
-  TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("media_router", "UI", initiator(),
-                                      "WebContents created",
-                                      media_router_dialog);
-
-  // Clear the zoom level for the dialog so that it is not affected by the page
-  // zoom setting.
-  const GURL dialog_url = web_dialog_delegate_ptr->GetDialogContentURL();
-  content::HostZoomMap::Get(media_router_dialog->GetSiteInstance())
-      ->SetZoomLevelForHostAndScheme(dialog_url.scheme(), dialog_url.host(), 0);
-
-  // |media_router_ui| is created when |constrained_delegate| is created.
-  // For tests, GetWebUI() returns a nullptr.
-  if (media_router_dialog->GetWebUI()) {
-    MediaRouterUI* media_router_ui = static_cast<MediaRouterUI*>(
-        media_router_dialog->GetWebUI()->GetController());
-    DCHECK(media_router_ui);
-    media_router_ui->SetUIInitializationTimer(dialog_creation_time);
-  }
-
-  media_router_dialog_pending_ = true;
-
-  dialog_observer_ =
-      std::make_unique<DialogWebContentsObserver>(media_router_dialog, this);
-}
-
-void MediaRouterDialogControllerWebUIImpl::CloseMediaRouterDialog() {
-  WebContents* media_router_dialog = GetMediaRouterDialog();
-  if (!media_router_dialog)
-    return;
-
-  content::WebUI* web_ui = media_router_dialog->GetWebUI();
-  if (web_ui) {
-    MediaRouterUI* media_router_ui =
-        static_cast<MediaRouterUI*>(web_ui->GetController());
-    if (media_router_ui)
-      media_router_ui->Close();
-  }
-}
-
-bool MediaRouterDialogControllerWebUIImpl::IsShowingMediaRouterDialog() const {
-  return GetMediaRouterDialog() != nullptr;
-}
-
-void MediaRouterDialogControllerWebUIImpl::Reset() {
-  MediaRouterDialogControllerImplBase::Reset();
-  dialog_observer_.reset();
-}
-
-void MediaRouterDialogControllerWebUIImpl::UpdateMaxDialogSize() {
-  WebContents* media_router_dialog = GetMediaRouterDialog();
-  if (!media_router_dialog)
-    return;
-
-  content::WebUI* web_ui = media_router_dialog->GetWebUI();
-  if (web_ui) {
-    MediaRouterUI* media_router_ui =
-        static_cast<MediaRouterUI*>(web_ui->GetController());
-    if (media_router_ui) {
-      Browser* browser = chrome::FindBrowserWithWebContents(initiator());
-      web_modal::WebContentsModalDialogHost* host = nullptr;
-      if (browser)
-        host = browser->window()->GetWebContentsModalDialogHost();
-
-      gfx::Size maxSize = host ? host->GetMaximumDialogSize()
-                               : initiator()->GetContainerBounds().size();
-
-      // The max height of the dialog should be 90% of the browser window
-      // height. The width stays fixed.
-      maxSize.Enlarge(0, -0.1 * maxSize.height());
-      media_router_ui->UpdateMaxDialogHeight(maxSize.height());
-    }
-  }
-}
-
-MediaRouterDialogControllerWebUIImpl::MediaRouterDialogControllerWebUIImpl(
-    WebContents* web_contents)
-    : MediaRouterDialogControllerImplBase(web_contents),
-      media_router_dialog_pending_(false),
-      weak_ptr_factory_(this) {}
-
-void MediaRouterDialogControllerWebUIImpl::OnDialogNavigated(
-    const content::LoadCommittedDetails& details) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  WebContents* media_router_dialog = GetMediaRouterDialog();
-  CHECK(media_router_dialog);
-  ui::PageTransition transition_type = details.entry->GetTransitionType();
-  content::NavigationType nav_type = details.type;
-
-  // New |media_router_dialog| is created.
-  DCHECK(media_router_dialog_pending_);
-  DCHECK(ui::PageTransitionCoreTypeIs(transition_type,
-                                      ui::PAGE_TRANSITION_AUTO_TOPLEVEL) &&
-         nav_type == content::NAVIGATION_TYPE_NEW_PAGE)
-      << "transition_type: " << transition_type << ", "
-      << "nav_type: " << nav_type;
-
-  media_router_dialog_pending_ = false;
-
-  PopulateDialog(media_router_dialog);
-}
-
-void MediaRouterDialogControllerWebUIImpl::PopulateDialog(
-    content::WebContents* media_router_dialog) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  DCHECK(media_router_dialog);
-  if (!initiator() || !media_router_dialog->GetWebUI()) {
-    Reset();
-    return;
-  }
-
-  MediaRouterUI* media_router_ui = static_cast<MediaRouterUI*>(
-      media_router_dialog->GetWebUI()->GetController());
-  DCHECK(media_router_ui);
-
-  InitializeMediaRouterUI(media_router_ui);
-}
-
-WEB_CONTENTS_USER_DATA_KEY_IMPL(MediaRouterDialogControllerWebUIImpl)
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h
deleted file mode 100644
index da50fd9..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_WEBUI_IMPL_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_WEBUI_IMPL_H_
-
-#include <memory>
-
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/ui/media_router/media_router_dialog_controller_impl_base.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "content/public/browser/web_contents_user_data.h"
-
-FORWARD_DECLARE_TEST(MediaRouterActionUnitTest, IconPressedState);
-
-namespace media_router {
-
-// A WebUI implementation of MediaRouterDialogController.
-// This class is not thread safe and must be called on the UI thread.
-class MediaRouterDialogControllerWebUIImpl
-    : public content::WebContentsUserData<MediaRouterDialogControllerWebUIImpl>,
-      public MediaRouterDialogControllerImplBase {
- public:
-  static MediaRouterDialogControllerWebUIImpl* GetOrCreateForWebContents(
-      content::WebContents* web_contents);
-  using content::WebContentsUserData<
-      MediaRouterDialogControllerWebUIImpl>::FromWebContents;
-
-  ~MediaRouterDialogControllerWebUIImpl() override;
-
-  // Returns the media router dialog WebContents.
-  // Returns nullptr if there is no dialog.
-  content::WebContents* GetMediaRouterDialog() const;
-
-  // MediaRouterDialogController:
-  void CreateMediaRouterDialog() override;
-  void CloseMediaRouterDialog() override;
-  bool IsShowingMediaRouterDialog() const override;
-  void Reset() override;
-
-  void UpdateMaxDialogSize();
-
- private:
-  class DialogWebContentsObserver;
-  friend class content::WebContentsUserData<
-      MediaRouterDialogControllerWebUIImpl>;
-  FRIEND_TEST_ALL_PREFIXES(::MediaRouterActionUnitTest, IconPressedState);
-
-  // Use MediaRouterDialogControllerWebUIImpl::CreateForWebContents() to create
-  // an instance.
-  explicit MediaRouterDialogControllerWebUIImpl(
-      content::WebContents* web_contents);
-
-  // Invoked when the dialog WebContents has navigated.
-  void OnDialogNavigated(const content::LoadCommittedDetails& details);
-
-  void PopulateDialog(content::WebContents* media_router_dialog);
-
-  std::unique_ptr<DialogWebContentsObserver> dialog_observer_;
-
-  // True if the controller is waiting for a new media router dialog to be
-  // created.
-  bool media_router_dialog_pending_;
-
-  base::WeakPtrFactory<MediaRouterDialogControllerWebUIImpl> weak_ptr_factory_;
-
-  WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerWebUIImpl);
-};
-
-}  // namespace media_router
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_WEBUI_IMPL_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_browsertest.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_browsertest.cc
deleted file mode 100644
index 85a1ce5..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_browsertest.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/macros.h"
-#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "content/public/common/url_constants.h"
-#include "content/public/test/browser_test_utils.h"
-#include "content/public/test/test_navigation_observer.h"
-
-using content::WebContents;
-using content::TestNavigationObserver;
-
-namespace media_router {
-
-class MediaRouterDialogControllerWebUIBrowserTest
-    : public InProcessBrowserTest {
- public:
-  MediaRouterDialogControllerWebUIBrowserTest()
-      : dialog_controller_(nullptr),
-        initiator_(nullptr),
-        media_router_dialog_(nullptr) {}
-  ~MediaRouterDialogControllerWebUIBrowserTest() override {}
-
- protected:
-  void SetUpOnMainThread() override {
-    // Start with one window with one tab.
-    EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
-    EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-    initiator_ = browser()->tab_strip_model()->GetActiveWebContents();
-    ASSERT_TRUE(initiator_);
-    MediaRouterDialogControllerWebUIImpl::CreateForWebContents(initiator_);
-    dialog_controller_ =
-        MediaRouterDialogControllerWebUIImpl::FromWebContents(initiator_);
-    ASSERT_TRUE(dialog_controller_);
-
-    // Get the media router dialog for the initiator.
-    dialog_controller_->ShowMediaRouterDialog();
-    media_router_dialog_ = dialog_controller_->GetMediaRouterDialog();
-    ASSERT_TRUE(media_router_dialog_);
-  }
-
-  MediaRouterDialogControllerWebUIImpl* dialog_controller_;
-  WebContents* initiator_;
-  WebContents* media_router_dialog_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerWebUIBrowserTest);
-};
-
-IN_PROC_BROWSER_TEST_F(MediaRouterDialogControllerWebUIBrowserTest,
-                       ShowDialog) {
-  // Waits for the dialog to initialize.
-  TestNavigationObserver nav_observer(media_router_dialog_);
-  nav_observer.Wait();
-
-  // New media router dialog is a constrained window, so the number of
-  // tabs is still 1.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-  EXPECT_NE(initiator_, media_router_dialog_);
-  EXPECT_EQ(media_router_dialog_, dialog_controller_->GetMediaRouterDialog());
-
-  content::WebUI* web_ui = media_router_dialog_->GetWebUI();
-  ASSERT_TRUE(web_ui);
-  MediaRouterUI* media_router_ui =
-      static_cast<MediaRouterUI*>(web_ui->GetController());
-  ASSERT_TRUE(media_router_ui);
-}
-
-IN_PROC_BROWSER_TEST_F(MediaRouterDialogControllerWebUIBrowserTest, Navigate) {
-  {
-    // Wait for the dialog to initialize.
-    TestNavigationObserver nav_observer(media_router_dialog_);
-    nav_observer.Wait();
-  }
-
-  // New media router dialog is a constrained window, so the number of
-  // tabs is still 1.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-  EXPECT_EQ(media_router_dialog_, dialog_controller_->GetMediaRouterDialog());
-
-  {
-    // Navigate to another URL and block until the dialog WebContents has been
-    // destroyed.
-    content::WebContentsDestroyedWatcher dialog_watcher(media_router_dialog_);
-    ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
-    dialog_watcher.Wait();
-  }
-
-  // Verify that dialog has been removed.
-  EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
-
-  // Open the dialog again.
-  EXPECT_TRUE(dialog_controller_->ShowMediaRouterDialog());
-  media_router_dialog_ = dialog_controller_->GetMediaRouterDialog();
-  ASSERT_TRUE(media_router_dialog_);
-
-  {
-    // Wait for the dialog to initialize.
-    TestNavigationObserver nav_observer(media_router_dialog_);
-    nav_observer.Wait();
-
-    // Refresh and block until dialog WebContents has been destroyed.
-    content::WebContentsDestroyedWatcher dialog_watcher(media_router_dialog_);
-    chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB);
-    dialog_watcher.Wait();
-  }
-
-  // Verify that dialog has been removed again.
-  EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
-}
-
-IN_PROC_BROWSER_TEST_F(MediaRouterDialogControllerWebUIBrowserTest,
-                       RenderProcessHost) {
-  // New media router dialog is a constrained window, so the number of
-  // tabs is still 1.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-  EXPECT_EQ(media_router_dialog_, dialog_controller_->GetMediaRouterDialog());
-
-  // Crash initiator_'s renderer process.
-  content::WebContentsDestroyedWatcher dialog_watcher(media_router_dialog_);
-  content::RenderProcessHostWatcher rph_watcher(
-      initiator_, content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
-
-  ui_test_utils::NavigateToURL(browser(), GURL(content::kChromeUICrashURL));
-
-  // Blocks until the dialog WebContents has been destroyed.
-  rph_watcher.Wait();
-  dialog_watcher.Wait();
-
-  // Entry has been removed.
-  EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_unittest.cc
deleted file mode 100644
index 57907741..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_unittest.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <vector>
-
-#include "base/bind.h"
-#include "base/macros.h"
-#include "chrome/browser/media/router/test/test_helper.h"
-#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/media_router/media_router_ui_service.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/toolbar/mock_media_router_action_controller.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-#include "chrome/browser/ui/webui/media_router/media_router_web_ui_test.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-using blink::mojom::PresentationInfo;
-using content::WebContents;
-
-namespace media_router {
-
-class MediaRouterDialogControllerWebUIImplTest : public MediaRouterWebUITest {
- public:
-  MediaRouterDialogControllerWebUIImplTest() : MediaRouterWebUITest(true) {}
-  ~MediaRouterDialogControllerWebUIImplTest() override {}
-
-  void OpenMediaRouterDialog();
-
-  MOCK_METHOD3(PresentationSuccessCallback,
-               void(const blink::mojom::PresentationInfo&,
-                    mojom::RoutePresentationConnectionPtr,
-                    const MediaRoute&));
-  MOCK_METHOD1(PresentationErrorCallback,
-               void(const blink::mojom::PresentationError& error));
-
- protected:
-  WebContents* initiator_ = nullptr;
-  MediaRouterDialogControllerWebUIImpl* dialog_controller_ = nullptr;
-  WebContents* media_router_dialog_ = nullptr;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerWebUIImplTest);
-};
-
-void MediaRouterDialogControllerWebUIImplTest::OpenMediaRouterDialog() {
-  // Start with one window with one tab.
-  EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
-  EXPECT_EQ(0, browser()->tab_strip_model()->count());
-  chrome::NewTab(browser());
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-  // Create a reference to initiator contents.
-  initiator_ = browser()->tab_strip_model()->GetActiveWebContents();
-
-  dialog_controller_ =
-      MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents(
-          initiator_);
-  ASSERT_TRUE(dialog_controller_);
-
-  // Get the media router dialog for the initiator.
-  dialog_controller_->ShowMediaRouterDialog();
-  media_router_dialog_ = dialog_controller_->GetMediaRouterDialog();
-  ASSERT_TRUE(media_router_dialog_);
-
-  // New media router dialog is a constrained window, so the number of
-  // tabs is still 1.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-  EXPECT_NE(initiator_, media_router_dialog_);
-  EXPECT_EQ(media_router_dialog_, dialog_controller_->GetMediaRouterDialog());
-}
-
-// Create/Get a media router dialog for initiator.
-TEST_F(MediaRouterDialogControllerWebUIImplTest, ShowMediaRouterDialog) {
-  OpenMediaRouterDialog();
-
-  // Show media router dialog for the same initiator again.
-  dialog_controller_->ShowMediaRouterDialog();
-  WebContents* same_media_router_dialog =
-      dialog_controller_->GetMediaRouterDialog();
-
-  // Tab count remains the same.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-  // Media router dialog already exists. Calling |ShowMediaRouterDialog| again
-  // should not have created a new media router dialog.
-  EXPECT_EQ(media_router_dialog_, same_media_router_dialog);
-}
-
-// Tests multiple media router dialogs exist in the same browser for different
-// initiators. If a dialog already exists for an initiator, that initiator
-// gets focused.
-TEST_F(MediaRouterDialogControllerWebUIImplTest, MultipleMediaRouterDialogs) {
-  // Let's start with one window and two tabs.
-  EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
-  TabStripModel* tab_strip_model = browser()->tab_strip_model();
-  ASSERT_TRUE(tab_strip_model);
-
-  EXPECT_EQ(0, tab_strip_model->count());
-
-  // Create some new initiators.
-  chrome::NewTab(browser());
-  WebContents* web_contents_1 = tab_strip_model->GetActiveWebContents();
-  ASSERT_TRUE(web_contents_1);
-
-  chrome::NewTab(browser());
-  WebContents* web_contents_2 = tab_strip_model->GetActiveWebContents();
-  ASSERT_TRUE(web_contents_2);
-  EXPECT_EQ(2, tab_strip_model->count());
-
-  // Create media router dialog for |web_contents_1|.
-  MediaRouterDialogControllerWebUIImpl* dialog_controller_1 =
-      MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents(
-          web_contents_1);
-  ASSERT_TRUE(dialog_controller_1);
-
-  dialog_controller_1->ShowMediaRouterDialog();
-  WebContents* media_router_dialog_1 =
-      dialog_controller_1->GetMediaRouterDialog();
-
-  ASSERT_TRUE(media_router_dialog_1);
-
-  EXPECT_NE(web_contents_1, media_router_dialog_1);
-  EXPECT_EQ(2, tab_strip_model->count());
-
-  // Create media router dialog for |web_contents_2|.
-  MediaRouterDialogControllerWebUIImpl* dialog_controller_2 =
-      MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents(
-          web_contents_2);
-  ASSERT_TRUE(dialog_controller_2);
-
-  dialog_controller_2->ShowMediaRouterDialog();
-  WebContents* media_router_dialog_2 =
-      dialog_controller_2->GetMediaRouterDialog();
-  ASSERT_TRUE(media_router_dialog_2);
-
-  EXPECT_NE(web_contents_2, media_router_dialog_2);
-  EXPECT_NE(media_router_dialog_1, media_router_dialog_2);
-
-  // 2 initiators and 2 dialogs exist in the same browser. The dialogs are
-  // constrained in their respective initiators.
-  EXPECT_EQ(2, tab_strip_model->count());
-
-  int tab_1_index = tab_strip_model->GetIndexOfWebContents(web_contents_1);
-  int tab_2_index = tab_strip_model->GetIndexOfWebContents(web_contents_2);
-  int media_router_dialog_1_index =
-      tab_strip_model->GetIndexOfWebContents(media_router_dialog_1);
-  int media_router_dialog_2_index =
-      tab_strip_model->GetIndexOfWebContents(media_router_dialog_2);
-
-  // Constrained dialogs are not in the TabStripModel.
-  EXPECT_EQ(-1, media_router_dialog_1_index);
-  EXPECT_EQ(-1, media_router_dialog_2_index);
-
-  // Since |media_router_dialog_2_index| was the most recently created dialog,
-  // its initiator should have focus.
-  EXPECT_EQ(tab_2_index, tab_strip_model->active_index());
-
-  // When we get the media router dialog for |web_contents_1|,
-  // |media_router_dialog_1| is activated and focused.
-  dialog_controller_1->ShowMediaRouterDialog();
-  EXPECT_EQ(tab_1_index, tab_strip_model->active_index());
-
-  // When we get the media router dialog for |web_contents_2|,
-  // |media_router_dialog_2| is activated and focused.
-  dialog_controller_2->ShowMediaRouterDialog();
-  EXPECT_EQ(tab_2_index, tab_strip_model->active_index());
-}
-
-TEST_F(MediaRouterDialogControllerWebUIImplTest, CloseDialogFromWebUI) {
-  OpenMediaRouterDialog();
-
-  // Close the dialog.
-  content::WebContentsDestroyedWatcher watcher(media_router_dialog_);
-
-  content::WebUI* web_ui = media_router_dialog_->GetWebUI();
-  ASSERT_TRUE(web_ui);
-  MediaRouterUI* media_router_ui =
-      static_cast<MediaRouterUI*>(web_ui->GetController());
-  ASSERT_TRUE(media_router_ui);
-  media_router_ui->Close();
-
-  // Blocks until the media router dialog WebContents has been destroyed.
-  watcher.Wait();
-
-  // Still 1 tab in the browser.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-  // Entry has been removed.
-  EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
-
-  // Show the media router dialog again, creating a new one.
-  dialog_controller_->ShowMediaRouterDialog();
-  WebContents* media_router_dialog_2 =
-      dialog_controller_->GetMediaRouterDialog();
-
-  // Still 1 tab in the browser.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-  EXPECT_EQ(media_router_dialog_2, dialog_controller_->GetMediaRouterDialog());
-}
-
-TEST_F(MediaRouterDialogControllerWebUIImplTest,
-       CloseDialogFromDialogController) {
-  OpenMediaRouterDialog();
-
-  // Close the dialog.
-  content::WebContentsDestroyedWatcher watcher(media_router_dialog_);
-
-  dialog_controller_->HideMediaRouterDialog();
-
-  // Blocks until the media router dialog WebContents has been destroyed.
-  watcher.Wait();
-
-  // Still 1 tab in the browser.
-  EXPECT_EQ(1, browser()->tab_strip_model()->count());
-
-  // Entry has been removed.
-  EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
-}
-
-TEST_F(MediaRouterDialogControllerWebUIImplTest, CloseInitiator) {
-  OpenMediaRouterDialog();
-
-  // Close the initiator. This should also close the dialog WebContents.
-  content::WebContentsDestroyedWatcher initiator_watcher(initiator_);
-  content::WebContentsDestroyedWatcher dialog_watcher(media_router_dialog_);
-
-  int initiator_index =
-      browser()->tab_strip_model()->GetIndexOfWebContents(initiator_);
-  EXPECT_NE(-1, initiator_index);
-  EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt(
-      initiator_index, TabStripModel::CLOSE_NONE));
-
-  // Blocks until the initiator WebContents has been destroyed.
-  initiator_watcher.Wait();
-  dialog_watcher.Wait();
-
-  // No tabs in the browser.
-  EXPECT_EQ(0, browser()->tab_strip_model()->count());
-
-  // The dialog controller is deleted when the WebContents is closed/destroyed.
-}
-
-TEST_F(MediaRouterDialogControllerWebUIImplTest, NotifyActionController) {
-  MockMediaRouterActionController* action_controller =
-      static_cast<MockMediaRouterActionController*>(
-          MediaRouterUIService::Get(browser()->profile())->action_controller());
-  ASSERT_TRUE(action_controller);
-
-  EXPECT_CALL(*action_controller, OnDialogShown());
-  OpenMediaRouterDialog();
-  EXPECT_CALL(*action_controller, OnDialogHidden());
-  dialog_controller_->HideMediaRouterDialog();
-
-  EXPECT_CALL(*action_controller, OnDialogShown());
-  EXPECT_TRUE(dialog_controller_->ShowMediaRouterDialogForPresentation(
-      std::make_unique<StartPresentationContext>(
-          content::PresentationRequest(
-              {1, 2}, {GURL("http://test.com"), GURL("http://test2.com")},
-              url::Origin::Create(GURL("http://example.com"))),
-          base::BindOnce(&MediaRouterDialogControllerWebUIImplTest::
-                             PresentationSuccessCallback,
-                         base::Unretained(this)),
-          base::BindOnce(&MediaRouterDialogControllerWebUIImplTest::
-                             PresentationErrorCallback,
-                         base::Unretained(this)))));
-
-  // When |dialog_controller_| is destroyed with its dialog open,
-  // |action_controller| should be notified.
-  EXPECT_CALL(*action_controller, OnDialogHidden());
-  EXPECT_CALL(*this, PresentationErrorCallback(testing::_));
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc b/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc
deleted file mode 100644
index ab626b1c..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h"
-
-#include "base/stl_util.h"
-#include "chrome/browser/ui/webui/localized_string.h"
-#include "chrome/grit/generated_resources.h"
-#include "components/strings/grit/components_strings.h"
-#include "content/public/browser/web_ui_data_source.h"
-
-namespace {
-
-// Note that media_router.html contains a <script> tag which imports a script
-// of the following name. These names must be kept in sync.
-const char kLocalizedStringsFile[] = "strings.js";
-
-void AddMediaRouterStrings(content::WebUIDataSource* html_source) {
-  static constexpr LocalizedString kLocalizedStrings[] = {
-      {"mediaRouterTitle", IDS_MEDIA_ROUTER_TITLE},
-      {"learnMoreText", IDS_LEARN_MORE},
-      {"backButtonTitle", IDS_MEDIA_ROUTER_BACK_BUTTON_TITLE},
-      {"closeButtonTitle", IDS_MEDIA_ROUTER_CLOSE_BUTTON_TITLE},
-      {"searchButtonTitle", IDS_MEDIA_ROUTER_SEARCH_BUTTON_TITLE},
-      {"viewCastModeListButtonTitle",
-       IDS_MEDIA_ROUTER_VIEW_CAST_MODE_LIST_BUTTON_TITLE},
-      {"viewDeviceListButtonTitle",
-       IDS_MEDIA_ROUTER_VIEW_DEVICE_LIST_BUTTON_TITLE},
-  };
-  AddLocalizedStringsBulk(html_source, kLocalizedStrings,
-                          base::size(kLocalizedStrings));
-}
-
-void AddRouteDetailsStrings(content::WebUIDataSource* html_source) {
-  static constexpr LocalizedString kLocalizedStrings[] = {
-      {"castingActivityStatus", IDS_MEDIA_ROUTER_CASTING_ACTIVITY_STATUS},
-      {"stopCastingButtonText", IDS_MEDIA_ROUTER_STOP_CASTING_BUTTON},
-      {"startCastingButtonText", IDS_MEDIA_ROUTER_START_CASTING_BUTTON},
-      {"playTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_PLAY_TITLE},
-      {"pauseTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_PAUSE_TITLE},
-      {"muteTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_MUTE_TITLE},
-      {"unmuteTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_UNMUTE_TITLE},
-      {"seekTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_SEEK_TITLE},
-      {"volumeTitle", IDS_MEDIA_ROUTER_ROUTE_DETAILS_VOLUME_TITLE},
-      {"currentTimeLabel", IDS_MEDIA_ROUTER_ROUTE_DETAILS_CURRENT_TIME_LABEL},
-      {"durationLabel", IDS_MEDIA_ROUTER_ROUTE_DETAILS_DURATION_LABEL},
-      {"hangoutsLocalPresentTitle",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_HANGOUTS_LOCAL_PRESENT_TITLE},
-      {"hangoutsLocalPresentSubtitle",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_HANGOUTS_LOCAL_PRESENT_SUBTITLE},
-      {"alwaysUseMirroringTitle",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_ALWAYS_USE_MIRRORING_TITLE},
-      {"fullscreenVideosDropdownTitle",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_DROPDOWN_TITLE},
-      {"fullscreenVideosRemoteScreen",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_REMOTE_SCREEN},
-      {"fullscreenVideosBothScreens",
-       IDS_MEDIA_ROUTER_ROUTE_DETAILS_FULLSCREEN_VIDEOS_BOTH_SCREENS},
-  };
-  AddLocalizedStringsBulk(html_source, kLocalizedStrings,
-                          base::size(kLocalizedStrings));
-}
-
-void AddIssuesStrings(content::WebUIDataSource* html_source) {
-  static constexpr LocalizedString kLocalizedStrings[] = {
-      {"dismissButton", IDS_MEDIA_ROUTER_DISMISS_BUTTON},
-      {"issueHeaderText", IDS_MEDIA_ROUTER_ISSUE_HEADER},
-  };
-  AddLocalizedStringsBulk(html_source, kLocalizedStrings,
-                          base::size(kLocalizedStrings));
-}
-
-void AddMediaRouterContainerStrings(content::WebUIDataSource* html_source) {
-  static constexpr LocalizedString kLocalizedStrings[] = {
-      {"castLocalMediaSubheadingText",
-       IDS_MEDIA_ROUTER_CAST_LOCAL_MEDIA_SUBHEADING},
-      {"castLocalMediaSelectedFileTitle",
-       IDS_MEDIA_ROUTER_CAST_LOCAL_MEDIA_TITLE},
-      {"firstRunFlowButtonText", IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_BUTTON},
-      {"firstRunFlowText", IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TEXT},
-      {"firstRunFlowTitle", IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_TITLE},
-      {"firstRunFlowCloudPrefText",
-       IDS_MEDIA_ROUTER_FIRST_RUN_FLOW_CLOUD_PREF_TEXT},
-      {"autoCastMode", IDS_MEDIA_ROUTER_AUTO_CAST_MODE},
-      {"destinationMissingText", IDS_MEDIA_ROUTER_DESTINATION_MISSING},
-      {"searchInputLabel", IDS_MEDIA_ROUTER_SEARCH_LABEL},
-      {"searchNoMatchesText", IDS_MEDIA_ROUTER_SEARCH_NO_MATCHES},
-      {"selectCastModeHeaderText", IDS_MEDIA_ROUTER_SELECT_CAST_MODE_HEADER},
-      {"shareYourScreenSubheadingText",
-       IDS_MEDIA_ROUTER_SHARE_YOUR_SCREEN_SUBHEADING},
-  };
-  AddLocalizedStringsBulk(html_source, kLocalizedStrings,
-                          base::size(kLocalizedStrings));
-}
-
-}  // namespace
-
-namespace media_router {
-
-void AddLocalizedStrings(content::WebUIDataSource* html_source) {
-  AddMediaRouterStrings(html_source);
-  AddRouteDetailsStrings(html_source);
-  AddIssuesStrings(html_source);
-  AddMediaRouterContainerStrings(html_source);
-  html_source->SetJsonPath(kLocalizedStringsFile);
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h b/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h
deleted file mode 100644
index e700a0e..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_LOCALIZED_STRINGS_PROVIDER_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_LOCALIZED_STRINGS_PROVIDER_H_
-
-namespace content {
-class WebUIDataSource;
-}
-
-namespace media_router {
-
-// Adds the strings needed by Media Router to |html_source|. This function
-// causes |html_source| to expose a strings.js file from its source which
-// contains a mapping from string's name to its translated value.
-void AddLocalizedStrings(content::WebUIDataSource* html_source);
-
-}  // namespace media_router
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_LOCALIZED_STRINGS_PROVIDER_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_resources_provider.cc b/chrome/browser/ui/webui/media_router/media_router_resources_provider.cc
deleted file mode 100644
index bd29d23..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_resources_provider.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h"
-
-#include "chrome/grit/browser_resources.h"
-#include "content/public/browser/web_ui_data_source.h"
-
-namespace {
-
-void AddMainWebResources(content::WebUIDataSource* html_source) {
-  html_source->AddResourcePath("media_router.js", IDR_MEDIA_ROUTER_JS);
-  html_source->AddResourcePath("media_router_common.css",
-                               IDR_MEDIA_ROUTER_COMMON_CSS);
-  html_source->AddResourcePath("media_router.css",
-                               IDR_MEDIA_ROUTER_CSS);
-  html_source->AddResourcePath("media_router_data.js",
-                               IDR_MEDIA_ROUTER_DATA_JS);
-  html_source->AddResourcePath("media_router_ui_interface.js",
-                               IDR_MEDIA_ROUTER_UI_INTERFACE_JS);
-}
-
-void AddPolymerElements(content::WebUIDataSource* html_source) {
-  html_source->AddResourcePath(
-      "icons/media_router_icons.html",
-      IDR_MEDIA_ROUTER_ICONS_HTML);
-  html_source->AddResourcePath(
-      "elements/issue_banner/issue_banner.css",
-      IDR_ISSUE_BANNER_CSS);
-  html_source->AddResourcePath(
-      "elements/issue_banner/issue_banner.html",
-      IDR_ISSUE_BANNER_HTML);
-  html_source->AddResourcePath(
-      "elements/issue_banner/issue_banner.js",
-      IDR_ISSUE_BANNER_JS);
-  html_source->AddResourcePath(
-      "elements/media_router_container/media_router_container.css",
-      IDR_MEDIA_ROUTER_CONTAINER_CSS);
-  html_source->AddResourcePath(
-      "elements/media_router_container/media_router_container.html",
-      IDR_MEDIA_ROUTER_CONTAINER_HTML);
-  html_source->AddResourcePath(
-      "elements/media_router_container/media_router_container.js",
-      IDR_MEDIA_ROUTER_CONTAINER_JS);
-  html_source->AddResourcePath(
-      "elements/media_router_header/media_router_header.css",
-      IDR_MEDIA_ROUTER_HEADER_CSS);
-  html_source->AddResourcePath(
-      "elements/media_router_header/media_router_header.html",
-      IDR_MEDIA_ROUTER_HEADER_HTML);
-  html_source->AddResourcePath(
-      "elements/media_router_header/media_router_header.js",
-      IDR_MEDIA_ROUTER_HEADER_JS);
-  html_source->AddResourcePath(
-      "elements/media_router_search_highlighter/"
-      "media_router_search_highlighter.css",
-      IDR_MEDIA_ROUTER_SEARCH_HIGHLIGHTER_CSS);
-  html_source->AddResourcePath(
-      "elements/media_router_search_highlighter/"
-      "media_router_search_highlighter.html",
-      IDR_MEDIA_ROUTER_SEARCH_HIGHLIGHTER_HTML);
-  html_source->AddResourcePath(
-      "elements/media_router_search_highlighter/"
-      "media_router_search_highlighter.js",
-      IDR_MEDIA_ROUTER_SEARCH_HIGHLIGHTER_JS);
-  html_source->AddResourcePath("elements/route_controls/route_controls.css",
-                               IDR_ROUTE_CONTROLS_CSS);
-  html_source->AddResourcePath("elements/route_controls/route_controls.html",
-                               IDR_ROUTE_CONTROLS_HTML);
-  html_source->AddResourcePath("elements/route_controls/route_controls.js",
-                               IDR_ROUTE_CONTROLS_JS);
-  html_source->AddResourcePath("elements/route_details/route_details.css",
-                               IDR_ROUTE_DETAILS_CSS);
-  html_source->AddResourcePath(
-      "elements/route_details/route_details.html",
-      IDR_ROUTE_DETAILS_HTML);
-  html_source->AddResourcePath(
-      "elements/route_details/route_details.js",
-      IDR_ROUTE_DETAILS_JS);
-  html_source->AddResourcePath(
-      "elements/media_router_container/pseudo_sink_search_state.js",
-      IDR_PSEUDO_SINK_SEARCH_STATE_JS);
-}
-
-}  // namespace
-
-namespace media_router {
-
-void AddMediaRouterUIResources(content::WebUIDataSource* html_source) {
-  AddMainWebResources(html_source);
-  AddPolymerElements(html_source);
-  html_source->SetDefaultResource(IDR_MEDIA_ROUTER_HTML);
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_resources_provider.h b/chrome/browser/ui/webui/media_router/media_router_resources_provider.h
deleted file mode 100644
index 1c62084..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_resources_provider.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_RESOURCES_PROVIDER_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_RESOURCES_PROVIDER_H_
-
-namespace content {
-class WebUIDataSource;
-}
-
-namespace media_router {
-
-// Adds the resources needed by Media Router to |html_source|.
-void AddMediaRouterUIResources(content::WebUIDataSource* html_source);
-
-}  // namespace media_router
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_RESOURCES_PROVIDER_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc
deleted file mode 100644
index 04bf7f8c..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_ui.cc
+++ /dev/null
@@ -1,411 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/guid.h"
-#include "base/macros.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/trace_event/trace_event.h"
-#include "build/build_config.h"
-#include "chrome/browser/media/router/issue_manager.h"
-#include "chrome/browser/media/router/media_router.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/media_router_metrics.h"
-#include "chrome/browser/media/router/media_sinks_observer.h"
-#include "chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_navigator.h"
-#include "chrome/browser/ui/browser_navigator_params.h"
-#include "chrome/browser/ui/browser_tabstrip.h"
-#include "chrome/browser/ui/media_router/media_router_ui_helper.h"
-#include "chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h"
-#include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h"
-#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
-#include "chrome/common/chrome_features.h"
-#include "chrome/common/media_router/issue.h"
-#include "chrome/common/media_router/media_route.h"
-#include "chrome/common/media_router/media_sink.h"
-#include "chrome/common/media_router/media_source.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/grit/generated_resources.h"
-#include "components/prefs/pref_service.h"
-#include "components/prefs/scoped_user_pref_update.h"
-#include "content/public/browser/navigation_handle.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_ui.h"
-#include "content/public/browser/web_ui_data_source.h"
-#include "content/public/common/fullscreen_video_element.mojom.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/common/constants.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/display/display.h"
-#include "ui/web_dialogs/web_dialog_delegate.h"
-#include "url/origin.h"
-
-namespace media_router {
-
-MediaRouterUI::MediaRouterUI(content::WebUI* web_ui)
-    : ConstrainedWebDialogUI(web_ui), weak_factory_(this) {
-  auto handler = std::make_unique<MediaRouterWebUIMessageHandler>(this);
-  handler_ = handler.get();
-
-  // Create a WebUIDataSource containing the chrome://media-router page's
-  // content.
-  std::unique_ptr<content::WebUIDataSource> html_source(
-      content::WebUIDataSource::Create(chrome::kChromeUIMediaRouterHost));
-
-  AddLocalizedStrings(html_source.get());
-  AddMediaRouterUIResources(html_source.get());
-  // Ownership of |html_source| is transferred to the BrowserContext.
-  content::WebUIDataSource::Add(Profile::FromWebUI(web_ui),
-                                html_source.release());
-
-  web_ui->AddMessageHandler(std::move(handler));
-}
-
-MediaRouterUI::~MediaRouterUI() = default;
-
-void MediaRouterUI::Close() {
-  ConstrainedWebDialogDelegate* delegate = GetConstrainedDelegate();
-  if (delegate) {
-    delegate->GetWebDialogDelegate()->OnDialogClosed(std::string());
-    delegate->OnDialogCloseFromWebUI();
-  }
-}
-
-void MediaRouterUI::OnUIInitialized() {
-  TRACE_EVENT_NESTABLE_ASYNC_END0("media_router", "UI", initiator());
-
-  ui_initialized_ = true;
-
-  // TODO(imcheng): We should be able to instantiate |issue_observer_| during
-  // InitCommon by storing an initial Issue in this class.
-  // Register for Issue updates.
-  StartObservingIssues();
-}
-
-bool MediaRouterUI::ConnectRoute(const MediaSink::Id& sink_id,
-                                 const MediaRoute::Id& route_id) {
-  base::Optional<RouteParameters> params =
-      GetRouteParameters(sink_id, MediaCastMode::PRESENTATION);
-  if (!params) {
-    SendIssueForUnableToCast(MediaCastMode::PRESENTATION, sink_id);
-    return false;
-  }
-  GetIssueManager()->ClearNonBlockingIssues();
-  GetMediaRouter()->ConnectRouteByRouteId(
-      params->source_id, route_id, params->origin, initiator(),
-      base::BindOnce(&MediaRouterUIBase::RunRouteResponseCallbacks,
-                     std::move(params->presentation_callback),
-                     std::move(params->route_result_callbacks)),
-      params->timeout, params->incognito);
-  return true;
-}
-
-void MediaRouterUI::SearchSinksAndCreateRoute(
-    const MediaSink::Id& sink_id,
-    const std::string& search_criteria,
-    const std::string& domain,
-    MediaCastMode cast_mode) {
-  std::unique_ptr<MediaSource> source =
-      query_result_manager()->GetSourceForCastModeAndSink(cast_mode, sink_id);
-  const std::string source_id = source ? source->id() : "";
-
-  // The CreateRoute() part of the function is accomplished in the callback
-  // OnSearchSinkResponseReceived().
-  GetMediaRouter()->SearchSinks(
-      sink_id, source_id, search_criteria, domain,
-      base::BindRepeating(&MediaRouterUI::OnSearchSinkResponseReceived,
-                          weak_factory_.GetWeakPtr(), cast_mode));
-}
-
-bool MediaRouterUI::UserSelectedTabMirroringForCurrentOrigin() const {
-  const base::ListValue* origins =
-      Profile::FromWebUI(web_ui())->GetPrefs()->GetList(
-          ::prefs::kMediaRouterTabMirroringSources);
-  return origins->Find(base::Value(GetSerializedInitiatorOrigin())) !=
-         origins->end();
-}
-
-void MediaRouterUI::RecordCastModeSelection(MediaCastMode cast_mode) {
-  ListPrefUpdate update(Profile::FromWebUI(web_ui())->GetPrefs(),
-                        ::prefs::kMediaRouterTabMirroringSources);
-
-  switch (cast_mode) {
-    case MediaCastMode::PRESENTATION:
-      update->Remove(base::Value(GetSerializedInitiatorOrigin()), nullptr);
-      break;
-    case MediaCastMode::TAB_MIRROR:
-      update->AppendIfNotPresent(
-          std::make_unique<base::Value>(GetSerializedInitiatorOrigin()));
-      break;
-    case MediaCastMode::DESKTOP_MIRROR:
-      // Desktop mirroring isn't domain-specific, so we don't record the
-      // selection.
-      break;
-    case MediaCastMode::LOCAL_FILE:
-      // Local media isn't domain-specific, so we don't record the selection.
-      break;
-    default:
-      NOTREACHED();
-      break;
-  }
-}
-
-std::string MediaRouterUI::GetPresentationRequestSourceName() const {
-  GURL gurl = GetFrameURL();
-  return gurl.SchemeIs(extensions::kExtensionScheme)
-             ? GetExtensionName(gurl, extensions::ExtensionRegistry::Get(
-                                          Profile::FromWebUI(web_ui())))
-             : GetHostFromURL(gurl);
-}
-
-const std::set<MediaCastMode>& MediaRouterUI::GetCastModes() const {
-  return cast_modes_;
-}
-
-void MediaRouterUI::SetUIInitializationTimer(const base::Time& start_time) {
-  DCHECK(!start_time.is_null());
-  start_time_ = start_time;
-}
-
-void MediaRouterUI::OnUIInitiallyLoaded() {
-  if (!start_time_.is_null()) {
-    MediaRouterMetrics::RecordMediaRouterDialogPaint(base::Time::Now() -
-                                                     start_time_);
-  }
-}
-
-void MediaRouterUI::OnUIInitialDataReceived() {
-  if (!start_time_.is_null()) {
-    MediaRouterMetrics::RecordMediaRouterDialogLoaded(base::Time::Now() -
-                                                      start_time_);
-    start_time_ = base::Time();
-  }
-}
-
-void MediaRouterUI::UpdateMaxDialogHeight(int height) {
-  if (ui_initialized_) {
-    handler_->UpdateMaxDialogHeight(height);
-  }
-}
-
-MediaRouteController* MediaRouterUI::GetMediaRouteController() const {
-  return route_controller_observer_
-             ? route_controller_observer_->controller().get()
-             : nullptr;
-}
-
-void MediaRouterUI::OnMediaControllerUIAvailable(
-    const MediaRoute::Id& route_id) {
-  scoped_refptr<MediaRouteController> controller =
-      GetMediaRouter()->GetRouteController(route_id);
-  if (!controller) {
-    DVLOG(1) << "Requested a route controller with an invalid route ID.";
-    return;
-  }
-  DVLOG_IF(1, route_controller_observer_)
-      << "Route controller observer unexpectedly exists.";
-  route_controller_observer_ =
-      std::make_unique<UIMediaRouteControllerObserver>(this, controller);
-}
-
-void MediaRouterUI::OnMediaControllerUIClosed() {
-  route_controller_observer_.reset();
-}
-
-void MediaRouterUI::InitForTest(
-    MediaRouter* router,
-    content::WebContents* initiator,
-    MediaRouterWebUIMessageHandler* handler,
-    std::unique_ptr<StartPresentationContext> context,
-    std::unique_ptr<MediaRouterFileDialog> file_dialog) {
-  handler_ = handler;
-  set_start_presentation_context_for_test(std::move(context));
-  InitForTest(std::move(file_dialog));
-  InitCommon(initiator);
-  if (start_presentation_context()) {
-    OnDefaultPresentationChanged(
-        start_presentation_context()->presentation_request());
-  }
-
-  OnUIInitialized();
-}
-
-void MediaRouterUI::InitForTest(
-    std::unique_ptr<MediaRouterFileDialog> file_dialog) {
-  set_media_router_file_dialog_for_test(std::move(file_dialog));
-}
-
-MediaRouterUI::UIMediaRouteControllerObserver::UIMediaRouteControllerObserver(
-    MediaRouterUI* ui,
-    scoped_refptr<MediaRouteController> controller)
-    : MediaRouteController::Observer(std::move(controller)), ui_(ui) {
-  if (controller_->current_media_status())
-    OnMediaStatusUpdated(controller_->current_media_status().value());
-}
-
-MediaRouterUI::UIMediaRouteControllerObserver::
-    ~UIMediaRouteControllerObserver() {}
-
-void MediaRouterUI::UIMediaRouteControllerObserver::OnMediaStatusUpdated(
-    const MediaStatus& status) {
-  ui_->UpdateMediaRouteStatus(status);
-}
-
-void MediaRouterUI::UIMediaRouteControllerObserver::OnControllerInvalidated() {
-  ui_->OnRouteControllerInvalidated();
-}
-
-void MediaRouterUI::FileDialogFileSelected(
-    const ui::SelectedFileInfo& file_info) {
-  handler_->UserSelectedLocalMediaFile(file_info.display_name);
-}
-
-void MediaRouterUI::OnIssue(const Issue& issue) {
-  if (ui_initialized_)
-    handler_->UpdateIssue(issue);
-}
-
-void MediaRouterUI::OnIssueCleared() {
-  if (ui_initialized_)
-    handler_->ClearIssue();
-}
-
-void MediaRouterUI::OnRoutesUpdated(
-    const std::vector<MediaRoute>& routes,
-    const std::vector<MediaRoute::Id>& joinable_route_ids) {
-  MediaRouterUIBase::OnRoutesUpdated(routes, joinable_route_ids);
-  joinable_route_ids_.clear();
-
-  for (const MediaRoute& route : routes) {
-    if (route.for_display() &&
-        base::Contains(joinable_route_ids, route.media_route_id())) {
-      joinable_route_ids_.push_back(route.media_route_id());
-    }
-  }
-
-  if (ui_initialized_) {
-    handler_->UpdateRoutes(MediaRouterUIBase::routes(), joinable_route_ids_,
-                           routes_and_cast_modes());
-  }
-  UpdateRoutesToCastModesMapping();
-}
-
-void MediaRouterUI::OnRouteResponseReceived(
-    int route_request_id,
-    const MediaSink::Id& sink_id,
-    MediaCastMode cast_mode,
-    const base::string16& presentation_request_source_name,
-    const RouteRequestResult& result) {
-  MediaRouterUIBase::OnRouteResponseReceived(
-      route_request_id, sink_id, cast_mode, presentation_request_source_name,
-      result);
-  handler_->OnCreateRouteResponseReceived(sink_id, result.route());
-}
-
-void MediaRouterUI::HandleCreateSessionRequestRouteResponse(
-    const RouteRequestResult&) {
-  Close();
-}
-
-void MediaRouterUI::OnSearchSinkResponseReceived(
-    MediaCastMode cast_mode,
-    const MediaSink::Id& found_sink_id) {
-  DVLOG(1) << "OnSearchSinkResponseReceived";
-  handler_->ReturnSearchResult(found_sink_id);
-
-  CreateRoute(found_sink_id, cast_mode);
-  MediaRouterMetrics::RecordSearchSinkOutcome(!found_sink_id.empty());
-}
-
-void MediaRouterUI::InitCommon(content::WebContents* initiator) {
-  MediaRouterUIBase::InitCommon(initiator);
-  UpdateCastModes();
-  // Presentation requests from content must show the origin requesting
-  // presentation: crbug.com/704964
-  if (start_presentation_context())
-    forced_cast_mode_ = MediaCastMode::PRESENTATION;
-}
-
-void MediaRouterUI::OnDefaultPresentationChanged(
-    const content::PresentationRequest& presentation_request) {
-  MediaRouterUIBase::OnDefaultPresentationChanged(presentation_request);
-  UpdateCastModes();
-}
-
-void MediaRouterUI::OnDefaultPresentationRemoved() {
-  MediaRouterUIBase::OnDefaultPresentationRemoved();
-
-  // This should not be set if the dialog was initiated with a default
-  // presentation request from the top level frame.  However, clear it just to
-  // be safe.
-  forced_cast_mode_ = base::nullopt;
-  UpdateCastModes();
-}
-
-void MediaRouterUI::UpdateCastModes() {
-  // Gets updated cast modes from |query_result_manager()| and forwards it to
-  // UI.
-  cast_modes_ = query_result_manager()->GetSupportedCastModes();
-  if (ui_initialized_) {
-    handler_->UpdateCastModes(
-        GetCastModes(), GetPresentationRequestSourceName(), forced_cast_mode());
-  }
-}
-
-void MediaRouterUI::UpdateRoutesToCastModesMapping() {
-  std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
-  for (const auto& cast_mode : GetCastModes()) {
-    for (const auto& source : GetSourcesForCastMode(cast_mode))
-      available_source_map.insert(std::make_pair(source.id(), cast_mode));
-  }
-
-  routes_and_cast_modes_.clear();
-  for (const auto& route : routes()) {
-    auto source_entry = available_source_map.find(route.media_source().id());
-    if (source_entry != available_source_map.end()) {
-      routes_and_cast_modes_.insert(
-          std::make_pair(route.media_route_id(), source_entry->second));
-    }
-  }
-}
-
-std::string MediaRouterUI::GetSerializedInitiatorOrigin() const {
-  url::Origin origin =
-      initiator() ? url::Origin::Create(initiator()->GetLastCommittedURL())
-                  : url::Origin();
-  return origin.Serialize();
-}
-
-void MediaRouterUI::OnRouteControllerInvalidated() {
-  route_controller_observer_.reset();
-  handler_->OnRouteControllerInvalidated();
-}
-void MediaRouterUI::UpdateMediaRouteStatus(const MediaStatus& status) {
-  handler_->UpdateMediaRouteStatus(status);
-}
-
-void MediaRouterUI::UpdateSinks() {
-  if (ui_initialized_)
-    handler_->UpdateSinks(GetEnabledSinks());
-}
-
-MediaRouter* MediaRouterUI::GetMediaRouter() const {
-  return MediaRouterFactory::GetApiForBrowserContext(
-      web_ui()->GetWebContents()->GetBrowserContext());
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.h b/chrome/browser/ui/webui/media_router/media_router_ui.h
deleted file mode 100644
index 531fdf2..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_ui.h
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_UI_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_UI_H_
-
-#include <memory>
-#include <set>
-#include <string>
-#include <unordered_map>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/strings/string16.h"
-#include "chrome/browser/media/router/mojo/media_route_controller.h"
-#include "chrome/browser/ui/media_router/media_cast_mode.h"
-#include "chrome/browser/ui/media_router/media_router_ui_base.h"
-#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
-#include "chrome/common/media_router/media_route.h"
-#include "chrome/common/media_router/media_sink.h"
-
-namespace media_router {
-
-struct MediaStatus;
-class MediaRouterWebUIMessageHandler;
-class RouteRequestResult;
-
-// Functions as an intermediary between MediaRouter and WebUI Cast dialog.
-class MediaRouterUI : public MediaRouterUIBase, public ConstrainedWebDialogUI {
- public:
-  // |web_ui| owns this object and is used to initialize the base class.
-  explicit MediaRouterUI(content::WebUI* web_ui);
-  ~MediaRouterUI() override;
-
-  // Closes the media router UI.
-  void Close();
-
-  // Notifies this instance that the UI has been initialized.
-  virtual void OnUIInitialized();
-
-  // Calls MediaRouter to join the given route.
-  bool ConnectRoute(const MediaSink::Id& sink_id,
-                    const MediaRoute::Id& route_id);
-
-  // Calls MediaRouter to search route providers for sinks matching
-  // |search_criteria| with the source that is currently associated with
-  // |cast_mode|. The user's domain |domain| is also used.
-  void SearchSinksAndCreateRoute(const MediaSink::Id& sink_id,
-                                 const std::string& search_criteria,
-                                 const std::string& domain,
-                                 MediaCastMode cast_mode);
-
-  // Returns true if the cast mode last chosen for the current origin is tab
-  // mirroring.
-  virtual bool UserSelectedTabMirroringForCurrentOrigin() const;
-
-  // Records the cast mode selection for the current origin, unless the cast
-  // mode is MediaCastMode::DESKTOP_MIRROR.
-  virtual void RecordCastModeSelection(MediaCastMode cast_mode);
-
-  // Returns the hostname of the PresentationRequest's parent frame URL.
-  virtual std::string GetPresentationRequestSourceName() const;
-  bool HasPendingRouteRequest() const {
-    return current_route_request().has_value();
-  }
-  const std::vector<MediaRoute::Id>& joinable_route_ids() const {
-    return joinable_route_ids_;
-  }
-  virtual const std::set<MediaCastMode>& GetCastModes() const;
-  const std::unordered_map<MediaRoute::Id, MediaCastMode>&
-  routes_and_cast_modes() const {
-    return routes_and_cast_modes_;
-  }
-  const base::Optional<MediaCastMode>& forced_cast_mode() const {
-    return forced_cast_mode_;
-  }
-
-  // Called to track UI metrics.
-  void SetUIInitializationTimer(const base::Time& start_time);
-  void OnUIInitiallyLoaded();
-  void OnUIInitialDataReceived();
-
-  void UpdateMaxDialogHeight(int height);
-
-  // Gets the route controller currently in use by the UI. Returns a nullptr if
-  // none is in use.
-  virtual MediaRouteController* GetMediaRouteController() const;
-
-  // Called when a media controller UI surface is created. Creates an observer
-  // for the MediaRouteController for |route_id| to listen for media status
-  // updates.
-  virtual void OnMediaControllerUIAvailable(const MediaRoute::Id& route_id);
-  // Called when a media controller UI surface is closed. Resets the observer
-  // for MediaRouteController.
-  virtual void OnMediaControllerUIClosed();
-
-  void InitForTest(MediaRouter* router,
-                   content::WebContents* initiator,
-                   MediaRouterWebUIMessageHandler* handler,
-                   std::unique_ptr<StartPresentationContext> context,
-                   std::unique_ptr<MediaRouterFileDialog> file_dialog);
-
-  void InitForTest(std::unique_ptr<MediaRouterFileDialog> file_dialog);
-
- private:
-  friend class MediaRouterUITest;
-
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, SortedSinks);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, SortSinksByIconType);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, FilterNonDisplayRoutes);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, FilterNonDisplayJoinableRoutes);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           UIMediaRoutesObserverAssignsCurrentCastModes);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           UIMediaRoutesObserverSkipsUnavailableCastModes);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, GetExtensionNameExtensionPresent);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           GetExtensionNameEmptyWhenNotInstalled);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           GetExtensionNameEmptyWhenNotExtensionURL);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           RouteCreationTimeoutForPresentation);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUIIncognitoTest,
-                           RouteRequestFromIncognito);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, OpenAndCloseUIDetailsView);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, SendMediaCommands);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, SendMediaStatusUpdate);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest, SendInitialMediaStatusUpdate);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterUITest,
-                           UpdateSinksWhenDialogMovesToAnotherDisplay);
-
-  class UIIssuesObserver;
-
-  class UIMediaRouteControllerObserver : public MediaRouteController::Observer {
-   public:
-    UIMediaRouteControllerObserver(
-        MediaRouterUI* ui,
-        scoped_refptr<MediaRouteController> controller);
-    ~UIMediaRouteControllerObserver() override;
-
-    // MediaRouteController::Observer:
-    void OnMediaStatusUpdated(const MediaStatus& status) override;
-    void OnControllerInvalidated() override;
-
-   private:
-    MediaRouterUI* const ui_;
-
-    DISALLOW_COPY_AND_ASSIGN(UIMediaRouteControllerObserver);
-  };
-
-  // MediaRouterFileDialogDelegate:
-  void FileDialogFileSelected(const ui::SelectedFileInfo& file_info) override;
-
-  void OnIssue(const Issue& issue) override;
-  void OnIssueCleared() override;
-
-  void OnRoutesUpdated(
-      const std::vector<MediaRoute>& routes,
-      const std::vector<MediaRoute::Id>& joinable_route_ids) override;
-
-  void OnRouteResponseReceived(
-      int route_request_id,
-      const MediaSink::Id& sink_id,
-      MediaCastMode cast_mode,
-      const base::string16& presentation_request_source_name,
-      const RouteRequestResult& result) override;
-
-  void HandleCreateSessionRequestRouteResponse(
-      const RouteRequestResult&) override;
-
-  // Callback passed to MediaRouter to receive the sink ID of the sink found by
-  // SearchSinksAndCreateRoute().
-  void OnSearchSinkResponseReceived(MediaCastMode cast_mode,
-                                    const MediaSink::Id& found_sink_id);
-
-  void InitCommon(content::WebContents* initiator) override;
-
-  // PresentationServiceDelegateImpl::DefaultPresentationObserver:
-  void OnDefaultPresentationChanged(
-      const content::PresentationRequest& presentation_request) override;
-  void OnDefaultPresentationRemoved() override;
-
-  // Updates the set of supported cast modes and sends the updated set to
-  // |handler_|.
-  void UpdateCastModes();
-
-  // Updates the routes-to-cast-modes mapping in |routes_and_cast_modes_| to
-  // match the value of |routes_|.
-  void UpdateRoutesToCastModesMapping();
-
-  // Returns the serialized origin for |initiator_|, or the serialization of an
-  // opaque origin ("null") if |initiator_| is not set.
-  std::string GetSerializedInitiatorOrigin() const;
-
-  // Destroys the route controller observer. Called when the route controller is
-  // invalidated.
-  void OnRouteControllerInvalidated();
-
-  // Called by the internal route controller observer. Notifies the message
-  // handler of a media status update for the route currently shown in the UI.
-  void UpdateMediaRouteStatus(const MediaStatus& status);
-
-  void UpdateSinks() override;
-
-  MediaRouter* GetMediaRouter() const override;
-
-  // Owned by the |web_ui| passed in the ctor, and guaranteed to be deleted
-  // only after it has deleted |this|.
-  MediaRouterWebUIMessageHandler* handler_ = nullptr;
-
-  // Set to true by |handler_| when the UI has been initialized.
-  bool ui_initialized_ = false;
-
-  std::vector<MediaRoute::Id> joinable_route_ids_;
-  CastModeSet cast_modes_;
-  std::unordered_map<MediaRoute::Id, MediaCastMode> routes_and_cast_modes_;
-
-  // The start time for UI initialization metrics timer. When a dialog has been
-  // been painted and initialized with initial data, this should be cleared.
-  base::Time start_time_;
-
-  // The observer for the route controller. Notifies |handler_| of media status
-  // updates.
-  std::unique_ptr<UIMediaRouteControllerObserver> route_controller_observer_;
-
-  // If set, a cast mode that is required to be shown first.
-  base::Optional<MediaCastMode> forced_cast_mode_;
-
-  base::WeakPtrFactory<MediaRouterUI> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterUI);
-};
-
-}  // namespace media_router
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_UI_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
deleted file mode 100644
index 771ebe53..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
+++ /dev/null
@@ -1,852 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.h"
-#include "chrome/browser/media/router/test/media_router_mojo_test.h"
-#include "chrome/browser/media/router/test/mock_media_router.h"
-#include "chrome/browser/media/router/test/test_helper.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/ui/media_router/media_router_ui_helper.h"
-#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
-#include "chrome/browser/ui/webui/media_router/web_contents_display_observer.h"
-#include "chrome/common/media_router/media_route.h"
-#include "chrome/common/media_router/media_source.h"
-#include "chrome/common/media_router/mojo/media_router.mojom.h"
-#include "chrome/common/media_router/route_request_result.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/grit/generated_resources.h"
-#include "chrome/test/base/chrome_render_view_host_test_harness.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_web_ui.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/extension_builder.h"
-#include "extensions/common/value_builder.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/display/display.h"
-
-using content::WebContents;
-using testing::_;
-using testing::AnyNumber;
-using testing::Invoke;
-using testing::Mock;
-using testing::Return;
-
-namespace media_router {
-
-ACTION_TEMPLATE(SaveArgWithMove,
-                HAS_1_TEMPLATE_PARAMS(int, k),
-                AND_1_VALUE_PARAMS(pointer)) {
-  *pointer = std::move(::testing::get<k>(args));
-}
-
-class MockMediaRouterWebUIMessageHandler
-    : public MediaRouterWebUIMessageHandler {
- public:
-  explicit MockMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui)
-      : MediaRouterWebUIMessageHandler(media_router_ui) {}
-  ~MockMediaRouterWebUIMessageHandler() override {}
-
-  MOCK_METHOD1(UpdateSinks,
-               void(const std::vector<MediaSinkWithCastModes>& sinks));
-  MOCK_METHOD1(UpdateIssue, void(const Issue& issue));
-  MOCK_METHOD1(UpdateMediaRouteStatus, void(const MediaStatus& status));
-  MOCK_METHOD3(UpdateCastModes,
-               void(const CastModeSet& cast_modes,
-                    const std::string& source_host,
-                    base::Optional<MediaCastMode> forced_cast_mode));
-};
-
-class MockMediaRouterFileDialog : public MediaRouterFileDialog {
- public:
-  MockMediaRouterFileDialog() : MediaRouterFileDialog(nullptr) {}
-  ~MockMediaRouterFileDialog() override {}
-
-  MOCK_METHOD0(GetLastSelectedFileUrl, GURL());
-  MOCK_METHOD0(GetLastSelectedFileName, base::string16());
-  MOCK_METHOD1(OpenFileDialog, void(Browser* browser));
-};
-
-class TestWebContentsDisplayObserver : public WebContentsDisplayObserver {
- public:
-  explicit TestWebContentsDisplayObserver(const display::Display& display)
-      : display_(display) {}
-  ~TestWebContentsDisplayObserver() override {}
-
-  const display::Display& GetCurrentDisplay() const override {
-    return display_;
-  }
-
-  void set_display(const display::Display& display) { display_ = display; }
-
- private:
-  display::Display display_;
-};
-
-class PresentationRequestCallbacks {
- public:
-  PresentationRequestCallbacks() {}
-
-  explicit PresentationRequestCallbacks(
-      const blink::mojom::PresentationError& expected_error)
-      : expected_error_(expected_error) {}
-
-  void Success(const blink::mojom::PresentationInfo&,
-               mojom::RoutePresentationConnectionPtr,
-               const MediaRoute&) {}
-
-  void Error(const blink::mojom::PresentationError& error) {
-    EXPECT_EQ(expected_error_.error_type, error.error_type);
-    EXPECT_EQ(expected_error_.message, error.message);
-  }
-
- private:
-  blink::mojom::PresentationError expected_error_;
-};
-
-class TestMediaRouterUI : public MediaRouterUI {
- public:
-  TestMediaRouterUI(content::WebUI* web_ui, MediaRouter* router)
-      : MediaRouterUI(web_ui), router_(router) {}
-  ~TestMediaRouterUI() override = default;
-
- private:
-  MediaRouter* GetMediaRouter() const override { return router_; }
-
-  MediaRouter* router_;
-  DISALLOW_COPY_AND_ASSIGN(TestMediaRouterUI);
-};
-
-class MediaRouterUITest : public ChromeRenderViewHostTestHarness {
- public:
-  MediaRouterUITest()
-      : presentation_request_({0, 0},
-                              {GURL("https://google.com/presentation")},
-                              url::Origin::Create(GURL("http://google.com"))) {}
-
-  void SetUp() override {
-    ChromeRenderViewHostTestHarness::SetUp();
-    EXPECT_CALL(mock_router_, OnUserGesture()).Times(AnyNumber());
-    EXPECT_CALL(mock_router_, GetCurrentRoutes())
-        .Times(AnyNumber())
-        .WillRepeatedly(Return(std::vector<MediaRoute>()));
-  }
-
-  void TearDown() override {
-    EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_))
-        .Times(AnyNumber());
-    EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_))
-        .Times(AnyNumber());
-    web_ui_contents_.reset();
-    start_presentation_context_.reset();
-    media_router_ui_.reset();
-    message_handler_.reset();
-    ChromeRenderViewHostTestHarness::TearDown();
-  }
-
-  void CreateMediaRouterUIForURL(Profile* profile, const GURL& url) {
-    web_contents()->GetController().LoadURL(url, content::Referrer(),
-                                            ui::PAGE_TRANSITION_LINK, "");
-    content::RenderFrameHostTester::CommitPendingLoad(
-        &web_contents()->GetController());
-    CreateMediaRouterUI(profile);
-  }
-
-  void CreateMediaRouterUI(Profile* profile) {
-    SessionTabHelper::CreateForWebContents(web_contents());
-    web_ui_contents_ = WebContents::Create(WebContents::CreateParams(profile));
-    web_ui_.set_web_contents(web_ui_contents_.get());
-    media_router_ui_ =
-        std::make_unique<TestMediaRouterUI>(&web_ui_, &mock_router_);
-    message_handler_ = std::make_unique<MockMediaRouterWebUIMessageHandler>(
-        media_router_ui_.get());
-
-    auto file_dialog = std::make_unique<MockMediaRouterFileDialog>();
-    mock_file_dialog_ = file_dialog.get();
-
-    EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
-        .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) {
-          this->media_sinks_observers_.push_back(observer);
-          return true;
-        }));
-    EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_))
-        .Times(AnyNumber());
-    media_router_ui_->InitForTest(
-        &mock_router_, web_contents(), message_handler_.get(),
-        std::move(start_presentation_context_), std::move(file_dialog));
-    message_handler_->SetWebUIForTest(&web_ui_);
-  }
-
-  MediaSink CreateSinkCompatibleWithAllSources() {
-    MediaSink sink("sinkId", "sinkName", SinkIconType::GENERIC);
-    for (auto* observer : media_sinks_observers_)
-      observer->OnSinksUpdated({sink}, std::vector<url::Origin>());
-    return sink;
-  }
-
-  // Notifies MediaRouterUI that a route details view has been opened. Expects
-  // MediaRouterUI to request a MediaRouteController, and gives it a mock
-  // controller. Returns a reference to the mock controller.
-  scoped_refptr<MockMediaRouteController> OpenUIDetailsView(
-      const MediaRoute::Id& route_id) {
-    auto controller = base::MakeRefCounted<MockMediaRouteController>(
-        route_id, profile(), &mock_router_);
-    MediaSource media_source("mediaSource");
-    MediaRoute route(route_id, media_source, "sinkId", "", true, true);
-
-    media_router_ui_->OnRoutesUpdated({route}, std::vector<MediaRoute::Id>());
-    EXPECT_CALL(mock_router_, GetRouteController(route_id))
-        .WillOnce(Return(controller));
-    media_router_ui_->OnMediaControllerUIAvailable(route_id);
-
-    return controller;
-  }
-
- protected:
-  MockMediaRouter mock_router_;
-  content::PresentationRequest presentation_request_;
-  content::TestWebUI web_ui_;
-  std::unique_ptr<WebContents> web_ui_contents_;
-  std::unique_ptr<StartPresentationContext> start_presentation_context_;
-  std::unique_ptr<TestMediaRouterUI> media_router_ui_;
-  std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_;
-  MockMediaRouterFileDialog* mock_file_dialog_ = nullptr;
-  std::vector<MediaSinksObserver*> media_sinks_observers_;
-};
-
-class MediaRouterUIIncognitoTest : public MediaRouterUITest {
- protected:
-  content::BrowserContext* GetBrowserContext() override {
-    return static_cast<Profile*>(MediaRouterUITest::GetBrowserContext())
-        ->GetOffTheRecordProfile();
-  }
-};
-
-TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
-  CreateMediaRouterUI(profile());
-  MediaRouteResponseCallback callback;
-  EXPECT_CALL(mock_router_,
-              CreateRouteInternal(_, _, _, _, _,
-                                  base::TimeDelta::FromSeconds(60), false))
-      .WillOnce(SaveArgWithMove<4>(&callback));
-  media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
-                                MediaCastMode::TAB_MIRROR);
-
-  std::string expected_title = l10n_util::GetStringUTF8(
-      IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
-  EXPECT_CALL(*message_handler_, UpdateIssue(IssueTitleEquals(expected_title)));
-  std::unique_ptr<RouteRequestResult> result =
-      RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
-  std::move(callback).Run(nullptr, *result);
-}
-
-TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) {
-  CreateMediaRouterUI(profile());
-  MediaRouteResponseCallback callback;
-  EXPECT_CALL(mock_router_,
-              CreateRouteInternal(_, _, _, _, _,
-                                  base::TimeDelta::FromSeconds(120), false))
-      .WillOnce(SaveArgWithMove<4>(&callback));
-  media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
-                                MediaCastMode::DESKTOP_MIRROR);
-
-  std::string expected_title = l10n_util::GetStringUTF8(
-      IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP);
-  EXPECT_CALL(*message_handler_, UpdateIssue(IssueTitleEquals(expected_title)));
-  std::unique_ptr<RouteRequestResult> result =
-      RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
-  std::move(callback).Run(nullptr, *result);
-}
-
-TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) {
-  CreateMediaRouterUI(profile());
-  content::PresentationRequest presentation_request(
-      {0, 0}, {GURL("https://presentationurl.com")},
-      url::Origin::Create(GURL("https://frameurl.fakeurl")));
-  media_router_ui_->OnDefaultPresentationChanged(presentation_request);
-  MediaRouteResponseCallback callback;
-  EXPECT_CALL(mock_router_,
-              CreateRouteInternal(_, _, _, _, _,
-                                  base::TimeDelta::FromSeconds(20), false))
-      .WillOnce(SaveArgWithMove<4>(&callback));
-  media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
-                                MediaCastMode::PRESENTATION);
-
-  std::string expected_title =
-      l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT,
-                                base::UTF8ToUTF16("frameurl.fakeurl"));
-  EXPECT_CALL(*message_handler_, UpdateIssue(IssueTitleEquals(expected_title)));
-  std::unique_ptr<RouteRequestResult> result =
-      RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
-  std::move(callback).Run(nullptr, *result);
-}
-
-// Tests that if a local file CreateRoute call is made from a new tab, the
-// file will be opened in the new tab.
-TEST_F(MediaRouterUITest, RouteCreationLocalFileModeInTab) {
-  const GURL empty_tab = GURL(chrome::kChromeUINewTabURL);
-  const std::string file_url = "file:///some/url/for/a/file.mp3";
-
-  // Setup the UI
-  CreateMediaRouterUIForURL(profile(), empty_tab);
-
-  EXPECT_CALL(*mock_file_dialog_, GetLastSelectedFileUrl())
-      .WillOnce(Return(GURL(file_url)));
-
-  content::WebContents* location_file_opened = nullptr;
-
-  // Expect that the media_router_ will make a call to the mock_router
-  // then we will want to check that it made the call with.
-  EXPECT_CALL(mock_router_, CreateRouteInternal(_, _, _, _, _, _, _))
-      .WillOnce(SaveArgWithMove<3>(&location_file_opened));
-
-  media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
-                                MediaCastMode::LOCAL_FILE);
-
-  ASSERT_EQ(location_file_opened, web_contents());
-  ASSERT_EQ(location_file_opened->GetVisibleURL(), file_url);
-}
-
-TEST_F(MediaRouterUITest, RouteCreationParametersCantBeCreated) {
-  CreateMediaRouterUI(profile());
-  MediaSinkSearchResponseCallback sink_callback;
-  EXPECT_CALL(mock_router_, SearchSinksInternal(_, _, _, _, _))
-      .WillOnce(SaveArgWithMove<4>(&sink_callback));
-
-  // Use PRESENTATION mode without setting a PresentationRequest.
-  media_router_ui_->SearchSinksAndCreateRoute(
-      "sinkId", "search input", "domain", MediaCastMode::PRESENTATION);
-  std::string expected_title = l10n_util::GetStringUTF8(
-      IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
-  EXPECT_CALL(*message_handler_, UpdateIssue(IssueTitleEquals(expected_title)));
-  std::move(sink_callback).Run("foundSinkId");
-}
-
-TEST_F(MediaRouterUIIncognitoTest, RouteRequestFromIncognito) {
-  CreateMediaRouterUI(profile());
-  media_router_ui_->OnDefaultPresentationChanged(presentation_request_);
-
-  EXPECT_CALL(mock_router_,
-              CreateRouteInternal(_, _, _, _, _,
-                                  base::TimeDelta::FromSeconds(20), true));
-  media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
-                                MediaCastMode::PRESENTATION);
-}
-
-TEST_F(MediaRouterUITest, SortedSinks) {
-  CreateMediaRouterUI(profile());
-  std::vector<MediaSinkWithCastModes> unsorted_sinks;
-  std::string sink_id1("sink3");
-  std::string sink_name1("B sink");
-  MediaSinkWithCastModes sink1(
-      MediaSink(sink_id1, sink_name1, SinkIconType::CAST));
-  unsorted_sinks.push_back(sink1);
-
-  std::string sink_id2("sink1");
-  std::string sink_name2("A sink");
-  MediaSinkWithCastModes sink2(
-      MediaSink(sink_id2, sink_name2, SinkIconType::CAST));
-  unsorted_sinks.push_back(sink2);
-
-  std::string sink_id3("sink2");
-  std::string sink_name3("B sink");
-  MediaSinkWithCastModes sink3(
-      MediaSink(sink_id3, sink_name3, SinkIconType::CAST));
-  unsorted_sinks.push_back(sink3);
-
-  // Sorted order is 2, 3, 1.
-  media_router_ui_->OnResultsUpdated(unsorted_sinks);
-  const auto& sorted_sinks = media_router_ui_->GetEnabledSinks();
-  EXPECT_EQ(sink_name2, sorted_sinks[0].sink.name());
-  EXPECT_EQ(sink_id3, sorted_sinks[1].sink.id());
-  EXPECT_EQ(sink_id1, sorted_sinks[2].sink.id());
-}
-
-TEST_F(MediaRouterUITest, SortSinksByIconType) {
-  CreateMediaRouterUI(profile());
-  std::vector<MediaSinkWithCastModes> unsorted_sinks;
-
-  MediaSinkWithCastModes sink1(MediaSink("id1", "sink", SinkIconType::HANGOUT));
-  unsorted_sinks.push_back(sink1);
-  MediaSinkWithCastModes sink2(
-      MediaSink("id2", "B sink", SinkIconType::CAST_AUDIO_GROUP));
-  unsorted_sinks.push_back(sink2);
-  MediaSinkWithCastModes sink3(MediaSink("id3", "sink", SinkIconType::GENERIC));
-  unsorted_sinks.push_back(sink3);
-  MediaSinkWithCastModes sink4(
-      MediaSink("id4", "A sink", SinkIconType::CAST_AUDIO_GROUP));
-  unsorted_sinks.push_back(sink4);
-  MediaSinkWithCastModes sink5(
-      MediaSink("id5", "sink", SinkIconType::CAST_AUDIO));
-  unsorted_sinks.push_back(sink5);
-  MediaSinkWithCastModes sink6(MediaSink("id6", "sink", SinkIconType::CAST));
-  unsorted_sinks.push_back(sink6);
-
-  // Sorted order is CAST, CAST_AUDIO_GROUP "A", CAST_AUDIO_GROUP "B",
-  // CAST_AUDIO, HANGOUT, GENERIC.
-  media_router_ui_->OnResultsUpdated(unsorted_sinks);
-  const auto& sorted_sinks = media_router_ui_->GetEnabledSinks();
-  EXPECT_EQ(sink6.sink.id(), sorted_sinks[0].sink.id());
-  EXPECT_EQ(sink4.sink.id(), sorted_sinks[1].sink.id());
-  EXPECT_EQ(sink2.sink.id(), sorted_sinks[2].sink.id());
-  EXPECT_EQ(sink5.sink.id(), sorted_sinks[3].sink.id());
-  EXPECT_EQ(sink1.sink.id(), sorted_sinks[4].sink.id());
-  EXPECT_EQ(sink3.sink.id(), sorted_sinks[5].sink.id());
-}
-
-TEST_F(MediaRouterUITest, FilterNonDisplayRoutes) {
-  CreateMediaRouterUI(profile());
-
-  MediaSource media_source("mediaSource");
-  MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1",
-                             true, true);
-  MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2",
-                                 true, false);
-  MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2",
-                             true, true);
-  std::vector<MediaRoute> routes;
-  routes.push_back(display_route_1);
-  routes.push_back(non_display_route_1);
-  routes.push_back(display_route_2);
-
-  media_router_ui_->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
-  ASSERT_EQ(2u, media_router_ui_->routes().size());
-  EXPECT_EQ(display_route_1, media_router_ui_->routes()[0]);
-  EXPECT_TRUE(media_router_ui_->routes()[0].for_display());
-  EXPECT_EQ(display_route_2, media_router_ui_->routes()[1]);
-  EXPECT_TRUE(media_router_ui_->routes()[1].for_display());
-}
-
-TEST_F(MediaRouterUITest, FilterNonDisplayJoinableRoutes) {
-  CreateMediaRouterUI(profile());
-
-  MediaSource media_source("mediaSource");
-  MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1",
-                             true, true);
-  MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2",
-                                 true, false);
-  MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2",
-                             true, true);
-  std::vector<MediaRoute> routes;
-  routes.push_back(display_route_1);
-  routes.push_back(non_display_route_1);
-  routes.push_back(display_route_2);
-
-  std::vector<MediaRoute::Id> joinable_route_ids;
-  joinable_route_ids.push_back("routeId1");
-  joinable_route_ids.push_back("routeId2");
-  joinable_route_ids.push_back("routeId3");
-
-  media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids);
-  ASSERT_EQ(2u, media_router_ui_->joinable_route_ids().size());
-  EXPECT_EQ(display_route_1.media_route_id(),
-            media_router_ui_->joinable_route_ids()[0]);
-  EXPECT_EQ(display_route_2.media_route_id(),
-            media_router_ui_->joinable_route_ids()[1]);
-}
-
-TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) {
-  CreateMediaRouterUI(profile());
-  SessionID tab_id = SessionTabHelper::IdForTab(web_contents());
-  MediaSource media_source_1(MediaSource::ForTab(tab_id.id()));
-  MediaSource media_source_2("mediaSource");
-  MediaSource media_source_3(MediaSource::ForDesktop());
-  std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
-      new MediaRouterUI::UIMediaRoutesObserver(
-          &mock_router_, MediaSource::Id(),
-          base::Bind(&MediaRouterUI::OnRoutesUpdated,
-                     base::Unretained(media_router_ui_.get()))));
-
-  MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
-                             true, true);
-  MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
-                                 "desc 2", true, false);
-  MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
-                             true, true);
-  std::vector<MediaRoute> routes;
-  routes.push_back(display_route_1);
-  routes.push_back(non_display_route_1);
-  routes.push_back(display_route_2);
-
-  observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
-
-  const auto& filtered_routes = media_router_ui_->routes();
-  ASSERT_EQ(2u, filtered_routes.size());
-  EXPECT_EQ(display_route_1, filtered_routes[0]);
-  EXPECT_TRUE(filtered_routes[0].for_display());
-  EXPECT_EQ(display_route_2, filtered_routes[1]);
-  EXPECT_TRUE(filtered_routes[1].for_display());
-
-  const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes();
-  ASSERT_EQ(2u, current_cast_modes.size());
-  auto cast_mode_entry =
-      current_cast_modes.find(display_route_1.media_route_id());
-  EXPECT_NE(end(current_cast_modes), cast_mode_entry);
-  EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second);
-  cast_mode_entry =
-      current_cast_modes.find(non_display_route_1.media_route_id());
-  EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
-  cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
-  EXPECT_NE(end(current_cast_modes), cast_mode_entry);
-  EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
-
-  EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
-  observer.reset();
-}
-
-TEST_F(MediaRouterUITest, UIMediaRoutesObserverSkipsUnavailableCastModes) {
-  CreateMediaRouterUI(profile());
-  MediaSource media_source_1("mediaSource1");
-  MediaSource media_source_2("mediaSource2");
-  MediaSource media_source_3(MediaSource::ForDesktop());
-  std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
-      new MediaRouterUI::UIMediaRoutesObserver(
-          &mock_router_, MediaSource::Id(),
-          base::Bind(&MediaRouterUI::OnRoutesUpdated,
-                     base::Unretained(media_router_ui_.get()))));
-
-  MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
-                             true, true);
-  MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
-                                 "desc 2", true, false);
-  MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
-                             true, true);
-  std::vector<MediaRoute> routes;
-  routes.push_back(display_route_1);
-  routes.push_back(non_display_route_1);
-  routes.push_back(display_route_2);
-
-  observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
-
-  const auto& filtered_routes = media_router_ui_->routes();
-  ASSERT_EQ(2u, filtered_routes.size());
-  EXPECT_EQ(display_route_1, filtered_routes[0]);
-  EXPECT_TRUE(filtered_routes[0].for_display());
-  EXPECT_EQ(display_route_2, filtered_routes[1]);
-  EXPECT_TRUE(filtered_routes[1].for_display());
-
-  const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes();
-  ASSERT_EQ(1u, current_cast_modes.size());
-  auto cast_mode_entry =
-      current_cast_modes.find(display_route_1.media_route_id());
-  // No observer for source "mediaSource1" means no cast mode for this route.
-  EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
-  cast_mode_entry =
-      current_cast_modes.find(non_display_route_1.media_route_id());
-  EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
-  cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
-  EXPECT_NE(end(current_cast_modes), cast_mode_entry);
-  EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
-
-  EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
-  observer.reset();
-}
-
-TEST_F(MediaRouterUITest, NotFoundErrorOnCloseWithNoSinks) {
-  blink::mojom::PresentationError expected_error(
-      blink::mojom::PresentationErrorType::NO_AVAILABLE_SCREENS,
-      "No screens found.");
-  PresentationRequestCallbacks request_callbacks(expected_error);
-  start_presentation_context_ = std::make_unique<StartPresentationContext>(
-      presentation_request_,
-      base::Bind(&PresentationRequestCallbacks::Success,
-                 base::Unretained(&request_callbacks)),
-      base::Bind(&PresentationRequestCallbacks::Error,
-                 base::Unretained(&request_callbacks)));
-  CreateMediaRouterUI(profile());
-  // Destroying the UI should return the expected error from above to the error
-  // callback.
-  media_router_ui_.reset();
-}
-
-TEST_F(MediaRouterUITest, NotFoundErrorOnCloseWithNoCompatibleSinks) {
-  blink::mojom::PresentationError expected_error(
-      blink::mojom::PresentationErrorType::NO_AVAILABLE_SCREENS,
-      "No screens found.");
-  PresentationRequestCallbacks request_callbacks(expected_error);
-  start_presentation_context_ = std::make_unique<StartPresentationContext>(
-      presentation_request_,
-      base::Bind(&PresentationRequestCallbacks::Success,
-                 base::Unretained(&request_callbacks)),
-      base::Bind(&PresentationRequestCallbacks::Error,
-                 base::Unretained(&request_callbacks)));
-  CreateMediaRouterUI(profile());
-
-  // Send a sink to the UI that is compatible with sources other than the
-  // presentation url to cause a NotFoundError.
-  std::vector<MediaSink> sinks;
-  sinks.emplace_back("sink id", "sink name", SinkIconType::GENERIC);
-  std::vector<url::Origin> origins;
-  auto presentation_source = MediaSource::ForPresentationUrl(
-      presentation_request_.presentation_urls[0]);
-  for (auto* observer : media_sinks_observers_) {
-    if (!(observer->source() == presentation_source)) {
-      observer->OnSinksUpdated(sinks, origins);
-    }
-  }
-  // Destroying the UI should return the expected error from above to the error
-  // callback.
-  media_router_ui_.reset();
-}
-
-TEST_F(MediaRouterUITest, AbortErrorOnClose) {
-  blink::mojom::PresentationError expected_error(
-      blink::mojom::PresentationErrorType::PRESENTATION_REQUEST_CANCELLED,
-      "Dialog closed.");
-  PresentationRequestCallbacks request_callbacks(expected_error);
-  start_presentation_context_ = std::make_unique<StartPresentationContext>(
-      presentation_request_,
-      base::Bind(&PresentationRequestCallbacks::Success,
-                 base::Unretained(&request_callbacks)),
-      base::Bind(&PresentationRequestCallbacks::Error,
-                 base::Unretained(&request_callbacks)));
-  CreateMediaRouterUI(profile());
-
-  // Send a sink to the UI that is compatible with the presentation url to avoid
-  // a NotFoundError.
-  std::vector<MediaSink> sinks;
-  sinks.emplace_back("sink id", "sink name", SinkIconType::GENERIC);
-  std::vector<url::Origin> origins;
-  auto presentation_source = MediaSource::ForPresentationUrl(
-      presentation_request_.presentation_urls[0]);
-  for (auto* observer : media_sinks_observers_) {
-    if (observer->source() == presentation_source) {
-      observer->OnSinksUpdated(sinks, origins);
-    }
-  }
-  // Destroying the UI should return the expected error from above to the error
-  // callback.
-  media_router_ui_.reset();
-}
-
-TEST_F(MediaRouterUITest, RecordCastModeSelections) {
-  const GURL url_1a = GURL("https://www.example.com/watch?v=AAAA");
-  const GURL url_1b = GURL("https://www.example.com/watch?v=BBBB");
-  const GURL url_2 = GURL("https://example2.com/0000");
-  const GURL url_3 = GURL("https://www3.example.com/index.html");
-
-  CreateMediaRouterUIForURL(profile(), url_1a);
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
-  EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-
-  CreateMediaRouterUIForURL(profile(), url_2);
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-
-  CreateMediaRouterUIForURL(profile(), url_1b);
-  // |url_1a| and |url_1b| have the same origin, so the selection made for
-  // |url_1a| should be retrieved.
-  EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::PRESENTATION);
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
-  CreateMediaRouterUIForURL(profile(), url_3);
-  // |url_1a| and |url_3| have the same domain "example.com" but different
-  // origins, so their preferences should be separate.
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-}
-
-TEST_F(MediaRouterUITest, RecordCastModeSelectionsInIncognito) {
-  const GURL url = GURL("https://www.example.com/watch?v=AAAA");
-
-  CreateMediaRouterUIForURL(profile()->GetOffTheRecordProfile(), url);
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
-  EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-
-  // Selections recorded in incognito shouldn't be retrieved in the regular
-  // profile.
-  CreateMediaRouterUIForURL(profile(), url);
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-}
-
-TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) {
-  const GURL url = GURL("https://www.example.com/watch?v=AAAA");
-  CreateMediaRouterUIForURL(profile(), url);
-
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR);
-  // Selecting desktop mirroring should not change the recorded preferences.
-  EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
-  EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-  media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR);
-  // Selecting desktop mirroring should not change the recorded preferences.
-  EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
-}
-
-TEST_F(MediaRouterUITest, OpenAndCloseUIDetailsView) {
-  const std::string route_id = "routeId";
-  CreateMediaRouterUI(profile());
-  OpenUIDetailsView(route_id);
-
-  // When the route details view is closed, the route controller observer should
-  // be destroyed, also triggering the destruction of the controller.
-  EXPECT_CALL(mock_router_, DetachRouteController(route_id, _));
-  media_router_ui_->OnMediaControllerUIClosed();
-
-  EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_router_));
-}
-
-TEST_F(MediaRouterUITest, SendMediaStatusUpdate) {
-  MediaStatus status;
-  status.title = "test title";
-  CreateMediaRouterUI(profile());
-  scoped_refptr<MockMediaRouteController> controller =
-      OpenUIDetailsView("routeId");
-
-  // The route controller observer held by MediaRouterUI should send the status
-  // update to the message handler.
-  EXPECT_CALL(*message_handler_, UpdateMediaRouteStatus(status));
-  controller->OnMediaStatusUpdated(status);
-
-  // |controller| will outlive |mock_router_| because we passed it into
-  // testing::Return(). Invalidate it so that it doesn't reference
-  // |mock_router_| in its dtor.
-  controller->Invalidate();
-}
-
-TEST_F(MediaRouterUITest, SendInitialMediaStatusUpdate) {
-  MediaStatus status;
-  status.title = "test title";
-  std::string route_id = "routeId";
-  auto controller = base::MakeRefCounted<MockMediaRouteController>(
-      route_id, profile(), &mock_router_);
-  controller->OnMediaStatusUpdated(status);
-
-  CreateMediaRouterUI(profile());
-  MediaSource media_source("mediaSource");
-  MediaRoute route(route_id, media_source, "sinkId", "", true, true);
-  media_router_ui_->OnRoutesUpdated({route}, std::vector<MediaRoute::Id>());
-
-  // If the controller has already received a media status update, MediaRouterUI
-  // should be notified with it when it starts observing the controller.
-  EXPECT_CALL(mock_router_, GetRouteController(route_id))
-      .WillOnce(Return(controller));
-  EXPECT_CALL(*message_handler_, UpdateMediaRouteStatus(status));
-  media_router_ui_->OnMediaControllerUIAvailable(route_id);
-
-  // |controller| will outlive |mock_router_| because we passed it into
-  // testing::Return(). Invalidate it so that it doesn't reference
-  // |mock_router_| in its dtor.
-  controller->Invalidate();
-}
-
-TEST_F(MediaRouterUITest, SetsForcedCastModeWithPresentationURLs) {
-  presentation_request_.presentation_urls.push_back(
-      GURL("https://google.com/presentation2"));
-  blink::mojom::PresentationError expected_error(
-      blink::mojom::PresentationErrorType::NO_AVAILABLE_SCREENS,
-      "No screens found.");
-  PresentationRequestCallbacks request_callbacks(expected_error);
-  start_presentation_context_ = std::make_unique<StartPresentationContext>(
-      presentation_request_,
-      base::Bind(&PresentationRequestCallbacks::Success,
-                 base::Unretained(&request_callbacks)),
-      base::Bind(&PresentationRequestCallbacks::Error,
-                 base::Unretained(&request_callbacks)));
-
-  SessionTabHelper::CreateForWebContents(web_contents());
-  web_ui_contents_ = WebContents::Create(WebContents::CreateParams(profile()));
-  web_ui_.set_web_contents(web_ui_contents_.get());
-  media_router_ui_ =
-      std::make_unique<TestMediaRouterUI>(&web_ui_, &mock_router_);
-  message_handler_ = std::make_unique<MockMediaRouterWebUIMessageHandler>(
-      media_router_ui_.get());
-  message_handler_->SetWebUIForTest(&web_ui_);
-  EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
-      .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) {
-        this->media_sinks_observers_.push_back(observer);
-        return true;
-      }));
-  EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(AnyNumber());
-
-  CastModeSet expected_modes(
-      {MediaCastMode::TAB_MIRROR, MediaCastMode::DESKTOP_MIRROR,
-       MediaCastMode::LOCAL_FILE, MediaCastMode::PRESENTATION});
-  media_router_ui_->InitForTest(
-      &mock_router_, web_contents(), message_handler_.get(),
-      std::move(start_presentation_context_), nullptr);
-  EXPECT_EQ(expected_modes, media_router_ui_->GetCastModes());
-  EXPECT_EQ(base::Optional<MediaCastMode>(MediaCastMode::PRESENTATION),
-            media_router_ui_->forced_cast_mode());
-  EXPECT_EQ("google.com", media_router_ui_->GetPresentationRequestSourceName());
-
-  // |media_router_ui_| takes ownership of |request_callbacks|.
-  media_router_ui_.reset();
-}
-
-// A wired display sink should not be on the sinks list when the dialog is on
-// that display, to prevent showing a fullscreen presentation window over the
-// controlling window.
-TEST_F(MediaRouterUITest, UpdateSinksWhenDialogMovesToAnotherDisplay) {
-  const display::Display display1(1000001);
-  const display::Display display2(1000002);
-  const std::string display_sink_id1 =
-      WiredDisplayMediaRouteProvider::GetSinkIdForDisplay(display1);
-  const std::string display_sink_id2 =
-      WiredDisplayMediaRouteProvider::GetSinkIdForDisplay(display2);
-
-  CreateMediaRouterUI(profile());
-
-  auto display_observer_unique =
-      std::make_unique<TestWebContentsDisplayObserver>(display1);
-  TestWebContentsDisplayObserver* display_observer =
-      display_observer_unique.get();
-  media_router_ui_->display_observer_ = std::move(display_observer_unique);
-
-  std::vector<MediaSinkWithCastModes> sinks;
-  MediaSinkWithCastModes display_sink1(
-      MediaSink(display_sink_id1, "sink", SinkIconType::GENERIC));
-  sinks.push_back(display_sink1);
-  MediaSinkWithCastModes display_sink2(
-      MediaSink(display_sink_id2, "sink", SinkIconType::GENERIC));
-  sinks.push_back(display_sink2);
-  MediaSinkWithCastModes sink3(MediaSink("id3", "sink", SinkIconType::GENERIC));
-  sinks.push_back(sink3);
-  media_router_ui_->OnResultsUpdated(sinks);
-
-  // Initially |display_sink1| should not be on the sinks list because we are on
-  // |display1|.
-  EXPECT_CALL(*message_handler_, UpdateSinks(_))
-      .WillOnce(Invoke([&display_sink_id1](
-                           const std::vector<MediaSinkWithCastModes>& sinks) {
-        EXPECT_EQ(2u, sinks.size());
-        EXPECT_TRUE(std::find_if(sinks.begin(), sinks.end(),
-                                 [&display_sink_id1](
-                                     const MediaSinkWithCastModes& sink) {
-                                   return sink.sink.id() == display_sink_id1;
-                                 }) == sinks.end());
-      }));
-  media_router_ui_->UpdateSinks();
-
-  // Change the display to |display2|. Now |display_sink2| should be removed
-  // from the list of sinks.
-  EXPECT_CALL(*message_handler_, UpdateSinks(_))
-      .WillOnce(Invoke([&display_sink_id2](
-                           const std::vector<MediaSinkWithCastModes>& sinks) {
-        EXPECT_EQ(2u, sinks.size());
-        EXPECT_TRUE(std::find_if(sinks.begin(), sinks.end(),
-                                 [&display_sink_id2](
-                                     const MediaSinkWithCastModes& sink) {
-                                   return sink.sink.id() == display_sink_id2;
-                                 }) == sinks.end());
-      }));
-  display_observer->set_display(display2);
-  media_router_ui_->UpdateSinks();
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_web_ui_test.cc b/chrome/browser/ui/webui/media_router/media_router_web_ui_test.cc
deleted file mode 100644
index 75c7560..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_web_ui_test.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_web_ui_test.h"
-
-#include "base/bind.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/test/mock_media_router.h"
-#include "chrome/browser/ui/media_router/media_router_ui_service.h"
-#include "chrome/browser/ui/media_router/media_router_ui_service_factory.h"
-#include "chrome/browser/ui/toolbar/mock_media_router_action_controller.h"
-#include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
-#include "chrome/browser/ui/toolbar/toolbar_actions_model_factory.h"
-#include "chrome/test/base/dialog_test_browser_window.h"
-
-class MockMediaRouterUIService : public media_router::MediaRouterUIService {
- public:
-  explicit MockMediaRouterUIService(Profile* profile)
-      : media_router::MediaRouterUIService(profile),
-        action_controller_(profile) {}
-  ~MockMediaRouterUIService() override {}
-
-  MediaRouterActionController* action_controller() override {
-    return &action_controller_;
-  }
-
- private:
-  MockMediaRouterActionController action_controller_;
-};
-
-std::unique_ptr<KeyedService> BuildMockMediaRouterUIService(
-    content::BrowserContext* context) {
-  return std::make_unique<MockMediaRouterUIService>(
-      static_cast<Profile*>(context));
-}
-
-std::unique_ptr<KeyedService> BuildToolbarActionsModel(
-    content::BrowserContext* context) {
-  return std::make_unique<ToolbarActionsModel>(static_cast<Profile*>(context),
-                                               nullptr);
-}
-
-MediaRouterWebUITest::MediaRouterWebUITest() : MediaRouterWebUITest(false) {}
-MediaRouterWebUITest::MediaRouterWebUITest(bool require_mock_ui_service)
-    : require_mock_ui_service_(require_mock_ui_service) {}
-
-MediaRouterWebUITest::~MediaRouterWebUITest() {}
-
-TestingProfile::TestingFactories MediaRouterWebUITest::GetTestingFactories() {
-  TestingProfile::TestingFactories factories = {
-      {media_router::MediaRouterFactory::GetInstance(),
-       base::BindRepeating(&media_router::MockMediaRouter::Create)}};
-  if (require_mock_ui_service_) {
-    factories.emplace_back(
-        media_router::MediaRouterUIServiceFactory::GetInstance(),
-        base::BindRepeating(&BuildMockMediaRouterUIService));
-    factories.emplace_back(ToolbarActionsModelFactory::GetInstance(),
-                           base::BindRepeating(&BuildToolbarActionsModel));
-  }
-
-  return factories;
-}
-
-std::unique_ptr<BrowserWindow> MediaRouterWebUITest::CreateBrowserWindow() {
-  return std::make_unique<DialogTestBrowserWindow>();
-}
diff --git a/chrome/browser/ui/webui/media_router/media_router_web_ui_test.h b/chrome/browser/ui/webui/media_router/media_router_web_ui_test.h
deleted file mode 100644
index b52ae52..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_web_ui_test.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEB_UI_TEST_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEB_UI_TEST_H_
-
-#include "chrome/test/base/browser_with_test_window_test.h"
-
-class MediaRouterWebUITest : public BrowserWithTestWindowTest {
- public:
-  // |require_mock_ui_service_| defaults to false in the default ctor.
-  MediaRouterWebUITest();
-  explicit MediaRouterWebUITest(bool require_mock_ui_service);
-  ~MediaRouterWebUITest() override;
-
- protected:
-  // BrowserWithTestWindowTest:
-  TestingProfile::TestingFactories GetTestingFactories() override;
-  std::unique_ptr<BrowserWindow> CreateBrowserWindow() override;
-
- private:
-  // When this is set to true, MockMediaRouterUIService is instantiated.
-  // Otherwise, no MediaRouterUIService is instantiated.
-  bool require_mock_ui_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterWebUITest);
-};
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEB_UI_TEST_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
deleted file mode 100644
index e542e7d..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
+++ /dev/null
@@ -1,1164 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
-
-#include <algorithm>
-#include <memory>
-#include <set>
-#include <string>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/metrics/histogram_functions.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/metrics/user_metrics.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/values.h"
-#include "chrome/browser/media/router/media_router_metrics.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/identity_manager_factory.h"
-#include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-#include "chrome/common/chrome_features.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/grit/generated_resources.h"
-#include "components/prefs/pref_service.h"
-#include "components/signin/core/browser/account_info.h"
-#include "components/signin/public/identity_manager/identity_manager.h"
-#include "components/sync/driver/sync_service.h"
-#include "content/public/browser/web_ui.h"
-#include "extensions/common/constants.h"
-#include "ui/base/l10n/l10n_util.h"
-
-namespace media_router {
-
-namespace {
-
-const char kCastLearnMorePageUrl[] =
-    "https://www.google.com/chrome/devices/chromecast/learn.html";
-const char kHelpPageUrlPrefix[] =
-    "https://support.google.com/chromecast/answer/%d";
-
-// Message names.
-const char kRequestInitialData[] = "requestInitialData";
-const char kCreateRoute[] = "requestRoute";
-const char kAcknowledgeFirstRunFlow[] = "acknowledgeFirstRunFlow";
-const char kActOnIssue[] = "actOnIssue";
-const char kCloseRoute[] = "closeRoute";
-const char kJoinRoute[] = "joinRoute";
-const char kCloseDialog[] = "closeDialog";
-const char kReportBlur[] = "reportBlur";
-const char kReportClickedSinkIndex[] = "reportClickedSinkIndex";
-const char kReportFilter[] = "reportFilter";
-const char kReportInitialAction[] = "reportInitialAction";
-const char kReportInitialState[] = "reportInitialState";
-const char kReportNavigateToView[] = "reportNavigateToView";
-const char kReportRouteCreationOutcome[] = "reportRouteCreationOutcome";
-const char kReportRouteCreation[] = "reportRouteCreation";
-const char kReportSelectedCastMode[] = "reportSelectedCastMode";
-const char kReportSinkCount[] = "reportSinkCount";
-const char kReportTimeToClickSink[] = "reportTimeToClickSink";
-const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose";
-const char kReportWebUIRouteControllerLoaded[] =
-    "reportWebUIRouteControllerLoaded";
-const char kSearchSinksAndCreateRoute[] = "searchSinksAndCreateRoute";
-const char kOnInitialDataReceived[] = "onInitialDataReceived";
-const char kOnMediaControllerAvailable[] = "onMediaControllerAvailable";
-const char kOnMediaControllerClosed[] = "onMediaControllerClosed";
-const char kPauseCurrentMedia[] = "pauseCurrentMedia";
-const char kPlayCurrentMedia[] = "playCurrentMedia";
-const char kSeekCurrentMedia[] = "seekCurrentMedia";
-const char kSelectLocalMediaFile[] = "selectLocalMediaFile";
-const char kSetCurrentMediaMute[] = "setCurrentMediaMute";
-const char kSetCurrentMediaVolume[] = "setCurrentMediaVolume";
-const char kSetMediaRemotingEnabled[] = "setMediaRemotingEnabled";
-const char kHangoutsSetLocalPresent[] = "hangouts.setLocalPresent";
-
-// JS function names.
-const char kSetInitialData[] = "media_router.ui.setInitialData";
-const char kOnCreateRouteResponseReceived[] =
-    "media_router.ui.onCreateRouteResponseReceived";
-const char kOnRouteControllerInvalidated[] =
-    "media_router.ui.onRouteControllerInvalidated";
-const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult";
-const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData";
-const char kSetIssue[] = "media_router.ui.setIssue";
-const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity";
-const char kSetRouteList[] = "media_router.ui.setRouteList";
-const char kSetCastModeList[] = "media_router.ui.setCastModeList";
-const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight";
-const char kUpdateRouteStatus[] = "media_router.ui.updateRouteStatus";
-const char kUserSelectedLocalMediaFile[] =
-    "media_router.ui.userSelectedLocalMediaFile";
-const char kWindowOpen[] = "window.open";
-
-std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue(
-    const std::vector<MediaSinkWithCastModes>& sinks,
-    const AccountInfo& account_info) {
-  auto sink_list_and_identity = std::make_unique<base::DictionaryValue>();
-  bool show_email = false;
-  bool show_domain = false;
-  std::string user_domain;
-  if (account_info.IsValid()) {
-    user_domain = account_info.hosted_domain;
-    sink_list_and_identity->SetString("userEmail", account_info.email);
-  }
-
-  auto sinks_val = std::make_unique<base::ListValue>();
-
-  for (const MediaSinkWithCastModes& sink_with_cast_modes : sinks) {
-    auto sink_val = std::make_unique<base::DictionaryValue>();
-
-    const MediaSink& sink = sink_with_cast_modes.sink;
-    sink_val->SetString("id", sink.id());
-    sink_val->SetString("name", sink.name());
-    sink_val->SetInteger("iconType", static_cast<int>(sink.icon_type()));
-    if (sink.description())
-      sink_val->SetString("description", *sink.description());
-
-    bool is_pseudo_sink =
-        base::StartsWith(sink.id(), "pseudo:", base::CompareCase::SENSITIVE);
-    if (!user_domain.empty() && sink.domain() && !sink.domain()->empty()) {
-      std::string domain = *sink.domain();
-      // Convert default domains to user domain
-      if (domain == "default") {
-        domain = user_domain;
-        if (domain == kNoHostedDomainFound) {
-          // Default domain will be empty for non-dasher accounts.
-          domain.clear();
-        }
-      }
-
-      sink_val->SetString("domain", domain);
-
-      show_email = show_email || !is_pseudo_sink;
-      if (!domain.empty() && domain != user_domain) {
-        show_domain = true;
-      }
-    }
-
-    int cast_mode_bits = 0;
-    for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes)
-      cast_mode_bits |= cast_mode;
-
-    sink_val->SetInteger("castModes", cast_mode_bits);
-    sink_val->SetBoolean("isPseudoSink", is_pseudo_sink);
-    sinks_val->Append(std::move(sink_val));
-  }
-
-  sink_list_and_identity->Set("sinks", std::move(sinks_val));
-  sink_list_and_identity->SetBoolean("showEmail", show_email);
-  sink_list_and_identity->SetBoolean("showDomain", show_domain);
-  return sink_list_and_identity;
-}
-
-std::unique_ptr<base::DictionaryValue> RouteToValue(
-    const MediaRoute& route,
-    bool can_join,
-    bool incognito,
-    int current_cast_mode) {
-  auto dictionary = std::make_unique<base::DictionaryValue>();
-  dictionary->SetString("id", route.media_route_id());
-  dictionary->SetString("sinkId", route.media_sink_id());
-  dictionary->SetString("description", route.description());
-  dictionary->SetBoolean("isLocal", route.is_local());
-  dictionary->SetBoolean("supportsWebUiController",
-                         route.controller_type() != RouteControllerType::kNone);
-  dictionary->SetBoolean("canJoin", can_join);
-  if (current_cast_mode > 0) {
-    dictionary->SetInteger("currentCastMode", current_cast_mode);
-  }
-
-  return dictionary;
-}
-
-std::unique_ptr<base::ListValue> CastModesToValue(
-    const CastModeSet& cast_modes,
-    const std::string& source_host,
-    base::Optional<MediaCastMode> forced_cast_mode) {
-  auto value = std::make_unique<base::ListValue>();
-
-  for (const MediaCastMode& cast_mode : cast_modes) {
-    auto cast_mode_val = std::make_unique<base::DictionaryValue>();
-    cast_mode_val->SetInteger("type", cast_mode);
-    cast_mode_val->SetString(
-        "description", MediaCastModeToDescription(cast_mode, source_host));
-    cast_mode_val->SetString("host", source_host);
-    cast_mode_val->SetBoolean(
-        "isForced", forced_cast_mode && forced_cast_mode == cast_mode);
-    value->Append(std::move(cast_mode_val));
-  }
-
-  return value;
-}
-
-// Returns an Issue dictionary created from |issue| that can be used in WebUI.
-std::unique_ptr<base::DictionaryValue> IssueToValue(const Issue& issue) {
-  const IssueInfo& issue_info = issue.info();
-  auto dictionary = std::make_unique<base::DictionaryValue>();
-  dictionary->SetInteger("id", issue.id());
-  dictionary->SetString("title", issue_info.title);
-  dictionary->SetString("message", issue_info.message);
-  dictionary->SetInteger("defaultActionType",
-                         static_cast<int>(issue_info.default_action));
-  if (!issue_info.secondary_actions.empty()) {
-    DCHECK_EQ(1u, issue_info.secondary_actions.size());
-    dictionary->SetInteger("secondaryActionType",
-                           static_cast<int>(issue_info.secondary_actions[0]));
-  }
-  if (!issue_info.route_id.empty())
-    dictionary->SetString("routeId", issue_info.route_id);
-  dictionary->SetBoolean("isBlocking", issue_info.is_blocking);
-  if (issue_info.help_page_id > 0)
-    dictionary->SetInteger("helpPageId", issue_info.help_page_id);
-
-  return dictionary;
-}
-
-bool IsValidIssueActionTypeNum(int issue_action_type_num) {
-  return issue_action_type_num >= 0 &&
-         issue_action_type_num <=
-             static_cast<int>(IssueInfo::Action::NUM_VALUES);
-}
-
-// Composes a "learn more" URL. The URL depends on template arguments in |args|.
-// Returns an empty string if |args| is invalid.
-std::string GetLearnMoreUrl(const base::DictionaryValue* args) {
-  // TODO(imcheng): The template arguments for determining the learn more URL
-  // should come from the Issue object in the browser, not from WebUI.
-  int help_page_id = -1;
-  if (!args->GetInteger("helpPageId", &help_page_id) || help_page_id < 0) {
-    DVLOG(1) << "Invalid help page id.";
-    return std::string();
-  }
-
-  std::string help_url = base::StringPrintf(kHelpPageUrlPrefix, help_page_id);
-  if (!GURL(help_url).is_valid()) {
-    DVLOG(1) << "Error: URL is invalid and cannot be opened.";
-    return std::string();
-  }
-  return help_url;
-}
-
-}  // namespace
-
-MediaRouterWebUIMessageHandler::MediaRouterWebUIMessageHandler(
-    MediaRouterUI* media_router_ui)
-    : incognito_(
-          Profile::FromWebUI(media_router_ui->web_ui())->IsOffTheRecord()),
-      dialog_closing_(false),
-      media_router_ui_(media_router_ui) {}
-
-MediaRouterWebUIMessageHandler::~MediaRouterWebUIMessageHandler() {}
-
-void MediaRouterWebUIMessageHandler::UpdateSinks(
-    const std::vector<MediaSinkWithCastModes>& sinks) {
-  DVLOG(2) << "UpdateSinks";
-  std::unique_ptr<base::DictionaryValue> sinks_and_identity_val(
-      SinksAndIdentityToValue(sinks, GetAccountInfo()));
-  web_ui()->CallJavascriptFunctionUnsafe(kSetSinkListAndIdentity,
-                                         *sinks_and_identity_val);
-}
-
-void MediaRouterWebUIMessageHandler::UpdateRoutes(
-    const std::vector<MediaRoute>& routes,
-    const std::vector<MediaRoute::Id>& joinable_route_ids,
-    const std::unordered_map<MediaRoute::Id, MediaCastMode>&
-        current_cast_modes) {
-  std::unique_ptr<base::ListValue> routes_val(
-      RoutesToValue(routes, joinable_route_ids, current_cast_modes));
-
-  web_ui()->CallJavascriptFunctionUnsafe(kSetRouteList, *routes_val);
-}
-
-void MediaRouterWebUIMessageHandler::UpdateCastModes(
-    const CastModeSet& cast_modes,
-    const std::string& source_host,
-    base::Optional<MediaCastMode> forced_cast_mode) {
-  DVLOG(2) << "UpdateCastModes";
-  std::unique_ptr<base::ListValue> cast_modes_val(
-      CastModesToValue(cast_modes, source_host, forced_cast_mode));
-  web_ui()->CallJavascriptFunctionUnsafe(kSetCastModeList, *cast_modes_val);
-}
-
-void MediaRouterWebUIMessageHandler::OnCreateRouteResponseReceived(
-    const MediaSink::Id& sink_id,
-    const MediaRoute* route) {
-  DVLOG(2) << "OnCreateRouteResponseReceived";
-  if (route) {
-    int current_cast_mode = CurrentCastModeForRouteId(
-        route->media_route_id(), media_router_ui_->routes_and_cast_modes());
-    std::unique_ptr<base::DictionaryValue> route_value(
-        RouteToValue(*route, false, incognito_, current_cast_mode));
-    web_ui()->CallJavascriptFunctionUnsafe(kOnCreateRouteResponseReceived,
-                                           base::Value(sink_id), *route_value,
-                                           base::Value(route->for_display()));
-  } else {
-    web_ui()->CallJavascriptFunctionUnsafe(kOnCreateRouteResponseReceived,
-                                           base::Value(sink_id), base::Value(),
-                                           base::Value(false));
-  }
-}
-
-void MediaRouterWebUIMessageHandler::ReturnSearchResult(
-    const std::string& sink_id) {
-  DVLOG(2) << "ReturnSearchResult";
-  web_ui()->CallJavascriptFunctionUnsafe(kReceiveSearchResult,
-                                         base::Value(sink_id));
-}
-
-void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue& issue) {
-  DVLOG(2) << "UpdateIssue";
-  web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, *IssueToValue(issue));
-}
-
-void MediaRouterWebUIMessageHandler::ClearIssue() {
-  DVLOG(2) << "ClearIssue";
-  web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, base::Value());
-}
-
-void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) {
-  DVLOG(2) << "UpdateMaxDialogHeight";
-  web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height));
-}
-
-void MediaRouterWebUIMessageHandler::UpdateMediaRouteStatus(
-    const MediaStatus& status) {
-  current_media_status_ = base::make_optional<MediaStatus>(MediaStatus(status));
-
-  base::DictionaryValue status_value;
-  status_value.SetString("title", status.title);
-  status_value.SetBoolean("canPlayPause", status.can_play_pause);
-  status_value.SetBoolean("canMute", status.can_mute);
-  status_value.SetBoolean("canSetVolume", status.can_set_volume);
-  status_value.SetBoolean("canSeek", status.can_seek);
-  status_value.SetInteger("playState", static_cast<int>(status.play_state));
-  status_value.SetBoolean("isMuted", status.is_muted);
-  status_value.SetInteger("duration", status.duration.InSeconds());
-  status_value.SetInteger("currentTime", status.current_time.InSeconds());
-  status_value.SetDouble("volume", status.volume);
-
-  if (status.hangouts_extra_data) {
-    base::Value hangouts_extra_data(base::Value::Type::DICTIONARY);
-    hangouts_extra_data.SetKey(
-        "localPresent", base::Value(status.hangouts_extra_data->local_present));
-    status_value.SetKey("hangoutsExtraData", std::move(hangouts_extra_data));
-  }
-
-  if (status.mirroring_extra_data) {
-    base::Value mirroring_extra_data(base::Value::Type::DICTIONARY);
-    mirroring_extra_data.SetKey(
-        "mediaRemotingEnabled",
-        base::Value(status.mirroring_extra_data->media_remoting_enabled));
-    status_value.SetKey("mirroringExtraData", std::move(mirroring_extra_data));
-  }
-
-  web_ui()->CallJavascriptFunctionUnsafe(kUpdateRouteStatus,
-                                         std::move(status_value));
-}
-
-void MediaRouterWebUIMessageHandler::OnRouteControllerInvalidated() {
-  web_ui()->CallJavascriptFunctionUnsafe(kOnRouteControllerInvalidated);
-}
-
-void MediaRouterWebUIMessageHandler::UserSelectedLocalMediaFile(
-    base::FilePath::StringType file_name) {
-  DVLOG(2) << "UserSelectedLocalMediaFile";
-  web_ui()->CallJavascriptFunctionUnsafe(kUserSelectedLocalMediaFile,
-                                         base::Value(file_name));
-}
-
-void MediaRouterWebUIMessageHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
-      kRequestInitialData,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnRequestInitialData,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kCreateRoute,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnCreateRoute,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kAcknowledgeFirstRunFlow,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnAcknowledgeFirstRunFlow,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kActOnIssue,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnActOnIssue,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kCloseRoute,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnCloseRoute,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kJoinRoute,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnJoinRoute,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kCloseDialog,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnCloseDialog,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportBlur,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnReportBlur,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportClickedSinkIndex,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportClickedSinkIndex,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportFilter,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnReportFilter,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportInitialState,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnReportInitialState,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportInitialAction,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportInitialAction,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportRouteCreation,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportRouteCreation,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportRouteCreationOutcome,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportRouteCreationOutcome,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportSelectedCastMode,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportSelectedCastMode,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportNavigateToView,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportNavigateToView,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportSinkCount,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnReportSinkCount,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportTimeToClickSink,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportTimeToClickSink,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportTimeToInitialActionClose,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kReportWebUIRouteControllerLoaded,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnReportWebUIRouteControllerLoaded,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSearchSinksAndCreateRoute,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kOnInitialDataReceived,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnInitialDataReceived,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kOnMediaControllerAvailable,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnMediaControllerAvailable,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kOnMediaControllerClosed,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnMediaControllerClosed,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kPauseCurrentMedia,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnPauseCurrentMedia,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kPlayCurrentMedia,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnPlayCurrentMedia,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSeekCurrentMedia,
-      base::BindRepeating(&MediaRouterWebUIMessageHandler::OnSeekCurrentMedia,
-                          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSelectLocalMediaFile,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSelectLocalMediaFile,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSetCurrentMediaMute,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSetCurrentMediaVolume,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kSetMediaRemotingEnabled,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSetMediaRemotingEnabled,
-          base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      kHangoutsSetLocalPresent,
-      base::BindRepeating(
-          &MediaRouterWebUIMessageHandler::OnSetHangoutsLocalPresent,
-          base::Unretained(this)));
-}
-
-void MediaRouterWebUIMessageHandler::OnRequestInitialData(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnRequestInitialData";
-  media_router_ui_->OnUIInitiallyLoaded();
-  base::DictionaryValue initial_data;
-
-  // "No Cast devices found?" Chromecast help center page.
-  initial_data.SetString("deviceMissingUrl",
-                         base::StringPrintf(kHelpPageUrlPrefix, 3249268));
-
-  std::unique_ptr<base::DictionaryValue> sinks_and_identity(
-      SinksAndIdentityToValue(media_router_ui_->GetEnabledSinks(),
-                              GetAccountInfo()));
-  initial_data.Set("sinksAndIdentity", std::move(sinks_and_identity));
-
-  std::unique_ptr<base::ListValue> routes(RoutesToValue(
-      media_router_ui_->routes(), media_router_ui_->joinable_route_ids(),
-      media_router_ui_->routes_and_cast_modes()));
-  initial_data.Set("routes", std::move(routes));
-
-  const std::set<MediaCastMode>& cast_modes = media_router_ui_->GetCastModes();
-  std::unique_ptr<base::ListValue> cast_modes_list(CastModesToValue(
-      cast_modes, media_router_ui_->GetPresentationRequestSourceName(),
-      media_router_ui_->forced_cast_mode()));
-  initial_data.Set("castModes", std::move(cast_modes_list));
-
-  // If the cast mode last chosen for the current origin is tab mirroring,
-  // that should be the cast mode initially selected in the dialog. Otherwise
-  // the initial cast mode should be chosen automatically by the dialog.
-  bool use_tab_mirroring =
-      base::Contains(cast_modes, MediaCastMode::TAB_MIRROR) &&
-      media_router_ui_->UserSelectedTabMirroringForCurrentOrigin();
-  initial_data.SetBoolean("useTabMirroring", use_tab_mirroring);
-
-  web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data);
-  media_router_ui_->OnUIInitialized();
-}
-
-void MediaRouterWebUIMessageHandler::OnCreateRoute(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnCreateRoute";
-  const base::DictionaryValue* args_dict = nullptr;
-  std::string sink_id;
-  int cast_mode_num = -1;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetString("sinkId", &sink_id) ||
-      !args_dict->GetInteger("selectedCastMode", &cast_mode_num)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-
-  if (sink_id.empty()) {
-    DVLOG(1) << "Media Route UI did not respond with a "
-             << "valid sink ID. Aborting.";
-    return;
-  }
-
-  if (!IsValidCastModeNum(cast_mode_num)) {
-    // TODO(imcheng): Record error condition with UMA.
-    DVLOG(1) << "Invalid cast mode: " << cast_mode_num << ". Aborting.";
-    return;
-  }
-
-  MediaRouterUI* media_router_ui =
-      static_cast<MediaRouterUI*>(web_ui()->GetController());
-  if (media_router_ui->HasPendingRouteRequest()) {
-    DVLOG(1) << "UI already has pending route request. Ignoring.";
-    IssueInfo issue(
-        l10n_util::GetStringUTF8(IDS_MEDIA_ROUTER_ISSUE_PENDING_ROUTE),
-        IssueInfo::Action::DISMISS, IssueInfo::Severity::NOTIFICATION);
-    media_router_ui_->AddIssue(issue);
-    return;
-  }
-
-  DVLOG(2) << __func__ << ": sink id: " << sink_id
-           << ", cast mode: " << cast_mode_num;
-
-  // TODO(haibinlu): Pass additional parameters into the CreateRoute request,
-  // e.g. low-fps-mirror, user-override. (crbug.com/490364)
-  if (!media_router_ui->CreateRoute(
-          sink_id, static_cast<MediaCastMode>(cast_mode_num))) {
-    DVLOG(1) << "Error initiating route request.";
-  }
-}
-
-void MediaRouterWebUIMessageHandler::OnAcknowledgeFirstRunFlow(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnAcknowledgeFirstRunFlow";
-  Profile::FromWebUI(web_ui())->GetPrefs()->SetBoolean(
-      ::prefs::kMediaRouterFirstRunFlowAcknowledged, true);
-
-  bool enabled_cloud_services = false;
-  // Do not set the relevant cloud services prefs if the user was not shown
-  // the cloud services prompt.
-  if (!args->GetBoolean(0, &enabled_cloud_services)) {
-    DVLOG(1) << "User was not shown the enable cloud services prompt.";
-    return;
-  }
-
-  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
-  pref_service->SetBoolean(::prefs::kMediaRouterEnableCloudServices,
-                           enabled_cloud_services);
-  pref_service->SetBoolean(::prefs::kMediaRouterCloudServicesPrefSet, true);
-}
-
-void MediaRouterWebUIMessageHandler::OnActOnIssue(const base::ListValue* args) {
-  DVLOG(1) << "OnActOnIssue";
-  const base::DictionaryValue* args_dict = nullptr;
-  Issue::Id issue_id;
-  int action_type_num = -1;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetInteger("issueId", &issue_id) ||
-      !args_dict->GetInteger("actionType", &action_type_num)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  if (!IsValidIssueActionTypeNum(action_type_num)) {
-    DVLOG(1) << "Invalid action type: " << action_type_num;
-    return;
-  }
-  IssueInfo::Action action_type =
-      static_cast<IssueInfo::Action>(action_type_num);
-  if (ActOnIssueType(action_type, args_dict))
-    DVLOG(1) << "ActOnIssueType failed for Issue ID " << issue_id;
-  media_router_ui_->RemoveIssue(issue_id);
-}
-
-void MediaRouterWebUIMessageHandler::OnJoinRoute(const base::ListValue* args) {
-  DVLOG(1) << "OnJoinRoute";
-  const base::DictionaryValue* args_dict = nullptr;
-  std::string route_id;
-  std::string sink_id;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetString("sinkId", &sink_id) ||
-      !args_dict->GetString("routeId", &route_id)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-
-  if (sink_id.empty()) {
-    DVLOG(1) << "Media Route UI did not respond with a "
-             << "valid sink ID. Aborting.";
-    return;
-  }
-
-  if (route_id.empty()) {
-    DVLOG(1) << "Media Route UI did not respond with a "
-             << "valid route ID. Aborting.";
-    return;
-  }
-
-  MediaRouterUI* media_router_ui =
-      static_cast<MediaRouterUI*>(web_ui()->GetController());
-  if (media_router_ui->HasPendingRouteRequest()) {
-    DVLOG(1) << "UI already has pending route request. Ignoring.";
-    IssueInfo issue(
-        l10n_util::GetStringUTF8(IDS_MEDIA_ROUTER_ISSUE_PENDING_ROUTE),
-        IssueInfo::Action::DISMISS, IssueInfo::Severity::NOTIFICATION);
-    media_router_ui_->AddIssue(issue);
-    return;
-  }
-
-  if (!media_router_ui_->ConnectRoute(sink_id, route_id)) {
-    DVLOG(1) << "Error initiating route join request.";
-  }
-}
-
-void MediaRouterWebUIMessageHandler::OnCloseRoute(const base::ListValue* args) {
-  DVLOG(1) << "OnCloseRoute";
-  const base::DictionaryValue* args_dict = nullptr;
-  std::string route_id;
-  bool is_local = false;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetString("routeId", &route_id) ||
-      !args_dict->GetBoolean("isLocal", &is_local)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  media_router_ui_->TerminateRoute(route_id);
-  if (is_local) {
-    MediaRouterMetrics::RecordStopLocalRoute();
-  } else {
-    MediaRouterMetrics::RecordStopRemoteRoute();
-  }
-}
-
-void MediaRouterWebUIMessageHandler::OnCloseDialog(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnCloseDialog";
-  if (dialog_closing_)
-    return;
-
-  bool used_esc_to_close_dialog = false;
-  if (!args->GetBoolean(0, &used_esc_to_close_dialog)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-
-  if (used_esc_to_close_dialog) {
-    base::RecordAction(
-        base::UserMetricsAction("MediaRouter_Ui_Dialog_ESCToClose"));
-  }
-
-  dialog_closing_ = true;
-  media_router_ui_->Close();
-}
-
-void MediaRouterWebUIMessageHandler::OnReportBlur(const base::ListValue* args) {
-  DVLOG(1) << "OnReportBlur";
-  base::RecordAction(base::UserMetricsAction("MediaRouter_Ui_Dialog_Blur"));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportClickedSinkIndex(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportClickedSinkIndex";
-  int index;
-  if (!args->GetInteger(0, &index)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  MediaRouterMetrics::RecordStartRouteDeviceIndex(index);
-}
-
-void MediaRouterWebUIMessageHandler::OnReportFilter(const base::ListValue*) {
-  DVLOG(1) << "OnReportFilter";
-  base::RecordAction(base::UserMetricsAction("MediaRouter_Ui_Action_Filter"));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportInitialAction(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportInitialAction";
-  int action;
-  if (!args->GetInteger(0, &action)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  media_router::MediaRouterMetrics::RecordMediaRouterInitialUserAction(
-      static_cast<MediaRouterUserAction>(action));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportInitialState(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportInitialState";
-  std::string initial_view;
-  if (!args->GetString(0, &initial_view)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  bool sink_list_state = initial_view == "sink-list";
-  DCHECK(sink_list_state || (initial_view == "route-details"));
-  UMA_HISTOGRAM_BOOLEAN("MediaRouter.Ui.InitialState", sink_list_state);
-}
-
-void MediaRouterWebUIMessageHandler::OnReportNavigateToView(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportNavigateToView";
-  std::string view;
-  if (!args->GetString(0, &view)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-
-  if (view == "cast-mode-list") {
-    base::RecordAction(
-        base::UserMetricsAction("MediaRouter_Ui_Navigate_SinkListToSource"));
-  } else if (view == "route-details") {
-    base::RecordAction(base::UserMetricsAction(
-        "MediaRouter_Ui_Navigate_SinkListToRouteDetails"));
-  } else if (view == "sink-list") {
-    base::RecordAction(base::UserMetricsAction(
-        "MediaRouter_Ui_Navigate_RouteDetailsToSinkList"));
-  }
-}
-
-void MediaRouterWebUIMessageHandler::OnReportRouteCreation(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportRouteCreation";
-  bool route_created_successfully;
-  if (!args->GetBoolean(0, &route_created_successfully)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  MediaRouterMetrics::RecordStartLocalSessionSuccessful(
-      route_created_successfully);
-}
-
-void MediaRouterWebUIMessageHandler::OnReportRouteCreationOutcome(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportRouteCreationOutcome";
-  int outcome;
-  if (!args->GetInteger(0, &outcome)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-
-  media_router::MediaRouterMetrics::RecordRouteCreationOutcome(
-      static_cast<MediaRouterRouteCreationOutcome>(outcome));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportSelectedCastMode(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportSelectedCastMode";
-  int cast_mode_type;
-  if (!args->GetInteger(0, &cast_mode_type)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  DCHECK(IsValidCastModeNum(cast_mode_type));
-  base::UmaHistogramSparse("MediaRouter.Ui.Navigate.SourceSelection",
-                           cast_mode_type);
-  media_router_ui_->RecordCastModeSelection(
-      static_cast<MediaCastMode>(cast_mode_type));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportSinkCount(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportSinkCount";
-  int sink_count;
-  if (!args->GetInteger(0, &sink_count)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  MediaRouterMetrics::RecordDeviceCount(sink_count);
-}
-
-void MediaRouterWebUIMessageHandler::OnReportTimeToClickSink(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportTimeToClickSink";
-  double time_to_click;
-  if (!args->GetDouble(0, &time_to_click)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  MediaRouterMetrics::RecordStartLocalSessionLatency(
-      base::TimeDelta::FromMillisecondsD(time_to_click));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportWebUIRouteControllerLoaded(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportWebUIRouteControllerLoaded";
-  double load_time;
-  if (!args->GetDouble(0, &load_time)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  UMA_HISTOGRAM_TIMES("MediaRouter.Ui.Dialog.LoadedWebUiRouteController",
-                      base::TimeDelta::FromMillisecondsD(load_time));
-}
-
-void MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnReportTimeToInitialActionClose";
-  double time_to_close;
-  if (!args->GetDouble(0, &time_to_close)) {
-    DVLOG(1) << "Unable to extract args.";
-    return;
-  }
-  MediaRouterMetrics::RecordCloseDialogLatency(
-      base::TimeDelta::FromMillisecondsD(time_to_close));
-}
-
-void MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnSearchSinksAndCreateRoute";
-  const base::DictionaryValue* args_dict = nullptr;
-  std::string sink_id;
-  std::string search_criteria;
-  std::string domain;
-  int cast_mode_num = -1;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetString("sinkId", &sink_id) ||
-      !args_dict->GetString("searchCriteria", &search_criteria) ||
-      !args_dict->GetString("domain", &domain) ||
-      !args_dict->GetInteger("selectedCastMode", &cast_mode_num)) {
-    DVLOG(1) << "Unable to extract args";
-    return;
-  }
-
-  if (search_criteria.empty()) {
-    DVLOG(1) << "Media Router UI did not provide valid search criteria. "
-                "Aborting.";
-    return;
-  }
-
-  if (!IsValidCastModeNum(cast_mode_num)) {
-    DVLOG(1) << "Invalid cast mode: " << cast_mode_num << ". Aborting.";
-    return;
-  }
-
-  media_router_ui_->SearchSinksAndCreateRoute(
-      sink_id, search_criteria, domain,
-      static_cast<MediaCastMode>(cast_mode_num));
-}
-
-void MediaRouterWebUIMessageHandler::OnSelectLocalMediaFile(
-    const base::ListValue* args) {
-  media_router_ui_->OpenFileDialog();
-}
-
-void MediaRouterWebUIMessageHandler::OnInitialDataReceived(
-    const base::ListValue* args) {
-  DVLOG(1) << "OnInitialDataReceived";
-  media_router_ui_->OnUIInitialDataReceived();
-  MaybeUpdateFirstRunFlowData();
-}
-
-void MediaRouterWebUIMessageHandler::OnMediaControllerAvailable(
-    const base::ListValue* args) {
-  const base::DictionaryValue* args_dict = nullptr;
-  std::string route_id;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetString("routeId", &route_id)) {
-    DVLOG(1) << "Unable to extract media route ID";
-    return;
-  }
-  media_router_ui_->OnMediaControllerUIAvailable(route_id);
-}
-
-void MediaRouterWebUIMessageHandler::OnMediaControllerClosed(
-    const base::ListValue* args) {
-  current_media_status_.reset();
-  media_router_ui_->OnMediaControllerUIClosed();
-}
-
-void MediaRouterWebUIMessageHandler::OnPauseCurrentMedia(
-    const base::ListValue* args) {
-  MediaRouteController* route_controller =
-      media_router_ui_->GetMediaRouteController();
-  if (route_controller)
-    route_controller->Pause();
-}
-
-void MediaRouterWebUIMessageHandler::OnPlayCurrentMedia(
-    const base::ListValue* args) {
-  MediaRouteController* route_controller =
-      media_router_ui_->GetMediaRouteController();
-  if (route_controller)
-    route_controller->Play();
-}
-
-void MediaRouterWebUIMessageHandler::OnSeekCurrentMedia(
-    const base::ListValue* args) {
-  const base::DictionaryValue* args_dict = nullptr;
-  double time;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetDouble("time", &time)) {
-    DVLOG(1) << "Unable to extract time";
-    return;
-  }
-  base::TimeDelta time_delta = base::TimeDelta::FromSecondsD(time);
-  MediaRouteController* route_controller =
-      media_router_ui_->GetMediaRouteController();
-  if (route_controller && current_media_status_ &&
-      time_delta >= base::TimeDelta() &&
-      time_delta <= current_media_status_->duration) {
-    route_controller->Seek(time_delta);
-  }
-}
-
-void MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute(
-    const base::ListValue* args) {
-  const base::DictionaryValue* args_dict = nullptr;
-  bool mute;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetBoolean("mute", &mute)) {
-    DVLOG(1) << "Unable to extract mute";
-    return;
-  }
-  MediaRouteController* route_controller =
-      media_router_ui_->GetMediaRouteController();
-  if (route_controller)
-    route_controller->SetMute(mute);
-}
-
-void MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume(
-    const base::ListValue* args) {
-  const base::DictionaryValue* args_dict = nullptr;
-  double volume;
-  if (!args->GetDictionary(0, &args_dict) ||
-      !args_dict->GetDouble("volume", &volume)) {
-    DVLOG(1) << "Unable to extract volume";
-    return;
-  }
-  MediaRouteController* route_controller =
-      media_router_ui_->GetMediaRouteController();
-  if (route_controller && volume >= 0 && volume <= 1)
-    route_controller->SetVolume(volume);
-}
-
-void MediaRouterWebUIMessageHandler::OnSetMediaRemotingEnabled(
-    const base::ListValue* args) {
-  bool media_remoting_enabled;
-  if (!args->GetBoolean(0, &media_remoting_enabled)) {
-    DVLOG(1) << "Unable to extract media remoting value";
-    return;
-  }
-  MirroringMediaRouteController* mirroring_controller =
-      MirroringMediaRouteController::From(
-          media_router_ui_->GetMediaRouteController());
-  if (!mirroring_controller) {
-    DVLOG(1) << "Unable to get mirroring controller";
-    return;
-  }
-
-  mirroring_controller->SetMediaRemotingEnabled(media_remoting_enabled);
-}
-
-void MediaRouterWebUIMessageHandler::OnSetHangoutsLocalPresent(
-    const base::ListValue* args) {
-  bool local_present;
-  if (!args->GetBoolean(0, &local_present)) {
-    DVLOG(1) << "Unable to extract local present";
-    return;
-  }
-  HangoutsMediaRouteController* hangouts_controller =
-      HangoutsMediaRouteController::From(
-          media_router_ui_->GetMediaRouteController());
-  if (!hangouts_controller) {
-    DVLOG(1) << "Unable to get hangouts controller";
-    return;
-  }
-
-  hangouts_controller->SetLocalPresent(local_present);
-}
-
-bool MediaRouterWebUIMessageHandler::ActOnIssueType(
-    IssueInfo::Action action_type,
-    const base::DictionaryValue* args) {
-  if (action_type == IssueInfo::Action::LEARN_MORE) {
-    std::string learn_more_url = GetLearnMoreUrl(args);
-    if (learn_more_url.empty())
-      return false;
-    auto open_args = std::make_unique<base::ListValue>();
-    open_args->AppendString(learn_more_url);
-    web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args);
-    return true;
-  } else {
-    // Do nothing; no other issue action types require any other action.
-    return true;
-  }
-}
-
-void MediaRouterWebUIMessageHandler::MaybeUpdateFirstRunFlowData() {
-  base::DictionaryValue first_run_flow_data;
-
-  Profile* profile = Profile::FromWebUI(web_ui());
-  PrefService* pref_service = profile->GetPrefs();
-
-  bool first_run_flow_acknowledged =
-      pref_service->GetBoolean(::prefs::kMediaRouterFirstRunFlowAcknowledged);
-  bool show_cloud_pref = false;
-  // Cloud services preference is shown if user is logged in. If the user
-  // enables sync after acknowledging the first run flow, this is treated as
-  // the user opting into Google services, including cloud services, if the
-  // browser is a Chrome branded build.
-  if (!pref_service->GetBoolean(::prefs::kMediaRouterCloudServicesPrefSet)) {
-    identity::IdentityManager* identity_manager =
-        IdentityManagerFactory::GetForProfile(profile);
-    if (identity_manager && identity_manager->HasPrimaryAccount()) {
-      // If the user had previously acknowledged the first run flow without
-      // being shown the cloud services option, and is now logged in with sync
-      // enabled, turn on cloud services.
-      if (first_run_flow_acknowledged &&
-          ProfileSyncServiceFactory::GetForProfile(profile)
-              ->IsSyncFeatureActive()) {
-        pref_service->SetBoolean(::prefs::kMediaRouterEnableCloudServices,
-                                 true);
-        pref_service->SetBoolean(::prefs::kMediaRouterCloudServicesPrefSet,
-                                 true);
-        // Return early since the first run flow won't be surfaced.
-        return;
-      }
-
-      show_cloud_pref = true;
-      // "Casting to a Hangout from Chrome" Chromecast help center page.
-      first_run_flow_data.SetString(
-          "firstRunFlowCloudPrefLearnMoreUrl",
-          base::StringPrintf(kHelpPageUrlPrefix, 6320939));
-    }
-  }
-
-  // Return early if the first run flow won't be surfaced.
-  if (first_run_flow_acknowledged && !show_cloud_pref)
-    return;
-
-  // General Chromecast learn more page.
-  first_run_flow_data.SetString("firstRunFlowLearnMoreUrl",
-                                kCastLearnMorePageUrl);
-  first_run_flow_data.SetBoolean("wasFirstRunFlowAcknowledged",
-                                 first_run_flow_acknowledged);
-  first_run_flow_data.SetBoolean("showFirstRunFlowCloudPref", show_cloud_pref);
-  web_ui()->CallJavascriptFunctionUnsafe(kSetFirstRunFlowData,
-                                         first_run_flow_data);
-}
-
-AccountInfo MediaRouterWebUIMessageHandler::GetAccountInfo() {
-  identity::IdentityManager* identity_manager =
-      IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()));
-  if (!identity_manager)
-    return AccountInfo();
-  base::Optional<AccountInfo> primary_account_info =
-      identity_manager->FindExtendedAccountInfoForAccount(
-          identity_manager->GetPrimaryAccountInfo());
-  return primary_account_info.value_or(AccountInfo{});
-}
-
-int MediaRouterWebUIMessageHandler::CurrentCastModeForRouteId(
-    const MediaRoute::Id& route_id,
-    const std::unordered_map<MediaRoute::Id, MediaCastMode>& current_cast_modes)
-    const {
-  auto current_cast_mode_entry = current_cast_modes.find(route_id);
-  int current_cast_mode = current_cast_mode_entry != current_cast_modes.end()
-                              ? current_cast_mode_entry->second
-                              : -1;
-  return current_cast_mode;
-}
-
-std::unique_ptr<base::ListValue> MediaRouterWebUIMessageHandler::RoutesToValue(
-    const std::vector<MediaRoute>& routes,
-    const std::vector<MediaRoute::Id>& joinable_route_ids,
-    const std::unordered_map<MediaRoute::Id, MediaCastMode>& current_cast_modes)
-    const {
-  auto value = std::make_unique<base::ListValue>();
-
-  for (const MediaRoute& route : routes) {
-    bool can_join = base::Contains(joinable_route_ids, route.media_route_id());
-    int current_cast_mode =
-        CurrentCastModeForRouteId(route.media_route_id(), current_cast_modes);
-    std::unique_ptr<base::DictionaryValue> route_val(
-        RouteToValue(route, can_join, incognito_, current_cast_mode));
-    value->Append(std::move(route_val));
-  }
-
-  return value;
-}
-
-void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) {
-  set_web_ui(web_ui);
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
deleted file mode 100644
index 85d5559..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEBUI_MESSAGE_HANDLER_H_
-#define CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEBUI_MESSAGE_HANDLER_H_
-
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <vector>
-
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/optional.h"
-#include "chrome/browser/ui/media_router/media_cast_mode.h"
-#include "chrome/browser/ui/media_router/media_sink_with_cast_modes.h"
-#include "chrome/common/media_router/issue.h"
-#include "chrome/common/media_router/media_status.h"
-#include "components/signin/core/browser/account_info.h"
-#include "content/public/browser/web_ui_message_handler.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace base {
-class DictionaryValue;
-class ListValue;
-}  // namespace base
-
-namespace content {
-class WebUI;
-}
-
-namespace media_router {
-
-class Issue;
-class MediaRoute;
-class MediaRouterUI;
-
-// The handler for Javascript messages related to the media router dialog.
-class MediaRouterWebUIMessageHandler : public content::WebUIMessageHandler {
- public:
-  explicit MediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui);
-  ~MediaRouterWebUIMessageHandler() override;
-
-  // Methods to update the status displayed by the dialog.
-  virtual void UpdateSinks(const std::vector<MediaSinkWithCastModes>& sinks);
-  void UpdateRoutes(const std::vector<MediaRoute>& routes,
-                    const std::vector<MediaRoute::Id>& joinable_route_ids,
-                    const std::unordered_map<MediaRoute::Id, MediaCastMode>&
-                        current_cast_modes);
-  // Overridden in tests.
-  virtual void UpdateCastModes(const CastModeSet& cast_modes,
-                               const std::string& source_host,
-                               base::Optional<MediaCastMode> forced_cast_mode);
-  void OnCreateRouteResponseReceived(const MediaSink::Id& sink_id,
-                                     const MediaRoute* route);
-  void ReturnSearchResult(const std::string& sink_id);
-
-  virtual void UpdateIssue(const Issue& issue);
-  void ClearIssue();
-
-  // Updates the maximum dialog height to allow the WebUI properly scale when
-  // the browser window changes.
-  void UpdateMaxDialogHeight(int height);
-
-  // Notifies the WebUI with an updated MediaStatus. Overridden in tests.
-  virtual void UpdateMediaRouteStatus(const MediaStatus& status);
-
-  // Notifies the WebUI that the controller for the selected route has been
-  // invalidated.
-  void OnRouteControllerInvalidated();
-
-  // Called when the user has selected a file and the name should be relayed to
-  // the UI.
-  void UserSelectedLocalMediaFile(base::FilePath::StringType file_name);
-
-  void SetWebUIForTest(content::WebUI* webui);
-  void set_incognito_for_test(bool incognito) { incognito_ = incognito; }
-
- private:
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           RecordCastModeSelection);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           RetrieveCastModeSelection);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           OnRouteDetailsOpenedAndClosed);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           OnMediaCommandsReceived);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           OnInvalidMediaCommandsReceived);
-  FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
-                           OnSetMediaRemotingEnabled);
-
-  // WebUIMessageHandler implementation.
-  void RegisterMessages() override;
-
-  // Handlers for JavaScript messages.
-  // See media_router_ui_interface.js for documentation on parameters.
-  void OnRequestInitialData(const base::ListValue* args);
-  void OnCreateRoute(const base::ListValue* args);
-  void OnAcknowledgeFirstRunFlow(const base::ListValue* args);
-  void OnActOnIssue(const base::ListValue* args);
-  void OnCloseRoute(const base::ListValue* args);
-  void OnJoinRoute(const base::ListValue* args);
-  void OnCloseDialog(const base::ListValue* args);
-  void OnReportBlur(const base::ListValue* args);
-  void OnReportClickedSinkIndex(const base::ListValue* args);
-  void OnReportFilter(const base::ListValue* args);
-  void OnReportInitialAction(const base::ListValue* args);
-  void OnReportInitialState(const base::ListValue* args);
-  void OnReportNavigateToView(const base::ListValue* args);
-  void OnReportRouteCreation(const base::ListValue* args);
-  void OnReportRouteCreationOutcome(const base::ListValue* args);
-  void OnReportSelectedCastMode(const base::ListValue* args);
-  void OnReportSinkCount(const base::ListValue* args);
-  void OnReportTimeToClickSink(const base::ListValue* args);
-  void OnReportWebUIRouteControllerLoaded(const base::ListValue* args);
-  void OnReportTimeToInitialActionClose(const base::ListValue* args);
-  void OnMediaControllerAvailable(const base::ListValue* args);
-  void OnMediaControllerClosed(const base::ListValue* args);
-  void OnSearchSinksAndCreateRoute(const base::ListValue* args);
-  void OnSelectLocalMediaFile(const base::ListValue* args);
-  void OnInitialDataReceived(const base::ListValue* args);
-
-  // Handlers for JavaScript messages to control the media.
-  void OnPlayCurrentMedia(const base::ListValue* args);
-  void OnPauseCurrentMedia(const base::ListValue* args);
-  void OnSeekCurrentMedia(const base::ListValue* args);
-  void OnSetCurrentMediaMute(const base::ListValue* args);
-  void OnSetCurrentMediaVolume(const base::ListValue* args);
-  void OnSetHangoutsLocalPresent(const base::ListValue* args);
-  void OnSetMediaRemotingEnabled(const base::ListValue* args);
-
-  // Performs an action for an Issue of |type|.
-  // |args| contains additional parameter that varies based on |type|.
-  // Returns |true| if the action was successfully performed.
-  bool ActOnIssueType(IssueInfo::Action type,
-                      const base::DictionaryValue* args);
-
-  // May update the first run flow related properties in the WebUI. This is
-  // called after the initial data is received to avoid unnecessary work when
-  // initializing the WebUI.
-  void MaybeUpdateFirstRunFlowData();
-
-  // Returns the current cast mode for the route with ID |route_id| or -1 if the
-  // route has no current cast mode.
-  int CurrentCastModeForRouteId(
-      const MediaRoute::Id& route_id,
-      const std::unordered_map<MediaRoute::Id, MediaCastMode>&
-          current_cast_modes) const;
-
-  // Converts |routes| and |joinable_route_ids| into base::ListValue that can be
-  // passed to WebUI.
-  std::unique_ptr<base::ListValue> RoutesToValue(
-      const std::vector<MediaRoute>& routes,
-      const std::vector<MediaRoute::Id>& joinable_route_ids,
-      const std::unordered_map<MediaRoute::Id, MediaCastMode>&
-          current_cast_modes) const;
-
-  // Retrieve the account info for email and domain of signed in users. This is
-  // used when updating sinks to determine if identity should be displayed.
-  // Marked virtual for tests.
-  virtual AccountInfo GetAccountInfo();
-
-  // |true| if the associated Profile is incognito.
-  bool incognito_;
-
-  // Keeps track of whether a command to close the dialog has been issued.
-  bool dialog_closing_;
-
-  // The media status currently shown in the UI.
-  base::Optional<MediaStatus> current_media_status_;
-
-  MediaRouterUI* media_router_ui_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaRouterWebUIMessageHandler);
-};
-
-}  // namespace media_router
-
-#endif  // CHROME_BROWSER_UI_WEBUI_MEDIA_ROUTER_MEDIA_ROUTER_WEBUI_MESSAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
deleted file mode 100644
index 57df585..0000000
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
+++ /dev/null
@@ -1,691 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
-
-#include <memory>
-#include <set>
-#include <utility>
-
-#include "base/macros.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/media/router/test/media_router_mojo_test.h"
-#include "chrome/browser/media/router/test/mock_media_router.h"
-#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
-#include "chrome/browser/ui/webui/media_router/media_router_web_ui_test.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/test/test_web_ui.h"
-#include "extensions/common/constants.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using testing::_;
-using testing::Return;
-using testing::ReturnRef;
-
-namespace media_router {
-
-namespace {
-
-const char kUserEmailForTesting[] = "nobody@example.com";
-const char kUserDomainForTesting[] = "example.com";
-
-bool GetBooleanFromDict(const base::DictionaryValue* dict,
-                        const std::string& key) {
-  bool value = false;
-  EXPECT_TRUE(dict->GetBoolean(key, &value));
-  return value;
-}
-
-double GetDoubleFromDict(const base::DictionaryValue* dict,
-                         const std::string& key) {
-  double value = 0;
-  EXPECT_TRUE(dict->GetDouble(key, &value));
-  return value;
-}
-
-int GetIntegerFromDict(const base::DictionaryValue* dict,
-                       const std::string& key) {
-  int value = 0;
-  EXPECT_TRUE(dict->GetInteger(key, &value));
-  return value;
-}
-
-std::string GetStringFromDict(const base::DictionaryValue* dict,
-                              const std::string& key) {
-  std::string value;
-  EXPECT_TRUE(dict->GetString(key, &value));
-  return value;
-}
-
-// Creates a local route for display.
-MediaRoute CreateRoute() {
-  MediaRoute::Id route_id("routeId123");
-  MediaSink::Id sink_id("sinkId123");
-  MediaSink sink(sink_id, "The sink", SinkIconType::CAST);
-  std::string description("This is a route");
-  bool is_local = true;
-  bool is_for_display = true;
-  MediaRoute route(route_id, MediaSource("mediaSource"), sink_id, description,
-                   is_local, is_for_display);
-
-  return route;
-}
-
-MediaSinkWithCastModes CreateMediaSinkWithCastMode(const std::string& sink_id,
-                                                   MediaCastMode cast_mode) {
-  std::string sink_name("The sink");
-  MediaSinkWithCastModes media_sink_with_cast_modes(
-      MediaSink(sink_id, sink_name, SinkIconType::CAST));
-  media_sink_with_cast_modes.cast_modes.insert(cast_mode);
-
-  return media_sink_with_cast_modes;
-}
-
-}  // namespace
-
-class MockMediaRouterUI : public MediaRouterUI {
- public:
-  explicit MockMediaRouterUI(content::WebUI* web_ui)
-      : MediaRouterUI(web_ui) {}
-  ~MockMediaRouterUI() override {}
-
-  MOCK_METHOD0(OnUIInitialized, void());
-  MOCK_CONST_METHOD0(UserSelectedTabMirroringForCurrentOrigin, bool());
-  MOCK_METHOD1(RecordCastModeSelection, void(MediaCastMode cast_mode));
-  MOCK_CONST_METHOD0(GetPresentationRequestSourceName, std::string());
-  MOCK_CONST_METHOD0(GetCastModes, const std::set<MediaCastMode>&());
-  MOCK_METHOD1(OnMediaControllerUIAvailable,
-               void(const MediaRoute::Id& route_id));
-  MOCK_METHOD0(OnMediaControllerUIClosed, void());
-  MOCK_METHOD0(PlayRoute, void());
-  MOCK_METHOD0(PauseRoute, void());
-  MOCK_METHOD1(SeekRoute, void(base::TimeDelta time));
-  MOCK_METHOD1(SetRouteMute, void(bool mute));
-  MOCK_METHOD1(SetRouteVolume, void(float volume));
-  MOCK_CONST_METHOD0(GetMediaRouteController, MediaRouteController*());
-};
-
-class TestMediaRouterWebUIMessageHandler
-    : public MediaRouterWebUIMessageHandler {
- public:
-  explicit TestMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui)
-      : MediaRouterWebUIMessageHandler(media_router_ui),
-        email_(kUserEmailForTesting),
-        domain_(kUserDomainForTesting) {}
-  ~TestMediaRouterWebUIMessageHandler() override = default;
-
-  AccountInfo GetAccountInfo() override {
-    AccountInfo info = AccountInfo();
-    info.account_id = info.gaia = info.email = email_;
-    info.hosted_domain = domain_;
-    info.full_name = info.given_name = "name";
-    info.locale = "locale";
-    info.picture_url = "picture";
-
-    return info;
-  }
-
-  void SetEmailAndDomain(const std::string& email, const std::string& domain) {
-    email_ = email;
-    domain_ = domain;
-  }
-
- private:
-  std::string email_;
-  std::string domain_;
-};
-
-class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
- public:
-  MediaRouterWebUIMessageHandlerTest()
-      : web_ui_(std::make_unique<content::TestWebUI>()) {}
-  ~MediaRouterWebUIMessageHandlerTest() override {}
-
-  // BrowserWithTestWindowTest:
-  void SetUp() override {
-    BrowserWithTestWindowTest::SetUp();
-    chrome::NewTab(browser());
-    web_ui_->set_web_contents(
-        browser()->tab_strip_model()->GetActiveWebContents());
-    mock_media_router_ui_ = std::make_unique<MockMediaRouterUI>(web_ui_.get());
-    handler_ = std::make_unique<TestMediaRouterWebUIMessageHandler>(
-        mock_media_router_ui_.get());
-    handler_->SetWebUIForTest(web_ui_.get());
-  }
-
-  void TearDown() override {
-    handler_.reset();
-    mock_media_router_ui_.reset();
-    web_ui_.reset();
-    BrowserWithTestWindowTest::TearDown();
-  }
-
-  const std::string& provider_extension_id() const {
-    return provider_extension_id_;
-  }
-
-  // Gets the call data for the function call made to |web_ui_|. There needs
-  // to be one call made, and its function name must be |function_name|.
-  const base::Value* GetCallData(const std::string& function_name) {
-    CHECK_EQ(1u, web_ui_->call_data().size());
-    const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
-    CHECK(function_name == call_data.function_name());
-    return call_data.arg1();
-  }
-
-  // Gets the dictionary passed into a call to the |web_ui_| as the argument.
-  // There needs to be one call made, and its function name must be
-  // |function_name|.
-  const base::DictionaryValue* ExtractDictFromCallArg(
-      const std::string& function_name) {
-    const base::DictionaryValue* dict_value = nullptr;
-    CHECK(GetCallData(function_name)->GetAsDictionary(&dict_value));
-    return dict_value;
-  }
-
-  // Gets the list passed into a call to the |web_ui_| as the argument.
-  // There needs to be one call made, and its function name must be
-  // |function_name|.
-  const base::ListValue* ExtractListFromCallArg(
-      const std::string& function_name) {
-    const base::ListValue* list_value = nullptr;
-    CHECK(GetCallData(function_name)->GetAsList(&list_value));
-    return list_value;
-  }
-
-  // Gets the first element of the list passed in as the argument to a call to
-  // the |web_ui_| as a dictionary. There needs to be one call made, and its
-  // function name must be |function_name|.
-  const base::DictionaryValue* ExtractDictFromListFromCallArg(
-      const std::string& function_name) {
-    const base::ListValue* list_value = nullptr;
-    CHECK(GetCallData(function_name)->GetAsList(&list_value));
-    const base::DictionaryValue* dict_value = nullptr;
-    CHECK(list_value->GetDictionary(0, &dict_value));
-    return dict_value;
-  }
-
-  MockMediaRouter* router() { return &router_; }
-
- protected:
-  std::unique_ptr<content::TestWebUI> web_ui_;
-  MockMediaRouter router_;
-  std::unique_ptr<MockMediaRouterUI> mock_media_router_ui_;
-  std::unique_ptr<TestMediaRouterWebUIMessageHandler> handler_;
-  const std::string provider_extension_id_;
-};
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) {
-  MediaSink::Id sink_id("sinkId123");
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode(sink_id, MediaCastMode::TAB_MIRROR);
-
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  // Email is not displayed if there is no sinks with domain.
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
-
-  // Domain is not displayed if there is no sinks with domain.
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
-
-  const base::ListValue* sinks_list_value = nullptr;
-  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
-  const base::DictionaryValue* sink_value = nullptr;
-  ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
-
-  EXPECT_EQ(sink_id, GetStringFromDict(sink_value, "id"));
-  EXPECT_EQ(media_sink_with_cast_modes.sink.name(),
-            GetStringFromDict(sink_value, "name"));
-  EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR),
-            GetIntegerFromDict(sink_value, "castModes"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentity) {
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
-  media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
-
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  EXPECT_TRUE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
-  // Sink domain is not displayed if it matches user domain.
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
-  EXPECT_EQ(kUserEmailForTesting,
-            GetStringFromDict(sinks_with_identity_value, "userEmail"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest,
-       UpdateSinksWithIdentityAndPseudoSink) {
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode("pseudo:sinkId1", MediaCastMode::TAB_MIRROR);
-  media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
-
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) {
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
-  std::string domain_name("google.com");
-  media_sink_with_cast_modes.sink.set_domain(domain_name);
-
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  // Domain is displayed for sinks with domains that are not the user domain.
-  EXPECT_TRUE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) {
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
-  std::string user_email("nobody@gmail.com");
-  std::string user_domain("NO_HOSTED_DOMAIN");
-  std::string domain_name("default");
-  media_sink_with_cast_modes.sink.set_domain(domain_name);
-
-  handler_->SetEmailAndDomain(user_email, user_domain);
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  const base::ListValue* sinks_list_value = nullptr;
-  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
-  const base::DictionaryValue* sink_value = nullptr;
-  ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
-
-  // Domain should not be shown if there were only default sink domains.
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
-
-  // Sink domain should be empty if user has no hosted domain.
-  EXPECT_EQ(std::string(), GetStringFromDict(sink_value, "domain"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) {
-  MediaSinkWithCastModes media_sink_with_cast_modes =
-      CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
-  std::string domain_name("default");
-  media_sink_with_cast_modes.sink.set_domain(domain_name);
-
-  handler_->UpdateSinks({media_sink_with_cast_modes});
-  const base::DictionaryValue* sinks_with_identity_value =
-      ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
-
-  const base::ListValue* sinks_list_value = nullptr;
-  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
-  const base::DictionaryValue* sink_value = nullptr;
-  ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
-
-  // Domain should not be shown if there were only default sink domains.
-  EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
-
-  // Sink domain should be updated from 'default' to user domain.
-  EXPECT_EQ(kUserDomainForTesting, GetStringFromDict(sink_value, "domain"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) {
-  const MediaRoute route = CreateRoute();
-  std::vector<MediaRoute::Id> joinable_route_ids = {route.media_route_id()};
-  std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
-  current_cast_modes.insert(
-      std::make_pair(route.media_route_id(), MediaCastMode::PRESENTATION));
-
-  handler_->UpdateRoutes({route}, joinable_route_ids, current_cast_modes);
-  const base::DictionaryValue* route_value =
-      ExtractDictFromListFromCallArg("media_router.ui.setRouteList");
-
-  EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
-  EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
-  EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
-  EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
-  EXPECT_TRUE(GetBooleanFromDict(route_value, "canJoin"));
-  EXPECT_EQ(MediaCastMode::PRESENTATION,
-            GetIntegerFromDict(route_value, "currentCastMode"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutesIncognito) {
-  handler_->set_incognito_for_test(true);
-  const MediaRoute route = CreateRoute();
-
-  handler_->UpdateRoutes({route}, std::vector<MediaRoute::Id>(),
-                         std::unordered_map<MediaRoute::Id, MediaCastMode>());
-  const base::DictionaryValue* route_value =
-      ExtractDictFromListFromCallArg("media_router.ui.setRouteList");
-
-  EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
-  EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
-  EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
-  EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
-  EXPECT_FALSE(GetBooleanFromDict(route_value, "canJoin"));
-
-  int actual_current_cast_mode = -1;
-  EXPECT_FALSE(
-      route_value->GetInteger("currentCastMode", &actual_current_cast_mode));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, SetCastModesList) {
-  CastModeSet cast_modes({MediaCastMode::PRESENTATION,
-                          MediaCastMode::TAB_MIRROR,
-                          MediaCastMode::DESKTOP_MIRROR});
-  handler_->UpdateCastModes(cast_modes, "www.host.com",
-                            MediaCastMode::PRESENTATION);
-  const base::ListValue* set_cast_mode_list =
-      ExtractListFromCallArg("media_router.ui.setCastModeList");
-
-  const base::DictionaryValue* cast_mode = nullptr;
-  size_t index = 0;
-  for (auto i = cast_modes.begin(); i != cast_modes.end(); i++) {
-    CHECK(set_cast_mode_list->GetDictionary(index++, &cast_mode));
-    EXPECT_EQ(static_cast<int>(*i), GetIntegerFromDict(cast_mode, "type"));
-    EXPECT_EQ(MediaCastModeToDescription(*i, "www.host.com"),
-              GetStringFromDict(cast_mode, "description"));
-    EXPECT_EQ("www.host.com", GetStringFromDict(cast_mode, "host"));
-    EXPECT_EQ(*i == MediaCastMode::PRESENTATION,
-              GetBooleanFromDict(cast_mode, "isForced"));
-  }
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateMediaRouteStatus) {
-  MediaStatus status;
-  status.title = "test title";
-  status.can_play_pause = true;
-  status.can_set_volume = true;
-  status.play_state = MediaStatus::PlayState::BUFFERING;
-  status.duration = base::TimeDelta::FromSeconds(90);
-  status.current_time = base::TimeDelta::FromSeconds(80);
-  status.volume = 0.9;
-  // |status.hangouts_extra_data->local_present| defaults to |false|.
-  status.hangouts_extra_data.emplace();
-  status.mirroring_extra_data.emplace(true);
-
-  handler_->UpdateMediaRouteStatus(status);
-  const base::DictionaryValue* status_value =
-      ExtractDictFromCallArg("media_router.ui.updateRouteStatus");
-
-  EXPECT_EQ(status.title, GetStringFromDict(status_value, "title"));
-  EXPECT_EQ(status.can_play_pause,
-            GetBooleanFromDict(status_value, "canPlayPause"));
-  EXPECT_EQ(status.can_mute, GetBooleanFromDict(status_value, "canMute"));
-  EXPECT_EQ(status.can_set_volume,
-            GetBooleanFromDict(status_value, "canSetVolume"));
-  EXPECT_EQ(status.can_seek, GetBooleanFromDict(status_value, "canSeek"));
-  EXPECT_EQ(static_cast<int>(status.play_state),
-            GetIntegerFromDict(status_value, "playState"));
-  EXPECT_EQ(status.is_muted, GetBooleanFromDict(status_value, "isMuted"));
-  EXPECT_EQ(status.duration.InSeconds(),
-            GetIntegerFromDict(status_value, "duration"));
-  EXPECT_EQ(status.current_time.InSeconds(),
-            GetIntegerFromDict(status_value, "currentTime"));
-  EXPECT_EQ(status.volume, GetDoubleFromDict(status_value, "volume"));
-
-  const base::Value* hangouts_extra_data = status_value->FindKeyOfType(
-      "hangoutsExtraData", base::Value::Type::DICTIONARY);
-  ASSERT_TRUE(hangouts_extra_data);
-  const base::Value* local_present_value = hangouts_extra_data->FindKeyOfType(
-      "localPresent", base::Value::Type::BOOLEAN);
-  ASSERT_TRUE(local_present_value);
-  EXPECT_FALSE(local_present_value->GetBool());
-
-  const base::Value* mirroring_extra_data = status_value->FindKeyOfType(
-      "mirroringExtraData", base::Value::Type::DICTIONARY);
-  ASSERT_TRUE(mirroring_extra_data);
-  const base::Value* media_remoting_value = mirroring_extra_data->FindKeyOfType(
-      "mediaRemotingEnabled", base::Value::Type::BOOLEAN);
-  ASSERT_TRUE(media_remoting_value);
-  EXPECT_TRUE(media_remoting_value->GetBool());
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnCreateRouteResponseReceived) {
-  MediaRoute route = CreateRoute();
-  bool incognito = false;
-  route.set_incognito(incognito);
-
-  handler_->OnCreateRouteResponseReceived(route.media_sink_id(), &route);
-
-  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
-  EXPECT_EQ("media_router.ui.onCreateRouteResponseReceived",
-            call_data.function_name());
-  std::string sink_id_value;
-  ASSERT_TRUE(call_data.arg1()->GetAsString(&sink_id_value));
-  EXPECT_EQ(route.media_sink_id(), sink_id_value);
-
-  const base::DictionaryValue* route_value = nullptr;
-  ASSERT_TRUE(call_data.arg2()->GetAsDictionary(&route_value));
-  EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
-  EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
-  EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
-  EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
-
-  bool route_for_display = false;
-  ASSERT_TRUE(call_data.arg3()->GetAsBoolean(&route_for_display));
-  EXPECT_TRUE(route_for_display);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest,
-       OnCreateRouteResponseReceivedIncognito) {
-  handler_->set_incognito_for_test(true);
-  MediaRoute route = CreateRoute();
-  bool incognito = true;
-  route.set_incognito(incognito);
-
-  handler_->OnCreateRouteResponseReceived(route.media_sink_id(), &route);
-
-  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
-  EXPECT_EQ("media_router.ui.onCreateRouteResponseReceived",
-            call_data.function_name());
-  std::string sink_id_value;
-  ASSERT_TRUE(call_data.arg1()->GetAsString(&sink_id_value));
-  EXPECT_EQ(route.media_sink_id(), sink_id_value);
-
-  const base::DictionaryValue* route_value = nullptr;
-  ASSERT_TRUE(call_data.arg2()->GetAsDictionary(&route_value));
-  EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
-  EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
-  EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
-  EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
-
-  bool route_for_display = false;
-  ASSERT_TRUE(call_data.arg3()->GetAsBoolean(&route_for_display));
-  EXPECT_TRUE(route_for_display);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
-  std::string issue_title("An issue");
-  std::string issue_message("This is an issue");
-  IssueInfo::Action default_action = IssueInfo::Action::LEARN_MORE;
-  std::vector<IssueInfo::Action> secondary_actions;
-  secondary_actions.push_back(IssueInfo::Action::DISMISS);
-  MediaRoute::Id route_id("routeId123");
-  IssueInfo info(issue_title, default_action, IssueInfo::Severity::FATAL);
-  info.message = issue_message;
-  info.secondary_actions = secondary_actions;
-  info.route_id = route_id;
-  Issue issue(info);
-  const Issue::Id& issue_id = issue.id();
-
-  handler_->UpdateIssue(issue);
-  const base::DictionaryValue* issue_value =
-      ExtractDictFromCallArg("media_router.ui.setIssue");
-
-  // Initialized to invalid issue id.
-  EXPECT_EQ(issue_id, GetIntegerFromDict(issue_value, "id"));
-  EXPECT_EQ(issue_title, GetStringFromDict(issue_value, "title"));
-  EXPECT_EQ(issue_message, GetStringFromDict(issue_value, "message"));
-
-  // Initialized to invalid action type.
-  EXPECT_EQ(static_cast<int>(default_action),
-            GetIntegerFromDict(issue_value, "defaultActionType"));
-  EXPECT_EQ(static_cast<int>(secondary_actions[0]),
-            GetIntegerFromDict(issue_value, "secondaryActionType"));
-  EXPECT_EQ(route_id, GetStringFromDict(issue_value, "routeId"));
-
-  // The issue is blocking since it is FATAL.
-  EXPECT_TRUE(GetBooleanFromDict(issue_value, "isBlocking"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, RecordCastModeSelection) {
-  base::ListValue args;
-  args.AppendInteger(MediaCastMode::PRESENTATION);
-  EXPECT_CALL(*mock_media_router_ui_,
-              RecordCastModeSelection(MediaCastMode::PRESENTATION))
-      .Times(1);
-  handler_->OnReportSelectedCastMode(&args);
-
-  args.Clear();
-  args.AppendInteger(MediaCastMode::TAB_MIRROR);
-  EXPECT_CALL(*mock_media_router_ui_,
-              RecordCastModeSelection(MediaCastMode::TAB_MIRROR))
-      .Times(1);
-  handler_->OnReportSelectedCastMode(&args);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, RetrieveCastModeSelection) {
-  base::ListValue args;
-  std::set<MediaCastMode> cast_modes = {MediaCastMode::TAB_MIRROR};
-  EXPECT_CALL(*mock_media_router_ui_, GetCastModes())
-      .WillRepeatedly(ReturnRef(cast_modes));
-
-  EXPECT_CALL(*mock_media_router_ui_, GetPresentationRequestSourceName())
-      .WillRepeatedly(Return("source"));
-  EXPECT_CALL(*mock_media_router_ui_,
-              UserSelectedTabMirroringForCurrentOrigin())
-      .WillOnce(Return(true));
-  handler_->OnRequestInitialData(&args);
-  const content::TestWebUI::CallData& call_data1 = *web_ui_->call_data()[0];
-  ASSERT_EQ("media_router.ui.setInitialData", call_data1.function_name());
-  const base::DictionaryValue* initial_data = nullptr;
-  ASSERT_TRUE(call_data1.arg1()->GetAsDictionary(&initial_data));
-  EXPECT_TRUE(GetBooleanFromDict(initial_data, "useTabMirroring"));
-
-  EXPECT_CALL(*mock_media_router_ui_,
-              UserSelectedTabMirroringForCurrentOrigin())
-      .WillOnce(Return(false));
-  handler_->OnRequestInitialData(&args);
-  const content::TestWebUI::CallData& call_data2 = *web_ui_->call_data()[1];
-  ASSERT_EQ("media_router.ui.setInitialData", call_data2.function_name());
-  ASSERT_TRUE(call_data2.arg1()->GetAsDictionary(&initial_data));
-  EXPECT_FALSE(GetBooleanFromDict(initial_data, "useTabMirroring"));
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteDetailsOpenedAndClosed) {
-  const std::string route_id = "routeId123";
-  base::ListValue args_list;
-  base::DictionaryValue* args;
-  args_list.Append(std::make_unique<base::DictionaryValue>());
-  args_list.GetDictionary(0, &args);
-  args->SetString("routeId", route_id);
-
-  EXPECT_CALL(*mock_media_router_ui_, OnMediaControllerUIAvailable(route_id));
-  handler_->OnMediaControllerAvailable(&args_list);
-
-  args_list.Clear();
-  EXPECT_CALL(*mock_media_router_ui_, OnMediaControllerUIClosed());
-  handler_->OnMediaControllerClosed(&args_list);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) {
-  auto controller = base::MakeRefCounted<MockMediaRouteController>(
-      "routeId", profile(), router());
-  EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
-      .WillRepeatedly(Return(controller.get()));
-  MediaStatus status;
-  status.duration = base::TimeDelta::FromSeconds(100);
-  handler_->UpdateMediaRouteStatus(status);
-
-  base::ListValue args_list;
-
-  EXPECT_CALL(*controller, Play());
-  handler_->OnPlayCurrentMedia(&args_list);
-
-  EXPECT_CALL(*controller, Pause());
-  handler_->OnPauseCurrentMedia(&args_list);
-
-  base::DictionaryValue* args;
-  args_list.Append(std::make_unique<base::DictionaryValue>());
-  args_list.GetDictionary(0, &args);
-
-  const double time = 50.1;
-  args->SetDouble("time", time);
-  EXPECT_CALL(*controller, Seek(base::TimeDelta::FromSecondsD(time)));
-  handler_->OnSeekCurrentMedia(&args_list);
-
-  args->Clear();
-  args->SetBoolean("mute", true);
-  EXPECT_CALL(*controller, SetMute(true));
-  handler_->OnSetCurrentMediaMute(&args_list);
-
-  const double volume = 0.4;
-  args->Clear();
-  args->SetDouble("volume", volume);
-  EXPECT_CALL(*controller, SetVolume(volume));
-  handler_->OnSetCurrentMediaVolume(&args_list);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnSetMediaRemotingEnabled) {
-  auto controller = base::MakeRefCounted<MirroringMediaRouteController>(
-      "routeId", profile(), router());
-  EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
-      .WillRepeatedly(Return(controller.get()));
-
-  base::ListValue args_list;
-  args_list.GetList().emplace_back(false);
-  handler_->OnSetMediaRemotingEnabled(&args_list);
-  EXPECT_FALSE(controller->media_remoting_enabled());
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnInvalidMediaCommandsReceived) {
-  auto controller = base::MakeRefCounted<MockMediaRouteController>(
-      "routeId", profile(), router());
-  EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
-      .WillRepeatedly(Return(controller.get()));
-
-  MediaStatus status;
-  status.duration = base::TimeDelta::FromSeconds(100);
-  handler_->UpdateMediaRouteStatus(status);
-
-  EXPECT_CALL(*controller, Seek(_)).Times(0);
-  EXPECT_CALL(*controller, SetVolume(_)).Times(0);
-
-  base::ListValue args_list;
-
-  base::DictionaryValue* args;
-  args_list.Append(std::make_unique<base::DictionaryValue>());
-  args_list.GetDictionary(0, &args);
-
-  // Seek positions greater than the duration or negative should be ignored.
-  args->SetDouble("time", 101);
-  handler_->OnSeekCurrentMedia(&args_list);
-  args->SetDouble("time", -10);
-  handler_->OnSeekCurrentMedia(&args_list);
-
-  args->Clear();
-
-  // Volumes outside of the [0, 1] range should be ignored.
-  args->SetDouble("volume", 1.5);
-  handler_->OnSetCurrentMediaVolume(&args_list);
-  args->SetDouble("volume", 1.5);
-  handler_->OnSetCurrentMediaVolume(&args_list);
-}
-
-TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteControllerInvalidated) {
-  handler_->OnRouteControllerInvalidated();
-  EXPECT_EQ(1u, web_ui_->call_data().size());
-  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
-  EXPECT_EQ("media_router.ui.onRouteControllerInvalidated",
-            call_data.function_name());
-}
-
-}  // namespace media_router
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 6fce8dd2..ea2cd52c 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -3116,8 +3116,6 @@
       {"securityKeysResetStep2", IDS_SETTINGS_SECURITY_KEYS_RESET_STEP2},
       {"securityKeysResetSuccess", IDS_SETTINGS_SECURITY_KEYS_RESET_SUCCESS},
       {"securityKeysResetTitle", IDS_SETTINGS_SECURITY_KEYS_RESET_TITLE},
-      {"securityKeysSavedCredentials",
-       IDS_SETTINGS_SECURITY_KEYS_SAVED_CREDENTIALS_TITLE},
       {"securityKeysSetPIN", IDS_SETTINGS_SECURITY_KEYS_SET_PIN},
       {"securityKeysSetPINChangeTitle",
        IDS_SETTINGS_SECURITY_KEYS_SET_PIN_CHANGE_TITLE},
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn
index 8c77263..9fc7d1b3 100644
--- a/chrome/browser/vr/BUILD.gn
+++ b/chrome/browser/vr/BUILD.gn
@@ -267,6 +267,13 @@
     "platform_controller_for_testing.h",
   ]
 
+  if (enable_arcore) {
+    sources += [
+      "service/arcore_consent_prompt_interface.cc",
+      "service/arcore_consent_prompt_interface.h",
+    ]
+  }
+
   public_deps = [
     ":vr_base",
   ]
diff --git a/chrome/browser/vr/service/arcore_consent_prompt_interface.cc b/chrome/browser/vr/service/arcore_consent_prompt_interface.cc
new file mode 100644
index 0000000..b7ecf750
--- /dev/null
+++ b/chrome/browser/vr/service/arcore_consent_prompt_interface.cc
@@ -0,0 +1,24 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/vr/service/arcore_consent_prompt_interface.h"
+
+namespace vr {
+
+namespace {
+ArcoreConsentPromptInterface* g_arcore_consent_prompt = nullptr;
+}
+
+// static
+void ArcoreConsentPromptInterface::SetInstance(
+    ArcoreConsentPromptInterface* instance) {
+  g_arcore_consent_prompt = instance;
+}
+
+// static
+ArcoreConsentPromptInterface* ArcoreConsentPromptInterface::GetInstance() {
+  return g_arcore_consent_prompt;
+}
+
+}  // namespace vr
diff --git a/chrome/browser/vr/service/arcore_consent_prompt_interface.h b/chrome/browser/vr/service/arcore_consent_prompt_interface.h
new file mode 100644
index 0000000..442c908
--- /dev/null
+++ b/chrome/browser/vr/service/arcore_consent_prompt_interface.h
@@ -0,0 +1,28 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_SERVICE_ARCORE_CONSENT_PROMPT_INTERFACE_H_
+#define CHROME_BROWSER_VR_SERVICE_ARCORE_CONSENT_PROMPT_INTERFACE_H_
+
+#include "base/callback.h"
+#include "chrome/browser/vr/vr_export.h"
+
+namespace vr {
+
+// TODO(crbug.com/968233): Unify consent flow.
+// This class solves layering problem until the above bug gets fixed.
+class VR_EXPORT ArcoreConsentPromptInterface {
+ public:
+  static void SetInstance(ArcoreConsentPromptInterface*);
+  static ArcoreConsentPromptInterface* GetInstance();
+
+  virtual void ShowConsentPrompt(
+      int render_process_id,
+      int render_frame_id,
+      base::OnceCallback<void(bool)> response_callback) = 0;
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_SERVICE_ARCORE_CONSENT_PROMPT_INTERFACE_H_
diff --git a/chrome/browser/vr/service/vr_service_impl.cc b/chrome/browser/vr/service/vr_service_impl.cc
index ee86d40..61be0a60 100644
--- a/chrome/browser/vr/service/vr_service_impl.cc
+++ b/chrome/browser/vr/service/vr_service_impl.cc
@@ -15,7 +15,6 @@
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "device/vr/vr_device.h"
-#include "device/vr/vr_display_impl.h"
 
 namespace vr {
 
diff --git a/chrome/browser/vr/service/xr_device_impl.cc b/chrome/browser/vr/service/xr_device_impl.cc
index a8bb327..db3b47b 100644
--- a/chrome/browser/vr/service/xr_device_impl.cc
+++ b/chrome/browser/vr/service/xr_device_impl.cc
@@ -24,11 +24,15 @@
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/origin_util.h"
+#include "device/vr/buildflags/buildflags.h"
 
 #if defined(OS_WIN)
 #include "chrome/browser/vr/service/xr_session_request_consent_manager.h"
 #elif defined(OS_ANDROID)
 #include "chrome/browser/vr/service/gvr_consent_helper.h"
+#if BUILDFLAG(ENABLE_ARCORE)
+#include "chrome/browser/vr/service/arcore_consent_prompt_interface.h"
+#endif
 #endif
 
 namespace vr {
@@ -199,12 +203,23 @@
 #if defined(OS_ANDROID)
 
   if (options->environment_integration) {
-    // The session has requested AR mode. This will only work if
-    // the ARCore-backed runtime is available and enabled, and that has
-    // its own separate consent prompt. Otherwise, the session request will
-    // fail since no other runtimes support environment integration. In
-    // either case, there's no need to show the VR-specific consent prompt.
-    DoRequestSession(std::move(options), std::move(callback));
+#if BUILDFLAG(ENABLE_ARCORE)
+    if (!render_frame_host_) {
+      // Reject promise.
+      std::move(callback).Run(nullptr);
+    } else {
+      if (IsXrDeviceConsentPromptDisabledForTesting()) {
+        DoRequestSession(std::move(options), std::move(callback));
+      } else {
+        ArcoreConsentPromptInterface::GetInstance()->ShowConsentPrompt(
+            render_frame_host_->GetProcess()->GetID(),
+            render_frame_host_->GetRoutingID(),
+            base::BindOnce(&XRDeviceImpl::OnConsentResult,
+                           weak_ptr_factory_.GetWeakPtr(), std::move(options),
+                           std::move(callback)));
+      }
+    }
+#endif
     return;
   } else {
     // GVR.
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 044dbe58..38d3bf0 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -535,6 +535,10 @@
 const base::Feature kLoadBrokenImagesFromContextMenu{
     "LoadBrokenImagesFromContextMenu", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Controls whether to show Safety Tip warnings on low-reputation sites.
+const base::Feature kSafetyTipUI{"SafetyTip",
+                                 base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Controls whether the user is prompted when sites request attestation.
 const base::Feature kSecurityKeyAttestationPrompt{
     "SecurityKeyAttestationPrompt", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index a39caa3..289ab87a 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -361,6 +361,9 @@
 extern const base::Feature kLoadBrokenImagesFromContextMenu;
 
 COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::Feature kSafetyTipUI;
+
+COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kSecurityKeyAttestationPrompt;
 
 #if defined(OS_ANDROID)
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index ffd4748..0fc07a62 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -95,7 +95,6 @@
 const char kChromeUIMdUserManagerHost[] = "md-user-manager";
 const char kChromeUIMdUserManagerUrl[] = "chrome://md-user-manager/";
 const char kChromeUIMediaEngagementHost[] = "media-engagement";
-const char kChromeUIMediaRouterHost[] = "media-router";
 const char kChromeUIMediaRouterURL[] = "chrome://media-router/";
 const char kChromeUIMediaRouterInternalsHost[] = "media-router-internals";
 const char kChromeUIMediaRouterInternalsURL[] =
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 14c02e9..5ecede90a3 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -101,7 +101,6 @@
 extern const char kChromeUIMdUserManagerHost[];
 extern const char kChromeUIMdUserManagerUrl[];
 extern const char kChromeUIMediaEngagementHost[];
-extern const char kChromeUIMediaRouterHost[];
 extern const char kChromeUIMediaRouterURL[];
 extern const char kChromeUIMediaRouterInternalsHost[];
 extern const char kChromeUIMediaRouterInternalsURL[];
diff --git a/chrome/installer/linux/BUILD.gn b/chrome/installer/linux/BUILD.gn
index 508e811..709552f 100644
--- a/chrome/installer/linux/BUILD.gn
+++ b/chrome/installer/linux/BUILD.gn
@@ -164,6 +164,7 @@
   ]
   script = "//build/gn_run_binary.py"
   sources = [
+    "//buildtools/third_party/eu-strip/bin/eu-strip",
     prog_name,
   ]
   outputs = [
diff --git a/chrome/lib/util/public/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java b/chrome/lib/util/public/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java
index 87666af..3dcfcdf 100644
--- a/chrome/lib/util/public/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java
+++ b/chrome/lib/util/public/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java
@@ -64,7 +64,9 @@
      */
     public static String getTelNumber(String uri) {
         if (uri == null || !uri.contains(":")) return "";
-        return uri.split(":")[1];
+        String[] parts = uri.split(":");
+        if (parts.length <= 1) return "";
+        return parts[1];
     }
 
     /**
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index d58c512..cd82eb3 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1390,6 +1390,12 @@
           [ "../browser/ssl/captive_portal_blocking_page_browsertest.cc" ]
     }
 
+    if (!is_android) {
+      sources += [
+        "../browser/external_protocol/external_protocol_handler_browsertest.cc",
+      ]
+    }
+
     if (enable_dice_support) {
       sources += [
         "../browser/signin/dice_browsertest.cc",
@@ -1692,7 +1698,6 @@
         "../browser/ui/views/extensions/extension_dialog_browsertest.cc",
         "../browser/ui/web_applications/test/bookmark_app_navigation_browsertest.cc",
         "../browser/ui/web_applications/test/bookmark_app_navigation_browsertest.h",
-        "../browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_browsertest.cc",
       ]
 
       if (enable_background_mode) {
@@ -3843,11 +3848,6 @@
       "../browser/ui/toolbar/media_router_contextual_menu_unittest.cc",
       "../browser/ui/toolbar/mock_media_router_action_controller.cc",
       "../browser/ui/toolbar/mock_media_router_action_controller.h",
-      "../browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_unittest.cc",
-      "../browser/ui/webui/media_router/media_router_ui_unittest.cc",
-      "../browser/ui/webui/media_router/media_router_web_ui_test.cc",
-      "../browser/ui/webui/media_router/media_router_web_ui_test.h",
-      "../browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc",
       "../common/media_router/discovery/media_sink_internal_unittest.cc",
       "../common/media_router/discovery/media_sink_service_base_unittest.cc",
       "../common/media_router/mojo/media_router_struct_traits_unittest.cc",
diff --git a/chrome/test/chromedriver/element_commands.cc b/chrome/test/chromedriver/element_commands.cc
index e06f7f0a..f7a4cb5 100644
--- a/chrome/test/chromedriver/element_commands.cc
+++ b/chrome/test/chromedriver/element_commands.cc
@@ -89,16 +89,23 @@
                          const std::string& element_id,
                          const bool is_text,
                          const base::ListValue* key_list) {
-  Status status = FocusToElement(session, web_view, element_id);
-  if (status.IsError())
-        return Status(kElementNotInteractable);
-  // Move cursor/caret to append the input
-  // keys if element's type is text-related
-  if (is_text) {
+  // If we were previously focused, we don't need to focus again.
+  // But also, later we don't move the carat if we were already in focus.
+  bool wasPreviouslyFocused = false;
+  IsElementFocused(session, web_view, element_id, &wasPreviouslyFocused);
+  if (!wasPreviouslyFocused) {
+    Status status = FocusToElement(session, web_view, element_id);
+    if (status.IsError())
+      return Status(kElementNotInteractable);
+  }
+
+  // Move cursor/caret to append the input if we only just focused this
+  // element. keys if element's type is text-related
+  if (is_text && !wasPreviouslyFocused) {
     base::ListValue args;
     args.Append(CreateElement(element_id));
     std::unique_ptr<base::Value> result;
-    status = web_view->CallFunction(
+    Status status = web_view->CallFunction(
         session->GetCurrentFrameId(),
         "elem => elem.setSelectionRange(elem.value.length, elem.value.length)",
         args, &result);
@@ -184,6 +191,18 @@
     else
       return SetOptionElementSelected(session, web_view, element_id, true);
   } else {
+    if (tag_name == "input") {
+      std::unique_ptr<base::Value> get_element_type;
+      status = GetElementAttribute(session, web_view, element_id, "type",
+                                   &get_element_type);
+      if (status.IsError())
+        return status;
+      std::string element_type;
+      if (get_element_type->GetAsString(&element_type))
+        element_type = base::ToLowerASCII(element_type);
+      if (element_type == "file")
+        return Status(kInvalidArgument);
+    }
     WebPoint location;
     status = GetElementClickableLocation(
         session, web_view, element_id, &location);
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index 7995c5c..3b0145b 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -2037,7 +2037,7 @@
     value = self._driver.ExecuteScript('return arguments[0].value;', text)
     self.assertEquals('0123456789+-*/ Hi, there!', value)
 
-  def testSendKeysToElementAppend(self):
+  def testSendKeysToElementDoesNotAppend(self):
       self._driver.Load(self.GetHttpUrlForFile(
           '/chromedriver/empty.html'))
       textControlTypes = ["text", "search", "tel", "url",  "password"]
@@ -2052,7 +2052,7 @@
           element.SendKeys('hello')
           value = self._driver.ExecuteScript('return arguments[0].value;',
                                              element)
-          self.assertEquals('send_this_valuehello', value)
+          self.assertEquals('hellosend_this_value', value)
 
   def testSendKeysToEditableElement(self):
       self._driver.Load(self.GetHttpUrlForFile(
diff --git a/chrome/test/chromedriver/window_commands.cc b/chrome/test/chromedriver/window_commands.cc
index 7695253..21097181 100644
--- a/chrome/test/chromedriver/window_commands.cc
+++ b/chrome/test/chromedriver/window_commands.cc
@@ -1480,7 +1480,6 @@
   size_t max_list_length =
       std::max({longest_mouse_list_size, longest_touch_list_size,
                 longest_key_list_size, tick_durations.size()});
-  int key_modifiers = 0;
   for (size_t i = 0; i < max_list_length; i++) {
     std::list<KeyEvent> dispatch_key_events;
     for (size_t j = 0; j < key_events_list.size(); j++) {
@@ -1491,9 +1490,9 @@
         if (event.type == kKeyDownEventType) {
           session->input_cancel_list.emplace_back(key_input_states[j], nullptr,
                                                   nullptr, &event);
-          key_modifiers |= KeyToKeyModifiers(event.key);
+          session->sticky_modifiers |= KeyToKeyModifiers(event.key);
         } else if (event.type == kKeyUpEventType) {
-          key_modifiers &= ~KeyToKeyModifiers(event.key);
+          session->sticky_modifiers &= ~KeyToKeyModifiers(event.key);
         }
       }
     }
@@ -1527,7 +1526,7 @@
           event.x = mouse_locations[j].x();
           event.y = mouse_locations[j].y();
         }
-        event.modifiers = key_modifiers;
+        event.modifiers = session->sticky_modifiers;
         if (event.type == kPressedMouseEventType) {
           base::TimeTicks timestamp = base::TimeTicks::Now();
           bool is_repeated_click = IsRepeatedClickEvent(
@@ -1658,6 +1657,7 @@
   session->mouse_position = WebPoint(0, 0);
   session->click_count = 0;
   session->mouse_click_timestamp = base::TimeTicks::Now();
+  session->sticky_modifiers = 0;
 
   return Status(kOk);
 }
diff --git a/chrome/test/data/find_in_page/find_from_selection.html b/chrome/test/data/find_in_page/find_from_selection.html
deleted file mode 100644
index c5926d4..0000000
--- a/chrome/test/data/find_in_page/find_from_selection.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<body>
-  findMe some text
-  <br>
-  <input id="selectText" value="text"></input>
-  some text.. find .. find ..
-  <br>
-  more text findMe and text.
-  <br>
-</body>
-</html>
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html
index a85485e1..f7b4c9a 100644
--- a/chrome/test/data/local_ntp/local_ntp_browsertest.html
+++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -24,6 +24,7 @@
   <script src="local_ntp_browsertest.js" charset="utf-8"></script>
   <template id="local-ntp-template">
     <div id="custom-bg"></div>
+    <div id="custom-bg-preview"></div>
     <!-- Container for the OneGoogleBar HTML. -->
     <div id="one-google"></div>
 
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 60cbc7c0..54f26bae 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -55,7 +55,6 @@
     "js2gtest_browsertest.js",
     "load_time_data_browsertest.js",
     "management/a11y/management_a11y_test.js",
-    "media_router/media_router_elements_browsertest.js",
     "mock4js_browsertest.js",
     "net_internals/chromeos_view.js",
     "net_internals/dns_view.js",
diff --git a/chrome/test/media_router/media_router_integration_ui_browsertest.cc b/chrome/test/media_router/media_router_integration_ui_browsertest.cc
index 33fc5bd..fdea5bd 100644
--- a/chrome/test/media_router/media_router_integration_ui_browsertest.cc
+++ b/chrome/test/media_router/media_router_integration_ui_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/strings/stringprintf.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_webui_impl.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "content/public/test/browser_test_utils.h"
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc
index 8430d15..44308e5 100644
--- a/chromecast/renderer/cast_content_renderer_client.cc
+++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -311,6 +311,9 @@
 
 void CastContentRendererClient::
     SetRuntimeFeaturesDefaultsBeforeBlinkInitialization() {
+  // Allow HtmlMediaElement.volume to be greater than 1, for normalization.
+  blink::WebRuntimeFeatures::EnableFeatureFromString(
+      "MediaElementVolumeGreaterThanOne", true);
   // Settings for ATV (Android defaults are not what we want).
   blink::WebRuntimeFeatures::EnableMediaControlsOverlayPlayButton(false);
 }
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index ac10f1fb..1179c35 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-12303.0.0
\ No newline at end of file
+12317.0.0
\ No newline at end of file
diff --git a/chromeos/services/assistant/media_session/assistant_media_session.cc b/chromeos/services/assistant/media_session/assistant_media_session.cc
index 2e3f38a..19fa406 100644
--- a/chromeos/services/assistant/media_session/assistant_media_session.cc
+++ b/chromeos/services/assistant/media_session/assistant_media_session.cc
@@ -54,6 +54,16 @@
   std::move(callback).Run(std::move(info));
 }
 
+// TODO(b/135064564): Update StartDucking() and StopDucking() after volume
+// control API for media streams is implemented.
+void AssistantMediaSession::StartDucking() {
+  Suspend(SuspendType::kSystem);
+}
+
+void AssistantMediaSession::StopDucking() {
+  Resume(SuspendType::kSystem);
+}
+
 void AssistantMediaSession::Suspend(SuspendType suspend_type) {
   if (!IsActive())
     return;
diff --git a/chromeos/services/assistant/media_session/assistant_media_session.h b/chromeos/services/assistant/media_session/assistant_media_session.h
index 76c10ae1..71fdeff 100644
--- a/chromeos/services/assistant/media_session/assistant_media_session.h
+++ b/chromeos/services/assistant/media_session/assistant_media_session.h
@@ -42,8 +42,8 @@
   // media_session.mojom.MediaSession overrides:
   void Suspend(SuspendType suspend_type) override;
   void Resume(SuspendType suspend_type) override;
-  void StartDucking() override {}
-  void StopDucking() override {}
+  void StartDucking() override;
+  void StopDucking() override;
   void GetMediaSessionInfo(GetMediaSessionInfoCallback callback) override;
   void GetDebugInfo(GetDebugInfoCallback callback) override;
   void AddObserver(
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index 7087d2e..a9ea25b 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -10,6 +10,9 @@
 <translation id="2805756323405976993">መተግበሪያዎች</translation>
 <translation id="2872961005593481000">ዝጋ</translation>
 <translation id="3511655281162215899">እባክዎ አዲስ ይለፍ ቃል ወዲያውኑ ይምረጡ።</translation>
+<translation id="3838338534323494292">አዲስ የይለፍ ቃል</translation>
+<translation id="445059817448385655">የቀድሞው የይለፍ ቃል</translation>
+<translation id="467510802200863975">የይለፍ ቃላትዎ አይዛመዱም</translation>
 <translation id="4731797938093519117">የወላጅ መዳረሻ</translation>
 <translation id="476166673298332917">የዚህ መሣሪያ አስተዳዳሪ የይለፍ ቃላት እና ግንኙነትን ጨምሮ የሁሉንም እንቅስቃሴ መዳረሻ አለው።</translation>
 <translation id="5212543919916444558">እኔ ላግዝ የምችልበት ምንም ነገር በእርስዎ ማያ ገጽ ላይ አላገኘሁም።
@@ -21,10 +24,14 @@
 <translation id="5733345267661125295">እባክዎ አሁን አዲስ የይለፍ ቃል ይምረጡ</translation>
 <translation id="5832805196449965646">ሰው አክል</translation>
 <translation id="5895138241574237353">እንደገና ጀምር</translation>
+<translation id="6058625436358447366">ለማጠናቀቅ፣ የእርስዎን አሮጌ እና አዲስ የይለፍ ቃላት ያስገቡ</translation>
+<translation id="6106186594183574873">ለማጠናቀቅ፣ የእርስዎን ይለፍ ቃል ያስገቡ</translation>
+<translation id="6146993107019042706">ለማጠናቀቅ፣ የእርስዎን አዲስ የይለፍ ቃል ያስገቡ</translation>
 <translation id="6574601967010742428">የመሣሪያው አስተዳዳሪ የእርስዎን እንቅስቃሴ ሊከታተል ይችላል።</translation>
 <translation id="7505377169174526985">{NUM_DAYS,plural, =0{የአሁኑ ይለፍ ቃልዎ ጊዜው አልፎበታል!}=1{የአሁኑ ይለፍ ቃልዎ ከአንድ ቀን ባነሰ ጊዜ ውስጥ ጊዜው ያልፍበታል!}one{የአሁኑ ይለፍ ቃልዎ ከ# ቀኖች ባነሰ ጊዜ ውስጥ ጊዜው ያልፍበታል!}other{የአሁኑ ይለፍ ቃልዎ ከ# ቀኖች ባነሰ ጊዜ ውስጥ ጊዜው ያልፍበታል!}}</translation>
 <translation id="7658239707568436148">ይቅር</translation>
 <translation id="7690294790491645610">አዲስ የይለፍ ቃል ያረጋግጡ</translation>
 <translation id="808894953321890993">የይለፍ ቃል ለውጥ</translation>
+<translation id="8747900814994928677">ለውጥን አረጋግጥ</translation>
 <translation id="9111102763498581341">ክፈት</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 3af083b..04b43635 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -10,6 +10,9 @@
 <translation id="2805756323405976993">Aplicaciones</translation>
 <translation id="2872961005593481000">Cerrar</translation>
 <translation id="3511655281162215899">Elige una contraseña nueva de inmediato</translation>
+<translation id="3838338534323494292">Nueva contraseña</translation>
+<translation id="445059817448385655">Contraseña anterior</translation>
+<translation id="467510802200863975">Las contraseñas no coinciden</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="476166673298332917">El administrador tiene acceso a toda la actividad, incluidas las contraseñas y comunicaciones.</translation>
 <translation id="5212543919916444558">No hay nada en la pantalla con lo que pueda ayudarte.
@@ -21,10 +24,14 @@
 <translation id="5733345267661125295">Elige una contraseña nueva ahora</translation>
 <translation id="5832805196449965646">Agregar un usuario</translation>
 <translation id="5895138241574237353">Reiniciar</translation>
+<translation id="6058625436358447366">Para finalizar, ingresa tu contraseña anterior y la nueva</translation>
+<translation id="6106186594183574873">Para finalizar, ingresa tu contraseña anterior</translation>
+<translation id="6146993107019042706">Para finalizar, ingresa tu nueva contraseña</translation>
 <translation id="6574601967010742428">Es posible que el administrador del dispositivo supervise tu actividad.</translation>
 <translation id="7505377169174526985">{NUM_DAYS,plural, =0{Caducó tu contraseña actual.}=1{Tu contraseña actual caducará en menos de un día.}other{Tu contraseña actual caducará en menos de # días.}}</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7690294790491645610">Confirmar contraseña nueva</translation>
 <translation id="808894953321890993">Cambiar contraseña</translation>
+<translation id="8747900814994928677">Confirmar cambio</translation>
 <translation id="9111102763498581341">Desbloquear</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index fdbf6511..fbd6af01 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -10,6 +10,9 @@
 <translation id="2805756323405976993">Mga App</translation>
 <translation id="2872961005593481000">Shut down</translation>
 <translation id="3511655281162215899">Pumili kaagad ng bagong password</translation>
+<translation id="3838338534323494292">Bagong password</translation>
+<translation id="445059817448385655">Lumang password</translation>
+<translation id="467510802200863975">Hindi nagtutugma ang mga password</translation>
 <translation id="4731797938093519117">Pangunahing access</translation>
 <translation id="476166673298332917">Maaaring subaybayan ng admin ng device na ito ang iyong aktibidad sa pag-browse.</translation>
 <translation id="5212543919916444558">Wala akong makitang kahit ano sa iyong screen kung saan ako makakatulong.
@@ -21,10 +24,14 @@
 <translation id="5733345267661125295">Pumili ng bagong password ngayon</translation>
 <translation id="5832805196449965646">Magdagdag ng Tao</translation>
 <translation id="5895138241574237353">I-restart</translation>
+<translation id="6058625436358447366">Para tapusin, ilagay ang iyong luma at bagong password</translation>
+<translation id="6106186594183574873">Para tapusin, ilagay ang iyong lumang password</translation>
+<translation id="6146993107019042706">Para tapusin, ilagay ang bago mong password</translation>
 <translation id="6574601967010742428">Maaaring masubaybayan ng administrator ng device ang iyong aktibidad.</translation>
 <translation id="7505377169174526985">{NUM_DAYS,plural, =0{Nag-expire na ang iyong kasalukuyang password!}=1{Mag-e-expire sa loob ng wala pang isang araw ang iyong kasalukuyang password!}one{Mag-e-expire sa loob ng wala pang # araw ang iyong kasalukuyang password!}other{Mag-e-expire sa loob ng wala pang # na araw ang iyong kasalukuyang password!}}</translation>
 <translation id="7658239707568436148">Kanselahin</translation>
 <translation id="7690294790491645610">Kumpirmahin ang bagong password</translation>
 <translation id="808894953321890993">Palitan ang password</translation>
+<translation id="8747900814994928677">Kumpirmahin ang pagbabago</translation>
 <translation id="9111102763498581341">I-unlock</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 9a72923..b11357fa 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -24,8 +24,8 @@
 <translation id="5733345267661125295">Смените его прямо сейчас.</translation>
 <translation id="5832805196449965646">Добавить пользователя</translation>
 <translation id="5895138241574237353">Перезапустить</translation>
-<translation id="6058625436358447366">Чтобы закончить, введите старый и новый пароли.</translation>
-<translation id="6106186594183574873">Чтобы закончить, введите старый пароль.</translation>
+<translation id="6058625436358447366">Для завершения введите старый и новый пароли.</translation>
+<translation id="6106186594183574873">Для завершения введите старый пароль.</translation>
 <translation id="6146993107019042706">Чтобы завершить процедуру, введите новый пароль.</translation>
 <translation id="6574601967010742428">Администратор может отслеживать ваши действия на этом устройстве.</translation>
 <translation id="7505377169174526985">{NUM_DAYS,plural, =0{Срок действия текущего пароля истек.}=1{Срок действия текущего пароля истекает менее чем через 1 день.}one{Срок действия текущего пароля истекает менее чем через # день.}few{Срок действия текущего пароля истекает менее чем через # дня.}many{Срок действия текущего пароля истекает менее чем через # дней.}other{Срок действия текущего пароля истекает менее чем через # дня.}}</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index a662519..47990614 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -23,7 +23,7 @@
 <translation id="5733345267661125295">Tafadhali chagua nenosiri jipya sasa</translation>
 <translation id="5832805196449965646">Ongeza Mtumiaji Mwingine</translation>
 <translation id="5895138241574237353">Zzima na uwashe</translation>
-<translation id="6058625436358447366">Ili ukamilishe, weka nenosiri lako la awali na jipya</translation>
+<translation id="6058625436358447366">Ili ukamilishe, weka nenosiri lako la awali na lile jipya</translation>
 <translation id="6106186594183574873">Ili ukamilishe, weka nenosiri lako la awali</translation>
 <translation id="6146993107019042706">Ili ukamilishe, weka nenosiri jipya</translation>
 <translation id="6574601967010742428">Huenda msimamizi wa kifaa hiki atafuatilia shughuli zako.</translation>
diff --git a/components/arc/ime/arc_ime_service.cc b/components/arc/ime/arc_ime_service.cc
index 0f86e8c..ebe0b002 100644
--- a/components/arc/ime/arc_ime_service.cc
+++ b/components/arc/ime/arc_ime_service.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/logging.h"
 #include "base/memory/singleton.h"
 #include "base/strings/string_util.h"
@@ -162,8 +162,8 @@
   // KeyboardController is destroyed before ArcImeService (except in tests),
   // so check whether there is a KeyboardController first before removing |this|
   // from KeyboardController observers.
-  if (keyboard::KeyboardController::HasInstance()) {
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
+  if (keyboard::KeyboardUIController::HasInstance()) {
+    auto* keyboard_controller = keyboard::KeyboardUIController::Get();
     if (keyboard_controller->HasObserver(this))
       keyboard_controller->RemoveObserver(this);
   }
@@ -202,8 +202,8 @@
 // Overridden from aura::EnvObserver:
 
 void ArcImeService::OnWindowInitialized(aura::Window* new_window) {
-  if (keyboard::KeyboardController::HasInstance()) {
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
+  if (keyboard::KeyboardUIController::HasInstance()) {
+    auto* keyboard_controller = keyboard::KeyboardUIController::Get();
     if (keyboard_controller->IsEnabled() &&
         !keyboard_controller->HasObserver(this)) {
       keyboard_controller->AddObserver(this);
@@ -354,8 +354,8 @@
   if (!focused_arc_window_)
     return;
 
-  if (keyboard::KeyboardController::HasInstance()) {
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
+  if (keyboard::KeyboardUIController::HasInstance()) {
+    auto* keyboard_controller = keyboard::KeyboardUIController::Get();
     if (keyboard_controller->IsEnabled())
       keyboard_controller->HideKeyboardImplicitlyBySystem();
   }
diff --git a/components/arc/ime/arc_ime_service_unittest.cc b/components/arc/ime/arc_ime_service_unittest.cc
index 3a878ac..0fa67211 100644
--- a/components/arc/ime/arc_ime_service_unittest.cc
+++ b/components/arc/ime/arc_ime_service_unittest.cc
@@ -8,7 +8,7 @@
 #include <set>
 #include <utility>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/arc/common/ime.mojom.h"
@@ -184,7 +184,7 @@
   std::unique_ptr<aura::Window> arc_win_;
 
   // Needed by ArcImeService.
-  keyboard::KeyboardController keyboard_controller_;
+  keyboard::KeyboardUIController keyboard_ui_controller_;
 
  private:
   void SetUp() override {
diff --git a/components/domain_reliability/quic_error_mapping.cc b/components/domain_reliability/quic_error_mapping.cc
index 93e58fd..487332b8 100644
--- a/components/domain_reliability/quic_error_mapping.cc
+++ b/components/domain_reliability/quic_error_mapping.cc
@@ -305,6 +305,9 @@
     {quic::QUIC_HTTP_DECODER_ERROR, "quic.http.decoder.error"},
     {quic::QUIC_STALE_CONNECTION_CANCELLED, "quic.stale.connection.cancelled"},
     {quic::QUIC_IETF_GQUIC_ERROR_MISSING, "quic.ietf.gquic.error_missing"},
+    {quic::QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM,
+     "quic.window.update.received.on.read.unidirectional.stream"},
+
     // QUIC_INVALID_APPLICATION_CLOSE_DATA was code 101. The code has been
     // deprecated, but to keep the assert below happy, there needs to be
     // an entry for it, but the symbol is gone.
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc
index 5cfd976..54e1749 100644
--- a/components/download/internal/common/download_item_impl.cc
+++ b/components/download/internal/common/download_item_impl.cc
@@ -1494,6 +1494,8 @@
     DownloadUkmHelper::RecordDownloadStarted(
         ukm_download_id_, new_create_info.ukm_source_id, file_type,
         download_source_, state, is_same_host_download);
+    RecordDownloadValidationMetrics(DownloadMetricsCallsite::kDownloadItem,
+                                    state, file_type);
 
     if (!delegate_->IsOffTheRecord()) {
       RecordDownloadCountWithSource(NEW_DOWNLOAD_COUNT_NORMAL_PROFILE,
diff --git a/components/download/internal/common/download_stats.cc b/components/download/internal/common/download_stats.cc
index 3db2be0e..e155955 100644
--- a/components/download/internal/common/download_stats.cc
+++ b/components/download/internal/common/download_stats.cc
@@ -935,6 +935,54 @@
                             DOWNLOAD_VIDEO_MAX);
 }
 
+// These histograms summarize download mime-types. The same data is recorded in
+// a few places, as they exist to sanity-check and understand other metrics.
+const char* const kDownloadMetricsVerificationNameItemSecure =
+    "Download.InsecureBlocking.Verification.Item.Secure";
+const char* const kDownloadMetricsVerificationNameItemInsecure =
+    "Download.InsecureBlocking.Verification.Item.Insecure";
+const char* const kDownloadMetricsVerificationNameItemOther =
+    "Download.InsecureBlocking.Verification.Item.Other";
+const char* const kDownloadMetricsVerificationNameManagerSecure =
+    "Download.InsecureBlocking.Verification.Manager.Secure";
+const char* const kDownloadMetricsVerificationNameManagerInsecure =
+    "Download.InsecureBlocking.Verification.Manager.Insecure";
+const char* const kDownloadMetricsVerificationNameManagerOther =
+    "Download.InsecureBlocking.Verification.Manager.Other";
+
+const char* GetDownloadValidationMetricName(
+    const DownloadMetricsCallsite& callsite,
+    const DownloadConnectionSecurity& state) {
+  DCHECK(callsite == DownloadMetricsCallsite::kDownloadItem ||
+         callsite == DownloadMetricsCallsite::kMixContentDownloadBlocking);
+
+  switch (state) {
+    case DOWNLOAD_SECURE:
+    case DOWNLOAD_TARGET_BLOB:
+    case DOWNLOAD_TARGET_DATA:
+    case DOWNLOAD_TARGET_FILE:
+      if (callsite == DownloadMetricsCallsite::kDownloadItem)
+        return kDownloadMetricsVerificationNameItemSecure;
+      return kDownloadMetricsVerificationNameManagerSecure;
+    case DOWNLOAD_TARGET_INSECURE:
+    case DOWNLOAD_REDIRECT_INSECURE:
+    case DOWNLOAD_REDIRECT_TARGET_INSECURE:
+      if (callsite == DownloadMetricsCallsite::kDownloadItem)
+        return kDownloadMetricsVerificationNameItemInsecure;
+      return kDownloadMetricsVerificationNameManagerInsecure;
+    case DOWNLOAD_TARGET_OTHER:
+    case DOWNLOAD_TARGET_FILESYSTEM:
+    case DOWNLOAD_TARGET_FTP:
+      if (callsite == DownloadMetricsCallsite::kDownloadItem)
+        return kDownloadMetricsVerificationNameItemOther;
+      return kDownloadMetricsVerificationNameManagerOther;
+    case DOWNLOAD_CONNECTION_SECURITY_MAX:
+      NOTREACHED();
+  }
+  NOTREACHED();
+  return nullptr;
+}
+
 }  // namespace
 
 DownloadContent DownloadContentFromMimeType(const std::string& mime_type_string,
@@ -1207,6 +1255,14 @@
   return state;
 }
 
+void RecordDownloadValidationMetrics(DownloadMetricsCallsite callsite,
+                                     DownloadConnectionSecurity state,
+                                     DownloadContent file_type) {
+  base::UmaHistogramEnumeration(
+      GetDownloadValidationMetricName(callsite, state), file_type,
+      DownloadContent::MAX);
+}
+
 void RecordDownloadConnectionSecurity(const GURL& download_url,
                                       const std::vector<GURL>& url_chain) {
   UMA_HISTOGRAM_ENUMERATION(
diff --git a/components/download/public/common/download_stats.h b/components/download/public/common/download_stats.h
index 217a0f39..f9c22b0 100644
--- a/components/download/public/common/download_stats.h
+++ b/components/download/public/common/download_stats.h
@@ -409,10 +409,27 @@
   DOWNLOAD_CONNECTION_SECURITY_MAX
 };
 
+enum class DownloadMetricsCallsite {
+  // Called from within DownloadItem initialization.
+  kDownloadItem = 0,
+
+  // Called from within MixedContentDownloadBlocking (as part of
+  // ChromeDownloadManagerDelegate).
+  kMixContentDownloadBlocking,
+};
+
 COMPONENTS_DOWNLOAD_EXPORT DownloadConnectionSecurity
 CheckDownloadConnectionSecurity(const GURL& download_url,
                                 const std::vector<GURL>& url_chain);
 
+// Records a download's mime-type and security state. This is a short-lived
+// metric recorded in multiple callsites to investigate discrepancies in other
+// metrics.
+COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadValidationMetrics(
+    DownloadMetricsCallsite callsite,
+    DownloadConnectionSecurity state,
+    DownloadContent file_type);
+
 COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadConnectionSecurity(
     const GURL& download_url,
     const std::vector<GURL>& url_chain);
diff --git a/components/exo/keyboard.cc b/components/exo/keyboard.cc
index ebc3a9b..7b1368c 100644
--- a/components/exo/keyboard.cc
+++ b/components/exo/keyboard.cc
@@ -4,7 +4,7 @@
 
 #include "components/exo/keyboard.h"
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/keyboard/ui/keyboard_util.h"
 #include "ash/public/cpp/app_types.h"
 #include "base/bind.h"
@@ -123,8 +123,8 @@
 bool IsVirtualKeyboardEnabled() {
   return keyboard::GetAccessibilityKeyboardEnabled() ||
          keyboard::GetTouchKeyboardEnabled() ||
-         (keyboard::KeyboardController::HasInstance() &&
-          keyboard::KeyboardController::Get()->IsEnableFlagSet(
+         (keyboard::KeyboardUIController::HasInstance() &&
+          keyboard::KeyboardUIController::Get()->IsEnableFlagSet(
               keyboard::KeyboardEnableFlag::kCommandLineEnabled));
 }
 
@@ -170,7 +170,7 @@
       weak_ptr_factory_(this) {
   AddEventHandler();
   seat_->AddObserver(this);
-  keyboard::KeyboardController::Get()->AddObserver(this);
+  keyboard::KeyboardUIController::Get()->AddObserver(this);
   OnSurfaceFocused(seat_->GetFocusedSurface());
 }
 
@@ -181,7 +181,7 @@
     focus_->RemoveSurfaceObserver(this);
   RemoveEventHandler();
   seat_->RemoveObserver(this);
-  keyboard::KeyboardController::Get()->RemoveObserver(this);
+  keyboard::KeyboardUIController::Get()->RemoveObserver(this);
 }
 
 bool Keyboard::HasDeviceConfigurationDelegate() const {
diff --git a/components/exo/text_input.cc b/components/exo/text_input.cc
index 1124aa1..1ff8822 100644
--- a/components/exo/text_input.cc
+++ b/components/exo/text_input.cc
@@ -6,7 +6,7 @@
 
 #include <algorithm>
 
-#include "ash/keyboard/ui/keyboard_controller.h"
+#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/exo/surface.h"
 #include "components/exo/wm_helper.h"
@@ -40,8 +40,8 @@
     : delegate_(std::move(delegate)) {}
 
 TextInput::~TextInput() {
-  if (keyboard_controller_)
-    keyboard_controller_->RemoveObserver(this);
+  if (keyboard_ui_controller_)
+    keyboard_ui_controller_->RemoveObserver(this);
   if (input_method_)
     Deactivate();
 }
@@ -69,8 +69,8 @@
 }
 
 void TextInput::HideVirtualKeyboard() {
-  if (keyboard_controller_)
-    keyboard_controller_->HideKeyboardByUser();
+  if (keyboard_ui_controller_)
+    keyboard_ui_controller_->HideKeyboardByUser();
   pending_vk_visible_ = false;
 }
 
@@ -338,11 +338,12 @@
   input_method_->SetFocusedTextInputClient(this);
   delegate_->Activated();
 
-  if (!keyboard_controller_ && keyboard::KeyboardController::HasInstance()) {
-    auto* keyboard_controller = keyboard::KeyboardController::Get();
-    if (keyboard_controller->IsEnabled()) {
-      keyboard_controller_ = keyboard_controller;
-      keyboard_controller_->AddObserver(this);
+  if (!keyboard_ui_controller_ &&
+      keyboard::KeyboardUIController::HasInstance()) {
+    auto* keyboard_ui_controller = keyboard::KeyboardUIController::Get();
+    if (keyboard_ui_controller->IsEnabled()) {
+      keyboard_ui_controller_ = keyboard_ui_controller;
+      keyboard_ui_controller_->AddObserver(this);
     }
   }
 
diff --git a/components/exo/text_input.h b/components/exo/text_input.h
index da70882..25ba6e9 100644
--- a/components/exo/text_input.h
+++ b/components/exo/text_input.h
@@ -18,7 +18,7 @@
 }
 
 namespace keyboard {
-class KeyboardController;
+class KeyboardUIController;
 }
 
 namespace exo {
@@ -147,7 +147,7 @@
   void DetachInputMethod();
 
   std::unique_ptr<Delegate> delegate_;
-  keyboard::KeyboardController* keyboard_controller_ = nullptr;
+  keyboard::KeyboardUIController* keyboard_ui_controller_ = nullptr;
 
   bool pending_vk_visible_ = false;
   aura::Window* window_ = nullptr;
diff --git a/components/image_fetcher/core/BUILD.gn b/components/image_fetcher/core/BUILD.gn
index c34dbca..687e6f5f 100644
--- a/components/image_fetcher/core/BUILD.gn
+++ b/components/image_fetcher/core/BUILD.gn
@@ -20,8 +20,6 @@
     "image_fetcher_service.cc",
     "image_fetcher_service.h",
     "image_fetcher_types.h",
-    "reduced_mode_image_fetcher.cc",
-    "reduced_mode_image_fetcher.h",
     "request_metadata.cc",
     "request_metadata.h",
   ]
@@ -76,7 +74,6 @@
     "image_data_fetcher_unittest.cc",
     "image_fetcher_impl_unittest.cc",
     "image_fetcher_metrics_reporter_unittest.cc",
-    "reduced_mode_image_fetcher_unittest.cc",
     "request_metadata_unittest.cc",
   ]
   deps = [
diff --git a/components/image_fetcher/core/cached_image_fetcher.cc b/components/image_fetcher/core/cached_image_fetcher.cc
index ee8ed0b..04bd8dd4 100644
--- a/components/image_fetcher/core/cached_image_fetcher.cc
+++ b/components/image_fetcher/core/cached_image_fetcher.cc
@@ -144,10 +144,8 @@
                                              ImageFetcherEvent::kCacheHit);
 
     // Only continue with decoding if the user actually asked for an image, or
-    // the image hadn't been transcoded yet and NOT loaded in the reduced mode.
-    if (!image_callback.is_null() ||
-        (cache_result_needs_transcoding &&
-         !request.params.allow_needs_transcoding_file())) {
+    // the image hasn't been transcoded yet.
+    if (!image_callback.is_null() || cache_result_needs_transcoding) {
       GetImageDecoder()->DecodeImage(
           image_data, gfx::Size(),
           base::BindOnce(&CachedImageFetcher::OnImageDecodedFromCache,
@@ -184,7 +182,6 @@
     // again to replace the image data already on disk with the transcoded data.
     if (cache_result_needs_transcoding) {
       EncodeAndStoreData(/* cache_result_needs_transcoding */ true,
-                         /* is_image_data_transcoded */ true,
                          std::move(request), image);
       ImageFetcherMetricsReporter::ReportEvent(
           request.params.uma_client_name(),
@@ -250,8 +247,7 @@
                                              ImageFetcherEvent::kTotalFailure);
   }
 
-  StoreData(/* cache_result_needs_transcoding */ false,
-            /* is_image_data_transcoded */ false, std::move(request),
+  StoreData(/* cache_result_needs_transcoding */ false, std::move(request),
             image_data);
 }
 
@@ -272,12 +268,10 @@
   }
 
   EncodeAndStoreData(/* cache_result_needs_transcoding */ false,
-                     /* is_image_data_transcoded */ true, std::move(request),
-                     image);
+                     std::move(request), image);
 }
 
 void CachedImageFetcher::EncodeAndStoreData(bool cache_result_needs_transcoding,
-                                            bool is_image_data_transcoded,
                                             CachedImageFetcherRequest request,
                                             const gfx::Image& image) {
   // Copy the image data out and store it on disk.
@@ -296,13 +290,11 @@
         base::BindOnce(&EncodeSkBitmapToPNG, uma_client_name, *bitmap),
         base::BindOnce(&CachedImageFetcher::StoreData,
                        weak_ptr_factory_.GetWeakPtr(),
-                       cache_result_needs_transcoding, is_image_data_transcoded,
-                       std::move(request)));
+                       cache_result_needs_transcoding, std::move(request)));
   }
 }
 
 void CachedImageFetcher::StoreData(bool cache_result_needs_transcoding,
-                                   bool is_image_data_transcoded,
                                    CachedImageFetcherRequest request,
                                    std::string image_data) {
   std::string url = request.url.spec();
@@ -317,17 +309,10 @@
       ImageFetcherMetricsReporter::ReportEvent(
           request.params.uma_client_name(),
           ImageFetcherEvent::kImageQueuedForTranscodingStoredBack);
-      if (!is_image_data_transcoded)
-        return;
     }
 
-    // |needs_transcoding| is only true when the image to save isn't transcoded
-    // and |allow_needs_transcoding_file()| is true (set by
-    // ReducedModeImageFetcher).
-    bool needs_transcoding = !is_image_data_transcoded &&
-                             request.params.allow_needs_transcoding_file();
     image_cache_->SaveImage(std::move(url), std::move(image_data),
-                            /* needs_transcoding */ needs_transcoding);
+                            /* needs_transcoding */ false);
   }
 }
 
diff --git a/components/image_fetcher/core/cached_image_fetcher.h b/components/image_fetcher/core/cached_image_fetcher.h
index 0c714a5..c273b9df 100644
--- a/components/image_fetcher/core/cached_image_fetcher.h
+++ b/components/image_fetcher/core/cached_image_fetcher.h
@@ -76,22 +76,13 @@
                                     const gfx::Image& image,
                                     const RequestMetadata& request_metadata);
   // Encode the given |image_data| and store it.
-  // |cache_result_needs_transcoding| is passed along for metrics purposes. It
-  // is true when the result 1) comes from cache and 2) wasn't transcoded when
-  // last time it was stored in the ImageCache.
-  // |is_image_data_transcoded| indicates whether the image to save has been
-  // transcoded. An image could be transcoded during network fetching, or loaded
-  // from the ImageCache without transcoding before.
+  // |cache_result_needs_transcoding| is passed along for metrics purposes.
   void EncodeAndStoreData(bool cache_result_needs_transcoding,
-                          bool is_image_data_transcoded,
                           CachedImageFetcherRequest request,
                           const gfx::Image& image);
   // Store the given |image_data| in the cache. |cache_result_needs_transcoding|
-  // is passed along for metrics purposes. It is true when the result 1) comes
-  // from cache and 2) wasn't transcoded when last time it was stored in the
-  // ImageCache.
+  // is passed along for metrics purposes.
   void StoreData(bool cache_result_needs_transcoding,
-                 bool is_image_data_transcoded,
                  CachedImageFetcherRequest request,
                  std::string image_data);
 
diff --git a/components/image_fetcher/core/image_fetcher.h b/components/image_fetcher/core/image_fetcher.h
index 0844c4c..e78e0ea 100644
--- a/components/image_fetcher/core/image_fetcher.h
+++ b/components/image_fetcher/core/image_fetcher.h
@@ -19,7 +19,6 @@
 namespace image_fetcher {
 
 class ImageDecoder;
-class ReducedModeImageFetcher;
 
 // Encapsulates image fetching customization options.
 // (required)
@@ -32,13 +31,9 @@
 //   that's closest to the given size (only useful for .icos). Does NOT resize
 //   the downloaded image to the given dimensions.
 class ImageFetcherParams {
-  // Allows the bridge to access the private function set_skip_transcoding
+  // Only allow the bridge to access the private function set_skip_transcoding
   // used for gif download.
   friend class ImageFetcherBridge;
-  // Allows ReducedModeImageFetcher to access the private
-  // function set_skip_transcoding and set_allow_needs_transcoding_file because
-  // it ignores the ImageFetcherCallback.
-  friend class ReducedModeImageFetcher;
 
  public:
   // Sets the UMA client name to report feature-specific metrics. Make sure
@@ -73,10 +68,6 @@
 
   bool skip_transcoding() const { return skip_transcoding_; }
 
-  bool allow_needs_transcoding_file() const {
-    return allow_needs_transcoding_file_;
-  }
-
   // Only to be used in unittests.
   void set_skip_transcoding_for_testing(bool skip_transcoding) {
     skip_transcoding_ = skip_transcoding;
@@ -93,10 +84,6 @@
     skip_transcoding_ = skip_transcoding;
   }
 
-  void set_allow_needs_transcoding_file(bool allow_needs_transcoding_file) {
-    allow_needs_transcoding_file_ = allow_needs_transcoding_file;
-  }
-
   const net::NetworkTrafficAnnotationTag network_traffic_annotation_tag_;
 
   base::Optional<int64_t> max_download_bytes_;
@@ -110,9 +97,6 @@
   // True if the disk cache should be skipped because it was already checked in
   // java.
   bool skip_disk_cache_read_;
-  // True if allowing images that need transcoding to be stored with a prefix in
-  // file names.
-  bool allow_needs_transcoding_file_;
 };
 
 // A class used to fetch server images. It can be called from any thread and the
diff --git a/components/image_fetcher/core/image_fetcher_service.cc b/components/image_fetcher/core/image_fetcher_service.cc
index 1ad8b56..e509d52 100644
--- a/components/image_fetcher/core/image_fetcher_service.cc
+++ b/components/image_fetcher/core/image_fetcher_service.cc
@@ -12,7 +12,6 @@
 #include "components/image_fetcher/core/image_decoder.h"
 #include "components/image_fetcher/core/image_fetcher.h"
 #include "components/image_fetcher/core/image_fetcher_impl.h"
-#include "components/image_fetcher/core/reduced_mode_image_fetcher.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace image_fetcher {
@@ -29,9 +28,7 @@
       cached_image_fetcher_(
           std::make_unique<CachedImageFetcher>(image_fetcher_.get(),
                                                image_cache,
-                                               read_only)),
-      reduced_mode_image_fetcher_(std::make_unique<ReducedModeImageFetcher>(
-          cached_image_fetcher_.get())) {}
+                                               read_only)) {}
 
 ImageFetcherService::~ImageFetcherService() = default;
 
@@ -47,8 +44,6 @@
     // In memory portion is only available in Java.
     case ImageFetcherConfig::kInMemoryWithDiskCache:
       return cached_image_fetcher_.get();
-    case ImageFetcherConfig::kReducedMode:
-      return reduced_mode_image_fetcher_.get();
     default:
       // Provided ImageFetcherConfig not in the enum.
       NOTREACHED();
diff --git a/components/image_fetcher/core/image_fetcher_service.h b/components/image_fetcher/core/image_fetcher_service.h
index f8c5556..60231c8 100644
--- a/components/image_fetcher/core/image_fetcher_service.h
+++ b/components/image_fetcher/core/image_fetcher_service.h
@@ -34,12 +34,7 @@
   kInMemoryOnly = 2,
   // In memory cache with disk caching. Currently only available in Java.
   kInMemoryWithDiskCache = 3,
-  // Deferring image transcoding when fetching. This is because utility process
-  // isn't created in the reduced mode, thus the image decoding in the utility
-  // process is deferred until full browser starts. The ReducedModeImageFetcher
-  // will ignore any ImageFetcherCallback which asks transcoded images.
-  kReducedMode = 4,
-  kMaxValue = kReducedMode
+  kMaxValue = kInMemoryWithDiskCache
 };
 
 // Keyed service responsible for managing the lifetime of various ImageFetcher
@@ -67,9 +62,6 @@
   std::unique_ptr<ImageFetcher> image_fetcher_;
   // This fetcher goes through a disk cache before going to the network.
   std::unique_ptr<ImageFetcher> cached_image_fetcher_;
-  // This fetcher goes through a disk cache before going to the network, but
-  // defers image transcoding when fetching.
-  std::unique_ptr<ImageFetcher> reduced_mode_image_fetcher_;
 
   DISALLOW_COPY_AND_ASSIGN(ImageFetcherService);
 };
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher.cc b/components/image_fetcher/core/reduced_mode_image_fetcher.cc
deleted file mode 100644
index 2a599a46..0000000
--- a/components/image_fetcher/core/reduced_mode_image_fetcher.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/image_fetcher/core/reduced_mode_image_fetcher.h"
-
-namespace image_fetcher {
-
-ReducedModeImageFetcher::ReducedModeImageFetcher(ImageFetcher* image_fetcher)
-    : image_fetcher_(image_fetcher) {
-  DCHECK(image_fetcher_);
-}
-
-ReducedModeImageFetcher::~ReducedModeImageFetcher() = default;
-
-ImageDecoder* ReducedModeImageFetcher::GetImageDecoder() {
-  return nullptr;
-}
-
-void ReducedModeImageFetcher::FetchImageAndData(
-    const GURL& image_url,
-    ImageDataFetcherCallback image_data_callback,
-    ImageFetcherCallback image_callback,
-    ImageFetcherParams params) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(!image_data_callback.is_null());
-
-  params.set_skip_transcoding(true);
-  params.set_allow_needs_transcoding_file(true);
-
-  image_fetcher_->FetchImageAndData(image_url, std::move(image_data_callback),
-                                    ImageFetcherCallback(), params);
-}
-
-}  //  namespace image_fetcher
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher.h b/components/image_fetcher/core/reduced_mode_image_fetcher.h
deleted file mode 100644
index ceeb25b4..0000000
--- a/components/image_fetcher/core/reduced_mode_image_fetcher.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_
-#define COMPONENTS_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_
-
-#include <string>
-
-#include "base/sequence_checker.h"
-#include "components/image_fetcher/core/image_fetcher.h"
-#include "url/gurl.h"
-
-namespace image_fetcher {
-
-class ImageFetcher;
-
-// ReducedModeImageFetcher is used when Chrome is running in reduced mode. This
-// image fetcher defers image decoding during fetching, since decoding in the
-// utility process isn't available in the reduced mode. It ignores the
-// ImageFetcherCallback, but will return the fetched but not-transcoding image
-// to users by calling ImageDataFetcherCallback.
-class ReducedModeImageFetcher : public ImageFetcher {
- public:
-  ReducedModeImageFetcher(ImageFetcher* image_fetcher);
-  ~ReducedModeImageFetcher() override;
-
-  // ImageFetcher:
-  void FetchImageAndData(const GURL& image_url,
-                         ImageDataFetcherCallback image_data_callback,
-                         ImageFetcherCallback image_callback,
-                         ImageFetcherParams params) override;
-  ImageDecoder* GetImageDecoder() override;
-
- private:
-  // Owned by ImageFetcherService.
-  ImageFetcher* image_fetcher_;
-
-  // Used to ensure that operations are performed on the sequence that this
-  // object was created on.
-  SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(ReducedModeImageFetcher);
-};
-
-}  // namespace image_fetcher
-
-#endif  // COMPONENTS_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc b/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc
deleted file mode 100644
index ba0242b6..0000000
--- a/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/image_fetcher/core/reduced_mode_image_fetcher.h"
-
-#include <map>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/memory/ref_counted.h"
-#include "base/test/metrics/histogram_tester.h"
-#include "base/test/mock_callback.h"
-#include "base/test/scoped_task_environment.h"
-#include "base/test/simple_test_clock.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "components/image_fetcher/core/cache/image_cache.h"
-#include "components/image_fetcher/core/cache/image_data_store_disk.h"
-#include "components/image_fetcher/core/cache/image_metadata_store_leveldb.h"
-#include "components/image_fetcher/core/cache/proto/cached_image_metadata.pb.h"
-#include "components/image_fetcher/core/cached_image_fetcher.h"
-#include "components/image_fetcher/core/image_fetcher_impl.h"
-#include "components/image_fetcher/core/image_fetcher_metrics_reporter.h"
-#include "components/image_fetcher/core/image_fetcher_types.h"
-#include "components/leveldb_proto/testing/fake_db.h"
-#include "components/prefs/testing_pref_service.h"
-#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
-#include "services/network/public/cpp/shared_url_loader_factory.h"
-#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
-#include "services/network/test/test_url_loader_factory.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/image/image.h"
-#include "ui/gfx/image/image_unittest_util.h"
-
-using leveldb_proto::test::FakeDB;
-using testing::_;
-
-namespace image_fetcher {
-
-namespace {
-
-const GURL kImageUrl = GURL("http://gstatic.img.com/foo.jpg");
-
-constexpr char kUmaClientName[] = "TestUma";
-constexpr char kImageData[] = "data";
-
-const char kImageFetcherEventHistogramName[] = "ImageFetcher.Events";
-
-}  // namespace
-
-class ReducedModeImageFetcherTest : public testing::Test {
- public:
-  ReducedModeImageFetcherTest() {}
-
-  ~ReducedModeImageFetcherTest() override {
-    reduced_mode_image_fetcher_.reset();
-    // We need to run until idle after deleting the database, because
-    // ProtoDatabase deletes the actual LevelDB asynchronously.
-    RunUntilIdle();
-  }
-
-  void SetUp() override {
-    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
-    ImageCache::RegisterProfilePrefs(test_prefs_.registry());
-    CreateReducedModeImageFetcher();
-  }
-
-  void CreateReducedModeImageFetcher() {
-    auto db =
-        std::make_unique<FakeDB<CachedImageMetadataProto>>(&metadata_store_);
-    db_ = db.get();
-
-    auto metadata_store =
-        std::make_unique<ImageMetadataStoreLevelDB>(std::move(db), &clock_);
-    auto data_store = std::make_unique<ImageDataStoreDisk>(
-        data_dir_.GetPath(), base::SequencedTaskRunnerHandle::Get());
-
-    image_cache_ = base::MakeRefCounted<ImageCache>(
-        std::move(data_store), std::move(metadata_store), &test_prefs_, &clock_,
-        base::SequencedTaskRunnerHandle::Get());
-
-    // Use an initial request to start the cache up.
-    image_cache_->SaveImage(kImageUrl.spec(), kImageData,
-                            /* needs_transcoding */ false);
-    RunUntilIdle();
-    db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK);
-    image_cache_->DeleteImage(kImageUrl.spec());
-    RunUntilIdle();
-
-    shared_factory_ =
-        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
-            &test_url_loader_factory_);
-
-    image_fetcher_ = std::make_unique<image_fetcher::ImageFetcherImpl>(
-        /* ImageDecoder */ nullptr, shared_factory_);
-    cached_image_fetcher_ = std::make_unique<CachedImageFetcher>(
-        image_fetcher_.get(), image_cache_, /* read_only */ false);
-    reduced_mode_image_fetcher_ =
-        std::make_unique<ReducedModeImageFetcher>(cached_image_fetcher_.get());
-
-    RunUntilIdle();
-  }
-
-  void RunUntilIdle() { scoped_task_environment_.RunUntilIdle(); }
-
-  void VerifyCacheHit() {
-    RunUntilIdle();
-
-    base::MockCallback<ImageDataFetcherCallback> data_callback;
-
-    EXPECT_CALL(data_callback, Run(kImageData, _));
-    reduced_mode_image_fetcher()->FetchImageAndData(
-        kImageUrl, data_callback.Get(), ImageFetcherCallback(),
-        ImageFetcherParams(TRAFFIC_ANNOTATION_FOR_TESTS, kUmaClientName));
-    db()->LoadCallback(true);
-    RunUntilIdle();
-
-    histogram_tester().ExpectBucketCount(kImageFetcherEventHistogramName,
-                                         ImageFetcherEvent::kImageRequest, 1);
-    histogram_tester().ExpectBucketCount(kImageFetcherEventHistogramName,
-                                         ImageFetcherEvent::kCacheHit, 1);
-  }
-
-  ReducedModeImageFetcher* reduced_mode_image_fetcher() {
-    return reduced_mode_image_fetcher_.get();
-  }
-  scoped_refptr<ImageCache> image_cache() { return image_cache_; }
-  network::TestURLLoaderFactory* test_url_loader_factory() {
-    return &test_url_loader_factory_;
-  }
-  base::HistogramTester& histogram_tester() { return histogram_tester_; }
-  FakeDB<CachedImageMetadataProto>* db() { return db_; }
-
-  MOCK_METHOD2(OnImageLoaded, void(bool, std::string));
-
- private:
-  std::unique_ptr<ImageFetcher> image_fetcher_;
-  std::unique_ptr<ImageFetcher> cached_image_fetcher_;
-  std::unique_ptr<ReducedModeImageFetcher> reduced_mode_image_fetcher_;
-  network::TestURLLoaderFactory test_url_loader_factory_;
-  scoped_refptr<network::SharedURLLoaderFactory> shared_factory_;
-
-  scoped_refptr<ImageCache> image_cache_;
-  base::SimpleTestClock clock_;
-  TestingPrefServiceSimple test_prefs_;
-  base::ScopedTempDir data_dir_;
-  FakeDB<CachedImageMetadataProto>* db_;
-  std::map<std::string, CachedImageMetadataProto> metadata_store_;
-
-  base::test::ScopedTaskEnvironment scoped_task_environment_;
-  base::HistogramTester histogram_tester_;
-
-  DISALLOW_COPY_AND_ASSIGN(ReducedModeImageFetcherTest);
-};
-
-TEST_F(ReducedModeImageFetcherTest, FetchNeedsTranscodingImageFromCache) {
-  // Save the image that needs transcoding in the database.
-  image_cache()->SaveImage(kImageUrl.spec(), kImageData,
-                           /* needs_transcoding */ true);
-  VerifyCacheHit();
-}
-
-TEST_F(ReducedModeImageFetcherTest, FetchImageFromCache) {
-  // Save the image that doesn't need transcoding in the database.
-  image_cache()->SaveImage(kImageUrl.spec(), kImageData,
-                           /* needs_transcoding */ false);
-  VerifyCacheHit();
-}
-
-}  // namespace image_fetcher
diff --git a/components/payments/content/service_worker_payment_instrument.cc b/components/payments/content/service_worker_payment_instrument.cc
index 484eba9..252836d 100644
--- a/components/payments/content/service_worker_payment_instrument.cc
+++ b/components/payments/content/service_worker_payment_instrument.cc
@@ -97,15 +97,14 @@
 }
 
 ServiceWorkerPaymentInstrument::~ServiceWorkerPaymentInstrument() {
-  // TODO(crbug.com/782270): Implement abort InstallAndInvokePaymentApp for
-  // payment app that needs installation.
   if (delegate_ && !needs_installation_) {
-    // If there's a payment in progress, abort it before destroying this
-    // so that it can close its window. Since the PaymentRequest will be
+    // If there's a payment in progress, abort it before destroying this so that
+    // it can update its internal state. Since the PaymentRequest will be
     // destroyed, pass an empty callback to the payment app.
     content::PaymentAppProvider::GetInstance()->AbortPayment(
         browser_context_, stored_payment_app_info_->registration_id,
-        base::DoNothing());
+        url::Origin::Create(stored_payment_app_info_->scope),
+        *spec_->details().id, base::DoNothing());
   }
 }
 
@@ -143,7 +142,8 @@
 
   content::PaymentAppProvider::GetInstance()->CanMakePayment(
       browser_context_, stored_payment_app_info_->registration_id,
-      std::move(event_data),
+      url::Origin::Create(stored_payment_app_info_->scope),
+      *spec_->details().id, std::move(event_data),
       base::BindOnce(
           &ServiceWorkerPaymentInstrument::OnCanMakePaymentEventResponded,
           weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
@@ -237,6 +237,7 @@
   } else {
     content::PaymentAppProvider::GetInstance()->InvokePaymentApp(
         browser_context_, stored_payment_app_info_->registration_id,
+        url::Origin::Create(stored_payment_app_info_->scope),
         CreatePaymentRequestEventData(),
         base::BindOnce(&ServiceWorkerPaymentInstrument::OnPaymentAppInvoked,
                        weak_ptr_factory_.GetWeakPtr()));
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb
index 7d966d4..0ea0560 100644
--- a/components/policy/resources/policy_templates_am.xtb
+++ b/components/policy/resources/policy_templates_am.xtb
@@ -348,6 +348,11 @@
           ይህ መመሪያ ከተሰናከለ ወወይም ካልተዋቀረ የKerberos መለያዎች ቅንብሮች ይሰናከላሉ። ምንም የKerberos መለያዎች መታከል አአይችሉም እና የKerberos ማረጋገጫ ስራ ላይ መዋል አይችልም። ሁሉም ነባር የKerberos መለያዎች ይሰረዛሉ፣ እና ሁሉም የተከማቹ ይለፍ ቃላት ይሰረዛሉ።</translation>
 <translation id="1561424797596341174">መመሪያ ለርቀት መዳረሻ አስተናጋጅ እርማት ግንቦች ይሽራል</translation>
 <translation id="1561967320164410511">U2F ለግለሰብ ማስረገጥ ከሆኑ ቅጥያዎች ጋር</translation>
+<translation id="1566329065312331399">
+      ይህ መመሪያ ወደ ሐሰት ከተቀናበረ፣ መሣሪያው powerwash እንዲያስነሳ አይፈቅድም።
+      እውነት ሆኖ ሲቀናበር፣ powerwash እንዲያስነሳ መሣሪያውን ይፈቅድለታል
+      ሳይቀናበር ከተተወ፣ ወደ ሐሰት ነባሪ ይሆናል፣ ይህም ማለት መሣሪያው powerwash እንዲያደርግ አይፈቅድለትም።
+      </translation>
 <translation id="1574554504290354326">ይህ ቅንብር ተቋርጧል፣ በምትኩ SafeBrowsingExtendedReportingEnabled ይጠቀሙ። SafeBrowsingExtendedReportingEnabledን ማንቃት ወይም ማሰናከል  SafeBrowsingExtendedReportingOptInAllowedን ወደ ሐሰት የማዋቀር ያህል እኩል ዋጋ አለው።
 
        ይህን መመሪያ ወደ ሐሰት ማዋቀር ተጠቃሚዎች አንዳንድ የሥርዓት መረጃን እና የገጽ ይዘትን ወደ Google አገልጋዮች ለመላክ እንዳይመርጡ ያስቆማቸዋል። ይህ ቅንብር እውነት ከሆነ ወይም ካልተዋቀረ ተጠቃሚዎች አደገኛ መተግበሪያዎችን እና ጣቢያዎችን ፈልጎ እንዲያገኝ ለጥንቃቄ አሰሳ እንዲልኩለት ይፈቅድላቸዋል።
@@ -389,6 +394,7 @@
 
       ማስጠንቀቂያ፦ የ<ph name="PRODUCT_OS_NAME" /> ስሪት ቁጥጥር ለኪዮስክ መተግበሪያ መወከል መሣሪያው የሶፍትዌር ዝማኔዎችን እና ወሳኝነት ያላቸው የደህንነት ጥገናዎችን እንዳይቀበል ሊከለክለው ስለሚችል አይመከርም። የ<ph name="PRODUCT_OS_NAME" /> ስሪትን ቁጥጥር መወከል ተጠቃሚዎችን አደጋ ላይ ሊጥላቸው ይችላል።</translation>
 <translation id="1675002386741412210">የሚደገፈው በ፦</translation>
+<translation id="1700811900332333712">መሣሪያው powerwash እንዲጠይቅ ፍቀድ</translation>
 <translation id="1704516734140344991">የ <ph name="TPM_FIRMWARE_UPDATE_TPM" /> ን ፈርምዌር ዝማኔ ትግበራ ሁነታ ተገኝነትን እና ባህሪ ያዋቅራል።
 
       ነፍስ ወከፍ ቅንብሮች በ JSON ባህሪያት ውስጥ ሊጠቀሱ ይችላሉ።
@@ -2039,6 +2045,15 @@
       በዚህ ጊዜ ላይ ተጠቃሚው የዝማኔ አስፈላጊነት በተደጋጋሚ እንዲያውቁት ይደረጋሉ። ለ<ph name="PRODUCT_OS_NAME" /> መሣሪያዎች፣ በሥርዓት ትሪው ውስጥ በ <ph name="RELAUNCH_HEADS_UP_PERIOD_POLICY_NAME" /> መመሪያ መሠረት የዳግም ማስጀመሪያ ማሳወቂያ ብቅ ይላል። ለ<ph name="PRODUCT_NAME" /> አሳሾች፣ አንዴ የማሳወቂያው ክፍለ-ጊዜ አንድ ሦስተኛ ያህሉ እንዳለፈ ዳግም ማስጀመር እንደሚያስፈልግ ለመጠቆም የመተግበሪያው ምናሌ ይለውጣል። አንዴ የማሳወቂያው ክፍለ-ጊዜ ሁለት ሦስተኛው ካለፈ በኋላና እንዲሁም እንደገና ሙሉው ክፍለ-ጊዜ ካለፈ በኋላ ይህ ምናሌ ቀለም ይለውጣል። በ<ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> መመሪያ የነቁ ተጨማሪ ማሳወቂያዎች ይህንኑ ተመሳሳይ የጊዜ መርሐግብር ይከተላሉ።
 
       ካልተዋቀረ ነባሪው ክፍለ-ጊዜ 345600000 ሚሊሰከንዶች (አራት ቀናት) ለ<ph name="PRODUCT_OS_NAME" /> መሣሪያዎች እና ሚሊሰከንዶች (አንድ ሳምንት) ለ<ph name="PRODUCT_NAME" /> ስራ ላይ ይውላሉ።</translation>
+<translation id="4777805166623621364">
+      ይህ ቅንብር SitePerProcess ተጠቃሚዎች ከነባሪው የሁሉም ጣቢያዎች ይየማግለያ ባህሪ መርጠው እንዳይወጡ ለመከልከል ስራ ላይ ሊውል ይችላል። የIsolateOrigins መመሪያው እእንዲሁም ተጨማሪ ይበልጥ የተጣሩ ምንጮችን ለማግለል ጠቃሚ ሊሆን እንደሚችል ልብ ይበሉ።
+      መመሪያው ከነቃ ተጠቃሚዎች እያንዳንዱ ጣቢያ በራሱ ሂደት ውስጥ ከሚያሄድበት ነባሪው ባህሪ መርጠው መውጣት አይችሉም።
+      መመሪያው ካልተዋቀረ ወይም ከተሰናከለ ተጠቃሚው ከጣቢያ ማግለል መርጦ መውጣት ይችላል
+      (ለምሳሌ፦ በchrome://flags ውስጥ «የጣቢያ ማግለልን አሰናክል» ግቤትን መጠቀም)።  መመሪያውን ወደ ተሰናክሏል ማዋቀር እና/ወይም መመሪያውን እንዳልተዋቀረ መተው የጣቢያ ማግለልን አያጠፋውም።
+      በ <ph name="PRODUCT_OS_NAME" /> ስሪት 76 እና ከዚያ በፊት ያሉ፣ በተጨማሪ የ <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> መሣሪያ መመሪያን ወደ ተመሳሳይ እሴት ማቀናበር ይመከራል። በሁለቱ መመሪያዎች የተገለጹት እሴቶች የማይዛመዱ ከሆኑ በተጠቃሚ የተገለጸ እሴት እየተተገበረ ሳለ ወደ የተጠቃሚ ክፍለ-ጊዜ ሲገቡ መዘግየት ሊኖር ይችላል።
+
+      ማስታወሻ፦ ይህ መመሪያ በ Android ላይ አይተገበርም። በAndroid ላይ SitePerProcessን ለማንቃት የSitePerProcessAndroid መመሪያ ቅንብሩን ይጠቀሙ።
+      </translation>
 <translation id="4788252609789586009">የ<ph name="PRODUCT_NAME" /> ራስ-ሙላ ባህሪን ያነቃል፣ እና ተጠቃሚዎች ከዚህ ቀደም የተከማቸ መረጃን በመጠቀም የክሬዲት ካርድ መረጃን በድር ቅጾች ላይ በራስ-እንዲያጠናቅቁ ያስችላቸዋል።
 
       ይህ ቅንብር ከተሰናከለ ራስ-ሙላ በጭራሽ የክሬዲት ካርድ መረጃን አይጠቁምም ወይም አይሞላም፣ እንዲሁም ተጠቃሚው ድሩን እያሰሰ ሳለ ሊያስገባ የሚችለውን የክሬድቲ ካርድ መረጃን አያስቀምጥም።
@@ -2184,6 +2199,7 @@
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" />ን ሲያስጀምር ስራ ላይ የሚውሉ ተጨማሪ ልኬቶችን እንዲገልጹ ያስችልዎታል።
 
           ይህ መመሪያ ካልተዋቀረ ነባሪው የትዕዛዝ መስመር ስራ ላይ ይውላል።</translation>
+<translation id="5152787786897382519">ሁለቱም Chromium እና Google Chrome በባህሪ ላይ ቁጥጥርን ለመስጠት አንዱ በሌላኛው ላይ የሚመረኮዙ የመመሪያዎች አንዳንድ ቡድኖች አሏቸው። እነዚህ ስብስቦች በሚከተሉት የመመሪያ ቡድኖች የተወከሉ ናቸው። መመሪያዎች በርካታ ምንጮች ሊኖራቸው መቻሉ ከግምት በማስገባት፣ ከከፍተኛ ቅድሚያ ተሰጪ ምንጭ የሚመጡ እሴቶች ብቻ ተፈጻሚ ይሆናሉ። በተመሳሳይ ቡድን ውስጥ ያሉ ከዝቅተኛ ቅድሚያ ተሰጪ ምንጭ የሚመጡ እሴቶች ችላ ይባላሉ። የቅድሚያ ተሰጪነት ቅደም ተከተል በ <ph name="POLICY_PRIORITY_DOC_URL" /> ውስጥ ተገልጿል።</translation>
 <translation id="5159469559091666409">የአውታረ መረብ መከታተያ ጥቅሎች በምን ያህል ተደጋጋሚነት እንደሚላኩ፣ በሚሊሰከንዶች።
 
      ይህ መመሪያ እንዳልተዋቀረ ከተተወ ነባሪው ክፍተት 3 ደቂቃዎች ነው። ዝቅተኛው ክፍተት 30 ሰከንዶች ሲሆን ከፍተኛው ድግግሞሽ ደግሞ 24 ሰዓት ነው  - ከዚህ ወሰን ውጭ የሆኑ እሴቶች ወደዚህ ክልል ይካተታሉ።</translation>
@@ -2720,6 +2736,7 @@
 <translation id="5983708779415553259">በማንኛውም የይዘት ጥቅል ውስጥ የሌሉ የጣቢያዎች ነባሪ ባህሪ።</translation>
 <translation id="5997543603646547632">በነባሪነት ባለ 24 ሰዓት ሰዓት ይጠቀሙ</translation>
 <translation id="5997846976342452720">ተሰኪ አግኚው መሰናከል ያለበት ከሆነ ይግለጹ (ተቋርጧል)</translation>
+<translation id="5998198091336830580">ይህ መመሪያ የሚከተለው አቶሚክ ቡድን አንድ አካል ነው (በቡድኑ ውስት ያሉ ከከፍተኛ ምንጭ የመጡ መመሪያዎች ብቻ ተፈጻሚነት ይኖራቸዋል) ፦</translation>
 <translation id="6017568866726630990">ከህትመት ቅድመ-እይታ ይልቅ የስርዓቱ ህትመት መገናኛውን አሳይ።
 
       ይህ ቅንብር ሲነቃ አንድ ተጠቃሚ አንድ ገጽ እንዲታተም ሲጠይቅ <ph name="PRODUCT_NAME" /> አብሮ ከተሰራው የህትመት ቅድመ-እይታው ይልቅ የስርዓት ህትመት መገናኛውን ይከፍተዋል።
@@ -3469,6 +3486,9 @@
       ይህ መመሪያ ወደ ሐሰት ሲዋቀር ማሽኖችን ለመለየት ጥቅም ላይ ሊውል የሚችል መረጃ አይሰበሰብም።
 
       ይህ መመሪያ ተግባራዊ የሚሆነው <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ከነቃ እና ማሽኑ በ<ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> ከተመዘገበ ብቻ ነው።</translation>
+<translation id="7359307926583593395">
+      ይህ መመሪያ በመግቢያ ገጹ ላይ ይተገበራል። እባክዎ እንዲሁም በተጠቃሚ ክፍለ-ጊዜው ላይ የሚተገበረውን የ<ph name="SITE_PER_PROCESS_POLICY_NAME" /> መመሪያ ይመልከቱ። ሁለቱንም መመሪያዎች ወደ ተመሳስዩ እሴት እእንዲዋቀሩ ይመከራል። መመሪያዎቹ የማይዛመዱ ከሆኑ በተጠቃሚ የተገለጸ እሴት ተተግብሮ ሳለ ወደ የተጠቃሚ ክፍለ-ጊዜ መግባት መዘግየት ሊያስከትል ይችላል።
+      </translation>
 <translation id="737655323154569539">የህትመት ገጽ መጠንን ይገድባል። ያልተዋቀረ መመሪያና ባዶ ስብስብ እንደ ምንም ገደብ ነው የሚቆጠሩት።</translation>
 <translation id="7389872682701720082">ይህን ቅንብር ካነቁት ጊዜያቸው ያላለፈባቸው ተሰኪዎች ሁልጊዜ ያሄዳሉ።
 
@@ -3807,6 +3827,7 @@
 
           በተጨማሪም፣ የ«CookiesAllowedForUrls» እና «CookiesSessionOnlyForUrls» መመሪያዎችን ይመልከቱ። በእነዚህ ሦስት መመሪያዎች መካከል ምንም ርስ በርስ የሚጋጩ የዩአርኤል ሥርዓተ ጥለቶች መኖር እንደሌለባቸው ልብ ይበሉ - የትኛው መመሪያ ቅድሚያ እንደሚሰጠው አልተገለጸም።</translation>
 <translation id="8099880303030573137">በባትሪ ኃያል ላይ ሲሆን የስራ ፈትቶ መዘግየት</translation>
+<translation id="8101381354936029836">መመሪያ ኦቶሚክ ቡድን፦</translation>
 <translation id="8102913158860568230">ነባሪው የሚዲያ ዥረት ቅንብር</translation>
 <translation id="8104186956182795918">ድር ጣቢያዎች ምስሎችን ማሳየት የሚፈቀድላቸው እንደሆነ እንዲያዋቅሩ ያስችልዎታል። ምስሎችን ማሳየት ለሁሉም ጣቢያዎች ሊፈቀድ ወይም ሊከለከል ይችላል።
 
@@ -4007,6 +4028,15 @@
 <translation id="8489964335640955763">PluginVm</translation>
 <translation id="8493645415242333585">የአሰሳ ታሪክ ማስቀመጥን ያሰናክሉ</translation>
 <translation id="8499172469244085141">ነባሪ ቅንብሮች (ተጠቃሚዎች ሊሽሯቸው የሚችሉት)</translation>
+<translation id="849962487677588458">ይህ መመሪያ ተቋርጧል እና በ Chrome 78 ውስጥ ያለ ምንም ምትክ እንዲወገድ ተከልሏል።
+
+      ይህ መመሪያ HTTP/0.9 ን ከ 80 ይልቅ ለ HTTP እና 443 ለ HTTPS ወደቦች ላይ ያነቃል።
+
+      ይህ መመሪያ በነባሪ ተሰናክሏል እና ከነቃ ተጠቃሚዎችን ለደህንነት ችግር እንዲጋለጡ ያደርጋቸዋል https://crbug.com/600352.
+
+      ይህ መመሪያ ለድርጅቶች አሁን ያሉ አገልጋዮችን ከ HTTP/0.9 እንዲያፈልሱ ዕድል እንዲሰጣቸው የታለመ ነው እና ለወደፊቱ ይወገዳል።
+
+      ይህ መመሪያ ካልተቀናበረ፣ HTTP/0.9 ነባሪ ባልሆኑ ወደቦች ላይ ይሰናከላል።</translation>
 <translation id="8507835864888987300">ለራስ-ዝማኔዎች የዒላማ ስሪቱን ያቀናብራል።
 
       <ph name="PRODUCT_OS_NAME" /> መዘመን ወዳለበት የዒላማ ስሪት ቅድመ-ቅጥያውን ይገልጻል። መሣሪያው ከተገለጸው ቅድመ-ቅጥያ በፊት የሆነ ስሪት ከሆነ እያሄደ ያለው የተሰጠው ቅድመ-ቅጥያ ወዳለው የቅርብ ጊዜ ስሪት ይዘምናል። መሣሪያው አስቀድሞ የቅርብ ጊዜ ስሪት ላይ ከሆነ ውጤቶች በ<ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" /> እሴት ላይ የሚመሠረቱ ይሆናሉ። የቅድመ-ቅጥያ ቅርጸቱ በሚከለተው ምሳሌ እንደሚታየው ምንዝር-ተኮር ሆኖ ይሠራል፦
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index bf6e20a..4880a310 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -360,6 +360,11 @@
           Si se inhabilita o no se establece, no se permitirá la configuración de las cuentas de Kerberos. No se podrán agregar cuentas de Kerberos ni usar la autenticación Kerberos. Se borrarán todas las cuentas de Kerberos existentes y todas las contraseñas almacenadas.</translation>
 <translation id="1561424797596341174">Anulaciones de políticas en compilaciones de depuración del host de acceso remoto</translation>
 <translation id="1561967320164410511">U2F más extensiones para atestación individual</translation>
+<translation id="1566329065312331399">
+      Si se establece como falsa, esta política no permite que el dispositivo active Powerwash.
+      Si se establece como verdadera, permite que el dispositivo active Powerwash.
+      Si no se establece, su valor predeterminado es falso, lo que significa que no permite que el dispositivo active Powerwash.
+      </translation>
 <translation id="1574554504290354326">Esta configuración es obsoleta. En su lugar, usa SafeBrowsingExtendedReportingEnabled. Habilitar o inhabilitar SafeBrowsingExtendedReportingEnabled es equivalente a establecer SafeBrowsingExtendedReportingOptInAllowed como falsa.
 
       Si se establece esta política como falsa, los usuarios ya no podrán enviar cierta información del sistema ni contenido de páginas a los servidores de Google. Si se establece como verdadera o no se configura, los usuarios podrán enviar cierta información del sistema y contenido de páginas a la Navegación segura para detectar apps y sitios peligrosos.
@@ -401,6 +406,7 @@
 
       Advertencia: No se recomienda delegar el control de la versión de <ph name="PRODUCT_OS_NAME" /> a una Aplicación de kiosko ya que puede evitar que el dispositivo reciba actualizaciones de software y correcciones de seguridad críticas. Delegar el control de la versión de <ph name="PRODUCT_OS_NAME" /> puede poner en riesgo a los usuarios.</translation>
 <translation id="1675002386741412210">Compatible con:</translation>
+<translation id="1700811900332333712">Permite que el dispositivo solicite Powerwash</translation>
 <translation id="1704516734140344991">Configura la disponibilidad y el comportamiento de la función de actualización del firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Se pueden especificar opciones de configuración particulares en las propiedades de JSON:
@@ -2017,6 +2023,15 @@
       En este período, se le informará reiteradamente al usuario acerca de la necesidad de la actualización. En dispositivos <ph name="PRODUCT_OS_NAME" />, se muestra una notificación de reinicio en la bandeja del sistema, en conformidad con la política <ph name="RELAUNCH_HEADS_UP_PERIOD_POLICY_NAME" />. En navegadores <ph name="PRODUCT_NAME" />, el menú de la app indica que se debe reiniciar después de transcurrido un tercio del período de la notificación. Esta notificación cambia de color tras dos tercios del período de la notificación y una vez más cuando finaliza este período. Las notificaciones adicionales que habilita la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> siguen el mismo patrón.
 
       Si no se establece, se utiliza el período predeterminado de 345600000 milisegundos (cuatro días) para los dispositivos <ph name="PRODUCT_OS_NAME" /> y 604800000 milisegundos (una semana) para los dispositivos <ph name="PRODUCT_NAME" />.</translation>
+<translation id="4777805166623621364">
+      Esta configuración, SitePerProcess, se puede usar para impedir que los usuarios rechacen el comportamiento predeterminado del aislamiento de todos los sitios. Ten en cuenta que la política IsolateOrigins también puede ser útil para aislar los orígenes adicionales más precisos.
+      Si se habilita la política, los usuarios no podrán rechazar el comportamiento predeterminado en el que cada sitio ejecuta su propio proceso.
+      Si se inhabilita la política o no se configura, el usuario podrá rechazar el aislamiento de sitios
+      (p. ej., mediante la entrada para inhabilitar el aislamiento de sitios en chrome://flags).  Si se inhabilita la política o no se configura, no se desactivará el aislamiento de sitios.
+      En <ph name="PRODUCT_OS_NAME" /> 76 y versiones anteriores, se recomienda también establecer la política de dispositivo <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> en el mismo valor. Si los valores que especifican las dos políticas no coinciden, es posible que se produzca un retraso al ingresar una sesión de usuario mientras se aplica el valor que especifica la política del usuario.
+
+      NOTA: Esta política no se aplica en Android. Para habilitar SitePerProcess en Android, usa la configuración de la política SitePerProcessAndroid.
+      </translation>
 <translation id="4788252609789586009">Habilita la función "Autocompletar" de <ph name="PRODUCT_NAME" /> y permite que los usuarios completen automáticamente formularios web con información ya almacenada de las tarjetas de crédito.
 
       Si se inhabilita esta configuración, "Autocompletar" nunca sugerirá ni completará información de tarjetas de crédito. Tampoco guardará información adicional de tarjetas que el usuario haya enviado cuando navegaba en la Web.
@@ -2158,6 +2173,7 @@
 <translation id="5148753489738115745">Te permite especificar los parámetros adicionales que se utilizan cuando <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />.
 
           Si no se configura esta política, se utilizará la línea de comandos predeterminada.</translation>
+<translation id="5152787786897382519">Chromium y Google Chrome tienen algunos grupos de políticas que dependen unos de otros para controlar una función. Los siguientes grupos de políticas representan estos conjuntos. Como las políticas pueden tener diferentes orígenes, solo se aplicarán los valores que provengan de la fuente de mayor prioridad. Se ignorarán los valores que provengan de una fuente de menor prioridad en el mismo grupo. El orden de prioridad se define en <ph name="POLICY_PRIORITY_DOC_URL" />.</translation>
 <translation id="5159469559091666409">La frecuencia de envío de paquetes de red de control, en milisegundos.
 
       Si esta política no se configura, el intervalo predeterminado es 3 minutos. El intervalo
@@ -2674,6 +2690,7 @@
 <translation id="5983708779415553259">Comportamiento predeterminado de los sitios que no forman parte de ningún paquete de contenido</translation>
 <translation id="5997543603646547632">Utilizar reloj con formato de 24 horas de forma predeterminada</translation>
 <translation id="5997846976342452720">Indicar si el buscador de complementos se debe inhabilitar (obsoleto)</translation>
+<translation id="5998198091336830580">Esta política es parte del siguiente grupo atómico (solo se aplican las políticas que provengan de la fuente de mayor prioridad del grupo):</translation>
 <translation id="6017568866726630990">Permite mostrar el cuadro de diálogo de impresión del sistema en lugar de la vista previa de impresión.
 
       Si esta opción se habilita, <ph name="PRODUCT_NAME" /> abrirá el cuadro de diálogo de impresión del sistema en lugar de la vista previa de impresión integrada cuando un usuario solicite que se imprima una página.
@@ -3404,6 +3421,9 @@
       Si se establece como falsa, no se recopilará esta información.
 
       Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
+<translation id="7359307926583593395">
+      Esta política se aplica a la pantalla de acceso. Consulta también la política <ph name="SITE_PER_PROCESS_POLICY_NAME" />, que se aplica a la sesión de usuario. Se recomienda establecer ambas políticas en el mismo valor. Si los valores no coinciden, es posible que se produzca un retraso al ingresar una sesión de usuario mientras se aplica el valor que especifica la política del usuario.
+      </translation>
 <translation id="737655323154569539">Restringe el tamaño de la página de impresión. Si la política no se configura o se establece con un valor vacío, no se aplicará ninguna restricción.</translation>
 <translation id="7389872682701720082">Si habilitas esta opción, se ejecutarán siempre los complementos actualizados.
 
@@ -3729,6 +3749,7 @@
 
           También visita las políticas "CookiesAllowedForUrls" y "CookiesSessionOnlyForUrls". Ten en cuenta que no debe haber patrones de URL en conflicto entre estas tres políticas. No se especifica qué política tiene prioridad.</translation>
 <translation id="8099880303030573137">Demora de inactividad con batería</translation>
+<translation id="8101381354936029836">Grupo atómico de la política:</translation>
 <translation id="8102913158860568230">Configuración de mediastream predeterminada</translation>
 <translation id="8104186956182795918">Te permite configurar si los sitios web pueden mostrar imágenes. La visualización de imágenes se puede permitir o denegar para todos los sitios web.
 
@@ -3951,6 +3972,15 @@
 <translation id="8489964335640955763">PluginVm</translation>
 <translation id="8493645415242333585">Inhabilitar el almacenamiento del historial del navegador</translation>
 <translation id="8499172469244085141">Configuración predeterminada (los usuarios pueden modificarla)</translation>
+<translation id="849962487677588458">Esta política quedó obsoleta, se programó su eliminación en Chrome 78 y no se reemplazará.
+
+      Su función es habilitar HTTP/0.9 en puertos que no sean 80 para HTTP ni 443 para HTTPS.
+
+      Está inhabilitada de forma predeterminada, pero, si se habilita, deja a los usuarios desprotegidos frente al problema de seguridad que se indican en https://crbug.com/600352.
+
+      Esta política permite que las empresas migren a servidores existentes fuera de HTTP/0.9, y se eliminará en el futuro.
+
+      Si no se establece, se inhabilitará HTTP/0.9 en los puertos no predeterminados.</translation>
 <translation id="8507835864888987300">Establece una versión objetivo para las actualizaciones automáticas.
 
       Especifica el prefijo de la versión objetivo a la que debe actualizarse <ph name="PRODUCT_OS_NAME" />. Si el dispositivo ejecuta una versión anterior al prefijo indicado, se actualizará a la versión más reciente con dicho prefijo. Si el dispositivo ya cuenta con una versión posterior, los efectos dependerán del valor de <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />. El formato del prefijo funciona en relación con el componente, como se demuestra en el siguiente ejemplo:
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb
index fe89bc3..42423e3 100644
--- a/components/policy/resources/policy_templates_fil.xtb
+++ b/components/policy/resources/policy_templates_fil.xtb
@@ -367,6 +367,11 @@
           Kung naka-disable o hindi nakatakda ang patakarang ito, naka-disable ang mga setting ng Mga Kerberos Account. Walang maidaragdag na Kerberos account at hindi magagamit ang pag-authenticate ng Kerberos. Ide-delete ang lahat ng kasalukuyang Kerberos account, ide-delete ang lahat ng naka-store na password.</translation>
 <translation id="1561424797596341174">Mga pag-override ng patakaran para sa Mga build sa pag-debug ng host ng malayuang access</translation>
 <translation id="1561967320164410511">U2F kasama ang mga extension para sa pagpapatunay ng indibidwal</translation>
+<translation id="1566329065312331399">
+      Kapag nakatakda ang patakarang ito sa False, hindi pinapayagan ang device na i-trigger ang powerwash.
+      Kapag nakatakda sa True, pinapayagan nito ang device na i-trigger ang powerwash.
+      Kung hinayaang hindi nakatakda, magiging default ito sa False, ang ibig sabihin ay hindi nito pinapayagan ang device na mag-powerwash.
+      </translation>
 <translation id="1574554504290354326">Hindi na ginagamit ang setting na ito, gamitin na lang ang SafeBrowsingExtendedReportingEnabled. Katumbas ng pag-enable o pag-disable ng SafeBrowsingExtendedReportingEnabled ang pagtakda ng SafeBrowsingExtendedReportingOptInAllowed sa False.
 
       Kapag itinakda ang patakarang ito sa false, mapipigilan ang mga user na piliing magpadala ng ilang impormasyon ng system at content ng page sa mga server ng Google. Kung ang setting na ito ay true o hindi na-configure, papayagan ang mga user na magpadala ng ilang impormasyon ng system at content ng page sa Ligtas na Pag-browse para makatulong sa pag-detect ng mga mapanganib na app at site.
@@ -406,6 +411,7 @@
 
       Babala: Hindi inirerekomenda ang pagtatalaga ng kontrol sa bersyon ng <ph name="PRODUCT_OS_NAME" /> sa isang kiosk app dahil maaari nitong pigilan ang pagtanggap ng device ng mga update sa software at kritikal na pag-aayos sa seguridad. Maaaring malagay sa peligro ang mga user kung magtatalaga ng kontrol sa bersyon ng <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="1675002386741412210">Suportado sa:</translation>
+<translation id="1700811900332333712">Payagan ang device na humiling ng powerwash</translation>
 <translation id="1704516734140344991">Kino-configure ang availability at gawi ng functionality ng pag-update sa <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware.
 
       Matutukoy ang mga indibidwal na setting sa mga JSON property:
@@ -2071,6 +2077,15 @@
       Sa yugto ng panahong ito, paulit-ulit na ipapaalam sa user ang pangangailangang mag-update. Para sa mga <ph name="PRODUCT_OS_NAME" /> device, lalabas sa system tray ang notification sa pag-restart alinsunod sa patakarang <ph name="RELAUNCH_HEADS_UP_PERIOD_POLICY_NAME" />. Para sa mga <ph name="PRODUCT_NAME" /> browser, magbabago ang menu ng app para isaad na kinakailangan ng muling paglulunsad kapag lumipas ang one third ng yugto ng panahon ng notification. Magbabago ng kulay ang notification na ito kapag lumipas ang two thirds ng yugto ng panahon ng notification, at muli kapag lumipas ang buong yugto ng panahon ng notification. Ang mga karagdagang notification na na-enable ng patakarang <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> ay sumusunod sa kaparehong iskedyul na ito.
 
       Kung hindi itatakda, ang default na yugto ng panahong 345600000 millisecond (apat na araw) ang gagamitin para sa mga <ph name="PRODUCT_OS_NAME" /> device at 604800000 millisecond (isang linggo) ang gagamitin para sa <ph name="PRODUCT_NAME" />.</translation>
+<translation id="4777805166623621364">
+      Magagamit ang setting na SitePerProcess para huwag payagan ang mga user na mag-opt out sa default na gawi ng pag-isolate ng lahat ng site. Tandaang puwede ring maging kapaki-pakinabang ang patakarang IsolateOrigins sa pag-isolate ng karagdagang mas mahuhusay na pinagmulan.
+      Kung naka-enable ang patakaran, hindi makakapag-opt out ang mga user sa default na gawi kung saan tumatakbo ang bawat site sa sarili nitong proseso.
+      Kung hindi naka-configure o naka-disable ang patakaran, makakapag-opt out ang user sa pag-isolate ng site
+      (hal. paggamit ng entry na "I-disable ang pag-isolate ng site" sa chrome://flags).  Hindi mao-off ang Pag-isolate ng Site kapag itinakda ang patakaran sa naka-disable at/o hindi na-configure ang patakaran.
+      Sa <ph name="PRODUCT_OS_NAME" /> bersyon 76 at mas luma, inirerekomendang itakda rin ang patakaran ng device na <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> sa parehong value. Kung hindi magkatugma ang mga value na tinukoy ng dalawang patakaran, puwedeng magkaroon ng pagkaantala kapag pumapasok sa session ng user habang inilalapat ang value na tinukoy ng patakaran ng user.
+
+      TANDAAN: Hindi nalalapat ang patakarang ito sa Android. Para i-enable ang SitePerProcess sa Android, gamitin ang setting ng patakarang SitePerProcessAndroid.
+      </translation>
 <translation id="4788252609789586009">Ine-enable ang feature na AutoFill ng <ph name="PRODUCT_NAME" /> at binibigyang-daan ang mga user na awtomatikong kumpletuhin ang impormasyon ng credit card sa mga web form gamit ang dati nang na-store na impormasyon.
 
       Kung idi-disable ang setting na ito, hindi kailanman magmumungkahi o magkukumpleto ang AutoFill ng impormasyon ng credit card, o hindi nito ise-save ang karagdagang impormasyon ng credit card na maaaring isumite ng user habang nagba-browse siya sa web.
@@ -2219,6 +2234,7 @@
 <translation id="5148753489738115745">Binibigyang-daan kang tukuyin ang mga karagdagang parameter na ginagamit kapag nilunsad ng <ph name="PRODUCT_FRAME_NAME" /> ang <ph name="PRODUCT_NAME" />.
 
           Kung hindi naitakda ang patakarang ito, ang default na command line ang gagamitin.</translation>
+<translation id="5152787786897382519">Ang parehong Chromium at Google Chrome ay may ilang pangkat ng mga patakaran na nakadepende sa isa't isa para makapagbigay ng kontrol sa isang feature. Ang mga hanay na ito ay kinakatawan ng mga sumusunod na pangkat ng patakaran. Dahil puwedeng magkaroon ng maraming pinagmulan ang mga patakaran, ang mga value lang na mula sa pinagmulang may pinakamataas na priyoridad ang ilalapat. Babalewalain ang mga value na mula sa pinagmulang may mababang priyoridad. Tutukuyin ang pagkakasunud-sunod ng priyoridad sa <ph name="POLICY_PRIORITY_DOC_URL" />.</translation>
 <translation id="5159469559091666409">Gaano kadalas ipinapadala ang mga sinusubaybayang network packet, sa millisecond.
 
       Kung hindi nakatakda ang patakarang ito, ang default na pagitan ay 3 minuto.
@@ -2761,6 +2777,7 @@
 <translation id="5983708779415553259">Default na pagkilos para sa mga site na wala sa anumang pack ng nilalaman</translation>
 <translation id="5997543603646547632">Gamitin ang 24 na oras na orasan bilang default</translation>
 <translation id="5997846976342452720">Tumutukoy kung dapat i-disable ang finder ng plugin (hindi na ginagamit)</translation>
+<translation id="5998198091336830580">Bahagi ang patakarang ito ng sumusunod na atomic na pangkat (mga patakaran lang mula sa pinagmulang may pinakamataas na priyoridad na nasa pangkat ang ilalapat) :</translation>
 <translation id="6017568866726630990">Ipakita ang dialog ng system sa pag-print sa halip na ang preview sa pag-print.
 
       Kapag pinagana ang setting na ito, bubuksan ng <ph name="PRODUCT_NAME" /> ang dialog ng system sa pag-print sa halip na ang built-in na preview sa pag-print kapag humihiling ang isang user na mag-print ng isang pahina.
@@ -3514,6 +3531,9 @@
       Kapag nakatakda ang patakarang ito sa False, hindi kukuha ng impormasyong magagamit sa pagkilala ng mga machine.
 
       May bisa lang ang patakarang ito kapag naka-enable ang <ph name="CHROME_REPORTING_EXTENSION_NAME" />, at naka-enroll sa <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> ang machine.</translation>
+<translation id="7359307926583593395">
+      Nalalapat ang patakarang ito sa screen sa pag-sign in. Pakitingnan din ang patakarang <ph name="SITE_PER_PROCESS_POLICY_NAME" /> na nalalapat sa session ng user. Inirerekomendang itakda ang parehong patakaran sa parehong value. Kung hindi magkatugma ang mga value, puwedeng magkaroon ng pagkaantala kapag pumapasok sa session ng user habang inilalapat ang value na tinukoy ng patakaran ng user.
+      </translation>
 <translation id="737655323154569539">Pinaghihigpitan ang laki ng page ng pag-print. Itinuturing na walang paghihigpit ang hindi nakatakdang patakaran at empty set.</translation>
 <translation id="7389872682701720082">Kung ie-enable mo ang setting na ito, palaging tatakbo ang mga plugin na hindi outdated.
 
@@ -3852,6 +3872,7 @@
 
           Tingnan din ang mga patakarang 'CookiesAllowedForUrls' at 'CookiesSessionOnlyForUrls.' Tandaang wala dapat magkakasalungat na pattern ng URL sa tatlong patakarang ito - hindi tinutukoy kung aling patakaran ang nangingibabaw.</translation>
 <translation id="8099880303030573137">Idle delay kapag tumatakbo gamit ang power ng baterya</translation>
+<translation id="8101381354936029836">Atomic na pangkat ng patakaran:</translation>
 <translation id="8102913158860568230">Default na setting ng mediastream</translation>
 <translation id="8104186956182795918">Binibigyang-daan kang itakda kung papayagan ang mga website na magpakita ng mga larawan. Ang pagpapakita ng mga larawan ay maaaring payagan para sa lahat ng website o tanggihan para sa lahat ng website.
 
@@ -4060,6 +4081,15 @@
 <translation id="8489964335640955763">PluginVm</translation>
 <translation id="8493645415242333585">Huwag paganahin ang pag-save ng kasaysayan ng browser</translation>
 <translation id="8499172469244085141">Mga Default na Setting (maaaring i-override ng mga user)</translation>
+<translation id="849962487677588458">Hindi na ginagamit ang patakarang ito, at nasa slate para alisin sa Chrome 78, nang walang kapalit.
+
+      Pinapagana ng patakarang ito ang HTTP/0.9 sa mga port bukod sa 80 para sa HTTP at 443 para sa HTTPS.
+
+      Naka-disable bilang default ang patakarang ito, at kung naka-enable, puwedeng makaranas ang mga user ng mga isyu sa seguridad https://crbug.com/600352.
+
+      Ginawa ang patakarang ito para bigyan ang mga enterprise ng pagkakataong mag-migrate ng mga kasalukuyang server mula sa HTTP/0.9, at aalisin ito sa hinaharap.
+
+      Kung hindi nakatakda ang patakarang ito, idi-disable ang HTTP/0.9 sa mga hindi default na port.</translation>
 <translation id="8507835864888987300">Nagtatakda ng target na bersyon para sa Mga Awtomatikong Pag-update.
 
       Tinutukoy ang prefix ng isang target na bersyon kung saan dapat ma-update ang <ph name="PRODUCT_OS_NAME" />. Kung nagpapatakbo ang device ng bersyon bago ang natukoy na prefix, maa-update ito sa pinakabagong bersyon gamit ang ibinigay na prefix. Kung nasa mas bagong bersyon na ang device, nakadepende ang mga epekto sa value ng <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />. Gumagana ang format ng prefix ayon sa bahagi gaya ng ipinapakita sa sumusunod na halimbawa: 
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb
index 5e3c3da..357efafd 100644
--- a/components/policy/resources/policy_templates_hi.xtb
+++ b/components/policy/resources/policy_templates_hi.xtb
@@ -2232,7 +2232,7 @@
 <translation id="5148753489738115745">यह नीति आपको कुछ और पैरामीटर तय करने की सुविधा देती है. जब <ph name="PRODUCT_FRAME_NAME" />, <ph name="PRODUCT_NAME" /> को लॉन्च करता है, तब इन पैरामीटर का उपयोग किया जाता है.
 
           अगर यह नीति सेट नहीं है तो, डिफ़ॉल्ट कमांड लाइन का उपयोग किया जाएगा.</translation>
-<translation id="5152787786897382519">Chromium और Google Chrome में ऐसी नीतियों के समूह हैं जो किसी सुविधा को नियंत्रित करने के लिए, एक-दूसरे के साथ काम करती हैं. ये सेट इन नीतियों की मदद से दिखाए जाते हैं. अगर नीतियों के एक से ज़्यादा स्रोत हों, तो सबसे ज़्यादा प्राथमिकता वाले मान लागू होंगे. एक ही समूह में कम प्राथमिकता वाले स्रोत से आने वाले मान नहीं लिए जाएंगे. प्राथमिकता का क्रम <ph name="POLICY_PRIORITY_DOC_URL" /> में बताया गया है.</translation>
+<translation id="5152787786897382519">क्रोमियम और Google Chrome में ऐसी नीतियों के समूह हैं जो किसी सुविधा को नियंत्रित करने के लिए, एक-दूसरे के साथ काम करती हैं. ये सेट इन नीति समूहों की मदद से दिखाए जाते हैं. अगर नीतियों के एक से ज़्यादा स्रोत हों, तो सबसे ज़्यादा प्राथमिकता वाले मान लागू होंगे. एक ही समूह में कम प्राथमिकता वाले स्रोत से आने वाले मान नहीं लिए जाएंगे. प्राथमिकता का क्रम <ph name="POLICY_PRIORITY_DOC_URL" /> में बताया गया है.</translation>
 <translation id="5159469559091666409">निगरानी करने वाले नेटवर्क पैकेट कितने मिलीसेकंड में भेजे जाते हैं.
 
       अगर यह नीति सेट नहीं की गई है, तो डिफ़ॉल्ट अंतराल 3 मिनट का होता है. कम से कम
@@ -3529,7 +3529,7 @@
 
       यह नीति सिर्फ़ तब लागू होती है जब <ph name="CHROME_REPORTING_EXTENSION_NAME" /> चालू हो और मशीन का नाम <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> के ज़रिए दर्ज कराया गया हो.</translation>
 <translation id="7359307926583593395">
-      यह नीति साइन-इन स्क्रीन पर लागू होती है. कृपया उपयोगकर्ता सत्र पर लागू होने वाली <ph name="SITE_PER_PROCESS_POLICY_NAME" /> नीति भी देखें. दोनों नीतियों को एक ही मान पर सेट करने का सुझाव दिया जाता है. अगर मान मेल नहीं खाते, तो उपयोगकर्ता नीति से तय किए गए मान को लागू करते समय उपयोगकर्ता सेशन में जाने में देर हो सकती है.
+      यह नीति साइन इन स्क्रीन पर लागू होती है. कृपया उपयोगकर्ता सत्र पर लागू होने वाली <ph name="SITE_PER_PROCESS_POLICY_NAME" /> नीति भी देखें. दोनों नीतियों को एक ही मान पर सेट करने का सुझाव दिया जाता है. अगर मान मेल नहीं खाते, तो उपयोगकर्ता नीति से तय किए गए मान को लागू करते समय उपयोगकर्ता सेशन में जाने में देर हो सकती है.
       </translation>
 <translation id="737655323154569539">प्रिंटिंग पेज आकार को रोक देती है. सेट न की गई और खाली छोड़ दी गई नीति पर कोई रोक नहीं होती है.</translation>
 <translation id="7389872682701720082">अगर आप यह सेटिंग चालू करते हैं, तो वे प्लग इन हमेशा चलते हैं जो पुराने नहीं हैं.
@@ -4076,7 +4076,7 @@
 <translation id="8499172469244085141">डिफ़ॉल्ट सेटिंग (उपयोगकर्ता ओवरराइड कर सकते हैं)</translation>
 <translation id="849962487677588458">इस नीति का इस्तेमाल रोक दिया गया है और इसे Chrome 78 में हटा दिया जाएगा. इसके बदले कोई दूसरी नीति लागू नहीं की जाएगी.
 
-      इस नीति से एचटीटीपी के लिए 80 के अलावा दूसरे पोर्ट पर और एचटीटीपीएस के लिए 443 के अलावा दूसरे पोर्ट पर, HTTP/0.9 चालू हो जाता है.
+      इस नीति से एचटीटीपी के लिए 80 और एचटीटीपीएस के लिए 443 के अलावा दूसरे पोर्ट पर, HTTP/0.9 चालू हो जाता है.
 
       यह नीति डिफ़ॉल्ट रूप से बंद होती है. इसके चालू होने पर, उपयोगकर्ताओं को सुरक्षा से जुड़ी https://crbug.com/600352 समस्या होती है.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 30750f6..a714667 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -4036,7 +4036,8 @@
       Questa norma è disponibile esclusivamente per le istanze di Windows che fanno parte di un dominio <ph name="MS_AD_NAME" /> così come per le istanze di Windows 10 Pro o Enterprise registrate per la gestione dei dispositivi.</translation>
 <translation id="8798099450830957504">Predefinito</translation>
 <translation id="8800453707696044281">Imposta il valore percentuale personalizzato raggiunto il quale viene interrotta la ricarica della batteria</translation>
-<translation id="8801680448782904838">Consente di inviare a un utente una notifica che comunica che è consigliato o necessario eseguire un riavvio del browser o del dispositivo</translation>
+<translation id="8801680448782904838">Invia a un utente una notifica che comunica che è consigliato o necessario eseguire un riavvio del browser o del dispositivo
+</translation>
 <translation id="8818173863808665831">Consente di segnalare la posizione geografica del dispositivo.
 
 Se la norma non viene impostata o viene impostata su false, la posizione non viene segnalata.</translation>
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index bd2cf94..7df886ec 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -2112,7 +2112,7 @@
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" /> ಅನ್ನು ಪ್ರಾರಂಭಿಸಿದಾಗ ಬಳಸಲಾಗುವ ಹೆಚ್ಚುವರಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
 
          ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದರೆ ಡಿಫಾಲ್ಟ್ ಕಮಾಂಡ್ ಸಾಲನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
-<translation id="5152787786897382519">Chromium ಮತ್ತು Google Chrome ಎರಡೂ ವೈಶಿಷ್ಟ್ಯಗಳ ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನು ಒದಗಿಸಲು ಪರಸ್ಪರ ಅವಲಂಬಿಸಿರುವ ಕೆಲವು ಕಾರ್ಯನೀತಿಗಳ ಗುಂಪುಗಳನ್ನು ಹೊಂದಿವೆ. ಈ ಸೆಟ್‌ಗಳನ್ನು ಕೆಳಗಿನ ಕಾರ್ಯನೀತಿ ಗುಂಪುಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತಿದೆ. ಕಾರ್ಯನೀತಿಗಳು ಹಲವಾರು ಮೂಲಗಳನ್ನು ಹೊಂದಿರಬಹುದು, ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯ ಮೂಲದಿಂದ ಸ್ವೀಕರಿಸುವ ಮೌಲ್ಯಗಳನ್ನು ಮಾತ್ರ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ಒಂದೇ ಗುಂಪಿನಲ್ಲಿ ಕಡಿಮೆ ಆದ್ಯತೆಯ ಮೂಲದಿಂದ ಬರುವ ಮೌಲ್ಯಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. ಆದ್ಯತೆಯ ಕ್ರಮವನ್ನು <ph name="POLICY_PRIORITY_DOC_URL" /> ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ.</translation>
+<translation id="5152787786897382519">Chromium ಮತ್ತು Google Chrome ಎರಡೂ ವೈಶಿಷ್ಟ್ಯಗಳ ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನು ಒದಗಿಸಲು ಪರಸ್ಪರ ಅವಲಂಬಿಸಿರುವ ಕೆಲವು ಕಾರ್ಯನೀತಿಗಳ ಗುಂಪುಗಳನ್ನು ಹೊಂದಿವೆ. ಈ ಸೆಟ್‌ಗಳನ್ನು ಕೆಳಗಿನ ಕಾರ್ಯನೀತಿ ಗುಂಪುಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತಿದೆ. ಕಾರ್ಯನೀತಿಗಳು ಹಲವಾರು ಮೂಲಗಳನ್ನು ಹೊಂದಿರಬಹುದಾದ ಕಾರಣ ಅತ್ಯಧಿಕ ಆದ್ಯತೆಯ ಮೂಲದಿಂದ ಸ್ವೀಕರಿಸುವ ಮೌಲ್ಯಗಳನ್ನು ಮಾತ್ರ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ಒಂದೇ ಗುಂಪಿನಲ್ಲಿ ಕಡಿಮೆ ಆದ್ಯತೆಯ ಮೂಲದಿಂದ ಬರುವ ಮೌಲ್ಯಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. ಆದ್ಯತೆಯ ಕ್ರಮವನ್ನು <ph name="POLICY_PRIORITY_DOC_URL" /> ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ.</translation>
 <translation id="5159469559091666409">ಮಿಲಿಸೆಕೆಂಡುಗಳಲ್ಲಿ, ನೆಟ್‌ವರ್ಕ್‌ ಪ್ಯಾಕೇಟ್‌ಗಳ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವುದನ್ನು ಎಷ್ಟು ಬಾರಿ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.
       ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಡಿಫಾಲ್ಟ್ ವಿರಾಮವು 3 ನಿಮಿಷಗಳಾಗಿರುತ್ತದೆ. ಕನಿಷ್ಠ ವಿರಾಮ 30 ಸೆಕೆಂಡುಗಳಾಗಿರುತ್ತದೆ ಮತ್ತು ಗರಿಷ್ಠ ವಿರಾಮ 24 ಗಂಟೆಗಳಾಗಿರುತ್ತದೆ - ಈ ವ್ಯಾಪ್ತಿಯ ಹೊರಗಿನ
 ಮೌಲ್ಯಗಳನ್ನು ಈ ವ್ಯಾಪ್ತಿಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ.</translation>
@@ -2627,7 +2627,7 @@
 <translation id="5983708779415553259">ಯಾವುದೇ ವಿಷಯದ ಪ್ಯಾಕ್‌ನಲ್ಲಿಲ್ಲದ ಸೈಟ್‌ಗಳಿಗಾಗಿ ಡಿಫಾಲ್ಟ್ ನಡವಳಿಕೆ</translation>
 <translation id="5997543603646547632">ಡಿಫಾಲ್ಟ್‌ ಮೂಲಕ 24 ಗಂಟೆಗಳ ಗಡಿಯಾರವನ್ನು ಬಳಸು</translation>
 <translation id="5997846976342452720">ಪ್ಲಗ್‌ಇನ್ ಫೈಂಡರ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕೇ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ (ತಡೆಹಿಡಿಯಲಾಗಿದೆ)</translation>
-<translation id="5998198091336830580">ಈ ಕಾರ್ಯನೀತಿಯು ಈ ಕೆಳಗಿನ ಆಟೋಮಿಕ್ ಗುಂಪಿನ ಭಾಗವಾಗಿದೆ (ಗುಂಪಿನಲ್ಲಿರುವ ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯ ಮೂಲದಿಂದ ಮಾತ್ರ ನೀತಿಗಳು ಅನ್ವಯಿಸುತ್ತವೆ) :</translation>
+<translation id="5998198091336830580">ಈ ಕಾರ್ಯನೀತಿಯು ಈ ಕೆಳಗಿನ ಅಟಾಮಿಕ್ ಗುಂಪಿನ ಭಾಗವಾಗಿದೆ (ಗುಂಪಿನಲ್ಲಿರುವ ಅತ್ಯಧಿಕ ಆದ್ಯತೆಯ ಮೂಲದ ಕಾರ್ಯನೀತಿಗಳನ್ನು ಮಾತ್ರ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ) :</translation>
 <translation id="6017568866726630990">ಮುದ್ರಣ ಪೂರ್ವವೀಕ್ಷಣೆಗೆ ಬದಲಾಗಿ ಸಿಸ್ಟಂ ಮುದ್ರಣ ಸಂವಾದವನ್ನು ತೋರಿಸಿ.
 
       ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, ಬಳಕೆದಾರರು ಪುಟವನ್ನು ಮುದ್ರಿಸಲು ವಿನಂತಿಸಿದ ಸಂದರ್ಭದಲ್ಲಿ ಅಂತರ್-ನಿರ್ಮಿತ ಮುದ್ರಣ ಪೂರ್ವವೀಕ್ಷಣೆ ಬದಲಾಗಿ ಸಿಸ್ಟಂ ಮುದ್ರಣ ಸಂವಾದವನ್ನು <ph name="PRODUCT_NAME" /> ತೆರೆಯುತ್ತದೆ.
@@ -3674,7 +3674,7 @@
      'CookiesAllowedForUrls' ಮತ್ತು 'CookiesSessionOnlyForUrls' ಕಾರ್ಯನೀತಿಗಳನ್ನು ಸಹ ನೋಡಿ. ಈ ಮೂರೂ ಕಾರ್ಯನೀತಿಗಳ ನಡುವೆ ಸಂಘರ್ಷದ URL ಮಾದರಿಗಳು ಇರಬಾರದು ಎಂಬುದನ್ನು ಗಮನಿಸಿ - ಯಾವ ಕಾರ್ಯನೀತಿಯು ಆದ್ಯತೆಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಎಂಬುದು ಅನಿರ್ದಿಷ್ಟವಾಗಿದೆ.</translation>
 <translation id="8099880303030573137">ಬ್ಯಾಟರಿ ಪವರ್‌ನಲ್ಲಿ ರನ್‌ ಆಗುತ್ತಿರುವಾಗ ನಿಷ್ಪಲ ವಿಳಂಬವಾಗುತ್ತದೆ
 </translation>
-<translation id="8101381354936029836">ಕಾರ್ಯನೀತಿ ಆಟೋಮಿಕ್ ಗುಂಪು:</translation>
+<translation id="8101381354936029836">ಕಾರ್ಯನೀತಿಯ ಅಟಾಮಿಕ್ ಗುಂಪು:</translation>
 <translation id="8102913158860568230">ಡಿಫಾಲ್ಟ್ mediastream ಸೆಟ್ಟಿಂಗ್</translation>
 <translation id="8104186956182795918">ಚಿತ್ರಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಯಿದೆಯೇ ಎಂದು ಹೊಂದಿಸಲು ಇದು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಚಿತ್ರಗಳ ಪ್ರದರ್ಶನವನ್ನು ಎಲ್ಲ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೂ ಅನುಮತಿಸಬಹುದು ಅಥವಾ ಎಲ್ಲ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೂ ನಿರಾಕರಿಸಬಹುದಾಗಿದೆ.
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 555fd20..c114a53 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -369,7 +369,7 @@
 <translation id="1566329065312331399">
       이 정책을 False로 설정하면 기기에서 파워워시를 실행할 수 없습니다.
       True로 설정하면 기기에서 파워워시를 실행할 수 있습니다.
-      설정하지 않으면 기본적으로 False 상태이며, 기기에서 파워워시를 실행할 수 없습니다.
+      설정하지 않으면 False가 기본으로 설정되어 기기에서 파워워시를 실행할 수 없습니다.
       </translation>
 <translation id="1574554504290354326">이 설정은 지원이 중단되었습니다. 대신 SafeBrowsingExtendedReportingEnabled를 사용하세요. SafeBrowsingExtendedReportingEnabled를 사용 또는 사용 중지하려면 SafeBrowsingExtendedReportingOptInAllowed를 False로 설정합니다.
 
@@ -2080,11 +2080,11 @@
 
       설정되지 않는 경우 <ph name="PRODUCT_OS_NAME" /> 기기에는 345,600,000밀리초(4일), <ph name="PRODUCT_NAME" />에는 604,800,000밀리초(1주일)가 기본값으로 사용됩니다.</translation>
 <translation id="4777805166623621364">
-      SitePerProcess 설정을 사용해 사용자가 기본 동작인 전체 사이트 격리를 선택 해제하지 못하도록 할 수 있습니다. 세분화된 출처를 추가로 격리하는 경우 IsolateOrigins 정책도 유용하게 사용할 수 있습니다.
+      SitePerProcess 설정을 사용해 사용자가 기본 동작인 전체 사이트 격리를 선택 해제하지 못하도록 할 수 있습니다. IsolateOrigins 정책은 추가적으로 세분화된 출처를 격리시키는 데에도 유용할 수 있습니다.
       이 정책이 사용 설정되면 모든 사이트가 자체 프로세스로 작동하는 기본 동작을 사용자가 선택 해제할 수 없습니다.
       정책이 설정되지 않거나 사용 중지되면 사용자가 사이트 격리를 선택 해제할 수 있습니다
       (예: chrome://flags에서 '사이트 격리 사용 중지' 항목 사용).  정책이 설정되지 않거나 사용 중지되어도 사이트 격리가 사용 중지되지는 않습니다.
-      <ph name="PRODUCT_OS_NAME" /> 버전 76 이상의 경우 <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> 기기 정책을 같은 값으로 설정하는 것이 좋습니다. 두 정책에 지정된 값이 일치하지 않을 경우 사용자 세션을 시작할 때 지연이 발생할 수 있으며, 사용자 정책에 지정된 값이 적용됩니다.
+      <ph name="PRODUCT_OS_NAME" /> 버전 76 및 그 이전 버전의 경우 <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> 기기 정책을 같은 값으로 설정하는 것이 좋습니다. 두 정책의 지정된 값이 일치하지 않을 경우 사용자 세션을 시작할 때 지연이 발생할 수 있으며 해당 값이 사용자 정책에 적용된다는 점을 유의하세요.
 
       참고: 이 정책은 Android에 적용되지 않습니다. Android에서 SitePerProcess를 사용 설정하려면 SitePerProcessAndroid 정책 설정을 사용하세요.
       </translation>
@@ -2236,7 +2236,7 @@
 <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" />이(가) <ph name="PRODUCT_NAME" />을(를) 실행할 때 사용되는 추가 매개변수를 지정하도록 허용합니다.
 
           해당 정책이 설정되지 않았다면 기본 명령줄이 사용됩니다.</translation>
-<translation id="5152787786897382519">Chromium과 Chrome에는 기능 관리 기능을 제공하기 위해 서로에 의존하는 일부 정책 그룹이 있습니다. 이러한 세트는 다음의 정책 그룹으로 대표됩니다. 정책의 출처가 여러 개일 수 있으므로 우선순위가 가장 높은 출처의 값만 적용됩니다. 같은 그룹에서 우선순위가 낮은 출처의 값은 무시됩니다. 우선순위는 <ph name="POLICY_PRIORITY_DOC_URL" />에 정의되어 있습니다.</translation>
+<translation id="5152787786897382519">Chromium과 Chrome의 일부 정책 그룹은 특정 기능 제어를 위해 서로 종속되는 경우도 있습니다. 이러한 세트는 다음의 정책 그룹으로 대표됩니다. 정책의 출처가 여러 개일 수 있으므로 우선순위가 가장 높은 출처의 값만 적용됩니다. 같은 그룹에서 우선순위가 낮은 출처의 값은 무시됩니다. 우선순위는 <ph name="POLICY_PRIORITY_DOC_URL" />에 정의되어 있습니다.</translation>
 <translation id="5159469559091666409">모니터링 네트워크 패킷이 전송되는 빈도를 밀리초로 나타냅니다.
 
       이 정책이 설정되지 않으면 기본 간격이 3분으로 설정됩니다.
@@ -2783,7 +2783,7 @@
 <translation id="5983708779415553259">사이트에 대한 기본 동작이 콘텐츠 팩에 없음</translation>
 <translation id="5997543603646547632">기본적으로 24시간 표기법 사용</translation>
 <translation id="5997846976342452720">플러그인 Finder 사용 중지 여부 지정(지원 중단됨)</translation>
-<translation id="5998198091336830580">이 정책은 다음 원자 그룹의 일부입니다. 그룹에서 우선순위가 가장 높은 출처의 정책만 적용됩니다.</translation>
+<translation id="5998198091336830580">이 정책은 다음 그룹의 일부입니다. 그룹에서 우선순위가 가장 높은 출처의 정책만 적용됩니다.</translation>
 <translation id="6017568866726630990">인쇄 미리보기 대신 시스템 인쇄 대화상자를 표시합니다.
 
       이 설정을 사용하면 사용자가 페이지 인쇄를 요청하는 경우 <ph name="PRODUCT_NAME" />에서 내장된 인쇄 미리보기 대신 시스템 인쇄 대화상자를 엽니다.
@@ -3538,7 +3538,7 @@
 
       이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation>
 <translation id="7359307926583593395">
-      로그인 화면에 적용되는 정책입니다. 사용자 세션에 적용되는 <ph name="SITE_PER_PROCESS_POLICY_NAME" /> 정책도 확인해 보시기 바랍니다. 두 정책을 같은 값으로 설정하는 것이 좋습니다. 값이 일치하지 않을 경우 사용자 세션을 시작할 때 지연이 발생할 수 있으며, 사용자 정책에 지정된 값이 적용됩니다.
+      로그인 화면에 적용되는 정책입니다. 사용자 세션에 적용되는 <ph name="SITE_PER_PROCESS_POLICY_NAME" /> 정책도 확인해 보시기 바랍니다. 두 정책을 같은 값으로 설정하는 것이 좋습니다. 이 값이 일치하지 않을 경우 사용자 세션을 시작할 때 지연이 발생할 수 있으며 해당 값이 사용자 정책에 적용된다는 점을 유의하세요.
       </translation>
 <translation id="737655323154569539">인쇄 페이지 크기를 제한합니다. 정책이 설정되어 있지 않거나 비어 있으면 제한이 없는 것으로 간주됩니다.</translation>
 <translation id="7389872682701720082">이 설정을 사용하면 항상 최신 플러그인이 실행됩니다.
@@ -3878,7 +3878,7 @@
 
           'CookiesAllowedForUrls' 및 'CookiesSessionOnlyForUrls' 정책도 참조하세요. 이 세 정책 간에 충돌하는 URL 패턴이 없어야 합니다. 어떤 정책이 우선 적용되는지 지정되어 있지 않습니다.</translation>
 <translation id="8099880303030573137">배터리 전원으로 실행할 때 유휴 지연</translation>
-<translation id="8101381354936029836">정책 원자 그룹:</translation>
+<translation id="8101381354936029836">정책 전체 그룹:</translation>
 <translation id="8102913158860568230">기본 mediastream 설정</translation>
 <translation id="8104186956182795918">웹사이트에서 이미지를 표시할지 여부를 설정할 수 있습니다. 이미지 표시는 모든 웹사이트에서 허용되거나 모든 웹사이트에서 거부될 수 있습니다.
 
@@ -4087,15 +4087,15 @@
 <translation id="8489964335640955763">PluginVm</translation>
 <translation id="8493645415242333585">브라우저 기록 저장 사용 중지</translation>
 <translation id="8499172469244085141">기본 설정(사용자가 변경할 수 있음)</translation>
-<translation id="849962487677588458">지원이 중단된 정책이므로 Chrome 78에서 삭제될 예정입니다. 이를 대체하는 정책은 없습니다.
+<translation id="849962487677588458">이 정책은 지원이 중단되었으며 곧 Chrome 78에서 삭제될 예정입니다. 이를 대체하는 정책은 없습니다.
 
-      이 정책은 HTTP의 경우 80이 아닌 포트에 HTTP/0.9, HTTPS의 경우 443을 사용 설정합니다.
+      이 정책은 HTTP 80번 포트 및 HTTPS 443번 포트를 제외한 포트에서 HTTP/0.9 버전을 사용 설정합니다.
 
       기본적으로 사용 중지되어 있으며 사용 설정할 경우 사용자가 보안 문제(https://crbug.com/600352)에 노출될 수 있습니다.
 
-      또한 기업이 기존 서버를 HTTP/0.9에서 이전할 기회를 제공하기 위해 만들어졌으며 향후 삭제될 예정입니다.
+      이 정책은 기업이 HTTP/0.9 버전으로부터 기존 서버를 이전할 수 있도록 돕기 위한 것으로 향후 삭제될 예정입니다.
 
-      정책이 설정되지 않으면 기본 포트가 아닌 포트에서 HTTP/0.9가 사용 중지됩니다.</translation>
+      이 정책을 설정하지 않으면 기본 포트를 제외한 포트에서는 HTTP/0.9가 사용 중지됩니다.</translation>
 <translation id="8507835864888987300">자동 업데이트의 대상 버전을 설정합니다.
 
       <ph name="PRODUCT_OS_NAME" />을(를) 업데이트할 대상 버전의 접두어를 지정합니다. 기기가 지정된 접두어 이전의 버전을 실행하는 경우 주어진 접두어가 포함된 최신 버전으로 업데이트합니다. 기기가 이미 최신 버전을 실행한다면 <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />의 값에 따라 적용됩니다. 접두어 형식은 다음 예에 나타난 것처럼 구성요소 단위로 작동합니다.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb
index 543004e8..7bcbeeb 100644
--- a/components/policy/resources/policy_templates_no.xtb
+++ b/components/policy/resources/policy_templates_no.xtb
@@ -2042,10 +2042,10 @@
 
       Hvis regelen ikke er angitt, brukes standardperioden på 345 600 000 millisekunder (fire dager) for <ph name="PRODUCT_OS_NAME" />-enheter og 604 800 000 millisekunder (én uke) for <ph name="PRODUCT_NAME" />.</translation>
 <translation id="4777805166623621364">
-      Denne innstillingen (SitePerProcess) kan brukes til å nekte brukere å velge bort standardatferden, som er å isolere alle nettsteder. Merk at regelen IsolateOrigins også kan være nyttig for å isolere flere, mer finkornede opprinnelser.
+      Denne innstillingen (SitePerProcess) kan brukes til å nekte brukere å velge bort standardfunksjonaliteten, som er å isolere alle nettsteder. Merk at regelen IsolateOrigins også kan være nyttig for å isolere flere, mer finkornede opprinnelser.
       Hvis regelen er slått på, kan ikke brukerne velge bort standardfunksjonaliteten der alle nettsteder kjører i sine egne prosesser.
       Hvis regelen er slått av eller ikke er konfigurert, kan brukeren velge bort nettstedsisolering (f.eks. ved å bruke oppføringen «Slå av nettstedsisolering» i chrome://flags).  Nettstedsisolering slås ikke av selv om du slår av regelen og/eller ikke konfigurerer den.
-      På <ph name="PRODUCT_OS_NAME" /> versjon 76 og eldre anbefales det også å sette enhetsregelen <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" />til samme verdi. Hvis disse to reglene har ulike verdier, kan det medføre at oppstart av brukerøkter blir forsinket mens verdien som spesifiseres av brukerregelen, tas i bruk.
+      I <ph name="PRODUCT_OS_NAME" /> versjon 76 og eldre anbefales det også å sette enhetsregelen <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" />til samme verdi. Hvis disse to reglene har ulike verdier, kan det medføre at oppstart av brukerøkter blir forsinket mens verdien som spesifiseres av brukerregelen, tas i bruk.
 
       MERK: Denne regelen gjelder ikke på Android. For å slå på SitePerProcess på Android, bruk regelinnstillingen SitePerProcessAndroid.
       </translation>
@@ -4018,7 +4018,7 @@
 
       Denne regelen er slått av som standard. Hvis den er slått på, er brukerne utsatt for sikkerhetsproblemet https://crbug.com/600352.
 
-      Denne regelen er ment å gi bedrifter mulighet til å migrere eksisterende servere bort fra HTTP/0.9 og kommer til å bli fjernet på et fremtidig tidspunkt.
+      Denne regelen er ment å gi bedrifter mulighet til å migrere eksisterende tjenere bort fra HTTP/0.9 og kommer til å bli fjernet på et fremtidig tidspunkt.
 
       Hvis denne regelen ikke er angitt, blir HTTP/0.9 slått av på ikke-standardporter.</translation>
 <translation id="8507835864888987300">Angir en målversjon for automatiske oppdateringer.
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index 6f2a5bb..2d7bb54 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -2744,7 +2744,7 @@
 <translation id="5983708779415553259">Tabia chaguomsingi ya tovuti zisizo katika furushi lolote la maudhui</translation>
 <translation id="5997543603646547632">Tumia saa ya saa 24 kwa chaguomsingi</translation>
 <translation id="5997846976342452720">Bainisha ikiwa kipataji cha programu jalizi lazima kizimwe (kilichoacha kuendesha huduma)</translation>
-<translation id="5998198091336830580">Sera hii ni sehemu ya kikundi kifuatacho cha atomiki (tutatumia tu sera kutoka chanzo chenye kipaumbele cha juu zaidi, zilizo katika kikundi hicho) :</translation>
+<translation id="5998198091336830580">Sera hii ni sehemu ya kikundi kifuatacho cha atomiki (tutatumia tu sera kutoka chanzo chenye kipaumbele cha juu zaidi, kilicho katika kikundi hicho) :</translation>
 <translation id="6017568866726630990">Onyesha mazungumzo ya kuchapisha ya mfumo badala ya uhakiki wa kuchapisha.
 
    Mpangilio huu unapowashwa, <ph name="PRODUCT_NAME" /> itafungua mazungumzo ya kuchapisha ya mfumo badala ya uhakiki wa kuchapisha wa kijenzi cha ndani mtumiaji anapoomba ukurasa kuchapishwa.
@@ -4023,11 +4023,11 @@
 <translation id="8489964335640955763">PluginVm</translation>
 <translation id="8493645415242333585">Lemaza kuhifadhi historia ya kivinjari</translation>
 <translation id="8499172469244085141">Mipangilio ya Chaguo-Msingi (watumiaji wanaweza kubadilisha)</translation>
-<translation id="849962487677588458">Tumeacha kutumia sera hii na tutaiondoa kwenye Chrome 78 na nafasi yake haitachukuliwa na sera nyingine.
+<translation id="849962487677588458">Tumeacha kutumia sera hii na tutaiondoa kwenye Chrome 78. Nafasi yake haitachukuliwa na sera nyingine.
 
       Sera hii huwasha HTTP/0.9 kwenye milango isipokuwa ya 80 katika HTTP na ya 443 katika HTTPS.
 
-      Sera hii imezimwa kwa chaguomsingi na ikiwashwa, huwafanya watumiaji waweze kuathiriwa na tatizo la usalama https://crbug.com/600352.
+      Sera hii imezimwa kwa chaguomsingi na ikiwashwa, huwa inafungua nafasi ya watumiaji kuathiriwa na tatizo la usalama https://crbug.com/600352.
 
       Sera hii ina lengo la kuzipa biashara nafasi ya kuhamisha seva zilizopo kutoka HTTP/0.9 na itaondolewa baadaye.
 
diff --git a/components/signin/core/browser/BUILD.gn b/components/signin/core/browser/BUILD.gn
index 452faf1c..b9d99f0 100644
--- a/components/signin/core/browser/BUILD.gn
+++ b/components/signin/core/browser/BUILD.gn
@@ -154,8 +154,6 @@
     "dice_account_reconcilor_delegate.h",
     "dice_header_helper.cc",
     "dice_header_helper.h",
-    "identity_manager_wrapper.cc",
-    "identity_manager_wrapper.h",
     "mice_account_reconcilor_delegate.cc",
     "mice_account_reconcilor_delegate.h",
     "mirror_account_reconcilor_delegate.cc",
diff --git a/components/signin/core/browser/device_id_helper_unittest.cc b/components/signin/core/browser/device_id_helper_unittest.cc
index 3d35da3..df36320 100644
--- a/components/signin/core/browser/device_id_helper_unittest.cc
+++ b/components/signin/core/browser/device_id_helper_unittest.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "build/build_config.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_pref_names.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -24,7 +23,8 @@
 
 TEST(DeviceIdHelper, RecreateSigninScopedDeviceId) {
   sync_preferences::TestingPrefServiceSyncable prefs;
-  ProfileOAuth2TokenService::RegisterProfilePrefs(prefs.registry());
+  prefs.registry()->RegisterStringPref(
+      prefs::kGoogleServicesSigninScopedDeviceId, std::string());
   ASSERT_TRUE(
       prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId).empty());
 
@@ -42,7 +42,9 @@
 
 TEST(DeviceIdHelper, GetOrCreateScopedDeviceId) {
   sync_preferences::TestingPrefServiceSyncable prefs;
-  ProfileOAuth2TokenService::RegisterProfilePrefs(prefs.registry());
+  prefs.registry()->RegisterStringPref(
+      prefs::kGoogleServicesSigninScopedDeviceId, std::string());
+
   ASSERT_TRUE(
       prefs.GetString(prefs::kGoogleServicesSigninScopedDeviceId).empty());
 
diff --git a/components/signin/core/browser/identity_manager_wrapper.cc b/components/signin/core/browser/identity_manager_wrapper.cc
deleted file mode 100644
index fd692401..0000000
--- a/components/signin/core/browser/identity_manager_wrapper.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/signin/core/browser/identity_manager_wrapper.h"
-
-#include "components/keyed_service/core/keyed_service.h"
-#include "components/signin/core/browser/account_fetcher_service.h"
-#include "components/signin/core/browser/account_tracker_service.h"
-#include "components/signin/core/browser/gaia_cookie_manager_service.h"
-#include "components/signin/core/browser/primary_account_manager.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/public/identity_manager/accounts_cookie_mutator.h"
-#include "components/signin/public/identity_manager/accounts_mutator.h"
-#include "components/signin/public/identity_manager/diagnostics_provider.h"
-#include "components/signin/public/identity_manager/primary_account_mutator.h"
-
-IdentityManagerWrapper::IdentityManagerWrapper(
-    std::unique_ptr<AccountTrackerService> account_tracker_service,
-    std::unique_ptr<ProfileOAuth2TokenService> token_service,
-    std::unique_ptr<GaiaCookieManagerService> gaia_cookie_manager_service,
-    std::unique_ptr<PrimaryAccountManager> primary_account_manager,
-    std::unique_ptr<AccountFetcherService> account_fetcher_service,
-    std::unique_ptr<identity::PrimaryAccountMutator> primary_account_mutator,
-    std::unique_ptr<identity::AccountsMutator> accounts_mutator,
-    std::unique_ptr<identity::AccountsCookieMutator> accounts_cookie_mutator,
-    std::unique_ptr<identity::DiagnosticsProvider> diagnostics_provider)
-    : identity::IdentityManager(std::move(account_tracker_service),
-                                std::move(token_service),
-                                std::move(gaia_cookie_manager_service),
-                                std::move(primary_account_manager),
-                                std::move(account_fetcher_service),
-                                std::move(primary_account_mutator),
-                                std::move(accounts_mutator),
-                                std::move(accounts_cookie_mutator),
-                                std::move(diagnostics_provider)) {}
diff --git a/components/signin/core/browser/identity_manager_wrapper.h b/components/signin/core/browser/identity_manager_wrapper.h
deleted file mode 100644
index cfe63f48..0000000
--- a/components/signin/core/browser/identity_manager_wrapper.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_SIGNIN_CORE_BROWSER_IDENTITY_MANAGER_WRAPPER_H_
-#define COMPONENTS_SIGNIN_CORE_BROWSER_IDENTITY_MANAGER_WRAPPER_H_
-
-#include "components/keyed_service/core/keyed_service.h"
-#include "components/signin/public/identity_manager/identity_manager.h"
-
-class AccountFetcherService;
-class AccountsMutator;
-class GaiaCookieManagerService;
-class PrimaryAccountManager;
-class ProfileOAuth2TokenService;
-
-namespace identity {
-class PrimaryAccountMutator;
-class AccountsCookieMutator;
-class DiagnosticsProvider;
-}  // namespace identity
-
-// Subclass that wraps IdentityManager in a KeyedService.
-// TODO(https://crbug.com/952788): This class can be deleted if
-// IdentityManager is updated to inherit from KeyedService directly.
-class IdentityManagerWrapper : public KeyedService,
-                               public identity::IdentityManager {
- public:
-  IdentityManagerWrapper(
-      std::unique_ptr<AccountTrackerService> account_tracker_service,
-      std::unique_ptr<ProfileOAuth2TokenService> token_service,
-      std::unique_ptr<GaiaCookieManagerService> gaia_cookie_manager_service,
-      std::unique_ptr<PrimaryAccountManager> primary_account_manager,
-      std::unique_ptr<AccountFetcherService> account_fetcher_service,
-      std::unique_ptr<identity::PrimaryAccountMutator> primary_account_mutator,
-      std::unique_ptr<identity::AccountsMutator> accounts_mutator,
-      std::unique_ptr<identity::AccountsCookieMutator> accounts_cookie_mutator,
-      std::unique_ptr<identity::DiagnosticsProvider> diagnostics_provider);
-};
-
-#endif  // COMPONENTS_SIGNIN_CORE_BROWSER_IDENTITY_MANAGER_WRAPPER_H_
diff --git a/components/signin/core/browser/primary_account_policy_manager_impl.cc b/components/signin/core/browser/primary_account_policy_manager_impl.cc
index 514f12a..5e474841 100644
--- a/components/signin/core/browser/primary_account_policy_manager_impl.cc
+++ b/components/signin/core/browser/primary_account_policy_manager_impl.cc
@@ -11,6 +11,7 @@
 #include "components/prefs/pref_change_registrar.h"
 #include "components/prefs/pref_member.h"
 #include "components/prefs/pref_service.h"
+#include "components/signin/core/browser/account_info.h"
 #include "components/signin/core/browser/identity_utils.h"
 #include "components/signin/core/browser/primary_account_manager.h"
 #include "components/signin/core/browser/signin_client.h"
diff --git a/components/signin/core/browser/signin_client.h b/components/signin/core/browser/signin_client.h
index 8587e23..a03c89c8 100644
--- a/components/signin/core/browser/signin_client.h
+++ b/components/signin/core/browser/signin_client.h
@@ -13,7 +13,6 @@
 #include "build/build_config.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/account_consistency_method.h"
-#include "components/signin/core/browser/account_info.h"
 #include "components/signin/core/browser/signin_metrics.h"
 #include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "url/gurl.h"
diff --git a/components/signin/public/identity_manager/BUILD.gn b/components/signin/public/identity_manager/BUILD.gn
index 369d989..8c2817e 100644
--- a/components/signin/public/identity_manager/BUILD.gn
+++ b/components/signin/public/identity_manager/BUILD.gn
@@ -24,6 +24,7 @@
 
   public_deps = [
     "//base",
+    "//components/keyed_service/core",
     "//components/signin/core/browser:shared",
     "//components/signin/core/browser:signin_buildflags",
     "//google_apis",
@@ -94,7 +95,6 @@
 
   deps = [
     "//components/image_fetcher/core:test_support",
-    "//components/signin/core/browser",
     "//components/signin/core/browser:internals",
     "//components/signin/core/browser:internals_test_support",
     "//components/signin/internal/identity_manager",
diff --git a/components/signin/public/identity_manager/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h
index a8e63c5c..da307c7 100644
--- a/components/signin/public/identity_manager/identity_manager.h
+++ b/components/signin/public/identity_manager/identity_manager.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "build/build_config.h"
+#include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/account_info.h"
 #include "components/signin/core/browser/ubertoken_fetcher.h"
 #include "components/signin/public/identity_manager/access_token_fetcher.h"
@@ -51,7 +52,8 @@
 
 // Gives access to information about the user's Google identities. See
 // ./README.md for detailed documentation.
-class IdentityManager : public OAuth2AccessTokenManager::DiagnosticsObserver,
+class IdentityManager : public KeyedService,
+                        public OAuth2AccessTokenManager::DiagnosticsObserver,
                         public OAuth2TokenServiceObserver {
  public:
   class Observer {
diff --git a/components/signin/public/identity_manager/identity_test_environment.cc b/components/signin/public/identity_manager/identity_test_environment.cc
index 0c19ca0..a307951f 100644
--- a/components/signin/public/identity_manager/identity_test_environment.cc
+++ b/components/signin/public/identity_manager/identity_test_environment.cc
@@ -18,7 +18,6 @@
 #include "components/signin/core/browser/account_tracker_service.h"
 #include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 #include "components/signin/core/browser/primary_account_manager.h"
 #include "components/signin/core/browser/primary_account_policy_manager_impl.h"
 #include "components/signin/core/browser/test_signin_client.h"
@@ -26,6 +25,7 @@
 #include "components/signin/internal/identity_manager/diagnostics_provider_impl.h"
 #include "components/signin/internal/identity_manager/primary_account_mutator_impl.h"
 #include "components/signin/public/identity_manager/accounts_mutator.h"
+#include "components/signin/public/identity_manager/identity_manager.h"
 #include "components/signin/public/identity_manager/identity_test_utils.h"
 #include "components/signin/public/identity_manager/primary_account_mutator.h"
 #include "components/signin/public/identity_manager/test_identity_manager_observer.h"
@@ -170,7 +170,7 @@
 }
 
 // static
-std::unique_ptr<IdentityManagerWrapper>
+std::unique_ptr<IdentityManager>
 IdentityTestEnvironment::BuildIdentityManagerForTests(
     SigninClient* signin_client,
     PrefService* pref_service,
@@ -235,7 +235,7 @@
   auto accounts_cookie_mutator = std::make_unique<AccountsCookieMutatorImpl>(
       gaia_cookie_manager_service.get(), account_tracker_service.get());
 
-  return std::make_unique<IdentityManagerWrapper>(
+  return std::make_unique<IdentityManager>(
       std::move(account_tracker_service), std::move(token_service),
       std::move(gaia_cookie_manager_service),
       std::move(primary_account_manager), std::move(account_fetcher_service),
diff --git a/components/signin/public/identity_manager/identity_test_environment.h b/components/signin/public/identity_manager/identity_test_environment.h
index 2527f6a..fdd73aa 100644
--- a/components/signin/public/identity_manager/identity_test_environment.h
+++ b/components/signin/public/identity_manager/identity_test_environment.h
@@ -16,7 +16,6 @@
 #include "components/signin/public/identity_manager/identity_test_utils.h"
 
 class FakeProfileOAuth2TokenService;
-class IdentityManagerWrapper;
 class IdentityTestEnvironmentChromeBrowserStateAdaptor;
 class IdentityTestEnvironmentProfileAdaptor;
 class PrefService;
@@ -373,7 +372,7 @@
   std::vector<AccessTokenRequestState> requesters_;
 
   // Create an IdentityManager instance for tests.
-  static std::unique_ptr<IdentityManagerWrapper> BuildIdentityManagerForTests(
+  static std::unique_ptr<IdentityManager> BuildIdentityManagerForTests(
       SigninClient* signin_client,
       PrefService* pref_service,
       base::FilePath user_data_dir,
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 3786e0c7..cdde1096 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -549,6 +549,7 @@
 <translation id="3946209740501886391">ሁልጊዜ በዚህ ጣቢያ ላይ ጠይቅ</translation>
 <translation id="3949571496842715403">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት ዕውቅና ማረጋገጫው የርዕሰ ጒዳይ አማራጭ ስሞችን አይጠቅስም። ይህ በተሳሳተ ውቅረት የተከሰተ ወይም አጥቂ የእርስዎን ግንኙነት አቋርጦ እየገባ ስለሆነ ሊሆን ይችላል።</translation>
 <translation id="3949601375789751990">የአሰሳ ታሪክዎ እዚህ ይመጣል</translation>
+<translation id="3949870428812919180">ምንም የተቀመጡ የመክፈያ ዘዴዎች የሉም</translation>
 <translation id="3950820424414687140">ይግቡ</translation>
 <translation id="3962859241508114581">ቀዳሚ ትራክ</translation>
 <translation id="3963837677003247395">በእጅ ይቀጥል?</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 2daf54f4..bd73473 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -557,6 +557,7 @@
 <translation id="3946209740501886391">Preguntar siempre en este sitio</translation>
 <translation id="3949571496842715403">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; su certificado de seguridad no especifica la extensión Nombres alternativos del asunto. Es posible que se deba a un error en la configuración o a que haya un atacante que está interceptando tu conexión.</translation>
 <translation id="3949601375789751990">Tu historial de navegación aparece aquí</translation>
+<translation id="3949870428812919180">No hay formas de pago guardadas</translation>
 <translation id="3950820424414687140">Acceder</translation>
 <translation id="3962859241508114581">Pista anterior</translation>
 <translation id="3963837677003247395">¿Quieres continuar de forma manual?</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index ef823e15..5dc52e24 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -556,6 +556,7 @@
 <translation id="3946209740501886391">Palaging hilingin sa site na ito</translation>
 <translation id="3949571496842715403">Hindi mapatunayan ng server na ito na <ph name="DOMAIN" /> ito; hindi tinutukoy ng certificate ng seguridad nito ang Mga Alternatibong Pangalan ng Subject. Maaaring dahil ito sa isang maling configuration o sa isang umaatake na humahadlang sa iyong koneksyon.</translation>
 <translation id="3949601375789751990">Lalabas dito ang iyong history ng pag-browse</translation>
+<translation id="3949870428812919180">Walang naka-save na paraan ng pagbabayad</translation>
 <translation id="3950820424414687140">Mag-sign in</translation>
 <translation id="3962859241508114581">Nakaraang Track</translation>
 <translation id="3963837677003247395">Manual na magpatuloy?</translation>
diff --git a/components/viz/service/display/ca_layer_overlay.cc b/components/viz/service/display/ca_layer_overlay.cc
index 7958757d..53307727 100644
--- a/components/viz/service/display/ca_layer_overlay.cc
+++ b/components/viz/service/display/ca_layer_overlay.cc
@@ -30,30 +30,32 @@
 // to the end before COUNT.
 enum CALayerResult {
   CA_LAYER_SUCCESS = 0,
-  CA_LAYER_FAILED_UNKNOWN,
-  CA_LAYER_FAILED_IO_SURFACE_NOT_CANDIDATE,
-  CA_LAYER_FAILED_STREAM_VIDEO_NOT_CANDIDATE,
-  CA_LAYER_FAILED_STREAM_VIDEO_TRANSFORM_DEPRECATED,
-  CA_LAYER_FAILED_TEXTURE_NOT_CANDIDATE,
-  CA_LAYER_FAILED_TEXTURE_Y_FLIPPED,
-  CA_LAYER_FAILED_TILE_NOT_CANDIDATE,
-  CA_LAYER_FAILED_QUAD_BLEND_MODE,
-  CA_LAYER_FAILED_QUAD_TRANSFORM,
-  CA_LAYER_FAILED_QUAD_CLIPPING,
-  CA_LAYER_FAILED_DEBUG_BORDER,
-  CA_LAYER_FAILED_PICTURE_CONTENT,
-  CA_LAYER_FAILED_RENDER_PASS,
-  CA_LAYER_FAILED_SURFACE_CONTENT,
-  CA_LAYER_FAILED_YUV_VIDEO_CONTENT,
-  CA_LAYER_FAILED_DIFFERENT_CLIP_SETTINGS,
-  CA_LAYER_FAILED_DIFFERENT_VERTEX_OPACITIES,
-  CA_LAYER_FAILED_RENDER_PASS_FILTER_SCALE,
-  CA_LAYER_FAILED_RENDER_PASS_BACKDROP_FILTERS,
-  CA_LAYER_FAILED_RENDER_PASS_MASK,
-  CA_LAYER_FAILED_RENDER_PASS_FILTER_OPERATION,
-  CA_LAYER_FAILED_RENDER_PASS_SORTING_CONTEXT_ID,
-  CA_LAYER_FAILED_TOO_MANY_RENDER_PASS_DRAW_QUADS,
-  CA_LAYER_FAILED_QUAD_ROUNDED_CORNER,
+  CA_LAYER_FAILED_UNKNOWN = 1,
+  // CA_LAYER_FAILED_IO_SURFACE_NOT_CANDIDATE = 2,
+  CA_LAYER_FAILED_STREAM_VIDEO_NOT_CANDIDATE = 3,
+  // CA_LAYER_FAILED_STREAM_VIDEO_TRANSFORM = 4,
+  CA_LAYER_FAILED_TEXTURE_NOT_CANDIDATE = 5,
+  // CA_LAYER_FAILED_TEXTURE_Y_FLIPPED = 6,
+  CA_LAYER_FAILED_TILE_NOT_CANDIDATE = 7,
+  CA_LAYER_FAILED_QUAD_BLEND_MODE = 8,
+  // CA_LAYER_FAILED_QUAD_TRANSFORM = 9,
+  // CA_LAYER_FAILED_QUAD_CLIPPING = 10,
+  CA_LAYER_FAILED_DEBUG_BORDER = 11,
+  CA_LAYER_FAILED_PICTURE_CONTENT = 12,
+  // CA_LAYER_FAILED_RENDER_PASS = 13,
+  CA_LAYER_FAILED_SURFACE_CONTENT = 14,
+  CA_LAYER_FAILED_YUV_VIDEO_CONTENT = 15,
+  CA_LAYER_FAILED_DIFFERENT_CLIP_SETTINGS = 16,
+  CA_LAYER_FAILED_DIFFERENT_VERTEX_OPACITIES = 17,
+  // CA_LAYER_FAILED_RENDER_PASS_FILTER_SCALE = 18,
+  CA_LAYER_FAILED_RENDER_PASS_BACKDROP_FILTERS = 19,
+  // CA_LAYER_FAILED_RENDER_PASS_MASK = 20,
+  CA_LAYER_FAILED_RENDER_PASS_FILTER_OPERATION = 21,
+  CA_LAYER_FAILED_RENDER_PASS_SORTING_CONTEXT_ID = 22,
+  CA_LAYER_FAILED_TOO_MANY_RENDER_PASS_DRAW_QUADS = 23,
+  // CA_LAYER_FAILED_QUAD_ROUNDED_CORNER = 24,
+  CA_LAYER_FAILED_QUAD_ROUNDED_CORNER_CLIP_MISMATCH = 25,
+  CA_LAYER_FAILED_QUAD_ROUNDED_CORNER_NOT_UNIFORM = 26,
   CA_LAYER_FAILED_COUNT,
 };
 
@@ -193,10 +195,21 @@
       return CA_LAYER_SUCCESS;
     }
 
-    // TODO(enne): we could probably handle set rounded corner info on
-    // the CALayer in the case that rounded corner rect aligns with the quad.
+    // Support rounded corner bounds when they have the same rect as the clip
+    // rect, and all corners have the same radius. Note that it is entirely
+    // possible to make rounded corner rects independent of clip rect (by adding
+    // another CALayer to the tree). Handling non-single border radii is also,
+    // but requires APIs not supported on all macOS versions.
     if (!quad->shared_quad_state->rounded_corner_bounds.IsEmpty()) {
-      return CA_LAYER_FAILED_QUAD_ROUNDED_CORNER;
+      DCHECK(quad->shared_quad_state->is_clipped);
+      if (quad->shared_quad_state->rounded_corner_bounds.rect() !=
+          gfx::RectF(quad->shared_quad_state->clip_rect)) {
+        return CA_LAYER_FAILED_QUAD_ROUNDED_CORNER_CLIP_MISMATCH;
+      }
+      if (quad->shared_quad_state->rounded_corner_bounds.GetType() >
+          gfx::RRectF::Type::kSingle) {
+        return CA_LAYER_FAILED_QUAD_ROUNDED_CORNER_NOT_UNIFORM;
+      }
     }
 
     // Enable edge anti-aliasing only on layer boundaries.
@@ -220,6 +233,8 @@
           quad->shared_quad_state->is_clipped;
       most_recent_overlay_shared_state_->clip_rect =
           gfx::RectF(quad->shared_quad_state->clip_rect);
+      most_recent_overlay_shared_state_->clip_rect_corner_radius =
+          quad->shared_quad_state->rounded_corner_bounds.GetSimpleRadius();
 
       most_recent_overlay_shared_state_->opacity =
           quad->shared_quad_state->opacity;
diff --git a/components/viz/service/display/ca_layer_overlay.h b/components/viz/service/display/ca_layer_overlay.h
index cabc6bae..15cf19f 100644
--- a/components/viz/service/display/ca_layer_overlay.h
+++ b/components/viz/service/display/ca_layer_overlay.h
@@ -28,9 +28,11 @@
   // Layers in a non-zero sorting context exist in the same 3D space and should
   // intersect.
   unsigned sorting_context_id = 0;
-  // If |is_clipped| is true, then clip to |clip_rect| in the target space.
+  // If |is_clipped| is true, then clip to |clip_rect| in the target space, and
+  // |clip_rect_corner_radius| represents the corner radius of the clip rect.
   bool is_clipped = false;
   gfx::RectF clip_rect;
+  float clip_rect_corner_radius = 0;
   // The opacity property for the CAayer.
   float opacity = 1;
   // The transform to apply to the CALayer.
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index 782b68b..c48e95b 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -3298,6 +3298,8 @@
                             ca_layer_overlay.shared_state->clip_rect.y(),
                             ca_layer_overlay.shared_state->clip_rect.width(),
                             ca_layer_overlay.shared_state->clip_rect.height()};
+    GLfloat clip_rect_corner_radius =
+        ca_layer_overlay.shared_state->clip_rect_corner_radius;
     GLint sorting_context_id =
         ca_layer_overlay.shared_state->sorting_context_id;
     GLfloat transform[16];
@@ -3308,7 +3310,7 @@
       shared_state = ca_layer_overlay.shared_state;
       gl_->ScheduleCALayerSharedStateCHROMIUM(
           ca_layer_overlay.shared_state->opacity, is_clipped, clip_rect,
-          sorting_context_id, transform);
+          clip_rect_corner_radius, sorting_context_id, transform);
     }
     gl_->ScheduleCALayerCHROMIUM(
         texture_id, contents_rect, ca_layer_overlay.background_color,
@@ -3630,6 +3632,8 @@
                           ca_layer_overlay->shared_state->clip_rect.y(),
                           ca_layer_overlay->shared_state->clip_rect.width(),
                           ca_layer_overlay->shared_state->clip_rect.height()};
+  GLfloat clip_rect_corner_radius =
+      ca_layer_overlay->shared_state->clip_rect_corner_radius;
   GLint sorting_context_id = ca_layer_overlay->shared_state->sorting_context_id;
   SkMatrix44 transform = ca_layer_overlay->shared_state->transform;
   GLfloat gl_transform[16];
@@ -3639,6 +3643,7 @@
   // The alpha has already been applied when copying the RPDQ to an IOSurface.
   GLfloat alpha = 1;
   gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect,
+                                          clip_rect_corner_radius,
                                           sorting_context_id, gl_transform);
   gl_->ScheduleCALayerCHROMIUM(overlay_texture->texture.id(), contents_rect,
                                ca_layer_overlay->background_color,
diff --git a/components/viz/service/display/gl_renderer_unittest.cc b/components/viz/service/display/gl_renderer_unittest.cc
index 968012c..4eb8ff4 100644
--- a/components/viz/service/display/gl_renderer_unittest.cc
+++ b/components/viz/service/display/gl_renderer_unittest.cc
@@ -3093,10 +3093,11 @@
 
 class MockCALayerGLES2Interface : public TestGLES2Interface {
  public:
-  MOCK_METHOD5(ScheduleCALayerSharedStateCHROMIUM,
+  MOCK_METHOD6(ScheduleCALayerSharedStateCHROMIUM,
                void(GLfloat opacity,
                     GLboolean is_clipped,
                     const GLfloat* clip_rect,
+                    GLfloat clip_rect_corner_radius,
                     GLint sorting_context_id,
                     const GLfloat* transform));
   MOCK_METHOD6(ScheduleCALayerCHROMIUM,
@@ -3196,7 +3197,7 @@
   // CALayer.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3242,7 +3243,7 @@
   // RenderPassDrawQuad is emitted.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _));
   }
   DrawFrame(&renderer(), viewport_size);
@@ -3251,6 +3252,54 @@
   renderer().SwapBuffers(std::vector<ui::LatencyInfo>());
 }
 
+TEST_F(CALayerGLRendererTest, CALayerRoundRects) {
+  gfx::Size viewport_size(10, 10);
+
+  for (size_t subtest = 0; subtest < 3; ++subtest) {
+    RenderPassId root_pass_id = 1;
+    RenderPass* root_pass = cc::AddRenderPass(
+        &render_passes_in_draw_order_, root_pass_id, gfx::Rect(viewport_size),
+        gfx::Transform(), cc::FilterOperations());
+    auto* quad = cc::AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorRED);
+    SharedQuadState* sqs =
+        const_cast<SharedQuadState*>(quad->shared_quad_state);
+
+    sqs->is_clipped = true;
+    sqs->clip_rect = gfx::Rect(2, 2, 6, 6);
+    const float radius = 2;
+    sqs->rounded_corner_bounds =
+        gfx::RRectF(gfx::RectF(sqs->clip_rect), radius);
+
+    switch (subtest) {
+      case 0:
+        // Subtest 0 is a simple round rect that matches the clip rect, and
+        // should be handled by CALayers.
+        EXPECT_CALL(gl(),
+                    ScheduleCALayerSharedStateCHROMIUM(_, _, _, radius, _, _))
+            .Times(1);
+        EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _)).Times(1);
+        break;
+      case 1:
+        // Subtest 1 doesn't match clip and rounded rect, so no CALayers should
+        // be scheduled.
+        sqs->clip_rect = gfx::Rect(3, 3, 4, 4);
+        EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _)).Times(0);
+        break;
+      case 2:
+        // Subtest 2 has a non-simple rounded rect.
+        sqs->rounded_corner_bounds.SetCornerRadii(
+            gfx::RRectF::Corner::kUpperLeft, 1, 1);
+        EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _)).Times(0);
+        break;
+    }
+
+    renderer().DecideRenderPassAllocationsForFrame(
+        render_passes_in_draw_order_);
+    DrawFrame(&renderer(), viewport_size);
+    Mock::VerifyAndClearExpectations(&gl());
+  }
+}
+
 TEST_F(CALayerGLRendererTest, CALayerOverlaysReusesTextureWithDifferentSizes) {
   gfx::Size viewport_size(300, 300);
 
@@ -3280,7 +3329,7 @@
   uint32_t saved_texture_id = 0;
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3333,7 +3382,7 @@
   // is still in use.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3381,7 +3430,7 @@
   // an existing 256x256 texture, we can reuse that.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3432,7 +3481,7 @@
   uint32_t saved_texture_id = 0;
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3483,7 +3532,7 @@
   // is still in use.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3530,7 +3579,7 @@
   // existing 256x256 texture, but it's too large for us to reuse it.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3577,7 +3626,7 @@
   uint32_t saved_texture_id = 0;
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3617,7 +3666,7 @@
   uint32_t second_saved_texture_id = 0;
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3664,7 +3713,7 @@
   // verify that happened.
   {
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3710,7 +3759,7 @@
         render_passes_in_draw_order_);
 
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3771,7 +3820,7 @@
         render_passes_in_draw_order_);
 
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(Invoke([&](GLuint contents_texture_id,
                              const GLfloat* contents_rect,
@@ -3835,7 +3884,7 @@
         render_passes_in_draw_order_);
 
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
         .WillOnce(
             Invoke([&](GLuint contents_texture_id, const GLfloat* contents_rect,
@@ -3884,7 +3933,7 @@
         render_passes_in_draw_order_);
 
     InSequence sequence;
-    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+    EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
     EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _));
     DrawFrame(&renderer(), viewport_size);
     Mock::VerifyAndClearExpectations(&gl());
@@ -3915,7 +3964,7 @@
   renderer().DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
 
   InSequence sequence;
-  EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _));
+  EXPECT_CALL(gl(), ScheduleCALayerSharedStateCHROMIUM(_, _, _, _, _, _));
   EXPECT_CALL(gl(), ScheduleCALayerCHROMIUM(_, _, _, _, _, _))
       .WillOnce(Invoke([&](GLuint contents_texture_id,
                            const GLfloat* contents_rect,
diff --git a/components/viz/service/display_embedder/buffer_queue_unittest.cc b/components/viz/service/display_embedder/buffer_queue_unittest.cc
index edd31791..a6ecd16 100644
--- a/components/viz/service/display_embedder/buffer_queue_unittest.cc
+++ b/components/viz/service/display_embedder/buffer_queue_unittest.cc
@@ -120,7 +120,7 @@
 
 class BufferQueueTest : public ::testing::Test {
  public:
-  BufferQueueTest() : doublebuffering_(true), first_frame_(true) {}
+  BufferQueueTest() {}
 
   void SetUp() override {
     InitWithContext(std::make_unique<TestGLES2Interface>());
@@ -196,9 +196,7 @@
     unsigned stencil;
     EXPECT_GT(output_surface_->GetCurrentBuffer(&stencil), 0u);
     SwapBuffers(damage);
-    if (doublebuffering_ || !first_frame_)
-      output_surface_->PageFlipComplete();
-    first_frame_ = false;
+    output_surface_->PageFlipComplete();
   }
 
   void SendFullFrame() { SendDamagedFrame(gfx::Rect(output_surface_->size_)); }
@@ -217,8 +215,6 @@
   std::unique_ptr<StubGpuMemoryBufferManager> gpu_memory_buffer_manager_;
   std::unique_ptr<BufferQueue> output_surface_;
   MockBufferQueue* mock_output_surface_;
-  bool doublebuffering_;
-  bool first_frame_;
 };
 
 namespace {
@@ -332,7 +328,6 @@
 TEST_F(BufferQueueTest, PartialSwapReuse) {
   EXPECT_TRUE(
       output_surface_->Reshape(screen_size, 1.0f, gfx::ColorSpace(), false));
-  ASSERT_TRUE(doublebuffering_);
   EXPECT_CALL(*mock_output_surface_,
               CopyBufferDamage(_, _, small_damage, screen_rect))
       .Times(1);
@@ -353,7 +348,6 @@
 TEST_F(BufferQueueTest, PartialSwapFullFrame) {
   EXPECT_TRUE(
       output_surface_->Reshape(screen_size, 1.0f, gfx::ColorSpace(), false));
-  ASSERT_TRUE(doublebuffering_);
   EXPECT_CALL(*mock_output_surface_,
               CopyBufferDamage(_, _, small_damage, screen_rect))
       .Times(1);
@@ -367,7 +361,6 @@
 TEST_F(BufferQueueTest, PartialSwapOverlapping) {
   EXPECT_TRUE(
       output_surface_->Reshape(screen_size, 1.0f, gfx::ColorSpace(), false));
-  ASSERT_TRUE(doublebuffering_);
   EXPECT_CALL(*mock_output_surface_,
               CopyBufferDamage(_, _, small_damage, screen_rect))
       .Times(1);
diff --git a/components/viz/service/display_embedder/software_output_device_x11.cc b/components/viz/service/display_embedder/software_output_device_x11.cc
index 07b26f7..e91ff437 100644
--- a/components/viz/service/display_embedder/software_output_device_x11.cc
+++ b/components/viz/service/display_embedder/software_output_device_x11.cc
@@ -8,14 +8,107 @@
 #include <stdint.h>
 #include <string.h>
 
+#include "base/macros.h"
+#include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "ui/base/x/x11_util.h"
 #include "ui/base/x/x11_util_internal.h"
 #include "ui/gfx/x/x11.h"
+#include "ui/gfx/x/x11_error_tracker.h"
 #include "ui/gfx/x/x11_types.h"
 
 namespace viz {
 
+namespace {
+
+class ScopedPixmap {
+ public:
+  ScopedPixmap(XDisplay* display, Pixmap pixmap)
+      : display_(display), pixmap_(pixmap) {}
+
+  ~ScopedPixmap() {
+    if (pixmap_)
+      XFreePixmap(display_, pixmap_);
+  }
+
+  operator Pixmap() const { return pixmap_; }
+
+ private:
+  XDisplay* display_;
+  Pixmap pixmap_;
+  DISALLOW_COPY_AND_ASSIGN(ScopedPixmap);
+};
+
+// Draw |data| over |widget|'s parent-relative background, and write the
+// resulting image to |widget|.  Returns true on success.
+bool CompositeBitmap(XDisplay* display,
+                     XID widget,
+                     int x,
+                     int y,
+                     int width,
+                     int height,
+                     int depth,
+                     GC gc,
+                     const void* data) {
+  XClearArea(display, widget, x, y, width, height, false);
+
+  std::unique_ptr<XImage, ui::XImageDeleter> bg;
+  {
+    gfx::X11ErrorTracker ignore_x_errors;
+    bg.reset(
+        XGetImage(display, widget, x, y, width, height, AllPlanes, ZPixmap));
+  }
+
+  // XGetImage() may fail if the drawable is a window and the window is not
+  // fully in the bounds of its parent.
+  if (!bg) {
+    ScopedPixmap pixmap(display,
+                        XCreatePixmap(display, widget, width, height, depth));
+    if (!pixmap)
+      return false;
+
+    XGCValues gcv;
+    gcv.subwindow_mode = IncludeInferiors;
+    XChangeGC(display, gc, GCSubwindowMode, &gcv);
+
+    XCopyArea(display, widget, pixmap, gc, x, y, width, height, 0, 0);
+
+    gcv.subwindow_mode = ClipByChildren;
+    XChangeGC(display, gc, GCSubwindowMode, &gcv);
+
+    bg.reset(
+        XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap));
+  }
+
+  if (!bg)
+    return false;
+
+  SkBitmap bg_bitmap;
+  SkImageInfo image_info =
+      SkImageInfo::Make(bg->width, bg->height,
+                        bg->byte_order == LSBFirst ? kBGRA_8888_SkColorType
+                                                   : kRGBA_8888_SkColorType,
+                        kPremul_SkAlphaType);
+  if (!bg_bitmap.installPixels(image_info, bg->data, bg->bytes_per_line))
+    return false;
+  SkCanvas canvas(bg_bitmap);
+
+  SkBitmap fg_bitmap;
+  image_info = SkImageInfo::Make(width, height, kBGRA_8888_SkColorType,
+                                 kPremul_SkAlphaType);
+  if (!fg_bitmap.installPixels(image_info, const_cast<void*>(data), 4 * width))
+    return false;
+  canvas.drawBitmap(fg_bitmap, 0, 0);
+  canvas.flush();
+
+  XPutImage(display, widget, gc, bg.get(), x, y, x, y, width, height);
+
+  XFlush(display);
+  return true;
+}
+
+}  // namespace
+
 SoftwareOutputDeviceX11::SoftwareOutputDeviceX11(gfx::AcceleratedWidget widget)
     : widget_(widget), display_(gfx::GetXDisplay()), gc_(nullptr) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -25,6 +118,7 @@
     LOG(ERROR) << "XGetWindowAttributes failed for window " << widget_;
     return;
   }
+  ui::GetIntProperty(widget_, "CHROMIUM_COMPOSITE_WINDOW", &composite_);
 }
 
 SoftwareOutputDeviceX11::~SoftwareOutputDeviceX11() {
@@ -46,6 +140,15 @@
   if (rect.IsEmpty())
     return;
 
+  if (composite_) {
+    SkPixmap pixmap;
+    surface_->peekPixels(&pixmap);
+    if (CompositeBitmap(display_, widget_, rect.x(), rect.y(), rect.width(),
+                        rect.height(), attributes_.depth, gc_, pixmap.addr())) {
+      return;
+    }
+  }
+
   int bpp = gfx::BitsPerPixelForPixmapDepth(display_, attributes_.depth);
 
   if (bpp != 32 && bpp != 16 && ui::QueryRenderSupport(display_)) {
diff --git a/components/viz/service/display_embedder/software_output_device_x11.h b/components/viz/service/display_embedder/software_output_device_x11.h
index fcbd3c3..79a5252 100644
--- a/components/viz/service/display_embedder/software_output_device_x11.h
+++ b/components/viz/service/display_embedder/software_output_device_x11.h
@@ -28,6 +28,9 @@
   XDisplay* display_;
   GC gc_;
   XWindowAttributes attributes_;
+  // If nonzero, indicates that the widget should be drawn over its
+  // parent-relative background.
+  int composite_ = 0;
   THREAD_CHECKER(thread_checker_);
 
   DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceX11);
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index 3b76d86..44db5d1 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -3741,10 +3741,18 @@
   EXPECT_EQ(VARIANT_FALSE, result.ptr()->boolVal);
 }
 
-IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestIFrameRootNodeChange) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      ::switches::kEnableExperimentalUIAutomation);
+class AccessibilityWinUIABrowserTest : public AccessibilityWinBrowserTest {
+ protected:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    AccessibilityWinBrowserTest::SetUpCommandLine(command_line);
 
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        ::switches::kEnableExperimentalUIAutomation);
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(AccessibilityWinUIABrowserTest,
+                       TestIFrameRootNodeChange) {
   LoadInitialAccessibilityTreeFromHtml(
       R"HTML(<!DOCTYPE html>
       <html>
@@ -3794,4 +3802,22 @@
   EXPECT_EQ(content_root.Get(), first_child.Get());
 }
 
+IN_PROC_BROWSER_TEST_F(AccessibilityWinUIABrowserTest, TestGetFragmentRoot) {
+  // Verify that we can obtain a fragment root from a fragment without having
+  // sent WM_GETOBJECT to the host window.
+  LoadInitialAccessibilityTreeFromHtml(
+      R"HTML(<!DOCTYPE html>
+      <html>
+      </html>)HTML");
+
+  Microsoft::WRL::ComPtr<IRawElementProviderFragment> content_root;
+  ASSERT_HRESULT_SUCCEEDED(
+      GetManager()->GetRoot()->GetNativeViewAccessible()->QueryInterface(
+          IID_PPV_ARGS(&content_root)));
+
+  Microsoft::WRL::ComPtr<IRawElementProviderFragmentRoot> fragment_root;
+  ASSERT_HRESULT_SUCCEEDED(content_root->get_FragmentRoot(&fragment_root));
+  ASSERT_NE(nullptr, fragment_root.Get());
+}
+
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc
index b8f7c6e6..253c5618 100644
--- a/content/browser/accessibility/browser_accessibility_com_win.cc
+++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -1630,8 +1630,8 @@
     }
   }
 
-  return CComObjectRootBase::InternalQueryInterface(this_ptr, entries, iid,
-                                                    object);
+  return AXPlatformNodeWin::InternalQueryInterface(this_ptr, entries, iid,
+                                                   object);
 }
 
 void BrowserAccessibilityComWin::ComputeStylesIfNeeded() {
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index d8d2b94..59214415 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -573,21 +573,6 @@
   BrowserAccessibilityManager::OnAtomicUpdateFinished(tree, root_changed,
                                                       changes);
 
-  if (root_changed && IsRootTree() &&
-      switches::IsExperimentalAccessibilityPlatformUIAEnabled()) {
-    // If a fragment root has been created, inform it that the content root has
-    // changed.
-    BrowserAccessibilityDelegate* root_delegate = GetDelegateFromRootManager();
-    if (root_delegate) {
-      ui::AXFragmentRootWin* fragment_root =
-          ui::AXFragmentRootWin::GetForAcceleratedWidget(
-              root_delegate->AccessibilityGetAcceleratedWidget());
-      if (fragment_root) {
-        fragment_root->SetChild(ToBrowserAccessibilityWin(GetRoot())->GetCOM());
-      }
-    }
-  }
-
   // Do a sequence of Windows-specific updates on each node. Each one is
   // done in a single pass that must complete before the next step starts.
   // The nodes that need to be updated are all of the nodes that were changed,
diff --git a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
index 62e499bc..6a156fd 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
@@ -8,12 +8,31 @@
 #include "content/browser/accessibility/test_browser_accessibility_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/accessibility/accessibility_switches.h"
+#include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/accessibility/platform/ax_fragment_root_win.h"
 #include "ui/accessibility/platform/ax_platform_node_win.h"
 #include "ui/accessibility/platform/test_ax_node_wrapper.h"
 
 namespace content {
 
+class TestFragmentRootDelegate : public ui::AXFragmentRootDelegateWin {
+ public:
+  TestFragmentRootDelegate(
+      BrowserAccessibilityManager* browser_accessibility_manager)
+      : browser_accessibility_manager_(browser_accessibility_manager) {}
+  ~TestFragmentRootDelegate() = default;
+
+  gfx::NativeViewAccessible GetChildOfAXFragmentRoot() override {
+    return browser_accessibility_manager_->GetRoot()->GetNativeViewAccessible();
+  }
+
+  gfx::NativeViewAccessible GetParentOfAXFragmentRoot() override {
+    return nullptr;
+  }
+
+  BrowserAccessibilityManager* browser_accessibility_manager_;
+};
+
 class BrowserAccessibilityManagerWinTest : public testing::Test {
  public:
   BrowserAccessibilityManagerWinTest() = default;
@@ -50,14 +69,15 @@
           MakeAXTreeUpdate(root), test_browser_accessibility_delegate_.get(),
           new BrowserAccessibilityFactory()));
 
+  TestFragmentRootDelegate test_fragment_root_delegate(root_manager.get());
+
   ui::AXPlatformNode* root_document_root_node =
       ui::AXPlatformNode::FromNativeViewAccessible(
           root_manager->GetRoot()->GetNativeViewAccessible());
 
   std::unique_ptr<ui::AXPlatformNodeDelegate> fragment_root =
-      std::make_unique<ui::AXFragmentRootWin>(
-          gfx::kMockAcceleratedWidget,
-          static_cast<ui::AXPlatformNodeWin*>(root_document_root_node));
+      std::make_unique<ui::AXFragmentRootWin>(gfx::kMockAcceleratedWidget,
+                                              &test_fragment_root_delegate);
 
   EXPECT_EQ(fragment_root->GetChildCount(), 1);
   EXPECT_EQ(fragment_root->ChildAtIndex(0),
@@ -110,14 +130,15 @@
           parent_tree_update, test_browser_accessibility_delegate_.get(),
           new BrowserAccessibilityFactory()));
 
+  TestFragmentRootDelegate test_fragment_root_delegate(parent_manager.get());
+
   ui::AXPlatformNode* root_document_root_node =
       ui::AXPlatformNode::FromNativeViewAccessible(
           parent_manager->GetRoot()->GetNativeViewAccessible());
 
   std::unique_ptr<ui::AXPlatformNodeDelegate> fragment_root =
-      std::make_unique<ui::AXFragmentRootWin>(
-          gfx::kMockAcceleratedWidget,
-          static_cast<ui::AXPlatformNodeWin*>(root_document_root_node));
+      std::make_unique<ui::AXFragmentRootWin>(gfx::kMockAcceleratedWidget,
+                                              &test_fragment_root_delegate);
 
   EXPECT_EQ(fragment_root->GetChildCount(), 1);
   EXPECT_EQ(fragment_root->ChildAtIndex(0),
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 063e42e..b34fbbdc 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -490,6 +490,11 @@
   RunAriaTest(FILE_PATH_LITERAL("aria-expanded.html"));
 }
 
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
+                       AccessibilityAriaExpandedRolesSupported) {
+  RunAriaTest(FILE_PATH_LITERAL("aria-expanded-roles-supported.html"));
+}
+
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaFeed) {
   RunAriaTest(FILE_PATH_LITERAL("aria-feed.html"));
 }
diff --git a/content/browser/devtools/devtools_background_services.proto b/content/browser/devtools/devtools_background_services.proto
index 8a80f14..459f290 100644
--- a/content/browser/devtools/devtools_background_services.proto
+++ b/content/browser/devtools/devtools_background_services.proto
@@ -18,9 +18,10 @@
   BACKGROUND_SYNC = 3;
   PUSH_MESSAGING = 4;
   NOTIFICATIONS = 5;
+  PAYMENT_HANDLER = 6;
 
   // Keep as last, must have the largest tag value.
-  COUNT = 6;
+  COUNT = 7;
 }
 
 // A proto for storing the background service event with common metadata for
diff --git a/content/browser/devtools/devtools_background_services_context_impl.cc b/content/browser/devtools/devtools_background_services_context_impl.cc
index 1c1331c..d8c31d5 100644
--- a/content/browser/devtools/devtools_background_services_context_impl.cc
+++ b/content/browser/devtools/devtools_background_services_context_impl.cc
@@ -51,6 +51,8 @@
       return devtools::proto::PUSH_MESSAGING;
     case DevToolsBackgroundService::kNotifications:
       return devtools::proto::NOTIFICATIONS;
+    case DevToolsBackgroundService::kPaymentHandler:
+      return devtools::proto::PAYMENT_HANDLER;
   }
 }
 
diff --git a/content/browser/devtools/protocol/background_service_handler.cc b/content/browser/devtools/protocol/background_service_handler.cc
index 52afbfa..ae1bd79a 100644
--- a/content/browser/devtools/protocol/background_service_handler.cc
+++ b/content/browser/devtools/protocol/background_service_handler.cc
@@ -28,6 +28,9 @@
   } else if (service_name ==
              BackgroundService::ServiceNameEnum::Notifications) {
     return devtools::proto::BackgroundService::NOTIFICATIONS;
+  } else if (service_name ==
+             BackgroundService::ServiceNameEnum::PaymentHandler) {
+    return devtools::proto::BackgroundService::PAYMENT_HANDLER;
   }
   return devtools::proto::BackgroundService::UNKNOWN;
 }
@@ -42,6 +45,8 @@
       return BackgroundService::ServiceNameEnum::PushMessaging;
     case devtools::proto::BackgroundService::NOTIFICATIONS:
       return BackgroundService::ServiceNameEnum::Notifications;
+    case devtools::proto::BackgroundService::PAYMENT_HANDLER:
+      return BackgroundService::ServiceNameEnum::PaymentHandler;
     default:
       NOTREACHED();
   }
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index 005a93e..387947fd 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -2,9 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/browser/frame_host/navigation_controller_impl.h"
-
 #include <stdint.h>
+
 #include <algorithm>
 #include <utility>
 #include <vector>
@@ -26,6 +25,7 @@
 #include "build/build_config.h"
 #include "content/browser/frame_host/frame_navigation_entry.h"
 #include "content/browser/frame_host/frame_tree.h"
+#include "content/browser/frame_host/navigation_controller_impl.h"
 #include "content/browser/frame_host/navigation_entry_impl.h"
 #include "content/browser/frame_host/navigation_handle_impl.h"
 #include "content/browser/frame_host/navigation_request.h"
@@ -50,6 +50,7 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/bindings_policy.h"
 #include "content/public/common/content_features.h"
+#include "content/public/common/navigation_policy.h"
 #include "content/public/common/screen_info.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/use_zoom_for_dsf_policy.h"
@@ -5526,8 +5527,10 @@
 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, ReloadOriginalRequest) {
   // TODO(lukasza): https://crbug.com/417518: Get tests working with
   // --site-per-process.
-  if (SiteIsolationPolicy::UseDedicatedProcessesForAllSites())
+  if (SiteIsolationPolicy::UseDedicatedProcessesForAllSites() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     return;
+  }
 
   GURL original_url(embedded_test_server()->GetURL(
       "/navigation_controller/simple_page_1.html"));
diff --git a/content/browser/frame_host/navigator_impl_unittest.cc b/content/browser/frame_host/navigator_impl_unittest.cc
index 0a1b166..8680202 100644
--- a/content/browser/frame_host/navigator_impl_unittest.cc
+++ b/content/browser/frame_host/navigator_impl_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "content/browser/frame_host/navigator_impl.h"
+
 #include <stdint.h>
 
 #include "base/feature_list.h"
@@ -13,7 +15,6 @@
 #include "content/browser/frame_host/navigation_request.h"
 #include "content/browser/frame_host/navigation_request_info.h"
 #include "content/browser/frame_host/navigator.h"
-#include "content/browser/frame_host/navigator_impl.h"
 #include "content/browser/frame_host/render_frame_host_manager.h"
 #include "content/browser/site_instance_impl.h"
 #include "content/common/frame.mojom.h"
@@ -21,6 +22,7 @@
 #include "content/common/navigation_params.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/common/content_features.h"
+#include "content/public/common/navigation_policy.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
 #include "content/public/test/browser_side_navigation_test_utils.h"
@@ -189,7 +191,8 @@
   EXPECT_EQ(kUrl2, request->common_params().url);
   EXPECT_FALSE(request->browser_initiated());
   EXPECT_FALSE(main_test_rfh()->is_loading());
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -197,7 +200,8 @@
 
   // Have the current RenderFrameHost commit the navigation.
   navigation->ReadyToCommit();
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_EQ(navigation->GetFinalRenderFrameHost(),
               GetSpeculativeRenderFrameHost(node));
   }
@@ -211,7 +215,8 @@
   EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
 
   // The SiteInstance did not change unless site-per-process is enabled.
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_NE(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId());
   } else {
     EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId());
@@ -606,7 +611,8 @@
 
   // Confirm that the speculative RenderFrameHost was destroyed in the non
   // SitePerProcess case.
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -645,7 +651,8 @@
   EXPECT_EQ(kUrl1, request1->common_params().url);
   EXPECT_FALSE(request1->browser_initiated());
   EXPECT_TRUE(request1->common_params().has_user_gesture);
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -665,7 +672,8 @@
   EXPECT_EQ(kUrl2, request2->common_params().url);
   EXPECT_FALSE(request2->browser_initiated());
   EXPECT_FALSE(request2->common_params().has_user_gesture);
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -745,7 +753,8 @@
   EXPECT_EQ(kUrl1, request1->common_params().url);
   EXPECT_FALSE(request1->browser_initiated());
   EXPECT_FALSE(request1->common_params().has_user_gesture);
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -765,7 +774,8 @@
   EXPECT_EQ(kUrl2, request2->common_params().url);
   EXPECT_FALSE(request2->browser_initiated());
   EXPECT_FALSE(request2->common_params().has_user_gesture);
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
   } else {
     EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -779,7 +789,8 @@
   EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
 
   // The SiteInstance did not change unless site-per-process is enabled.
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_NE(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId());
   } else {
     EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId());
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 84484b0..6ed97085 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -54,6 +54,7 @@
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/mime_handler_view_mode.h"
+#include "content/public/common/navigation_policy.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/url_utils.h"
@@ -110,6 +111,46 @@
       future_isolation_context, dest_url);
 }
 
+bool ShouldProactivelySwapBrowsingInstance(RenderFrameHostImpl* current_rfh,
+                                           const GURL& dest_url) {
+  if (!IsProactivelySwapBrowsingInstanceEnabled())
+    return false;
+
+  // Only main frames are eligible to swap BrowsingInstances.
+  if (!current_rfh->frame_tree_node()->IsMainFrame())
+    return false;
+
+  // Skip cases when there are other windows that might script this one.
+  SiteInstanceImpl* current_instance = current_rfh->GetSiteInstance();
+  if (current_instance->GetRelatedActiveContentsCount() > 1u)
+    return false;
+
+  // "about:blank" and chrome-native-URL do not "use" a SiteInstance. This
+  // allows the SiteInstance to be reused cross-site. Starting a new
+  // BrowsingInstance would prevent the SiteInstance to be reused, that's why
+  // this case is excluded here.
+  if (!current_instance->HasSite())
+    return false;
+
+  // Exclude non http(s) schemes. Some tests don't expect navigations to
+  // data-URL or to about:blank to switch to a different BrowsingInstance.
+  const GURL& current_url = current_rfh->GetLastCommittedURL();
+  if (!current_url.SchemeIsHTTPOrHTTPS() || !dest_url.SchemeIsHTTPOrHTTPS())
+    return false;
+
+  // Nothing prevents two pages with the same website to live in different
+  // BrowsingInstance. However many tests are making this assumption. The scope
+  // of ProactivelySwapBrowsingInstance experiment doesn't include them. The
+  // cost of getting a new process on same-site navigation would (probably?) be
+  // too high.
+  if (SiteInstanceImpl::IsSameWebSite(current_instance->GetIsolationContext(),
+                                      current_url, dest_url, true)) {
+    return false;
+  }
+
+  return true;
+}
+
 }  // namespace
 
 RenderFrameHostManager::RenderFrameHostManager(FrameTreeNode* frame_tree_node,
@@ -1133,6 +1174,13 @@
     return true;
   }
 
+  // Experimental mode to swap BrowsingInstances on most cross-site navigations
+  // when there are no other windows in the BrowsingInstance.
+  if (ShouldProactivelySwapBrowsingInstance(render_frame_host_.get(),
+                                            new_effective_url)) {
+    return true;
+  }
+
   return false;
 }
 
@@ -1644,6 +1692,11 @@
   if (ShouldSwapBrowsingInstancesForDynamicIsolation(rfh, dest_url))
     return true;
 
+  // Experimental mode to swap BrowsingInstances on most cross-site navigations
+  // when there are no other windows in the BrowsingInstance.
+  if (ShouldProactivelySwapBrowsingInstance(rfh, dest_url))
+    return true;
+
   // TODO(nasko, nick): These following --site-per-process checks are
   // overly simplistic. Update them to match all the cases
   // considered by DetermineSiteInstanceForURL.
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index 01216b6..1485b12 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -51,6 +51,7 @@
 #include "content/public/common/bindings_policy.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/navigation_policy.h"
 #include "content/public/common/page_state.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/web_preferences.h"
@@ -624,10 +625,12 @@
   // Should have the same SiteInstance unless we're in site-per-process mode.
   scoped_refptr<SiteInstance> noref_site_instance(
       shell()->web_contents()->GetSiteInstance());
-  if (AreAllSitesIsolatedForTesting())
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_NE(orig_site_instance, noref_site_instance);
-  else
+  } else {
     EXPECT_EQ(orig_site_instance, noref_site_instance);
+  }
 }
 
 // Same as above, but for 'noopener'
@@ -661,10 +664,12 @@
   // Should have the same SiteInstance unless we're in site-per-process mode.
   scoped_refptr<SiteInstance> noref_site_instance(
       shell()->web_contents()->GetSiteInstance());
-  if (AreAllSitesIsolatedForTesting())
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_NE(orig_site_instance, noref_site_instance);
-  else
+  } else {
     EXPECT_EQ(orig_site_instance, noref_site_instance);
+  }
 }
 
 // Test for crbug.com/116192.  Targeted links should still work after the
@@ -3975,7 +3980,7 @@
   scoped_refptr<SiteInstance> a_site_instance(
       shell()->web_contents()->GetSiteInstance());
 
-  // Open a popup for b.com.  This should stay in the current BrowsingInstance.
+  // Open a popup for b.com. This should stay in the current BrowsingInstance.
   GURL b_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
   Shell* popup = OpenPopup(shell(), b_url, "foo");
   EXPECT_TRUE(WaitForLoadStop(popup->web_contents()));
@@ -3983,14 +3988,14 @@
       popup->web_contents()->GetSiteInstance());
   EXPECT_TRUE(a_site_instance->IsRelatedSiteInstance(b_site_instance.get()));
 
-  // Same-site browser-initiated navigations shouldn't swap BrowsingInstances
-  // or SiteInstances.
+  // 1. Same-site browser-initiated navigations shouldn't swap BrowsingInstances
+  //    or SiteInstances.
   EXPECT_TRUE(NavigateToURL(
       popup, embedded_test_server()->GetURL("b.com", "/title2.html")));
   EXPECT_EQ(b_site_instance, popup->web_contents()->GetSiteInstance());
 
-  // A cross-site browser-initiated navigation should swap BrowsingInstances,
-  // despite having an opener in the same site as the destination URL.
+  // 2. A cross-site browser-initiated navigation should swap BrowsingInstances,
+  //    despite having an opener in the same site as the destination URL.
   EXPECT_TRUE(NavigateToURL(
       popup, embedded_test_server()->GetURL("a.com", "/title3.html")));
   EXPECT_NE(b_site_instance, popup->web_contents()->GetSiteInstance());
@@ -4000,16 +4005,58 @@
   EXPECT_FALSE(b_site_instance->IsRelatedSiteInstance(
       popup->web_contents()->GetSiteInstance()));
 
-  // Perform several cross-site browser-initiated navigations in the popup, all
-  // using page transitions that allow BrowsingInstance swaps:
-  auto transitions_that_swap_browsing_instances = {
-      ui::PAGE_TRANSITION_TYPED,         /* user typing URL into address bar */
+  auto transitions_forcing_browsing_instance_swap = {
       ui::PAGE_TRANSITION_AUTO_BOOKMARK, /* user clicking on a bookmark */
       ui::PAGE_TRANSITION_GENERATED,     /* search query */
       ui::PAGE_TRANSITION_KEYWORD, /* search within a site from address bar */
+      ui::PAGE_TRANSITION_TYPED,   /* user typing URL into address bar */
+  };
+  auto transitions_not_forcing_browsing_instance_swap = {
+      ui::PAGE_TRANSITION_LINK, /* user clicked on a link in the document */
+      ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
+      ui::PAGE_TRANSITION_FORM_SUBMIT,
+      ui::PAGE_TRANSITION_KEYWORD_GENERATED,
+      ui::PAGE_TRANSITION_RELOAD,
   };
   int current_site = 0;
-  for (auto transition : transitions_that_swap_browsing_instances) {
+  scoped_refptr<SiteInstance> curr_instance(
+      popup->web_contents()->GetSiteInstance());
+
+  // 3. Perform several cross-site browser-initiated navigations in the popup
+  //    that do not force a BrowsingInstance swap.
+  //
+  // When ProactivelySwapBrowsingInstance is disabled, the BrowsingInstance
+  // isn't swapped, even if it could be.
+  //
+  // When ProactivelySwapBrowsingInstance is enabled, the BrowsingInstance is
+  // now swapped. It can be swapped, because (2) caused the popup to live in a
+  // different BrowsingInstance. The window and the popup are no longer related.
+  for (auto transition : transitions_not_forcing_browsing_instance_swap) {
+    GURL cross_site_url(embedded_test_server()->GetURL(
+        base::StringPrintf("site%d.com", current_site++), "/title1.html"));
+    SCOPED_TRACE(base::StringPrintf(
+        "... wrong BrowsingInstance for '%s' transition to %s",
+        ui::PageTransitionGetCoreTransitionString(transition),
+        cross_site_url.spec().c_str()));
+
+    TestNavigationObserver observer(popup->web_contents());
+    NavigationController::LoadURLParams params(cross_site_url);
+    params.transition_type = transition;
+    popup->web_contents()->GetController().LoadURLWithParams(params);
+    observer.Wait();
+
+    if (IsProactivelySwapBrowsingInstanceEnabled()) {
+      EXPECT_FALSE(curr_instance->IsRelatedSiteInstance(
+          popup->web_contents()->GetSiteInstance()));
+    } else {
+      EXPECT_TRUE(curr_instance->IsRelatedSiteInstance(
+          popup->web_contents()->GetSiteInstance()));
+    }
+  }
+
+  // 4. Perform several cross-site browser-initiated navigations in the popup,
+  //    all using page transitions that force BrowsingInstance swaps:
+  for (auto transition : transitions_forcing_browsing_instance_swap) {
     GURL cross_site_url(embedded_test_server()->GetURL(
         base::StringPrintf("site%d.com", current_site++), "/title1.html"));
     scoped_refptr<SiteInstance> prev_instance(
@@ -4033,32 +4080,6 @@
     EXPECT_NE(prev_instance, curr_instance);
     EXPECT_FALSE(prev_instance->IsRelatedSiteInstance(curr_instance.get()));
   }
-
-  // Ensure that other page transitions don't cause a BrowsingInstance swap.
-  auto transitions_that_dont_swap_browsing_instances = {
-      ui::PAGE_TRANSITION_LINK, ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
-      ui::PAGE_TRANSITION_FORM_SUBMIT,
-  };
-  scoped_refptr<SiteInstance> curr_instance(
-      popup->web_contents()->GetSiteInstance());
-  for (auto transition : transitions_that_dont_swap_browsing_instances) {
-    GURL cross_site_url(embedded_test_server()->GetURL(
-        base::StringPrintf("site%d.com", current_site++), "/title1.html"));
-    SCOPED_TRACE(base::StringPrintf(
-        "... expected no BrowsingInstance swap for '%s' transition to %s",
-        ui::PageTransitionGetCoreTransitionString(transition),
-        cross_site_url.spec().c_str()));
-
-    TestNavigationObserver observer(popup->web_contents());
-    NavigationController::LoadURLParams params(cross_site_url);
-    params.transition_type = transition;
-    popup->web_contents()->GetController().LoadURLWithParams(params);
-    observer.Wait();
-
-    // This should stay in the current BrowsingInstance.
-    EXPECT_TRUE(curr_instance->IsRelatedSiteInstance(
-        popup->web_contents()->GetSiteInstance()));
-  }
 }
 
 // Ensure that these two browser-initiated navigations:
@@ -4118,7 +4139,8 @@
   // Since this is a browser-initiated, cross-site navigation, it will swap
   // BrowsingInstances, and create a new foo.com SiteInstance, distinct from
   // the initial one.
-  if (!AreAllSitesIsolatedForTesting()) {
+  if (!AreAllSitesIsolatedForTesting() &&
+      !IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_EQ(site_instance, shell()->web_contents()->GetSiteInstance());
   } else {
     EXPECT_NE(site_instance, shell()->web_contents()->GetSiteInstance());
@@ -5999,6 +6021,36 @@
   SetBrowserClientForTesting(old_client);
 }
 
+// When ProactivelySwapBrowsingInstance is enabled, the browser switch to a new
+// BrowsingInstance on cross-site HTTP(S) main frame navigations, when there are
+// no other windows in the BrowsingInstance.
+IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest,
+                       ProactivelySwapBrowsingInstance) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL b_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+
+  // Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), a_url));
+  scoped_refptr<SiteInstance> a_site_instance =
+      web_contents->GetMainFrame()->GetSiteInstance();
+
+  // Navigate to B. The navigation is document initiated. It swaps
+  // BrowsingInstance only if  ProactivelySwapBrowsingInstance is enabled.
+  EXPECT_TRUE(ExecJs(shell(), JsReplace("location.href = $1", b_url)));
+  WaitForLoadStop(web_contents);
+  scoped_refptr<SiteInstance> b_site_instance =
+      web_contents->GetMainFrame()->GetSiteInstance();
+
+  if (IsProactivelySwapBrowsingInstanceEnabled())
+    EXPECT_FALSE(a_site_instance->IsRelatedSiteInstance(b_site_instance.get()));
+  else
+    EXPECT_TRUE(a_site_instance->IsRelatedSiteInstance(b_site_instance.get()));
+}
+
 // Tests specific to the "default process" mode (which creates strict
 // SiteInstances that can share a default process per BrowsingInstance).
 class RenderFrameHostManagerDefaultProcessTest
@@ -6055,6 +6107,14 @@
                                   ->GetSiteInstance()
                                   ->GetDefaultProcessIfUsable());
 
+  // This test expect a cross-site navigation to by same BrowsingInstance. With
+  // ProactivelySwapBrowsingInstance, it won't be the case. Opening a popup
+  // prevent the BrowsingInstance to change.
+  if (IsProactivelySwapBrowsingInstanceEnabled()) {
+    GURL popup_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
+    EXPECT_TRUE(OpenPopup(web_contents->GetMainFrame(), popup_url, ""));
+  }
+
   // Set up a URL for which ShouldAssignSiteForURL will return false.  The
   // corresponding SiteInstance's site will be left unassigned, and its process
   // won't be locked.
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 575f189..cac0a978 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -639,6 +639,12 @@
 #endif
       (kind == GPU_PROCESS_KIND_SANDBOXED &&
        command_line->HasSwitch(switches::kGpuStartupDialog));
+
+#if defined(OS_WIN)
+  if (kind == GPU_PROCESS_KIND_UNSANDBOXED_NO_GL) {
+    gpu_preferences->disable_gpu_watchdog = true;
+  }
+#endif
 }
 
 void GpuDataManagerImplPrivate::DisableHardwareAcceleration() {
diff --git a/content/browser/indexed_db/indexed_db_factory_unittest.cc b/content/browser/indexed_db/indexed_db_factory_unittest.cc
index f8de8fb..ab4ea49 100644
--- a/content/browser/indexed_db/indexed_db_factory_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_factory_unittest.cc
@@ -273,34 +273,8 @@
   EXPECT_EQ(0ul, factory()->GetOpenOrigins().size());
 }
 
-TEST_F(IndexedDBFactoryTestWithMockTime, CloseWithoutSweeping) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures(
-      {}, {kIDBTombstoneDeletion, kIDBTombstoneStatistics});
-  SetupContext();
-
-  const Origin origin = Origin::Create(GURL("http://localhost:81"));
-
-  IndexedDBOriginStateHandle origin_state_handle;
-  leveldb::Status s;
-
-  std::tie(origin_state_handle, s, std::ignore, std::ignore, std::ignore) =
-      factory()->GetOrOpenOriginFactory(origin, context()->data_path());
-  EXPECT_TRUE(origin_state_handle.IsHeld()) << s.ToString();
-  origin_state_handle.Release();
-
-  EXPECT_TRUE(factory()->GetOriginFactory(origin));
-  EXPECT_TRUE(factory()->GetOriginFactory(origin)->IsClosing());
-
-  thread_bundle()->FastForwardBy(base::TimeDelta::FromSeconds(2));
-
-  EXPECT_FALSE(factory()->GetOriginFactory(origin));
-}
-
 TEST_F(IndexedDBFactoryTestWithMockTime, PreCloseTasksStart) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures({kIDBTombstoneDeletion},
-                                {kIDBTombstoneStatistics});
   base::SimpleTestClock clock;
   clock.SetNow(base::Time::Now());
   SetupContextWithFactories(indexed_db::LevelDBFactory::Get(), &clock);
diff --git a/content/browser/indexed_db/indexed_db_origin_state.cc b/content/browser/indexed_db/indexed_db_origin_state.cc
index 60a718f3..a94bfd0 100644
--- a/content/browser/indexed_db/indexed_db_origin_state.cc
+++ b/content/browser/indexed_db/indexed_db_origin_state.cc
@@ -64,12 +64,6 @@
 
 }  // namespace
 
-const base::Feature kIDBTombstoneStatistics{"IDBTombstoneStatistics",
-                                            base::FEATURE_DISABLED_BY_DEFAULT};
-
-const base::Feature kIDBTombstoneDeletion{"IDBTombstoneDeletion",
-                                          base::FEATURE_ENABLED_BY_DEFAULT};
-
 constexpr const base::TimeDelta
     IndexedDBOriginState::kMaxEarliestGlobalSweepFromNow;
 constexpr const base::TimeDelta
@@ -276,15 +270,6 @@
   if (*earliest_global_sweep_time_ > now)
     return;
 
-  bool tombstone_stats_enabled =
-      base::FeatureList::IsEnabled(kIDBTombstoneStatistics);
-  bool tombstone_deletion_enabled =
-      base::FeatureList::IsEnabled(kIDBTombstoneDeletion);
-
-  // After this check, exactly one of the flags must be true.
-  if (tombstone_stats_enabled == tombstone_deletion_enabled)
-    return;
-
   base::Time origin_earliest_sweep;
   leveldb::Status s = indexed_db::GetEarliestSweepTime(backing_store_->db(),
                                                        &origin_earliest_sweep);
@@ -308,11 +293,8 @@
     return;
 
   std::list<std::unique_ptr<IndexedDBPreCloseTaskQueue::PreCloseTask>> tasks;
-  IndexedDBTombstoneSweeper::Mode mode =
-      tombstone_stats_enabled ? IndexedDBTombstoneSweeper::Mode::STATISTICS
-                              : IndexedDBTombstoneSweeper::Mode::DELETION;
   tasks.push_back(std::make_unique<IndexedDBTombstoneSweeper>(
-      mode, kTombstoneSweeperRoundIterations, kTombstoneSweeperMaxIterations,
+      kTombstoneSweeperRoundIterations, kTombstoneSweeperMaxIterations,
       backing_store_->db()->db()));
   // TODO(dmurph): Add compaction task that compacts all indexes if we have
   // more than X deletions.
diff --git a/content/browser/indexed_db/indexed_db_origin_state.h b/content/browser/indexed_db/indexed_db_origin_state.h
index 642b4e8..e9b35205 100644
--- a/content/browser/indexed_db/indexed_db_origin_state.h
+++ b/content/browser/indexed_db/indexed_db_origin_state.h
@@ -18,10 +18,6 @@
 #include "content/browser/indexed_db/scopes/disjoint_range_lock_manager.h"
 #include "content/common/content_export.h"
 
-namespace base {
-struct Feature;
-}
-
 namespace content {
 class IndexedDBBackingStore;
 class IndexedDBDatabase;
@@ -32,9 +28,6 @@
 class LevelDBFactory;
 }  // namespace indexed_db
 
-CONTENT_EXPORT extern const base::Feature kIDBTombstoneStatistics;
-CONTENT_EXPORT extern const base::Feature kIDBTombstoneDeletion;
-
 constexpr const char kIDBCloseImmediatelySwitch[] = "idb-close-immediately";
 
 // IndexedDBOriginState manages the per-origin IndexedDB state, and contains the
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc b/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
index 37db100..6bdcd52 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
@@ -4,7 +4,7 @@
 
 #include "content/browser/indexed_db/indexed_db_tombstone_sweeper.h"
 
-#include "base/metrics/histogram_macros.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/rand_util.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_number_conversions.h"
@@ -66,12 +66,10 @@
   return *inner_;
 }
 
-IndexedDBTombstoneSweeper::IndexedDBTombstoneSweeper(Mode mode,
-                                                     int round_iterations,
+IndexedDBTombstoneSweeper::IndexedDBTombstoneSweeper(int round_iterations,
                                                      int max_iterations,
                                                      leveldb::DB* database)
-    : mode_(mode),
-      max_round_iterations_(round_iterations),
+    : max_round_iterations_(round_iterations),
       max_iterations_(max_iterations),
       database_(database),
       ptr_factory_(this) {
@@ -117,7 +115,7 @@
   leveldb::Status s;
   Status status = DoSweep(&s);
 
-  if (status != Status::DONE_ERROR && mode_ == Mode::DELETION) {
+  if (status != Status::DONE_ERROR) {
     s = FlushDeletions();
     if (!s.ok())
       status = Status::DONE_ERROR;
@@ -134,7 +132,6 @@
     base::Optional<StopReason> stop_reason,
     base::Optional<IndexedDBTombstoneSweeper::Status> status,
     const leveldb::Status& leveldb_error) {
-  static const char kUmaPrefix[] = "WebCore.IndexedDB.TombstoneSweeper.";
   DCHECK(stop_reason || status);
   DCHECK(!stop_reason || !status);
 
@@ -142,21 +139,10 @@
   if (stop_reason && stop_reason == StopReason::METADATA_ERROR)
     return;
 
-  std::string uma_count_label = kUmaPrefix;
-  std::string uma_size_label = kUmaPrefix;
-
-  switch (mode_) {
-    case Mode::STATISTICS:
-      uma_count_label.append("NumTombstones.");
-      uma_size_label.append("TombstonesSize.");
-      break;
-    case Mode::DELETION:
-      uma_count_label.append("NumDeletedTombstones.");
-      uma_size_label.append("DeletedTombstonesSize.");
-      break;
-    default:
-      NOTREACHED();
-  }
+  std::string uma_count_label =
+      "WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones.";
+  std::string uma_size_label =
+      "WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize.";
 
   if (stop_reason) {
     switch (stop_reason.value()) {
@@ -179,7 +165,7 @@
         uma_size_label.append("MaxIterations");
         break;
       case Status::DONE_ERROR:
-        UMA_HISTOGRAM_ENUMERATION(
+        base::UmaHistogramEnumeration(
             "WebCore.IndexedDB.TombstoneSweeper.SweepError",
             leveldb_env::GetLevelDBStatusUMAValue(leveldb_error),
             leveldb_env::LEVELDB_STATUS_MAX);
@@ -205,26 +191,16 @@
           (clock_for_testing_ ? clock_for_testing_->NowTicks()
                               : base::TimeTicks::Now()) -
           start_time_.value();
-      switch (mode_) {
-        case Mode::STATISTICS:
-          UMA_HISTOGRAM_TIMES(
-              "WebCore.IndexedDB.TombstoneSweeper.StatsTotalTime.Complete",
-              total_time);
-          break;
-        case Mode::DELETION:
-          UMA_HISTOGRAM_TIMES(
-              "WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete",
-              total_time);
-          if (metrics_.seen_tombstones > 0) {
-            // Only record deletion time if we do a deletion.
-            UMA_HISTOGRAM_TIMES(
-                "WebCore.IndexedDB.TombstoneSweeper.DeletionCommitTime."
-                "Complete",
-                total_deletion_time_);
-          }
-          break;
-        default:
-          NOTREACHED();
+
+      base::UmaHistogramTimes(
+          "WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete",
+          total_time);
+      if (metrics_.seen_tombstones > 0) {
+        // Only record deletion time if we do a deletion.
+        base::UmaHistogramTimes(
+            "WebCore.IndexedDB.TombstoneSweeper.DeletionCommitTime."
+            "Complete",
+            total_deletion_time_);
       }
     }
   }
@@ -245,7 +221,7 @@
   // We put our max at 20 instead of 100 to reduce the number of buckets.
   if (total_indices_ > 0) {
     const static int kIndexPercentageBucketCount = 20;
-    UMA_HISTOGRAM_ENUMERATION(
+    base::UmaHistogramExactLinear(
         "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent",
         indices_scanned_ * kIndexPercentageBucketCount / total_indices_,
         kIndexPercentageBucketCount + 1);
@@ -263,7 +239,7 @@
   has_writes_ = false;
 
   if (!status.ok()) {
-    UMA_HISTOGRAM_ENUMERATION(
+    base::UmaHistogramEnumeration(
         "WebCore.IndexedDB.TombstoneSweeper.DeletionWriteError",
         leveldb_env::GetLevelDBStatusUMAValue(status),
         leveldb_env::LEVELDB_STATUS_MAX);
@@ -458,10 +434,8 @@
     }
 
     if (decoded_exists_version != index_data_version) {
-      if (mode_ == Mode::DELETION) {
-        has_writes_ = true;
-        round_deletion_batch_.Delete(key_slice);
-      }
+      has_writes_ = true;
+      round_deletion_batch_.Delete(key_slice);
       ++metrics_.seen_tombstones;
       metrics_.seen_tombstones_size += entry_size;
     }
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper.h b/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
index 9ab45a69..c10bf43 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
@@ -76,16 +76,9 @@
 class CONTENT_EXPORT IndexedDBTombstoneSweeper
     : public IndexedDBPreCloseTaskQueue::PreCloseTask {
  public:
-  enum class Mode {
-    // Gathers statistics and doesn't modify the database.
-    STATISTICS,
-    // Deletes the tombstones that are encountered.
-    DELETION
-  };
 
   // The |database| must outlive this instance.
-  IndexedDBTombstoneSweeper(Mode mode,
-                            int round_iterations,
+  IndexedDBTombstoneSweeper(int round_iterations,
                             int max_iterations,
                             leveldb::DB* database);
   ~IndexedDBTombstoneSweeper() override;
@@ -173,7 +166,6 @@
                     leveldb::Status* leveldb_status,
                     int* round_iterations);
 
-  const Mode mode_;
   int num_iterations_ = 0;
   const int max_round_iterations_;
   const int max_iterations_;
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc b/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
index e2b82fde..b1be63c 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
@@ -44,7 +44,6 @@
 using ::testing::StrictMock;
 using Status = ::leveldb::Status;
 using Slice = ::leveldb::Slice;
-using Mode = IndexedDBTombstoneSweeper::Mode;
 
 constexpr int kRoundIterations = 11;
 constexpr int kMaxIterations = 100;
@@ -80,7 +79,7 @@
   MOCK_CONST_METHOD0(NowTicks, base::TimeTicks());
 };
 
-class IndexedDBTombstoneSweeperTest : public testing::TestWithParam<Mode> {
+class IndexedDBTombstoneSweeperTest : public testing::Test {
  public:
   IndexedDBTombstoneSweeperTest() {}
   ~IndexedDBTombstoneSweeperTest() {}
@@ -132,7 +131,7 @@
 
   void SetupMockDB() {
     sweeper_ = std::make_unique<IndexedDBTombstoneSweeper>(
-        GetParam(), kRoundIterations, kMaxIterations, &mock_db_);
+        kRoundIterations, kMaxIterations, &mock_db_);
     sweeper_->SetStartSeedsForTesting(0, 0, 0);
   }
 
@@ -148,7 +147,7 @@
         std::move(level_db_state), indexed_db::LevelDBFactory::Get(), nullptr,
         LevelDBDatabase::kDefaultMaxOpenIteratorsPerDatabase);
     sweeper_ = std::make_unique<IndexedDBTombstoneSweeper>(
-        GetParam(), kRoundIterations, kMaxIterations, in_memory_db_->db());
+        kRoundIterations, kMaxIterations, in_memory_db_->db());
     sweeper_->SetStartSeedsForTesting(0, 0, 0);
   }
 
@@ -167,34 +166,18 @@
 
   void ExpectUmaTombstones(int num, int size, bool reached_max = false) {
     std::string category = reached_max ? "MaxIterations" : "Complete";
-    if (GetParam() == Mode::STATISTICS) {
-      histogram_tester_.ExpectUniqueSample(
-          "WebCore.IndexedDB.TombstoneSweeper.NumTombstones." + category, num,
-          1);
-      histogram_tester_.ExpectUniqueSample(
-          "WebCore.IndexedDB.TombstoneSweeper.TombstonesSize." + category, size,
-          1);
-    } else {
-      histogram_tester_.ExpectUniqueSample(
-          "WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones." + category,
-          num, 1);
-      histogram_tester_.ExpectUniqueSample(
-          "WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize." +
-              category,
-          size, 1);
-    }
+    histogram_tester_.ExpectUniqueSample(
+        "WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones." + category,
+        num, 1);
+    histogram_tester_.ExpectUniqueSample(
+        "WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize." + category,
+        size, 1);
   }
 
   void ExpectTaskTimeRecorded() {
-    if (GetParam() == Mode::STATISTICS) {
-      histogram_tester_.ExpectTimeBucketCount(
-          "WebCore.IndexedDB.TombstoneSweeper.StatsTotalTime.Complete",
-          base::TimeDelta::FromSeconds(1), 1);
-    } else {
-      histogram_tester_.ExpectTimeBucketCount(
-          "WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete",
-          base::TimeDelta::FromSeconds(1), 1);
-    }
+    histogram_tester_.ExpectTimeBucketCount(
+        "WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete",
+        base::TimeDelta::FromSeconds(1), 1);
   }
 
   void ExpectIndexEntry(leveldb::MockIterator& iterator,
@@ -257,7 +240,7 @@
   TestBrowserThreadBundle thread_bundle_;
 };
 
-TEST_P(IndexedDBTombstoneSweeperTest, EmptyDB) {
+TEST_F(IndexedDBTombstoneSweeperTest, EmptyDB) {
   SetupMockDB();
   sweeper_->SetMetadata(&metadata_);
   EXPECT_TRUE(sweeper_->RunRound());
@@ -266,7 +249,7 @@
       histogram_tester_.GetTotalCountsForPrefix("WebCore.IndexedDB.").empty());
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, NoTombstonesComplexDB) {
+TEST_F(IndexedDBTombstoneSweeperTest, NoTombstonesComplexDB) {
   SetupMockDB();
   PopulateMultiDBMetdata();
   sweeper_->SetMetadata(&metadata_);
@@ -342,7 +325,7 @@
       "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent", 20, 1);
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, AllTombstonesComplexDB) {
+TEST_F(IndexedDBTombstoneSweeperTest, AllTombstonesComplexDB) {
   SetupMockDB();
   PopulateMultiDBMetdata();
   sweeper_->SetMetadata(&metadata_);
@@ -411,8 +394,7 @@
     EXPECT_CALL(*mock_iterator, Valid()).WillOnce(Return(false));
   }
 
-  if (GetParam() == Mode::DELETION)
-    EXPECT_CALL(mock_db_, Write(_, _));
+  EXPECT_CALL(mock_db_, Write(_, _));
 
   ASSERT_TRUE(sweeper_->RunRound());
   ExpectTaskTimeRecorded();
@@ -421,7 +403,7 @@
       "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent", 20, 1);
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, SimpleRealDBNoTombstones) {
+TEST_F(IndexedDBTombstoneSweeperTest, SimpleRealDBNoTombstones) {
   PopulateSingleIndexDBMetadata();
   SetupRealDB();
   sweeper_->SetMetadata(&metadata_);
@@ -454,7 +436,7 @@
       "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent", 20, 1);
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, SimpleRealDBWithTombstones) {
+TEST_F(IndexedDBTombstoneSweeperTest, SimpleRealDBWithTombstones) {
   PopulateSingleIndexDBMetadata();
   SetupRealDB();
   sweeper_->SetMetadata(&metadata_);
@@ -500,12 +482,12 @@
                                                  primary_key),
                             &out, &found)
                       .ok());
-      EXPECT_TRUE(GetParam() == Mode::STATISTICS || !found);
+      EXPECT_TRUE(!found);
     }
   }
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, HitMaxIters) {
+TEST_F(IndexedDBTombstoneSweeperTest, HitMaxIters) {
   PopulateSingleIndexDBMetadata();
   SetupRealDB();
   sweeper_->SetMetadata(&metadata_);
@@ -537,7 +519,7 @@
       "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent", 0, 1);
 }
 
-TEST_P(IndexedDBTombstoneSweeperTest, LevelDBError) {
+TEST_F(IndexedDBTombstoneSweeperTest, LevelDBError) {
   SetupMockDB();
   PopulateMultiDBMetdata();
   sweeper_->SetMetadata(&metadata_);
@@ -597,9 +579,5 @@
       "WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent", 1 * 20 / 3, 1);
 }
 
-INSTANTIATE_TEST_SUITE_P(/* No prefix needed */,
-                         IndexedDBTombstoneSweeperTest,
-                         testing::Values(Mode::STATISTICS, Mode::DELETION));
-
 }  // namespace indexed_db_tombstone_sweeper_unittest
 }  // namespace content
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index 10eeba2..7047abbb 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -420,7 +420,8 @@
 
   // The RenderFrameHost should not have changed unless site-per-process is
   // enabled.
-  if (AreAllSitesIsolatedForTesting()) {
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_NE(initial_rfh,
               static_cast<WebContentsImpl*>(shell()->web_contents())
                   ->GetFrameTree()
diff --git a/content/browser/payments/payment_app_browsertest.cc b/content/browser/payments/payment_app_browsertest.cc
index dc96a2a..d1ff023 100644
--- a/content/browser/payments/payment_app_browsertest.cc
+++ b/content/browser/payments/payment_app_browsertest.cc
@@ -26,14 +26,14 @@
 
 using ::payments::mojom::CanMakePaymentEventData;
 using ::payments::mojom::CanMakePaymentEventDataPtr;
-using ::payments::mojom::PaymentRequestEventData;
-using ::payments::mojom::PaymentRequestEventDataPtr;
-using ::payments::mojom::PaymentHandlerResponsePtr;
 using ::payments::mojom::PaymentCurrencyAmount;
 using ::payments::mojom::PaymentDetailsModifier;
 using ::payments::mojom::PaymentDetailsModifierPtr;
+using ::payments::mojom::PaymentHandlerResponsePtr;
 using ::payments::mojom::PaymentItem;
 using ::payments::mojom::PaymentMethodData;
+using ::payments::mojom::PaymentRequestEventData;
+using ::payments::mojom::PaymentRequestEventDataPtr;
 
 void GetAllPaymentAppsCallback(const base::Closure& done_callback,
                                PaymentAppProvider::PaymentApps* out_apps,
@@ -96,6 +96,10 @@
     ASSERT_EQ("registered", script_result);
   }
 
+  url::Origin GetTestServerOrigin() {
+    return url::Origin::Create(https_server_->GetURL("/"));
+  }
+
   std::vector<int64_t> GetAllPaymentAppRegistrationIDs() {
     base::RunLoop run_loop;
     PaymentAppProvider::PaymentApps apps;
@@ -113,11 +117,14 @@
     return registrationIds;
   }
 
-  bool AbortPayment(int64_t registration_id) {
+  bool AbortPayment(int64_t registration_id,
+                    const url::Origin& sw_origin,
+                    const std::string& payment_request_id) {
     base::RunLoop run_loop;
     bool payment_aborted = false;
     PaymentAppProvider::GetInstance()->AbortPayment(
         shell()->web_contents()->GetBrowserContext(), registration_id,
+        sw_origin, payment_request_id,
         base::BindOnce(&PaymentEventResultCallback, run_loop.QuitClosure(),
                        &payment_aborted));
     run_loop.Run();
@@ -126,6 +133,8 @@
   }
 
   bool CanMakePaymentWithTestData(int64_t registration_id,
+                                  const url::Origin& sw_origin,
+                                  const std::string& payment_request_id,
                                   const std::string& supported_method) {
     CanMakePaymentEventDataPtr event_data =
         CreateCanMakePaymentEventData(supported_method);
@@ -134,7 +143,7 @@
     bool can_make_payment = false;
     PaymentAppProvider::GetInstance()->CanMakePayment(
         shell()->web_contents()->GetBrowserContext(), registration_id,
-        std::move(event_data),
+        sw_origin, payment_request_id, std::move(event_data),
         base::BindOnce(&PaymentEventResultCallback, run_loop.QuitClosure(),
                        &can_make_payment));
     run_loop.Run();
@@ -144,12 +153,14 @@
 
   PaymentHandlerResponsePtr InvokePaymentAppWithTestData(
       int64_t registration_id,
+      const url::Origin& sw_origin,
       const std::string& supported_method,
       const std::string& instrument_key) {
     base::RunLoop run_loop;
     PaymentHandlerResponsePtr response;
     PaymentAppProvider::GetInstance()->InvokePaymentApp(
         shell()->web_contents()->GetBrowserContext(), registration_id,
+        sw_origin,
         CreatePaymentRequestEventData(supported_method, instrument_key),
         base::BindOnce(&InvokePaymentAppCallback, run_loop.QuitClosure(),
                        &response));
@@ -250,7 +261,8 @@
   ASSERT_EQ(1U, registrationIds.size());
 
   bool payment_aborted =
-      AbortPayment(blink::mojom::kInvalidServiceWorkerRegistrationId);
+      AbortPayment(blink::mojom::kInvalidServiceWorkerRegistrationId,
+                   GetTestServerOrigin(), "id");
   ASSERT_FALSE(payment_aborted);
 
   ClearStoragePartitionData();
@@ -268,7 +280,8 @@
   std::vector<int64_t> registrationIds = GetAllPaymentAppRegistrationIDs();
   ASSERT_EQ(1U, registrationIds.size());
 
-  bool payment_aborted = AbortPayment(registrationIds[0]);
+  bool payment_aborted =
+      AbortPayment(registrationIds[0], GetTestServerOrigin(), "id");
   ASSERT_TRUE(payment_aborted);
 
   ClearStoragePartitionData();
@@ -286,8 +299,8 @@
   std::vector<int64_t> registrationIds = GetAllPaymentAppRegistrationIDs();
   ASSERT_EQ(1U, registrationIds.size());
 
-  bool can_make_payment =
-      CanMakePaymentWithTestData(registrationIds[0], "basic-card");
+  bool can_make_payment = CanMakePaymentWithTestData(
+      registrationIds[0], GetTestServerOrigin(), "id", "basic-card");
   ASSERT_TRUE(can_make_payment);
 
   ClearStoragePartitionData();
@@ -322,8 +335,9 @@
   // Remove all payment apps and service workers to cause error.
   ClearStoragePartitionData();
 
-  PaymentHandlerResponsePtr response(InvokePaymentAppWithTestData(
-      registrationIds[0], "basic-card", "basic-card-payment-app-id"));
+  PaymentHandlerResponsePtr response(
+      InvokePaymentAppWithTestData(registrationIds[0], GetTestServerOrigin(),
+                                   "basic-card", "basic-card-payment-app-id"));
   ASSERT_EQ("", response->method_name);
 
   ClearStoragePartitionData();
@@ -341,8 +355,9 @@
   std::vector<int64_t> registrationIds = GetAllPaymentAppRegistrationIDs();
   ASSERT_EQ(1U, registrationIds.size());
 
-  PaymentHandlerResponsePtr response(InvokePaymentAppWithTestData(
-      registrationIds[0], "basic-card", "basic-card-payment-app-id"));
+  PaymentHandlerResponsePtr response(
+      InvokePaymentAppWithTestData(registrationIds[0], GetTestServerOrigin(),
+                                   "basic-card", "basic-card-payment-app-id"));
   ASSERT_EQ("test", response->method_name);
 
   ClearStoragePartitionData();
@@ -384,7 +399,8 @@
   ASSERT_EQ(1U, registrationIds.size());
 
   PaymentHandlerResponsePtr response(InvokePaymentAppWithTestData(
-      registrationIds[0], "https://bobpay.com", "bobpay-payment-app-id"));
+      registrationIds[0], GetTestServerOrigin(), "https://bobpay.com",
+      "bobpay-payment-app-id"));
   // InvokePaymentAppCallback returns empty method_name in case of failure, like
   // in PaymentRequestRespondWithObserver::OnResponseRejected.
   ASSERT_EQ("", response->method_name);
diff --git a/content/browser/payments/payment_app_provider_impl.cc b/content/browser/payments/payment_app_provider_impl.cc
index dbb172c..c2db98f 100644
--- a/content/browser/payments/payment_app_provider_impl.cc
+++ b/content/browser/payments/payment_app_provider_impl.cc
@@ -4,9 +4,14 @@
 
 #include "content/browser/payments/payment_app_provider_impl.h"
 
+#include <map>
+#include <string>
+#include <vector>
+
 #include "base/base64.h"
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
 #include "content/browser/payments/payment_app_context_impl.h"
@@ -18,6 +23,7 @@
 #include "content/common/service_worker/service_worker_utils.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/devtools_background_services_context.h"
 #include "content/public/browser/permission_controller.h"
 #include "content/public/browser/permission_type.h"
 #include "content/public/browser/render_frame_host.h"
@@ -400,7 +406,8 @@
                      registration_id, std::move(callback)));
 }
 
-void OnInstallPaymentApp(payments::mojom::PaymentRequestEventDataPtr event_data,
+void OnInstallPaymentApp(const url::Origin& sw_origin,
+                         payments::mojom::PaymentRequestEventDataPtr event_data,
                          PaymentAppProvider::InvokePaymentAppCallback callback,
                          BrowserContext* browser_context,
                          long registration_id) {
@@ -408,7 +415,7 @@
 
   if (registration_id >= 0 && browser_context != nullptr) {
     PaymentAppProvider::GetInstance()->InvokePaymentApp(
-        browser_context, registration_id, std::move(event_data),
+        browser_context, registration_id, sw_origin, std::move(event_data),
         std::move(callback));
   } else {
     std::move(callback).Run(payments::mojom::PaymentHandlerResponse::New(
@@ -450,6 +457,50 @@
     callback->AbortPaymentSinceOpennedWindowClosing(reason);
 }
 
+void AddMethodDataToMap(
+    const std::vector<payments::mojom::PaymentMethodDataPtr>& method_data,
+    std::map<std::string, std::string>* out) {
+  for (size_t i = 0; i < method_data.size(); ++i) {
+    std::string counter =
+        method_data.size() == 1 ? "" : " #" + base::NumberToString(i);
+    out->emplace("Method Name" + counter, method_data[i]->supported_method);
+    out->emplace("Method Data" + counter, method_data[i]->stringified_data);
+  }
+}
+
+void AddModifiersToMap(
+    const std::vector<payments::mojom::PaymentDetailsModifierPtr>& modifiers,
+    std::map<std::string, std::string>* out) {
+  for (size_t i = 0; i < modifiers.size(); ++i) {
+    std::string prefix =
+        "Modifier" +
+        (modifiers.size() == 1 ? "" : " #" + base::NumberToString(i));
+    out->emplace(prefix + " Method Name",
+                 modifiers[i]->method_data->supported_method);
+    out->emplace(prefix + " Method Data",
+                 modifiers[i]->method_data->stringified_data);
+    if (!modifiers[i]->total)
+      continue;
+    out->emplace(prefix + " Total Currency",
+                 modifiers[i]->total->amount->currency);
+    out->emplace(prefix + " Total Value", modifiers[i]->total->amount->value);
+  }
+}
+
+DevToolsBackgroundServicesContext* GetDevTools(BrowserContext* browser_context,
+                                               const url::Origin& sw_origin) {
+  auto* storage_partition = BrowserContext::GetStoragePartitionForSite(
+      browser_context, sw_origin.GetURL(), /*can_create=*/true);
+  if (!storage_partition)
+    return nullptr;
+
+  auto* dev_tools = storage_partition->GetDevToolsBackgroundServicesContext();
+  return dev_tools && dev_tools->IsRecording(
+                          DevToolsBackgroundService::kPaymentHandler)
+             ? dev_tools
+             : nullptr;
+}
+
 }  // namespace
 
 // static
@@ -483,10 +534,29 @@
 void PaymentAppProviderImpl::InvokePaymentApp(
     BrowserContext* browser_context,
     int64_t registration_id,
+    const url::Origin& sw_origin,
     payments::mojom::PaymentRequestEventDataPtr event_data,
     InvokePaymentAppCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  auto* dev_tools = GetDevTools(browser_context, sw_origin);
+  if (dev_tools) {
+    std::map<std::string, std::string> data = {
+        {"Merchant Top Origin", event_data->top_origin.spec()},
+        {"Merchant Payment Request Origin",
+         event_data->payment_request_origin.spec()},
+        {"Total Currency", event_data->total->currency},
+        {"Total Value", event_data->total->value},
+        {"Instrument Key", event_data->instrument_key},
+    };
+    AddMethodDataToMap(event_data->method_data, &data);
+    AddModifiersToMap(event_data->modifiers, &data);
+    dev_tools->LogBackgroundServiceEvent(
+        registration_id, sw_origin, DevToolsBackgroundService::kPaymentHandler,
+        "Payment request",
+        /*instance_id=*/event_data->payment_request_id, data);
+  }
+
   StartServiceWorkerForDispatch(
       browser_context, registration_id,
       base::BindOnce(&DispatchPaymentRequestEvent, browser_context,
@@ -533,17 +603,34 @@
   PaymentAppInstaller::Install(
       web_contents, app_name, string_encoded_icon, url, scope, sw_use_cache,
       method,
-      base::BindOnce(&OnInstallPaymentApp, std::move(event_data),
-                     std::move(callback)));
+      base::BindOnce(&OnInstallPaymentApp, url::Origin::Create(scope),
+                     std::move(event_data), std::move(callback)));
 }
 
 void PaymentAppProviderImpl::CanMakePayment(
     BrowserContext* browser_context,
     int64_t registration_id,
+    const url::Origin& sw_origin,
+    const std::string& payment_request_id,
     payments::mojom::CanMakePaymentEventDataPtr event_data,
     PaymentEventResultCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  auto* dev_tools = GetDevTools(browser_context, sw_origin);
+  if (dev_tools) {
+    std::map<std::string, std::string> data = {
+        {"Merchant Top Origin", event_data->top_origin.spec()},
+        {"Merchant Payment Request Origin",
+         event_data->payment_request_origin.spec()},
+    };
+    AddMethodDataToMap(event_data->method_data, &data);
+    AddModifiersToMap(event_data->modifiers, &data);
+    dev_tools->LogBackgroundServiceEvent(
+        registration_id, sw_origin, DevToolsBackgroundService::kPaymentHandler,
+        "Can make payment",
+        /*instance_id=*/payment_request_id, data);
+  }
+
   StartServiceWorkerForDispatch(
       browser_context, registration_id,
       base::BindOnce(&DispatchCanMakePaymentEvent, browser_context,
@@ -552,9 +639,19 @@
 
 void PaymentAppProviderImpl::AbortPayment(BrowserContext* browser_context,
                                           int64_t registration_id,
+                                          const url::Origin& sw_origin,
+                                          const std::string& payment_request_id,
                                           PaymentEventResultCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  auto* dev_tools = GetDevTools(browser_context, sw_origin);
+  if (dev_tools) {
+    dev_tools->LogBackgroundServiceEvent(
+        registration_id, sw_origin, DevToolsBackgroundService::kPaymentHandler,
+        "Abort payment",
+        /*instance_id=*/payment_request_id, {});
+  }
+
   StartServiceWorkerForDispatch(
       browser_context, registration_id,
       base::BindOnce(&DispatchAbortPaymentEvent, browser_context,
diff --git a/content/browser/payments/payment_app_provider_impl.h b/content/browser/payments/payment_app_provider_impl.h
index 9908948..b9ce1222 100644
--- a/content/browser/payments/payment_app_provider_impl.h
+++ b/content/browser/payments/payment_app_provider_impl.h
@@ -23,6 +23,7 @@
                          GetAllPaymentAppsCallback callback) override;
   void InvokePaymentApp(BrowserContext* browser_context,
                         int64_t registration_id,
+                        const url::Origin& sw_origin,
                         payments::mojom::PaymentRequestEventDataPtr event_data,
                         InvokePaymentAppCallback callback) override;
   void InstallAndInvokePaymentApp(
@@ -37,10 +38,14 @@
       InvokePaymentAppCallback callback) override;
   void CanMakePayment(BrowserContext* browser_context,
                       int64_t registration_id,
+                      const url::Origin& sw_origin,
+                      const std::string& payment_request_id,
                       payments::mojom::CanMakePaymentEventDataPtr event_data,
                       PaymentEventResultCallback callback) override;
   void AbortPayment(BrowserContext* browser_context,
                     int64_t registration_id,
+                    const url::Origin& sw_origin,
+                    const std::string& payment_request_id,
                     PaymentEventResultCallback callback) override;
   void SetOpenedWindow(WebContents* web_contents) override;
   void CloseOpenedWindow(BrowserContext* browser_context) override;
diff --git a/content/browser/payments/payment_app_provider_impl_unittest.cc b/content/browser/payments/payment_app_provider_impl_unittest.cc
index 8b46f9b6..54f1c82 100644
--- a/content/browser/payments/payment_app_provider_impl_unittest.cc
+++ b/content/browser/payments/payment_app_provider_impl_unittest.cc
@@ -89,26 +89,32 @@
   }
 
   void InvokePaymentApp(int64_t registration_id,
+                        const url::Origin& sw_origin,
                         payments::mojom::PaymentRequestEventDataPtr event_data,
                         PaymentAppProvider::InvokePaymentAppCallback callback) {
     PaymentAppProviderImpl::GetInstance()->InvokePaymentApp(
-        browser_context(), registration_id, std::move(event_data),
+        browser_context(), registration_id, sw_origin, std::move(event_data),
         std::move(callback));
     base::RunLoop().RunUntilIdle();
   }
 
   void CanMakePayment(int64_t registration_id,
+                      const url::Origin& sw_origin,
+                      const std::string& payment_request_id,
                       payments::mojom::CanMakePaymentEventDataPtr event_data,
                       PaymentAppProvider::PaymentEventResultCallback callback) {
     PaymentAppProviderImpl::GetInstance()->CanMakePayment(
-        browser_context(), registration_id, std::move(event_data),
-        std::move(callback));
+        browser_context(), registration_id, sw_origin, payment_request_id,
+        std::move(event_data), std::move(callback));
   }
 
   void AbortPayment(int64_t registration_id,
+                    const url::Origin& sw_origin,
+                    const std::string& payment_request_id,
                     PaymentAppProvider::PaymentEventResultCallback callback) {
     PaymentAppProviderImpl::GetInstance()->AbortPayment(
-        browser_context(), registration_id, std::move(callback));
+        browser_context(), registration_id, sw_origin, payment_request_id,
+        std::move(callback));
   }
 
   void OnClosingOpenedWindow() {
@@ -137,7 +143,8 @@
 
   bool payment_aborted = false;
   base::RunLoop loop;
-  AbortPayment(last_sw_registration_id(),
+  AbortPayment(last_sw_registration_id(), url::Origin::Create(apps[0]->scope),
+               "id",
                base::BindOnce(&PaymentEventResultCallback, loop.QuitClosure(),
                               &payment_aborted));
   loop.Run();
@@ -166,7 +173,9 @@
 
   bool can_make_payment = false;
   base::RunLoop loop;
-  CanMakePayment(last_sw_registration_id(), std::move(event_data),
+  CanMakePayment(last_sw_registration_id(),
+                 url::Origin::Create(GURL("https://example.com")), "id",
+                 std::move(event_data),
                  base::BindOnce(&PaymentEventResultCallback, loop.QuitClosure(),
                                 &can_make_payment));
   loop.Run();
@@ -203,7 +212,9 @@
   event_data->total = payments::mojom::PaymentCurrencyAmount::New();
 
   bool called = false;
-  InvokePaymentApp(bobpay_registration_id, std::move(event_data),
+  InvokePaymentApp(bobpay_registration_id,
+                   url::Origin::Create(GURL("https://bobpay.com")),
+                   std::move(event_data),
                    base::BindOnce(&InvokePaymentAppCallback, &called));
   ASSERT_TRUE(called);
 }
@@ -306,7 +317,9 @@
   SetNoPaymentRequestResponseImmediately();
 
   bool called = false;
-  InvokePaymentApp(bobpay_registration_id, std::move(event_data),
+  InvokePaymentApp(bobpay_registration_id,
+                   url::Origin::Create(GURL("https://bobpay.com")),
+                   std::move(event_data),
                    base::BindOnce(&InvokePaymentAppCallback, &called));
   ASSERT_FALSE(called);
 
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
index 1a6f5be..c35f8e9 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -183,6 +183,14 @@
     hr = ::CreateStdAccessibleObject(hwnd(), OBJID_WINDOW,
                                      IID_PPV_ARGS(&window_accessible_));
   } else {
+    // The usual way for UI Automation to obtain a fragment root is through
+    // WM_GETOBJECT. However, if there's a relation such as "Controller For"
+    // between element A in one window and element B in another window, UIA
+    // might call element A to discover the relation, receive a pointer to
+    // element B, then ask element B for its fragment root, without having sent
+    // WM_GETOBJECT to element B's window. So we create the fragment root now to
+    // ensure it's ready if asked for.
+    ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(hwnd(), this);
     hr = S_OK;
   }
 
@@ -255,10 +263,6 @@
       BrowserAccessibilityStateImpl::GetInstance()->EnableAccessibility();
     }
 
-    gfx::NativeViewAccessible root = GetOrCreateWindowRootAccessible();
-    if (root == nullptr)
-      return static_cast<LRESULT>(0L);
-
     if (is_uia_request) {
       Microsoft::WRL::ComPtr<IRawElementProviderSimple> root_uia;
       ax_fragment_root_->GetNativeViewAccessible()->QueryInterface(
@@ -266,6 +270,10 @@
       return UiaReturnRawElementProvider(hwnd(), w_param, l_param,
                                          root_uia.Get());
     } else {
+      gfx::NativeViewAccessible root = GetOrCreateBrowserAccessibilityRoot();
+      if (root == nullptr)
+        return static_cast<LRESULT>(0L);
+
       Microsoft::WRL::ComPtr<IAccessible> root_msaa(root);
       return LresultFromObject(IID_IAccessible, w_param, root_msaa.Get());
     }
@@ -563,7 +571,28 @@
 }
 
 gfx::NativeViewAccessible
+LegacyRenderWidgetHostHWND::GetChildOfAXFragmentRoot() {
+  return GetOrCreateBrowserAccessibilityRoot();
+}
+
+gfx::NativeViewAccessible
+LegacyRenderWidgetHostHWND::GetParentOfAXFragmentRoot() {
+  if (host_)
+    return host_->GetParentNativeViewAccessible();
+  return nullptr;
+}
+
+gfx::NativeViewAccessible
 LegacyRenderWidgetHostHWND::GetOrCreateWindowRootAccessible() {
+  if (::switches::IsExperimentalAccessibilityPlatformUIAEnabled()) {
+    return ax_fragment_root_->GetNativeViewAccessible();
+  }
+
+  return GetOrCreateBrowserAccessibilityRoot();
+}
+
+gfx::NativeViewAccessible
+LegacyRenderWidgetHostHWND::GetOrCreateBrowserAccessibilityRoot() {
   if (!host_)
     return nullptr;
 
@@ -578,19 +607,7 @@
   if (!manager || !manager->GetRoot())
     return nullptr;
 
-  BrowserAccessibilityComWin* root =
-      ToBrowserAccessibilityWin(manager->GetRoot())->GetCOM();
-
-  if (::switches::IsExperimentalAccessibilityPlatformUIAEnabled()) {
-    if (!ax_fragment_root_) {
-      ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(hwnd(), root);
-      ax_fragment_root_->SetParent(host_->GetParentNativeViewAccessible());
-    }
-
-    return ax_fragment_root_->GetNativeViewAccessible();
-  }
-
-  return root->GetNativeViewAccessible();
+  return manager->GetRoot()->GetNativeViewAccessible();
 }
 
 void LegacyRenderWidgetHostHWND::CreateAnimationObserver() {
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.h b/content/browser/renderer_host/legacy_render_widget_host_win.h
index 4f12296..309320eb 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.h
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.h
@@ -17,6 +17,7 @@
 
 #include "base/macros.h"
 #include "content/common/content_export.h"
+#include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/compositor/compositor_animation_observer.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/native_widget_types.h"
@@ -59,7 +60,8 @@
 class CONTENT_EXPORT LegacyRenderWidgetHostHWND
     : public ATL::CWindowImpl<LegacyRenderWidgetHostHWND,
                               ATL::CWindow,
-                              ATL::CWinTraits<WS_CHILD>> {
+                              ATL::CWinTraits<WS_CHILD>>,
+      public ui::AXFragmentRootDelegateWin {
  public:
   DECLARE_WND_CLASS_EX(L"Chrome_RenderWidgetHostHWND", CS_DBLCLKS, 0)
 
@@ -171,6 +173,12 @@
 
   LRESULT OnPointerHitTest(UINT message, WPARAM w_param, LPARAM l_param);
 
+  // Overridden from AXFragmentRootDelegateWin.
+  gfx::NativeViewAccessible GetChildOfAXFragmentRoot() override;
+  gfx::NativeViewAccessible GetParentOfAXFragmentRoot() override;
+
+  gfx::NativeViewAccessible GetOrCreateBrowserAccessibilityRoot();
+
   void CreateAnimationObserver();
 
   void DestroyAnimationObserver();
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index ca75851..6e77eaf 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -5598,11 +5598,11 @@
   EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
 }
 
-// Test for https://crbug.com/515302.  Perform two navigations, A->B->A, and
-// drop the SwapOut ACK from the A->B navigation, so that the second B->A
-// navigation is initiated before the first page receives the SwapOut ACK.
-// Ensure that this doesn't crash and that the RVH(A) is not reused in that
-// case.
+// Test for https://crbug.com/515302. Perform two navigations, A1 -> B2 -> A3,
+// and drop the SwapOut ACK from the A1 -> B2 navigation, so that the second
+// B2 -> A3 navigation is initiated before the first page receives the SwapOut
+// ACK. Ensure that this doesn't crash and that the RVH(A1) is not reused in
+// that case.
 #if defined(OS_MACOSX)
 #define MAYBE_RenderViewHostIsNotReusedAfterDelayedSwapOutACK \
   DISABLED_RenderViewHostIsNotReusedAfterDelayedSwapOutACK
@@ -5662,7 +5662,14 @@
                            ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK));
   RenderViewHostImpl* pending_rvh =
       root->render_manager()->speculative_frame_host()->render_view_host();
-  EXPECT_EQ(site_instance, pending_rvh->GetSiteInstance());
+
+  // When ProactivelySwapBrowsingInstance A1 and A3 aren't using the same
+  // BrowsingInstance.
+  if (IsProactivelySwapBrowsingInstanceEnabled())
+    EXPECT_NE(site_instance, pending_rvh->GetSiteInstance());
+  else
+    EXPECT_EQ(site_instance, pending_rvh->GetSiteInstance());
+
   EXPECT_FALSE(rvh_routing_id == pending_rvh->GetRoutingID() &&
                rvh_process_id == pending_rvh->GetProcess()->GetID());
 
@@ -7420,6 +7427,14 @@
   FrameTreeNode* root = contents->GetFrameTree()->root();
   EXPECT_EQ(1U, root->child_count());
 
+  // The test expect the BrowsingInstance to be kept across cross-site main
+  // frame navigations. ProactivelySwapBrowsingInstance will provide a new one.
+  // To prevent this, a popup is opened.
+  if (IsProactivelySwapBrowsingInstanceEnabled()) {
+    GURL popup_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
+    EXPECT_TRUE(OpenPopup(root, popup_url, "foo"));
+  }
+
   // Ensure the RenderViewHost for the SiteInstance of the child is considered
   // in swapped out state.
   RenderViewHostImpl* rvh = contents->GetFrameTree()->GetRenderViewHost(
@@ -10071,24 +10086,30 @@
   RenderFrameHostImpl* root_speculative_rfh =
       root->render_manager()->speculative_frame_host();
   EXPECT_TRUE(root_speculative_rfh);
-  scoped_refptr<SiteInstanceImpl> b_site_instance(
+  scoped_refptr<SiteInstanceImpl> b_root_site_instance(
       root_speculative_rfh->GetSiteInstance());
 
   // There should now be a live b.com proxy for the root, since it is doing a
   // cross-process navigation.
   RenderFrameProxyHost* root_proxy =
-      root->render_manager()->GetRenderFrameProxyHost(b_site_instance.get());
+      root->render_manager()->GetRenderFrameProxyHost(
+          b_root_site_instance.get());
   EXPECT_TRUE(root_proxy);
   EXPECT_TRUE(root_proxy->is_render_frame_proxy_live());
 
   // Wait for subframe request, but don't commit it yet.
   ASSERT_TRUE(manager2.WaitForRequestStart());
+  RenderFrameHostImpl* subframe_speculative_rfh =
+      child->render_manager()->speculative_frame_host();
   EXPECT_TRUE(child->render_manager()->speculative_frame_host());
+  scoped_refptr<SiteInstanceImpl> b_subframe_site_instance(
+      subframe_speculative_rfh->GetSiteInstance());
 
   // Similarly, the subframe should also have a b.com proxy (unused in this
   // test), since it is also doing a cross-process navigation.
   RenderFrameProxyHost* child_proxy =
-      child->render_manager()->GetRenderFrameProxyHost(b_site_instance.get());
+      child->render_manager()->GetRenderFrameProxyHost(
+          b_subframe_site_instance.get());
   EXPECT_TRUE(child_proxy);
   EXPECT_TRUE(child_proxy->is_render_frame_proxy_live());
 
@@ -10096,7 +10117,7 @@
   manager1.WaitForNavigationFinished();
 
   // Make sure the process is live and at the new URL.
-  EXPECT_TRUE(b_site_instance->GetProcess()->IsInitializedAndNotDead());
+  EXPECT_TRUE(b_root_site_instance->GetProcess()->IsInitializedAndNotDead());
   EXPECT_TRUE(root->current_frame_host()->IsRenderFrameLive());
   EXPECT_EQ(root_speculative_rfh, root->current_frame_host());
   EXPECT_EQ(new_url_1, root->current_frame_host()->GetLastCommittedURL());
@@ -10113,8 +10134,8 @@
   EXPECT_EQ(0, length);
 
   // The root proxy should be gone.
-  EXPECT_FALSE(
-      root->render_manager()->GetRenderFrameProxyHost(b_site_instance.get()));
+  EXPECT_FALSE(root->render_manager()->GetRenderFrameProxyHost(
+      b_subframe_site_instance.get()));
 }
 
 // Similar to TwoCrossSitePendingNavigationsAndMainFrameWins, but checks the
@@ -10173,16 +10194,30 @@
   scoped_refptr<SiteInstanceImpl> b_site_instance(
       child_speculative_rfh->GetSiteInstance());
 
-  // Check that all frames have proxies for b.com at this point.  The proxy for
+  // Check that all frames have proxies for b.com at this point. The proxy for
   // |child2| is important to create since |child| has to use it to communicate
   // with |child2| if |child| commits first.
-  EXPECT_EQ(
-      " Site A (B speculative) -- proxies for B\n"
-      "   |--Site A (B speculative) -- proxies for B\n"
-      "   +--Site A ------- proxies for B\n"
-      "Where A = http://a.com/\n"
-      "      B = http://b.com/",
-      DepictFrameTree(root));
+  if (IsProactivelySwapBrowsingInstanceEnabled()) {
+    // With ProactivelySwapBrowsingInstance, the new main document and the new
+    // iframe don't have the same SiteInstance, because they belong to two
+    // unrelated pages. The two page use different BrowsingInstances.
+    EXPECT_EQ(
+        " Site A (B speculative) -- proxies for B C\n"
+        "   |--Site A (C speculative) -- proxies for C\n"
+        "   +--Site A ------- proxies for C\n"
+        "Where A = http://a.com/\n"
+        "      B = http://b.com/\n"
+        "      C = http://b.com/",
+        DepictFrameTree(root));
+  } else {
+    EXPECT_EQ(
+        " Site A (B speculative) -- proxies for B\n"
+        "   |--Site A (B speculative) -- proxies for B\n"
+        "   +--Site A ------- proxies for B\n"
+        "Where A = http://a.com/\n"
+        "      B = http://b.com/",
+        DepictFrameTree(root));
+  }
 
   // Now let the subframe commit.
   manager2.WaitForNavigationFinished();
@@ -10195,13 +10230,24 @@
   EXPECT_EQ(new_url_2, child->current_frame_host()->GetLastCommittedURL());
 
   // Recheck the proxies.  Main frame should still be pending.
-  EXPECT_EQ(
-      " Site A (B speculative) -- proxies for B\n"
-      "   |--Site B ------- proxies for A\n"
-      "   +--Site A ------- proxies for B\n"
-      "Where A = http://a.com/\n"
-      "      B = http://b.com/",
-      DepictFrameTree(root));
+  if (IsProactivelySwapBrowsingInstanceEnabled()) {
+    EXPECT_EQ(
+        " Site A (B speculative) -- proxies for B C\n"
+        "   |--Site C ------- proxies for A\n"
+        "   +--Site A ------- proxies for C\n"
+        "Where A = http://a.com/\n"
+        "      B = http://b.com/\n"
+        "      C = http://b.com/",
+        DepictFrameTree(root));
+  } else {
+    EXPECT_EQ(
+        " Site A (B speculative) -- proxies for B\n"
+        "   |--Site B ------- proxies for A\n"
+        "   +--Site A ------- proxies for B\n"
+        "Where A = http://a.com/\n"
+        "      B = http://b.com/",
+        DepictFrameTree(root));
+  }
 
   // Make sure the subframe can communicate to both the root remote frame
   // (where the postMessage should go to the current RenderFrameHost rather
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 7954f085..6e66a32c 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <stdint.h>
+
 #include <utility>
 
 #include "base/bind.h"
@@ -44,6 +45,7 @@
 #include "content/public/common/bindings_policy.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_features.h"
+#include "content/public/common/navigation_policy.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/test/mock_render_process_host.h"
 #include "content/public/test/navigation_simulator.h"
@@ -891,8 +893,10 @@
 TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) {
   // The assumptions this test makes aren't valid with --site-per-process.  For
   // example, a cross-site URL won't ever commit in the old RFH.
-  if (AreAllSitesIsolatedForTesting())
+  if (AreAllSitesIsolatedForTesting() ||
+      IsProactivelySwapBrowsingInstanceEnabled()) {
     return;
+  }
 
   TestRenderFrameHost* orig_rfh = main_test_rfh();
   SiteInstance* instance1 = contents()->GetSiteInstance();
@@ -2879,6 +2883,13 @@
 
   // Navigate to a URL which sort of looks like a chrome:// url.
   contents->NavigateAndCommit(GURL("http://gpu"));
+  if (IsProactivelySwapBrowsingInstanceEnabled()) {
+    // The navigation from "a.com" to "gpu" is using a new BrowsingInstance.
+    EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+    // The rest of the test expects |instance| to match the one in the main
+    // frame.
+    instance = contents->GetMainFrame()->GetSiteInstance();
+  }
   EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
 
   // Navigate to a URL with WebUI. This will change BrowsingInstances.
diff --git a/content/public/browser/devtools_background_services_context.h b/content/public/browser/devtools_background_services_context.h
index bc479aa..c84b1a01 100644
--- a/content/public/browser/devtools_background_services_context.h
+++ b/content/public/browser/devtools_background_services_context.h
@@ -23,9 +23,10 @@
   kBackgroundSync = 3,
   kPushMessaging = 4,
   kNotifications = 5,
+  kPaymentHandler = 6,
 
   // Keep at the end.
-  kMaxValue = kNotifications,
+  kMaxValue = kPaymentHandler,
 };
 
 // This class is responsible for persisting the debugging events for the
diff --git a/content/public/browser/payment_app_provider.h b/content/public/browser/payment_app_provider.h
index 34546bba..99cbd894 100644
--- a/content/public/browser/payment_app_provider.h
+++ b/content/public/browser/payment_app_provider.h
@@ -17,6 +17,10 @@
 
 class SkBitmap;
 
+namespace url {
+class Origin;
+}  // namespace url
+
 namespace content {
 
 class BrowserContext;
@@ -47,6 +51,7 @@
   virtual void InvokePaymentApp(
       BrowserContext* browser_context,
       int64_t registration_id,
+      const url::Origin& sw_origin,
       payments::mojom::PaymentRequestEventDataPtr event_data,
       InvokePaymentAppCallback callback) = 0;
   virtual void InstallAndInvokePaymentApp(
@@ -62,10 +67,14 @@
   virtual void CanMakePayment(
       BrowserContext* browser_context,
       int64_t registration_id,
+      const url::Origin& sw_origin,
+      const std::string& payment_request_id,
       payments::mojom::CanMakePaymentEventDataPtr event_data,
       PaymentEventResultCallback callback) = 0;
   virtual void AbortPayment(BrowserContext* browser_context,
                             int64_t registration_id,
+                            const url::Origin& sw_origin,
+                            const std::string& payment_request_id,
                             PaymentEventResultCallback callback) = 0;
 
   // Set opened window for payment handler. Note that we maintain at most one
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 813136ca..cf1dce0 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -388,6 +388,15 @@
 const base::Feature kPrioritizeBootstrapTasks = {
     "PrioritizeBootstrapTasks", base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enable the ProactivelySwapBrowsingInstance experiment. A browsing instance
+// represents a set of frames that can script each other. Currently, Chrome does
+// not always switch BrowsingInstance when navigating in between two unrelated
+// pages. This experiment makes Chrome swap BrowsingInstances for cross-site
+// HTTP(S) navigations when the BrowsingInstance doesn't contain any other
+// windows.
+const base::Feature kProactivelySwapBrowsingInstance{
+    "kProactivelySwapBrowsingInstance", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enable raster-inducing scroll.
 const base::Feature kRasterInducingScroll{"RasterInducingScroll",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 7b7ceb56..33916be 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -88,6 +88,7 @@
 CONTENT_EXPORT extern const base::Feature kPerNavigationMojoInterface;
 CONTENT_EXPORT extern const base::Feature kPepper3DImageChromium;
 CONTENT_EXPORT extern const base::Feature kPrioritizeBootstrapTasks;
+CONTENT_EXPORT extern const base::Feature kProactivelySwapBrowsingInstance;
 CONTENT_EXPORT extern const base::Feature
     kProcessSharingWithStrictSiteInstances;
 CONTENT_EXPORT extern const base::Feature kRasterInducingScroll;
diff --git a/content/public/common/navigation_policy.cc b/content/public/common/navigation_policy.cc
index fea606b..f437f0a 100644
--- a/content/public/common/navigation_policy.cc
+++ b/content/public/common/navigation_policy.cc
@@ -34,6 +34,12 @@
   return base::FeatureList::IsEnabled(features::kBackForwardCache);
 }
 
+bool IsProactivelySwapBrowsingInstanceEnabled() {
+  return base::FeatureList::IsEnabled(
+             features::kProactivelySwapBrowsingInstance) ||
+         IsBackForwardCacheEnabled();
+}
+
 bool IsNavigationImmediateResponseBodyEnabled() {
   return base::FeatureList::IsEnabled(
       features::kNavigationImmediateResponseBody);
diff --git a/content/public/common/navigation_policy.h b/content/public/common/navigation_policy.h
index c71de34a..e7e3954 100644
--- a/content/public/common/navigation_policy.h
+++ b/content/public/common/navigation_policy.h
@@ -17,6 +17,7 @@
 
 CONTENT_EXPORT bool IsPerNavigationMojoInterfaceEnabled();
 CONTENT_EXPORT bool IsBackForwardCacheEnabled();
+CONTENT_EXPORT bool IsProactivelySwapBrowsingInstanceEnabled();
 CONTENT_EXPORT bool IsNavigationImmediateResponseBodyEnabled();
 
 // Navigation type that affects the download decision and relevant metrics to be
diff --git a/content/renderer/media/android/flinging_renderer_client.cc b/content/renderer/media/android/flinging_renderer_client.cc
index d2a017a0..c40ae7b 100644
--- a/content/renderer/media/android/flinging_renderer_client.cc
+++ b/content/renderer/media/android/flinging_renderer_client.cc
@@ -14,9 +14,11 @@
 FlingingRendererClient::FlingingRendererClient(
     ClientExtentionRequest client_extension_request,
     scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
-    std::unique_ptr<media::MojoRenderer> mojo_renderer)
+    std::unique_ptr<media::MojoRenderer> mojo_renderer,
+    media::RemotePlayStateChangeCB remote_play_state_change_cb)
     : MojoRendererWrapper(std::move(mojo_renderer)),
       media_task_runner_(std::move(media_task_runner)),
+      remote_play_state_change_cb_(remote_play_state_change_cb),
       delayed_bind_client_extension_request_(
           std::move(client_extension_request)),
       client_extension_binding_(this) {}
@@ -40,7 +42,7 @@
 void FlingingRendererClient::OnRemotePlayStateChange(
     media::MediaStatus::State state) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
-  client_->OnRemotePlayStateChange(state);
+  remote_play_state_change_cb_.Run(state);
 }
 
 }  // namespace content
diff --git a/content/renderer/media/android/flinging_renderer_client.h b/content/renderer/media/android/flinging_renderer_client.h
index fc63f2bc..b9948ac 100644
--- a/content/renderer/media/android/flinging_renderer_client.h
+++ b/content/renderer/media/android/flinging_renderer_client.h
@@ -35,7 +35,8 @@
   FlingingRendererClient(
       ClientExtentionRequest client_extension_request,
       scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
-      std::unique_ptr<media::MojoRenderer> mojo_renderer);
+      std::unique_ptr<media::MojoRenderer> mojo_renderer,
+      media::RemotePlayStateChangeCB remote_play_state_change_cb);
 
   ~FlingingRendererClient() override;
 
@@ -52,6 +53,8 @@
 
   media::RendererClient* client_;
 
+  media::RemotePlayStateChangeCB remote_play_state_change_cb_;
+
   // Used temporarily, to delay binding to |client_extension_binding_| until we
   // are on the right sequence, when Initialize() is called.
   ClientExtentionRequest delayed_bind_client_extension_request_;
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.cc b/content/renderer/media/android/flinging_renderer_client_factory.cc
index 97b9a30..0180aaf 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.cc
+++ b/content/renderer/media/android/flinging_renderer_client_factory.cc
@@ -32,6 +32,7 @@
     const media::RequestOverlayInfoCB& /* request_overlay_info_cb */,
     const gfx::ColorSpace& /* target_color_space */) {
   DCHECK(IsFlingingActive());
+  DCHECK(remote_play_state_change_cb_);
 
   // Used to send messages from the FlingingRenderer (Browser process),
   // to the FlingingRendererClient (Renderer process). The
@@ -45,7 +46,12 @@
 
   return std::make_unique<FlingingRendererClient>(
       std::move(client_extension_request), media_task_runner,
-      std::move(mojo_renderer));
+      std::move(mojo_renderer), remote_play_state_change_cb_);
+}
+
+void FlingingRendererClientFactory::SetRemotePlayStateChangeCB(
+    media::RemotePlayStateChangeCB callback) {
+  remote_play_state_change_cb_ = std::move(callback);
 }
 
 std::string FlingingRendererClientFactory::GetActivePresentationId() {
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.h b/content/renderer/media/android/flinging_renderer_client_factory.h
index 91263172..344d234 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.h
+++ b/content/renderer/media/android/flinging_renderer_client_factory.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "content/common/content_export.h"
+#include "media/base/media_status.h"
 #include "media/base/renderer_factory.h"
 #include "media/renderers/remote_playback_client_wrapper.h"
 
@@ -30,6 +31,11 @@
           remote_playback_client);
   ~FlingingRendererClientFactory() override;
 
+  // Sets a callback that renderers created by |this| will use to propagate
+  // Play/Pause state changes on remote devices.
+  // NOTE: This must be called before CreateRenderer().
+  void SetRemotePlayStateChangeCB(media::RemotePlayStateChangeCB callback);
+
   std::unique_ptr<media::Renderer> CreateRenderer(
       const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
       const scoped_refptr<base::TaskRunner>& worker_task_runner,
@@ -49,6 +55,8 @@
   std::unique_ptr<media::MojoRendererFactory> mojo_flinging_factory_;
   std::unique_ptr<media::RemotePlaybackClientWrapper> remote_playback_client_;
 
+  media::RemotePlayStateChangeCB remote_play_state_change_cb_;
+
   DISALLOW_COPY_AND_ASSIGN(FlingingRendererClientFactory);
 };
 
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
index fd14cecd..4059a7c 100644
--- a/content/renderer/media/media_factory.cc
+++ b/content/renderer/media/media_factory.cc
@@ -442,17 +442,22 @@
   factory_selector->SetUseMediaPlayer(use_media_player);
 
   // FlingingRendererClientFactory (FRCF) setup.
-  auto mojo_flinging_factory = std::make_unique<media::MojoRendererFactory>(
-      GetMediaInterfaceFactory());
+  auto mojo_flinging_factory =
+      std::make_unique<media::MojoRendererFactory>(GetMediaInterfaceFactory());
 
   auto flinging_factory = std::make_unique<FlingingRendererClientFactory>(
       std::move(mojo_flinging_factory), std::move(client_wrapper));
 
-  // base::Unretained is safe here because |factory_selector| owns
-  // |flinging_factory|.
+  // base::Unretained() is safe here because |factory_selector| owns and
+  // outlives |flinging_factory|.
+  factory_selector->StartRequestRemotePlayStateCB(
+      base::BindOnce(&FlingingRendererClientFactory::SetRemotePlayStateChangeCB,
+                     base::Unretained(flinging_factory.get())));
+
+  // base::Unretained() is also safe here, for the same reasons.
   factory_selector->SetQueryIsFlingingActiveCB(
-      base::Bind(&FlingingRendererClientFactory::IsFlingingActive,
-                 base::Unretained(flinging_factory.get())));
+      base::BindRepeating(&FlingingRendererClientFactory::IsFlingingActive,
+                          base::Unretained(flinging_factory.get())));
 
   factory_selector->AddFactory(
       media::RendererFactorySelector::FactoryType::FLINGING,
diff --git a/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt b/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt
new file mode 100644
index 0000000..84ef2af
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt
@@ -0,0 +1,84 @@
+rootWebArea
+++genericContainer
+++++alert
+++++alertDialog
+++++application expanded
+++++article
+++++banner
+++++blockquote
+++++button expanded
+++++caption
+++++cell expanded
+++++checkBox expanded
+++++columnHeader expanded
+++++comboBoxGrouping expanded
+++++complementary
+++++contentInfo
+++++definition
+++++contentDeletion
+++++dialog
+++++list
+++++document
+++++genericContainer
+++++feed
+++++figure
+++++form
+++++grid
+++++cell expanded
+++++group
+++++heading
+++++image
+++++contentInsertion
+++++genericContainer
+++++genericContainer
+++++link expanded
+++++list
+++++listBox expanded
+++++listItem
+++++log
+++++main
+++++marquee
+++++math
+++++menu
+++++menuBar
+++++menuItem expanded
+++++menuItemCheckBox expanded
+++++menuItemRadio expanded
+++++meter
+++++navigation
+++++none
+++++note
+++++listBoxOption
+++++paragraph
+++++presentational
+++++progressIndicator
+++++radioButton
+++++radioGroup
+++++region
+++++row expanded
+++++rowHeader expanded
+++++scrollBar
+++++search
+++++searchBox
+++++splitter
+++++splitter
+++++slider
+++++spinButton
+++++status
+++++genericContainer
+++++genericContainer
+++++genericContainer
+++++switch expanded
+++++tab expanded
+++++table
+++++tabList
+++++tabPanel
+++++term
+++++textField
+++++genericContainer
+++++timer
+++++toolbar
+++++tooltip
+++++tree
+++++treeGrid
+++++treeItem expanded
diff --git a/content/test/data/accessibility/aria/aria-expanded-roles-supported.html b/content/test/data/accessibility/aria/aria-expanded-roles-supported.html
new file mode 100644
index 0000000..b84c83d
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-expanded-roles-supported.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+@BLINK-ALLOW:collapsed*
+@BLINK-ALLOW:expanded*
+@BLINK-DENY:horizontal*
+@BLINK-DENY:selected*
+@BLINK-DENY:checked*
+@BLINK-DENY:ignored*
+@BLINK-DENY:*Level*
+@BLINK-DENY:*Range*
+-->
+<html>
+<body>
+<div role="alert" aria-expanded="true"></div>
+<div role="alertdialog" aria-expanded="true"></div>
+<div role="application" aria-expanded="true"></div>
+<div role="article" aria-expanded="true"></div>
+<div role="banner" aria-expanded="true"></div>
+<div role="blockquote" aria-expanded="true"></div>
+<div role="button" aria-expanded="true"></div>
+<div role="caption" aria-expanded="true"></div>
+<div role="cell" aria-expanded="true"></div>
+<div role="checkbox" aria-expanded="true"></div>
+<div role="columnheader" aria-expanded="true"></div>
+<div role="combobox" aria-expanded="true"></div>
+<div role="complementary" aria-expanded="true"></div>
+<div role="contentinfo" aria-expanded="true"></div>
+<div role="definition" aria-expanded="true"></div>
+<div role="deletion" aria-expanded="true"></div>
+<div role="dialog" aria-expanded="true"></div>
+<div role="directory" aria-expanded="true"></div>
+<div role="document" aria-expanded="true"></div>
+<div role="emphasis" aria-expanded="true"></div>
+<div role="feed" aria-expanded="true"></div>
+<div role="figure" aria-expanded="true"></div>
+<div role="form" aria-expanded="true"></div>
+<div role="grid" aria-expanded="true"></div>
+<div role="gridcell" aria-expanded="true"></div>
+<div role="group" aria-expanded="true"></div>
+<div role="heading" aria-expanded="true"></div>
+<div role="img" aria-expanded="true"></div>
+<div role="insertion" aria-expanded="true"></div>
+<div role="label" aria-expanded="true"></div>
+<div role="legend" aria-expanded="true"></div>
+<div role="link" aria-expanded="true"></div>
+<div role="list" aria-expanded="true"></div>
+<div role="listbox" aria-expanded="true"></div>
+<div role="listitem" aria-expanded="true"></div>
+<div role="log" aria-expanded="true"></div>
+<div role="main" aria-expanded="true"></div>
+<div role="marquee" aria-expanded="true"></div>
+<div role="math" aria-expanded="true"></div>
+<div role="menu" aria-expanded="true"></div>
+<div role="menubar" aria-expanded="true"></div>
+<div role="menuitem" aria-expanded="true"></div>
+<div role="menuitemcheckbox" aria-expanded="true"></div>
+<div role="menuitemradio" aria-expanded="true"></div>
+<div role="meter" aria-expanded="true"></div>
+<div role="navigation" aria-expanded="true"></div>
+<div role="none" aria-expanded="true"></div>
+<div role="note" aria-expanded="true"></div>
+<div role="option" aria-expanded="true"></div>
+<div role="paragraph" aria-expanded="true"></div>
+<div role="presentation" aria-expanded="true"></div>
+<div role="progressbar" aria-expanded="true"></div>
+<div role="radio" aria-expanded="true"></div>
+<div role="radiogroup" aria-expanded="true"></div>
+<div role="region" aria-expanded="true"></div>
+<div role="row" aria-expanded="true"></div>
+<div role="rowgroup" aria-expanded="true"></div>
+<div role="rowheader" aria-expanded="true"></div>
+<div role="scrollbar" aria-expanded="true"></div>
+<div role="search" aria-expanded="true"></div>
+<div role="searchbox" aria-expanded="true"></div>
+<div role="separator" aria-expanded="true" tabindex="0"></div>
+<div role="separator" aria-expanded="true"></div>
+<div role="slider" aria-expanded="true"></div>
+<div role="spinbutton" aria-expanded="true"></div>
+<div role="status" aria-expanded="true"></div>
+<div role="strong" aria-expanded="true"></div>
+<div role="subscript" aria-expanded="true"></div>
+<div role="superscript" aria-expanded="true"></div>
+<div role="switch" aria-expanded="true"></div>
+<div role="tab" aria-expanded="true"></div>
+<div role="table" aria-expanded="true"></div>
+<div role="tablist" aria-expanded="true"></div>
+<div role="tabpanel" aria-expanded="true"></div>
+<div role="term" aria-expanded="true"></div>
+<div role="textbox" aria-expanded="true"></div>
+<div role="time" aria-expanded="true"></div>
+<div role="timer" aria-expanded="true"></div>
+<div role="toolbar" aria-expanded="true"></div>
+<div role="tooltip" aria-expanded="true"></div>
+<div role="tree" aria-expanded="true"></div>
+<div role="treegrid" aria-expanded="true"></div>
+<div role="treeitem" aria-expanded="true"></div>
+</body>
+</html>
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 154479d..72bf679 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
@@ -466,15 +466,18 @@
                             build_id_args)
       subprocess.check_output(cmd, stderr=subprocess.STDOUT)
     except CalledProcessError as e:
-      contents = ''
       try:
+        # The triage link for the image is output to the failure file, so report
+        # that if it's available so it shows up in Milo. If for whatever reason
+        # the file is not present or malformed, the triage link will still be
+        # present in the stdout of the goldctl command.
         with open(failure_file, 'r') as ff:
-          contents = ff.read()
+          self.artifacts.CreateLink('gold_triage_link', ff.read())
       except Exception:
         logging.error('Failed to read contents of goldctl failure file')
       logging.error('goldctl failed with output: %s', e.output)
       if not self.GetParsedCommandLineOptions().no_skia_gold_failure:
-        raise Exception('goldctl command failed: ' + contents)
+        raise Exception('goldctl command failed')
 
   def _ValidateScreenshotSamplesWithSkiaGold(self, tab, page, screenshot,
                                              expectations, tolerance,
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 a0d2c24..9ef6241 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
@@ -133,7 +133,6 @@
 crbug.com/781668 [ opengl win nvidia-0x1cb3             ] conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ]
 crbug.com/921055 [ opengl win passthrough nvidia-0x1cb3 ] conformance2/textures/image_bitmap_from_image_data/tex-2d-rgb9_e5-rgb-float.html [ RetryOnFailure ]
 crbug.com/905003 [ opengl win passthrough nvidia        ] conformance2/textures/misc/integer-cubemap-specification-order-bug.html [ Failure ]
-crbug.com/832238 [ opengl win no-passthrough nvidia     ] conformance2/transform_feedback/switching-objects.html [ RetryOnFailure ]
 crbug.com/887578 [ opengl win passthrough nvidia        ] deqp/data/gles3/shaders/conversions.html [ RetryOnFailure ]
 crbug.com/965648 [ opengl win passthrough nvidia-0x1cb3 ] deqp/functional/gles3/shaderstruct.html [ RetryOnFailure ]
 crbug.com/822733 [ opengl win nvidia-0x1cb3             ] deqp/functional/gles3/transformfeedback/* [ RetryOnFailure ]
@@ -304,6 +303,7 @@
 crbug.com/811614 [ intel mac ] deqp/functional/gles3/negativeshaderapi.html [ Failure ]
 
 # Mac Retina NVIDIA
+crbug.com/981101 [ mac nvidia-0xfe9 ] deqp/functional/gles3/multisample.html [ Failure ]
 crbug.com/728271 [ mac nvidia-0xfe9 ] deqp/functional/gles3/shaderindexing/mat_01.html [ Failure ]
 crbug.com/728271 [ mac nvidia-0xfe9 ] deqp/functional/gles3/shaderindexing/tmp.html [ Failure ]
 crbug.com/641209 [ mac nvidia-0xfe9 ] deqp/functional/gles3/fbomultisample* [ Failure ]
@@ -314,6 +314,7 @@
 crbug.com/483282 [ mac nvidia-0xfe9 ] conformance/programs/gl-bind-attrib-location-long-names-test.html [ Failure ]
 crbug.com/483282 [ mac nvidia-0xfe9 ] conformance/programs/gl-bind-attrib-location-test.html [ Failure ]
 crbug.com/483282 [ mac nvidia-0xfe9 ] conformance2/glsl3/loops-with-side-effects.html [ Failure ]
+crbug.com/981122 [ mac nvidia-0xfe9 ] conformance2/rendering/framebuffer-completeness-draw-framebuffer.html [ RetryOnFailure ]
 crbug.com/483282 [ no-angle mac nvidia-0xfe9 ] conformance2/textures/misc/tex-input-validation.html [ Failure ]
 crbug.com/682834 [ mac nvidia-0xfe9 ] conformance2/textures/image_bitmap_from_video/tex-2d-rgba16f-rgba-half_float.html [ RetryOnFailure ]
 crbug.com/922517 [ mac nvidia-0xfe9 ] conformance2/textures/canvas/tex-3d-rg16f-rg-float.html [ RetryOnFailure ]
@@ -533,7 +534,6 @@
 crbug.com/680278 [ opengl linux nvidia ] conformance2/rendering/framebuffer-texture-level1.html [ Failure ]
 crbug.com/680282 [ linux nvidia-0xf02 ] conformance2/textures/image/tex-3d-rg8ui-rg_integer-unsigned_byte.html [ Failure ]
 crbug.com/694354 [ linux no-passthrough nvidia ] conformance2/textures/image_bitmap_from_image_data/tex-2d-srgb8-rgb-unsigned_byte.html [ RetryOnFailure ]
-crbug.com/832238 [ linux no-passthrough nvidia ] conformance2/transform_feedback/switching-objects.html [ RetryOnFailure ]
 
 # Linux NVIDIA Quadro P400
 crbug.com/830046 [ linux passthrough nvidia-0x1cb3 ] conformance2/rendering/blitframebuffer-size-overflow.html [ Skip ]
@@ -591,6 +591,7 @@
 crbug.com/766776 [ linux amd ] conformance2/attribs/gl-vertex-attrib-normalized-int.html [ Failure ]
 # TODO(kbr): re-add after global suppression is removed.
 # crbug.com/483282 [ linux amd ] conformance/glsl/misc/shaders-with-invariance.html [ Failure ]
+crbug.com/981070 [ linux amd ] conformance2/glsl3/matrix-row-major.html [ Failure ]
 crbug.com/709351 [ linux amd ] conformance2/glsl3/vector-dynamic-indexing-swizzled-lvalue.html [ Failure ]
 crbug.com/617290 [ linux amd ] deqp/functional/gles3/multisample.html [ Failure ]
 crbug.com/483282 [ linux amd ] deqp/data/gles3/shaders/conversions.html [ Failure ]
@@ -712,7 +713,6 @@
 crbug.com/696345 [ no-angle linux amd-0x6613 ] conformance2/transform_feedback/switching-objects.html [ Failure ]
 crbug.com/851159 [ linux amd-0x6613 ] conformance2/buffers/get-buffer-sub-data-validity.html [ Failure ]
 crbug.com/913301 [ linux amd-0x6613 ] conformance2/textures/misc/generate-mipmap-with-large-base-level.html [ Failure ]
-crbug.com/809237 [ linux amd-0x6613 ] conformance2/uniforms/incompatible-texture-type-for-sampler.html [ Skip ]
 
 ####################
 # Android failures #
@@ -727,7 +727,6 @@
 
 # Basic failures that need to be investigated on multiple devices
 crbug.com/709351 [ android ] conformance2/glsl3/vector-dynamic-indexing-swizzled-lvalue.html [ Failure ]
-crbug.com/947236 [ android ] conformance2/uniforms/incompatible-texture-type-for-sampler.html [ Failure ]
 
 # Video tests are flaky. Sometimes the video is black.
 crbug.com/948894 [ android ] conformance/textures/video/* [ RetryOnFailure ]
@@ -752,9 +751,7 @@
 # This test is failing on Android Pixel 2 and 3 (Qualcomm)
 # Seems to be an OpenGL ES bug.
 crbug.com/945903 [ android qualcomm ] conformance2/rendering/vertex-id.html [ Failure ]
-crbug.com/906745 [ android qualcomm ] deqp/functional/gles3/shaderderivate_dfdy.html [ Failure ]
 crbug.com/695742 [ android qualcomm ] deqp/functional/gles3/multisample.html [ RetryOnFailure ]
-crbug.com/832238 [ android qualcomm ] conformance2/transform_feedback/switching-objects.html [ RetryOnFailure ]
 
 # This test is flaky but can fail three times in a row so it must be
 # marked as Fail instead of Flaky.
diff --git a/device/fido/bio/enrollment_handler.cc b/device/fido/bio/enrollment_handler.cc
index 874db64..08cac2ba 100644
--- a/device/fido/bio/enrollment_handler.cc
+++ b/device/fido/bio/enrollment_handler.cc
@@ -123,6 +123,14 @@
     return;
   }
 
+  if (authenticator->Options()->client_pin_availability !=
+      AuthenticatorSupportedOptions::ClientPinAvailability::
+          kSupportedAndPinSet) {
+    std::move(error_callback_)
+        .Run(FidoReturnCode::kAuthenticatorMissingUserVerification);
+    return;
+  }
+
   authenticator_ = authenticator;
   authenticator_->GetRetries(base::BindOnce(
       &BioEnrollmentHandler::OnRetriesResponse, weak_factory_.GetWeakPtr()));
diff --git a/device/fido/bio/enrollment_handler_unittest.cc b/device/fido/bio/enrollment_handler_unittest.cc
index c023627..5b28726 100644
--- a/device/fido/bio/enrollment_handler_unittest.cc
+++ b/device/fido/bio/enrollment_handler_unittest.cc
@@ -50,6 +50,21 @@
   test::VirtualFidoDeviceFactory virtual_device_factory_;
 };
 
+// Tests bio enrollment handler against device without PIN support.
+TEST_F(BioEnrollmentHandlerTest, NoPINSupport) {
+  VirtualCtap2Device::Config config;
+  config.pin_support = false;
+  config.bio_enrollment_preview_support = true;
+
+  virtual_device_factory_.SetCtap2Config(config);
+
+  auto handler = MakeHandler();
+  error_callback_.WaitForCallback();
+
+  EXPECT_EQ(error_callback_.value(),
+            FidoReturnCode::kAuthenticatorMissingUserVerification);
+}
+
 // Tests getting authenticator modality without pin auth.
 TEST_F(BioEnrollmentHandlerTest, Modality) {
   VirtualCtap2Device::Config config;
diff --git a/device/vr/BUILD.gn b/device/vr/BUILD.gn
index d85d4dd..e22fbbd 100644
--- a/device/vr/BUILD.gn
+++ b/device/vr/BUILD.gn
@@ -18,6 +18,8 @@
       "orientation/orientation_device.h",
       "orientation/orientation_device_provider.cc",
       "orientation/orientation_device_provider.h",
+      "orientation/orientation_session.cc",
+      "orientation/orientation_session.h",
       "util/fps_meter.cc",
       "util/fps_meter.h",
       "util/gamepad_builder.cc",
@@ -30,8 +32,6 @@
       "vr_device_base.cc",
       "vr_device_base.h",
       "vr_device_provider.h",
-      "vr_display_impl.cc",
-      "vr_display_impl.h",
       "vr_export.h",
     ]
     deps = [
diff --git a/device/vr/android/gvr/gvr_device.cc b/device/vr/android/gvr/gvr_device.cc
index 44c6a00..2a2d025 100644
--- a/device/vr/android/gvr/gvr_device.cc
+++ b/device/vr/android/gvr/gvr_device.cc
@@ -18,7 +18,6 @@
 #include "device/vr/android/gvr/gvr_delegate_provider_factory.h"
 #include "device/vr/android/gvr/gvr_device_provider.h"
 #include "device/vr/jni_headers/NonPresentingGvrContext_jni.h"
-#include "device/vr/vr_display_impl.h"
 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h"
 #include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/transform.h"
diff --git a/device/vr/orientation/orientation_device.cc b/device/vr/orientation/orientation_device.cc
index dc1a98e..fe7b0a9 100644
--- a/device/vr/orientation/orientation_device.cc
+++ b/device/vr/orientation/orientation_device.cc
@@ -9,7 +9,7 @@
 #include "base/numerics/math_constants.h"
 #include "base/time/time.h"
 #include "device/vr/orientation/orientation_device.h"
-#include "device/vr/vr_display_impl.h"
+#include "device/vr/orientation/orientation_session.h"
 #include "services/device/public/cpp/generic_sensor/sensor_reading.h"
 #include "services/device/public/cpp/generic_sensor/sensor_reading_shared_buffer_reader.h"
 #include "services/device/public/mojom/sensor_provider.mojom.h"
@@ -141,7 +141,7 @@
 
   mojom::XRFrameDataProviderPtr data_provider;
   mojom::XRSessionControllerPtr controller;
-  magic_window_sessions_.push_back(std::make_unique<VRDisplayImpl>(
+  magic_window_sessions_.push_back(std::make_unique<VROrientationSession>(
       this, mojo::MakeRequest(&data_provider), mojo::MakeRequest(&controller)));
 
   auto session = mojom::XRSession::New();
@@ -153,9 +153,9 @@
   std::move(callback).Run(std::move(session), std::move(controller));
 }
 
-void VROrientationDevice::EndMagicWindowSession(VRDisplayImpl* session) {
+void VROrientationDevice::EndMagicWindowSession(VROrientationSession* session) {
   base::EraseIf(magic_window_sessions_,
-                [session](const std::unique_ptr<VRDisplayImpl>& item) {
+                [session](const std::unique_ptr<VROrientationSession>& item) {
                   return item.get() == session;
                 });
 }
diff --git a/device/vr/orientation/orientation_device.h b/device/vr/orientation/orientation_device.h
index 10de2602..eff93f7a0 100644
--- a/device/vr/orientation/orientation_device.h
+++ b/device/vr/orientation/orientation_device.h
@@ -20,7 +20,7 @@
 namespace device {
 
 class SensorReadingSharedBufferReader;
-class VRDisplayImpl;
+class VROrientationSession;
 
 // Use RELATIVE_ORIENTATION_QUATERNION rather than
 // ABSOLUTE_ORIENTATION_QUATERNION because compass readings can be inacurate
@@ -51,7 +51,7 @@
   // Indicates whether the device was able to connect to orientation events.
   bool IsAvailable() const { return available_; }
 
-  void EndMagicWindowSession(VRDisplayImpl* session);
+  void EndMagicWindowSession(VROrientationSession* session);
   virtual void GetInlineFrameData(
       mojom::XRFrameDataProvider::GetFrameDataCallback callback);
 
@@ -80,7 +80,7 @@
   std::unique_ptr<SensorReadingSharedBufferReader> shared_buffer_reader_;
   mojo::Binding<mojom::SensorClient> binding_;
 
-  std::vector<std::unique_ptr<VRDisplayImpl>> magic_window_sessions_;
+  std::vector<std::unique_ptr<VROrientationSession>> magic_window_sessions_;
 };
 
 }  // namespace device
diff --git a/device/vr/orientation/orientation_device_unittest.cc b/device/vr/orientation/orientation_device_unittest.cc
index e7aaf4c..addaead2 100644
--- a/device/vr/orientation/orientation_device_unittest.cc
+++ b/device/vr/orientation/orientation_device_unittest.cc
@@ -13,9 +13,9 @@
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "device/vr/orientation/orientation_device.h"
+#include "device/vr/orientation/orientation_session.h"
 #include "device/vr/test/fake_orientation_provider.h"
 #include "device/vr/test/fake_sensor_provider.h"
-#include "device/vr/vr_display_impl.h"
 #include "services/device/public/cpp/generic_sensor/sensor_reading.h"
 #include "services/device/public/cpp/generic_sensor/sensor_reading_shared_buffer_reader.h"
 #include "services/device/public/cpp/generic_sensor/sensor_traits.h"
@@ -165,15 +165,15 @@
     device_->SetInlinePosesEnabled(enabled);
   }
 
-  std::unique_ptr<VRDisplayImpl> MakeDisplay() {
+  std::unique_ptr<VROrientationSession> MakeDisplay() {
     mojom::XRFrameDataProviderPtr data_provider;
     mojom::XRSessionControllerPtr controller;
-    return std::make_unique<VRDisplayImpl>(device_.get(),
-                                           mojo::MakeRequest(&data_provider),
-                                           mojo::MakeRequest(&controller));
+    return std::make_unique<VROrientationSession>(
+        device_.get(), mojo::MakeRequest(&data_provider),
+        mojo::MakeRequest(&controller));
   }
 
-  void TryGetFrameData(VRDisplayImpl* display, bool expect_null) {
+  void TryGetFrameData(VROrientationSession* display, bool expect_null) {
     bool was_called = false;
     auto callback = [](bool expect_null, bool* was_called,
                        mojom::XRFrameDataPtr data) {
@@ -395,7 +395,7 @@
   // 2) call GetFrameData and check behavior
   // 3) unrestrict frame data
   // 4) call GetFrameData and check behavior
-  std::unique_ptr<VRDisplayImpl> display = MakeDisplay();
+  std::unique_ptr<VROrientationSession> display = MakeDisplay();
   TryGetFrameData(display.get(), true);
   static_cast<mojom::XRSessionController*>(display.get())
       ->SetFrameDataRestricted(false);
diff --git a/device/vr/vr_display_impl.cc b/device/vr/orientation/orientation_session.cc
similarity index 75%
rename from device/vr/vr_display_impl.cc
rename to device/vr/orientation/orientation_session.cc
index c7c6dfae..3a937ed 100644
--- a/device/vr/vr_display_impl.cc
+++ b/device/vr/orientation/orientation_session.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 "device/vr/vr_display_impl.h"
+#include "device/vr/orientation/orientation_session.h"
 
 #include <utility>
 
@@ -11,7 +11,7 @@
 
 namespace device {
 
-VRDisplayImpl::VRDisplayImpl(
+VROrientationSession::VROrientationSession(
     VROrientationDevice* device,
     mojom::XRFrameDataProviderRequest magic_window_request,
     mojom::XRSessionControllerRequest session_request)
@@ -21,17 +21,16 @@
   // Unretained is safe because the binding will close when we are destroyed,
   // so we won't receive any more callbacks after that.
   session_controller_binding_.set_connection_error_handler(base::BindOnce(
-      &VRDisplayImpl::OnMojoConnectionError, base::Unretained(this)));
+      &VROrientationSession::OnMojoConnectionError, base::Unretained(this)));
 }
 
-VRDisplayImpl::~VRDisplayImpl() = default;
+VROrientationSession::~VROrientationSession() = default;
 
 // Gets frame data for sessions.
-void VRDisplayImpl::GetFrameData(
+void VROrientationSession::GetFrameData(
     mojom::XRFrameDataRequestOptionsPtr options,
     mojom::XRFrameDataProvider::GetFrameDataCallback callback) {
-  // VRDisplayImpl is only used by VROrientationDevice, which should never have
-  // an exclusive session / be presenting.
+  // Orientation sessions should never be exclusive or presenting.
   DCHECK(!device_->HasExclusiveSession());
 
   if (restrict_frame_data_) {
@@ -42,7 +41,7 @@
   device_->GetInlineFrameData(std::move(callback));
 }
 
-void VRDisplayImpl::GetEnvironmentIntegrationProvider(
+void VROrientationSession::GetEnvironmentIntegrationProvider(
     mojom::XREnvironmentIntegrationProviderAssociatedRequest
         environment_request) {
   // Environment integration is not supported. This call should not
@@ -50,7 +49,7 @@
   mojo::ReportBadMessage("Environment integration is not supported.");
 }
 
-void VRDisplayImpl::SetInputSourceButtonListener(
+void VROrientationSession::SetInputSourceButtonListener(
     device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) {
   // Input eventing is not supported. This call should not
   // be made on this device.
@@ -58,11 +57,11 @@
 }
 
 // XRSessionController
-void VRDisplayImpl::SetFrameDataRestricted(bool frame_data_restricted) {
+void VROrientationSession::SetFrameDataRestricted(bool frame_data_restricted) {
   restrict_frame_data_ = frame_data_restricted;
 }
 
-void VRDisplayImpl::OnMojoConnectionError() {
+void VROrientationSession::OnMojoConnectionError() {
   magic_window_binding_.Close();
   session_controller_binding_.Close();
   device_->EndMagicWindowSession(this);  // This call will destroy us.
diff --git a/device/vr/vr_display_impl.h b/device/vr/orientation/orientation_session.h
similarity index 69%
rename from device/vr/vr_display_impl.h
rename to device/vr/orientation/orientation_session.h
index ca244f1..1df070e 100644
--- a/device/vr/vr_display_impl.h
+++ b/device/vr/orientation/orientation_session.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 DEVICE_VR_VR_DISPLAY_IMPL_H
-#define DEVICE_VR_VR_DISPLAY_IMPL_H
+#ifndef DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
+#define DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
 
 #include <memory>
 
@@ -21,17 +21,18 @@
 
 class VROrientationDevice;
 
-// VR device process implementation of a XRFrameDataProvider within a WebVR
-// or WebXR site session.
-// VRDisplayImpl objects are owned by their respective XRRuntime instances.
-// TODO(http://crbug.com/842025): Rename this.
-class DEVICE_VR_EXPORT VRDisplayImpl : public mojom::XRFrameDataProvider,
-                                       public mojom::XRSessionController {
+// VR device process implementation of a XRFrameDataProvider within a session
+// that exposes device orientation sensors.
+// VROrientationSession objects are owned by their respective
+// VROrientationDevice instances.
+class DEVICE_VR_EXPORT VROrientationSession
+    : public mojom::XRFrameDataProvider,
+      public mojom::XRSessionController {
  public:
-  VRDisplayImpl(VROrientationDevice* device,
-                mojom::XRFrameDataProviderRequest,
-                mojom::XRSessionControllerRequest);
-  ~VRDisplayImpl() override;
+  VROrientationSession(VROrientationDevice* device,
+                       mojom::XRFrameDataProviderRequest,
+                       mojom::XRSessionControllerRequest);
+  ~VROrientationSession() override;
 
   void GetEnvironmentIntegrationProvider(
       mojom::XREnvironmentIntegrationProviderAssociatedRequest
@@ -58,4 +59,4 @@
 
 }  // namespace device
 
-#endif  //  DEVICE_VR_VR_DISPLAY_IMPL_H
+#endif  //  DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
diff --git a/gpu/GLES2/gl2extchromium.h b/gpu/GLES2/gl2extchromium.h
index 0b24ea6..958806e 100644
--- a/gpu/GLES2/gl2extchromium.h
+++ b/gpu/GLES2/gl2extchromium.h
@@ -779,6 +779,7 @@
 glScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                      GLboolean is_clipped,
                                      const GLfloat* clip_rect,
+                                     GLfloat clip_rect_corner_radius,
                                      GLint sorting_context_id,
                                      const GLfloat* transform);
 GL_APICALL void GL_APIENTRY
@@ -795,6 +796,7 @@
     GLfloat opacity,
     GLboolean is_clipped,
     const GLfloat* clip_rect,
+    GLfloat clip_rect_corner_radius,
     GLint sorting_context_id,
     const GLfloat* transform);
 typedef void(GL_APIENTRYP PFNGLSCHEDULECALAYERCHROMIUMPROC)(
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 38ffa4c..372ca08 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -3905,7 +3905,8 @@
     'impl_func': False,
     'client_test': False,
     'cmd_args': 'GLfloat opacity, GLboolean is_clipped, '
-                'GLint sorting_context_id, GLuint shm_id, GLuint shm_offset',
+                'GLfloat clip_rect_corner_radius, GLint sorting_context_id, '
+                'GLuint shm_id, GLuint shm_offset',
     'extension': 'CHROMIUM_schedule_ca_layer',
   },
   'ScheduleCALayerCHROMIUM': {
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index 347bd73..ecb36c8 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1577,10 +1577,12 @@
 GLES2ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                         GLboolean is_clipped,
                                         const GLfloat* clip_rect,
+                                        GLfloat clip_rect_corner_radius,
                                         GLint sorting_context_id,
                                         const GLfloat* transform) {
   gles2::GetGLContext()->ScheduleCALayerSharedStateCHROMIUM(
-      opacity, is_clipped, clip_rect, sorting_context_id, transform);
+      opacity, is_clipped, clip_rect, clip_rect_corner_radius,
+      sorting_context_id, transform);
 }
 void GL_APIENTRY GLES2ScheduleCALayerCHROMIUM(GLuint contents_texture_id,
                                               const GLfloat* contents_rect,
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index cc930c0..48b8023 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -2949,13 +2949,15 @@
 
 void ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                         GLboolean is_clipped,
+                                        GLfloat clip_rect_corner_radius,
                                         GLint sorting_context_id,
                                         GLuint shm_id,
                                         GLuint shm_offset) {
   gles2::cmds::ScheduleCALayerSharedStateCHROMIUM* c =
       GetCmdSpace<gles2::cmds::ScheduleCALayerSharedStateCHROMIUM>();
   if (c) {
-    c->Init(opacity, is_clipped, sorting_context_id, shm_id, shm_offset);
+    c->Init(opacity, is_clipped, clip_rect_corner_radius, sorting_context_id,
+            shm_id, shm_offset);
   }
 }
 
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index 017549c..0166d6c 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -5398,6 +5398,7 @@
     GLfloat opacity,
     GLboolean is_clipped,
     const GLfloat* clip_rect,
+    GLfloat clip_rect_corner_radius,
     GLint sorting_context_id,
     const GLfloat* transform) {
   uint32_t shm_size = 20 * sizeof(GLfloat);
@@ -5410,9 +5411,9 @@
   GLfloat* mem = static_cast<GLfloat*>(buffer.address());
   memcpy(mem + 0, clip_rect, 4 * sizeof(GLfloat));
   memcpy(mem + 4, transform, 16 * sizeof(GLfloat));
-  helper_->ScheduleCALayerSharedStateCHROMIUM(opacity, is_clipped,
-                                              sorting_context_id,
-                                              buffer.shm_id(), buffer.offset());
+  helper_->ScheduleCALayerSharedStateCHROMIUM(
+      opacity, is_clipped, clip_rect_corner_radius, sorting_context_id,
+      buffer.shm_id(), buffer.offset());
 }
 
 void GLES2Implementation::ScheduleCALayerCHROMIUM(GLuint contents_texture_id,
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index 87020ece..64ec205 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -1113,6 +1113,7 @@
 void ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                         GLboolean is_clipped,
                                         const GLfloat* clip_rect,
+                                        GLfloat clip_rect_corner_radius,
                                         GLint sorting_context_id,
                                         const GLfloat* transform) override;
 
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index 5d10eb5a..ea468e3 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -828,6 +828,7 @@
 virtual void ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                                 GLboolean is_clipped,
                                                 const GLfloat* clip_rect,
+                                                GLfloat clip_rect_corner_radius,
                                                 GLint sorting_context_id,
                                                 const GLfloat* transform) = 0;
 virtual void ScheduleCALayerCHROMIUM(GLuint contents_texture_id,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 6db43645..55e2c9f06 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -805,6 +805,7 @@
 void ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                         GLboolean is_clipped,
                                         const GLfloat* clip_rect,
+                                        GLfloat clip_rect_corner_radius,
                                         GLint sorting_context_id,
                                         const GLfloat* transform) override;
 void ScheduleCALayerCHROMIUM(GLuint contents_texture_id,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index 6644589f..c6af9dbe 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -1077,6 +1077,7 @@
     GLfloat /* opacity */,
     GLboolean /* is_clipped */,
     const GLfloat* /* clip_rect */,
+    GLfloat /* clip_rect_corner_radius */,
     GLint /* sorting_context_id */,
     const GLfloat* /* transform */) {}
 void GLES2InterfaceStub::ScheduleCALayerCHROMIUM(
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index 8116948..aa9b4ef8 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -805,6 +805,7 @@
 void ScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
                                         GLboolean is_clipped,
                                         const GLfloat* clip_rect,
+                                        GLfloat clip_rect_corner_radius,
                                         GLint sorting_context_id,
                                         const GLfloat* transform) override;
 void ScheduleCALayerCHROMIUM(GLuint contents_texture_id,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index 4ef7c32..caab6ae5 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -2265,11 +2265,13 @@
     GLfloat opacity,
     GLboolean is_clipped,
     const GLfloat* clip_rect,
+    GLfloat clip_rect_corner_radius,
     GLint sorting_context_id,
     const GLfloat* transform) {
   TRACE_EVENT_BINARY_EFFICIENT0(
       "gpu", "GLES2Trace::ScheduleCALayerSharedStateCHROMIUM");
   gl_->ScheduleCALayerSharedStateCHROMIUM(opacity, is_clipped, clip_rect,
+                                          clip_rect_corner_radius,
                                           sorting_context_id, transform);
 }
 
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index 01e551a8..2ea1ad4 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -14582,12 +14582,14 @@
 
   void Init(GLfloat _opacity,
             GLboolean _is_clipped,
+            GLfloat _clip_rect_corner_radius,
             GLint _sorting_context_id,
             GLuint _shm_id,
             GLuint _shm_offset) {
     SetHeader();
     opacity = _opacity;
     is_clipped = _is_clipped;
+    clip_rect_corner_radius = _clip_rect_corner_radius;
     sorting_context_id = _sorting_context_id;
     shm_id = _shm_id;
     shm_offset = _shm_offset;
@@ -14596,24 +14598,27 @@
   void* Set(void* cmd,
             GLfloat _opacity,
             GLboolean _is_clipped,
+            GLfloat _clip_rect_corner_radius,
             GLint _sorting_context_id,
             GLuint _shm_id,
             GLuint _shm_offset) {
     static_cast<ValueType*>(cmd)->Init(
-        _opacity, _is_clipped, _sorting_context_id, _shm_id, _shm_offset);
+        _opacity, _is_clipped, _clip_rect_corner_radius, _sorting_context_id,
+        _shm_id, _shm_offset);
     return NextCmdAddress<ValueType>(cmd);
   }
 
   gpu::CommandHeader header;
   float opacity;
   uint32_t is_clipped;
+  float clip_rect_corner_radius;
   int32_t sorting_context_id;
   uint32_t shm_id;
   uint32_t shm_offset;
 };
 
-static_assert(sizeof(ScheduleCALayerSharedStateCHROMIUM) == 24,
-              "size of ScheduleCALayerSharedStateCHROMIUM should be 24");
+static_assert(sizeof(ScheduleCALayerSharedStateCHROMIUM) == 28,
+              "size of ScheduleCALayerSharedStateCHROMIUM should be 28");
 static_assert(
     offsetof(ScheduleCALayerSharedStateCHROMIUM, header) == 0,
     "offset of ScheduleCALayerSharedStateCHROMIUM header should be 0");
@@ -14624,15 +14629,19 @@
     offsetof(ScheduleCALayerSharedStateCHROMIUM, is_clipped) == 8,
     "offset of ScheduleCALayerSharedStateCHROMIUM is_clipped should be 8");
 static_assert(offsetof(ScheduleCALayerSharedStateCHROMIUM,
-                       sorting_context_id) == 12,
+                       clip_rect_corner_radius) == 12,
+              "offset of ScheduleCALayerSharedStateCHROMIUM "
+              "clip_rect_corner_radius should be 12");
+static_assert(offsetof(ScheduleCALayerSharedStateCHROMIUM,
+                       sorting_context_id) == 16,
               "offset of ScheduleCALayerSharedStateCHROMIUM sorting_context_id "
-              "should be 12");
+              "should be 16");
 static_assert(
-    offsetof(ScheduleCALayerSharedStateCHROMIUM, shm_id) == 16,
-    "offset of ScheduleCALayerSharedStateCHROMIUM shm_id should be 16");
+    offsetof(ScheduleCALayerSharedStateCHROMIUM, shm_id) == 20,
+    "offset of ScheduleCALayerSharedStateCHROMIUM shm_id should be 20");
 static_assert(
-    offsetof(ScheduleCALayerSharedStateCHROMIUM, shm_offset) == 20,
-    "offset of ScheduleCALayerSharedStateCHROMIUM shm_offset should be 20");
+    offsetof(ScheduleCALayerSharedStateCHROMIUM, shm_offset) == 24,
+    "offset of ScheduleCALayerSharedStateCHROMIUM shm_offset should be 24");
 
 struct ScheduleCALayerCHROMIUM {
   typedef ScheduleCALayerCHROMIUM ValueType;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index 64a5457..049e482 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -4850,18 +4850,20 @@
 TEST_F(GLES2FormatTest, ScheduleCALayerSharedStateCHROMIUM) {
   cmds::ScheduleCALayerSharedStateCHROMIUM& cmd =
       *GetBufferAs<cmds::ScheduleCALayerSharedStateCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLfloat>(11),
-                           static_cast<GLboolean>(12), static_cast<GLint>(13),
-                           static_cast<GLuint>(14), static_cast<GLuint>(15));
+  void* next_cmd =
+      cmd.Set(&cmd, static_cast<GLfloat>(11), static_cast<GLboolean>(12),
+              static_cast<GLfloat>(13), static_cast<GLint>(14),
+              static_cast<GLuint>(15), static_cast<GLuint>(16));
   EXPECT_EQ(
       static_cast<uint32_t>(cmds::ScheduleCALayerSharedStateCHROMIUM::kCmdId),
       cmd.header.command);
   EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
   EXPECT_EQ(static_cast<GLfloat>(11), cmd.opacity);
   EXPECT_EQ(static_cast<GLboolean>(12), cmd.is_clipped);
-  EXPECT_EQ(static_cast<GLint>(13), cmd.sorting_context_id);
-  EXPECT_EQ(static_cast<GLuint>(14), cmd.shm_id);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.shm_offset);
+  EXPECT_EQ(static_cast<GLfloat>(13), cmd.clip_rect_corner_radius);
+  EXPECT_EQ(static_cast<GLint>(14), cmd.sorting_context_id);
+  EXPECT_EQ(static_cast<GLuint>(15), cmd.shm_id);
+  EXPECT_EQ(static_cast<GLuint>(16), cmd.shm_offset);
   CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
 }
 
diff --git a/gpu/command_buffer/gles2_cmd_buffer_functions.txt b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
index 33cfad11..d23b34e 100644
--- a/gpu/command_buffer/gles2_cmd_buffer_functions.txt
+++ b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
@@ -328,7 +328,7 @@
 GL_APICALL void         GL_APIENTRY glDrawBuffersEXT (GLsizei count, const GLenum* bufs);
 GL_APICALL void         GL_APIENTRY glDiscardBackbufferCHROMIUM (void);
 GL_APICALL void         GL_APIENTRY glScheduleOverlayPlaneCHROMIUM (GLint plane_z_order, GLenum plane_transform, GLuint overlay_texture_id, GLint bounds_x, GLint bounds_y, GLint bounds_width, GLint bounds_height, GLfloat uv_x, GLfloat uv_y, GLfloat uv_width, GLfloat uv_height, GLboolean enable_blend, GLuint gpu_fence_id);
-GL_APICALL void         GL_APIENTRY glScheduleCALayerSharedStateCHROMIUM (GLfloat opacity, GLboolean is_clipped, const GLfloat* clip_rect, GLint sorting_context_id, const GLfloat* transform);
+GL_APICALL void         GL_APIENTRY glScheduleCALayerSharedStateCHROMIUM (GLfloat opacity, GLboolean is_clipped, const GLfloat* clip_rect, GLfloat clip_rect_corner_radius, GLint sorting_context_id, const GLfloat* transform);
 GL_APICALL void         GL_APIENTRY glScheduleCALayerCHROMIUM (GLuint contents_texture_id, const GLfloat* contents_rect, GLuint background_color, GLuint edge_aa_mask, const GLfloat* bounds_rect, GLuint filter);
 GL_APICALL void         GL_APIENTRY glScheduleCALayerInUseQueryCHROMIUM (GLsizei count, const GLuint* textures);
 GL_APICALL void         GL_APIENTRY glCommitOverlayPlanesCHROMIUM (GLuint64 swap_id, GLbitfieldSwapBuffersFlags flags = 0);
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn
index 5a84425..be1ee05 100644
--- a/gpu/command_buffer/service/BUILD.gn
+++ b/gpu/command_buffer/service/BUILD.gn
@@ -240,6 +240,8 @@
     "shared_image_manager.h",
     "shared_image_representation.cc",
     "shared_image_representation.h",
+    "shared_image_representation_skia_gl.cc",
+    "shared_image_representation_skia_gl.h",
     "skia_utils.cc",
     "skia_utils.h",
     "texture_definition.cc",
diff --git a/gpu/command_buffer/service/gl_utils.h b/gpu/command_buffer/service/gl_utils.h
index 28e38fca..8cf798c7 100644
--- a/gpu/command_buffer/service/gl_utils.h
+++ b/gpu/command_buffer/service/gl_utils.h
@@ -56,6 +56,7 @@
   float opacity;
   bool is_clipped;
   gfx::Rect clip_rect;
+  float clip_rect_corner_radius;
   int sorting_context_id;
   gfx::Transform transform;
 };
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 955e9e4..e51d6d41 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -13527,6 +13527,7 @@
   ca_layer_shared_state_->opacity = c.opacity;
   ca_layer_shared_state_->is_clipped = c.is_clipped ? true : false;
   ca_layer_shared_state_->clip_rect = gfx::ToEnclosingRect(clip_rect);
+  ca_layer_shared_state_->clip_rect_corner_radius = c.clip_rect_corner_radius;
   ca_layer_shared_state_->sorting_context_id = c.sorting_context_id;
   ca_layer_shared_state_->transform = transform;
   return error::kNoError;
@@ -13581,6 +13582,7 @@
 
   ui::CARendererLayerParams params = ui::CARendererLayerParams(
       ca_layer_shared_state_->is_clipped, ca_layer_shared_state_->clip_rect,
+      ca_layer_shared_state_->clip_rect_corner_radius,
       ca_layer_shared_state_->sorting_context_id,
       ca_layer_shared_state_->transform, image, contents_rect,
       gfx::ToEnclosingRect(bounds_rect), c.background_color, c.edge_aa_mask,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
index 6607d3db..f50768aa 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -895,11 +895,13 @@
                                             GLfloat uv_width,
                                             GLfloat uv_height,
                                             GLuint gpu_fence_id);
-error::Error DoScheduleCALayerSharedStateCHROMIUM(GLfloat opacity,
-                                                  GLboolean is_clipped,
-                                                  const GLfloat* clip_rect,
-                                                  GLint sorting_context_id,
-                                                  const GLfloat* transform);
+error::Error DoScheduleCALayerSharedStateCHROMIUM(
+    GLfloat opacity,
+    GLboolean is_clipped,
+    const GLfloat* clip_rect,
+    GLfloat clip_rect_corner_radius,
+    GLint sorting_context_id,
+    const GLfloat* transform);
 error::Error DoScheduleCALayerCHROMIUM(GLuint contents_texture_id,
                                        const GLfloat* contents_rect,
                                        GLuint background_color,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index 08edaeed..2d0ae79d 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -4507,6 +4507,7 @@
     GLfloat opacity,
     GLboolean is_clipped,
     const GLfloat* clip_rect,
+    GLfloat clip_rect_corner_radius,
     GLint sorting_context_id,
     const GLfloat* transform) {
   NOTIMPLEMENTED();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
index 5a3c402..e7fb2d20ae 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
@@ -2059,6 +2059,8 @@
           cmd_data);
   GLfloat opacity = static_cast<GLfloat>(c.opacity);
   GLboolean is_clipped = static_cast<GLboolean>(c.is_clipped);
+  GLfloat clip_rect_corner_radius =
+      static_cast<GLfloat>(c.clip_rect_corner_radius);
   GLint sorting_context_id = static_cast<GLint>(c.sorting_context_id);
   uint32_t shm_id = c.shm_id;
   uint32_t shm_offset = c.shm_offset;
@@ -2071,6 +2073,7 @@
   const GLfloat* clip_rect = mem + 0;
   const GLfloat* transform = mem + 4;
   return DoScheduleCALayerSharedStateCHROMIUM(opacity, is_clipped, clip_rect,
+                                              clip_rect_corner_radius,
                                               sorting_context_id, transform);
 }
 
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
index b543389..867f320f 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -29,6 +29,7 @@
 #include "gpu/command_buffer/service/shared_context_state.h"
 #include "gpu/command_buffer/service/shared_image_backing.h"
 #include "gpu/command_buffer/service/shared_image_representation.h"
+#include "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
 #include "gpu/command_buffer/service/skia_utils.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "gpu/ipc/common/android/android_image_reader_utils.h"
@@ -53,27 +54,6 @@
 namespace gpu {
 namespace {
 
-enum class RepresentationAccessMode {
-  kNone,
-  kRead,
-  kWrite,
-};
-
-std::ostream& operator<<(std::ostream& os, RepresentationAccessMode mode) {
-  switch (mode) {
-    case RepresentationAccessMode::kNone:
-      os << "kNone";
-      break;
-    case RepresentationAccessMode::kRead:
-      os << "kRead";
-      break;
-    case RepresentationAccessMode::kWrite:
-      os << "kWrite";
-      break;
-  }
-  return os;
-}
-
 sk_sp<SkPromiseImageTexture> CreatePromiseTexture(
     viz::VulkanContextProvider* context_provider,
     base::android::ScopedHardwareBufferHandle ahb_handle,
@@ -269,137 +249,6 @@
   DISALLOW_COPY_AND_ASSIGN(SharedImageRepresentationGLTextureAHB);
 };
 
-// GL backed Skia representation of SharedImageBackingAHB.
-class SharedImageRepresentationSkiaGLAHB
-    : public SharedImageRepresentationSkia {
- public:
-  SharedImageRepresentationSkiaGLAHB(
-      SharedImageManager* manager,
-      SharedImageBacking* backing,
-      scoped_refptr<SharedContextState> context_state,
-      sk_sp<SkPromiseImageTexture> promise_texture,
-      MemoryTypeTracker* tracker,
-      gles2::Texture* texture)
-      : SharedImageRepresentationSkia(manager, backing, tracker),
-        context_state_(std::move(context_state)),
-        promise_texture_(std::move(promise_texture)),
-        texture_(std::move(texture)) {
-#if DCHECK_IS_ON()
-    context_ = gl::GLContext::GetCurrent();
-#endif
-  }
-
-  ~SharedImageRepresentationSkiaGLAHB() override {
-    DCHECK_EQ(RepresentationAccessMode::kNone, mode_);
-    DCHECK(!surface_);
-    if (texture_)
-      texture_->RemoveLightweightRef(has_context());
-  }
-
-  sk_sp<SkSurface> BeginWriteAccess(
-      int final_msaa_count,
-      const SkSurfaceProps& surface_props,
-      std::vector<GrBackendSemaphore>* begin_semaphores,
-      std::vector<GrBackendSemaphore>* end_semaphores) override {
-    DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
-    CheckContext();
-
-    // if there is already a surface_, it means previous BeginWriteAccess
-    // doesn't have a corresponding EndWriteAccess.
-    DCHECK(!surface_);
-
-    base::ScopedFD sync_fd;
-    if (!ahb_backing()->BeginWrite(&sync_fd))
-      return nullptr;
-
-    if (!InsertEglFenceAndWait(std::move(sync_fd)))
-      return nullptr;
-
-    if (!promise_texture_)
-      return nullptr;
-
-    SkColorType sk_color_type = viz::ResourceFormatToClosestSkColorType(
-        /*gpu_compositing=*/true, format());
-    auto surface = SkSurface::MakeFromBackendTextureAsRenderTarget(
-        context_state_->gr_context(), promise_texture_->backendTexture(),
-        kTopLeft_GrSurfaceOrigin, final_msaa_count, sk_color_type,
-        backing()->color_space().ToSkColorSpace(), &surface_props);
-    surface_ = surface.get();
-    mode_ = RepresentationAccessMode::kWrite;
-    return surface;
-  }
-
-  void EndWriteAccess(sk_sp<SkSurface> surface) override {
-    DCHECK_EQ(mode_, RepresentationAccessMode::kWrite);
-    DCHECK(surface_);
-    DCHECK_EQ(surface.get(), surface_);
-    DCHECK(surface->unique());
-    EndAccess(false /* readonly */);
-  }
-
-  sk_sp<SkPromiseImageTexture> BeginReadAccess(
-      std::vector<GrBackendSemaphore>* begin_semaphores,
-      std::vector<GrBackendSemaphore>* end_semaphores) override {
-    DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
-    CheckContext();
-
-    base::ScopedFD write_sync_fd;
-    if (!ahb_backing()->BeginRead(this, &write_sync_fd))
-      return nullptr;
-    if (!InsertEglFenceAndWait(std::move(write_sync_fd)))
-      return nullptr;
-
-    mode_ = RepresentationAccessMode::kRead;
-
-    return promise_texture_;
-  }
-
-  void EndReadAccess() override {
-    DCHECK_EQ(mode_, RepresentationAccessMode::kRead);
-    CheckContext();
-    EndAccess(true /* readonly */);
-  }
-
- private:
-  SharedImageBackingAHB* ahb_backing() {
-    return static_cast<SharedImageBackingAHB*>(backing());
-  }
-
-  void CheckContext() {
-#if DCHECK_IS_ON()
-    DCHECK(gl::GLContext::GetCurrent() == context_);
-#endif
-  }
-
-  void EndAccess(bool readonly) {
-    CheckContext();
-
-    // Insert a gl fence to signal the write completion.
-    base::ScopedFD sync_fd = CreateEglFenceAndExportFd();
-    if (readonly)
-      ahb_backing()->EndRead(this, std::move(sync_fd));
-    else
-      ahb_backing()->EndWrite(std::move(sync_fd));
-
-    if (texture_ && !readonly) {
-      if (texture_->IsLevelCleared(texture_->target(), 0))
-        backing()->SetCleared();
-    }
-
-    mode_ = RepresentationAccessMode::kNone;
-    surface_ = nullptr;
-  }
-
-  scoped_refptr<SharedContextState> context_state_;
-  sk_sp<SkPromiseImageTexture> promise_texture_;
-  gles2::Texture* texture_;
-  SkSurface* surface_ = nullptr;
-  RepresentationAccessMode mode_ = RepresentationAccessMode::kNone;
-#if DCHECK_IS_ON()
-  gl::GLContext* context_;
-#endif
-};
-
 // Vk backed Skia representation of SharedImageBackingAHB.
 class SharedImageRepresentationSkiaVkAHB
     : public SharedImageRepresentationSkia {
@@ -694,16 +543,12 @@
   auto* texture = GenGLTexture();
   if (!texture)
     return nullptr;
-
-  GrBackendTexture backend_texture;
-  GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(),
-                      texture->target(), size(), texture->service_id(),
-                      format(), &backend_texture);
-  sk_sp<SkPromiseImageTexture> promise_texture =
-      SkPromiseImageTexture::Make(backend_texture);
-  return std::make_unique<SharedImageRepresentationSkiaGLAHB>(
-      manager, this, std::move(context_state), std::move(promise_texture),
-      tracker, std::move(texture));
+  auto gl_representation =
+      std::make_unique<SharedImageRepresentationGLTextureAHB>(
+          manager, this, tracker, std::move(texture));
+  return SharedImageRepresentationSkiaGL::Create(std::move(gl_representation),
+                                                 std::move(context_state),
+                                                 manager, this, tracker);
 }
 
 bool SharedImageBackingAHB::BeginWrite(base::ScopedFD* fd_to_wait_on) {
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h
index 46f69b0..ab94c5aa 100644
--- a/gpu/command_buffer/service/shared_image_representation.h
+++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -27,6 +27,12 @@
 class TexturePassthrough;
 }  // namespace gles2
 
+enum class RepresentationAccessMode {
+  kNone,
+  kRead,
+  kWrite,
+};
+
 // A representation of a SharedImageBacking for use with a specific use case /
 // api.
 class GPU_GLES2_EXPORT SharedImageRepresentation {
@@ -52,6 +58,7 @@
   }
 
  protected:
+  SharedImageManager* manager() const { return manager_; }
   SharedImageBacking* backing() const { return backing_; }
   bool has_context() const { return has_context_; }
 
diff --git a/gpu/command_buffer/service/shared_image_representation_skia_gl.cc b/gpu/command_buffer/service/shared_image_representation_skia_gl.cc
new file mode 100644
index 0000000..746300a
--- /dev/null
+++ b/gpu/command_buffer/service/shared_image_representation_skia_gl.cc
@@ -0,0 +1,141 @@
+// 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 "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
+
+#include "components/viz/common/resources/resource_format_utils.h"
+#include "gpu/command_buffer/service/shared_context_state.h"
+#include "gpu/command_buffer/service/skia_utils.h"
+#include "gpu/command_buffer/service/texture_manager.h"
+#include "third_party/skia/include/core/SkPromiseImageTexture.h"
+#include "third_party/skia/include/gpu/GrBackendSurface.h"
+#include "ui/gl/gl_bindings.h"
+
+namespace gpu {
+
+std::ostream& operator<<(std::ostream& os, RepresentationAccessMode mode) {
+  switch (mode) {
+    case RepresentationAccessMode::kNone:
+      os << "kNone";
+      break;
+    case RepresentationAccessMode::kRead:
+      os << "kRead";
+      break;
+    case RepresentationAccessMode::kWrite:
+      os << "kWrite";
+      break;
+  }
+  return os;
+}
+
+// static method.
+std::unique_ptr<SharedImageRepresentationSkiaGL>
+SharedImageRepresentationSkiaGL::Create(
+    std::unique_ptr<SharedImageRepresentationGLTexture> gl_representation,
+    scoped_refptr<SharedContextState> context_state,
+    SharedImageManager* manager,
+    SharedImageBacking* backing,
+    MemoryTypeTracker* tracker) {
+  GrBackendTexture backend_texture;
+  if (!GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(),
+                           gl_representation->GetTexture()->target(),
+                           backing->size(),
+                           gl_representation->GetTexture()->service_id(),
+                           backing->format(), &backend_texture)) {
+    return nullptr;
+  }
+  auto promise_texture = SkPromiseImageTexture::Make(backend_texture);
+  if (!promise_texture)
+    return nullptr;
+  return base::WrapUnique(new SharedImageRepresentationSkiaGL(
+      std::move(gl_representation), std::move(promise_texture),
+      std::move(context_state), manager, backing, tracker));
+}
+
+SharedImageRepresentationSkiaGL::SharedImageRepresentationSkiaGL(
+    std::unique_ptr<SharedImageRepresentationGLTexture> gl_representation,
+    sk_sp<SkPromiseImageTexture> promise_texture,
+    scoped_refptr<SharedContextState> context_state,
+    SharedImageManager* manager,
+    SharedImageBacking* backing,
+    MemoryTypeTracker* tracker)
+    : SharedImageRepresentationSkia(manager, backing, tracker),
+      gl_representation_(std::move(gl_representation)),
+      promise_texture_(std::move(promise_texture)),
+      context_state_(std::move(context_state)) {
+#if DCHECK_IS_ON()
+  context_ = gl::GLContext::GetCurrent();
+#endif
+}
+
+SharedImageRepresentationSkiaGL::~SharedImageRepresentationSkiaGL() {
+  DCHECK_EQ(RepresentationAccessMode::kNone, mode_);
+  DCHECK(!surface_);
+}
+
+sk_sp<SkSurface> SharedImageRepresentationSkiaGL::BeginWriteAccess(
+    int final_msaa_count,
+    const SkSurfaceProps& surface_props,
+    std::vector<GrBackendSemaphore>* begin_semaphores,
+    std::vector<GrBackendSemaphore>* end_semaphores) {
+  DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
+  DCHECK(!surface_);
+  CheckContext();
+
+  if (!gl_representation_->BeginAccess(
+          GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM)) {
+    return nullptr;
+  }
+
+  SkColorType sk_color_type = viz::ResourceFormatToClosestSkColorType(
+      /*gpu_compositing=*/true, format());
+  auto surface = SkSurface::MakeFromBackendTextureAsRenderTarget(
+      context_state_->gr_context(), promise_texture_->backendTexture(),
+      kTopLeft_GrSurfaceOrigin, final_msaa_count, sk_color_type,
+      backing()->color_space().ToSkColorSpace(), &surface_props);
+  surface_ = surface.get();
+  mode_ = RepresentationAccessMode::kWrite;
+  return surface;
+}
+
+void SharedImageRepresentationSkiaGL::EndWriteAccess(sk_sp<SkSurface> surface) {
+  DCHECK_EQ(mode_, RepresentationAccessMode::kWrite);
+  DCHECK(surface_);
+  DCHECK_EQ(surface.get(), surface_);
+  DCHECK(surface->unique());
+
+  gl_representation_->EndAccess();
+  mode_ = RepresentationAccessMode::kNone;
+  surface_ = nullptr;
+}
+
+sk_sp<SkPromiseImageTexture> SharedImageRepresentationSkiaGL::BeginReadAccess(
+    std::vector<GrBackendSemaphore>* begin_semaphores,
+    std::vector<GrBackendSemaphore>* end_semaphores) {
+  DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
+  CheckContext();
+
+  if (!gl_representation_->BeginAccess(
+          GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM))
+    return nullptr;
+  mode_ = RepresentationAccessMode::kRead;
+  return promise_texture_;
+}
+
+void SharedImageRepresentationSkiaGL::EndReadAccess() {
+  DCHECK_EQ(mode_, RepresentationAccessMode::kRead);
+  CheckContext();
+
+  gl_representation_->EndAccess();
+  mode_ = RepresentationAccessMode::kNone;
+  surface_ = nullptr;
+}
+
+void SharedImageRepresentationSkiaGL::CheckContext() {
+#if DCHECK_IS_ON()
+  DCHECK(gl::GLContext::GetCurrent() == context_);
+#endif
+}
+
+}  // namespace gpu
diff --git a/gpu/command_buffer/service/shared_image_representation_skia_gl.h b/gpu/command_buffer/service/shared_image_representation_skia_gl.h
new file mode 100644
index 0000000..5ad4ab8
--- /dev/null
+++ b/gpu/command_buffer/service/shared_image_representation_skia_gl.h
@@ -0,0 +1,63 @@
+// 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 GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_REPRESENTATION_SKIA_GL_H_
+#define GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_REPRESENTATION_SKIA_GL_H_
+
+#include "gpu/command_buffer/service/shared_image_representation.h"
+#include "ui/gl/gl_context.h"
+
+namespace gpu {
+// This is a wrapper class for SharedImageRepresentationSkia to be used in GL
+// mode. For most of the SharedImageBackings, SharedImageRepresentationGLTexture
+// and SharedImageRepresentationSkia implementations do the same work which
+// results in duplicate code. Hence instead of implementing
+// SharedImageRepresentationSkia, this wrapper can be directly used or
+// implemented by the backings.
+class GPU_GLES2_EXPORT SharedImageRepresentationSkiaGL
+    : public SharedImageRepresentationSkia {
+ public:
+  static std::unique_ptr<SharedImageRepresentationSkiaGL> Create(
+      std::unique_ptr<SharedImageRepresentationGLTexture> gl_representation,
+      scoped_refptr<SharedContextState> context_state,
+      SharedImageManager* manager,
+      SharedImageBacking* backing,
+      MemoryTypeTracker* tracker);
+
+  ~SharedImageRepresentationSkiaGL() override;
+
+  sk_sp<SkSurface> BeginWriteAccess(
+      int final_msaa_count,
+      const SkSurfaceProps& surface_props,
+      std::vector<GrBackendSemaphore>* begin_semaphores,
+      std::vector<GrBackendSemaphore>* end_semaphores) override;
+  void EndWriteAccess(sk_sp<SkSurface> surface) override;
+  sk_sp<SkPromiseImageTexture> BeginReadAccess(
+      std::vector<GrBackendSemaphore>* begin_semaphores,
+      std::vector<GrBackendSemaphore>* end_semaphores) override;
+  void EndReadAccess() override;
+
+ private:
+  SharedImageRepresentationSkiaGL(
+      std::unique_ptr<SharedImageRepresentationGLTexture> gl_representation,
+      sk_sp<SkPromiseImageTexture> promise_texture,
+      scoped_refptr<SharedContextState> context_state,
+      SharedImageManager* manager,
+      SharedImageBacking* backing,
+      MemoryTypeTracker* tracker);
+  void CheckContext();
+
+  std::unique_ptr<SharedImageRepresentationGLTexture> gl_representation_;
+  sk_sp<SkPromiseImageTexture> promise_texture_;
+  scoped_refptr<SharedContextState> context_state_;
+  SkSurface* surface_ = nullptr;
+  RepresentationAccessMode mode_ = RepresentationAccessMode::kNone;
+#if DCHECK_IS_ON()
+  gl::GLContext* context_;
+#endif
+};
+
+}  // namespace gpu
+
+#endif  // GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_REPRESENTATION_SKIA_GL_H_
diff --git a/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc b/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
index 28e166d5..bb0c705f 100644
--- a/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
+++ b/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
@@ -75,6 +75,12 @@
     }
     return nullptr;
   }
+  int64_t io_surface_width = IOSurfaceGetWidth(io_surface);
+  int64_t io_surface_height = IOSurfaceGetHeight(io_surface);
+  if (io_surface_width < size.width() || io_surface_height < size.height()) {
+    DLOG(ERROR) << "IOSurface size does not match handle.";
+    return nullptr;
+  }
 
   return base::WrapUnique(new GpuMemoryBufferImplIOSurface(
       handle.id, size, format, std::move(callback), io_surface.release(),
diff --git a/gpu/ipc/service/gpu_watchdog_thread.cc b/gpu/ipc/service/gpu_watchdog_thread.cc
index e175a4c..273fb3e 100644
--- a/gpu/ipc/service/gpu_watchdog_thread.cc
+++ b/gpu/ipc/service/gpu_watchdog_thread.cc
@@ -88,6 +88,7 @@
   SetupXServer();
 #endif
   base::MessageLoopCurrent::Get()->AddTaskObserver(&task_observer_);
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogStart);
 }
 
 // static
@@ -128,6 +129,11 @@
                      base::Unretained(this)));
 }
 
+void GpuWatchdogThreadImplV1::GpuWatchdogHistogram(
+    GpuWatchdogThreadEvent thread_event) {
+  UMA_HISTOGRAM_ENUMERATION("GPU.WatchdogThread.Event", thread_event);
+}
+
 void GpuWatchdogThreadImplV1::Init() {
   // Schedule the first check.
   OnCheck(false);
@@ -229,6 +235,7 @@
 #endif
 
   base::MessageLoopCurrent::Get()->RemoveTaskObserver(&task_observer_);
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogEnd);
 }
 
 void GpuWatchdogThreadImplV1::OnAcknowledge() {
@@ -486,6 +493,8 @@
     return;
   }
 
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogKill);
+
   // Deliberately crash the process to create a crash dump.
   *((volatile int*)0) = 0x1337;
 
diff --git a/gpu/ipc/service/gpu_watchdog_thread.h b/gpu/ipc/service/gpu_watchdog_thread.h
index deac19a..fe05fc2 100644
--- a/gpu/ipc/service/gpu_watchdog_thread.h
+++ b/gpu/ipc/service/gpu_watchdog_thread.h
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop_current.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/power_monitor/power_observer.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
@@ -26,6 +27,15 @@
 
 namespace gpu {
 
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class GpuWatchdogThreadEvent {
+  kGpuWatchdogStart,
+  kGpuWatchdogKill,
+  kGpuWatchdogEnd,
+  kMaxValue = kGpuWatchdogEnd,
+};
+
 // A thread that intermitently sends tasks to a group of watched message loops
 // and deliberately crashes if one of them does not respond after a timeout.
 class GPU_IPC_SERVICE_EXPORT GpuWatchdogThread : public base::Thread,
@@ -48,6 +58,8 @@
   // once init is complete, before executing tasks.
   virtual void OnInitComplete() = 0;
 
+  virtual void GpuWatchdogHistogram(GpuWatchdogThreadEvent thread_event) = 0;
+
  protected:
   GpuWatchdogThread();
 
@@ -68,6 +80,7 @@
   void OnBackgrounded() override;
   void OnForegrounded() override;
   void OnInitComplete() override {}
+  void GpuWatchdogHistogram(GpuWatchdogThreadEvent thread_event) override;
 
   // gl::ProgressReporter implementation:
   void ReportProgress() override;
diff --git a/gpu/ipc/service/gpu_watchdog_thread_v2.cc b/gpu/ipc/service/gpu_watchdog_thread_v2.cc
index 09c9b6c..f9c0e365 100644
--- a/gpu/ipc/service/gpu_watchdog_thread_v2.cc
+++ b/gpu/ipc/service/gpu_watchdog_thread_v2.cc
@@ -32,6 +32,7 @@
       weak_factory_(this) {
   base::MessageLoopCurrent::Get()->AddTaskObserver(this);
   weak_ptr_ = weak_factory_.GetWeakPtr();
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogStart);
   Arm();
   watchdog_start_time_ = base::TimeTicks::Now();
 }
@@ -42,6 +43,7 @@
 
   base::MessageLoopCurrent::Get()->RemoveTaskObserver(this);
   base::PowerMonitor::RemoveObserver(this);
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogEnd);
 }
 
 // static
@@ -223,8 +225,16 @@
   base::debug::Alias(&in_power_suspension_);
   base::debug::Alias(&is_backgrounded_);
 
+  GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogKill);
+
   // Deliberately crash the process to create a crash dump.
   *((volatile int*)0) = 0xdeadface;
 }
 
+void GpuWatchdogThreadImplV2::GpuWatchdogHistogram(
+    GpuWatchdogThreadEvent thread_event) {
+  UMA_HISTOGRAM_ENUMERATION("GPU.WatchdogThread.Event.V2", thread_event);
+  UMA_HISTOGRAM_ENUMERATION("GPU.WatchdogThread.Event", thread_event);
+}
+
 }  // namespace gpu
diff --git a/gpu/ipc/service/gpu_watchdog_thread_v2.h b/gpu/ipc/service/gpu_watchdog_thread_v2.h
index 059f1031..cf8021ab 100644
--- a/gpu/ipc/service/gpu_watchdog_thread_v2.h
+++ b/gpu/ipc/service/gpu_watchdog_thread_v2.h
@@ -22,6 +22,7 @@
   void OnBackgrounded() override;
   void OnForegrounded() override;
   void OnInitComplete() override;
+  void GpuWatchdogHistogram(GpuWatchdogThreadEvent thread_event) override;
 
   // Implements base::Thread.
   void Init() override;
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index 3139e75..f60be815 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -238,6 +238,7 @@
   const ui::CARendererLayerParams overlay_as_calayer_params(
       false,        // is_clipped
       gfx::Rect(),  // clip_rect
+      0,            // clip_rect_corner_radius
       0,            // sorting_context_id
       gfx::Transform(), image,
       crop_rect,            // contents_rect
diff --git a/infra/config/cr-buildbucket.cfg b/infra/config/cr-buildbucket.cfg
index 591774c..0566864 100644
--- a/infra/config/cr-buildbucket.cfg
+++ b/infra/config/cr-buildbucket.cfg
@@ -790,9 +790,9 @@
 builder_mixins {
   name: "xcode-11-caches"
   caches: {
-    # Cache for Xcode 11 (build version 11m337n) needed for iOS FYI builds.
-    name: "xcode_ios_11m337n"
-    path: "xcode_ios_11m337n.app"
+    # Cache for Xcode 11 (build version 11m362v) needed for iOS FYI builds.
+    name: "xcode_ios_11m362v"
+    path: "xcode_ios_11m362v.app"
   }
 }
 
diff --git a/ios/build/bots/chromium.fyi/ios13-beta-simulator.json b/ios/build/bots/chromium.fyi/ios13-beta-simulator.json
index 946380f..b5009a1 100644
--- a/ios/build/bots/chromium.fyi/ios13-beta-simulator.json
+++ b/ios/build/bots/chromium.fyi/ios13-beta-simulator.json
@@ -22,7 +22,7 @@
       "include": "eg2_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "pool":"Chrome",
       "host os": "Mac-10.14.4",
       "optional_dimensions": {
@@ -36,7 +36,7 @@
       "include": "eg2_tests.json",
       "device type": "iPad (6th generation)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "pool":"Chrome",
       "host os": "Mac-10.14.4",
       "optional_dimensions": {
@@ -105,7 +105,7 @@
       "include": "common_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -118,7 +118,7 @@
       "include": "eg_cq_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -131,7 +131,7 @@
       "include": "eg_cq_tests.json",
       "device type": "iPad Pro (12.9-inch)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -144,7 +144,7 @@
       "include": "eg_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -157,7 +157,7 @@
       "include": "eg_tests.json",
       "device type": "iPad Air (3rd generation)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -170,7 +170,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPhone 6s Plus",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -183,7 +183,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -196,7 +196,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPad Air 2",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
diff --git a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
index 5dcb4f7..0b495c5 100644
--- a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
+++ b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
@@ -2,7 +2,7 @@
   "comments": [
     "Runs tests on 64-bit iOS 11.4 and 12.1 and 13.0 tests"
   ],
-  "xcode build version": "11m337n",
+  "xcode build version": "11m362v",
   "gn_args": [
     "goma_dir=\"$(goma_dir)\"",
     "is_component_build=false",
diff --git a/ios/build/bots/chromium.mac/ios13-beta-simulator.json b/ios/build/bots/chromium.mac/ios13-beta-simulator.json
index 9028b26d..47e618d3a 100644
--- a/ios/build/bots/chromium.mac/ios13-beta-simulator.json
+++ b/ios/build/bots/chromium.mac/ios13-beta-simulator.json
@@ -24,7 +24,7 @@
       "include": "eg2_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "pool":"Chrome",
       "host os": "Mac-10.14.4",
       "optional_dimensions": {
@@ -38,7 +38,7 @@
       "include": "eg2_tests.json",
       "device type": "iPad (6th generation)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "pool":"Chrome",
       "host os": "Mac-10.14.4",
       "optional_dimensions": {
@@ -107,7 +107,7 @@
       "include": "common_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -120,7 +120,7 @@
       "include": "eg_cq_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -133,7 +133,7 @@
       "include": "eg_cq_tests.json",
       "device type": "iPad Pro (12.9-inch)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -146,7 +146,7 @@
       "include": "eg_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -159,7 +159,7 @@
       "include": "eg_tests.json",
       "device type": "iPad Air (3rd generation)",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -172,7 +172,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPhone 6s Plus",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -185,7 +185,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPhone X",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
@@ -198,7 +198,7 @@
       "include": "screen_size_dependent_tests.json",
       "device type": "iPad Air 2",
       "os": "13.0",
-      "xcode build version": "11m337n",
+      "xcode build version": "11m362v",
       "host os": "Mac-10.14.4",
       "pool":"Chrome",
       "optional_dimensions": {
diff --git a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
index 83bd054..a068433 100644
--- a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
+++ b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
@@ -5,7 +5,7 @@
     "Note: This file exists only to support the trybot.",
     "It should be kept in sync with the CI configuration in ../chromium.fyi/."
   ],
-  "xcode build version": "11m337n",
+  "xcode build version": "11m362v",
   "gn_args": [
     "goma_dir=\"$(goma_dir)\"",
     "is_component_build=false",
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 42351656..55b988e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -477,6 +477,7 @@
 <translation id="7961015016161918242">በፍጹም</translation>
 <translation id="7971521879845308059">ብቅ-ባዮችን አግድ</translation>
 <translation id="7982789257301363584">አውታረ መረብ</translation>
+<translation id="8007420562015504427">ማንነት የማያሳውቅ ፍለጋ</translation>
 <translation id="8019783059653722575">ይህ ፎቶዎችን እንዲያስቀምጡ እና እንዲሰቅሉ ያስችልዎታል።</translation>
 <translation id="802154636333426148">ማውረድ አልተሳካም</translation>
 <translation id="8023878949384262191">ክፍሉን ይዘረጋዋል።</translation>
@@ -491,6 +492,7 @@
 <translation id="8225985093977202398">የተሸጎጡ ምስሎች እና ፋይሎች</translation>
 <translation id="8261506727792406068">ሰርዝ</translation>
 <translation id="8281781826761538115">ነባሪ - <ph name="DEFAULT_LOCALE" /></translation>
+<translation id="8319076807703933069">አዲስ ፍለጋ</translation>
 <translation id="8328777765163860529">ሁሉንም ዝጋ</translation>
 <translation id="8381750437846184350">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ ብሎ የአሰሳ ታሪክዎን እንዴት እንደሚጠቀምበት ይቆጣጠሩት</translation>
 <translation id="8407669440184693619">ለዚህ ጣቢያ ምንም የይለፍ ቃላት አልተገኙም</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 6e5657c..048c1fd9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -134,7 +134,7 @@
 <translation id="2800683595868705743">ট্যাব পরিবর্তনকারী থেকে বেরিয়ে যান</translation>
 <translation id="2830972654601096923">ঠিকানাগুলি ম্যানেজ করুন...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
-<translation id="2840687315230832938">প্রারম্ভিক সিঙ্ক সেট-আপ করা সম্পূর্ণ হয়নি</translation>
+<translation id="2840687315230832938">প্রারম্ভিক সিঙ্ক সেট-আপ সম্পূর্ণ হয়নি</translation>
 <translation id="2843803966603263712">অনুবাদ সেটিংস রিসেট করুন</translation>
 <translation id="2858204748079866344">আপনার গোপনীয়তা রক্ষার জন্য, Chrome এই ক্ষেত্রে আপনার পাসওয়ার্ডটি নিজে থেকে পূরণ করবে না।</translation>
 <translation id="285960592395650245">আবার ডাউনলোডের চেষ্টা করুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index eed669b..5f2932f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -477,6 +477,7 @@
 <translation id="7961015016161918242">Nunca</translation>
 <translation id="7971521879845308059">Bloquear ventanas emergentes</translation>
 <translation id="7982789257301363584">Red</translation>
+<translation id="8007420562015504427">Búsqueda en el modo incógnito</translation>
 <translation id="8019783059653722575">Te permite guardar fotos y cargarlas.</translation>
 <translation id="802154636333426148">Error en la descarga</translation>
 <translation id="8023878949384262191">Expande la sección.</translation>
@@ -491,6 +492,7 @@
 <translation id="8225985093977202398">Imágenes y archivos almacenados en caché</translation>
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8281781826761538115">Predeterminado: <ph name="DEFAULT_LOCALE" /></translation>
+<translation id="8319076807703933069">Nueva búsqueda</translation>
 <translation id="8328777765163860529">Cerrar todas</translation>
 <translation id="8381750437846184350">Controla la forma en que Google usa tu historial de navegación para personalizar Búsqueda, Ads y otros servicios de Google</translation>
 <translation id="8407669440184693619">No se encontraron contraseñas para este sitio</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index fdf580b..cbf0b6d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -477,6 +477,7 @@
 <translation id="7961015016161918242">Hindi Kailanman</translation>
 <translation id="7971521879845308059">I-block ang Mga Pop-up</translation>
 <translation id="7982789257301363584">Network</translation>
+<translation id="8007420562015504427">Paghahanap sa Incognito</translation>
 <translation id="8019783059653722575">Binibigyang-daan ka nito upang makapag-save at makapag-upload ng mga larawan.</translation>
 <translation id="802154636333426148">Hindi na-download</translation>
 <translation id="8023878949384262191">Pinapalawak ang seksyon.</translation>
@@ -491,6 +492,7 @@
 <translation id="8225985093977202398">Mga Naka-cache na Larawan at File</translation>
 <translation id="8261506727792406068">I-delete</translation>
 <translation id="8281781826761538115">Default - <ph name="DEFAULT_LOCALE" /></translation>
+<translation id="8319076807703933069">Bagong Paghahanap</translation>
 <translation id="8328777765163860529">Isara Lahat</translation>
 <translation id="8381750437846184350">Kontrolin kung paano ginagamit ng Google ang iyong history ng pag-browse para i-personalize ang Search, mga ad, at iba pang serbisyo ng Google</translation>
 <translation id="8407669440184693619">Walang nahanap na password para sa site na ito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index e1684e1..ce251da 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -436,7 +436,7 @@
 <translation id="7272437679830969316">તમારી ઓળખની ચકાસણી કરી શકાતી નથી. પાસવર્ડ કૉપિ કરેલો નથી.</translation>
 <translation id="7285236536143823449">હા, હું સંમત છું</translation>
 <translation id="7291368939935408496">પાસવર્ડ તૈયાર કરી રહ્યાં છીએ…</translation>
-<translation id="7293171162284876153">સિંક કરવાનું શરૂ કરવા માટે, "તમારો Chromeનો ડેટા સિંક કરો"ને ચાલુ કરો.</translation>
+<translation id="7293171162284876153">સિંક શરુ કરવા માટે, "તમારો Chromeનો ડેટા સિંક કરો" ચાલુ કરો.</translation>
 <translation id="7336264872878993241"><ph name="PERCENT" /> ટકા ડાઉનલોડ થઈ</translation>
 <translation id="7346909386216857016">બરાબર, સમજાઇ ગયું</translation>
 <translation id="7348502496356775519">બુકમાર્ક કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 10fb62a..27f9dd7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -437,7 +437,7 @@
 <translation id="7272437679830969316">तुमच्या ओळखीची पडताळणी करता आली नाही. पासवर्ड कॉपी केला नाही.</translation>
 <translation id="7285236536143823449">होय, मी तयार आहे</translation>
 <translation id="7291368939935408496">पासवर्ड तयार करत आहे…</translation>
-<translation id="7293171162284876153">सिंक सुरू करण्यासाठी "तुमचा Chrome डेटा सिंक करा" सुरू करा.</translation>
+<translation id="7293171162284876153">सिंक सुरू करण्यासाठी, "तुमचा Chrome डेटा सिंक करा" सुरू करा.</translation>
 <translation id="7336264872878993241"><ph name="PERCENT" /> टक्के डाउनलोड केले</translation>
 <translation id="7346909386216857016">ठीक आहे, समजले</translation>
 <translation id="7348502496356775519">बुकमार्क करा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 422e394..a002f77a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -134,7 +134,7 @@
 <translation id="2800683595868705743">தாவல் மாற்றியிலிருந்து வெளியேறு</translation>
 <translation id="2830972654601096923">முகவரிகளை நிர்வகி...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
-<translation id="2840687315230832938">ஒத்திசைவின் முதற்கட்ட அமைவு நிறைவடையவில்லை</translation>
+<translation id="2840687315230832938">ஒத்திசைப்பதற்கான முதற்கட்ட அமைவு முடியவில்லை</translation>
 <translation id="2843803966603263712">மொழியாக்க அமைப்புகளை மீட்டமை</translation>
 <translation id="2858204748079866344">உங்கள் தனியுரிமையைப் பாதுகாக்க, Chrome இந்தப் புலத்தில் உங்கள் கடவுச்சொல்லைத் தானாக நிரப்பாது.</translation>
 <translation id="285960592395650245">மீண்டும் பதிவிறக்கு</translation>
@@ -436,7 +436,7 @@
 <translation id="7272437679830969316">அடையாளத்தைச் சரிபார்க்க முடியவில்லை. கடவுச்சொல் நகலெடுக்கப்படவில்லை.</translation>
 <translation id="7285236536143823449">ஏற்கிறேன்</translation>
 <translation id="7291368939935408496">கடவுச்சொற்கள் தயாராகின்றன...</translation>
-<translation id="7293171162284876153">ஒத்திசைவைத் தொடங்க "உங்கள் Chrome தரவை ஒத்திசையுங்கள்" என்பதை ஆன் செய்யவும்.</translation>
+<translation id="7293171162284876153">ஒத்திசைவைத் தொடங்க "Chrome தரவை ஒத்திசை" என்பதை இயக்கவும்.</translation>
 <translation id="7336264872878993241"><ph name="PERCENT" /> சதவீதம் பதிவிறக்கப்பட்டது</translation>
 <translation id="7346909386216857016">சரி, புரிந்தது</translation>
 <translation id="7348502496356775519">புத்தகக்குறி</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index 8d5030a6..9cdce18 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -436,7 +436,7 @@
 <translation id="7272437679830969316">మీ గుర్తింపును ధృవీకరించడం సాధ్యపడలేదు. పాస్‌వర్డ్ కాపీ చేయబడలేదు.</translation>
 <translation id="7285236536143823449">సరే, నాకు సమ్మతమే</translation>
 <translation id="7291368939935408496">పాస్‌వర్డ్‌లను సిద్ధం చేస్తోంది...</translation>
-<translation id="7293171162284876153">సింక్ చేయడాన్ని ప్రారంభించడానికి, "మీ Chrome డేటాను సింక్ చేయి"ని ప్రారంభించండి.</translation>
+<translation id="7293171162284876153">సింక్‌ను మొదలుపెట్టడానికి, "మీ Chrome డేటాను సింక్ చేయడం" ఆన్ చేయండి</translation>
 <translation id="7336264872878993241"><ph name="PERCENT" /> శాతం డౌన్‌లోడ్ అయ్యింది</translation>
 <translation id="7346909386216857016">సరే, అర్థమైంది</translation>
 <translation id="7348502496356775519">బుక్‌‍మార్క్</translation>
diff --git a/ios/chrome/browser/infobars/BUILD.gn b/ios/chrome/browser/infobars/BUILD.gn
index 67937969..fcbde61 100644
--- a/ios/chrome/browser/infobars/BUILD.gn
+++ b/ios/chrome/browser/infobars/BUILD.gn
@@ -42,6 +42,7 @@
     "infobar_badge_tab_helper.h",
     "infobar_badge_tab_helper.mm",
     "infobar_badge_tab_helper_delegate.h",
+    "legacy_infobar_badge_tab_helper_delegate.h",
   ]
   deps = [
     ":infobars",
@@ -78,6 +79,7 @@
     "//base/test:test_support",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/infobars:public",
+    "//ios/chrome/browser/ui/badges:public",
     "//ios/chrome/browser/ui/infobars:feature_flags",
     "//ios/chrome/browser/ui/infobars:infobars_ui",
     "//ios/chrome/browser/ui/infobars:test_support",
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
index 8719ceb..279f9ea 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
@@ -5,17 +5,22 @@
 #ifndef IOS_CHROME_BROWSER_INFOBARS_INFOBAR_BADGE_TAB_HELPER_H_
 #define IOS_CHROME_BROWSER_INFOBARS_INFOBAR_BADGE_TAB_HELPER_H_
 
+#include <unordered_map>
+
 #include "base/scoped_observer.h"
 #import "ios/web/public/web_state/web_state_user_data.h"
 
 #include "components/infobars/core/infobar_manager.h"
 #import "ios/chrome/browser/infobars/infobar_type.h"
+#import "ios/chrome/browser/ui/badges/badge_item.h"
 
 namespace web {
 class WebState;
 }
 
 @protocol InfobarBadgeTabHelperDelegate;
+@protocol LegacyInfobarBadgeTabHelperDelegate;
+@class InfobarBadgeModel;
 
 // TabHelper that observes InfoBarManager. It updates an InfobarBadge delegate
 // for relevant Infobar changes.
@@ -27,18 +32,26 @@
   static void CreateForWebState(web::WebState* web_state);
   // Sets the InfobarBadgeTabHelperDelegate to |delegate|.
   void SetDelegate(id<InfobarBadgeTabHelperDelegate> delegate);
-  // Updates Infobar badge for the case where an Infobar banner of |infobarType|
-  // was dismissed.
-  void UpdateBadgeForInfobarBannerDismissed(InfobarType infobarType);
-  // Updates Infobar badge for the case where an Infobar modal of |infobarType|
+  // Sets the LegacyInfobarBadgeTabHelperDelegate to |delegate|.
+  // TODO(crbug.com/980800): Remove once BadgeMediator is the receiver of
+  // |delegate_|.
+  void SetLegacyDelegate(
+      id<LegacyInfobarBadgeTabHelperDelegate> legacy_delegate);
+  // Updates Infobar badge for the case where an Infobar banner of
+  // |infobar_type| was dismissed.
+  void UpdateBadgeForInfobarBannerDismissed(InfobarType infobar_type);
+  // Updates Infobar badge for the case where an Infobar modal of |infobar_type|
   // was presented.
-  void UpdateBadgeForInfobarModalPresented(InfobarType infobarType);
-  // Updates Infobar badge for the case where an Infobar modal of |infobarType|
+  void UpdateBadgeForInfobarModalPresented(InfobarType infobar_type);
+  // Updates Infobar badge for the case where an Infobar modal of |infobar_type|
   // was dismissed.
-  void UpdateBadgeForInfobarModalDismissed(InfobarType infobarType);
-  // Updates Infobar badge for the case where Infobar of |infobarType| was
+  void UpdateBadgeForInfobarModalDismissed(InfobarType infobar_type);
+  // Updates Infobar badge for the case where Infobar of |infobar_type| was
   // accepted.
-  void UpdateBadgeForInfobarAccepted(InfobarType infobarType);
+  void UpdateBadgeForInfobarAccepted(InfobarType infobar_type);
+
+  // Returns all BadgeItems for the TabHelper Webstate.
+  std::vector<id<BadgeItem>> GetInfobarBadgeItems();
 
   // Returns wheter an Infobar badge is being displayed for the TabHelper
   // Webstate.
@@ -64,14 +77,20 @@
   // Manages this object as an observer of infobars.
   ScopedObserver<infobars::InfoBarManager, infobars::InfoBarManager::Observer>
       infobar_observer_;
+
   // Delegate which displays the Infobar badge.
   __weak id<InfobarBadgeTabHelperDelegate> delegate_ = nil;
+  // Holds the state of each displaying badge keyed by its InfobarType.
+  std::unordered_map<InfobarType, InfobarBadgeModel*> infobar_badge_models_;
+
   // Returns wheter an Infobar is being displayed.
   bool is_infobar_displaying_;
   // The type of the Infobar being displayed.
   InfobarType infobar_type_;
   // Returns whether the Infobar badge is accepted.
   bool is_badge_accepted_ = false;
+  // Legacy delegate which displays the Infobar badge.
+  __weak id<LegacyInfobarBadgeTabHelperDelegate> legacy_delegate_ = nil;
 
   WEB_STATE_USER_DATA_KEY_DECL();
   DISALLOW_COPY_AND_ASSIGN(InfobarBadgeTabHelper);
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
index eb3bb742..4adf4b00b 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
@@ -5,8 +5,10 @@
 #include "ios/chrome/browser/infobars/infobar_badge_tab_helper.h"
 
 #include "ios/chrome/browser/infobars/infobar.h"
+#include "ios/chrome/browser/infobars/infobar_badge_model.h"
 #include "ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
+#include "ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h"
 #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
 #import "ios/chrome/browser/ui/infobars/infobar_ui_delegate.h"
 #import "ios/web/public/web_state/web_state.h"
@@ -31,25 +33,59 @@
   delegate_ = delegate;
 }
 
+void InfobarBadgeTabHelper::SetLegacyDelegate(
+    id<LegacyInfobarBadgeTabHelperDelegate> legacy_delegate) {
+  legacy_delegate_ = legacy_delegate;
+}
+
 void InfobarBadgeTabHelper::UpdateBadgeForInfobarBannerDismissed(
-    InfobarType infobarType) {
-  delegate_.badgeState &= ~InfobarBadgeStateSelected;
+    InfobarType infobar_type) {
+  if (legacy_delegate_) {
+    legacy_delegate_.badgeState &= ~InfobarBadgeStateSelected;
+  } else {
+    [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]];
+  }
 }
 
 void InfobarBadgeTabHelper::UpdateBadgeForInfobarModalPresented(
-    InfobarType infobarType) {
-  delegate_.badgeState |= InfobarBadgeStateSelected;
+    InfobarType infobar_type) {
+  if (legacy_delegate_) {
+    legacy_delegate_.badgeState |= InfobarBadgeStateSelected;
+  } else {
+    [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]];
+  }
 }
 
 void InfobarBadgeTabHelper::UpdateBadgeForInfobarModalDismissed(
-    InfobarType infobarType) {
-  delegate_.badgeState &= ~InfobarBadgeStateSelected;
+    InfobarType infobar_type) {
+  if (legacy_delegate_) {
+    legacy_delegate_.badgeState &= ~InfobarBadgeStateSelected;
+  } else {
+    [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]];
+  }
 }
 
 void InfobarBadgeTabHelper::UpdateBadgeForInfobarAccepted(
-    InfobarType infobarType) {
-  delegate_.badgeState |= InfobarBadgeStateAccepted;
-  is_badge_accepted_ = true;
+    InfobarType infobar_type) {
+  if (legacy_delegate_) {
+    legacy_delegate_.badgeState |= InfobarBadgeStateAccepted;
+    is_badge_accepted_ = true;
+  } else {
+    InfobarBadgeModel* badgeModel =
+        [[InfobarBadgeModel alloc] initWithInfobarType:infobar_type
+                                              accepted:YES];
+    [delegate_ updateInfobarBadge:badgeModel];
+    infobar_badge_models_[infobar_type] = badgeModel;
+  }
+}
+
+std::vector<id<BadgeItem>> InfobarBadgeTabHelper::GetInfobarBadgeItems() {
+  // Return all infobar badge items.
+  std::vector<id<BadgeItem>> infobar_badges_items;
+  for (auto const& infobar_badge : infobar_badge_models_) {
+    infobar_badges_items.push_back(infobar_badge.second);
+  }
+  return infobar_badges_items;
 }
 
 bool InfobarBadgeTabHelper::is_infobar_displaying() {
@@ -83,7 +119,9 @@
   this->UpdateBadgeForInfobar(infobar, true);
   // Set the badgeState to None to allow for selecting the infobar when the
   // banner is being presented.
-  delegate_.badgeState = InfobarBadgeStateNone;
+  if (legacy_delegate_) {
+    legacy_delegate_.badgeState = InfobarBadgeStateNone;
+  }
 }
 
 void InfobarBadgeTabHelper::OnInfoBarRemoved(infobars::InfoBar* infobar,
@@ -103,9 +141,24 @@
   InfoBarIOS* infobar_ios = static_cast<InfoBarIOS*>(infobar);
   id<InfobarUIDelegate> controller_ = infobar_ios->InfobarUIDelegate();
   if (IsInfobarUIRebootEnabled() && controller_.hasBadge) {
-    is_infobar_displaying_ = display;
-    infobar_type_ = controller_.infobarType;
-    [delegate_ displayBadge:display type:infobar_type_];
+    if (legacy_delegate_) {
+      is_infobar_displaying_ = display;
+      infobar_type_ = controller_.infobarType;
+      [legacy_delegate_ displayBadge:display type:infobar_type_];
+      return;
+    }
+    InfobarType infobar_type = controller_.infobarType;
+    if (display) {
+      InfobarBadgeModel* new_badge =
+          [[InfobarBadgeModel alloc] initWithInfobarType:infobar_type
+                                                accepted:NO];
+      infobar_badge_models_[infobar_type] = new_badge;
+      [delegate_ addInfobarBadge:new_badge];
+    } else {
+      InfobarBadgeModel* removed_badge = infobar_badge_models_[infobar_type];
+      infobar_badge_models_.erase(infobar_type);
+      [delegate_ removeInfobarBadge:removed_badge];
+    }
   }
 }
 
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h b/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h
index f3a28f36..d08b595 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h
@@ -7,29 +7,17 @@
 
 #import <Foundation/Foundation.h>
 
-#import "ios/chrome/browser/infobars/infobar_type.h"
-
-// States for the InfobarBadge.
-typedef NS_OPTIONS(NSUInteger, InfobarBadgeState) {
-  // Default state. e.g. the Banner is being displayed or there's nothing
-  // presenting.
-  InfobarBadgeStateNone = 0,
-  // The InfobarBadge is selected. e.g. The InfobarBadge was tapped so the
-  // InfobarModal has been presented.
-  InfobarBadgeStateSelected = 1 << 0,
-  // The InfobarBadge is accepted. e.g. The Infobar was accepted/confirmed, and
-  // the Infobar action has taken place.
-  InfobarBadgeStateAccepted = 1 << 1,
-};
+@protocol BadgeItem;
 
 // Delegate used by InfobarBadgeTabHelper to manage the Infobar badges.
 @protocol InfobarBadgeTabHelperDelegate
 
-// Asks the delegate to display or stop displaying a badge.
-- (void)displayBadge:(BOOL)display type:(InfobarType)infobarType;
-
-// Current state for the displayed InfobarBadge.
-@property(nonatomic, assign) InfobarBadgeState badgeState;
+// Asks the delegate to add a badge with the configuration of |badgeItem|.
+- (void)addInfobarBadge:(id<BadgeItem>)badgeItem;
+// Asks the delegate to remove a badge matching the badgeType of |badgeItem|.
+- (void)removeInfobarBadge:(id<BadgeItem>)badgeItem;
+// Asks the delegate to update the configuration of |badgeItem|.
+- (void)updateInfobarBadge:(id<BadgeItem>)badgeItem;
 
 @end
 
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm b/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
index 4f0eb18a..1163c2f 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
@@ -9,10 +9,10 @@
 #include "base/test/scoped_task_environment.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/infobars/infobar.h"
-#include "ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h"
 #include "ios/chrome/browser/infobars/infobar_container_ios.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
 #import "ios/chrome/browser/infobars/infobar_type.h"
+#include "ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_confirm_coordinator.h"
 #import "ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h"
 #import "ios/chrome/browser/ui/infobars/infobar_container_consumer.h"
@@ -30,7 +30,7 @@
 
 // InfobarTabHelperDelegate for testing.
 @interface InfobarBadgeTabHelperTestDelegate
-    : NSObject <InfobarBadgeTabHelperDelegate>
+    : NSObject <LegacyInfobarBadgeTabHelperDelegate>
 @property(nonatomic, assign) BOOL displayingBadge;
 @property(nonatomic, assign) InfobarType infobarType;
 @end
@@ -132,7 +132,7 @@
 
     // Create the InfobarBadgeTabHelper for web_state_ and set its delegate.
     InfobarBadgeTabHelper::CreateForWebState(&web_state_);
-    tab_helper()->SetDelegate(infobar_badge_tab_delegate_);
+    tab_helper()->SetLegacyDelegate(infobar_badge_tab_delegate_);
 
     // Configure the fake InfobarContainerCoordinator, and set its baseVC as
     // rootVC.
diff --git a/ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h b/ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h
new file mode 100644
index 0000000..ab88661
--- /dev/null
+++ b/ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h
@@ -0,0 +1,35 @@
+// 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 IOS_CHROME_BROWSER_INFOBARS_LEGACY_INFOBAR_BADGE_TAB_HELPER_DELEGATE_H_
+#define IOS_CHROME_BROWSER_INFOBARS_LEGACY_INFOBAR_BADGE_TAB_HELPER_DELEGATE_H_
+
+#import <Foundation/Foundation.h>
+
+#import "ios/chrome/browser/infobars/infobar_type.h"
+
+// States for the InfobarBadge.
+typedef NS_OPTIONS(NSUInteger, InfobarBadgeState) {
+  // Default state. e.g. the Banner is being displayed or there's nothing
+  // presenting.
+  InfobarBadgeStateNone = 0,
+  // The InfobarBadge is selected. e.g. The InfobarBadge was tapped so the
+  // InfobarModal has been presented.
+  InfobarBadgeStateSelected = 1 << 0,
+  // The InfobarBadge is accepted. e.g. The Infobar was accepted/confirmed, and
+  // the Infobar action has taken place.
+  InfobarBadgeStateAccepted = 1 << 1,
+};
+
+@protocol LegacyInfobarBadgeTabHelperDelegate
+
+// Asks the delegate to display or stop displaying a badge.
+- (void)displayBadge:(BOOL)display type:(InfobarType)infobarType;
+
+// Current state for the displayed InfobarBadge.
+@property(nonatomic, assign) InfobarBadgeState badgeState;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_INFOBARS_LEGACY_INFOBAR_BADGE_TAB_HELPER_DELEGATE_H_
diff --git a/ios/chrome/browser/signin/identity_manager_factory.cc b/ios/chrome/browser/signin/identity_manager_factory.cc
index 924b5e4..86329440 100644
--- a/ios/chrome/browser/signin/identity_manager_factory.cc
+++ b/ios/chrome/browser/signin/identity_manager_factory.cc
@@ -15,7 +15,6 @@
 #include "components/signin/core/browser/account_fetcher_service.h"
 #include "components/signin/core/browser/account_tracker_service.h"
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 #include "components/signin/core/browser/primary_account_manager.h"
 #include "components/signin/core/browser/primary_account_policy_manager_impl.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
@@ -97,14 +96,14 @@
 // static
 identity::IdentityManager* IdentityManagerFactory::GetForBrowserState(
     ios::ChromeBrowserState* browser_state) {
-  return static_cast<IdentityManagerWrapper*>(
+  return static_cast<identity::IdentityManager*>(
       GetInstance()->GetServiceForBrowserState(browser_state, true));
 }
 
 // static
 identity::IdentityManager* IdentityManagerFactory::GetForBrowserStateIfExists(
     ios::ChromeBrowserState* browser_state) {
-  return static_cast<IdentityManagerWrapper*>(
+  return static_cast<identity::IdentityManager*>(
       GetInstance()->GetServiceForBrowserState(browser_state, false));
 }
 
@@ -168,7 +167,7 @@
           SigninClientFactory::GetForBrowserState(browser_state),
           token_service.get(), account_tracker_service.get());
 
-  auto identity_manager = std::make_unique<IdentityManagerWrapper>(
+  auto identity_manager = std::make_unique<identity::IdentityManager>(
       std::move(account_tracker_service), std::move(token_service),
       std::move(gaia_cookie_manager_service),
       std::move(primary_account_manager), std::move(account_fetcher_service),
@@ -183,7 +182,7 @@
 }
 
 void IdentityManagerFactory::BrowserStateShutdown(web::BrowserState* context) {
-  auto* identity_manager = static_cast<IdentityManagerWrapper*>(
+  auto* identity_manager = static_cast<identity::IdentityManager*>(
       GetServiceForBrowserState(context, false));
   if (identity_manager) {
     for (auto& observer : observer_list_)
diff --git a/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.cc b/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.cc
index b01844c..c4324bc 100644
--- a/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.cc
+++ b/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "components/signin/core/browser/account_consistency_method.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 #include "components/signin/core/browser/test_signin_client.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/signin/device_accounts_provider_impl.h"
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm b/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm
index 09fed2c..52315d8 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm
@@ -9,7 +9,7 @@
 #include "components/omnibox/browser/location_bar_model.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/browser/infobars/infobar_badge_tab_helper.h"
-#include "ios/chrome/browser/infobars/infobar_badge_tab_helper_delegate.h"
+#include "ios/chrome/browser/infobars/legacy_infobar_badge_tab_helper_delegate.h"
 #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h"
 #import "ios/chrome/browser/search_engines/search_engines_util.h"
 #include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
@@ -34,7 +34,7 @@
 #endif
 
 @interface LocationBarMediator () <CRWWebStateObserver,
-                                   InfobarBadgeTabHelperDelegate,
+                                   LegacyInfobarBadgeTabHelperDelegate,
                                    SearchEngineObserving,
                                    WebStateListObserving>
 
@@ -187,7 +187,7 @@
       InfobarBadgeTabHelper* infobarBadgeTabHelper =
           InfobarBadgeTabHelper::FromWebState(_webState);
       DCHECK(infobarBadgeTabHelper);
-      infobarBadgeTabHelper->SetDelegate(self);
+      infobarBadgeTabHelper->SetLegacyDelegate(self);
       if (self.consumer) {
         // Whenever the WebState changes ask the corresponding
         // InfobarBadgeTabHelper if a badge should be displayed, and if its
diff --git a/ios/third_party/earl_grey2/BUILD.gn b/ios/third_party/earl_grey2/BUILD.gn
index 3074df9..e92442cb 100644
--- a/ios/third_party/earl_grey2/BUILD.gn
+++ b/ios/third_party/earl_grey2/BUILD.gn
@@ -8,7 +8,41 @@
 config("config") {
   include_dirs = [
     "//ios/third_party/earl_grey2/src",
+    "//ios/third_party/earl_grey2/src/AppFramework/Action",
+    "//ios/third_party/earl_grey2/src/AppFramework/Assertion",
+    "//ios/third_party/earl_grey2/src/AppFramework/Config",
+    "//ios/third_party/earl_grey2/src/AppFramework/Core",
+    "//ios/third_party/earl_grey2/src/AppFramework/DistantObject",
+    "//ios/third_party/earl_grey2/src/AppFramework/Error",
+    "//ios/third_party/earl_grey2/src/AppFramework/Event",
+    "//ios/third_party/earl_grey2/src/AppFramework/Keyboard",
+    "//ios/third_party/earl_grey2/src/AppFramework/Matcher",
+    "//ios/third_party/earl_grey2/src/AppFramework/Synchronization",
+    "//ios/third_party/earl_grey2/src/CommonLib",
+    "//ios/third_party/earl_grey2/src/CommonLib/Additions",
+    "//ios/third_party/earl_grey2/src/CommonLib/Assertion",
+    "//ios/third_party/earl_grey2/src/CommonLib/Config",
+    "//ios/third_party/earl_grey2/src/CommonLib/DistantObject",
+    "//ios/third_party/earl_grey2/src/CommonLib/Error",
+    "//ios/third_party/earl_grey2/src/CommonLib/Event",
+    "//ios/third_party/earl_grey2/src/CommonLib/Exceptions",
+    "//ios/third_party/earl_grey2/src/CommonLib/Matcher",
+    "//ios/third_party/earl_grey2/src/CommonLib/Provider",
+    "//ios/third_party/earl_grey2/src/UILib",
+    "//ios/third_party/earl_grey2/src/UILib/Additions",
+    "//ios/third_party/earl_grey2/src/UILib/Provider",
+    "//ios/third_party/earl_grey2/src/UILib/Traversal",
+    "//ios/third_party/earl_grey2/src/TestLib",
+    "//ios/third_party/earl_grey2/src/TestLib/AlertHandling",
+    "//ios/third_party/earl_grey2/src/TestLib/AppleInternals",
+    "//ios/third_party/earl_grey2/src/TestLib/Assertion",
+    "//ios/third_party/earl_grey2/src/TestLib/Condition",
+    "//ios/third_party/earl_grey2/src/TestLib/Config",
+    "//ios/third_party/earl_grey2/src/TestLib/Exception",
+    "//ios/third_party/earl_grey2/src/TestLib/DistantObject",
+    "//ios/third_party/earl_grey2/src/TestLib/XCTestCase",
     "//ios/third_party/edo/src",
+    "//ios/third_party/edo/src/Service/Sources",
   ]
 }
 
@@ -37,6 +71,7 @@
     "src/CommonLib/Additions/UIView+GREYCommon.h",
     "src/CommonLib/Additions/UIView+GREYCommon.m",
     "src/CommonLib/Assertion/GREYAssertion.h",
+    "src/CommonLib/Assertion/GREYAssertionBlock+Private.h",
     "src/CommonLib/Assertion/GREYAssertionBlock.h",
     "src/CommonLib/Assertion/GREYAssertionBlock.m",
     "src/CommonLib/Assertion/GREYAssertionDefinesPrivate.h",
@@ -147,12 +182,14 @@
     "src/UILib/Provider/GREYElementProvider.m",
     "src/UILib/Provider/GREYUIWindowProvider.h",
     "src/UILib/Provider/GREYUIWindowProvider.m",
-    "src/UILib/Traversal/GREYTraversal.h",
-    "src/UILib/Traversal/GREYTraversal.m",
     "src/UILib/Traversal/GREYTraversalBFS.h",
     "src/UILib/Traversal/GREYTraversalBFS.m",
     "src/UILib/Traversal/GREYTraversalDFS.h",
     "src/UILib/Traversal/GREYTraversalDFS.m",
+    "src/UILib/Traversal/GREYTraversalFunctions.h",
+    "src/UILib/Traversal/GREYTraversalFunctions.m",
+    "src/UILib/Traversal/GREYTraversalObject.h",
+    "src/UILib/Traversal/GREYTraversalObject.m",
   ]
 
   deps = [
@@ -190,6 +227,7 @@
     "src/AppFramework/Action/GREYActionsShorthand.h",
     "src/AppFramework/Config/GREYAppConfiguration.h",
     "src/AppFramework/Core/GREYElementInteraction.h",
+    "src/AppFramework/Core/GREYInteraction.h",
     "src/AppFramework/DistantObject/GREYHostApplicationDistantObject+GREYTestHelper.h",
     "src/AppFramework/DistantObject/GREYHostBackgroundDistantObject+GREYApp.h",
     "src/AppFramework/Error/GREYFailureScreenshotter.h",
@@ -211,6 +249,7 @@
   info_plist = "Info.plist"
 
   sources = [
+    "src/AppFramework/Action/GREYActionBlock+Private.h",
     "src/AppFramework/Action/GREYActionBlock.h",
     "src/AppFramework/Action/GREYActionBlock.m",
     "src/AppFramework/Action/GREYActions+Private.h",
@@ -285,7 +324,6 @@
     "src/AppFramework/Core/GREYElementFinder.m",
     "src/AppFramework/Core/GREYElementInteraction+Private.h",
     "src/AppFramework/Core/GREYElementInteraction.m",
-    "src/AppFramework/Core/GREYInteraction.h",
     "src/AppFramework/Core/GREYInteractionDataSource.h",
     "src/AppFramework/Delegate/GREYCAAnimationDelegate.h",
     "src/AppFramework/Delegate/GREYCAAnimationDelegate.m",
@@ -396,9 +434,6 @@
     "src/AppFramework/Matcher/GREYMatchersShorthand.m",
     "src/TestLib/AlertHandling/XCTestCase+GREYSystemAlertHandler.h",
     "src/TestLib/AlertHandling/XCTestCase+GREYSystemAlertHandler.m",
-    "src/TestLib/Analytics/GREYAnalytics.h",
-    "src/TestLib/Analytics/GREYAnalytics.m",
-    "src/TestLib/Analytics/GREYAnalyticsDelegate.h",
     "src/TestLib/AppleInternals/GREYXCTestAppleInternals.h",
     "src/TestLib/Assertion/GREYAssertionDefines.h",
     "src/TestLib/Condition/GREYCondition.h",
diff --git a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm
index 5f7464a..02e1af21d 100644
--- a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm
+++ b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm
@@ -15,7 +15,6 @@
 #include "components/signin/core/browser/account_fetcher_service.h"
 #include "components/signin/core/browser/account_tracker_service.h"
 #include "components/signin/core/browser/gaia_cookie_manager_service.h"
-#include "components/signin/core/browser/identity_manager_wrapper.h"
 #include "components/signin/core/browser/primary_account_manager.h"
 #include "components/signin/core/browser/primary_account_policy_manager_impl.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
@@ -114,7 +113,7 @@
 // static
 identity::IdentityManager* WebViewIdentityManagerFactory::GetForBrowserState(
     WebViewBrowserState* browser_state) {
-  return static_cast<IdentityManagerWrapper*>(
+  return static_cast<identity::IdentityManager*>(
       GetInstance()->GetServiceForBrowserState(browser_state, true));
 }
 
@@ -169,7 +168,7 @@
           WebViewSigninClientFactory::GetForBrowserState(browser_state),
           token_service.get(), account_tracker_service.get());
 
-  return std::make_unique<IdentityManagerWrapper>(
+  return std::make_unique<identity::IdentityManager>(
       std::move(account_tracker_service), std::move(token_service),
       std::move(gaia_cookie_manager_service),
       std::move(primary_account_manager), std::move(account_fetcher_service),
diff --git a/jingle/glue/thread_wrapper.cc b/jingle/glue/thread_wrapper.cc
index fcecbaf4..68204ab 100644
--- a/jingle/glue/thread_wrapper.cc
+++ b/jingle/glue/thread_wrapper.cc
@@ -13,6 +13,7 @@
 #include "base/lazy_instance.h"
 #include "base/stl_util.h"
 #include "base/threading/thread_local.h"
+#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/webrtc/rtc_base/physical_socket_server.h"
 
@@ -38,10 +39,10 @@
 // static
 void JingleThreadWrapper::EnsureForCurrentMessageLoop() {
   if (JingleThreadWrapper::current() == nullptr) {
-    base::MessageLoopCurrent message_loop = base::MessageLoopCurrent::Get();
     std::unique_ptr<JingleThreadWrapper> wrapper =
-        JingleThreadWrapper::WrapTaskRunner(message_loop->task_runner());
-    message_loop->AddDestructionObserver(wrapper.release());
+        JingleThreadWrapper::WrapTaskRunner(
+            base::ThreadTaskRunnerHandle::Get());
+    base::MessageLoopCurrent::Get()->AddDestructionObserver(wrapper.release());
   }
 
   DCHECK_EQ(rtc::Thread::Current(), current());
diff --git a/media/base/media_status.h b/media/base/media_status.h
index 5dc4ce9..f1e8b5c 100644
--- a/media/base/media_status.h
+++ b/media/base/media_status.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_BASE_MEDIA_STATUS_H_
 #define MEDIA_BASE_MEDIA_STATUS_H_
 
+#include "base/callback.h"
 #include "base/time/time.h"
 #include "media/base/media_export.h"
 
@@ -68,6 +69,11 @@
   bool reached_end_of_stream = false;
 };
 
+using RemotePlayStateChangeCB =
+    base::RepeatingCallback<void(MediaStatus::State)>;
+using RequestRemotePlayStateChangeCB =
+    base::OnceCallback<void(RemotePlayStateChangeCB)>;
+
 }  // namespace media
 
 #endif  // MEDIA_BASE_MEDIA_STATUS_H_
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 3e48fc7..3b40aee7 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -80,12 +80,6 @@
     // during playback.
     virtual void OnAudioDecoderChange(const std::string& name) = 0;
     virtual void OnVideoDecoderChange(const std::string& name) = 0;
-
-    // Executed whenever an important status change has happened, and that this
-    // change was not initiated by Pipeline or Pipeline::Client.
-    // Only used with FlingingRenderer, when an external device pauses/resumes
-    // a video that is playing remotely.
-    virtual void OnRemotePlayStateChange(MediaStatus::State state) = 0;
   };
 
   virtual ~Pipeline() {}
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index 5eb28968..781a6d6 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -137,7 +137,6 @@
   void OnVideoConfigChange(const VideoDecoderConfig& config) final;
   void OnVideoNaturalSizeChange(const gfx::Size& size) final;
   void OnVideoOpacityChange(bool opaque) final;
-  void OnRemotePlayStateChange(MediaStatus::State state) final;
 
   // Common handlers for notifications from renderers and demuxer.
   void OnPipelineError(PipelineStatus error);
@@ -758,15 +757,6 @@
                                              weak_pipeline_, config));
 }
 
-void PipelineImpl::RendererWrapper::OnRemotePlayStateChange(
-    MediaStatus::State state) {
-  DCHECK(media_task_runner_->BelongsToCurrentThread());
-
-  main_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&PipelineImpl::OnRemotePlayStateChange,
-                                weak_pipeline_, state));
-}
-
 void PipelineImpl::RendererWrapper::OnPipelineError(PipelineStatus error) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
   DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!";
@@ -1398,15 +1388,6 @@
   client_->OnVideoDecoderChange(name);
 }
 
-void PipelineImpl::OnRemotePlayStateChange(MediaStatus::State state) {
-  DVLOG(2) << __func__;
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(IsRunning());
-
-  DCHECK(client_);
-  client_->OnRemotePlayStateChange(state);
-}
-
 void PipelineImpl::OnSeekDone(bool is_suspended) {
   DVLOG(3) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/media/base/renderer_client.h b/media/base/renderer_client.h
index cad829b..4c47877 100644
--- a/media/base/renderer_client.h
+++ b/media/base/renderer_client.h
@@ -46,12 +46,6 @@
   // Executed for the first video frame and whenever opacity changes.
   // Only used if media stream contains a video track.
   virtual void OnVideoOpacityChange(bool opaque) = 0;
-
-  // Executed when the status of a video playing remotely is changed, without
-  // the change originating from the media::Pipeline that owns |this|.
-  // Only used with the FlingingRenderer, when an external device play/pauses
-  // videos, and WMPI needs to be updated accordingly.
-  virtual void OnRemotePlayStateChange(media::MediaStatus::State state) = 0;
 };
 
 }  // namespace media
diff --git a/media/base/renderer_factory_selector.cc b/media/base/renderer_factory_selector.cc
index ef2b579..ec96819 100644
--- a/media/base/renderer_factory_selector.cc
+++ b/media/base/renderer_factory_selector.cc
@@ -51,6 +51,18 @@
 void RendererFactorySelector::SetUseMediaPlayer(bool use_media_player) {
   use_media_player_ = use_media_player;
 }
+
+void RendererFactorySelector::StartRequestRemotePlayStateCB(
+    RequestRemotePlayStateChangeCB callback_request) {
+  DCHECK(!remote_play_state_change_cb_request_);
+  remote_play_state_change_cb_request_ = std::move(callback_request);
+}
+
+void RendererFactorySelector::SetRemotePlayStateChangeCB(
+    RemotePlayStateChangeCB callback) {
+  DCHECK(remote_play_state_change_cb_request_);
+  std::move(remote_play_state_change_cb_request_).Run(std::move(callback));
+}
 #endif
 
 void RendererFactorySelector::SetQueryIsRemotingActiveCB(
diff --git a/media/base/renderer_factory_selector.h b/media/base/renderer_factory_selector.h
index 6d929b1d4c..d6f055e 100644
--- a/media/base/renderer_factory_selector.h
+++ b/media/base/renderer_factory_selector.h
@@ -7,6 +7,8 @@
 
 #include "base/callback.h"
 #include "base/optional.h"
+#include "build/build_config.h"
+#include "media/base/media_status.h"
 #include "media/base/renderer_factory.h"
 
 namespace media {
@@ -61,12 +63,26 @@
   void SetQueryIsFlingingActiveCB(
       QueryIsFlingingActiveCB query_is_flinging_active_cb);
 
+#if defined(OS_ANDROID)
+  // Starts a request to receive a RemotePlayStateChangeCB, to be fulfilled
+  // later by passing a request via SetRemotePlayStateChangeCB().
+  // NOTE: There should be no pending request (this new one would overwrite it).
+  void StartRequestRemotePlayStateCB(
+      RequestRemotePlayStateChangeCB callback_request);
+
+  // Fulfills a request initiated by StartRequestRemotePlayStateCB().
+  // NOTE: There must be a pending request.
+  void SetRemotePlayStateChangeCB(RemotePlayStateChangeCB callback);
+#endif
+
  private:
   bool use_media_player_ = false;
 
   QueryIsRemotingActiveCB query_is_remoting_active_cb_;
   QueryIsFlingingActiveCB query_is_flinging_active_cb_;
 
+  RequestRemotePlayStateChangeCB remote_play_state_change_cb_request_;
+
   base::Optional<FactoryType> base_factory_type_;
   std::unique_ptr<RendererFactory> factories_[FACTORY_TYPE_MAX + 1];
   DISALLOW_COPY_AND_ASSIGN(RendererFactorySelector);
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index e8c3104..38df405 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -400,6 +400,11 @@
 
   if (frame_->IsAdSubframe())
     media_metrics_provider_->SetIsAdMedia();
+
+#if defined(OS_ANDROID)
+  renderer_factory_selector_->SetRemotePlayStateChangeCB(base::BindRepeating(
+      &WebMediaPlayerImpl::OnRemotePlayStateChange, weak_this_));
+#endif  // defined (OS_ANDROID)
 }
 
 WebMediaPlayerImpl::~WebMediaPlayerImpl() {
@@ -2269,18 +2274,6 @@
   UpdateSecondaryProperties();
 }
 
-void WebMediaPlayerImpl::OnRemotePlayStateChange(MediaStatus::State state) {
-  DCHECK(is_flinging_);
-
-  if (state == MediaStatus::State::PLAYING && Paused()) {
-    DVLOG(1) << __func__ << " requesting PLAY.";
-    client_->RequestPlay();
-  } else if (state == MediaStatus::State::PAUSED && !Paused()) {
-    DVLOG(1) << __func__ << " requesting PAUSE.";
-    client_->RequestPause();
-  }
-}
-
 void WebMediaPlayerImpl::OnFrameHidden() {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
 
@@ -2456,6 +2449,18 @@
 
   ScheduleRestart();
 }
+
+void WebMediaPlayerImpl::OnRemotePlayStateChange(MediaStatus::State state) {
+  DCHECK(is_flinging_);
+
+  if (state == MediaStatus::State::PLAYING && Paused()) {
+    DVLOG(1) << __func__ << " requesting PLAY.";
+    client_->RequestPlay();
+  } else if (state == MediaStatus::State::PAUSED && !Paused()) {
+    DVLOG(1) << __func__ << " requesting PAUSE.";
+    client_->RequestPause();
+  }
+}
 #endif  // defined(OS_ANDROID)
 
 void WebMediaPlayerImpl::SetPoster(const blink::WebURL& poster) {
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index feabb157..6dddc0b 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -250,6 +250,17 @@
   // been removed
   void FlingingStarted() override;
   void FlingingStopped() override;
+
+  // Called when the play/pause state of media playing on a remote cast device
+  // changes, and WMPI wasn't the originator of that change (e.g. a phone on the
+  // same network paused the cast device via the casting notification).
+  // This is only used by the FlingingRenderer/FlingingRendererClient, when we
+  // are flinging media (a.k.a. RemotePlayback).
+  // The consistency between the WMPI state and the cast device state is not
+  // guaranteed, and it a best effort, which can always be fixed by the user by
+  // tapping play/pause once. Attempts to enfore stronger consistency guarantees
+  // have lead to unstable states, and a worse user experience.
+  void OnRemotePlayStateChange(MediaStatus::State state);
 #endif
 
   // MediaObserverClient implementation.
@@ -338,7 +349,6 @@
   void OnVideoAverageKeyframeDistanceUpdate() override;
   void OnAudioDecoderChange(const std::string& name) override;
   void OnVideoDecoderChange(const std::string& name) override;
-  void OnRemotePlayStateChange(MediaStatus::State state) override;
 
   // Actually seek. Avoids causing |should_notify_time_changed_| to be set when
   // |time_updated| is false.
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index cada879a..523d22e 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -334,6 +334,9 @@
             DefaultRendererFactory::GetGpuFactoriesCB()));
     factory_selector->SetBaseFactoryType(
         RendererFactorySelector::FactoryType::DEFAULT);
+#if defined(OS_ANDROID)
+    factory_selector->StartRequestRemotePlayStateCB(base::DoNothing());
+#endif
 
     mojom::MediaMetricsProviderPtr provider;
     MediaMetricsProvider::Create(
diff --git a/media/filters/pipeline_controller_unittest.cc b/media/filters/pipeline_controller_unittest.cc
index 080fe78..0aab5b98 100644
--- a/media/filters/pipeline_controller_unittest.cc
+++ b/media/filters/pipeline_controller_unittest.cc
@@ -156,7 +156,6 @@
   void OnVideoAverageKeyframeDistanceUpdate() override {}
   void OnAudioDecoderChange(const std::string& name) override {}
   void OnVideoDecoderChange(const std::string& name) override {}
-  void OnRemotePlayStateChange(MediaStatus::State state) override {}
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
 
diff --git a/media/gpu/android/shared_image_video.cc b/media/gpu/android/shared_image_video.cc
index 9c3c2d7..e62d400 100644
--- a/media/gpu/android/shared_image_video.cc
+++ b/media/gpu/android/shared_image_video.cc
@@ -17,6 +17,7 @@
 #include "gpu/command_buffer/service/memory_tracking.h"
 #include "gpu/command_buffer/service/shared_context_state.h"
 #include "gpu/command_buffer/service/shared_image_representation.h"
+#include "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
 #include "gpu/command_buffer/service/skia_utils.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "gpu/vulkan/vulkan_device_queue.h"
@@ -222,6 +223,10 @@
   gpu::gles2::Texture* GetTexture() override { return texture_; }
 
   bool BeginAccess(GLenum mode) override {
+    // This representation should only be called for read.
+    DCHECK_EQ(mode,
+              static_cast<GLenum>(GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM));
+
     auto* video_backing = static_cast<SharedImageVideo*>(backing());
     DCHECK(video_backing);
     auto* codec_image = video_backing->codec_image_.get();
@@ -244,63 +249,6 @@
   DISALLOW_COPY_AND_ASSIGN(SharedImageRepresentationGLTextureVideo);
 };
 
-// GL backed Skia representation of SharedImageVideo.
-class SharedImageRepresentationVideoSkiaGL
-    : public gpu::SharedImageRepresentationSkia {
- public:
-  SharedImageRepresentationVideoSkiaGL(gpu::SharedImageManager* manager,
-                                       gpu::SharedImageBacking* backing,
-                                       gpu::MemoryTypeTracker* tracker)
-      : gpu::SharedImageRepresentationSkia(manager, backing, tracker) {}
-
-  ~SharedImageRepresentationVideoSkiaGL() override = default;
-
-  sk_sp<SkSurface> BeginWriteAccess(
-      int final_msaa_count,
-      const SkSurfaceProps& surface_props,
-      std::vector<GrBackendSemaphore>* begin_semaphores,
-      std::vector<GrBackendSemaphore>* end_semaphores) override {
-    // Writes are not intended to used for video backed representations.
-    NOTIMPLEMENTED();
-    return nullptr;
-  }
-
-  void EndWriteAccess(sk_sp<SkSurface> surface) override { NOTIMPLEMENTED(); }
-
-  sk_sp<SkPromiseImageTexture> BeginReadAccess(
-      std::vector<GrBackendSemaphore>* begin_semaphores,
-      std::vector<GrBackendSemaphore>* end_semaphores) override {
-    if (promise_texture_)
-      return promise_texture_;
-
-    auto* video_backing = static_cast<SharedImageVideo*>(backing());
-    DCHECK(video_backing);
-    auto* codec_image = video_backing->codec_image_.get();
-    auto* texture_owner = codec_image->texture_owner().get();
-
-    // Render the codec image.
-    codec_image->RenderToFrontBuffer();
-
-    // Bind the tex image if it's not already bound.
-    if (!texture_owner->binds_texture_on_update())
-      texture_owner->EnsureTexImageBound();
-    GrBackendTexture backend_texture;
-    if (!gpu::GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(),
-                                  GL_TEXTURE_EXTERNAL_OES, size(),
-                                  texture_owner->GetTextureId(), format(),
-                                  &backend_texture)) {
-      return nullptr;
-    }
-    promise_texture_ = SkPromiseImageTexture::Make(backend_texture);
-    return promise_texture_;
-  }
-
-  void EndReadAccess() override {}
-
- private:
-  sk_sp<SkPromiseImageTexture> promise_texture_;
-};
-
 // Vulkan backed Skia representation of SharedImageVideo.
 class SharedImageRepresentationVideoSkiaVk
     : public gpu::SharedImageRepresentationSkia {
@@ -495,9 +443,17 @@
   }
 
   DCHECK(context_state->GrContextIsGL());
-  // In GL mode, use the texture id of the TextureOwner.
-  return std::make_unique<SharedImageRepresentationVideoSkiaGL>(manager, this,
-                                                                tracker);
+  auto* texture = gpu::gles2::Texture::CheckedCast(
+      codec_image_->texture_owner()->GetTextureBase());
+  DCHECK(texture);
+
+  // In GL mode, create the SharedImageRepresentationGLTextureVideo
+  // representation to use with SharedImageRepresentationVideoSkiaGL.
+  auto gl_representation =
+      std::make_unique<SharedImageRepresentationGLTextureVideo>(
+          manager, this, tracker, texture);
+  return gpu::SharedImageRepresentationSkiaGL::Create(
+      std::move(gl_representation), nullptr, manager, this, tracker);
 }
 
 }  // namespace media
diff --git a/media/mojo/README.md b/media/mojo/README.md
index 652e62be..963a30d7 100644
--- a/media/mojo/README.md
+++ b/media/mojo/README.md
@@ -169,6 +169,60 @@
 `media::mojom::InterfaceFactory` to make it clear which interfaces are used
 where.
 
+#### Specialized Out-of-Process media::Renderers
+
+The `media::Renderer` interface is a simple API, which is general enough to
+capture the essence of high level media playback commands. This allows us to
+extend the functionality of the `WebMediaPlayer` via **specialized renderers**.
+Specifically, we can build a sub-component that encapsulates the complexities of
+an advanced scenario, write a small adapter layer that exposes the component as
+a `media::Renderer`, and embed it within the existing `media::Pipeline` state
+machine. Specialized Renderers reduce technical complexity costs, by limiting
+the scope of details to the files and classes need them, by requiring little
+control flow boilerplate, and by generally having little impact on the default
+paths that `WebMediaPlayer` uses most of the time.
+
+Two examples of complex scenarios enabled by specialized renderers are: handling
+HLS playback on Android by delegating it to the Android Media Player (see
+`MediaPlayerRenderer`) and casting "src=" media from an Android phone to a cast
+device (see `FlingingRenderer`). Both of these examples have sub-components that
+need to live in the Browser process. We therefore proxy the
+`MediaPlayerRenderer` and `FlingingRenderer` to the Browser process, using the
+Mojo interfaces defined in renderer.mojom and renderer_extensions.mojom. This
+idea can be generalized to handle any special case *Foo scenario* as a
+**specialized OOP FooRenderer**.
+
+The classes required to create a *specialized OOP FooRenderer* come in pairs,
+serving similar purposes in their respective processes. By convention, the
+`FooRenderer` lives in the target process and the `FooRendererClient` lives in
+the Renderer process. The `MojoRenderer` and `MojoRendererService` proxies
+`media::Renderer` and `media::RendererClient` calls to/from the
+`FooRenderer[Client]`. One-off commands and events that can't be expressed as a
+`media::Renderer[Client]` call are carried across process boundaries by
+*renderer extensions* instead (see `renderer_extension.mojom`). The
+`FooRenderer[Client]Extension` mojo interfaces are implemented by their
+respective `FooRenderer[Client]` instances directly. The
+`FooRenderer[Client]Factory` sets up the scenario specific boilerplate, and all
+of the mojo interface pointers/requests needed to talk to the other process.
+Interface pointers and requests are connected across process boundaries when
+mojom::InterfaceFactory::CreateFooRenderer() is called. The end result is
+illustrated below:
+
+![Communication diagram for an OOP Renderer](./renderer_extension_diagram.png)
+
+To allow the creation and use of a FooRenderer within WebMediaPlayer, a
+`FooRendererClientFactory` must be built and passed to the
+`RendererFactorySelector`. The `RendererFactorySelector` must also be given a
+way to query if we are currently in a scenario that requires the use of the
+`FooRenderer`. When we enter a *Foo scenario*, cycling the `media::Pipeline` via
+suspend()/resume() should be enough for the next call to
+`RendererFactorySelector::GetCurrentFactory()` to return the
+`FooRendererClientFactory`. When `RendererFactory::CreateRenderer()` is called,
+the pipeline will receive a `FooRendererClient` as an opaque `media::Renderer`.
+The default pipeline state machine will control the OOP `FooRenderer`.
+When we exit the *Foo scenario*, cycling the pipeline once more should bring us
+back into the right state.
+
 #### Support Other Clients
 
 `MediaService`, as a `service_manager::Service`, can be used by clients other
@@ -288,6 +342,11 @@
     * NOT using `MediaService`. Instead, `MojoRendererService` is hosted by
       `RenderFrameHostImpl`/`MediaInterfaceProxy`  in the browser process
       directly.
+* Flinging media to cast devices (RemotePlayback API):
+    * `MojoRenderer` + `FlingingRenderer`
+    * NOT using `MediaService`. Instead, `MojoRendererService` is hosted by
+      `RenderFrameHostImpl`/`MediaInterfaceProxy`  in the browser process
+      directly.
 
 #### ChromeCast
 
diff --git a/media/mojo/renderer_extension_diagram.png b/media/mojo/renderer_extension_diagram.png
new file mode 100644
index 0000000..a70235e4
--- /dev/null
+++ b/media/mojo/renderer_extension_diagram.png
Binary files differ
diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc
index c781657c..1b95693 100644
--- a/media/mojo/services/mojo_renderer_service.cc
+++ b/media/mojo/services/mojo_renderer_service.cc
@@ -188,10 +188,6 @@
   client_->OnVideoNaturalSizeChange(size);
 }
 
-void MojoRendererService::OnRemotePlayStateChange(MediaStatus::State state) {
-  // TODO(https://crbug.com/956677, tguilbert): Remove this function.
-}
-
 void MojoRendererService::OnVideoOpacityChange(bool opaque) {
   DVLOG(2) << __func__ << "(" << opaque << ")";
   client_->OnVideoOpacityChange(opaque);
diff --git a/media/mojo/services/mojo_renderer_service.h b/media/mojo/services/mojo_renderer_service.h
index c4e8476..82d285e 100644
--- a/media/mojo/services/mojo_renderer_service.h
+++ b/media/mojo/services/mojo_renderer_service.h
@@ -88,7 +88,6 @@
   void OnVideoConfigChange(const VideoDecoderConfig& config) final;
   void OnVideoNaturalSizeChange(const gfx::Size& size) final;
   void OnVideoOpacityChange(bool opaque) final;
-  void OnRemotePlayStateChange(MediaStatus::State state) final;
 
   // Called when the MediaResourceShim is ready to go (has a config,
   // pipe handle, etc) and can be handed off to a renderer for use.
diff --git a/media/remoting/receiver.cc b/media/remoting/receiver.cc
index 8786d47..19af449 100644
--- a/media/remoting/receiver.cc
+++ b/media/remoting/receiver.cc
@@ -317,10 +317,5 @@
   rpc_broker_->SendMessageToRemote(std::move(rpc));
 }
 
-void Receiver::OnRemotePlayStateChange(MediaStatus::State state) {
-  // Only used with the FlingingRenderer.
-  NOTREACHED();
-}
-
 }  // namespace remoting
 }  // namespace media
diff --git a/media/remoting/receiver.h b/media/remoting/receiver.h
index 5534b2e..230bc95 100644
--- a/media/remoting/receiver.h
+++ b/media/remoting/receiver.h
@@ -40,7 +40,6 @@
   void OnVideoConfigChange(const VideoDecoderConfig& config) override;
   void OnVideoNaturalSizeChange(const gfx::Size& size) override;
   void OnVideoOpacityChange(bool opaque) override;
-  void OnRemotePlayStateChange(MediaStatus::State state) override;
 
   void OnReceivedRpc(std::unique_ptr<pb::RpcMessage> message);
   void OnReceivedBuffer(DemuxerStream::Type type,
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index de60742..ff9b0ec 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -65,10 +65,6 @@
     DCHECK(type_ == DemuxerStream::VIDEO);
     renderer_->OnVideoOpacityChange(opaque);
   }
-  void OnRemotePlayStateChange(MediaStatus::State state) override {
-    // Only used with FlingingRenderer.
-    NOTREACHED();
-  }
 
  private:
   DemuxerStream::Type type_;
diff --git a/mojo/core/channel_mac_fuzzer.cc b/mojo/core/channel_mac_fuzzer.cc
index d633929..87674bae 100644
--- a/mojo/core/channel_mac_fuzzer.cc
+++ b/mojo/core/channel_mac_fuzzer.cc
@@ -8,11 +8,9 @@
 #include "base/mac/mach_logging.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
-#include "base/test/scoped_feature_list.h"
 #include "mojo/core/channel.h"
 #include "mojo/core/entrypoints.h"
 #include "mojo/core/test/data/channel_mac/channel_mac.pb.h"
-#include "mojo/public/cpp/platform/features.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "testing/libfuzzer/fuzzers/mach/mach_message_converter.h"
 #include "testing/libfuzzer/proto/lpm_interface.h"
@@ -22,8 +20,6 @@
 class ChannelMacFuzzer {
  public:
   ChannelMacFuzzer() {
-    feature_list_.InitAndEnableFeature(mojo::features::kMojoChannelMac);
-
     mojo::core::InitializeCore();
 
     logging::SetMinLogLevel(logging::LOG_FATAL);
@@ -34,7 +30,6 @@
   }
 
  private:
-  base::test::ScopedFeatureList feature_list_;
   base::SingleThreadTaskExecutor io_task_executor_{base::MessagePump::Type::IO};
 };
 
diff --git a/mojo/core/message_pipe_dispatcher.cc b/mojo/core/message_pipe_dispatcher.cc
index 00fc12e2..482a685 100644
--- a/mojo/core/message_pipe_dispatcher.cc
+++ b/mojo/core/message_pipe_dispatcher.cc
@@ -158,6 +158,10 @@
     return MOJO_RESULT_UNKNOWN;
   }
 
+  // We may need to update anyone watching our signals in case we just exceeded
+  // the unread message count quota.
+  base::AutoLock lock(signal_lock_);
+  watchers_.NotifyState(GetHandleSignalsStateNoLock());
   return MOJO_RESULT_OK;
 }
 
@@ -194,6 +198,8 @@
 }
 
 MojoResult MessagePipeDispatcher::SetQuota(MojoQuotaType type, uint64_t limit) {
+  base::AutoLock lock(signal_lock_);
+
   switch (type) {
     case MOJO_QUOTA_TYPE_RECEIVE_QUEUE_LENGTH:
       if (limit == MOJO_QUOTA_LIMIT_NONE)
@@ -209,6 +215,23 @@
         receive_queue_memory_size_limit_ = limit;
       break;
 
+    case MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT:
+      if (limit == MOJO_QUOTA_LIMIT_NONE) {
+        unread_message_count_limit_.reset();
+        node_controller_->node()->SetAcknowledgeRequestInterval(port_, 0);
+      } else {
+        unread_message_count_limit_ = limit;
+        // Setting the acknowledge request interval for the port to half the
+        // unread quota limit, means the ack roundtrip has half the window to
+        // catch up with sent messages. In other words, if the producer is
+        // producing messages at a steady rate of limit/2 packets per message
+        // round trip or lower, the quota limit won't be exceeded. This is
+        // assuming the consumer is consuming messages at the same rate.
+        node_controller_->node()->SetAcknowledgeRequestInterval(
+            port_, (limit + 1) / 2);
+      }
+      break;
+
     default:
       return MOJO_RESULT_INVALID_ARGUMENT;
   }
@@ -219,6 +242,8 @@
 MojoResult MessagePipeDispatcher::QueryQuota(MojoQuotaType type,
                                              uint64_t* limit,
                                              uint64_t* usage) {
+  base::AutoLock lock(signal_lock_);
+
   ports::PortStatus port_status;
   if (node_controller_->node()->GetStatus(port_, &port_status) != ports::OK) {
     CHECK(in_transit_ || port_transferred_ || port_closed_);
@@ -236,6 +261,11 @@
       *usage = port_status.queued_num_bytes;
       break;
 
+    case MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT:
+      *limit = unread_message_count_limit_.value_or(MOJO_QUOTA_LIMIT_NONE);
+      *usage = port_status.unacknowledged_message_count;
+      break;
+
     default:
       return MOJO_RESULT_INVALID_ARGUMENT;
   }
@@ -384,6 +414,10 @@
   } else if (receive_queue_memory_size_limit_ &&
              port_status.queued_num_bytes > *receive_queue_memory_size_limit_) {
     rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED;
+  } else if (unread_message_count_limit_ &&
+             port_status.unacknowledged_message_count >
+                 *unread_message_count_limit_) {
+    rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED;
   }
   rv.satisfiable_signals |=
       MOJO_HANDLE_SIGNAL_PEER_CLOSED | MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED;
diff --git a/mojo/core/message_pipe_dispatcher.h b/mojo/core/message_pipe_dispatcher.h
index 4fef708..231cb021 100644
--- a/mojo/core/message_pipe_dispatcher.h
+++ b/mojo/core/message_pipe_dispatcher.h
@@ -106,6 +106,7 @@
   WatcherSet watchers_;
   base::Optional<uint64_t> receive_queue_length_limit_;
   base::Optional<uint64_t> receive_queue_memory_size_limit_;
+  base::Optional<uint64_t> unread_message_count_limit_;
 
   DISALLOW_COPY_AND_ASSIGN(MessagePipeDispatcher);
 };
diff --git a/mojo/core/quota_unittest.cc b/mojo/core/quota_unittest.cc
index bc26baf..e1d1a6e 100644
--- a/mojo/core/quota_unittest.cc
+++ b/mojo/core/quota_unittest.cc
@@ -256,6 +256,108 @@
   MojoClose(b);
 }
 
+TEST_F(QuotaTest, BasicUnreadMessageCount) {
+  MojoHandle a, b;
+  CreateMessagePipe(&a, &b);
+
+  uint64_t limit = 0;
+  uint64_t usage = 0;
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(MOJO_QUOTA_LIMIT_NONE, limit);
+  EXPECT_EQ(0u, usage);
+
+  const uint64_t kTestLimit = 42;
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoSetQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, kTestLimit,
+                         nullptr));
+
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(kTestLimit, limit);
+  EXPECT_EQ(0u, usage);
+
+  const std::string kTestMessage = "doot";
+  WriteMessage(a, kTestMessage);
+
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(kTestLimit, limit);
+  EXPECT_EQ(usage, 1u);
+
+  MojoClose(a);
+  MojoClose(b);
+}
+
+TEST_F(QuotaTest, UnreadMessageCountLimitExceeded) {
+  MojoHandle a, b;
+  CreateMessagePipe(&a, &b);
+
+  const uint64_t kMaxUnreadMessageCount = 4;
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoSetQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT,
+                         kMaxUnreadMessageCount, nullptr));
+
+  MojoHandleSignalsState signals;
+  EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(a, &signals));
+  EXPECT_FALSE(signals.satisfied_signals & MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED);
+
+  const std::string kTestMessage = "msg";
+  WriteMessage(a, kTestMessage);
+
+  uint64_t limit = 0;
+  uint64_t usage = 0;
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(kMaxUnreadMessageCount, limit);
+  EXPECT_EQ(1u, usage);
+
+  EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(a, &signals));
+  EXPECT_FALSE(signals.satisfied_signals & MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED);
+
+  // Push the endpoint over quota and ensure that it signals accordingly.
+  WriteMessage(a, kTestMessage);
+  WriteMessage(a, kTestMessage);
+  WriteMessage(a, kTestMessage);
+  WriteMessage(a, kTestMessage);
+  WaitForSignals(a, MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED);
+
+  EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(a, &signals));
+  EXPECT_TRUE(signals.satisfied_signals & MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED);
+
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(kMaxUnreadMessageCount, limit);
+  EXPECT_EQ(5u, usage);
+
+  // Read the messages and wait for QUOTA_EXCEEDED on the other end to go back
+  // low. There's some hysteresis in the signaling, so it's not sufficient to
+  // read a single packet, but reading below the quota size should work.
+  EXPECT_EQ(kTestMessage, ReadMessage(b));
+  EXPECT_EQ(kTestMessage, ReadMessage(b));
+  EXPECT_EQ(kTestMessage, ReadMessage(b));
+  EXPECT_EQ(kTestMessage, ReadMessage(b));
+  WaitForSignals(a, MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED,
+                 MOJO_TRIGGER_CONDITION_SIGNALS_UNSATISFIED);
+
+  EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(a, &signals));
+  EXPECT_FALSE(signals.satisfied_signals & MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED);
+
+  EXPECT_EQ(MOJO_RESULT_OK,
+            MojoQueryQuota(a, MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT, nullptr,
+                           &limit, &usage));
+  EXPECT_EQ(kMaxUnreadMessageCount, limit);
+  EXPECT_LE(1u, usage);
+
+  MojoClose(a);
+  MojoClose(b);
+}
+
 TEST_F(QuotaTest, TrapQuotaExceeded) {
   // Simple sanity check to verify that QUOTA_EXCEEDED signals can be trapped
   // like any other signals.
diff --git a/mojo/core/test/multiprocess_test_helper.cc b/mojo/core/test/multiprocess_test_helper.cc
index 8784353..505b07d 100644
--- a/mojo/core/test/multiprocess_test_helper.cc
+++ b/mojo/core/test/multiprocess_test_helper.cc
@@ -26,7 +26,6 @@
 #include "base/task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "mojo/public/cpp/platform/features.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/platform/platform_channel_endpoint.h"
 #include "mojo/public/cpp/platform/platform_channel_server_endpoint.h"
@@ -120,21 +119,15 @@
 #if !defined(OS_FUCHSIA)
     case LaunchType::NAMED_CHILD:
     case LaunchType::NAMED_PEER: {
-#if defined(OS_POSIX)
 #if defined(OS_MACOSX)
-      if (base::FeatureList::IsEnabled(features::kMojoChannelMac)) {
-        server_name = NamedPlatformChannel::ServerNameFromUTF8(
-            "mojo.test." + base::NumberToString(base::RandUint64()));
-      } else {
-#endif  // defined(OS_MACOSX)
-        base::FilePath temp_dir;
-        CHECK(base::PathService::Get(base::DIR_TEMP, &temp_dir));
-        server_name =
-            temp_dir.AppendASCII(base::NumberToString(base::RandUint64()))
-                .value();
-#if defined(OS_MACOSX)
-      }
-#endif  // defined(OS_MACOSX)
+      server_name = NamedPlatformChannel::ServerNameFromUTF8(
+          "mojo.test." + base::NumberToString(base::RandUint64()));
+#elif defined(OS_POSIX)
+      base::FilePath temp_dir;
+      CHECK(base::PathService::Get(base::DIR_TEMP, &temp_dir));
+      server_name =
+          temp_dir.AppendASCII(base::NumberToString(base::RandUint64()))
+              .value();
 #elif defined(OS_WIN)
       server_name = base::NumberToString16(base::RandUint64());
 #else
diff --git a/mojo/public/c/system/quota.h b/mojo/public/c/system/quota.h
index 721c0e1..e817578 100644
--- a/mojo/public/c/system/quota.h
+++ b/mojo/public/c/system/quota.h
@@ -61,6 +61,11 @@
 // signal on that endpoint. May only be set on message pipe handles.
 #define MOJO_QUOTA_TYPE_RECEIVE_QUEUE_MEMORY_SIZE ((MojoQuotaType)1)
 
+// Limits the number of sent, unread messages which can be queued on a message
+// pipe endpoint before raising a |MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED| signal on
+// that  endpoint. May only be set on message pipe handles.
+#define MOJO_QUOTA_TYPE_UNREAD_MESSAGE_COUNT ((MojoQuotaType)2)
+
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/mojo/public/cpp/platform/BUILD.gn b/mojo/public/cpp/platform/BUILD.gn
index 3ed0ab6e..8e1e014 100644
--- a/mojo/public/cpp/platform/BUILD.gn
+++ b/mojo/public/cpp/platform/BUILD.gn
@@ -8,7 +8,6 @@
   output_name = "mojo_cpp_platform"
 
   public = [
-    "features.h",
     "platform_channel.h",
     "platform_channel_endpoint.h",
     "platform_channel_server_endpoint.h",
@@ -16,7 +15,6 @@
   ]
 
   sources = [
-    "features.cc",
     "named_platform_channel_win.cc",
     "platform_channel.cc",
     "platform_channel_endpoint.cc",
diff --git a/mojo/public/cpp/platform/features.cc b/mojo/public/cpp/platform/features.cc
deleted file mode 100644
index 80f3be9c..0000000
--- a/mojo/public/cpp/platform/features.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/cpp/platform/features.h"
-
-namespace mojo {
-namespace features {
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-// Enables the ChannelMac implementation, which uses Mach IPC as the underlying
-// transport mechanism for PlatformChannel. Otherwise, macOS defaults to using
-// ChannelPosix.
-const base::Feature kMojoChannelMac{"MojoChannelMac",
-                                    base::FEATURE_ENABLED_BY_DEFAULT};
-#endif
-
-}  // namespace features
-}  // namespace mojo
diff --git a/mojo/public/cpp/platform/features.h b/mojo/public/cpp/platform/features.h
deleted file mode 100644
index 0ab2980..0000000
--- a/mojo/public/cpp/platform/features.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_PUBLIC_CPP_PLATFORM_FEATURES_H_
-#define MOJO_PUBLIC_CPP_PLATFORM_FEATURES_H_
-
-#include "base/component_export.h"
-#include "base/feature_list.h"
-#include "build/build_config.h"
-
-namespace mojo {
-namespace features {
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-COMPONENT_EXPORT(MOJO_CPP_PLATFORM)
-extern const base::Feature kMojoChannelMac;
-#endif
-
-}  // namespace features
-}  // namespace mojo
-
-#endif  // MOJO_PUBLIC_CPP_PLATFORM_FEATURES_H_
diff --git a/mojo/public/cpp/platform/named_platform_channel_posix.cc b/mojo/public/cpp/platform/named_platform_channel_posix.cc
index 3cc7e7d..9082ac4d 100644
--- a/mojo/public/cpp/platform/named_platform_channel_posix.cc
+++ b/mojo/public/cpp/platform/named_platform_channel_posix.cc
@@ -15,8 +15,6 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
-#include "build/build_config.h"
-#include "mojo/public/cpp/platform/features.h"
 
 namespace mojo {
 
@@ -79,26 +77,10 @@
 
 }  // namespace
 
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-// Temporarily forward declare named_platform_channel_mac.cc symbols.
-namespace NamedPlatformChannelMac {
-PlatformChannelServerEndpoint CreateServerEndpoint(
-    const NamedPlatformChannel::Options& options,
-    NamedPlatformChannel::ServerName* server_name);
-PlatformChannelEndpoint CreateClientEndpoint(
-    const NamedPlatformChannel::ServerName& server_name);
-}  // namespace NamedPlatformChannelMac
-#endif
-
 // static
 PlatformChannelServerEndpoint NamedPlatformChannel::CreateServerEndpoint(
     const Options& options,
     ServerName* server_name) {
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-  if (base::FeatureList::IsEnabled(features::kMojoChannelMac)) {
-    return NamedPlatformChannelMac::CreateServerEndpoint(options, server_name);
-  }
-#endif
   ServerName name = options.server_name;
   if (name.empty())
     name = GenerateRandomServerName(options);
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc
index 9eafc5fa..b1f456e 100644
--- a/net/nqe/network_quality_estimator.cc
+++ b/net/nqe/network_quality_estimator.cc
@@ -372,6 +372,8 @@
                                    NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP);
   AddAndNotifyObserversOfRTT(http_rtt_observation);
   throughput_analyzer_->NotifyBytesRead(request);
+  throughput_analyzer_->NotifyExpectedResponseContentSize(
+      request, request.GetExpectedContentSize());
 }
 
 void NetworkQualityEstimator::NotifyBytesRead(const URLRequest& request) {
diff --git a/net/nqe/throughput_analyzer.cc b/net/nqe/throughput_analyzer.cc
index f34bc1b1..bf51acc 100644
--- a/net/nqe/throughput_analyzer.cc
+++ b/net/nqe/throughput_analyzer.cc
@@ -41,6 +41,9 @@
 namespace nqe {
 
 namespace internal {
+// The default content size of a HTML response body. It is set to the median
+// HTML response content size, i.e. 1.8kB.
+constexpr int64_t kDefaultContentSizeBytes = 1800;
 
 ThroughputAnalyzer::ThroughputAnalyzer(
     const NetworkQualityEstimator* network_quality_estimator,
@@ -57,6 +60,7 @@
       last_connection_change_(tick_clock_->NowTicks()),
       window_start_time_(base::TimeTicks()),
       bits_received_at_window_start_(0),
+      total_response_content_size_(0),
       disable_throughput_measurements_(false),
       use_localhost_requests_for_tests_(false),
       net_log_(net_log) {
@@ -126,9 +130,25 @@
   DCHECK(tick_clock_);
 }
 
+void ThroughputAnalyzer::UpdateResponseContentSize(const URLRequest* request,
+                                                   int64_t response_size) {
+  DCHECK_LE(0, response_size);
+  // Updates the map and the counter. Subtracts the previous stored response
+  // content size if an old record exists in the map.
+  if (response_content_sizes_.find(request) != response_content_sizes_.end()) {
+    total_response_content_size_ +=
+        response_size - response_content_sizes_[request];
+  } else {
+    total_response_content_size_ += response_size;
+  }
+  response_content_sizes_[request] = response_size;
+}
+
 void ThroughputAnalyzer::NotifyStartTransaction(const URLRequest& request) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
+  UpdateResponseContentSize(&request, kDefaultContentSizeBytes);
+
   if (disable_throughput_measurements_)
     return;
 
@@ -173,6 +193,12 @@
 void ThroughputAnalyzer::NotifyRequestCompleted(const URLRequest& request) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
+  // Remove the request from the inflight requests if it presents in the map.
+  if (response_content_sizes_.find(&request) != response_content_sizes_.end()) {
+    total_response_content_size_ -= response_content_sizes_[&request];
+    response_content_sizes_.erase(&request);
+  }
+
   if (disable_throughput_measurements_)
     return;
 
@@ -224,6 +250,16 @@
   MaybeStartThroughputObservationWindow();
 }
 
+void ThroughputAnalyzer::NotifyExpectedResponseContentSize(
+    const URLRequest& request,
+    int64_t expected_content_size) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  // Updates when the value is valid.
+  if (expected_content_size >= 0) {
+    UpdateResponseContentSize(&request, expected_content_size);
+  }
+}
+
 bool ThroughputAnalyzer::IsHangingWindow(int64_t bits_received,
                                          base::TimeDelta duration,
                                          double downstream_kbps_double) const {
@@ -354,6 +390,12 @@
   return requests_.size();
 }
 
+int64_t ThroughputAnalyzer::CountTotalContentSizeBytes() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  return total_response_content_size_;
+}
+
 bool ThroughputAnalyzer::DegradesAccuracy(const URLRequest& request) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
diff --git a/net/nqe/throughput_analyzer.h b/net/nqe/throughput_analyzer.h
index 22ee68fd..72e109c0 100644
--- a/net/nqe/throughput_analyzer.h
+++ b/net/nqe/throughput_analyzer.h
@@ -13,6 +13,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/optional.h"
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "net/base/net_export.h"
@@ -78,6 +79,13 @@
   // Notifies |this| that |request| has completed.
   void NotifyRequestCompleted(const URLRequest& request);
 
+  // Notifies |this| that |request| has an expected response body size in octets
+  // (8-bit bytes). |expected_content_size| is an estimate of total body length
+  // based on the Content-Length header field when available or a general size
+  // estimate when the Content-Length is not provided.
+  void NotifyExpectedResponseContentSize(const URLRequest& request,
+                                         int64_t expected_content_size);
+
   // Notifies |this| of a change in connection type.
   void OnConnectionTypeChanged();
 
@@ -93,12 +101,6 @@
   // Overrides the tick clock used by |this| for testing.
   void SetTickClockForTesting(const base::TickClock* tick_clock);
 
- protected:
-  // Exposed for testing.
-  bool disable_throughput_measurements() const {
-    return disable_throughput_measurements_;
-  }
-
   // Returns the number of bits received by Chromium so far. The count may not
   // start from zero, so the caller should only look at difference from a prior
   // call. The count is obtained by polling TrafficStats on Android, and
@@ -110,6 +112,17 @@
   // throughput.
   size_t CountInFlightRequests() const;
 
+  // Returns the sum of expected response content size in bytes for all inflight
+  // requests. Request with an unknown response content size have the default
+  // response content size.
+  int64_t CountTotalContentSizeBytes() const;
+
+ protected:
+  // Exposed for testing.
+  bool disable_throughput_measurements_for_testing() const {
+    return disable_throughput_measurements_;
+  }
+
   // Removes hanging requests from |requests_|. If any hanging requests are
   // detected to be in-flight, the observation window is ended. Protected for
   // testing.
@@ -124,6 +137,11 @@
  private:
   friend class TestThroughputAnalyzer;
 
+  // Mapping from URL request to the expected content size of the response body
+  // for that request. The map tracks all inflight requests. If the expected
+  // content size is not available, the value is set to the default value.
+  typedef std::unordered_map<const URLRequest*, int64_t> ResponseContentSizes;
+
   // Mapping from URL request to the last time data was received for that
   // request.
   typedef std::unordered_map<const URLRequest*, base::TimeTicks> Requests;
@@ -133,6 +151,12 @@
   // computation.
   typedef std::unordered_set<const URLRequest*> AccuracyDegradingRequests;
 
+  // Updates the response content size map for |request|. Also keeps the total
+  // response content size counter updated. Adds an new entry if there is no
+  // matching record in the map.
+  void UpdateResponseContentSize(const URLRequest* request,
+                                 int64_t response_size);
+
   // Returns true if downstream throughput can be recorded. In that case,
   // |downstream_kbps| is set to the computed downstream throughput (in
   // kilobits per second). If a downstream throughput observation is taken,
@@ -197,6 +221,13 @@
   // throughput computation. These requests are used in throughput computation.
   Requests requests_;
 
+  // Container that holds inflight request sizes. These requests are used in
+  // computing the total of response content size for all inflight requests.
+  ResponseContentSizes response_content_sizes_;
+
+  // The running total of response content size for all inflight requests.
+  int64_t total_response_content_size_;
+
   // Last time when the check for hanging requests was run.
   base::TimeTicks last_hanging_request_check_;
 
diff --git a/net/nqe/throughput_analyzer_unittest.cc b/net/nqe/throughput_analyzer_unittest.cc
index 6d5c32b..ff1a531 100644
--- a/net/nqe/throughput_analyzer_unittest.cc
+++ b/net/nqe/throughput_analyzer_unittest.cc
@@ -87,8 +87,9 @@
     context->set_host_resolver(&mock_host_resolver_);
   }
 
-  using internal::ThroughputAnalyzer::disable_throughput_measurements;
   using internal::ThroughputAnalyzer::CountInFlightRequests;
+  using internal::ThroughputAnalyzer::
+      disable_throughput_measurements_for_testing;
   using internal::ThroughputAnalyzer::EraseHangingRequests;
   using internal::ThroughputAnalyzer::IsHangingWindow;
 
@@ -126,7 +127,8 @@
     TestURLRequestContext context;
     throughput_analyzer.AddIPAddressResolution(&context);
 
-    ASSERT_FALSE(throughput_analyzer.disable_throughput_measurements());
+    ASSERT_FALSE(
+        throughput_analyzer.disable_throughput_measurements_for_testing());
     base::circular_deque<std::unique_ptr<URLRequest>> requests;
 
     // Start more requests than the maximum number of requests that can be held
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h
index 639ca0b..341029b 100644
--- a/net/quic/quic_flags_list.h
+++ b/net/quic/quic_flags_list.h
@@ -115,10 +115,6 @@
 // instead rely on the existing check that bytes_in_flight > 0
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_optimize_inflight_check, false)
 
-// When you\'re app-limited entering recovery, stay app-limited until you exit
-// recovery in QUIC BBR.
-QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_app_limited_recovery, false)
-
 // If true, stop resetting ideal_next_packet_send_time_ in pacing sender.
 QUIC_FLAG(
     bool,
@@ -153,13 +149,6 @@
           FLAGS_quic_reloadable_flag_quic_stop_reading_when_level_triggered,
           false)
 
-// If true, QuicSession::HasPendingCryptoData checks whether the crypto stream's
-// send buffer is empty. This flag fixes a bug where the retransmission alarm
-// mode is wrong for the first CHLO packet.
-QUIC_FLAG(bool,
-          FLAGS_quic_reloadable_flag_quic_fix_has_pending_crypto_data,
-          true)
-
 // When the STMP connection option is sent by the client, timestamps in the QUIC
 // ACK frame are sent and processed.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_send_timestamps, false)
@@ -180,14 +169,11 @@
 // packets as no longer inflight when they're retransmitted.
 QUIC_FLAG(bool,
           FLAGS_quic_reloadable_flag_quic_loss_removes_from_inflight,
-          false)
+          true)
 
 // If true, QuicEpollClock::Now() will monotonically increase.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_monotonic_epoll_clock, false)
 
-// If true, public reset packets sent from GFE will include a kEPID tag.
-QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_spurious_ack_alarm, false)
-
 // If true, enables the BBS4 and BBS5 connection options, which reduce BBR's
 // pacing rate in STARTUP as more losses occur as a fraction of CWND.
 QUIC_FLAG(bool,
@@ -286,7 +272,7 @@
 QUIC_FLAG(
     bool,
     FLAGS_quic_reloadable_flag_quic_drop_invalid_small_initial_connection_id,
-    false)
+    true)
 
 // When true, QUIC Version Negotiation packets will randomly include fake
 // versions.
@@ -296,3 +282,28 @@
 
 // If true, use predictable version negotiation versions.
 QUIC_FLAG(bool, FLAGS_quic_disable_version_negotiation_grease_randomness, false)
+
+// Fixes quic::GetPacketHeaderSize and callsites when
+// QuicVersionHasLongHeaderLengths is false.
+QUIC_FLAG(bool,
+          FLAGS_quic_reloadable_flag_quic_fix_get_packet_header_size,
+          false)
+
+// Calls ClearQueuedPackets after sending a connection close packet.
+QUIC_FLAG(
+    bool,
+    FLAGS_quic_reloadable_flag_quic_clear_queued_packets_on_connection_close,
+    true)
+
+// If true, QuicConnection will be closed if a WindowUpdate frame is received on
+// a READ_UNIDIRECTIONAL stream.
+QUIC_FLAG(bool,
+          FLAGS_quic_reloadable_flag_quic_no_window_update_on_read_only_stream,
+          false)
+
+// If true and --quic_lumpy_pacing_size is 1, QUIC will use a lumpy size of two
+// for pacing.
+QUIC_FLAG(
+    bool,
+    FLAGS_quic_reloadable_flag_quic_change_default_lumpy_pacing_size_to_two,
+    false)
diff --git a/remoting/resources/remoting_strings_it.xtb b/remoting/resources/remoting_strings_it.xtb
index 61d353e..b96e755 100644
--- a/remoting/resources/remoting_strings_it.xtb
+++ b/remoting/resources/remoting_strings_it.xtb
@@ -57,7 +57,7 @@
 <translation id="2220529011494928058">Segnala un problema</translation>
 <translation id="2221097377466213233">Utilizza il tasto Ctrl di destra e il tasto Windows (⌘ su Mac)</translation>
 <translation id="2235518894410572517">Condividi questo computer per consentire la visione e il controllo a un altro utente.</translation>
-<translation id="2246783206985865117">Questa impostazione è gestita dalle norme sui domini.</translation>
+<translation id="2246783206985865117">Questa impostazione è gestita dai criteri del dominio.</translation>
 <translation id="2256115617011615191">Riavvia adesso</translation>
 <translation id="225614027745146050">Benvenuto</translation>
 <translation id="228809120910082333">Conferma il tuo account e il PIN per consentire l'accesso tramite Chromoting.</translation>
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index ef1245b..a90158d 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -2027,6 +2027,22 @@
             }
           ]
         },
+        "test": "web_engine_integration_tests"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "kvm": "1",
+              "os": "Ubuntu-16.04"
+            }
+          ]
+        },
         "test": "web_engine_unittests"
       },
       {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 4895eea..6b1f0234 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1618,12 +1618,6 @@
       'linux-chromeos-dbg',  # https://crbug.com/859307
     ],
   },
-  'web_engine_integration_tests': {
-    'remove_from': [
-      # chromium.linux
-      'Fuchsia x64', # https://crbug.com/971927
-    ],
-  },
   'webdriver_tests_suite': {
     'remove_from': [
       'Linux Tests',  # https://crbug.com/929689, https://crbug.com/936557
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom
index 2c35dd5..8977eb0 100644
--- a/third_party/blink/public/mojom/web_feature/web_feature.mojom
+++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2339,6 +2339,7 @@
   kCredentialManagerCreateSuccessWithUVM = 2950,
   kCredentialManagerGetSuccessWithUVM = 2951,
   kDiscardInputEventToMovingIframe = 2952,
+  kSignedExchangeSubresourcePrefetch = 2953,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/renderer/bindings/tests/results/core/boolean_or_element_sequence.cc b/third_party/blink/renderer/bindings/tests/results/core/boolean_or_element_sequence.cc
index 3afbc7b..e695fde 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/boolean_or_element_sequence.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/boolean_or_element_sequence.cc
@@ -15,7 +15,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h"
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_element.h"
-#include "third_party/blink/renderer/core/animation/element_animation.h"
 #include "third_party/blink/renderer/core/css/cssom/element_computed_style_map.h"
 #include "third_party/blink/renderer/core/dom/child_node.h"
 #include "third_party/blink/renderer/core/dom/non_document_type_child_node.h"
diff --git a/third_party/blink/renderer/bindings/tests/results/core/element_sequence_or_byte_string_double_or_string_record.cc b/third_party/blink/renderer/bindings/tests/results/core/element_sequence_or_byte_string_double_or_string_record.cc
index 87f398c..4ff805d 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/element_sequence_or_byte_string_double_or_string_record.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/element_sequence_or_byte_string_double_or_string_record.cc
@@ -16,7 +16,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h"
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_element.h"
-#include "third_party/blink/renderer/core/animation/element_animation.h"
 #include "third_party/blink/renderer/core/css/cssom/element_computed_style_map.h"
 #include "third_party/blink/renderer/core/dom/child_node.h"
 #include "third_party/blink/renderer/core/dom/non_document_type_child_node.h"
diff --git a/third_party/blink/renderer/core/animation/BUILD.gn b/third_party/blink/renderer/core/animation/BUILD.gn
index 1cd0b92..350deb6 100644
--- a/third_party/blink/renderer/core/animation/BUILD.gn
+++ b/third_party/blink/renderer/core/animation/BUILD.gn
@@ -8,6 +8,8 @@
   split_count = 5
 
   sources = [
+    "animatable.cc",
+    "animatable.h",
     "animation.cc",
     "animation.h",
     "animation_clock.cc",
@@ -52,6 +54,8 @@
     "css_clip_interpolation_type.h",
     "css_color_interpolation_type.cc",
     "css_color_interpolation_type.h",
+    "css_custom_length_interpolation_type.cc",
+    "css_custom_length_interpolation_type.h",
     "css_custom_list_interpolation_type.cc",
     "css_custom_list_interpolation_type.h",
     "css_default_interpolation_type.cc",
@@ -87,6 +91,8 @@
     "css_paint_interpolation_type.h",
     "css_path_interpolation_type.cc",
     "css_path_interpolation_type.h",
+    "css_percentage_interpolation_type.cc",
+    "css_percentage_interpolation_type.h",
     "css_position_axis_list_interpolation_type.cc",
     "css_position_axis_list_interpolation_type.h",
     "css_position_interpolation_type.h",
@@ -126,8 +132,6 @@
     "effect_model.h",
     "effect_stack.cc",
     "effect_stack.h",
-    "element_animation.cc",
-    "element_animation.h",
     "element_animations.cc",
     "element_animations.h",
     "filter_interpolation_functions.cc",
diff --git a/third_party/blink/renderer/core/animation/element_animation.cc b/third_party/blink/renderer/core/animation/animatable.cc
similarity index 73%
rename from third_party/blink/renderer/core/animation/element_animation.cc
rename to third_party/blink/renderer/core/animation/animatable.cc
index bbc894a..d33e6a1 100644
--- a/third_party/blink/renderer/core/animation/element_animation.cc
+++ b/third_party/blink/renderer/core/animation/animatable.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 "third_party/blink/renderer/core/animation/element_animation.h"
+#include "third_party/blink/renderer/core/animation/animatable.h"
 
 #include "third_party/blink/renderer/core/animation/animation.h"
 #include "third_party/blink/renderer/core/animation/document_timeline.h"
@@ -41,9 +41,8 @@
 
 }  // namespace
 
-Animation* ElementAnimation::animate(
+Animation* Animatable::animate(
     ScriptState* script_state,
-    Element& element,
     const ScriptValue& keyframes,
     UnrestrictedDoubleOrKeyframeAnimationOptions options,
     ExceptionState& exception_state) {
@@ -54,44 +53,45 @@
                     .value();
   }
 
+  Element* element = GetAnimationTarget();
   KeyframeEffectModelBase* effect = EffectInput::Convert(
-      &element, keyframes, composite, script_state, exception_state);
+      element, keyframes, composite, script_state, exception_state);
   if (exception_state.HadException())
     return nullptr;
 
   Timing timing =
-      TimingInput::Convert(options, &element.GetDocument(), exception_state);
+      TimingInput::Convert(options, &element->GetDocument(), exception_state);
   if (exception_state.HadException())
     return nullptr;
 
-  Animation* animation = animateInternal(element, effect, timing);
+  Animation* animation = animateInternal(*element, effect, timing);
   if (options.IsKeyframeAnimationOptions())
     animation->setId(options.GetAsKeyframeAnimationOptions()->id());
   return animation;
 }
 
-Animation* ElementAnimation::animate(ScriptState* script_state,
-                                     Element& element,
-                                     const ScriptValue& keyframes,
-                                     ExceptionState& exception_state) {
+Animation* Animatable::animate(ScriptState* script_state,
+                               const ScriptValue& keyframes,
+                               ExceptionState& exception_state) {
+  Element* element = GetAnimationTarget();
   KeyframeEffectModelBase* effect =
-      EffectInput::Convert(&element, keyframes, EffectModel::kCompositeReplace,
+      EffectInput::Convert(element, keyframes, EffectModel::kCompositeReplace,
                            script_state, exception_state);
   if (exception_state.HadException())
     return nullptr;
-  return animateInternal(element, effect, Timing());
+  return animateInternal(*element, effect, Timing());
 }
 
-HeapVector<Member<Animation>> ElementAnimation::getAnimations(
-    Element& element) {
-  element.GetDocument().UpdateStyleAndLayoutTreeForNode(&element);
+HeapVector<Member<Animation>> Animatable::getAnimations() {
+  Element* element = GetAnimationTarget();
+  element->GetDocument().UpdateStyleAndLayoutTreeForNode(element);
 
   HeapVector<Member<Animation>> animations;
-  if (!element.HasAnimations())
+  if (!element->HasAnimations())
     return animations;
 
   for (const auto& animation :
-       element.GetDocument().Timeline().getAnimations()) {
+       element->GetDocument().Timeline().getAnimations()) {
     DCHECK(animation->effect());
     if (ToKeyframeEffect(animation->effect())->target() == element &&
         (animation->effect()->IsCurrent() || animation->effect()->IsInEffect()))
@@ -100,9 +100,9 @@
   return animations;
 }
 
-Animation* ElementAnimation::animateInternal(Element& element,
-                                             KeyframeEffectModelBase* effect,
-                                             const Timing& timing) {
+Animation* Animatable::animateInternal(Element& element,
+                                       KeyframeEffectModelBase* effect,
+                                       const Timing& timing) {
   ReportFeaturePolicyViolationsIfNecessary(element.GetDocument(), *effect);
   auto* keyframe_effect =
       MakeGarbageCollected<KeyframeEffect>(&element, effect, timing);
diff --git a/third_party/blink/renderer/core/animation/element_animation.h b/third_party/blink/renderer/core/animation/animatable.h
similarity index 73%
rename from third_party/blink/renderer/core/animation/element_animation.h
rename to third_party/blink/renderer/core/animation/animatable.h
index c3862e27..2bc0c196 100644
--- a/third_party/blink/renderer/core/animation/element_animation.h
+++ b/third_party/blink/renderer/core/animation/animatable.h
@@ -28,8 +28,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ELEMENT_ANIMATION_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ELEMENT_ANIMATION_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ANIMATABLE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ANIMATABLE_H_
 
 #include "third_party/blink/renderer/bindings/core/v8/unrestricted_double_or_keyframe_animation_options.h"
 #include "third_party/blink/renderer/core/core_export.h"
@@ -46,24 +46,21 @@
 class ScriptState;
 struct Timing;
 
-// Implements the interface in ElementAnimation.idl.
-
-class CORE_EXPORT ElementAnimation {
-  STATIC_ONLY(ElementAnimation);
-
+// https://drafts.csswg.org/web-animations-1/#the-animatable-interface-mixin
+class CORE_EXPORT Animatable {
  public:
-  static Animation* animate(ScriptState*,
-                            Element&,
-                            const ScriptValue&,
-                            UnrestrictedDoubleOrKeyframeAnimationOptions,
-                            ExceptionState&);
+  // Returns the target element of the animation that these methods are being
+  // called on.
+  virtual Element* GetAnimationTarget() = 0;
 
-  static Animation* animate(ScriptState*,
-                            Element&,
-                            const ScriptValue&,
-                            ExceptionState&);
+  Animation* animate(ScriptState*,
+                     const ScriptValue&,
+                     UnrestrictedDoubleOrKeyframeAnimationOptions,
+                     ExceptionState&);
 
-  static HeapVector<Member<Animation>> getAnimations(Element&);
+  Animation* animate(ScriptState*, const ScriptValue&, ExceptionState&);
+
+  HeapVector<Member<Animation>> getAnimations();
 
  private:
   FRIEND_TEST_ALL_PREFIXES(AnimationSimTest, CustomPropertyBaseComputedStyle);
@@ -75,4 +72,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ELEMENT_ANIMATION_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_ANIMATABLE_H_
diff --git a/third_party/blink/renderer/core/animation/element_animation.idl b/third_party/blink/renderer/core/animation/animatable.idl
similarity index 83%
rename from third_party/blink/renderer/core/animation/element_animation.idl
rename to third_party/blink/renderer/core/animation/animatable.idl
index 1c596d3..4862ea4 100644
--- a/third_party/blink/renderer/core/animation/element_animation.idl
+++ b/third_party/blink/renderer/core/animation/animatable.idl
@@ -28,15 +28,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://drafts.csswg.org/web-animations/#the-animatable-interface
-// https://drafts.csswg.org/web-animations/#extensions-to-the-element-interface
-
-// TODO(dstockwell): This should be an Animatable interface, where Element
-// includes Animatable.
-
-[
-    ImplementedAs=ElementAnimation
-] partial interface Element {
+// https://drafts.csswg.org/web-animations/#the-animatable-interface-mixin
+interface mixin Animatable {
     [CallWith=ScriptState, Measure, RaisesException] Animation animate(object? keyframes, optional (unrestricted double or KeyframeAnimationOptions) options);
     [RuntimeEnabled=WebAnimationsAPI] sequence<Animation> getAnimations();
 };
+
+// https://drafts.csswg.org/web-animations-1/#extensions-to-the-element-interface
+Element includes Animatable;
+
+// https://drafts.csswg.org/web-animations-1/#extensions-to-the-pseudoelement-interface
+// TODO(smcgruer): Uncomment once CSSPseudoElement is implemented in Chromium.
+// CSSPseudoElement includes Animatable;
diff --git a/third_party/blink/renderer/core/animation/animation_sim_test.cc b/third_party/blink/renderer/core/animation/animation_sim_test.cc
index a1ea9be3..47b954ae 100644
--- a/third_party/blink/renderer/core/animation/animation_sim_test.cc
+++ b/third_party/blink/renderer/core/animation/animation_sim_test.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/public/web/web_script_source.h"
-#include "third_party/blink/renderer/core/animation/element_animation.h"
+#include "third_party/blink/renderer/core/animation/animatable.h"
 #include "third_party/blink/renderer/core/css/css_style_sheet.h"
 #include "third_party/blink/renderer/core/css/property_descriptor.h"
 #include "third_party/blink/renderer/core/css/property_registration.h"
@@ -75,7 +75,7 @@
   keyframes.push_back(keyframe);
   Timing timing;
   timing.iteration_duration = AnimationTimeDelta::FromSecondsD(1);
-  ElementAnimation::animateInternal(
+  Animatable::animateInternal(
       *target, MakeGarbageCollected<StringKeyframeEffectModel>(keyframes),
       timing);
 
@@ -97,7 +97,7 @@
   keyframes.push_back(std::move(keyframe));
   timing = Timing();
   timing.iteration_duration = AnimationTimeDelta::FromSecondsD(1);
-  ElementAnimation::animateInternal(
+  Animatable::animateInternal(
       *target, MakeGarbageCollected<StringKeyframeEffectModel>(keyframes),
       timing);
 
diff --git a/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.cc b/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.cc
new file mode 100644
index 0000000..b1e0986
--- /dev/null
+++ b/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.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 "third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.h"
+
+#include "third_party/blink/renderer/core/animation/length_interpolation_functions.h"
+#include "third_party/blink/renderer/core/css/css_primitive_value.h"
+
+namespace blink {
+
+namespace {
+
+bool HasPercentage(const NonInterpolableValue* non_interpolable_value) {
+  return LengthInterpolationFunctions::HasPercentage(non_interpolable_value);
+}
+
+bool HasPercentage(const InterpolationValue& value) {
+  return HasPercentage(value.non_interpolable_value.get());
+}
+
+}  // namespace
+
+InterpolationValue CSSCustomLengthInterpolationType::MaybeConvertNeutral(
+    const InterpolationValue&,
+    ConversionCheckers&) const {
+  return InterpolationValue(
+      LengthInterpolationFunctions::CreateNeutralInterpolableValue());
+}
+
+InterpolationValue CSSCustomLengthInterpolationType::MaybeConvertValue(
+    const CSSValue& value,
+    const StyleResolverState*,
+    ConversionCheckers&) const {
+  InterpolationValue interpolation_value =
+      LengthInterpolationFunctions::MaybeConvertCSSValue(value);
+  if (HasPercentage(interpolation_value))
+    return nullptr;
+  return interpolation_value;
+}
+
+const CSSValue* CSSCustomLengthInterpolationType::CreateCSSValue(
+    const InterpolableValue& interpolable_value,
+    const NonInterpolableValue* non_interpolable_value,
+    const StyleResolverState&) const {
+  DCHECK(!HasPercentage(non_interpolable_value));
+  return LengthInterpolationFunctions::CreateCSSValue(
+      interpolable_value, non_interpolable_value, kValueRangeAll);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.h b/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.h
new file mode 100644
index 0000000..1b20ad9
--- /dev/null
+++ b/third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.h
@@ -0,0 +1,59 @@
+// 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_CORE_ANIMATION_CSS_CUSTOM_LENGTH_INTERPOLATION_TYPE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CUSTOM_LENGTH_INTERPOLATION_TYPE_H_
+
+#include "third_party/blink/renderer/core/animation/css_interpolation_type.h"
+
+namespace blink {
+
+class CSSCustomLengthInterpolationType : public CSSInterpolationType {
+ public:
+  CSSCustomLengthInterpolationType(PropertyHandle property,
+                                   const PropertyRegistration* registration)
+      : CSSInterpolationType(property, registration) {
+    DCHECK(property.IsCSSCustomProperty());
+  }
+
+  InterpolationValue MaybeConvertNeutral(const InterpolationValue& underlying,
+                                         ConversionCheckers&) const final;
+  InterpolationValue MaybeConvertValue(const CSSValue&,
+                                       const StyleResolverState*,
+                                       ConversionCheckers&) const final;
+
+  const CSSValue* CreateCSSValue(const InterpolableValue&,
+                                 const NonInterpolableValue*,
+                                 const StyleResolverState&) const final;
+
+ private:
+  // These methods only apply to CSSInterpolationTypes used by standard CSS
+  // properties.
+  // CSSCustomLengthInterpolationType is only accessible via registered custom
+  // CSS properties.
+  InterpolationValue MaybeConvertStandardPropertyUnderlyingValue(
+      const ComputedStyle&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+  void ApplyStandardPropertyValue(const InterpolableValue&,
+                                  const NonInterpolableValue*,
+                                  StyleResolverState&) const final {
+    NOTREACHED();
+  }
+  InterpolationValue MaybeConvertInitial(const StyleResolverState&,
+                                         ConversionCheckers&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+  InterpolationValue MaybeConvertInherit(const StyleResolverState&,
+                                         ConversionCheckers&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CUSTOM_LENGTH_INTERPOLATION_TYPE_H_
diff --git a/third_party/blink/renderer/core/animation/css_interpolation_types_map.cc b/third_party/blink/renderer/core/animation/css_interpolation_types_map.cc
index e60c294..a7c06442 100644
--- a/third_party/blink/renderer/core/animation/css_interpolation_types_map.cc
+++ b/third_party/blink/renderer/core/animation/css_interpolation_types_map.cc
@@ -12,6 +12,7 @@
 #include "third_party/blink/renderer/core/animation/css_border_image_length_box_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_clip_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_color_interpolation_type.h"
+#include "third_party/blink/renderer/core/animation/css_custom_length_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_custom_list_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_default_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_filter_list_interpolation_type.h"
@@ -28,6 +29,7 @@
 #include "third_party/blink/renderer/core/animation/css_offset_rotate_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_paint_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_path_interpolation_type.h"
+#include "third_party/blink/renderer/core/animation/css_percentage_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_position_axis_list_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_position_interpolation_type.h"
 #include "third_party/blink/renderer/core/animation/css_ray_interpolation_type.h"
@@ -383,10 +385,14 @@
       return std::make_unique<CSSColorInterpolationType>(property,
                                                          &registration);
     case CSSSyntaxType::kLength:
+      return std::make_unique<CSSCustomLengthInterpolationType>(property,
+                                                                &registration);
     case CSSSyntaxType::kLengthPercentage:
-    case CSSSyntaxType::kPercentage:
       return std::make_unique<CSSLengthInterpolationType>(property,
                                                           &registration);
+    case CSSSyntaxType::kPercentage:
+      return std::make_unique<CSSPercentageInterpolationType>(property,
+                                                              &registration);
     case CSSSyntaxType::kNumber:
       return std::make_unique<CSSNumberInterpolationType>(property,
                                                           &registration);
diff --git a/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.cc b/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.cc
new file mode 100644
index 0000000..46408b17
--- /dev/null
+++ b/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.cc
@@ -0,0 +1,37 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/animation/css_percentage_interpolation_type.h"
+
+#include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
+
+namespace blink {
+
+InterpolationValue CSSPercentageInterpolationType::MaybeConvertNeutral(
+    const InterpolationValue&,
+    ConversionCheckers&) const {
+  return InterpolationValue(std::make_unique<InterpolableNumber>(0));
+}
+
+InterpolationValue CSSPercentageInterpolationType::MaybeConvertValue(
+    const CSSValue& value,
+    const StyleResolverState*,
+    ConversionCheckers&) const {
+  auto* primitive_value = DynamicTo<CSSPrimitiveValue>(value);
+  if (!primitive_value || !primitive_value->IsPercentage())
+    return nullptr;
+  return InterpolationValue(
+      std::make_unique<InterpolableNumber>(primitive_value->GetDoubleValue()));
+}
+
+const CSSValue* CSSPercentageInterpolationType::CreateCSSValue(
+    const InterpolableValue& value,
+    const NonInterpolableValue*,
+    const StyleResolverState&) const {
+  return CSSNumericLiteralValue::Create(
+      ToInterpolableNumber(value).Value(),
+      CSSPrimitiveValue::UnitType::kPercentage);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.h b/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.h
new file mode 100644
index 0000000..e39ee24
--- /dev/null
+++ b/third_party/blink/renderer/core/animation/css_percentage_interpolation_type.h
@@ -0,0 +1,59 @@
+// 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_CORE_ANIMATION_CSS_PERCENTAGE_INTERPOLATION_TYPE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_PERCENTAGE_INTERPOLATION_TYPE_H_
+
+#include "third_party/blink/renderer/core/animation/css_interpolation_type.h"
+
+namespace blink {
+
+class CSSPercentageInterpolationType : public CSSInterpolationType {
+ public:
+  CSSPercentageInterpolationType(PropertyHandle property,
+                                 const PropertyRegistration* registration)
+      : CSSInterpolationType(property, registration) {
+    DCHECK(property.IsCSSCustomProperty());
+  }
+
+  InterpolationValue MaybeConvertNeutral(const InterpolationValue& underlying,
+                                         ConversionCheckers&) const final;
+  InterpolationValue MaybeConvertValue(const CSSValue&,
+                                       const StyleResolverState*,
+                                       ConversionCheckers&) const final;
+
+  const CSSValue* CreateCSSValue(const InterpolableValue&,
+                                 const NonInterpolableValue*,
+                                 const StyleResolverState&) const final;
+
+ private:
+  // These methods only apply to CSSInterpolationTypes used by standard CSS
+  // properties.
+  // CSSPercentageInterpolationType is only accessible via registered custom CSS
+  // properties.
+  InterpolationValue MaybeConvertStandardPropertyUnderlyingValue(
+      const ComputedStyle&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+  void ApplyStandardPropertyValue(const InterpolableValue&,
+                                  const NonInterpolableValue*,
+                                  StyleResolverState&) const final {
+    NOTREACHED();
+  }
+  InterpolationValue MaybeConvertInitial(const StyleResolverState&,
+                                         ConversionCheckers&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+  InterpolationValue MaybeConvertInherit(const StyleResolverState&,
+                                         ConversionCheckers&) const final {
+    NOTREACHED();
+    return nullptr;
+  }
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_PERCENTAGE_INTERPOLATION_TYPE_H_
diff --git a/third_party/blink/renderer/core/animation/length_interpolation_functions.cc b/third_party/blink/renderer/core/animation/length_interpolation_functions.cc
index 8125dac..e1e0c19 100644
--- a/third_party/blink/renderer/core/animation/length_interpolation_functions.cc
+++ b/third_party/blink/renderer/core/animation/length_interpolation_functions.cc
@@ -136,6 +136,11 @@
   return true;
 }
 
+bool LengthInterpolationFunctions::HasPercentage(
+    const NonInterpolableValue* non_interpolable_value) {
+  return CSSLengthNonInterpolableValue::HasPercentage(non_interpolable_value);
+}
+
 void LengthInterpolationFunctions::Composite(
     std::unique_ptr<InterpolableValue>& underlying_interpolable_value,
     scoped_refptr<NonInterpolableValue>& underlying_non_interpolable_value,
@@ -231,16 +236,16 @@
       continue;
     }
     CSSCalcExpressionNode* current_node =
-        CSSCalcValue::CreateExpressionNode(current_value);
+        CSSCalcPrimitiveValue::Create(current_value);
     if (!root_node) {
-      root_node = CSSCalcValue::CreateExpressionNode(first_value);
+      root_node = CSSCalcPrimitiveValue::Create(first_value);
     }
-    root_node = CSSCalcValue::CreateExpressionNode(root_node, current_node,
-                                                   CSSMathOperator::kAdd);
+    root_node = CSSCalcBinaryOperation::Create(root_node, current_node,
+                                               CSSMathOperator::kAdd);
   }
 
   if (root_node) {
-    return CSSMathFunctionValue::Create(CSSCalcValue::Create(root_node));
+    return CSSMathFunctionValue::Create(root_node);
   }
   if (first_value) {
     return first_value;
diff --git a/third_party/blink/renderer/core/animation/length_interpolation_functions.h b/third_party/blink/renderer/core/animation/length_interpolation_functions.h
index 841ae0ebf..e765860 100644
--- a/third_party/blink/renderer/core/animation/length_interpolation_functions.h
+++ b/third_party/blink/renderer/core/animation/length_interpolation_functions.h
@@ -30,6 +30,7 @@
                                                  InterpolationValue&& end);
   static bool NonInterpolableValuesAreCompatible(const NonInterpolableValue*,
                                                  const NonInterpolableValue*);
+  static bool HasPercentage(const NonInterpolableValue*);
   static void Composite(std::unique_ptr<InterpolableValue>&,
                         scoped_refptr<NonInterpolableValue>&,
                         double underlying_fraction,
diff --git a/third_party/blink/renderer/core/core_idl_files.gni b/third_party/blink/renderer/core/core_idl_files.gni
index 37bf162..e93b9d0 100644
--- a/third_party/blink/renderer/core/core_idl_files.gni
+++ b/third_party/blink/renderer/core/core_idl_files.gni
@@ -519,8 +519,8 @@
 # interfaces with static bindings (in bindings/core/v8/)
 core_dependency_idl_files =
     get_path_info([
+                    "animation/animatable.idl",
                     "animation/document_animation.idl",
-                    "animation/element_animation.idl",
                     "css/font_face_source.idl",
                     "css/property_registration.idl",
                     "css/cssom/css_unit_values.idl",
diff --git a/third_party/blink/renderer/core/css/css_calculation_value.cc b/third_party/blink/renderer/core/css/css_calculation_value.cc
index f0fd1294..f2dcc50 100644
--- a/third_party/blink/renderer/core/css/css_calculation_value.cc
+++ b/third_party/blink/renderer/core/css/css_calculation_value.cc
@@ -30,6 +30,8 @@
 
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
 
+// TODO(xiaochengh): Rename to css_math_expression_node.cc
+
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value_mappings.h"
 #include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
@@ -129,39 +131,6 @@
   return false;
 }
 
-static String BuildCSSText(const String& expression) {
-  StringBuilder result;
-  result.Append("calc");
-  bool expression_has_single_term = expression[0] != '(';
-  if (expression_has_single_term)
-    result.Append('(');
-  result.Append(expression);
-  if (expression_has_single_term)
-    result.Append(')');
-  return result.ToString();
-}
-
-String CSSCalcValue::CustomCSSText() const {
-  return BuildCSSText(expression_->CustomCSSText());
-}
-
-bool CSSCalcValue::Equals(const CSSCalcValue& other) const {
-  return DataEquivalent(expression_, other.expression_);
-}
-
-double CSSCalcValue::ClampToPermittedRange(double value) const {
-  return non_negative_ && value < 0 ? 0 : value;
-}
-
-double CSSCalcValue::DoubleValue() const {
-  return ClampToPermittedRange(expression_->DoubleValue());
-}
-
-double CSSCalcValue::ComputeLengthPx(
-    const CSSToLengthConversionData& conversion_data) const {
-  return ClampToPermittedRange(expression_->ComputeLengthPx(conversion_data));
-}
-
 // ------ Start of CSSCalcPrimitiveValue member functions ------
 
 // static
@@ -802,44 +771,27 @@
   }
 };
 
-CSSCalcExpressionNode* CSSCalcValue::CreateExpressionNode(
-    CSSPrimitiveValue* value,
-    bool is_integer) {
-  return CSSCalcPrimitiveValue::Create(value, is_integer);
-}
-
-CSSCalcExpressionNode* CSSCalcValue::CreateExpressionNode(
-    CSSCalcExpressionNode* left_side,
-    CSSCalcExpressionNode* right_side,
-    CSSMathOperator op) {
-  return CSSCalcBinaryOperation::Create(left_side, right_side, op);
-}
-
-CSSCalcExpressionNode* CSSCalcValue::CreateExpressionNode(double pixels,
-                                                          double percent) {
-  return CreateExpressionNode(
-      CreateExpressionNode(
+// static
+CSSCalcExpressionNode* CSSCalcExpressionNode::CreateFromPixelsAndPercent(
+    double pixels,
+    double percent) {
+  return CSSCalcBinaryOperation::Create(
+      CSSCalcPrimitiveValue::Create(
           CSSNumericLiteralValue::Create(
               percent, CSSPrimitiveValue::UnitType::kPercentage),
           percent == trunc(percent)),
-      CreateExpressionNode(CSSNumericLiteralValue::Create(
-                               pixels, CSSPrimitiveValue::UnitType::kPixels),
-                           pixels == trunc(pixels)),
+      CSSCalcPrimitiveValue::Create(
+          CSSNumericLiteralValue::Create(pixels,
+                                         CSSPrimitiveValue::UnitType::kPixels),
+          pixels == trunc(pixels)),
       CSSMathOperator::kAdd);
 }
 
-CSSCalcValue* CSSCalcValue::Create(const CSSParserTokenRange& tokens,
-                                   ValueRange range) {
+// static
+CSSCalcExpressionNode* CSSCalcExpressionNode::ParseCalc(
+    const CSSParserTokenRange& tokens) {
   CSSCalcExpressionNodeParser parser;
-  CSSCalcExpressionNode* expression = parser.ParseCalc(tokens);
-
-  return expression ? MakeGarbageCollected<CSSCalcValue>(expression, range)
-                    : nullptr;
-}
-
-CSSCalcValue* CSSCalcValue::Create(CSSCalcExpressionNode* expression,
-                                   ValueRange range) {
-  return MakeGarbageCollected<CSSCalcValue>(expression, range);
+  return parser.ParseCalc(tokens);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/css_calculation_value.h b/third_party/blink/renderer/core/css/css_calculation_value.h
index b7090eb..0c6a54b 100644
--- a/third_party/blink/renderer/core/css/css_calculation_value.h
+++ b/third_party/blink/renderer/core/css/css_calculation_value.h
@@ -31,6 +31,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CALCULATION_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CALCULATION_VALUE_H_
 
+// TODO(xiaochengh): Rename to css_math_expression_node.h
+
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_math_operator.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
@@ -41,8 +43,6 @@
 
 namespace blink {
 
-class CalculationValue;
-
 // The order of this enum should not change since its elements are used as
 // indices in the addSubtractResult matrix.
 enum CalculationCategory {
@@ -59,8 +59,13 @@
   kCalcOther
 };
 
-class CSSCalcExpressionNode : public GarbageCollected<CSSCalcExpressionNode> {
+class CORE_EXPORT CSSCalcExpressionNode
+    : public GarbageCollected<CSSCalcExpressionNode> {
  public:
+  static CSSCalcExpressionNode* CreateFromPixelsAndPercent(double pixels,
+                                                           double percent);
+  static CSSCalcExpressionNode* ParseCalc(const CSSParserTokenRange& tokens);
+
   virtual bool IsPrimitiveValue() const { return false; }
   virtual bool IsBinaryOperation() const { return false; }
 
@@ -98,10 +103,10 @@
 };
 
 // TODO(crbug.com/825895): Rename it and make it store a CSSNumericLiteralValue
-class CSSCalcPrimitiveValue final : public CSSCalcExpressionNode {
+class CORE_EXPORT CSSCalcPrimitiveValue final : public CSSCalcExpressionNode {
  public:
   static CSSCalcPrimitiveValue* Create(CSSPrimitiveValue* value,
-                                       bool is_integer);
+                                       bool is_integer = false);
   static CSSCalcPrimitiveValue* Create(double value,
                                        CSSPrimitiveValue::UnitType type,
                                        bool is_integer);
@@ -136,7 +141,7 @@
   }
 };
 
-class CSSCalcBinaryOperation final : public CSSCalcExpressionNode {
+class CORE_EXPORT CSSCalcBinaryOperation final : public CSSCalcExpressionNode {
  public:
   static CSSCalcExpressionNode* Create(CSSCalcExpressionNode* left_side,
                                        CSSCalcExpressionNode* right_side,
@@ -203,57 +208,6 @@
   }
 };
 
-class CORE_EXPORT CSSCalcValue : public GarbageCollected<CSSCalcValue> {
- public:
-  static CSSCalcValue* Create(const CSSParserTokenRange&, ValueRange);
-  static CSSCalcValue* Create(CSSCalcExpressionNode*,
-                              ValueRange = kValueRangeAll);
-
-  static CSSCalcExpressionNode* CreateExpressionNode(CSSPrimitiveValue*,
-                                                     bool is_integer = false);
-  static CSSCalcExpressionNode* CreateExpressionNode(CSSCalcExpressionNode*,
-                                                     CSSCalcExpressionNode*,
-                                                     CSSMathOperator);
-  static CSSCalcExpressionNode* CreateExpressionNode(double pixels,
-                                                     double percent);
-
-  CSSCalcValue(CSSCalcExpressionNode* expression, ValueRange range)
-      : expression_(expression),
-        non_negative_(range == kValueRangeNonNegative) {}
-
-  scoped_refptr<CalculationValue> ToCalcValue(
-      const CSSToLengthConversionData& conversion_data) const {
-    PixelsAndPercent value(0, 0);
-    expression_->AccumulatePixelsAndPercent(conversion_data, value);
-    return CalculationValue::Create(
-        value, non_negative_ ? kValueRangeNonNegative : kValueRangeAll);
-  }
-  CalculationCategory Category() const { return expression_->Category(); }
-  bool IsInt() const { return expression_->IsInteger(); }
-  double DoubleValue() const;
-  bool IsNegative() const { return expression_->DoubleValue() < 0; }
-  ValueRange PermittedValueRange() {
-    return non_negative_ ? kValueRangeNonNegative : kValueRangeAll;
-  }
-  double ComputeLengthPx(const CSSToLengthConversionData&) const;
-  void AccumulateLengthArray(CSSLengthArray& length_array,
-                             double multiplier) const {
-    expression_->AccumulateLengthArray(length_array, multiplier);
-  }
-  CSSCalcExpressionNode* ExpressionNode() const { return expression_.Get(); }
-
-  String CustomCSSText() const;
-  bool Equals(const CSSCalcValue&) const;
-
-  void Trace(blink::Visitor* visitor) { visitor->Trace(expression_); }
-
- private:
-  double ClampToPermittedRange(double) const;
-
-  const Member<CSSCalcExpressionNode> expression_;
-  const bool non_negative_;
-};
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CALCULATION_VALUE_H_
diff --git a/third_party/blink/renderer/core/css/css_calculation_value_test.cc b/third_party/blink/renderer/core/css/css_calculation_value_test.cc
index e90935a..8df5a68 100644
--- a/third_party/blink/renderer/core/css/css_calculation_value_test.cc
+++ b/third_party/blink/renderer/core/css/css_calculation_value_test.cc
@@ -30,6 +30,8 @@
 
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
 
+// TODO(xiaochengh): Rename to css_math_expression_node_test.cc
+
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
@@ -86,7 +88,7 @@
 
   TestAccumulatePixelsAndPercent(
       conversion_data,
-      CSSCalcValue::CreateExpressionNode(
+      CSSCalcPrimitiveValue::Create(
           CSSNumericLiteralValue::Create(10,
                                          CSSPrimitiveValue::UnitType::kPixels),
           true),
@@ -94,12 +96,12 @@
 
   TestAccumulatePixelsAndPercent(
       conversion_data,
-      CSSCalcValue::CreateExpressionNode(
-          CSSCalcValue::CreateExpressionNode(
+      CSSCalcBinaryOperation::Create(
+          CSSCalcPrimitiveValue::Create(
               CSSNumericLiteralValue::Create(
                   10, CSSPrimitiveValue::UnitType::kPixels),
               true),
-          CSSCalcValue::CreateExpressionNode(
+          CSSCalcPrimitiveValue::Create(
               CSSNumericLiteralValue::Create(
                   20, CSSPrimitiveValue::UnitType::kPixels),
               true),
@@ -108,12 +110,12 @@
 
   TestAccumulatePixelsAndPercent(
       conversion_data,
-      CSSCalcValue::CreateExpressionNode(
-          CSSCalcValue::CreateExpressionNode(
+      CSSCalcBinaryOperation::Create(
+          CSSCalcPrimitiveValue::Create(
               CSSNumericLiteralValue::Create(
                   1, CSSPrimitiveValue::UnitType::kInches),
               true),
-          CSSCalcValue::CreateExpressionNode(
+          CSSCalcPrimitiveValue::Create(
               CSSNumericLiteralValue::Create(
                   2, CSSPrimitiveValue::UnitType::kNumber),
               true),
@@ -122,23 +124,23 @@
 
   TestAccumulatePixelsAndPercent(
       conversion_data,
-      CSSCalcValue::CreateExpressionNode(
-          CSSCalcValue::CreateExpressionNode(
-              CSSCalcValue::CreateExpressionNode(
+      CSSCalcBinaryOperation::Create(
+          CSSCalcBinaryOperation::Create(
+              CSSCalcPrimitiveValue::Create(
                   CSSNumericLiteralValue::Create(
                       50, CSSPrimitiveValue::UnitType::kPixels),
                   true),
-              CSSCalcValue::CreateExpressionNode(
+              CSSCalcPrimitiveValue::Create(
                   CSSNumericLiteralValue::Create(
                       0.25, CSSPrimitiveValue::UnitType::kNumber),
                   false),
               CSSMathOperator::kMultiply),
-          CSSCalcValue::CreateExpressionNode(
-              CSSCalcValue::CreateExpressionNode(
+          CSSCalcBinaryOperation::Create(
+              CSSCalcPrimitiveValue::Create(
                   CSSNumericLiteralValue::Create(
                       20, CSSPrimitiveValue::UnitType::kPixels),
                   true),
-              CSSCalcValue::CreateExpressionNode(
+              CSSCalcPrimitiveValue::Create(
                   CSSNumericLiteralValue::Create(
                       40, CSSPrimitiveValue::UnitType::kPercentage),
                   false),
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.cc b/third_party/blink/renderer/core/css/css_gradient_value.cc
index 71a6350..49130a7 100644
--- a/third_party/blink/renderer/core/css/css_gradient_value.cc
+++ b/third_party/blink/renderer/core/css/css_gradient_value.cc
@@ -33,6 +33,7 @@
 #include "base/stl_util.h"
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
 #include "third_party/blink/renderer/core/css/css_identifier_value.h"
+#include "third_party/blink/renderer/core/css/css_math_function_value.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
 #include "third_party/blink/renderer/core/css/css_value_pair.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
@@ -503,12 +504,13 @@
       } else if (stop.offset_->IsLength() ||
                  stop.offset_->IsCalculatedPercentageWithLength()) {
         float length;
-        if (stop.offset_->IsLength())
+        if (stop.offset_->IsLength()) {
           length = stop.offset_->ComputeLength<float>(conversion_data);
-        else
-          length = stop.offset_->CssCalcValue()
+        } else {
+          length = To<CSSMathFunctionValue>(stop.offset_.Get())
                        ->ToCalcValue(conversion_data)
                        ->Evaluate(gradient_length);
+        }
         stops[i].offset = (gradient_length > 0) ? length / gradient_length : 0;
       } else if (stop.offset_->IsAngle()) {
         stops[i].offset = stop.offset_->ComputeDegrees() / 360.0f;
@@ -682,7 +684,7 @@
            sign * primitive_value->GetFloatValue() / 100.f * edge_distance;
 
   if (primitive_value->IsCalculatedPercentageWithLength())
-    return origin + sign * primitive_value->CssCalcValue()
+    return origin + sign * To<CSSMathFunctionValue>(primitive_value)
                                ->ToCalcValue(conversion_data)
                                ->Evaluate(edge_distance);
 
diff --git a/third_party/blink/renderer/core/css/css_math_function_value.cc b/third_party/blink/renderer/core/css/css_math_function_value.cc
index 14efb05..f0f100c7 100644
--- a/third_party/blink/renderer/core/css/css_math_function_value.cc
+++ b/third_party/blink/renderer/core/css/css_math_function_value.cc
@@ -7,34 +7,146 @@
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
 #include "third_party/blink/renderer/platform/geometry/length.h"
 #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
 
 struct SameSizeAsCSSMathFunctionValue : CSSPrimitiveValue {
-  Member<void*> calc;
+  Member<void*> expression;
+  bool non_negative;
 };
 ASSERT_SIZE(CSSMathFunctionValue, SameSizeAsCSSMathFunctionValue);
 
 void CSSMathFunctionValue::TraceAfterDispatch(blink::Visitor* visitor) {
-  visitor->Trace(calc_);
+  visitor->Trace(expression_);
   CSSPrimitiveValue::TraceAfterDispatch(visitor);
 }
 
-CSSMathFunctionValue::CSSMathFunctionValue(CSSCalcValue* calc)
-    : CSSPrimitiveValue(UnitType::kCalc, kMathFunctionClass), calc_(calc) {}
+CSSMathFunctionValue::CSSMathFunctionValue(CSSCalcExpressionNode* expression,
+                                           ValueRange range)
+    : CSSPrimitiveValue(UnitType::kCalc, kMathFunctionClass),
+      expression_(expression),
+      non_negative_(range == kValueRangeNonNegative) {}
 
 // static
-CSSMathFunctionValue* CSSMathFunctionValue::Create(CSSCalcValue* calc) {
-  return MakeGarbageCollected<CSSMathFunctionValue>(calc);
+CSSMathFunctionValue* CSSMathFunctionValue::Create(
+    CSSCalcExpressionNode* expression,
+    ValueRange range) {
+  if (!expression)
+    return nullptr;
+  return MakeGarbageCollected<CSSMathFunctionValue>(expression, range);
 }
 
 // static
 CSSMathFunctionValue* CSSMathFunctionValue::Create(const Length& length,
                                                    float zoom) {
   const CalculationValue& calc = length.GetCalculationValue();
-  return Create(CSSCalcValue::Create(
-      CSSCalcValue::CreateExpressionNode(calc.Pixels() / zoom, calc.Percent()),
-      calc.GetValueRange()));
+  return Create(CSSCalcExpressionNode::CreateFromPixelsAndPercent(
+                    calc.Pixels() / zoom, calc.Percent()),
+                calc.GetValueRange());
+}
+
+CSSPrimitiveValue::UnitType CSSMathFunctionValue::TypeWithMathFunctionResolved()
+    const {
+  switch (expression_->Category()) {
+    case kCalcAngle:
+      return UnitType::kDegrees;
+    case kCalcFrequency:
+      return UnitType::kHertz;
+    case kCalcNumber:
+      return UnitType::kNumber;
+    case kCalcPercent:
+      return UnitType::kPercentage;
+    case kCalcLength:
+      return UnitType::kPixels;
+    case kCalcPercentNumber:
+      return UnitType::kCalcPercentageWithNumber;
+    case kCalcPercentLength:
+      return UnitType::kCalcPercentageWithLength;
+    case kCalcLengthNumber:
+      return UnitType::kCalcLengthWithNumber;
+    case kCalcPercentLengthNumber:
+      return UnitType::kCalcPercentageWithLengthAndNumber;
+    case kCalcTime:
+      return UnitType::kMilliseconds;
+    case kCalcOther:
+      return UnitType::kUnknown;
+  }
+  return UnitType::kUnknown;
+}
+
+double CSSMathFunctionValue::DoubleValue() const {
+  // TODO(crbug.com/979895): Make sure this function is called only when
+  // applicable.
+  return ClampToPermittedRange(expression_->DoubleValue());
+}
+
+double CSSMathFunctionValue::ComputeSeconds() const {
+  DCHECK_EQ(kCalcTime, expression_->Category());
+  UnitType current_type = expression_->TypeWithCalcResolved();
+  if (current_type == UnitType::kSeconds)
+    return GetDoubleValue();
+  if (current_type == UnitType::kMilliseconds)
+    return GetDoubleValue() / 1000;
+  NOTREACHED();
+  return 0;
+}
+
+double CSSMathFunctionValue::ComputeDegrees() const {
+  DCHECK_EQ(kCalcAngle, expression_->Category());
+  UnitType current_type = expression_->TypeWithCalcResolved();
+  switch (current_type) {
+    case UnitType::kDegrees:
+      return GetDoubleValue();
+    case UnitType::kRadians:
+      return rad2deg(GetDoubleValue());
+    case UnitType::kGradians:
+      return grad2deg(GetDoubleValue());
+    case UnitType::kTurns:
+      return turn2deg(GetDoubleValue());
+    default:
+      NOTREACHED();
+      return 0;
+  }
+}
+
+double CSSMathFunctionValue::ComputeLengthPx(
+    const CSSToLengthConversionData& conversion_data) const {
+  return ClampToPermittedRange(expression_->ComputeLengthPx(conversion_data));
+}
+
+void CSSMathFunctionValue::AccumulateLengthArray(CSSLengthArray& length_array,
+                                                 double multiplier) const {
+  expression_->AccumulateLengthArray(length_array, multiplier);
+}
+
+Length CSSMathFunctionValue::ConvertToLength(
+    const CSSToLengthConversionData& conversion_data) const {
+  return Length(ToCalcValue(conversion_data));
+}
+
+static String BuildCSSText(const String& expression) {
+  StringBuilder result;
+  result.Append("calc");
+  bool expression_has_single_term = expression[0] != '(';
+  if (expression_has_single_term)
+    result.Append('(');
+  result.Append(expression);
+  if (expression_has_single_term)
+    result.Append(')');
+  return result.ToString();
+}
+
+String CSSMathFunctionValue::CustomCSSText() const {
+  return BuildCSSText(expression_->CustomCSSText());
+}
+
+bool CSSMathFunctionValue::Equals(const CSSMathFunctionValue& other) const {
+  return DataEquivalent(expression_, other.expression_);
+}
+
+double CSSMathFunctionValue::ClampToPermittedRange(double value) const {
+  return non_negative_ && value < 0 ? 0 : value;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/css_math_function_value.h b/third_party/blink/renderer/core/css/css_math_function_value.h
index 680f02cf..58063333 100644
--- a/third_party/blink/renderer/core/css/css_math_function_value.h
+++ b/third_party/blink/renderer/core/css/css_math_function_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MATH_FUNCTION_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MATH_FUNCTION_VALUE_H_
 
+#include "third_party/blink/renderer/core/css/css_calculation_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 
 namespace blink {
@@ -15,16 +16,55 @@
 class CORE_EXPORT CSSMathFunctionValue : public CSSPrimitiveValue {
  public:
   static CSSMathFunctionValue* Create(const Length&, float zoom);
-  static CSSMathFunctionValue* Create(CSSCalcValue*);
+  static CSSMathFunctionValue* Create(CSSCalcExpressionNode*,
+                                      ValueRange = kValueRangeAll);
 
-  explicit CSSMathFunctionValue(CSSCalcValue*);
+  CSSMathFunctionValue(CSSCalcExpressionNode* expression, ValueRange range);
 
-  CSSCalcValue* CssCalcValue() const { return calc_; }
+  CSSCalcExpressionNode* ExpressionNode() const { return expression_; }
+
+  scoped_refptr<CalculationValue> ToCalcValue(
+      const CSSToLengthConversionData& conversion_data) const {
+    PixelsAndPercent value(0, 0);
+    expression_->AccumulatePixelsAndPercent(conversion_data, value);
+    return CalculationValue::Create(
+        value, non_negative_ ? kValueRangeNonNegative : kValueRangeAll);
+  }
+
+  UnitType TypeWithMathFunctionResolved() const;
+
+  CalculationCategory Category() const { return expression_->Category(); }
+  bool IsInt() const { return expression_->IsInteger(); }
+  bool IsNegative() const { return expression_->DoubleValue() < 0; }
+  ValueRange PermittedValueRange() {
+    return non_negative_ ? kValueRangeNonNegative : kValueRangeAll;
+  }
+
+  // TODO(crbug.com/979895): Make sure these functions are called only when
+  // the math expression resolves into a double value.
+  double DoubleValue() const;
+  double ComputeSeconds() const;
+  double ComputeDegrees() const;
+  double ComputeLengthPx(
+      const CSSToLengthConversionData& conversion_data) const;
+
+  void AccumulateLengthArray(CSSLengthArray& length_array,
+                             double multiplier) const;
+  Length ConvertToLength(
+      const CSSToLengthConversionData& conversion_data) const;
+
+  String CustomCSSText() const;
+  bool Equals(const CSSMathFunctionValue& other) const;
 
   void TraceAfterDispatch(blink::Visitor* visitor);
 
  private:
-  Member<CSSCalcValue> calc_;
+  double ClampToPermittedRange(double) const;
+
+  Member<CSSCalcExpressionNode> expression_;
+
+  // TODO(crbug.com/979895): Move this flag to CSSValue for better packing.
+  bool non_negative_;
 };
 
 template <>
diff --git a/third_party/blink/renderer/core/css/css_numeric_literal_value.cc b/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
index 3446926..f68eba3 100644
--- a/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
+++ b/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
@@ -4,8 +4,11 @@
 
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 
+#include "build/build_config.h"
+#include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
 #include "third_party/blink/renderer/core/css/css_value_pool.h"
 #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
 
@@ -72,4 +75,169 @@
   }
 }
 
+double CSSNumericLiteralValue::ComputeSeconds() const {
+  DCHECK(IsTime());
+  UnitType current_type = GetType();
+  if (current_type == UnitType::kSeconds)
+    return num_;
+  if (current_type == UnitType::kMilliseconds)
+    return num_ / 1000;
+  NOTREACHED();
+  return 0;
+}
+
+double CSSNumericLiteralValue::ComputeDegrees() const {
+  DCHECK(IsAngle());
+  UnitType current_type = GetType();
+  switch (current_type) {
+    case UnitType::kDegrees:
+      return num_;
+    case UnitType::kRadians:
+      return rad2deg(num_);
+    case UnitType::kGradians:
+      return grad2deg(num_);
+    case UnitType::kTurns:
+      return turn2deg(num_);
+    default:
+      NOTREACHED();
+      return 0;
+  }
+}
+
+double CSSNumericLiteralValue::ComputeLengthPx(
+    const CSSToLengthConversionData& conversion_data) const {
+  return conversion_data.ZoomedComputedPixels(num_, GetType());
+}
+
+void CSSNumericLiteralValue::AccumulateLengthArray(CSSLengthArray& length_array,
+                                                   double multiplier) const {
+  LengthUnitType length_type;
+  bool conversion_success = UnitTypeToLengthUnitType(GetType(), length_type);
+  DCHECK(conversion_success);
+  length_array.values[length_type] +=
+      num_ * ConversionToCanonicalUnitsScaleFactor(GetType()) * multiplier;
+  length_array.type_flags.set(length_type);
+}
+
+static String FormatNumber(double number, const char* suffix) {
+#if defined(OS_WIN) && _MSC_VER < 1900
+  unsigned oldFormat = _set_output_format(_TWO_DIGIT_EXPONENT);
+#endif
+  String result = String::Format("%.6g%s", number, suffix);
+#if defined(OS_WIN) && _MSC_VER < 1900
+  _set_output_format(oldFormat);
+#endif
+  return result;
+}
+
+String CSSNumericLiteralValue::CustomCSSText() const {
+  String text;
+  switch (GetType()) {
+    case UnitType::kUnknown:
+      // FIXME
+      break;
+    case UnitType::kInteger:
+      text = String::Number(GetIntValue());
+      break;
+    case UnitType::kNumber:
+    case UnitType::kPercentage:
+    case UnitType::kEms:
+    case UnitType::kQuirkyEms:
+    case UnitType::kExs:
+    case UnitType::kRems:
+    case UnitType::kChs:
+    case UnitType::kPixels:
+    case UnitType::kCentimeters:
+    case UnitType::kDotsPerPixel:
+    case UnitType::kDotsPerInch:
+    case UnitType::kDotsPerCentimeter:
+    case UnitType::kMillimeters:
+    case UnitType::kQuarterMillimeters:
+    case UnitType::kInches:
+    case UnitType::kPoints:
+    case UnitType::kPicas:
+    case UnitType::kUserUnits:
+    case UnitType::kDegrees:
+    case UnitType::kRadians:
+    case UnitType::kGradians:
+    case UnitType::kMilliseconds:
+    case UnitType::kSeconds:
+    case UnitType::kHertz:
+    case UnitType::kKilohertz:
+    case UnitType::kTurns:
+    case UnitType::kFraction:
+    case UnitType::kViewportWidth:
+    case UnitType::kViewportHeight:
+    case UnitType::kViewportMin:
+    case UnitType::kViewportMax: {
+      // The following integers are minimal and maximum integers which can
+      // be represented in non-exponential format with 6 digit precision.
+      constexpr int kMinInteger = -999999;
+      constexpr int kMaxInteger = 999999;
+      double value = To<CSSNumericLiteralValue>(this)->DoubleValue();
+      // If the value is small integer, go the fast path.
+      if (value < kMinInteger || value > kMaxInteger ||
+          std::trunc(value) != value) {
+        text = FormatNumber(value, UnitTypeToString(GetType()));
+      } else {
+        StringBuilder builder;
+        int int_value = value;
+        const char* unit_type = UnitTypeToString(GetType());
+        builder.AppendNumber(int_value);
+        builder.Append(unit_type, strlen(unit_type));
+        text = builder.ToString();
+      }
+    } break;
+    default:
+      NOTREACHED();
+      break;
+  }
+  return text;
+}
+
+bool CSSNumericLiteralValue::Equals(const CSSNumericLiteralValue& other) const {
+  if (GetType() != other.GetType())
+    return false;
+
+  switch (GetType()) {
+    case UnitType::kUnknown:
+      return false;
+    case UnitType::kNumber:
+    case UnitType::kInteger:
+    case UnitType::kPercentage:
+    case UnitType::kEms:
+    case UnitType::kExs:
+    case UnitType::kRems:
+    case UnitType::kPixels:
+    case UnitType::kCentimeters:
+    case UnitType::kDotsPerPixel:
+    case UnitType::kDotsPerInch:
+    case UnitType::kDotsPerCentimeter:
+    case UnitType::kMillimeters:
+    case UnitType::kQuarterMillimeters:
+    case UnitType::kInches:
+    case UnitType::kPoints:
+    case UnitType::kPicas:
+    case UnitType::kUserUnits:
+    case UnitType::kDegrees:
+    case UnitType::kRadians:
+    case UnitType::kGradians:
+    case UnitType::kMilliseconds:
+    case UnitType::kSeconds:
+    case UnitType::kHertz:
+    case UnitType::kKilohertz:
+    case UnitType::kTurns:
+    case UnitType::kViewportWidth:
+    case UnitType::kViewportHeight:
+    case UnitType::kViewportMin:
+    case UnitType::kViewportMax:
+    case UnitType::kFraction:
+      return num_ == other.num_;
+    case UnitType::kQuirkyEms:
+      return false;
+    default:
+      return false;
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/css_numeric_literal_value.h b/third_party/blink/renderer/core/css/css_numeric_literal_value.h
index 4d2de315..61b20d4 100644
--- a/third_party/blink/renderer/core/css/css_numeric_literal_value.h
+++ b/third_party/blink/renderer/core/css/css_numeric_literal_value.h
@@ -19,6 +19,16 @@
   CSSNumericLiteralValue(double num, UnitType type);
 
   double DoubleValue() const { return num_; }
+  double ComputeSeconds() const;
+  double ComputeDegrees() const;
+
+  double ComputeLengthPx(
+      const CSSToLengthConversionData& conversion_data) const;
+  void AccumulateLengthArray(CSSLengthArray& length_array,
+                             double multiplier) const;
+
+  String CustomCSSText() const;
+  bool Equals(const CSSNumericLiteralValue& other) const;
 
   void TraceAfterDispatch(blink::Visitor* visitor);
 
diff --git a/third_party/blink/renderer/core/css/css_primitive_value.cc b/third_party/blink/renderer/core/css/css_primitive_value.cc
index 2ee06c5..940ad8a 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value.cc
+++ b/third_party/blink/renderer/core/css/css_primitive_value.cc
@@ -96,32 +96,7 @@
 CSSPrimitiveValue::UnitType CSSPrimitiveValue::TypeWithCalcResolved() const {
   if (GetType() != UnitType::kCalc)
     return GetType();
-
-  switch (CssCalcValue()->Category()) {
-    case kCalcAngle:
-      return UnitType::kDegrees;
-    case kCalcFrequency:
-      return UnitType::kHertz;
-    case kCalcNumber:
-      return UnitType::kNumber;
-    case kCalcPercent:
-      return UnitType::kPercentage;
-    case kCalcLength:
-      return UnitType::kPixels;
-    case kCalcPercentNumber:
-      return UnitType::kCalcPercentageWithNumber;
-    case kCalcPercentLength:
-      return UnitType::kCalcPercentageWithLength;
-    case kCalcLengthNumber:
-      return UnitType::kCalcLengthWithNumber;
-    case kCalcPercentLengthNumber:
-      return UnitType::kCalcPercentageWithLengthAndNumber;
-    case kCalcTime:
-      return UnitType::kMilliseconds;
-    case kCalcOther:
-      return UnitType::kUnknown;
-  }
-  return UnitType::kUnknown;
+  return To<CSSMathFunctionValue>(this)->TypeWithMathFunctionResolved();
 }
 
 CSSPrimitiveValue::CSSPrimitiveValue(UnitType unit_type, ClassType class_type)
@@ -162,38 +137,15 @@
 }
 
 double CSSPrimitiveValue::ComputeSeconds() const {
-  DCHECK(IsTime() ||
-         (IsCalculated() && CssCalcValue()->Category() == kCalcTime));
-  UnitType current_type =
-      IsCalculated() ? CssCalcValue()->ExpressionNode()->TypeWithCalcResolved()
-                     : GetType();
-  if (current_type == UnitType::kSeconds)
-    return GetDoubleValue();
-  if (current_type == UnitType::kMilliseconds)
-    return GetDoubleValue() / 1000;
-  NOTREACHED();
-  return 0;
+  if (IsCalculated())
+    return To<CSSMathFunctionValue>(this)->ComputeSeconds();
+  return To<CSSNumericLiteralValue>(this)->ComputeSeconds();
 }
 
 double CSSPrimitiveValue::ComputeDegrees() const {
-  DCHECK(IsAngle() ||
-         (IsCalculated() && CssCalcValue()->Category() == kCalcAngle));
-  UnitType current_type =
-      IsCalculated() ? CssCalcValue()->ExpressionNode()->TypeWithCalcResolved()
-                     : GetType();
-  switch (current_type) {
-    case UnitType::kDegrees:
-      return GetDoubleValue();
-    case UnitType::kRadians:
-      return rad2deg(GetDoubleValue());
-    case UnitType::kGradians:
-      return grad2deg(GetDoubleValue());
-    case UnitType::kTurns:
-      return turn2deg(GetDoubleValue());
-    default:
-      NOTREACHED();
-      return 0;
-  }
+  if (IsCalculated())
+    return To<CSSMathFunctionValue>(this)->ComputeDegrees();
+  return To<CSSNumericLiteralValue>(this)->ComputeDegrees();
 }
 
 double CSSPrimitiveValue::ComputeDotsPerPixel() const {
@@ -257,28 +209,22 @@
 
 double CSSPrimitiveValue::ComputeLengthDouble(
     const CSSToLengthConversionData& conversion_data) const {
-  if (GetType() == UnitType::kCalc)
-    return CssCalcValue()->ComputeLengthPx(conversion_data);
-  return conversion_data.ZoomedComputedPixels(GetDoubleValue(), GetType());
+  if (IsCalculated())
+    return To<CSSMathFunctionValue>(this)->ComputeLengthPx(conversion_data);
+  return To<CSSNumericLiteralValue>(this)->ComputeLengthPx(conversion_data);
 }
 
 void CSSPrimitiveValue::AccumulateLengthArray(CSSLengthArray& length_array,
                                               double multiplier) const {
   DCHECK_EQ(length_array.values.size(),
             static_cast<unsigned>(kLengthUnitTypeCount));
-
-  if (GetType() == UnitType::kCalc) {
-    CssCalcValue()->AccumulateLengthArray(length_array, multiplier);
+  if (IsCalculated()) {
+    To<CSSMathFunctionValue>(this)->AccumulateLengthArray(length_array,
+                                                          multiplier);
     return;
   }
-
-  LengthUnitType length_type;
-  bool conversion_success = UnitTypeToLengthUnitType(GetType(), length_type);
-  DCHECK(conversion_success);
-  length_array.values[length_type] +=
-      To<CSSNumericLiteralValue>(this)->DoubleValue() *
-      ConversionToCanonicalUnitsScaleFactor(GetType()) * multiplier;
-  length_array.type_flags.set(length_type);
+  To<CSSNumericLiteralValue>(this)->AccumulateLengthArray(length_array,
+                                                          multiplier);
 }
 
 double CSSPrimitiveValue::ConversionToCanonicalUnitsScaleFactor(
@@ -344,13 +290,12 @@
   if (IsPercentage())
     return Length::Percent(GetDoubleValue());
   DCHECK(IsCalculated());
-  return Length(CssCalcValue()->ToCalcValue(conversion_data));
+  return To<CSSMathFunctionValue>(this)->ConvertToLength(conversion_data);
 }
 
 double CSSPrimitiveValue::GetDoubleValue() const {
-  return GetType() != UnitType::kCalc
-             ? To<CSSNumericLiteralValue>(this)->DoubleValue()
-             : CssCalcValue()->DoubleValue();
+  return IsCalculated() ? To<CSSMathFunctionValue>(this)->DoubleValue()
+                        : To<CSSNumericLiteralValue>(this)->DoubleValue();
 }
 
 CSSPrimitiveValue::UnitType CSSPrimitiveValue::CanonicalUnitTypeForCategory(
@@ -454,17 +399,6 @@
   return CSSPrimitiveValue::UnitType::kUnknown;
 }
 
-static String FormatNumber(double number, const char* suffix) {
-#if defined(OS_WIN) && _MSC_VER < 1900
-  unsigned oldFormat = _set_output_format(_TWO_DIGIT_EXPONENT);
-#endif
-  String result = String::Format("%.6g%s", number, suffix);
-#if defined(OS_WIN) && _MSC_VER < 1900
-  _set_output_format(oldFormat);
-#endif
-  return result;
-}
-
 const char* CSSPrimitiveValue::UnitTypeToString(UnitType type) {
   switch (type) {
     case UnitType::kNumber:
@@ -541,133 +475,9 @@
 }
 
 String CSSPrimitiveValue::CustomCSSText() const {
-  String text;
-  switch (GetType()) {
-    case UnitType::kUnknown:
-      // FIXME
-      break;
-    case UnitType::kInteger:
-      text = String::Number(GetIntValue());
-      break;
-    case UnitType::kNumber:
-    case UnitType::kPercentage:
-    case UnitType::kEms:
-    case UnitType::kQuirkyEms:
-    case UnitType::kExs:
-    case UnitType::kRems:
-    case UnitType::kChs:
-    case UnitType::kPixels:
-    case UnitType::kCentimeters:
-    case UnitType::kDotsPerPixel:
-    case UnitType::kDotsPerInch:
-    case UnitType::kDotsPerCentimeter:
-    case UnitType::kMillimeters:
-    case UnitType::kQuarterMillimeters:
-    case UnitType::kInches:
-    case UnitType::kPoints:
-    case UnitType::kPicas:
-    case UnitType::kUserUnits:
-    case UnitType::kDegrees:
-    case UnitType::kRadians:
-    case UnitType::kGradians:
-    case UnitType::kMilliseconds:
-    case UnitType::kSeconds:
-    case UnitType::kHertz:
-    case UnitType::kKilohertz:
-    case UnitType::kTurns:
-    case UnitType::kFraction:
-    case UnitType::kViewportWidth:
-    case UnitType::kViewportHeight:
-    case UnitType::kViewportMin:
-    case UnitType::kViewportMax: {
-      // The following integers are minimal and maximum integers which can
-      // be represented in non-exponential format with 6 digit precision.
-      constexpr int kMinInteger = -999999;
-      constexpr int kMaxInteger = 999999;
-      double value = To<CSSNumericLiteralValue>(this)->DoubleValue();
-      // If the value is small integer, go the fast path.
-      if (value < kMinInteger || value > kMaxInteger ||
-          std::trunc(value) != value) {
-        text = FormatNumber(value, UnitTypeToString(GetType()));
-      } else {
-        StringBuilder builder;
-        int int_value = value;
-        const char* unit_type = UnitTypeToString(GetType());
-        builder.AppendNumber(int_value);
-        builder.Append(unit_type, strlen(unit_type));
-        text = builder.ToString();
-      }
-    } break;
-    case UnitType::kCalc:
-      text = CssCalcValue()->CustomCSSText();
-      break;
-    case UnitType::kCalcPercentageWithNumber:
-    case UnitType::kCalcPercentageWithLength:
-    case UnitType::kCalcLengthWithNumber:
-    case UnitType::kCalcPercentageWithLengthAndNumber:
-      NOTREACHED();
-      break;
-  }
-
-  return text;
-}
-
-bool CSSPrimitiveValue::Equals(const CSSPrimitiveValue& other) const {
-  if (GetType() != other.GetType())
-    return false;
-
-  switch (GetType()) {
-    case UnitType::kUnknown:
-      return false;
-    case UnitType::kNumber:
-    case UnitType::kInteger:
-    case UnitType::kPercentage:
-    case UnitType::kEms:
-    case UnitType::kExs:
-    case UnitType::kRems:
-    case UnitType::kPixels:
-    case UnitType::kCentimeters:
-    case UnitType::kDotsPerPixel:
-    case UnitType::kDotsPerInch:
-    case UnitType::kDotsPerCentimeter:
-    case UnitType::kMillimeters:
-    case UnitType::kQuarterMillimeters:
-    case UnitType::kInches:
-    case UnitType::kPoints:
-    case UnitType::kPicas:
-    case UnitType::kUserUnits:
-    case UnitType::kDegrees:
-    case UnitType::kRadians:
-    case UnitType::kGradians:
-    case UnitType::kMilliseconds:
-    case UnitType::kSeconds:
-    case UnitType::kHertz:
-    case UnitType::kKilohertz:
-    case UnitType::kTurns:
-    case UnitType::kViewportWidth:
-    case UnitType::kViewportHeight:
-    case UnitType::kViewportMin:
-    case UnitType::kViewportMax:
-    case UnitType::kFraction:
-      return To<CSSNumericLiteralValue>(this)->DoubleValue() ==
-             To<CSSNumericLiteralValue>(other).DoubleValue();
-    case UnitType::kCalc:
-      return CssCalcValue() && other.CssCalcValue() &&
-             CssCalcValue()->Equals(*other.CssCalcValue());
-    case UnitType::kChs:
-    case UnitType::kCalcPercentageWithNumber:
-    case UnitType::kCalcPercentageWithLength:
-    case UnitType::kCalcLengthWithNumber:
-    case UnitType::kCalcPercentageWithLengthAndNumber:
-    case UnitType::kQuirkyEms:
-      return false;
-  }
-  return false;
-}
-
-CSSCalcValue* CSSPrimitiveValue::CssCalcValue() const {
-  DCHECK(IsCalculated());
-  return To<CSSMathFunctionValue>(this)->CssCalcValue();
+  if (IsCalculated())
+    return To<CSSMathFunctionValue>(this)->CustomCSSText();
+  return To<CSSNumericLiteralValue>(this)->CustomCSSText();
 }
 
 void CSSPrimitiveValue::TraceAfterDispatch(blink::Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/css/css_primitive_value.h b/third_party/blink/renderer/core/css/css_primitive_value.h
index f2a0ad8d..e168b88 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value.h
+++ b/third_party/blink/renderer/core/css/css_primitive_value.h
@@ -35,7 +35,6 @@
 
 namespace blink {
 
-class CSSCalcValue;
 class CSSToLengthConversionData;
 class Length;
 
@@ -234,6 +233,8 @@
   double ComputeDotsPerPixel() const;
 
   // Computes a length in pixels, resolving relative lengths
+  // TODO(crbug.com/979895): This function is callable only when the length is a
+  // fixed value or is calculated without involving percentages. Enforce that.
   template <typename T>
   T ComputeLength(const CSSToLengthConversionData&) const;
 
@@ -251,9 +252,6 @@
     return clampTo<T>(GetDoubleValue());
   }
 
-  // TODO(crbug.com/979895): Move this to |CSSMathFunctionValue|
-  CSSCalcValue* CssCalcValue() const;
-
   template <typename T>
   inline T ConvertTo() const;  // Defined in CSSPrimitiveValueMappings.h
 
@@ -266,8 +264,6 @@
 
   String CustomCSSText() const;
 
-  bool Equals(const CSSPrimitiveValue&) const;
-
   void TraceAfterDispatch(blink::Visitor*);
 
   static UnitType CanonicalUnitTypeForCategory(UnitCategory);
diff --git a/third_party/blink/renderer/core/css/css_primitive_value_test.cc b/third_party/blink/renderer/core/css/css_primitive_value_test.cc
index da73b41..7c3aecd 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value_test.cc
+++ b/third_party/blink/renderer/core/css/css_primitive_value_test.cc
@@ -24,11 +24,9 @@
 }
 
 CSSPrimitiveValue* CreateAddition(UnitValue a, UnitValue b) {
-  return CSSMathFunctionValue::Create(
-      CSSCalcValue::Create(CSSCalcValue::CreateExpressionNode(
-          CSSCalcValue::CreateExpressionNode(Create(a)),
-          CSSCalcValue::CreateExpressionNode(Create(b)),
-          CSSMathOperator::kAdd)));
+  return CSSMathFunctionValue::Create(CSSCalcBinaryOperation::Create(
+      CSSCalcPrimitiveValue::Create(Create(a)),
+      CSSCalcPrimitiveValue::Create(Create(b)), CSSMathOperator::kAdd));
 }
 
 TEST(CSSPrimitiveValueTest, IsTime) {
diff --git a/third_party/blink/renderer/core/css/css_value.cc b/third_party/blink/renderer/core/css/css_value.cc
index 8bc8973..36dc4c6 100644
--- a/third_party/blink/renderer/core/css/css_value.cc
+++ b/third_party/blink/renderer/core/css/css_value.cc
@@ -217,9 +217,9 @@
       case kPathClass:
         return CompareCSSValues<CSSPathValue>(*this, other);
       case kNumericLiteralClass:
+        return CompareCSSValues<CSSNumericLiteralValue>(*this, other);
       case kMathFunctionClass:
-        // TODO(crbug.com/979895): Should call into the subclasses.
-        return CompareCSSValues<CSSPrimitiveValue>(*this, other);
+        return CompareCSSValues<CSSMathFunctionValue>(*this, other);
       case kRayClass:
         return CompareCSSValues<CSSRayValue>(*this, other);
       case kIdentifierClass:
@@ -329,9 +329,9 @@
     case kPathClass:
       return To<CSSPathValue>(this)->CustomCSSText();
     case kNumericLiteralClass:
+      return To<CSSNumericLiteralValue>(this)->CustomCSSText();
     case kMathFunctionClass:
-      // TODO(crbug.com/979895): Should call into the subclasses.
-      return To<CSSPrimitiveValue>(this)->CustomCSSText();
+      return To<CSSMathFunctionValue>(this)->CustomCSSText();
     case kRayClass:
       return To<CSSRayValue>(this)->CustomCSSText();
     case kIdentifierClass:
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_product.cc b/third_party/blink/renderer/core/css/cssom/css_math_product.cc
index 7ab8056..a13f470 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_product.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_math_product.cc
@@ -86,12 +86,12 @@
   if (NumericValues().size() == 1)
     return NumericValues()[0]->ToCalcExpressionNode();
 
-  CSSCalcExpressionNode* node = CSSCalcValue::CreateExpressionNode(
+  CSSCalcExpressionNode* node = CSSCalcBinaryOperation::Create(
       NumericValues()[0]->ToCalcExpressionNode(),
       NumericValues()[1]->ToCalcExpressionNode(), CSSMathOperator::kMultiply);
 
   for (wtf_size_t i = 2; i < NumericValues().size(); i++) {
-    node = CSSCalcValue::CreateExpressionNode(
+    node = CSSCalcBinaryOperation::Create(
         node, NumericValues()[i]->ToCalcExpressionNode(),
         CSSMathOperator::kMultiply);
   }
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_sum.cc b/third_party/blink/renderer/core/css/cssom/css_math_sum.cc
index 3697b908..3854e78 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_sum.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_math_sum.cc
@@ -104,12 +104,12 @@
   if (NumericValues().size() == 1)
     return NumericValues()[0]->ToCalcExpressionNode();
 
-  CSSCalcExpressionNode* node = CSSCalcValue::CreateExpressionNode(
+  CSSCalcExpressionNode* node = CSSCalcBinaryOperation::Create(
       NumericValues()[0]->ToCalcExpressionNode(),
       NumericValues()[1]->ToCalcExpressionNode(), CSSMathOperator::kAdd);
 
   for (wtf_size_t i = 2; i < NumericValues().size(); i++) {
-    node = CSSCalcValue::CreateExpressionNode(
+    node = CSSCalcBinaryOperation::Create(
         node, NumericValues()[i]->ToCalcExpressionNode(),
         CSSMathOperator::kAdd);
   }
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_value.cc b/third_party/blink/renderer/core/css/cssom/css_math_value.cc
index d443b26..622fec7 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_value.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_math_value.cc
@@ -13,7 +13,7 @@
   CSSCalcExpressionNode* node = ToCalcExpressionNode();
   if (!node)
     return nullptr;
-  return CSSMathFunctionValue::Create(CSSCalcValue::Create(node));
+  return CSSMathFunctionValue::Create(node);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/cssom/css_numeric_value.cc b/third_party/blink/renderer/core/css/cssom/css_numeric_value.cc
index 1a3c8ea24..30dbba60 100644
--- a/third_party/blink/renderer/core/css/cssom/css_numeric_value.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_numeric_value.cc
@@ -7,6 +7,7 @@
 #include <numeric>
 
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
+#include "third_party/blink/renderer/core/css/css_math_function_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_invert.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_max.h"
@@ -235,12 +236,11 @@
     case kFunctionToken:
       if (range.Peek().FunctionId() == CSSValueID::kCalc ||
           range.Peek().FunctionId() == CSSValueID::kWebkitCalc) {
-        CSSCalcValue* calc_value = CSSCalcValue::Create(range, kValueRangeAll);
-        if (!calc_value)
+        CSSCalcExpressionNode* expression =
+            CSSCalcExpressionNode::ParseCalc(range);
+        if (!expression)
           break;
-
-        DCHECK(calc_value->ExpressionNode());
-        return CalcToNumericValue(*calc_value->ExpressionNode());
+        return CalcToNumericValue(*expression);
       }
       break;
     default:
@@ -253,8 +253,10 @@
 }
 
 CSSNumericValue* CSSNumericValue::FromCSSValue(const CSSPrimitiveValue& value) {
-  if (value.IsCalculated())
-    return CalcToNumericValue(*value.CssCalcValue()->ExpressionNode());
+  if (value.IsCalculated()) {
+    return CalcToNumericValue(
+        *To<CSSMathFunctionValue>(value).ExpressionNode());
+  }
   return CSSUnitValue::FromCSSValue(value);
 }
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_perspective.cc b/third_party/blink/renderer/core/css/cssom/css_perspective.cc
index 7b728d8..e43c1515 100644
--- a/third_party/blink/renderer/core/css/cssom/css_perspective.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_perspective.cc
@@ -70,7 +70,7 @@
     // Wrap out of range length with a calc.
     CSSCalcExpressionNode* node = length_->ToCalcExpressionNode();
     node->SetIsNestedCalc();
-    length = CSSMathFunctionValue::Create(CSSCalcValue::Create(node));
+    length = CSSMathFunctionValue::Create(node);
   } else {
     length = length_->ToCSSValue();
   }
diff --git a/third_party/blink/renderer/core/css/cssom/css_unit_value.cc b/third_party/blink/renderer/core/css/cssom/css_unit_value.cc
index c1901b4..42aa8dd 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unit_value.cc
+++ b/third_party/blink/renderer/core/css/cssom/css_unit_value.cc
@@ -181,14 +181,14 @@
     // Wrap out of range values with a calc.
     CSSCalcExpressionNode* node = ToCalcExpressionNode();
     node->SetIsNestedCalc();
-    return CSSMathFunctionValue::Create(CSSCalcValue::Create(node));
+    return CSSMathFunctionValue::Create(node);
   }
 
   return CSSNumericLiteralValue::Create(value_, unit_);
 }
 
 CSSCalcExpressionNode* CSSUnitValue::ToCalcExpressionNode() const {
-  return CSSCalcValue::CreateExpressionNode(
+  return CSSCalcPrimitiveValue::Create(
       CSSNumericLiteralValue::Create(value_, unit_));
 }
 
diff --git a/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc b/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
index c1b1386..b20f2cf9c 100644
--- a/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
+++ b/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
@@ -195,16 +195,18 @@
     const CSSParserToken& token = range.Peek();
     if (token.FunctionId() == CSSValueID::kCalc ||
         token.FunctionId() == CSSValueID::kWebkitCalc) {
-      calc_value_ = CSSCalcValue::Create(ConsumeFunction(range_), value_range);
+      calc_value_ = CSSMathFunctionValue::Create(
+          CSSCalcExpressionNode::ParseCalc(ConsumeFunction(range_)),
+          value_range);
     }
   }
 
-  const CSSCalcValue* Value() const { return calc_value_.Get(); }
+  const CSSMathFunctionValue* Value() const { return calc_value_; }
   CSSPrimitiveValue* ConsumeValue() {
     if (!calc_value_)
       return nullptr;
     source_range_ = range_;
-    return CSSMathFunctionValue::Create(calc_value_.Release());
+    return calc_value_.Release();
   }
 
   CSSPrimitiveValue* ConsumeRoundedInt() {
@@ -213,7 +215,7 @@
     source_range_ = range_;
     CSSPrimitiveValue::UnitType unit_type =
         CSSPrimitiveValue::UnitType::kInteger;
-    double rounded_value = floor(calc_value_->DoubleValue() + 0.5);
+    double rounded_value = floor(calc_value_->GetDoubleValue() + 0.5);
     return CSSNumericLiteralValue::Create(rounded_value, unit_type);
   }
 
@@ -224,7 +226,7 @@
     CSSPrimitiveValue::UnitType unit_type =
         calc_value_->IsInt() ? CSSPrimitiveValue::UnitType::kInteger
                              : CSSPrimitiveValue::UnitType::kNumber;
-    return CSSNumericLiteralValue::Create(calc_value_->DoubleValue(),
+    return CSSNumericLiteralValue::Create(calc_value_->GetDoubleValue(),
                                           unit_type);
   }
 
@@ -232,14 +234,14 @@
     if (!calc_value_ || calc_value_->Category() != kCalcNumber)
       return false;
     source_range_ = range_;
-    result = calc_value_->DoubleValue();
+    result = calc_value_->GetDoubleValue();
     return true;
   }
 
  private:
   CSSParserTokenRange& source_range_;
   CSSParserTokenRange range_;
-  Member<CSSCalcValue> calc_value_;
+  Member<CSSMathFunctionValue> calc_value_;
 };
 
 CSSPrimitiveValue* ConsumeInteger(CSSParserTokenRange& range,
@@ -254,12 +256,12 @@
         CSSPrimitiveValue::UnitType::kInteger);
   }
   CalcParser calc_parser(range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (!RuntimeEnabledFeatures::CSSCalcAsIntEnabled() && !calculation->IsInt())
       return nullptr;
     if (calculation->Category() != kCalcNumber)
       return nullptr;
-    double value = calculation->DoubleValue();
+    double value = calculation->GetDoubleValue();
     if (value < minimum_value)
       return nullptr;
     if (!RuntimeEnabledFeatures::CSSCalcAsIntEnabled())
@@ -287,7 +289,7 @@
     return value;
   }
   CalcParser calc_parser(range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (calculation->Category() != kCalcNumber)
       return nullptr;
     return calc_parser.ConsumeValue();
@@ -319,7 +321,7 @@
         range.ConsumeIncludingWhitespace().NumericValue(), token.GetUnitType());
   }
   CalcParser calc_parser(range, kValueRangeAll);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     // TODO(rwlbuis) Calcs should not be subject to parse time range checks.
     // spec: https://drafts.csswg.org/css-values-3/#calc-range
     if (calculation->Category() != kCalcNumber ||
@@ -405,7 +407,7 @@
         CSSPrimitiveValue::UnitType::kPercentage);
   }
   CalcParser calc_parser(range, value_range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (calculation->Category() == kCalcPercent)
       return calc_parser.ConsumeValue();
   }
@@ -438,7 +440,7 @@
   if (token.GetType() == kPercentageToken)
     return ConsumePercent(range, value_range);
   CalcParser calc_parser(range, value_range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (CanConsumeCalcValue(calculation->Category(), css_parser_mode))
       return calc_parser.ConsumeValue();
   }
@@ -506,7 +508,7 @@
         0, CSSPrimitiveValue::UnitType::kDegrees);
   }
   CalcParser calc_parser(range, kValueRangeAll);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (calculation->Category() != kCalcAngle)
       return nullptr;
     if (CSSPrimitiveValue* result = calc_parser.ConsumeValue()) {
@@ -548,7 +550,7 @@
     return nullptr;
   }
   CalcParser calc_parser(range, value_range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     if (calculation->Category() == kCalcTime)
       return calc_parser.ConsumeValue();
   }
@@ -1252,7 +1254,7 @@
   if (token.GetType() == kPercentageToken)
     return ConsumePercent(range, value_range);
   CalcParser calc_parser(range, value_range);
-  if (const CSSCalcValue* calculation = calc_parser.Value()) {
+  if (const CSSMathFunctionValue* calculation = calc_parser.Value()) {
     CalculationCategory category = calculation->Category();
     // TODO(fs): Add and support kCalcPercentAngle?
     if (category == kCalcAngle || category == kCalcPercent)
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
index fcc8b5a..d8b21ed 100644
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -42,6 +42,7 @@
 #include "third_party/blink/renderer/core/css/css_font_variation_value.h"
 #include "third_party/blink/renderer/core/css/css_grid_auto_repeat_value.h"
 #include "third_party/blink/renderer/core/css/css_grid_integer_repeat_value.h"
+#include "third_party/blink/renderer/core/css/css_math_function_value.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_path_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value_mappings.h"
@@ -301,10 +302,11 @@
                              const FontDescription::Size& parent_size) {
   if (primitive_value.IsLength())
     return primitive_value.ComputeLength<float>(conversion_data);
-  if (primitive_value.IsCalculatedPercentageWithLength())
-    return primitive_value.CssCalcValue()
-        ->ToCalcValue(conversion_data)
+  if (primitive_value.IsCalculatedPercentageWithLength()) {
+    return To<CSSMathFunctionValue>(primitive_value)
+        .ToCalcValue(conversion_data)
         ->Evaluate(parent_size.value);
+  }
 
   NOTREACHED();
   return 0;
@@ -1111,8 +1113,8 @@
     }
     if (primitive_value->IsCalculated()) {
       Length zoomed_length =
-          Length(primitive_value->CssCalcValue()->ToCalcValue(
-              LineHeightToLengthConversionData(state)));
+          Length(To<CSSMathFunctionValue>(primitive_value)
+                     ->ToCalcValue(LineHeightToLengthConversionData(state)));
       return Length::Fixed(ValueForLength(
           zoomed_length, LayoutUnit(state.Style()->ComputedFontSize())));
     }
@@ -1735,13 +1737,16 @@
     // an integer. Such calc()-for-integers must be rounded at computed value
     // time.
     // https://drafts.csswg.org/css-values-4/#calc-type-checking
-    if (primitive_value->IsCalculated() &&
-        (primitive_value->TypeWithCalcResolved() ==
-         CSSPrimitiveValue::UnitType::kNumber)) {
-      double double_value = primitive_value->CssCalcValue()->DoubleValue();
-      auto unit_type = CSSPrimitiveValue::UnitType::kInteger;
-      return *CSSNumericLiteralValue::Create(std::round(double_value),
-                                             unit_type);
+    if (primitive_value->IsCalculated()) {
+      const CSSMathFunctionValue& math_value =
+          To<CSSMathFunctionValue>(*primitive_value);
+      if (math_value.TypeWithMathFunctionResolved() ==
+          CSSPrimitiveValue::UnitType::kNumber) {
+        double double_value = math_value.GetDoubleValue();
+        auto unit_type = CSSPrimitiveValue::UnitType::kInteger;
+        return *CSSNumericLiteralValue::Create(std::round(double_value),
+                                               unit_type);
+      }
     }
 
     if (primitive_value->IsAngle()) {
diff --git a/third_party/blink/renderer/core/css/resolver/transform_builder.cc b/third_party/blink/renderer/core/css/resolver/transform_builder.cc
index 86d5622..b84d36db 100644
--- a/third_party/blink/renderer/core/css/resolver/transform_builder.cc
+++ b/third_party/blink/renderer/core/css/resolver/transform_builder.cc
@@ -32,6 +32,7 @@
 
 #include "third_party/blink/renderer/core/css/css_calculation_value.h"
 #include "third_party/blink/renderer/core/css/css_function_value.h"
+#include "third_party/blink/renderer/core/css/css_math_function_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value_mappings.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/transforms/matrix_3d_transform_operation.h"
@@ -110,10 +111,11 @@
       const auto& primitive_value = To<CSSPrimitiveValue>(*item);
 
       if (primitive_value.IsCalculated()) {
-        // TODO(xiaochengh): Get type from CSSPrimitiveValue directly.
-        CSSCalcValue* css_calc_value = primitive_value.CssCalcValue();
+        // TODO(xiaochengh): Get type from CSSMathFunctionValue directly.
         CSSPrimitiveValue::UnitType resolved_type =
-            css_calc_value->ExpressionNode()->TypeWithCalcResolved();
+            To<CSSMathFunctionValue>(primitive_value)
+                .ExpressionNode()
+                ->TypeWithCalcResolved();
         if (CSSPrimitiveValue::IsRelativeUnit(resolved_type) ||
             resolved_type == CSSPrimitiveValue::UnitType::kUnknown) {
           return true;
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index fdc5cd29..3fa50d3 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -366,6 +366,10 @@
                  ConstructionType type)
     : ContainerNode(document, type), tag_name_(tag_name) {}
 
+Element* Element::GetAnimationTarget() {
+  return this;
+}
+
 inline ElementRareData* Element::GetElementRareData() const {
   DCHECK(HasRareData());
   return static_cast<ElementRareData*>(RareData());
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index accc434..0d8e7058 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -27,6 +27,7 @@
 
 #include "third_party/blink/public/platform/web_focus_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/core/animation/animatable.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/css/css_selector.h"
@@ -153,7 +154,7 @@
 
 typedef HashMap<AtomicString, SpecificTrustedType> AttrNameToTrustedType;
 
-class CORE_EXPORT Element : public ContainerNode {
+class CORE_EXPORT Element : public ContainerNode, public Animatable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
@@ -161,6 +162,9 @@
 
   Element(const QualifiedName& tag_name, Document*, ConstructionType);
 
+  // Animatable implementation.
+  Element* GetAnimationTarget() override;
+
   DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecopy, kBeforecopy)
   DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecut, kBeforecut)
   DEFINE_ATTRIBUTE_EVENT_LISTENER(beforepaste, kBeforepaste)
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_fuzzer.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_fuzzer.cc
index cbb2f65..61e3586 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy_fuzzer.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_fuzzer.cc
@@ -7,6 +7,7 @@
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
+#include "third_party/blink/renderer/platform/shared_buffer.h"
 #include "third_party/blink/renderer/platform/testing/blink_fuzzer_test_support.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -44,6 +45,18 @@
                         : kContentSecurityPolicyHeaderSourceOriginPolicy;
   }
 
+  // Set loader sandbox flags and install a new document so the document
+  // has all possible sandbox flags set on the document already when the
+  // CSP is bound. CSP from Meta tags sources shouldn't have sandbox flags
+  // so we set it to kNone.
+  scoped_refptr<SharedBuffer> empty_document_data = SharedBuffer::Create();
+  g_page_holder->GetFrame().Loader().ForceSandboxFlags(
+      header_source == kContentSecurityPolicyHeaderSourceMeta
+          ? WebSandboxFlags::kNone
+          : WebSandboxFlags::kAll);
+  g_page_holder->GetFrame().ForceSynchronousDocumentInstall(
+      "text/html", empty_document_data);
+
   // Construct and initialize a policy from the string.
   auto* csp = MakeGarbageCollected<ContentSecurityPolicy>();
   csp->DidReceiveHeader(header, header_type, header_source);
diff --git a/third_party/blink/renderer/core/html/html_plugin_element.cc b/third_party/blink/renderer/core/html/html_plugin_element.cc
index a309639..6016f9b 100644
--- a/third_party/blink/renderer/core/html/html_plugin_element.cc
+++ b/third_party/blink/renderer/core/html/html_plugin_element.cc
@@ -64,14 +64,6 @@
 
 namespace {
 
-// Used for histograms, do not change the order.
-enum PluginRequestObjectResult {
-  kPluginRequestObjectResultFailure = 0,
-  kPluginRequestObjectResultSuccess = 1,
-  // Keep at the end.
-  kPluginRequestObjectResultMax
-};
-
 String GetMIMETypeFromURL(const KURL& url) {
   String filename = url.LastPathComponent();
   int extension_pos = filename.ReverseFind('.');
@@ -164,57 +156,6 @@
   HTMLFrameOwnerElement::SetFocused(focused, focus_type);
 }
 
-bool HTMLPlugInElement::RequestObjectInternal(
-    const PluginParameters& plugin_params) {
-  if (url_.IsEmpty() && service_type_.IsEmpty())
-    return false;
-
-  if (ProtocolIsJavaScript(url_))
-    return false;
-
-  KURL completed_url =
-      url_.IsEmpty() ? KURL() : GetDocument().CompleteURL(url_);
-  if (!AllowedToLoadObject(completed_url, service_type_))
-    return false;
-
-  ObjectContentType object_type = GetObjectContentType();
-  bool handled_externally =
-      object_type == ObjectContentType::kExternalPlugin &&
-      AllowedToLoadPlugin(completed_url, service_type_) &&
-      GetDocument().GetFrame()->Client()->IsPluginHandledExternally(
-          *this, completed_url,
-          service_type_.IsEmpty() ? GetMIMETypeFromURL(completed_url)
-                                  : service_type_);
-  if (handled_externally)
-    ResetInstance();
-  if (object_type == ObjectContentType::kFrame ||
-      object_type == ObjectContentType::kImage || handled_externally) {
-    if (ContentFrame() && ContentFrame()->IsRemoteFrame()) {
-      // During lazy reattaching, the plugin element loses EmbeddedContentView.
-      // Since the ContentFrame() is not torn down the options here are to
-      // either re-create a new RemoteFrameView or reuse the old one. The former
-      // approach requires CommitNavigation for OOPF to be sent back here in
-      // the parent process. It is easier to just reuse the current FrameView
-      // instead until plugin element issue are properly resolved (for context
-      // see https://crbug.com/781880).
-      DCHECK(!OwnedEmbeddedContentView());
-      SetEmbeddedContentView(ContentFrame()->View());
-      DCHECK(OwnedEmbeddedContentView());
-    }
-    // If the plugin element already contains a subframe,
-    // loadOrRedirectSubframe will re-use it. Otherwise, it will create a
-    // new frame and set it as the LayoutEmbeddedContent's EmbeddedContentView,
-    // causing what was previously in the EmbeddedContentView to be torn down.
-    return LoadOrRedirectSubframe(completed_url, GetNameAttribute(), true);
-  }
-
-  // If an object's content can't be handled and it has no fallback, let
-  // it be handled as a plugin to show the broken plugin icon.
-  bool use_fallback =
-      object_type == ObjectContentType::kNone && HasFallbackContent();
-  return LoadPlugin(completed_url, service_type_, plugin_params, use_fallback);
-}
-
 bool HTMLPlugInElement::CanProcessDrag() const {
   return PluginEmbeddedContentView() &&
          PluginEmbeddedContentView()->CanProcessDrag();
@@ -615,15 +556,53 @@
 }
 
 bool HTMLPlugInElement::RequestObject(const PluginParameters& plugin_params) {
-  bool result = RequestObjectInternal(plugin_params);
+  if (url_.IsEmpty() && service_type_.IsEmpty())
+    return false;
 
-  DEFINE_STATIC_LOCAL(
-      EnumerationHistogram, result_histogram,
-      ("Plugin.RequestObjectResult", kPluginRequestObjectResultMax));
-  result_histogram.Count(result ? kPluginRequestObjectResultSuccess
-                                : kPluginRequestObjectResultFailure);
+  if (ProtocolIsJavaScript(url_))
+    return false;
 
-  return result;
+  KURL completed_url =
+      url_.IsEmpty() ? KURL() : GetDocument().CompleteURL(url_);
+  if (!AllowedToLoadObject(completed_url, service_type_))
+    return false;
+
+  ObjectContentType object_type = GetObjectContentType();
+  bool handled_externally =
+      object_type == ObjectContentType::kExternalPlugin &&
+      AllowedToLoadPlugin(completed_url, service_type_) &&
+      GetDocument().GetFrame()->Client()->IsPluginHandledExternally(
+          *this, completed_url,
+          service_type_.IsEmpty() ? GetMIMETypeFromURL(completed_url)
+                                  : service_type_);
+  if (handled_externally)
+    ResetInstance();
+  if (object_type == ObjectContentType::kFrame ||
+      object_type == ObjectContentType::kImage || handled_externally) {
+    if (ContentFrame() && ContentFrame()->IsRemoteFrame()) {
+      // During lazy reattaching, the plugin element loses EmbeddedContentView.
+      // Since the ContentFrame() is not torn down the options here are to
+      // either re-create a new RemoteFrameView or reuse the old one. The former
+      // approach requires CommitNavigation for OOPF to be sent back here in
+      // the parent process. It is easier to just reuse the current FrameView
+      // instead until plugin element issue are properly resolved (for context
+      // see https://crbug.com/781880).
+      DCHECK(!OwnedEmbeddedContentView());
+      SetEmbeddedContentView(ContentFrame()->View());
+      DCHECK(OwnedEmbeddedContentView());
+    }
+    // If the plugin element already contains a subframe,
+    // loadOrRedirectSubframe will re-use it. Otherwise, it will create a
+    // new frame and set it as the LayoutEmbeddedContent's EmbeddedContentView,
+    // causing what was previously in the EmbeddedContentView to be torn down.
+    return LoadOrRedirectSubframe(completed_url, GetNameAttribute(), true);
+  }
+
+  // If an object's content can't be handled and it has no fallback, let
+  // it be handled as a plugin to show the broken plugin icon.
+  bool use_fallback =
+      object_type == ObjectContentType::kNone && HasFallbackContent();
+  return LoadPlugin(completed_url, service_type_, plugin_params, use_fallback);
 }
 
 bool HTMLPlugInElement::LoadPlugin(const KURL& url,
diff --git a/third_party/blink/renderer/core/html/html_plugin_element.h b/third_party/blink/renderer/core/html/html_plugin_element.h
index ad14caf..053689c9 100644
--- a/third_party/blink/renderer/core/html/html_plugin_element.h
+++ b/third_party/blink/renderer/core/html/html_plugin_element.h
@@ -212,8 +212,6 @@
 
   void SetPersistedPlugin(WebPluginContainerImpl*);
 
-  bool RequestObjectInternal(const PluginParameters& plugin_params);
-
   void UpdateServiceTypeIfEmpty();
 
   v8::Global<v8::Object> plugin_wrapper_;
diff --git a/third_party/blink/renderer/core/inspector/browser_protocol.pdl b/third_party/blink/renderer/core/inspector/browser_protocol.pdl
index b303ea2..03f4a84 100644
--- a/third_party/blink/renderer/core/inspector/browser_protocol.pdl
+++ b/third_party/blink/renderer/core/inspector/browser_protocol.pdl
@@ -481,6 +481,7 @@
       backgroundSync
       pushMessaging
       notifications
+      paymentHandler
 
   # Enables event updates for the service.
   command startObserving
diff --git a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
index a5be459b..888a449 100644
--- a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/core/animation/computed_effect_timing.h"
 #include "third_party/blink/renderer/core/animation/css/css_animations.h"
 #include "third_party/blink/renderer/core/animation/effect_model.h"
-#include "third_party/blink/renderer/core/animation/element_animation.h"
 #include "third_party/blink/renderer/core/animation/element_animations.h"
 #include "third_party/blink/renderer/core/animation/keyframe_effect.h"
 #include "third_party/blink/renderer/core/animation/keyframe_effect_model.h"
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index 8464139..6b5b4b1d 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -1048,6 +1048,12 @@
   }
   bool NeedsCollectInlines() const { return bitfields_.NeedsCollectInlines(); }
 
+  // Return true if the min/max preferred logical widths aren't up-to-date. Note
+  // that for objects that *don't* need to calculate preferred logical widths
+  // (e.g. if inline-size is a fixed value, and no other inline lengths are
+  // intrinsic, and the object isn't a descendant of something that needs
+  // min/max), this flag will never be cleared (since the values will never be
+  // calculated).
   bool PreferredLogicalWidthsDirty() const {
     return bitfields_.PreferredLogicalWidthsDirty();
   }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
index c47b57b..3923c78 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
@@ -491,10 +491,12 @@
       // inline-size, the regular layout code (|NGBlockNode::Layout()|) cannot
       // re-layout if it discovers that a scrollbar was added or removed. Handle
       // that situation here. The assumption is that if preferred logical widths
-      // are dirty after layout, it means that scrollbars appeared or
-      // disappeared. We have the same logic in legacy layout in
+      // are dirty after layout, AND its inline-size depends on preferred
+      // logical widths, it means that scrollbars appeared or disappeared. We
+      // have the same logic in legacy layout in
       // |LayoutBlockFlow::UpdateBlockLayout()|.
-      if (node.GetLayoutBox()->PreferredLogicalWidthsDirty()) {
+      if (node.GetLayoutBox()->PreferredLogicalWidthsDirty() &&
+          AbsoluteNeedsChildInlineSize(candidate_style)) {
         // Freeze the scrollbars for this layout pass. We don't want them to
         // change *again*.
         freeze_scrollbars.emplace();
diff --git a/third_party/blink/renderer/core/loader/preload_helper.cc b/third_party/blink/renderer/core/loader/preload_helper.cc
index ef4981c..c19ecc5f 100644
--- a/third_party/blink/renderer/core/loader/preload_helper.cc
+++ b/third_party/blink/renderer/core/loader/preload_helper.cc
@@ -526,6 +526,8 @@
           alternate_resource_info->FindMatchingEntry(url);
       if (alternative_resource &&
           alternative_resource->alternative_url().IsValid()) {
+        UseCounter::Count(document,
+                          WebFeature::kSignedExchangeSubresourcePrefetch);
         params.href = alternative_resource->alternative_url();
         // Change the rel to "prefetch" to trigger the prefetch logic. This
         // request will be handled by a PrefetchURLLoader in the browser
diff --git a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor_test.cc b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor_test.cc
index dc2990c..3f665e4 100644
--- a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor_test.cc
@@ -4,8 +4,8 @@
 
 #include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h"
 
+#include "third_party/blink/renderer/core/animation/animatable.h"
 #include "third_party/blink/renderer/core/animation/animation.h"
-#include "third_party/blink/renderer/core/animation/element_animation.h"
 #include "third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h"
 #include "third_party/blink/renderer/core/paint/paint_layer.h"
 #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
@@ -77,10 +77,8 @@
   EXPECT_EQ(DocumentLifecycle::kPaintClean,
             GetDocument().Lifecycle().GetState());
 
-  HeapVector<Member<Animation>> boxAnimations =
-      ElementAnimation::getAnimations(*box);
-  HeapVector<Member<Animation>> otherBoxAnimations =
-      ElementAnimation::getAnimations(*box);
+  HeapVector<Member<Animation>> boxAnimations = box->getAnimations();
+  HeapVector<Member<Animation>> otherBoxAnimations = otherBox->getAnimations();
 
   EXPECT_EQ(1ul, boxAnimations.size());
   EXPECT_EQ(1ul, otherBoxAnimations.size());
diff --git a/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
index 003ad9fa..d2698a5a 100644
--- a/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/image_paint_timing_detector.cc
@@ -203,6 +203,8 @@
     unsigned last_queued_frame_index,
     WebWidgetClient::SwapResult result,
     base::TimeTicks timestamp) {
+  if (!is_recording_)
+    return;
   // The callback is safe from race-condition only when running on main-thread.
   DCHECK(ThreadState::Current()->IsMainThread());
   records_manager_.AssignPaintTimeToRegisteredQueuedNodes(
diff --git a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
index 1c3c8604..3a6cb6e 100644
--- a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
+++ b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
@@ -61,7 +61,15 @@
   last_type_ = type;
   if (type == LargestContentType::kImage) {
     const ImageResourceContent* cached_image = largest_image_->cached_image;
-    DCHECK(cached_image);
+    // |cached_image| is a weak pointer, so it may be null. This can only happen
+    // if the image has been removed, which means that the largest image is not
+    // up-to-date. This can happen when this method call came from
+    // OnLargestTextUpdated(). It is safe to ignore the image in this case: the
+    // correct largest content should be identified on the next call to
+    // OnLargestImageUpdated().
+    if (!cached_image)
+      return;
+
     const KURL& url = cached_image->Url();
     auto* document = window_performance_->GetExecutionContext();
     if (!url.ProtocolIsData() &&
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 20228cf..382e99989 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
@@ -27,8 +27,6 @@
 
 namespace {
 
-constexpr size_t kTextObjectNumberLimit = 5000;
-
 bool LargeTextFirst(const base::WeakPtr<TextRecord>& a,
                     const base::WeakPtr<TextRecord>& b) {
   DCHECK(a);
@@ -200,7 +198,6 @@
     const IntRect& aggregated_visual_rect,
     const PropertyTreeState& property_tree_state) {
   DCHECK(ShouldWalkObject(aggregator));
-  DCHECK(!records_manager_.HasTooManyObjects());
 
   // The caller should check this.
   DCHECK(!aggregated_visual_rect.IsEmpty());
@@ -219,15 +216,6 @@
             aggregator, aggregated_visual_rect, property_tree_state,
             frame_view_));
   }
-
-  if (records_manager_.HasTooManyObjects()) {
-    TRACE_EVENT_INSTANT2("loading", "TextPaintTimingDetector::OverRecordLimit",
-                         TRACE_EVENT_SCOPE_THREAD, "count_visible_objects",
-                         records_manager_.CountVisibleObjects(),
-                         "count_invisible_objects",
-                         records_manager_.CountInvisibleObjects());
-    StopRecordEntries();
-  }
 }
 
 void TextPaintTimingDetector::StopRecordEntries() {
@@ -305,7 +293,6 @@
     const LayoutObject& object,
     const uint64_t& visual_size,
     const FloatRect& element_timing_rect) {
-  DCHECK(!HasTooManyObjects());
   DCHECK_GT(visual_size, 0u);
 
   Node* node = object.GetNode();
@@ -322,11 +309,6 @@
   visible_objects_.insert(&object, std::move(record));
 }
 
-bool TextRecordsManager::HasTooManyObjects() const {
-  return visible_objects_.size() + invisible_objects_.size() >=
-         kTextObjectNumberLimit;
-}
-
 base::WeakPtr<TextRecord> LargestTextPaintManager::FindLargestPaintCandidate() {
   if (!is_result_invalidated_ && cached_largest_paint_candidate_)
     return cached_largest_paint_candidate_;
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 42cf69d8..22763a1d 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
@@ -104,7 +104,6 @@
   void RemoveVisibleRecord(const LayoutObject&);
   void RemoveInvisibleRecord(const LayoutObject&);
   inline void RecordInvisibleObject(const LayoutObject& object) {
-    DCHECK(!HasTooManyObjects());
     invisible_objects_.insert(&object);
   }
   void RecordVisibleObject(const LayoutObject&,
@@ -115,7 +114,6 @@
   }
   void AssignPaintTimeToQueuedRecords(const base::TimeTicks&);
 
-  bool HasTooManyObjects() const;
   inline bool HasRecorded(const LayoutObject& object) const {
     return visible_objects_.Contains(&object) ||
            invisible_objects_.Contains(&object);
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector_test.cc b/third_party/blink/renderer/core/paint/text_paint_timing_detector_test.cc
index 4abf3aa..e8b9756 100644
--- a/third_party/blink/renderer/core/paint/text_paint_timing_detector_test.cc
+++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector_test.cc
@@ -47,6 +47,11 @@
     return GetPaintTimingDetector().GetTextPaintTimingDetector();
   }
 
+  base::Optional<LargestTextPaintManager>& GetLargestTextPaintManager() {
+    return GetTextPaintTimingDetector()
+        ->records_manager_.GetLargestTextPaintManager();
+  }
+
   wtf_size_t CountVisibleTexts() {
     DCHECK(GetTextPaintTimingDetector());
     return GetTextPaintTimingDetector()
@@ -54,12 +59,31 @@
   }
 
   wtf_size_t CountRankingSetSize() {
-    return GetPaintTimingDetector()
-        .GetTextPaintTimingDetector()
+    DCHECK(GetTextPaintTimingDetector());
+    return GetTextPaintTimingDetector()
         ->records_manager_.GetLargestTextPaintManager()
         ->size_ordered_set_.size();
   }
 
+  wtf_size_t CountInvisibleTexts() {
+    return GetTextPaintTimingDetector()
+        ->records_manager_.invisible_objects_.size();
+  }
+
+  wtf_size_t TextQueuedForPaintTimeSize() {
+    return GetTextPaintTimingDetector()
+        ->records_manager_.texts_queued_for_paint_time_.size();
+  }
+
+  wtf_size_t ContainerTotalSize() {
+    return CountVisibleTexts() + CountRankingSetSize() + CountInvisibleTexts() +
+           TextQueuedForPaintTimeSize();
+  }
+
+  void SimulateInputEvent() {
+    GetPaintTimingDetector().NotifyInputEvent(WebInputEvent::Type::kMouseDown);
+  }
+
   void InvokeCallback() {
     TextPaintTimingDetector* detector =
         GetPaintTimingDetector().GetTextPaintTimingDetector();
@@ -404,6 +428,56 @@
             DOMNodeIds::ExistingIdForNode(small_text));
 }
 
+TEST_F(TextPaintTimingDetectorTest,
+       RemoveRecordFromAllContainerAfterTextRemoval) {
+  SetBodyInnerHTML(R"HTML(
+  )HTML");
+  Element* text = AppendDivElementToBody("text");
+  UpdateAllLifecyclePhasesAndSimulateSwapTime();
+  EXPECT_EQ(ContainerTotalSize(), 2u);
+
+  RemoveElement(text);
+  EXPECT_EQ(ContainerTotalSize(), 0u);
+}
+
+TEST_F(TextPaintTimingDetectorTest,
+       RemoveRecordFromAllContainerAfterRepeatedAttachAndDetach) {
+  SetBodyInnerHTML(R"HTML(
+  )HTML");
+  Element* text1 = AppendDivElementToBody("text");
+  UpdateAllLifecyclePhasesAndSimulateSwapTime();
+  EXPECT_EQ(ContainerTotalSize(), 2u);
+
+  Element* text2 = AppendDivElementToBody("text2");
+  UpdateAllLifecyclePhasesAndSimulateSwapTime();
+  EXPECT_EQ(ContainerTotalSize(), 4u);
+
+  RemoveElement(text1);
+  EXPECT_EQ(ContainerTotalSize(), 2u);
+
+  GetDocument().body()->AppendChild(text1);
+  UpdateAllLifecyclePhasesAndSimulateSwapTime();
+  EXPECT_EQ(ContainerTotalSize(), 4u);
+
+  RemoveElement(text1);
+  EXPECT_EQ(ContainerTotalSize(), 2u);
+
+  RemoveElement(text2);
+  EXPECT_EQ(ContainerTotalSize(), 0u);
+}
+
+TEST_F(TextPaintTimingDetectorTest,
+       DestroyLargestTextPaintMangerAfterUserInput) {
+  SetBodyInnerHTML(R"HTML(
+  )HTML");
+  AppendDivElementToBody("text");
+  UpdateAllLifecyclePhasesAndSimulateSwapTime();
+  EXPECT_TRUE(GetLargestTextPaintManager());
+
+  SimulateInputEvent();
+  EXPECT_FALSE(GetLargestTextPaintManager());
+}
+
 TEST_F(TextPaintTimingDetectorTest, LargestTextPaint_ReportLastNullCandidate) {
   SetBodyInnerHTML(R"HTML(
   )HTML");
@@ -430,7 +504,6 @@
             DOMNodeIds::ExistingIdForNode(short_text));
 }
 
-// Depite that the l
 TEST_F(TextPaintTimingDetectorTest, LargestTextPaint_CompareSizesAtFirstPaint) {
   SetBodyInnerHTML(R"HTML(
   )HTML");
@@ -498,22 +571,6 @@
             DOMNodeIds::ExistingIdForNode(elem));
 }
 
-TEST_F(TextPaintTimingDetectorTest, StopRecordingOverNodeLimit) {
-  SetBodyInnerHTML(R"HTML(
-  )HTML");
-  UpdateAllLifecyclePhasesAndSimulateSwapTime();
-
-  for (int i = 1; i <= 4999; i++)
-    AppendDivElementToBody(WTF::String::Number(i), "position:fixed;left:0px");
-
-  UpdateAllLifecyclePhasesAndSimulateSwapTime();
-
-  AppendDivElementToBody(WTF::String::Number(5000));
-  UpdateAllLifecyclePhasesAndSimulateSwapTime();
-  // Reached limit, so stopped recording and now should have 0 texts.
-  EXPECT_FALSE(GetTextPaintTimingDetector());
-}
-
 // This is for comparison with the ClippedByViewport test.
 TEST_F(TextPaintTimingDetectorTest, NormalTextUnclipped) {
   SetBodyInnerHTML(R"HTML(
diff --git a/third_party/blink/renderer/devtools/front_end/axe_core_test_runner/AxeCoreTestRunner.js b/third_party/blink/renderer/devtools/front_end/axe_core_test_runner/AxeCoreTestRunner.js
index 76c049c9..4d8316c 100644
--- a/third_party/blink/renderer/devtools/front_end/axe_core_test_runner/AxeCoreTestRunner.js
+++ b/third_party/blink/renderer/devtools/front_end/axe_core_test_runner/AxeCoreTestRunner.js
@@ -97,6 +97,7 @@
     return {
       target: node.target,
       html: node.html,
+      failureSummary: node.failureSummary,
     };
   });
   return list;
diff --git a/third_party/blink/renderer/devtools/front_end/main/Main.js b/third_party/blink/renderer/devtools/front_end/main/Main.js
index 69e4ead..e104fcc6 100644
--- a/third_party/blink/renderer/devtools/front_end/main/Main.js
+++ b/third_party/blink/renderer/devtools/front_end/main/Main.js
@@ -110,6 +110,7 @@
     Runtime.experiments.register('sourcesPrettyPrint', 'Automatically pretty print in the Sources Panel');
     Runtime.experiments.register('backgroundServices', 'Background web platform feature events', true);
     Runtime.experiments.register('backgroundServicesNotifications', 'Background services section for Notifications');
+    Runtime.experiments.register('backgroundServicesPaymentHandler', 'Background services section for Payment Handler');
     Runtime.experiments.register('backgroundServicesPushMessaging', 'Background services section for Push Messaging');
     Runtime.experiments.register('blackboxJSFramesOnTimeline', 'Blackbox JavaScript frames on Timeline', true);
     Runtime.experiments.register('emptySourceMapAutoStepping', 'Empty sourcemap auto-stepping');
diff --git a/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js b/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
index 3896a99..fbfe1f9 100644
--- a/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
+++ b/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
@@ -50,8 +50,9 @@
   _createFolderExcludePatternInput() {
     const p = createElement('p');
     const labelElement = p.createChild('label');
-    labelElement.textContent = Common.UIString('Folder exclude pattern');
+    labelElement.textContent = ls`Folder exclude pattern`;
     const inputElement = UI.createInput('', 'text');
+    UI.ARIAUtils.bindLabelToControl(labelElement, inputElement);
     p.appendChild(inputElement);
     inputElement.style.width = '270px';
     const folderExcludeSetting = Persistence.isolatedFileSystemManager.workspaceFolderExcludePatternSetting();
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 6c91449..0a21b8a 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js
+++ b/third_party/blink/renderer/devtools/front_end/resources/ApplicationPanelSidebar.js
@@ -119,6 +119,11 @@
             new Resources.BackgroundServiceTreeElement(panel, Protocol.BackgroundService.ServiceName.Notifications);
         backgroundServiceTreeElement.appendChild(this.notificationsTreeElement);
       }
+      if (Runtime.experiments.isEnabled('backgroundServicesPaymentHandler')) {
+        this.paymentHandlerTreeElement =
+            new Resources.BackgroundServiceTreeElement(panel, Protocol.BackgroundService.ServiceName.PaymentHandler);
+        backgroundServiceTreeElement.appendChild(this.paymentHandlerTreeElement);
+      }
       if (Runtime.experiments.isEnabled('backgroundServicesPushMessaging')) {
         this.pushMessagingTreeElement =
             new Resources.BackgroundServiceTreeElement(panel, Protocol.BackgroundService.ServiceName.PushMessaging);
@@ -245,6 +250,8 @@
       this.backgroundSyncTreeElement._initialize(backgroundServiceModel);
       if (Runtime.experiments.isEnabled('backgroundServicesNotifications'))
         this.notificationsTreeElement._initialize(backgroundServiceModel);
+      if (Runtime.experiments.isEnabled('backgroundServicesPaymentHandler'))
+        this.paymentHandlerTreeElement._initialize(backgroundServiceModel);
       if (Runtime.experiments.isEnabled('backgroundServicesPushMessaging'))
         this.pushMessagingTreeElement._initialize(backgroundServiceModel);
     }
@@ -762,6 +769,8 @@
         return 'mediumicon-cloud';
       case Protocol.BackgroundService.ServiceName.Notifications:
         return 'mediumicon-bell';
+      case Protocol.BackgroundService.ServiceName.PaymentHandler:
+        return 'mediumicon-payment';
       default:
         console.error(`Service ${this._serviceName} does not have a dedicated icon`);
         return 'mediumicon-table';
diff --git a/third_party/blink/renderer/devtools/front_end/resources/BackgroundServiceView.js b/third_party/blink/renderer/devtools/front_end/resources/BackgroundServiceView.js
index 45456bc..05a63172 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/BackgroundServiceView.js
+++ b/third_party/blink/renderer/devtools/front_end/resources/BackgroundServiceView.js
@@ -17,6 +17,8 @@
         return ls`Push Messaging`;
       case Protocol.BackgroundService.ServiceName.Notifications:
         return ls`Notifications`;
+      case Protocol.BackgroundService.ServiceName.PaymentHandler:
+        return ls`Payment Handler`;
       default:
         return '';
     }
diff --git a/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp b/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp
index 9353faf..4ed2e5b 100644
--- a/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp
+++ b/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp
@@ -404,4 +404,7 @@
   <message name="IDS_DEVTOOLS_f31bbdd1b3e85bccd652680e16935819" desc="">
     Source
   </message>
+  <message name="IDS_DEVTOOLS_fb1508747fe448fd8b006e923ba1c3ef" desc="">
+    Payment Handler
+  </message>
 </grit-part>
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 6045a64..4482889 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1814,66 +1814,32 @@
 
 bool AXObject::SupportsARIAExpanded() const {
   switch (RoleValue()) {
-    case ax::mojom::Role::kAlertDialog:
-    case ax::mojom::Role::kAlert:
-    case ax::mojom::Role::kArticle:
-    case ax::mojom::Role::kBanner:
+    case ax::mojom::Role::kApplication:
     case ax::mojom::Role::kButton:
-    case ax::mojom::Role::kCell:
+    case ax::mojom::Role::kCheckBox:
     case ax::mojom::Role::kColumnHeader:
     case ax::mojom::Role::kComboBoxGrouping:
     case ax::mojom::Role::kComboBoxMenuButton:
-    case ax::mojom::Role::kComplementary:
-    case ax::mojom::Role::kContentInfo:
-    case ax::mojom::Role::kDefinition:
-    case ax::mojom::Role::kDialog:
-    case ax::mojom::Role::kDirectory:
     case ax::mojom::Role::kDisclosureTriangle:
-    case ax::mojom::Role::kDocument:
-    case ax::mojom::Role::kFeed:
-    case ax::mojom::Role::kFigure:
-    case ax::mojom::Role::kForm:
-    case ax::mojom::Role::kGrid:
-    case ax::mojom::Role::kGroup:
-    case ax::mojom::Role::kHeading:
-    case ax::mojom::Role::kImage:
-    case ax::mojom::Role::kLayoutTable:
-    case ax::mojom::Role::kList:
     case ax::mojom::Role::kListBox:
-    case ax::mojom::Role::kListBoxOption:
-    case ax::mojom::Role::kListItem:
     case ax::mojom::Role::kLink:
-    case ax::mojom::Role::kLog:
-    case ax::mojom::Role::kMain:
-    case ax::mojom::Role::kMarquee:
-    case ax::mojom::Role::kMath:
-    case ax::mojom::Role::kMenu:
-    case ax::mojom::Role::kMenuBar:
     case ax::mojom::Role::kMenuButton:
     case ax::mojom::Role::kMenuItem:
     case ax::mojom::Role::kMenuItemCheckBox:
     case ax::mojom::Role::kMenuItemRadio:
-    case ax::mojom::Role::kNavigation:
-    case ax::mojom::Role::kNote:
-    case ax::mojom::Role::kProgressIndicator:
-    case ax::mojom::Role::kRadioGroup:
-    case ax::mojom::Role::kRegion:
     case ax::mojom::Role::kRow:
     case ax::mojom::Role::kRowHeader:
-    case ax::mojom::Role::kSearch:
-    case ax::mojom::Role::kStatus:
+    case ax::mojom::Role::kSwitch:
     case ax::mojom::Role::kTab:
-    case ax::mojom::Role::kTable:
-    case ax::mojom::Role::kTabPanel:
-    case ax::mojom::Role::kTerm:
     case ax::mojom::Role::kTextFieldWithComboBox:
-    case ax::mojom::Role::kTimer:
-    case ax::mojom::Role::kToolbar:
-    case ax::mojom::Role::kTooltip:
-    case ax::mojom::Role::kTree:
-    case ax::mojom::Role::kTreeGrid:
     case ax::mojom::Role::kTreeItem:
       return true;
+    case ax::mojom::Role::kCell:
+      // TODO(Accessibility): aria-expanded is supported on grid cells but not
+      // on cells inside a static table. Consider creating separate internal
+      // roles so that we can easily distinguish these two types. See also
+      // IsSubWidget().
+      return true;
     default:
       return false;
   }
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
index e53fa0a..946a9fd 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
@@ -87,15 +87,6 @@
   RenderBarSegments();
 }
 
-void MediaControlTimelineElement::OnPlaying() {
-  Frame* frame = GetDocument().GetFrame();
-  if (!frame)
-    return;
-  metrics_.RecordPlaying(
-      frame->GetChromeClient().GetScreenInfo().orientation_type,
-      MediaElement().IsFullscreen(), TrackWidth());
-}
-
 const char* MediaControlTimelineElement::GetNameForHistograms() const {
   return "TimelineSlider";
 }
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
index b46f2469..fe7ce278 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
@@ -27,8 +27,6 @@
   void SetPosition(double);
   void SetDuration(double);
 
-  void OnPlaying();
-
   void OnMediaKeyboardEvent(Event* event) { DefaultEventHandler(*event); }
 
   void RenderBarSegments();
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.cc
index 495cead..b397517 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.cc
@@ -172,7 +172,6 @@
                                      HistogramType, ##__VA_ARGS__)             \
     else {                                                                     \
       /* Skip logging if timeline is narrower than minimum suffix bucket. */   \
-      /* If this happens a lot, it'll show up in Media.Timeline.Width. */      \
     }                                                                          \
   } while (false)
 
@@ -334,62 +333,4 @@
   drag_sum_abs_delta_media_seconds_ += std::abs(delta_media_seconds);
 }
 
-void MediaControlTimelineMetrics::RecordPlaying(
-    WebScreenOrientationType orientation,
-    bool is_fullscreen,
-    int timeline_width) {
-  bool is_portrait = false;  // Arbitrary initial value to appease MSVC.
-  switch (orientation) {
-    case kWebScreenOrientationPortraitPrimary:
-    case kWebScreenOrientationPortraitSecondary:
-      is_portrait = true;
-      break;
-    case kWebScreenOrientationLandscapePrimary:
-    case kWebScreenOrientationLandscapeSecondary:
-      is_portrait = false;
-      break;
-    case kWebScreenOrientationUndefined:
-      return;  // Skip UMA in the unlikely event we fail to detect orientation.
-  }
-
-  // Only record the first time each media element enters the playing state.
-  if (!has_never_been_playing_)
-    return;
-  has_never_been_playing_ = false;
-
-  constexpr int32_t kMin = 1;
-  constexpr int32_t kMax = 7680;  // Equivalent to an 80inch wide 8K monitor.
-  constexpr int32_t kBucketCount = 50;
-  // Record merged histogram for all configurations.
-  DEFINE_STATIC_LOCAL(CustomCountHistogram, all_configurations_width_histogram,
-                      ("Media.Timeline.Width", kMin, kMax, kBucketCount));
-  all_configurations_width_histogram.Count(timeline_width);
-  // Record configuration-specific histogram.
-  if (!is_fullscreen) {
-    if (is_portrait) {
-      DEFINE_STATIC_LOCAL(
-          CustomCountHistogram, width_histogram,
-          ("Media.Timeline.Width.InlinePortrait", kMin, kMax, kBucketCount));
-      width_histogram.Count(timeline_width);
-    } else {
-      DEFINE_STATIC_LOCAL(
-          CustomCountHistogram, width_histogram,
-          ("Media.Timeline.Width.InlineLandscape", kMin, kMax, kBucketCount));
-      width_histogram.Count(timeline_width);
-    }
-  } else {
-    if (is_portrait) {
-      DEFINE_STATIC_LOCAL(CustomCountHistogram, width_histogram,
-                          ("Media.Timeline.Width.FullscreenPortrait", kMin,
-                           kMax, kBucketCount));
-      width_histogram.Count(timeline_width);
-    } else {
-      DEFINE_STATIC_LOCAL(CustomCountHistogram, width_histogram,
-                          ("Media.Timeline.Width.FullscreenLandscape", kMin,
-                           kMax, kBucketCount));
-      width_histogram.Count(timeline_width);
-    }
-  }
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h
index 1c0d4b60..a2dd2a3 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_metrics.h
@@ -34,11 +34,6 @@
   // startGesture/Key and recordEndGesture/Key.
   void OnInput(double from_seconds, double to_seconds);
 
-  // Reports width to UMA the first time the media starts playing.
-  void RecordPlaying(WebScreenOrientationType,
-                     bool is_fullscreen,
-                     int timeline_width);
-
  private:
   enum class State {
     // No active gesture. Progresses to kKeyDown on |startKey|, or
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
index a1bdf73..af06a4e 100644
--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
+++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -1788,8 +1788,6 @@
 }
 
 void MediaControlsImpl::OnPlaying() {
-  timeline_->OnPlaying();
-
   StartHideMediaControlsTimer();
   UpdateCSSClassFromState();
 }
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc
index e20b68f..cc12596 100644
--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc
+++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc
@@ -685,31 +685,6 @@
   EXPECT_EQ(duration / 4, timeline->valueAsNumber());
 }
 
-TEST_F(MediaControlsImplTest, TimelineMetricsWidth) {
-  MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4");
-  test::RunPendingTasks();
-  SetReady();
-  EnsureSizing();
-  test::RunPendingTasks();
-
-  MediaControlTimelineElement* timeline = TimelineElement();
-  ASSERT_TRUE(IsElementVisible(*timeline));
-  ASSERT_LT(0, timeline->getBoundingClientRect()->width());
-
-  MediaControls().MediaElement().Play();
-  test::RunPendingTasks();
-
-  GetHistogramTester().ExpectUniqueSample(
-      "Media.Timeline.Width.InlineLandscape",
-      timeline->getBoundingClientRect()->width(), 1);
-  GetHistogramTester().ExpectTotalCount("Media.Timeline.Width.InlinePortrait",
-                                        0);
-  GetHistogramTester().ExpectTotalCount(
-      "Media.Timeline.Width.FullscreenLandscape", 0);
-  GetHistogramTester().ExpectTotalCount(
-      "Media.Timeline.Width.FullscreenPortrait", 0);
-}
-
 TEST_F(MediaControlsImplTest, TimelineMetricsClick) {
   double duration = 540;  // 9 minutes
   LoadMediaWithDuration(duration);
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc
index e957acc..c3d6a72 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.cc
+++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -871,7 +871,8 @@
   event->frame()->Deactivate();
 }
 
-void XRSession::OnSelectEnd(XRInputSource* input_source) {
+void XRSession::OnSelectEnd(XRInputSource* input_source,
+                            UserActivation user_activation) {
   // Discard duplicate events, or events after the session has ended.
   if (!input_source->primaryInputPressed() || ended_)
     return;
@@ -883,7 +884,9 @@
     return;
 
   std::unique_ptr<UserGestureIndicator> gesture_indicator =
-      LocalFrame::NotifyUserActivation(frame);
+      user_activation == UserActivation::kEnabled
+          ? LocalFrame::NotifyUserActivation(frame)
+          : nullptr;
 
   XRInputSourceEvent* event =
       CreateInputSourceEvent(event_type_names::kSelectend, input_source);
@@ -907,6 +910,13 @@
   // If SelectStart caused the session to end, we shouldn't try to fire the
   // select event.
   if (!input_source->selectionCancelled() && !ended_) {
+    LocalFrame* frame = xr_->GetFrame();
+    if (!frame)
+      return;
+
+    std::unique_ptr<UserGestureIndicator> gesture_indicator =
+        LocalFrame::NotifyUserActivation(frame);
+
     XRInputSourceEvent* event =
         CreateInputSourceEvent(event_type_names::kSelect, input_source);
     DispatchEvent(*event);
@@ -942,7 +952,7 @@
     // treat this as a cancelled selection, firing the selectend event so the
     // page stays in sync with the controller state but won't fire the
     // usual select event.
-    OnSelectEnd(input_source);
+    OnSelectEnd(input_source, UserActivation::kDisabled);
   }
 }
 
diff --git a/third_party/blink/renderer/modules/xr/xr_session.h b/third_party/blink/renderer/modules/xr/xr_session.h
index 5a7c07e..7236857 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.h
+++ b/third_party/blink/renderer/modules/xr/xr_session.h
@@ -61,7 +61,9 @@
     kBlendModeAlphaBlend
   };
 
-  XRSession(XR*,
+  enum class UserActivation { kEnabled, kDisabled };
+
+  XRSession(XR* xr,
             device::mojom::blink::XRSessionClientRequest client_request,
             SessionMode mode,
             EnvironmentBlendMode environment_blend_mode,
@@ -85,13 +87,15 @@
   DEFINE_ATTRIBUTE_EVENT_LISTENER(selectstart, kSelectstart)
   DEFINE_ATTRIBUTE_EVENT_LISTENER(selectend, kSelectend)
 
-  void updateRenderState(XRRenderStateInit*, ExceptionState&);
+  void updateRenderState(XRRenderStateInit* render_state_init,
+                         ExceptionState& exception_state);
   void updateWorldTrackingState(
-      XRWorldTrackingStateInit* worldTrackingStateInit,
+      XRWorldTrackingStateInit* world_tracking_state_init,
       ExceptionState& exception_state);
-  ScriptPromise requestReferenceSpace(ScriptState*, const String&);
+  ScriptPromise requestReferenceSpace(ScriptState* script_state,
+                                      const String& type);
 
-  int requestAnimationFrame(V8XRFrameRequestCallback*);
+  int requestAnimationFrame(V8XRFrameRequestCallback* callback);
   void cancelAnimationFrame(int id);
 
   XRInputSourceArray* inputSources() const;
@@ -101,7 +105,7 @@
                                XRSpace* space);
 
   // Called by JavaScript to manually end the session.
-  ScriptPromise end(ScriptState*);
+  ScriptPromise end(ScriptState* script_state);
 
   bool ended() { return ended_; }
 
@@ -130,14 +134,15 @@
 
   void OnFocusChanged();
   void OnFrame(double timestamp,
-               std::unique_ptr<TransformationMatrix>,
+               std::unique_ptr<TransformationMatrix> base_pose_matrix,
                const base::Optional<gpu::MailboxHolder>& output_mailbox_holder,
                const device::mojom::blink::XRPlaneDetectionDataPtr&
                    detected_planes_data);
 
   void OnInputStateChange(
       int16_t frame_id,
-      base::span<const device::mojom::blink::XRInputSourceStatePtr>);
+      base::span<const device::mojom::blink::XRInputSourceStatePtr>
+          input_states);
 
   // XRInputSourceButtonListener
   void OnButtonEvent(
@@ -145,12 +150,13 @@
 
   WTF::Vector<XRViewData>& views();
 
-  void AddTransientInputSource(XRInputSource*);
-  void RemoveTransientInputSource(XRInputSource*);
+  void AddTransientInputSource(XRInputSource* input_source);
+  void RemoveTransientInputSource(XRInputSource* input_source);
 
-  void OnSelectStart(XRInputSource*);
-  void OnSelectEnd(XRInputSource*);
-  void OnSelect(XRInputSource*);
+  void OnSelectStart(XRInputSource* input_source);
+  void OnSelectEnd(XRInputSource* input_source,
+                   UserActivation user_activation = UserActivation::kEnabled);
+  void OnSelect(XRInputSource* input_source);
 
   void OnPoseReset();
 
@@ -192,7 +198,7 @@
 
   bool UsesInputEventing() { return uses_input_eventing_; }
 
-  void Trace(blink::Visitor*) override;
+  void Trace(blink::Visitor* visitor) override;
 
   // ScriptWrappable
   bool HasPendingActivity() const override;
@@ -204,19 +210,21 @@
   void UpdateCanvasDimensions(Element*);
   void ApplyPendingRenderState();
 
-  void UpdateSelectState(XRInputSource*,
-                         const device::mojom::blink::XRInputSourceStatePtr&);
-  void UpdateSelectStateOnRemoval(XRInputSource*);
-  XRInputSourceEvent* CreateInputSourceEvent(const AtomicString&,
-                                             XRInputSource*);
+  void UpdateSelectState(
+      XRInputSource* input_source,
+      const device::mojom::blink::XRInputSourceStatePtr& state);
+  void UpdateSelectStateOnRemoval(XRInputSource* input_source);
+  XRInputSourceEvent* CreateInputSourceEvent(const AtomicString& type,
+                                             XRInputSource* input_source);
 
   void OnInputStateChangeInternal(
       int16_t frame_id,
-      base::span<const device::mojom::blink::XRInputSourceStatePtr>,
+      base::span<const device::mojom::blink::XRInputSourceStatePtr>
+          input_states,
       bool from_eventing);
 
   // XRSessionClient
-  void OnChanged(device::mojom::blink::VRDisplayInfoPtr) override;
+  void OnChanged(device::mojom::blink::VRDisplayInfoPtr display_info) override;
   void OnExitPresent() override;
   void OnFocus() override;
   void OnBlur() override;
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index 9779eca..945a3f3 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -176,6 +176,9 @@
   if (!scroll_offset_node)
     return nullptr;
 
+  // We don't decomposite scroll transform nodes.
+  DCHECK_EQ(FloatPoint(), pending_layer.offset_of_decomposited_transforms);
+
   const auto& scroll_node = *scroll_offset_node->ScrollNode();
   auto scroll_element_id = scroll_node.GetCompositorElementId();
 
@@ -235,9 +238,9 @@
   DCHECK(first_paint_chunk.size());
 
   // If the paint chunk is a foreign layer, just return that layer.
-  if (scoped_refptr<cc::Layer> foreign_layer =
-          ForeignLayerForPaintChunk(*paint_artifact, first_paint_chunk,
-                                    pending_layer.offset_to_transform_parent)) {
+  if (scoped_refptr<cc::Layer> foreign_layer = ForeignLayerForPaintChunk(
+          *paint_artifact, first_paint_chunk,
+          pending_layer.offset_of_decomposited_transforms)) {
     DCHECK_EQ(paint_chunks.size(), 1u);
     if (extra_data_for_testing_enabled_)
       extra_data_for_testing_->content_layers.push_back(foreign_layer);
@@ -257,7 +260,7 @@
   std::unique_ptr<ContentLayerClientImpl> content_layer_client =
       ClientForPaintChunk(first_paint_chunk);
 
-  gfx::Rect cc_combined_bounds(EnclosingIntRect(pending_layer.bounds));
+  IntRect cc_combined_bounds = EnclosingIntRect(pending_layer.bounds);
   auto cc_layer = content_layer_client->UpdateCcPictureLayer(
       paint_artifact, paint_chunks, cc_combined_bounds,
       pending_layer.property_tree_state);
@@ -272,7 +275,7 @@
   // here to avoid changing foreign layers. This includes things set by
   // GraphicsLayer on the ContentsLayer() or by video clients etc.
   cc_layer->SetContentsOpaque(pending_layer.rect_known_to_be_opaque.Contains(
-      FloatRect(EnclosingIntRect(pending_layer.bounds))));
+      FloatRect(cc_combined_bounds)));
 
   return cc_layer;
 }
@@ -338,7 +341,6 @@
           first_paint_chunk.known_to_be_opaque ? bounds : FloatRect()),
       property_tree_state(
           first_paint_chunk.properties.GetPropertyTreeState().Unalias()),
-      offset_to_transform_parent(FloatPoint()),
       requires_own_layer(chunk_requires_own_layer) {
   paint_chunk_indices.push_back(chunk_index);
 }
@@ -388,12 +390,6 @@
   rect_known_to_be_opaque = FloatRect();
 }
 
-void PaintArtifactCompositor::PendingLayer::DecompositeTransform() {
-  const auto& transform = property_tree_state.Transform().Unalias();
-  property_tree_state.SetTransform(*transform.Parent());
-  offset_to_transform_parent += transform.Translation2D();
-}
-
 const PaintChunk& PaintArtifactCompositor::PendingLayer::FirstPaintChunk(
     const PaintArtifact& paint_artifact) const {
   return paint_artifact.PaintChunks()[paint_chunk_indices[0]];
@@ -794,10 +790,8 @@
 //  9. All child transform nodes are also able to be de-composited.
 // This algorithm should be O(t+c+e) where t,c,e are the number of transform,
 // clip, and effect nodes in the full tree.
-void PaintArtifactCompositor::DecompositeTransforms() {
-  // TODO(masonfreed): CAP is not yet implemented here.
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
-    return;
+void PaintArtifactCompositor::DecompositeTransforms(
+    const PaintArtifact& paint_artifact) {
   WTF::HashMap<const TransformPaintPropertyNode*, bool> can_be_decomposited;
   WTF::HashSet<const void*> clips_and_effects_seen;
   for (const auto& pending_layer : pending_layers_) {
@@ -852,18 +846,35 @@
       if (!node->IsRoot())
         mark_not_decompositable(&node->LocalTransformSpace());
     }
+
+    if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
+      // The scroll translation node of a scroll hit test layer may not be
+      // referenced by any pending layer's property tree state. Disallow
+      // decomposition of it (and its ancestors).
+      if (const auto* scroll_translation =
+              ScrollTranslationForScrollHitTestLayer(paint_artifact,
+                                                     pending_layer))
+        mark_not_decompositable(scroll_translation);
+    }
   }
 
   // Now, for any transform nodes that can be de-composited, re-map their
   // transform to point to the correct parent, and set the
   // offset_to_transform_parent.
   for (auto& pending_layer : pending_layers_) {
-    const auto* transform_node = &pending_layer.property_tree_state.Transform();
-    while (transform_node && !transform_node->IsRoot() &&
-           can_be_decomposited.at(transform_node)) {
-      pending_layer.DecompositeTransform();
-      transform_node = SafeUnalias(transform_node->Parent());
+    const auto* transform =
+        &pending_layer.property_tree_state.Transform().Unalias();
+    while (!transform->IsRoot() && can_be_decomposited.at(transform)) {
+      pending_layer.offset_of_decomposited_transforms +=
+          transform->Translation2D();
+      transform = &transform->Parent()->Unalias();
     }
+    pending_layer.property_tree_state.SetTransform(*transform);
+    // Move bounds into the new transform space.
+    pending_layer.bounds.MoveBy(
+        pending_layer.offset_of_decomposited_transforms);
+    pending_layer.rect_known_to_be_opaque.MoveBy(
+        pending_layer.offset_of_decomposited_transforms);
   }
 }
 
@@ -915,7 +926,7 @@
     entry.in_use = false;
 
   // See if we can de-composite any transforms.
-  DecompositeTransforms();
+  DecompositeTransforms(*paint_artifact);
 
   for (auto& pending_layer : pending_layers_) {
     const auto& property_state = pending_layer.property_tree_state;
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
index b88b3154..e08cf3bc 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
@@ -213,19 +213,18 @@
     // to the chunks as Skia commands.
     void Upcast(const PropertyTreeState&);
 
-    void DecompositeTransform();
-
     const PaintChunk& FirstPaintChunk(const PaintArtifact&) const;
 
+    // The rects are in the space of property_tree_state.
     FloatRect bounds;
-    Vector<wtf_size_t> paint_chunk_indices;
     FloatRect rect_known_to_be_opaque;
+    Vector<wtf_size_t> paint_chunk_indices;
     PropertyTreeState property_tree_state;
-    FloatPoint offset_to_transform_parent;
+    FloatPoint offset_of_decomposited_transforms;
     bool requires_own_layer;
   };
 
-  void DecompositeTransforms();
+  void DecompositeTransforms(const PaintArtifact&);
 
   // Collects the PaintChunks into groups which will end up in the same
   // cc layer. This is the entry point of the layerization algorithm.
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/android.py b/third_party/blink/tools/blinkpy/web_tests/port/android.py
index 39d20f7..5a19313 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/android.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/android.py
@@ -273,7 +273,7 @@
         devil_chromium.Initialize(
             output_directory=self._build_path(),
             adb_path=self._path_from_chromium_base(
-                'third_party', 'android_tools', 'sdk', 'platform-tools', 'adb'))
+                'third_party', 'android_sdk', 'public', 'platform-tools', 'adb'))
         devil_env.config.InitializeLogging(
             logging.DEBUG
             if self._debug_logging and self.get_option('debug_rwt_logging')
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 84e45ce..c2733f16 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -3203,6 +3203,12 @@
 crbug.com/968164 external/wpt/css/css-ui/webkit-appearance-menulist-button-001.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html [ Failure ]
+crbug.com/626703 [ Mac ] virtual/layout_ng_experimental/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html [ Failure ]
+crbug.com/626703 virtual/layout_ng_experimental/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html [ Failure ]
+crbug.com/626703 [ Mac ] virtual/layout_ng_experimental/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html [ Failure ]
+crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html [ Failure ]
+crbug.com/626703 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html [ Failure ]
@@ -6238,6 +6244,7 @@
 crbug.com/979490 [ Linux Win ] virtual/omt-worker-fetch/external/wpt/workers/modules/dedicated-worker-import-referrer.html [ Pass Timeout ]
 crbug.com/980924 [ Linux Win Debug ] external/wpt/html/cross-origin/null.tentative.html [ Pass Failure ]
 crbug.com/980283 [ Mac ] virtual/gpu/fast/canvas/image-object-in-canvas.html [ Pass Failure ]
+crbug.com/981137 [ Win ] virtual/gpu-rasterization/images/webp-no-color-profile-lossy.html [ Pass Failure ]
 
 # TODO(crbug.com/980588): reenable once WPT is fixed
 crbug.com/980588 external/wpt/screen-orientation/lock-unlock-check.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/animations/custom-properties/custom-percentage-list-type-interpolation-expected.txt b/third_party/blink/web_tests/animations/custom-properties/custom-percentage-list-type-interpolation-expected.txt
index 461b2741..4b5868caa 100644
--- a/third_party/blink/web_tests/animations/custom-properties/custom-percentage-list-type-interpolation-expected.txt
+++ b/third_party/blink/web_tests/animations/custom-properties/custom-percentage-list-type-interpolation-expected.txt
@@ -56,7 +56,7 @@
 PASS CSS Animations: property <--percentage-list> from [10%] to [100%] at (1) is [100%]
 PASS CSS Animations: property <--percentage-list> from [10%] to [100%] at (1.5) is [145%]
 FAIL CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (-0.3) is [-6% -60%] assert_equals: expected "7 % 70 % " but got "- 6 % - 60 % "
-FAIL CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (0) is [0px 0px] assert_equals: expected "10 % 100 % " but got "0px 0px "
+FAIL CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (0) is [0% 0%] assert_equals: expected "10 % 100 % " but got "0 % 0 % "
 FAIL CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (0.5) is [10% 100%] assert_equals: expected "15 % 150 % " but got "10 % 100 % "
 PASS CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (1) is [20% 200%]
 FAIL CSS Animations: property <--percentage-list> from neutral to [20% 200%] at (1.5) is [30% 300%] assert_equals: expected "25 % 250 % " but got "30 % 300 % "
@@ -86,7 +86,7 @@
 PASS Web Animations: property <--percentage-list> from [10%] to [100%] at (1) is [100%]
 PASS Web Animations: property <--percentage-list> from [10%] to [100%] at (1.5) is [145%]
 FAIL Web Animations: property <--percentage-list> from neutral to [20% 200%] at (-0.3) is [-6% -60%] assert_equals: expected "7 % 70 % " but got "- 6 % - 60 % "
-FAIL Web Animations: property <--percentage-list> from neutral to [20% 200%] at (0) is [0px 0px] assert_equals: expected "10 % 100 % " but got "0px 0px "
+FAIL Web Animations: property <--percentage-list> from neutral to [20% 200%] at (0) is [0% 0%] assert_equals: expected "10 % 100 % " but got "0 % 0 % "
 FAIL Web Animations: property <--percentage-list> from neutral to [20% 200%] at (0.5) is [10% 100%] assert_equals: expected "15 % 150 % " but got "10 % 100 % "
 PASS Web Animations: property <--percentage-list> from neutral to [20% 200%] at (1) is [20% 200%]
 FAIL Web Animations: property <--percentage-list> from neutral to [20% 200%] at (1.5) is [30% 300%] assert_equals: expected "25 % 250 % " but got "30 % 300 % "
diff --git a/third_party/blink/web_tests/animations/custom-properties/registered-percentage-length-boundary.html b/third_party/blink/web_tests/animations/custom-properties/registered-percentage-length-boundary.html
new file mode 100644
index 0000000..0cf65e2
--- /dev/null
+++ b/third_party/blink/web_tests/animations/custom-properties/registered-percentage-length-boundary.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script>
+CSS.registerProperty({
+  name: '--percentage-xor-length',
+  syntax: '<length> | <percentage>',
+  initialValue: '400px',
+  inherits: false,
+});
+</script>
+<style>
+  @keyframes test {
+    from { --percentage-xor-length: 100px; }
+    to { --percentage-xor-length: 100%; }
+  }
+  #target {
+    animation-name: test;
+    animation-duration: 100s;
+    animation-delay: -50s;
+    animation-play-state: paused;
+  }
+</style>
+<div id="target">target</div>
+<script>
+test(() => {
+  let cs = getComputedStyle(target);
+  assert_equals(cs.getPropertyValue('--percentage-xor-length'), '100%');
+}, 'No smooth interpolation between <length> and <percentage>');
+</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
index 7ec3f6e3..3e7563bf 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -58169,6 +58169,18 @@
      {}
     ]
    ],
+   "css/css-paint-api/hidpi/canvas-transform.https.html": [
+    [
+     "css/css-paint-api/hidpi/canvas-transform.https.html",
+     [
+      [
+       "/css/css-paint-api/hidpi/canvas-transform-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-paint-api/hidpi/device-pixel-ratio.https.html": [
     [
      "css/css-paint-api/hidpi/device-pixel-ratio.https.html",
@@ -60125,6 +60137,54 @@
      {}
     ]
    ],
+   "css/css-pseudo/first-line-change-inline-color-nested.html": [
+    [
+     "css/css-pseudo/first-line-change-inline-color-nested.html",
+     [
+      [
+       "/css/css-pseudo/first-line-change-inline-color-nested-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-pseudo/first-line-change-inline-color.html": [
+    [
+     "css/css-pseudo/first-line-change-inline-color.html",
+     [
+      [
+       "/css/css-pseudo/first-line-change-inline-color-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-pseudo/first-line-on-ancestor-block.html": [
+    [
+     "css/css-pseudo/first-line-on-ancestor-block.html",
+     [
+      [
+       "/css/css-pseudo/first-line-on-ancestor-block-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-pseudo/first-line-with-out-of-flow.html": [
+    [
+     "css/css-pseudo/first-line-with-out-of-flow.html",
+     [
+      [
+       "/css/css-pseudo/first-line-with-out-of-flow-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-pseudo/marker-and-other-pseudo-elements.html": [
     [
      "css/css-pseudo/marker-and-other-pseudo-elements.html",
@@ -103607,6 +103667,42 @@
      {}
     ]
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html": [
+    [
+     "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html": [
+    [
+     "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html": [
+    [
+     "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html": [
     [
      "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html",
@@ -138857,6 +138953,9 @@
    "css/css-paint-api/geometry-with-float-size-ref.html": [
     []
    ],
+   "css/css-paint-api/hidpi/canvas-transform-ref.html": [
+    []
+   ],
    "css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [
     []
    ],
@@ -139124,6 +139223,18 @@
    "css/css-pseudo/first-line-and-placeholder-ref.html": [
     []
    ],
+   "css/css-pseudo/first-line-change-inline-color-nested-ref.html": [
+    []
+   ],
+   "css/css-pseudo/first-line-change-inline-color-ref.html": [
+    []
+   ],
+   "css/css-pseudo/first-line-on-ancestor-block-ref.html": [
+    []
+   ],
+   "css/css-pseudo/first-line-with-out-of-flow-ref.html": [
+    []
+   ],
    "css/css-pseudo/idlharness-expected.txt": [
     []
    ],
@@ -147884,6 +147995,15 @@
    "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-002-ref.html": [
     []
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html": [
+    []
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html": [
+    []
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html": [
+    []
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html": [
     []
    ],
@@ -162617,6 +162737,9 @@
    "pointerevents/idlharness.window-expected.txt": [
     []
    ],
+   "pointerevents/pointerevent_pointercapture_in_frame-expected.txt": [
+    []
+   ],
    "pointerevents/pointerevent_styles.css": [
     []
    ],
@@ -162635,10 +162758,10 @@
    "pointerevents/resources/pointerevent_fractional_coordinates-iframe.html": [
     []
    ],
-   "pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html": [
+   "pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [
     []
    ],
-   "pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [
+   "pointerevents/resources/pointerevent_pointercapture-iframe.html": [
     []
    ],
    "pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [
@@ -191612,6 +191735,12 @@
      {}
     ]
    ],
+   "animation-worklet/worklet-animation-animator-name.https.html": [
+    [
+     "animation-worklet/worklet-animation-animator-name.https.html",
+     {}
+    ]
+   ],
    "animation-worklet/worklet-animation-creation.https.html": [
     [
      "animation-worklet/worklet-animation-creation.https.html",
@@ -262867,14 +262996,6 @@
      }
     ]
    ],
-   "pointerevents/pointerevent_mouse_pointercapture_in_frame.html": [
-    [
-     "pointerevents/pointerevent_mouse_pointercapture_in_frame.html",
-     {
-      "testdriver": true
-     }
-    ]
-   ],
    "pointerevents/pointerevent_on_event_handlers.html": [
     [
      "pointerevents/pointerevent_on_event_handlers.html",
@@ -262889,6 +263010,14 @@
      }
     ]
    ],
+   "pointerevents/pointerevent_pointercapture_in_frame.html": [
+    [
+     "pointerevents/pointerevent_pointercapture_in_frame.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
    "pointerevents/pointerevent_pointerenter_does_not_bubble.html": [
     [
      "pointerevents/pointerevent_pointerenter_does_not_bubble.html",
@@ -263393,6 +263522,12 @@
      {}
     ]
    ],
+   "portals/portal-non-http-navigation.html": [
+    [
+     "portals/portal-non-http-navigation.html",
+     {}
+    ]
+   ],
    "portals/portal-onload-event.html": [
     [
      "portals/portal-onload-event.html",
@@ -317163,7 +317298,7 @@
    "testharness"
   ],
   "animation-worklet/idlharness.any-expected.txt": [
-   "b6515dd21bf6dc231b540dadd079c970c8fbb5c7",
+   "1bfd8054e8190921d5feebf38d120048d16df80a",
    "support"
   ],
   "animation-worklet/idlharness.any.js": [
@@ -317206,6 +317341,10 @@
    "dba3aa8dc8dfa6f674477d9e71614b7b7288d9dd",
    "testharness"
   ],
+  "animation-worklet/worklet-animation-animator-name.https.html": [
+   "bd886ccd02094c8b1eee1fb31a1700f940ba2cbd",
+   "testharness"
+  ],
   "animation-worklet/worklet-animation-cancel-ref.html": [
    "d44927374703ef2b38d3ed0c9570609b62baec65",
    "support"
@@ -365786,6 +365925,14 @@
    "65477e4b3bf369d511113cbe81d04531281edc4c",
    "reftest"
   ],
+  "css/css-paint-api/hidpi/canvas-transform-ref.html": [
+   "48d46e8e56109a87d9bf2c637f016c7ad52c0a5f",
+   "support"
+  ],
+  "css/css-paint-api/hidpi/canvas-transform.https.html": [
+   "d160a8673c21d17e58ca20eb437c22cd76c97104",
+   "reftest"
+  ],
   "css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [
    "205cf8963bf639f8aae23457fa9b71d16c9c2c90",
    "support"
@@ -367166,10 +367313,42 @@
    "2db3480feb5928c6a39fbf6084cf07bec0ba4767",
    "reftest"
   ],
+  "css/css-pseudo/first-line-change-inline-color-nested-ref.html": [
+   "84becd9a78d186ba3c0e658746fd56aef8039b74",
+   "support"
+  ],
+  "css/css-pseudo/first-line-change-inline-color-nested.html": [
+   "4a58f1ea5b623ffa5acd2993be16de399cd24127",
+   "reftest"
+  ],
+  "css/css-pseudo/first-line-change-inline-color-ref.html": [
+   "84becd9a78d186ba3c0e658746fd56aef8039b74",
+   "support"
+  ],
+  "css/css-pseudo/first-line-change-inline-color.html": [
+   "2a5be916b01d5d12eec1a4e81d912d95c7036916",
+   "reftest"
+  ],
   "css/css-pseudo/first-line-first-letter-insert-crash.html": [
    "17f035dedf1ef8df71918a1eacb01e1f0b80d46b",
    "testharness"
   ],
+  "css/css-pseudo/first-line-on-ancestor-block-ref.html": [
+   "7193bf25eb88c5443457480f7ce27782acd9473a",
+   "support"
+  ],
+  "css/css-pseudo/first-line-on-ancestor-block.html": [
+   "6b797107df80156b511b9dc58c5ee40d6114cfc4",
+   "reftest"
+  ],
+  "css/css-pseudo/first-line-with-out-of-flow-ref.html": [
+   "7193bf25eb88c5443457480f7ce27782acd9473a",
+   "support"
+  ],
+  "css/css-pseudo/first-line-with-out-of-flow.html": [
+   "798ecf8264e2ddb38257c6cb1174bcc069c6e6d1",
+   "reftest"
+  ],
   "css/css-pseudo/idlharness-expected.txt": [
    "977415282ae39a096e46008e91d55452f5244b02",
    "support"
@@ -402774,6 +402953,30 @@
    "c9fcfbd2cdf8d105de2310f224f8d7c95f9c81f6",
    "reftest"
   ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html": [
+   "214ad1891ba6a3f8f31911fe51d2e27086ce3ff1",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html": [
+   "85428064ec33a8948f59db0ef2cfe91549999948",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html": [
+   "faf6228ea189df13cf9f0afbcdd5c709d9792952",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html": [
+   "818f4a3016862dc42d121bf4fe0322cfebf110f4",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html": [
+   "894631d24a0effecc9092671a7ec2dd17c008b95",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html": [
+   "74379b8059198377d74489961e48738ae954c055",
+   "reftest"
+  ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html": [
    "49b09334f2bf4ec2651dd13ec3484838336d50c9",
    "support"
@@ -412155,7 +412358,7 @@
    "testharness"
   ],
   "event-timing/onloadthenobserve-firstInput.html": [
-   "4efdfbbf006cdd8577b4d11b668974bfe20aaa84",
+   "fe40bdf65fbb61671e01a4c11039027deaed677a",
    "testharness"
   ],
   "event-timing/onloadthenobserve.html": [
@@ -412163,11 +412366,11 @@
    "testharness"
   ],
   "event-timing/only-observe-firstInput.html": [
-   "dd6a18ea484e7f1031da525773c31b208afd39bb",
+   "d356902c31d4b9d6d23042d8f57cb1d9ec2a8447",
    "testharness"
   ],
   "event-timing/programmatic-click-not-observed.html": [
-   "4c7c4e74a9be4e3599e9715cc5acf77c93771440",
+   "9eb067024da8c01c2575eeb6ff86c27329498a68",
    "testharness"
   ],
   "event-timing/resources/crossiframe-childframe.html": [
@@ -412175,7 +412378,7 @@
    "support"
   ],
   "event-timing/resources/event-timing-test-utils.js": [
-   "53cd49795b50bd4fb72e206ce950807d3487ba10",
+   "83f1bc7f32aa1d7900e235737caba183d2d27da2",
    "support"
   ],
   "event-timing/resources/observer-manual-childframe.html": [
@@ -412191,11 +412394,11 @@
    "testharness"
   ],
   "event-timing/retrieve-firstInput.html": [
-   "ae66fd9d04cba40b5f8887bdba7ff1182ee72e58",
+   "5ea5d74b1a86abf81d69ec1165b58ecd07a72ea5",
    "testharness"
   ],
   "event-timing/supported-types.window.js": [
-   "c81d501f49fc583904ebf3fd4e83bb315e718d7e",
+   "443c2533c2e503145e8c3639050f89d1277993bd",
    "testharness"
   ],
   "event-timing/timingconditions.html": [
@@ -438447,23 +438650,23 @@
    "testharness"
   ],
   "largest-contentful-paint/cross-origin-image.sub.html": [
-   "3716f9319227c0f5bdfbcf17a21a718cf7dd72e8",
+   "fd4844d16b3a3b150ad98747184e4c3bb25c2f81",
    "testharness"
   ],
   "largest-contentful-paint/observe-image.html": [
-   "8adf2150afcc74082d173f06f6aa929c33a52b87",
+   "a1ecbceb503a31c99ff070ff06146014f8c3fdf9",
    "testharness"
   ],
   "largest-contentful-paint/observe-text.html": [
-   "a9a0d750d66712eaf72fca9897d84794ae44c35d",
+   "58897907365d3156e838ca9e0a65db289ea4cfec",
    "testharness"
   ],
   "layout-instability/buffer-layout-shift.html": [
-   "c1d0dc6d6eb971f39c913a78423aad046dd18a04",
+   "25677852ca3f6bd1a0fedab54031f940cb90ef59",
    "testharness"
   ],
   "layout-instability/observe-layout-shift.html": [
-   "25e4950f6a7d830097781923e80d82f130cf23a5",
+   "297441beeb9c8a68e86129e5d8ba85d894711ff9",
    "testharness"
   ],
   "layout-instability/resources/slow-image.py": [
@@ -438471,7 +438674,7 @@
    "support"
   ],
   "layout-instability/supported-layout-type.html": [
-   "af0ff3aa138c41bc8ce2ec1447381bf036a167e2",
+   "9bc537016581274e03b09e677f3fe8c36f3c613e",
    "testharness"
   ],
   "lifecycle/META.yml": [
@@ -451614,10 +451817,6 @@
    "10b19f8474a95126302f824390302007a4f63fea",
    "testharness"
   ],
-  "pointerevents/pointerevent_mouse_pointercapture_in_frame.html": [
-   "83b4c1becc48339f74948fd01bdf15dfd27f96c1",
-   "testharness"
-  ],
   "pointerevents/pointerevent_on_event_handlers.html": [
    "d8cfa7a0f4c482be606e4e98f9a7900a0340a477",
    "testharness"
@@ -451626,6 +451825,14 @@
    "a645033a247437604d6b1c4614079c9193c28e9d",
    "testharness"
   ],
+  "pointerevents/pointerevent_pointercapture_in_frame-expected.txt": [
+   "094b226e97b0d20e700116d3159b76acd5f2cd93",
+   "support"
+  ],
+  "pointerevents/pointerevent_pointercapture_in_frame.html": [
+   "a4107fd707a2ec4cb40d22fcad786db0b42471d6",
+   "testharness"
+  ],
   "pointerevents/pointerevent_pointerenter_does_not_bubble.html": [
    "7d38de7446938de3715b19f4585d747a18912d77",
    "testharness"
@@ -451866,14 +452073,14 @@
    "5245a3f2e16bf13967187231db515433217912aa",
    "support"
   ],
-  "pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html": [
-   "817c6123cf96b0e966c04a48414725d794549c77",
-   "support"
-  ],
   "pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [
    "ab33560b35216ea0976d1c037650122d9336ae39",
    "support"
   ],
+  "pointerevents/resources/pointerevent_pointercapture-iframe.html": [
+   "100756626987a95b242214a47704e87d5d7c2dc9",
+   "support"
+  ],
   "pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [
    "505fc2cae40b80612fdd67ba98918aafad2f1b0a",
    "support"
@@ -451978,6 +452185,10 @@
    "780e8b58af98cc910e3739e3a9a2e5567d5613d0",
    "testharness"
   ],
+  "portals/portal-non-http-navigation.html": [
+   "3b79df3c230e1128574d4a6eb81d407cd9303e2c",
+   "testharness"
+  ],
   "portals/portal-onload-event.html": [
    "c9f07fcc889043cd523206728f7daaaefa653409",
    "testharness"
@@ -462551,7 +462762,7 @@
    "support"
   ],
   "resources/testharness.js": [
-   "bffdf022b33255de0353210f3346926d05811e31",
+   "21d5fcc9417f3324617516402afeb45878acd9cf",
    "support"
   ],
   "resources/testharness.js.headers": [
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html
new file mode 100644
index 0000000..214ad189
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003-ref.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  select {
+    color: transparent;
+  }
+  .minWidth {
+    min-width: 100px;
+  }
+  .width {
+    width: 100px;
+  }
+  .floatLWidth {
+    float: left;
+    width: 100px;
+  }
+  </style>
+</head>
+<body>
+  <select multiple class="floatLWidth">
+  </select>
+  <br style="clear:both;">
+
+  <select multiple class="minWidth">
+  </select>
+  <br>
+
+  <select multiple class="width">
+  </select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html
new file mode 100644
index 0000000..8542806
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-003.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on select objects should cause them to be sized as if they have no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-select-elem-003-ref.html">
+  <style>
+  select {
+    contain: size;
+    color: transparent;
+  }
+  .minWidth {
+    min-width: 100px;
+  }
+  .width {
+    width: 100px;
+  }
+  .floatLWidth {
+    float: left;
+    width: 100px;
+  }
+  </style>
+</head>
+<body>
+  <select multiple class="floatLWidth">
+    <option>CSS Test: A size-contained floated select with specified width and no specified height should size itself as if it had no contents.</option>
+    <option>a</option>
+  </select>
+  <br style="clear:both;">
+
+  <select multiple class="minWidth">
+    <option>CSS Test: A size-contained select with specified min-width should size itself as if it had no contents.</option>
+    <option>a</option>
+  </select>
+  <br>
+
+  <select multiple class="width">
+    <option>CSS Test: A size-contained select with specified width should size itself as if it had no contents.</option>
+    <option>a</option>
+  </select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html
new file mode 100644
index 0000000..faf6228
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  select {
+    color: transparent;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  </style>
+</head>
+<body>
+  <select multiple>
+  </select>
+  <br>
+
+  <select multiple class="floatLBasic">
+  </select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html
new file mode 100644
index 0000000..818f4a3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-004.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on select objects should cause them to be sized as if they have no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-select-elem-004-ref.html">
+  <style>
+  select {
+    contain: size;
+    color: transparent;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  </style>
+</head>
+<body>
+  <select multiple>
+    <option>CSS Test: A size-contained select with no specified size should size itself as if it had no contents.</option>
+    <option>aaaaaa</option>
+  </select>
+  <br>
+
+  <select multiple class="floatLBasic">
+    <option>CSS Test: A size-contained floated select with no specified size should size itself as if it had no contents.</option>
+    <option>a</option>
+  </select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html
new file mode 100644
index 0000000..894631d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005-ref.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <style>
+  select {
+    color: transparent;
+  }
+  .fsMedium {
+    /* custom styling for some select elements, which is allowed to influence
+       their size (in the same way that it influences the size of an empty
+       select element): */
+    font-size: 10px;
+  }
+  </style>
+</head>
+<body>
+  <select multiple                 ></select>
+  <select multiple size="1"        ></select>
+  <select multiple class="fsMedium"></select>
+
+  <select multiple                 ></select>
+  <select multiple size="1"        ></select>
+  <select multiple class="fsMedium"></select>
+
+  <br><br>
+
+  <select multiple                 ></select>
+  <select multiple size="1"        ></select>
+  <select multiple class="fsMedium"></select>
+
+  <select multiple                 ></select>
+  <select multiple size="1"        ></select>
+  <select multiple class="fsMedium"></select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html
new file mode 100644
index 0000000..74379b80
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on select objects should cause them to be sized as if they have no contents.</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-select-elem-005-ref.html">
+  <style>
+  select {
+    contain: size;
+    color: transparent;
+  }
+  .fsMedium {
+    /* custom styling for some select elements, which is allowed to influence
+       their size (in the same way that it influences the size of an empty
+       select element): */
+    font-size: 10px;
+  }
+  .fsSmall {
+    /* custom styling for some option elements (which would make their parent
+       select elem shorter, except for the fact that it's size-contained): */
+    font-size: 6px;
+  }
+  </style>
+</head>
+<body>
+  <!-- No contents: -->
+  <select multiple                 ></select>
+  <select multiple size="1"        ></select>
+  <select multiple class="fsMedium"></select>
+
+  <!-- Empty option: -->
+  <select multiple                 ><option></option></select>
+  <select multiple size="1"        ><option></option></select>
+  <select multiple class="fsMedium"><option></option></select>
+
+  <br><br>
+
+  <!-- Nonempty option: -->
+  <select multiple                 ><option>X</option></select>
+  <select multiple size="1"        ><option>X</option></select>
+  <select multiple class="fsMedium"><option>X</option></select>
+
+  <!-- Nonempty option with custom font-size: -->
+  <select multiple                 ><option class="fsSmall">X</option></select>
+  <select multiple size="1"        ><option class="fsSmall">X</option></select>
+  <select multiple class="fsMedium"><option class="fsSmall">X</option></select>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/portals/portal-non-http-navigation.html b/third_party/blink/web_tests/external/wpt/portals/portal-non-http-navigation.html
new file mode 100644
index 0000000..3b79df3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/portals/portal-non-http-navigation.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Tests that portal don't navigate to non-http schemes.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+async_test(t => {
+  var portal = document.createElement("portal");
+  portal.src = "data:text/html,empty portal";
+  portal.onload = t.unreached_func("Portal loaded data URL.");
+  document.body.appendChild(portal);
+  t.step_timeout(() => { portal.remove(); t.done(); }, 3000);
+}, "Tests that a portal can't navigate to a data URL.");
+
+async_test(t => {
+  var portal = document.createElement("portal");
+  portal.src = "about:blank";
+  portal.onload = t.unreached_func("Portal loaded about:blank.");
+  document.body.appendChild(portal);
+  t.step_timeout(() => { portal.remove(); t.done(); }, 3000);
+}, "Tests that a portal can't navigate to about:blank.");
+
+async_test(t => {
+  var portal = document.createElement("portal");
+  portal.src = "resources/simple-portal.html";
+  portal.onload = t.step_func(() => {
+    portal.onmessage = t.unreached_func("Portal execute javascript.");
+    portal.src = "javascript:window.portalHost.postMessage('executed', '*')";
+    t.step_timeout(() => { portal.remove(); t.done(); }, 3000);
+  });
+  document.body.appendChild(portal);
+}, "Tests that a portal can't navigate to javascript URLs.");
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
index 31bf916..e584ea3 100644
--- a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
+++ b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
@@ -12,8 +12,9 @@
     return Promise.resolve(this.mockVRService_.addRuntime(init_params));
   }
 
-  simulateDeviceDisconnection(device) {
-    this.mockVRService_.removeRuntime(device);
+  disconnectAllDevices() {
+    this.mockVRService_.removeAllRuntimes(device);
+    return Promise.resolve();
   }
 
   simulateUserActivation(callback) {
@@ -60,11 +61,11 @@
     return runtime;
   }
 
-  removeRuntime(runtime) {
-    // We have no way of distinguishing between devices, so just clear the
-    // entire list for now.
-    // TODO(http://crbug.com/873409) We also have no way right now to disconnect
-    // devices.
+  removeAllRuntimes() {
+    if (this.client_) {
+      this.client_.onDeviceChanged();
+    }
+
     this.runtimes_ = [];
   }
 
@@ -151,6 +152,8 @@
 
     this.framesOfReference = {};
 
+    // Initialize DisplayInfo first to set the defaults, then override with
+    // anything from the deviceInit
     if (fakeDeviceInit.supportsImmersive) {
       this.displayInfo_ = this.getImmersiveDisplayInfo();
     } else {
@@ -160,16 +163,16 @@
     if (fakeDeviceInit.supportsEnvironmentIntegration) {
       this.displayInfo_.capabilities.canProvideEnvironmentIntegration = true;
     }
-  }
 
-  // Test methods.
-  setXRPresentationFrameData(poseMatrix, views) {
-    if (poseMatrix == null) {
-      this.pose_ = null;
-    } else {
-      this.setPoseFromMatrix(poseMatrix);
+    if (fakeDeviceInit.viewerOrigin != null) {
+      this.setViewerOrigin(fakeDeviceInit.viewerOrigin);
     }
 
+    this.setViews(fakeDeviceInit.views);
+  }
+
+  // Test API methods.
+  setViews(views) {
     if (views) {
       let changed = false;
       for (let i = 0; i < views.length; i++) {
@@ -182,17 +185,18 @@
         }
       }
 
-      if (changed) {
+      if (changed && this.sessionClient_.ptr.isBound()) {
         this.sessionClient_.onChanged(this.displayInfo_);
       }
     }
   }
 
-
-  setPoseFromMatrix(poseMatrix) {
+  setViewerOrigin(origin, emulatedPosition = false) {
+    let p = origin.position;
+    let q = origin.orientation;
     this.pose_ = {
-      orientation: null,
-      position: null,
+      orientation: { x: q[0], y: q[1], z: q[2], w: q[3] },
+      position: { x: p[0], y: p[1], z: p[2] },
       angularVelocity: null,
       linearVelocity: null,
       angularAcceleration: null,
@@ -200,37 +204,13 @@
       inputState: null,
       poseIndex: 0
     };
-
-    let pose = this.poseFromMatrix(poseMatrix);
-    for (let field in pose) {
-      if (this.pose_.hasOwnProperty(field)) {
-        this.pose_[field] = pose[field];
-      }
-    }
   }
 
-  poseFromMatrix(m) {
-    let m00 = m[0];
-    let m11 = m[5];
-    let m22 = m[10];
-
-    // The max( 0, ... ) is just a safeguard against rounding error.
-    let orientation = new gfx.mojom.Quaternion();
-    orientation.w = Math.sqrt(Math.max(0, 1 + m00 + m11 + m22)) / 2;
-    orientation.x = Math.sqrt(Math.max(0, 1 + m00 - m11 - m22)) / 2;
-    orientation.y = Math.sqrt(Math.max(0, 1 - m00 + m11 - m22)) / 2;
-    orientation.z = Math.sqrt(Math.max(0, 1 - m00 - m11 + m22)) / 2;
-
-    let position = new gfx.mojom.Point3F();
-    position.x = m[12];
-    position.y = m[13];
-    position.z = m[14];
-
-    return {
-      orientation, position
-    }
+  clearViewerOrigin() {
+    this.pose_ = null;
   }
 
+  // Helper methods
   getNonImmersiveDisplayInfo() {
     let displayInfo = this.getImmersiveDisplayInfo();
 
@@ -296,6 +276,8 @@
     let upTan = (1 + m[9]) / m[5];
     let downTan = (1 - m[9]) / m[5];
 
+    let offset = fakeXRViewInit.viewOffset.position;
+
     return {
       fieldOfView: {
         upDegrees: toDegrees(upTan),
@@ -303,9 +285,9 @@
         leftDegrees: toDegrees(leftTan),
         rightDegrees: toDegrees(rightTan)
       },
-      offset: { x: 0, y: 0, z: 0 },
-      renderWidth: 20,
-      renderHeight: 20
+      offset: { x: offset[0], y: offset[1], z: offset[2] },
+      renderWidth: fakeXRViewInit.resolution.width,
+      renderHeight: fakeXRViewInit.resolution.height
     };
   }
 
@@ -405,6 +387,7 @@
   };
 }
 
+// Mojo helper classes
 class MockXRPresentationProvider {
   constructor() {
     this.binding_ = new mojo.Binding(device.mojom.XRPresentationProvider, this);
@@ -448,4 +431,21 @@
   }
 }
 
+// This is a temporary workaround for the fact that spinning up webxr before
+// the mojo interceptors are created will cause the interceptors to not get
+// registered, so we have to create this before we query xr;
 let XRTest = new ChromeXRTest();
+
+// This test API is also used to run Chrome's internal legacy VR tests; however,
+// those fail if navigator.xr has been used. Those tests will set a bool telling
+// us not to try to check navigator.xr
+if ((typeof legacy_vr_test === 'undefined') || !legacy_vr_test) {
+  // Some tests may run in the http context where navigator.xr isn't exposed
+  // This should just be to test that it isn't exposed, but don't try to set up
+  // the test framework in this case.
+  if (navigator.xr) {
+    navigator.xr.test = XRTest;
+  }
+} else {
+  navigator.vr = { test: XRTest };
+}
diff --git a/third_party/blink/web_tests/external/wpt/resources/testharness.js b/third_party/blink/web_tests/external/wpt/resources/testharness.js
index bffdf02..21d5fcc 100644
--- a/third_party/blink/web_tests/external/wpt/resources/testharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/testharness.js
@@ -1436,11 +1436,28 @@
                 NotAllowedError: 0
             };
 
-            if (!(name in name_code_map)) {
-                throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+            var code_name_map = {};
+            for (var key in name_code_map) {
+                if (name_code_map[key] > 0) {
+                    code_name_map[name_code_map[key]] = key;
+                }
             }
 
-            var required_props = { code: name_code_map[name] };
+            var required_props = { code: code };
+
+            if (typeof code === "number") {
+                if (code === 0) {
+                    throw new AssertionError('Test bug: ambiguous DOMException code 0 passed to assert_throws()');
+                } else if (!(code in code_name_map)) {
+                    throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+                }
+                name = code_name_map[code];
+            } else if (typeof code === "string") {
+                if (!(name in name_code_map)) {
+                    throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+                }
+                required_props.code = name_code_map[name];
+            }
 
             if (required_props.code === 0 ||
                ("name" in e &&
diff --git a/third_party/blink/web_tests/external/wpt/webxr/resources/test-constants.js b/third_party/blink/web_tests/external/wpt/webxr/resources/test-constants.js
deleted file mode 100644
index aab0417a..0000000
--- a/third_party/blink/web_tests/external/wpt/webxr/resources/test-constants.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// assert_equals can fail when comparing floats due to precision errors, so
-// use assert_approx_equals with this constant instead
-const FLOAT_EPSILON = 0.001;
-
-// Identity matrix
-const IDENTITY_MATRIX = [1, 0, 0, 0,
-                         0, 1, 0, 0,
-                         0, 0, 1, 0,
-                         0, 0, 0, 1];
-
-// A valid pose matrix for  when we don't care about specific values
-const VALID_POSE_MATRIX = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
-
-const VALID_PROJECTION_MATRIX =
-    [1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
-
-const VALID_VIEW_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
-
-// A valid VRPose for when we want the HMD to report being at the origin
-const ORIGIN_POSE = IDENTITY_MATRIX;
-
-// A valid input grip matrix for  when we don't care about specific values
-const VALID_GRIP = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
-
-// A valid input pointer offset for  when we don't care about specific values
-const VALID_POINTER_OFFSET = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1];
-
-const VALID_GRIP_WITH_POINTER_OFFSET =
-    [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 3, 1];
-
-const VALID_STAGE_TRANSFORM =
-    [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.0, 1.65, -1.0, 1];
diff --git a/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_test_constants.js b/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_test_constants.js
index c38c012b..a846f1d 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_test_constants.js
+++ b/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_test_constants.js
@@ -8,17 +8,26 @@
                          0, 0, 1, 0,
                          0, 0, 0, 1];
 
-// A valid pose matrix for  when we don't care about specific values
-const VALID_POSE_MATRIX = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
+const IDENTITY_TRANSFORM = {
+    position: [0, 0, 0],
+    orientation: [0, 0, 0, 1],
+};
+
+// A valid pose matrix/transform for  when we don't care about specific values
+// Note that these two should be identical, just different representations
+const VALID_POSE_MATRIX = [0, 1, 0, 0,
+                           0, 0, 1, 0,
+                           1, 0, 0, 0,
+                           1, 1, 1, 1];
+
+const VALID_POSE_TRANSFORM = {
+    position: [1, 1, 1],
+    orientation: [0.5, 0.5, 0.5, 0.5]
+};
 
 const VALID_PROJECTION_MATRIX =
     [1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
 
-const VALID_VIEW_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
-
-// A valid VRPose for when we want the HMD to report being at the origin
-const ORIGIN_POSE = IDENTITY_MATRIX;
-
 // A valid input grip matrix for  when we don't care about specific values
 const VALID_GRIP = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
 
@@ -39,3 +48,51 @@
     { x: -3.5, y: 0, z: 0.0 },
     { x: -3.0, y: 0, z: -2.0 }
 ];
+
+const VALID_RESOLUTION = {
+    width: 20,
+    height: 20
+};
+
+const LEFT_OFFSET = {
+    position: [-0.1, 0, 0],
+    orientation: [0, 0, 0, 1]
+};
+
+const RIGHT_OFFSET = {
+    position: [0.1, 0, 0],
+    orientation: [0, 0, 0, 1]
+};
+
+const VALID_VIEWS = [{
+        eye:"left",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: LEFT_OFFSET,
+        resolution: VALID_RESOLUTION
+    }, {
+        eye:"right",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: RIGHT_OFFSET,
+        resolution: VALID_RESOLUTION
+    },
+];
+
+const NON_IMMERSIVE_VIEWS = [{
+        eye: "none",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: IDENTITY_TRANSFORM,
+        resolution: VALID_RESOLUTION,
+    }
+];
+
+const TRACKED_IMMERSIVE_DEVICE = {
+    supportsImmersive: true,
+    views: VALID_VIEWS,
+    viewerOrigin: IDENTITY_TRANSFORM
+};
+
+const VALID_NON_IMMERSIVE_DEVICE = {
+    supportsImmersive: false,
+    views: NON_IMMERSIVE_VIEWS,
+    viewerOrigin: IDENTITY_TRANSFORM
+};
diff --git a/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_util.js b/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_util.js
index 860d363..54a91c8 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_util.js
+++ b/third_party/blink/web_tests/external/wpt/webxr/resources/webxr_util.js
@@ -39,15 +39,15 @@
 
   xr_promise_test(
       name,
-      (t) =>
-          XRTest.simulateDeviceConnection(fakeDeviceInit)
+      (t) =>{
+          return navigator.xr.test.simulateDeviceConnection(fakeDeviceInit)
               .then((controller) => {
                 testDeviceController = controller;
                 return gl.makeXRCompatible();
               })
               .then(() => new Promise((resolve, reject) => {
                       // Perform the session request in a user gesture.
-                      XRTest.simulateUserActivation(() => {
+                      navigator.xr.test.simulateUserActivation(() => {
                         navigator.xr.requestSession(sessionMode)
                             .then((session) => {
                               testSession = session;
@@ -75,8 +75,9 @@
               .then(() => {
                 // Cleanup system state.
                 testSession.end().catch(() => {});
-                XRTest.simulateDeviceDisconnection();
-              }),
+                return navigator.xr.test.disconnectAllDevices();
+              })
+            },
       properties);
 }
 
@@ -138,4 +139,4 @@
   });
 
   return chain;
-});
\ No newline at end of file
+});
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
index 8b2f196..b83b960 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas id="webgl-canvas"></canvas>
   <script>
     xr_promise_test("An XR-compatible webglCanvasContext can be created",
       (t) => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+        return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
           .then( (controller) => {
             webglCanvas = document.getElementById('webgl-canvas');
             gl = webglCanvas.getContext('webgl', {xrCompatible: true});
diff --git a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
index 3102008c5..0e3dbfc9 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html
@@ -3,13 +3,14 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas id="webgl-canvas"></canvas>
   <script>
 
     xr_promise_test(
       "A lost webglCanvasContext should not be able to set xr compatibility",
      (t) => {
-      return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+      return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
         .then( (controller) => {
           webglCanvas = document.getElementById('webgl-canvas');
           gl = webglCanvas.getContext('webgl', {xrCompatible: true});
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive.https.html
index 50a9d344..a397d1a8 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive.https.html
@@ -3,12 +3,13 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
   <script>
     xr_session_promise_test(
       "Tests requestSession resolves when supported",
       (session) => {
         assert_not_equals(session, null);
-      }, { supportsImmersive:true }, 'immersive-vr');
+      }, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr');
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html
index eb5a4fd..10e15b6 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "Requesting immersive session outside of a user gesture rejects",
       (t) => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+        return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
           .then( (controller) => promise_rejects(
             t, 'SecurityError', navigator.xr.requestSession('immersive-vr')));
       });
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html
index 2592f3a..6c0e628 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html
@@ -3,13 +3,14 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "Requesting an immersive session when unsupported rejects",
       (t) => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:false })
+        return navigator.xr.test.simulateDeviceConnection(VALID_NON_IMMERSIVE_DEVICE)
           .then( (controller) => new Promise((resolve) => {
-            XRTest.simulateUserActivation( () => {
+            navigator.xr.test.simulateUserActivation( () => {
               resolve(promise_rejects(
                 t,
                 "NotSupportedError",
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_no_mode.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_no_mode.https.html
index c4ac3f6b..de77b38c 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_no_mode.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_no_mode.https.html
@@ -3,13 +3,14 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "Requesting a session with no mode rejects",
       (t) => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:false })
+        return navigator.xr.test.simulateDeviceConnection(VALID_NON_IMMERSIVE_DEVICE)
           .then( (controller) => new Promise((resolve) => {
-            XRTest.simulateUserActivation( () => {
+            navigator.xr.test.simulateUserActivation( () => {
               resolve(promise_rejects(
                 t,
                 new TypeError(),
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html
index 40e6f49..5995059 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "Requesting non-immersive session outside of a user gesture succeeds",
       (t) => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:false })
+        return navigator.xr.test.simulateDeviceConnection(VALID_NON_IMMERSIVE_DEVICE)
           .then( (controller) => navigator.xr.requestSession('inline'))
           .then( (session) => { assert_not_equals(session, null); });
       });
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive.https.html
index 53dd41e3..fd0827a52 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "supportsSession resolves when immersive options supported",
       () => {
-        return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+        return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
           .then( (controller) => navigator.xr.supportsSession('immersive-vr'));
       });
   </script>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html
index 0fb44a8..1d63a2b 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "supportsSession rejects when options not supported",
       (t) => {
-      return XRTest.simulateDeviceConnection({ supportsImmersive:false })
+      return navigator.xr.test.simulateDeviceConnection(VALID_NON_IMMERSIVE_DEVICE)
         .then( (controller) => {
           return promise_rejects(
             t,
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html
index d519140..b376495 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html
@@ -3,11 +3,12 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <script>
     xr_promise_test(
       "supportsSession resolves when inline options supported",
       (t) => {
-      return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+      return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
         .then( (controller) => {
           // Inline sessions should be supported.
           return navigator.xr.supportsSession('inline');
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrFrame_getPose.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrFrame_getPose.https.html
index 243fb8cd..50e8abf1 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrFrame_getPose.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrFrame_getPose.https.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="resources/test-constants.js"></script>
+<script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_util.js"></script>
 <script src="resources/xr-test-asserts.js"></script>
 <canvas></canvas>
@@ -11,20 +11,9 @@
 let immersiveTestName = "XRFrame.getPose works for immersive sessions";
 let nonImmersiveTestName = "XRFrame.getPose works for non-immersive sessions";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let testFunction = function(session, fakeDeviceController, t) {
-  // 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
-    }]);
-
   return Promise.all([
     session.requestReferenceSpace('local'),
     session.requestReferenceSpace('local')
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrFrame_lifetime.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrFrame_lifetime.https.html
index 27ef02de..c7af792c 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrFrame_lifetime.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrFrame_lifetime.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
@@ -11,7 +12,7 @@
     let nonImmersiveTestName = "XRFrame methods throw exceptions outside of the " +
       "requestAnimationFrame callback for non-immersive sessions";
 
-    let fakeDeviceInitParams = { supportsImmersive:true };
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = (testSession, testController, t) => new Promise((resolve) => {
       let staleFrame = null;
@@ -54,4 +55,4 @@
       fakeDeviceInitParams, 'inline');
 
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrRay_constructor.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrRay_constructor.https.html
index ebf88845..b955db4 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrRay_constructor.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrRay_constructor.https.html
@@ -3,7 +3,6 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_test_asserts.js"></script>
-
 <script>
 
 let constructor_test_name = "XRRay constructors work";
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrRay_matrix.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrRay_matrix.https.html
index 85d7bff..83a1050 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrRay_matrix.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrRay_matrix.https.html
@@ -4,7 +4,6 @@
 <script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_test_asserts.js"></script>
 <script src="resources/webxr_math_utils.js"></script>
-
 <script>
 
 let matrix_tests_name = "XRRay matrix works";
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_constructor.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_constructor.https.html
index 1566697..6a54fff8 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_constructor.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_constructor.https.html
@@ -4,11 +4,10 @@
 <script src="resources/webxr_util.js"></script>
 <script src="resources/webxr_test_constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-
 <script>
 
 let testName = "XRRigidTransform constructor works";
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let testFunction =
   (session, fakeDeviceController, t) => new Promise((resolve, reject) => {
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_inverse.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_inverse.https.html
index 706f721..a314f6b5 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_inverse.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_inverse.https.html
@@ -4,11 +4,10 @@
 <script src="resources/webxr_util.js"></script>
 <script src="resources/webxr_test_constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-
 <script>
 
 let testName = "XRRigidTransform inverse works";
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let testFunction =
   (session, fakeDeviceController, t) => new Promise((resolve, reject) => {
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_matrix.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_matrix.https.html
index 21236c7..df80419 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_matrix.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrRigidTransform_matrix.https.html
@@ -4,7 +4,6 @@
 <script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_test_asserts.js"></script>
 <script src="resources/webxr_math_utils.js"></script>
-
 <script>
 
 let matrix_tests_name = "XRRigidTransform matrix works";
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame.https.html
index d45349a..6a294f2 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
@@ -11,7 +12,7 @@
     let nonImmersiveTestName = "XRSession requestAnimationFrame callbacks can be "
       + "unregistered with cancelAnimationFrame for non-immersive sessions";
 
-    let fakeDeviceInitParams = { supportsImmersive:true };
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = (session) => new Promise((resolve, reject) => {
 
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html
index b93f4e2..51a639b 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
   <script>
     let immersiveTestName = "XRSession cancelAnimationFrame does not have unexpected "
@@ -10,7 +11,7 @@
     let nonImmersiveTestName = "XRSession cancelAnimationFrame does not have unexpected "
       + "behavior when given invalid handles on non-immersive testSession";
 
-    let fakeDeviceInitParams = { supportsImmersive:true };
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = (testSession) => new Promise((resolve) => {
       let counter = 0;
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_end.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_end.https.html
index 26b6b47..b91a5b9 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_end.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_end.https.html
@@ -3,13 +3,14 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
     const immersivetestName = "end event fires when immersive session ends";
     const nonimmersiveTestName = "end event fires when non-immersive session ends";
     let watcherDone = new Event("watcherdone");
-    const fakeDeviceInitParams = { supportsImmersive:true };
+    const fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = function(session, testDeviceController, t) {
       let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]);
@@ -32,4 +33,4 @@
     xr_session_promise_test(nonimmersiveTestName, testFunction,
       fakeDeviceInitParams, 'inline');
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html
index e61bd39..cd140703 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html
@@ -3,18 +3,19 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
     xr_promise_test(
       "Test prevention of multiple simultaneous immersive sessions",
       (t) => {
-      return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+      return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
         .then( (controller) => new Promise((resolve) => {
-          XRTest.simulateUserActivation( () => {
+          navigator.xr.test.simulateUserActivation( () => {
             resolve(navigator.xr.requestSession('immersive-vr')
               .then( (session) => new Promise((resolve) => {
-                XRTest.simulateUserActivation( () => {
+                navigator.xr.test.simulateUserActivation( () => {
                   // Requesting a second immersive session when another immersive
                   // session is active should fail. Immersive sessions
                   // should take up the users entire view, and therefore it should
@@ -27,7 +28,7 @@
                       // End the immersive session and try again. Now the immersive
                       // session creation should succeed.
                       return session.end().then( () => new Promise((resolve) => {
-                        XRTest.simulateUserActivation( () => {
+                        navigator.xr.test.simulateUserActivation( () => {
                           resolve(navigator.xr.requestSession('immersive-vr'));
                         });
                       }));
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html
index 2ed468b..98231c8 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
@@ -11,7 +12,7 @@
     let nonImmersiveTestName = "XRSession requestAnimationFrame calls the " +
       "provided callback a non-immersive session";
 
-    let fakeDeviceInitParams = { supportsImmersive:true };
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = (testSession) => new Promise((resolve) => {
       function onFrame(time, xrFrame) {
@@ -29,4 +30,4 @@
       fakeDeviceInitParams, 'inline');
 
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html
index c5108e4..760ff3dd 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html
@@ -3,31 +3,13 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
     const testName = "RequestAnimationFrame resolves with good data";
 
-    const identityMatrix = new Float32Array([
-      1, 0, 0, 0,
-      0, 1, 0, 0,
-      0, 0, 1, 0,
-      0, 0, 0, 1
-    ]);
-
-    const rightFakeXRViewInit = {
-      eye:"right",
-      projectionMatrix: identityMatrix,
-      viewMatrix: identityMatrix
-    };
-
-    const leftFakeXRViewInit = {
-      eye:"left",
-      projectionMatrix: identityMatrix,
-      viewMatrix: identityMatrix
-    };
-
-    const fakeDeviceInitOptions = { supportsImmersive:true };
+    const fakeDeviceInitOptions = TRACKED_IMMERSIVE_DEVICE;
 
     let testSession;
 
@@ -52,8 +34,8 @@
             let viewerPose = xrFrame.getViewerPose(referenceSpace);
 
             assert_not_equals(viewerPose, null);
-            for(let i = 0; i < identityMatrix.length; i++) {
-              assert_equals(viewerPose.transform.matrix[i], identityMatrix[i]);
+            for(let i = 0; i < IDENTITY_MATRIX.length; i++) {
+              assert_equals(viewerPose.transform.matrix[i], IDENTITY_MATRIX[i]);
             }
 
             assert_not_equals(viewerPose.views, null);
@@ -65,11 +47,6 @@
             resolve();
           }
 
-          testDeviceController.setXRPresentationFrameData(
-            identityMatrix,
-            [rightFakeXRViewInit, leftFakeXRViewInit]
-          );
-
           testSession.requestAnimationFrame(onFrame);
         })
       );
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html
index 95d9e78..f858779 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html
@@ -3,6 +3,8 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
+  <script src="resources/xr-test-asserts.js"></script>
   <canvas></canvas>
 
   <script>
@@ -12,12 +14,22 @@
     let nonImmersiveTestName =
       "XRFrame getViewerPose updates on the next frame for non-immersive sessions";
 
-    let fakeDeviceInitParams = { supportsImmersive: true };
+    let fakeDeviceInitParams = {
+      supportsImmersive: true,
+      views: VALID_VIEWS
+    };
 
-    // Valid matrices for  when we don't care about specific values
-    const validPoseMatrix = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
-    const validProjectionMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
-    const validViewMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
+    // A valid pose matrix/transform for  when we don't care about specific values
+    // Note that these two should be identical, just different representations
+    const expectedPoseMatrix = [0, 1, 0, 0,
+                                0, 0, 1, 0,
+                                1, 0, 0, 0,
+                                1, 1, 1, 1];
+
+    const poseTransform = {
+        position: [1, 1, 1],
+        orientation: [0.5, 0.5, 0.5, 0.5]
+    };
 
     let testFunction = function(session, fakeDeviceController, t) {
       return session.requestReferenceSpace('local')
@@ -30,16 +42,7 @@
                 // Expecting to not get a pose since none has been supplied
                 assert_equals(vrFrame.getViewerPose(referenceSpace), null);
 
-                fakeDeviceController.setXRPresentationFrameData(
-                  validPoseMatrix, [{
-                    eye:"left",
-                    projectionMatrix: validProjectionMatrix,
-                    viewMatrix: validViewMatrix
-                  }, {
-                    eye:"right",
-                    projectionMatrix: validProjectionMatrix,
-                    viewMatrix: validViewMatrix
-                  }]);
+                fakeDeviceController.setViewerOrigin(poseTransform);
 
                 // Check that pose does not update pose within the same frame.
                 assert_equals(vrFrame.getViewerPose(referenceSpace), null);
@@ -51,10 +54,7 @@
 
                 let poseMatrix = pose.transform.matrix;
                 assert_not_equals(poseMatrix, null);
-
-                for(let i = 0; i < poseMatrix.length; i++) {
-                  assert_equals(poseMatrix[i], validPoseMatrix[i]);
-                }
+                assert_matrix_approx_equals(poseMatrix, expectedPoseMatrix, FLOAT_EPSILON);
               });
 
               // Finished.
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace.https.html
index 2fbf9b9..c90d6ce 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
   <script>
 
@@ -11,7 +12,7 @@
     let nonImmersiveTestName =
       "Non-immersive XRSession requestReferenceSpace returns expected objects";
 
-    let fakeDeviceInitParams = { supportsImmersive: true };
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = function(session, fakeDeviceController, t) {
       return promise_rejects(t, new TypeError(), session.requestReferenceSpace('foo'))
@@ -61,4 +62,4 @@
       nonImmersiveTestName, testFunction, fakeDeviceInitParams, 'inline');
 
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_viewer_referenceSpace.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrSession_viewer_referenceSpace.https.html
index 85e5e87..fd6082bc3 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_viewer_referenceSpace.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_viewer_referenceSpace.https.html
@@ -3,6 +3,7 @@
   <script src=/resources/testharness.js></script>
   <script src=/resources/testharnessreport.js></script>
   <script src="resources/webxr_util.js"></script>
+  <script src="resources/webxr_test_constants.js"></script>
   <canvas></canvas>
 
   <script>
@@ -12,14 +13,7 @@
     let inlineTestName =
       "Identity reference space provides correct poses for inline sessions";
 
-    let fakeDeviceInitParams = { supportsImmersive: true };
-
-    const identityMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
-
-    // Valid matrices for  when we don't care about specific values
-    const validPoseMatrix = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
-    const validProjectionMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
-    const validViewMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
+    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
     let testFunction = function(session, fakeDeviceController, t) {
       return session.requestReferenceSpace('viewer')
@@ -37,19 +31,10 @@
                 assert_not_equals(poseMatrix, null);
 
                 for(let i = 0; i < poseMatrix.length; i++) {
-                  assert_equals(poseMatrix[i], identityMatrix[i]);
+                  assert_equals(poseMatrix[i], IDENTITY_MATRIX[i]);
                 }
 
-                fakeDeviceController.setXRPresentationFrameData(
-                  validPoseMatrix, [{
-                    eye:"left",
-                    projectionMatrix: validProjectionMatrix,
-                    viewMatrix: validViewMatrix
-                  }, {
-                    eye:"right",
-                    projectionMatrix: validProjectionMatrix,
-                    viewMatrix: validViewMatrix
-                  }]);
+                fakeDeviceController.setViewerOrigin(VALID_POSE_TRANSFORM);
               });
             } else {
               t.step( () => {
@@ -62,7 +47,7 @@
                 assert_not_equals(poseMatrix, null);
 
                 for(let i = 0; i < poseMatrix.length; i++) {
-                  assert_equals(poseMatrix[i], identityMatrix[i]);
+                  assert_equals(poseMatrix[i], IDENTITY_MATRIX[i]);
                 }
               });
 
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrView_eyes.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrView_eyes.https.html
index 8090bce..4ff22ff 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrView_eyes.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrView_eyes.https.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="resources/test-constants.js"></script>
+<script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_util.js"></script>
 <script src="resources/xr-test-asserts.js"></script>
 <canvas></canvas>
@@ -11,20 +11,9 @@
 let immersiveTestName = "XRView.eye is correct for immersive sessions";
 let nonImmersiveTestName = "XRView.eye is correct for non-immersive sessions";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let testFunction = function(session, fakeDeviceController, t) {
-  // 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
-    }]);
-
   return session.requestReferenceSpace('viewer')
       .then((space) => new Promise((resolve) => {
     function onFrame(time, xrFrame) {
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_viewports.https.html b/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_viewports.https.html
index f789e47..247e3b7 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_viewports.https.html
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrWebGLLayer_viewports.https.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="resources/test-constants.js"></script>
+<script src="resources/webxr_test_constants.js"></script>
 <script src="resources/webxr_util.js"></script>
 <script src="resources/xr-test-asserts.js"></script>
 <canvas></canvas>
@@ -11,20 +11,9 @@
 let immersiveTestName = "XRWebGLLayer reports a valid viewports for immersive sessions";
 let inlineTestName = "XRWebGLLayer reports a valid viewports for inline sessions";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let testFunction = function(session, fakeDeviceController, t) {
-  // Need to have a valid pose.
-  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('viewer')
       .then((space) => new Promise((resolve) => {
     function onFrame(time, xrFrame) {
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/clip-child-by-non-stacking-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/clip-child-by-non-stacking-ancestor-expected.txt
index 43257c83..92ef8129 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/clip-child-by-non-stacking-ancestor-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/clip-child-by-non-stacking-ancestor-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='container'",
+      "name": "LayoutNGBlockFlow DIV class='container'",
+      "position": [8, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#C0C0C0",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#C0C0C0"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-clip-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-clip-expected.txt
index 3f46411..0417772 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-clip-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-clip-expected.txt
@@ -7,52 +7,23 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box composited'",
+      "name": "LayoutNGBlockFlow DIV class='box composited'",
+      "position": [13, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box composited padding-clip'",
+      "name": "LayoutNGBlockFlow DIV class='box composited padding-clip'",
+      "position": [13, 113],
       "bounds": [100, 100],
-      "backgroundColor": "#008000",
-      "transform": 2
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box composited content-clip'",
+      "name": "LayoutNGBlockFlow DIV class='box composited content-clip'",
+      "position": [13, 218],
       "bounds": [100, 100],
-      "backgroundColor": "#008000",
-      "transform": 3
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [13, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [13, 113, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [13, 218, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-color-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-color-expected.txt
index fa500cea..6041fc3 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-color-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/background-color-expected.txt
@@ -7,37 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box translucent composited'",
+      "name": "LayoutNGBlockFlow DIV class='box translucent composited'",
+      "position": [8, 108],
       "bounds": [100, 100],
-      "backgroundColor": "#00FF0080",
-      "transform": 1
+      "backgroundColor": "#00FF0080"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box opaque composited'",
+      "name": "LayoutNGBlockFlow DIV class='box opaque composited'",
+      "position": [8, 208],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 108, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 208, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-painted-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-painted-expected.txt
index b2c48b9..60b76d034 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-painted-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-painted-expected.txt
@@ -7,30 +7,19 @@
       "backgroundColor": "#D3D3D3"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='underbody'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='underbody'",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [8, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-skipped-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-skipped-expected.txt
index 6a43f9bd..4363bedf 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-skipped-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/body-background-skipped-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='underbody'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='underbody'",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/hidden-with-visible-text-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
index 1a7b5ac..cc93dd66 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
@@ -8,21 +8,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='caption'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='caption'",
+      "position": [8, 13],
       "bounds": [50, 19],
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
index 84c3d4e7..9606ef8 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
@@ -7,22 +7,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box'",
-      "position": [-30, -30],
+      "name": "LayoutNGBlockFlow DIV class='box'",
+      "position": [28, 20],
       "bounds": [160, 160],
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [58, 50, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
index b776132..7abd315 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -7,29 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited'",
-      "position": [-25, -25],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited'",
+      "position": [80, 80],
       "bounds": [125, 125],
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [105, 105, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
index 6557d523..18c867ff 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
@@ -7,28 +7,16 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-parent'",
-      "position": [-125, -125],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-parent'",
+      "position": [205, 205],
       "bounds": [225, 225],
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software-parent'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software-parent'",
       "bounds": [225, 225],
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [330, 330, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
index 061cb2b..e48f12f 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
@@ -7,28 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited'",
+      "position": [105, 105],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software'",
       "bounds": [125, 125],
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [105, 105, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
index 0695a850..9427011 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
@@ -7,28 +7,16 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited'",
-      "position": [-25, -25],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited'",
+      "position": [105, 105],
       "bounds": [125, 125],
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software'",
       "bounds": [125, 125],
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 130, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/fixed-position-changed-to-absolute-expected.txt
index a3c5d8a..5ca59ce 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/fixed-position-changed-to-absolute-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -7,29 +7,18 @@
       "backgroundColor": "#402B3C"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited'",
+      "position": [8, 13],
       "bounds": [150, 150],
       "contentsOpaque": true,
-      "backgroundColor": "#D9CCA7",
-      "transform": 1
+      "backgroundColor": "#D9CCA7"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='layer-A'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='layer-A'",
       "position": [20, 20],
       "bounds": [226, 180],
       "backgroundColor": "#6AA6A6"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
index 13e909d..cc7bd14 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -14,39 +14,17 @@
     },
     {
       "name": "LayoutImage (positioned) IMG",
-      "position": [10, 10],
+      "position": [10, 260],
       "bounds": [50, 50],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited inner box'",
+      "position": [500, 370],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 250, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [500, 120, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
index 49d3d06..fb0d979 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
@@ -14,22 +14,10 @@
     },
     {
       "name": "LayoutImage (positioned) IMG",
-      "position": [10, 10],
+      "position": [10, 260],
       "bounds": [50, 50],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 250, 0, 1]
-      ]
+      "backgroundColor": "#000000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
index 312893e..aa887a7 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -13,26 +13,15 @@
     },
     {
       "name": "LayoutImage (positioned) IMG",
+      "position": [0, 250],
       "bounds": [150, 150],
-      "backgroundColor": "#000000",
-      "transform": 1
+      "backgroundColor": "#000000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='indicator box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='indicator box'",
       "bounds": [100, 350],
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 250, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/composited-in-columns-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/composited-in-columns-expected.txt
index cfafce5a..aa67e3f3 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/composited-in-columns-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/composited-in-columns-expected.txt
@@ -11,51 +11,29 @@
     },
     {
       "name": "LayoutBlockFlow DIV class='composited block'",
-      "position": [-5, -5],
+      "position": [14, 164],
       "bounds": [210, 60],
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
       "name": "LayoutBlockFlow DIV class='composited box'",
+      "position": [19, 169],
       "bounds": [50, 50],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
+      "backgroundColor": "#008000"
     },
     {
       "name": "LayoutBlockFlow DIV class='composited block'",
-      "position": [-5, -5],
+      "position": [272, 89],
       "bounds": [210, 60],
-      "backgroundColor": "#0000FF",
-      "transform": 2
+      "backgroundColor": "#0000FF"
     },
     {
       "name": "LayoutBlockFlow DIV class='composited box'",
+      "position": [277, 94],
       "bounds": [50, 50],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [19, 169, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [277, 94, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/flipped-writing-mode-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/flipped-writing-mode-expected.txt
index 1cfb2d1..098ea2a6 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/flipped-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/geometry/flipped-writing-mode-expected.txt
@@ -7,39 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='composited flipped'",
+      "name": "LayoutNGBlockFlow DIV class='composited flipped'",
+      "position": [18, 10],
       "bounds": [250, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#C0C0C0",
-      "transform": 1
+      "backgroundColor": "#C0C0C0"
     },
     {
-      "name": "LayoutBlockFlow DIV class='composited box'",
-      "position": [-95, 0],
+      "name": "LayoutNGBlockFlow DIV class='composited box'",
+      "position": [53, 20],
       "bounds": [195, 100],
-      "backgroundColor": "#0000FF",
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [130, 10, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/become-overlapped-iframe-expected.txt
index 500b3ee..3a62eb7b 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/become-overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -20,14 +20,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [150, 150],
       "backgroundColor": "#00000099"
@@ -42,16 +43,6 @@
         [0, 0, 1, 0],
         [73, 73, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/composited-parent-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/composited-parent-iframe-expected.txt
index f4e0e3a8..963ce320 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/composited-parent-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/composited-parent-iframe-expected.txt
@@ -26,11 +26,12 @@
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -52,16 +53,6 @@
         [0, 0, 1, 0],
         [15, 15, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
index 394f409..9751cf3a 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -22,18 +22,19 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='box' class='composited'",
+      "name": "LayoutNGBlockFlow DIV id='box' class='composited'",
+      "position": [8, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 3
+      "backgroundColor": "#0000FF"
     }
   ],
   "transforms": [
@@ -45,25 +46,6 @@
         [0, 0, 1, 0],
         [43, 143, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-expected.txt
index 96cc70b..11c821e 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe-expected.txt
@@ -26,14 +26,15 @@
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='test' class='composited box'",
+      "name": "LayoutNGBlockFlow DIV id='test' class='composited box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -58,16 +59,6 @@
         [0, 0, 1, 0],
         [15, 15, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe2-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe2-expected.txt
index 60c074b..5b3e6b4 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe2-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe2-expected.txt
@@ -26,14 +26,15 @@
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -58,16 +59,6 @@
         [0, 0, 1, 0],
         [15, 15, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe3-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe3-expected.txt
index ab0a280..3b2de6e5 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe3-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/connect-compositing-iframe3-expected.txt
@@ -26,11 +26,12 @@
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -52,16 +53,6 @@
         [0, 0, 1, 0],
         [15, 15, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/enter-compositing-iframe-expected.txt
index cdcfac1f8..077f576 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/enter-compositing-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -20,14 +20,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='test' class='composited box'",
+      "name": "LayoutNGBlockFlow DIV id='test' class='composited box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -42,16 +43,6 @@
         [0, 0, 1, 0],
         [43, 43, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-resize-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-resize-expected.txt
index e467ce2..b13e62d 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-resize-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-resize-expected.txt
@@ -20,14 +20,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -42,16 +43,6 @@
         [0, 0, 1, 0],
         [43, 43, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-size-from-zero-expected.txt
index 1770ebf..2003e441 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-size-from-zero-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -20,14 +20,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -42,16 +43,6 @@
         [0, 0, 1, 0],
         [43, 43, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-hide-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-hide-expected.txt
index 6a8b7ec..6bde2026 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-hide-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-hide-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='box'",
+      "name": "LayoutNGBlockFlow DIV class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 477b81d8..91a2c42 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -13,18 +13,19 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
-      "bounds": [210, 210],
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
+      "bounds": [210, 160],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV class='box'",
+      "name": "LayoutNGBlockFlow DIV class='box'",
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -49,16 +50,6 @@
     },
     {
       "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -67,8 +58,8 @@
       ]
     },
     {
-      "id": 5,
-      "parent": 4,
+      "id": 4,
+      "parent": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-iframe-expected.txt
index 1770ebf..2003e441 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-iframe-expected.txt
@@ -20,14 +20,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -42,16 +43,6 @@
         [0, 0, 1, 0],
         [43, 43, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-nested-iframes-expected.txt
index 0895730..af8b30b 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-nested-iframes-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -13,21 +13,23 @@
       "bounds": [15, 600]
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
-      "bounds": [210, 210],
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
+      "bounds": [210, 160],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 4
+      "transform": 3
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
-      "bounds": [210, 210],
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
+      "bounds": [210, 160],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 7
+      "transform": 5
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='banner'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='banner'",
       "bounds": [785, 120],
       "backgroundColor": "#00000080"
     }
@@ -64,16 +66,6 @@
     },
     {
       "id": 4,
-      "parent": 3,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
-    },
-    {
-      "id": 5,
       "parent": 1,
       "transform": [
         [1, 0, 0, 0],
@@ -83,24 +75,14 @@
       ]
     },
     {
-      "id": 6,
-      "parent": 5,
+      "id": 5,
+      "parent": 4,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
         [9, 9, 0, 1]
       ]
-    },
-    {
-      "id": 7,
-      "parent": 6,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/resizer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/resizer-expected.txt
index 8095755..d55df783 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/resizer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/resizer-expected.txt
@@ -26,11 +26,12 @@
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
       "name": "LayoutIFrame IFRAME class='container'",
@@ -57,16 +58,6 @@
         [0, 0, 1, 0],
         [2, 2, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/scrolling-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/scrolling-iframe-expected.txt
index 7e22597f..809a7a99 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/scrolling-iframe-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/iframes/scrolling-iframe-expected.txt
@@ -19,14 +19,15 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
+      "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'",
+      "position": [108, 100],
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow HTML",
+      "name": "LayoutNGBlockFlow HTML",
       "position": [5, 5],
       "bounds": [50, 50],
       "backgroundColor": "#00000033"
@@ -51,16 +52,6 @@
         [0, 0, 1, 0],
         [-80, -80, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [108, 100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/images/direct-image-dynamic-border-draws-content-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
index b566a7b5..1e8ca86 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
@@ -10,19 +10,8 @@
     },
     {
       "name": "LayoutImage IMG class='composited'",
-      "bounds": [256, 256],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "position": [8, 8],
+      "bounds": [256, 256]
     }
   ]
 }
@@ -39,19 +28,8 @@
     },
     {
       "name": "LayoutImage IMG class='composited border'",
-      "bounds": [260, 260],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "position": [8, 8],
+      "bounds": [260, 260]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/animation-overlap-with-children-expected.txt
index 98b02b1..b292d934 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/animation-overlap-with-children-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -10,19 +10,20 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='to-animate' class='container animating'",
+      "name": "LayoutNGBlockFlow DIV id='to-animate' class='container animating'",
       "bounds": [262, 212],
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV class='composited banner'",
+      "name": "LayoutNGBlockFlow DIV class='composited banner'",
+      "position": [6, 6],
       "bounds": [250, 50],
       "contentsOpaque": true,
       "backgroundColor": "#C0C0C0",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='test1 box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='test1 box'",
       "position": [11, 21],
       "bounds": [220, 150],
       "backgroundColor": "#FFA500",
@@ -48,16 +49,6 @@
         [0, 0, 1, 0],
         [0, 0, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [6, 6, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
index 524023f..9db9467 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
@@ -9,30 +9,19 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='absolute composited red box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='absolute composited red box'",
+      "position": [10, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#FF0000",
-      "transform": 1
+      "backgroundColor": "#FF0000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='fixed lime box'",
       "position": [10, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FF00"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 100, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
index cadcce92..9a33783 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
@@ -13,17 +13,17 @@
       "bounds": [15, 600]
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box'",
+      "position": [50, 360],
       "bounds": [300, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#00FFFF",
-      "transform": 1
+      "backgroundColor": "#00FFFF"
     },
     {
       "name": "LayoutIFrame (positioned) IFRAME id='iframe2' class='composited'",
+      "position": [10, 200],
       "bounds": [154, 154],
-      "backgroundColor": "#9A9A9A",
-      "transform": 2
+      "backgroundColor": "#9A9A9A"
     },
     {
       "name": "LayoutIFrame (positioned) IFRAME id='iframe3'",
@@ -31,26 +31,6 @@
       "bounds": [154, 154],
       "backgroundColor": "#9A9A9A"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 360, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 200, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-under-transform-expected.txt
index 0a67a40..2cb83ad 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-under-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -14,11 +14,11 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='indicator'",
-      "position": [100, 100],
+      "position": [108, 1113],
       "bounds": [256, 256],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
-      "transform": 3
+      "transform": 1
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='overlap'",
@@ -36,26 +36,6 @@
         [0, 0, 1, 0],
         [0, -1000, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 13, 0, 1]
-      ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 1000, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
index cf9e296..8b9df92 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
@@ -8,22 +8,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='transform'",
+      "name": "LayoutNGBlockFlow DIV class='transform'",
+      "position": [8, 8],
       "bounds": [100, 30],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-child-layer-expected.txt
index 3906f5b..616fe000 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-child-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -7,30 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='container'",
-      "position": [-400, 0],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container'",
       "bounds": [256, 256],
       "contentsOpaque": true,
-      "backgroundColor": "#FF0000",
-      "transform": 1
+      "backgroundColor": "#FF0000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='green'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='green'",
       "bounds": [300, 300],
       "contentsOpaque": true,
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [400, 0, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-clipping-expected.txt
index a77f15b..ef4d5c5 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-clipping-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/overlap-clipping-expected.txt
@@ -7,46 +7,26 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='child'",
-      "bounds": [500, 100],
+      "name": "LayoutNGBlockFlow DIV id='child'",
+      "position": [50, 50],
+      "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow DIV id='child'",
+      "name": "LayoutNGBlockFlow DIV id='child'",
+      "position": [50, 200],
       "bounds": [500, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 2
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='overlap'",
       "position": [450, 200],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 200, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
index 6e14a42dd..6050f21f 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='parent' class='fade'",
+      "name": "LayoutNGBlockFlow DIV id='parent' class='fade'",
+      "position": [8, 8],
       "bounds": [400, 400],
       "contentsOpaque": true,
-      "backgroundColor": "#FFC0CB",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#FFC0CB"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/rotate3d-overlap-expected.txt
index e11fba0..d26c91c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/rotate3d-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -9,34 +9,33 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='box translateZ'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box translateZ'",
+      "position": [23, 23],
+      "bounds": [110, 110],
+      "backgroundColor": "#0000FF"
+    },
+    {
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited box rotate15'",
       "position": [-5, -5],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF",
-      "transform": 1
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate15'",
-      "position": [-5, -5],
-      "bounds": [110, 110],
-      "backgroundColor": "#0000FF",
-      "transform": 3
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'",
       "position": [167, 143],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate45'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited box rotate45'",
       "position": [-5, -5],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF",
-      "transform": 5
+      "transform": 4
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'",
       "position": [311, 143],
       "bounds": [110, 110],
       "backgroundColor": "#0000FF"
@@ -49,21 +48,12 @@
         [1, 0, 0, 0],
         [0, 1, 0, 0],
         [0, 0, 1, 0],
-        [28, 28, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
         [172, 28, 0, 1]
       ]
     },
     {
-      "id": 3,
-      "parent": 2,
+      "id": 2,
+      "parent": 1,
       "transform": [
         [0.965925826289068, 0.258819045102521, 0, 0],
         [-0.258819045102521, 0.965925826289068, 0, 0],
@@ -73,7 +63,7 @@
       "origin": [50, 50]
     },
     {
-      "id": 4,
+      "id": 3,
       "transform": [
         [1, 0, 0, 0],
         [0, 1, 0, 0],
@@ -82,8 +72,8 @@
       ]
     },
     {
-      "id": 5,
-      "parent": 4,
+      "id": 4,
+      "parent": 3,
       "transform": [
         [0.707106781186548, 0.707106781186548, 0, 0],
         [-0.707106781186548, 0.707106781186548, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
index 2144d40..9d4fabf69 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -7,30 +7,19 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='composited'",
-      "bounds": [100, 100],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='composited'",
+      "position": [8, 58],
+      "bounds": [100, 50],
       "contentsOpaque": true,
-      "backgroundColor": "#FA8072",
-      "transform": 1
+      "backgroundColor": "#FA8072"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='squashed'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='squashed'",
       "position": [8, 58],
       "bounds": [100, 50],
       "contentsOpaque": true,
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 58, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-expected.txt
index 23c283b..b514144c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -7,28 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV class='trigger'",
+      "name": "LayoutNGBlockFlow DIV class='trigger'",
+      "position": [8, 8],
       "bounds": [20, 20],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='container'",
       "position": [8, 18],
       "bounds": [142, 142]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-nested-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
index 4be063c7..617a10a 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
@@ -7,47 +7,24 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
-      "position": [-10, -10],
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box'",
+      "position": [10, 10],
       "bounds": [120, 120],
-      "backgroundColor": "#008000",
-      "transform": 1
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
-      "position": [-10, -10],
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box'",
+      "position": [60, 60],
       "bounds": [220, 120],
-      "backgroundColor": "#FF000099",
-      "transform": 2
+      "backgroundColor": "#FF000099"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='indicator'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='indicator'",
       "position": [75, 75],
       "bounds": [56, 56],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [20, 20, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-added-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-added-expected.txt
index 0c5f53f9..c537b93 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-added-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-added-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='test' class='box composited'",
+      "name": "LayoutNGBlockFlow DIV id='test' class='box composited'",
+      "position": [18, 10],
       "bounds": [210, 210],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-overlap-expected.txt
index f6bbf9c..34ae3f9 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-overlap-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/layer-creation/translatez-overlap-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited box'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited box'",
+      "position": [18, 10],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [18, 10, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/overflow/composited-scrolling-paint-phases-expected.txt
index 9a9b76ce..92aea19 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -7,14 +7,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited'",
+      "position": [1, 11],
       "bounds": [80, 10],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 2
+      "transform": 1
     },
     {
-      "name": "LayoutBlockFlow DIV class='container'",
+      "name": "LayoutNGBlockFlow DIV class='container'",
       "bounds": [202, 202],
       "transform": 1
     },
@@ -33,16 +34,6 @@
         [0, 0, 1, 0],
         [28, 20, 0, 1]
       ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [1, 11, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rendering-contexts-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rendering-contexts-expected.txt
index 3fab5dcd1..382c291 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rendering-contexts-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rendering-contexts-expected.txt
@@ -7,25 +7,25 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='grandparent' class='composited'",
+      "name": "LayoutNGBlockFlow DIV id='grandparent' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='parent' class='composited'",
+      "name": "LayoutNGBlockFlow DIV id='parent' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
       "transform": 4
     },
     {
-      "name": "LayoutBlockFlow DIV id='child' class='composited'",
+      "name": "LayoutNGBlockFlow DIV id='child' class='composited'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
-      "transform": 5
+      "transform": 4
     }
   ],
   "transforms": [
@@ -54,11 +54,6 @@
       "parent": 3,
       "flattenInheritedTransform": false,
       "renderingContext": 1
-    },
-    {
-      "id": 5,
-      "parent": 4,
-      "renderingContext": 2
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-absolute-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-absolute-expected.txt
index 71b4203..4c2324c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-absolute-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-absolute-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FF0000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='positioned layer'",
+      "position": [50, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-fixed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-fixed-expected.txt
index 71b4203..4c2324c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-fixed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-fixed-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FF0000"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='positioned layer'",
+      "position": [50, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-iframe-fixed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-iframe-fixed-expected.txt
index 0d4c363..79c4eb3 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-iframe-fixed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-iframe-fixed-expected.txt
@@ -8,21 +8,10 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positioned layer'",
+      "position": [50, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-relative-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-relative-expected.txt
index 3d55004a..17e0549 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-relative-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/rtl/rtl-relative-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='layer'",
+      "position": [642, 58],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [642, 58, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/clipping-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/clipping-ancestor-expected.txt
index 51df8b00..1957ec25 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/clipping-ancestor-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/clipping-ancestor-expected.txt
@@ -7,30 +7,19 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='inner'",
+      "name": "LayoutNGBlockFlow DIV id='inner'",
+      "position": [8, 8],
       "bounds": [200, 10],
       "contentsOpaque": true,
-      "backgroundColor": "#F5F5F5",
-      "transform": 1
+      "backgroundColor": "#F5F5F5"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='hoverable'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='hoverable'",
       "position": [8, 0],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#90EE90"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/iframes-are-never-squashed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/iframes-are-never-squashed-expected.txt
index b98e9b6a..8308535c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/iframes-are-never-squashed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/iframes-are-never-squashed-expected.txt
@@ -7,11 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#D3D3D3",
-      "transform": 1
+      "backgroundColor": "#D3D3D3"
     },
     {
       "name": "LayoutIFrame (positioned) IFRAME",
@@ -19,17 +19,6 @@
       "contentsOpaque": true,
       "backgroundColor": "#ADD8E6"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
index 8f49ef83..daf2cee 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [600, 200],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='chip'",
+          "object": "LayoutNGBlockFlow DIV id='chip'",
           "rect": [400, 100, 20, 20],
           "reason": "background"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
index 807811c6..112c414 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -7,29 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box'",
       "position": [10, 10],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000"
-    }
-  ],
-  "transforms": [
+    },
     {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 10, 0, 1]
-      ]
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box'",
+      "position": [10, 10],
+      "bounds": [100, 100],
+      "contentsOpaque": true,
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/move-squashing-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/move-squashing-layer-expected.txt
index 333d11c..a5fc6a5 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/move-squashing-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/move-squashing-layer-expected.txt
@@ -9,46 +9,26 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='background'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='background'",
+      "position": [8, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#FFFF00",
-      "transform": 1
+      "backgroundColor": "#FFFF00"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='host'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='host'",
+      "position": [100, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 2
+      "backgroundColor": "#008000"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='squashed'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='squashed'",
       "position": [8, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 50, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-for-filters-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-for-filters-expected.txt
index 3708bf8a..92bb092 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-for-filters-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-for-filters-expected.txt
@@ -7,28 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#ADD8E6",
-      "transform": 1
+      "backgroundColor": "#ADD8E6"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='trysquashed'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='trysquashed'",
       "bounds": [100, 100],
       "backgroundColor": "#D3D3D3"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
index 97a15e1..47cd10c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
@@ -8,10 +8,10 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='compositedlayer'",
+      "position": [400, 40],
       "bounds": [24, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#D3D3D3",
-      "transform": 1
+      "backgroundColor": "#D3D3D3"
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='notsquashedelement'",
@@ -19,17 +19,6 @@
       "contentsOpaque": true,
       "backgroundColor": "#008000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [400, 40, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/opacity-squashed-owner-expected.txt
index 6f568f7..b219922 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/opacity-squashed-owner-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -7,28 +7,17 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='target' class='composited box opaque'",
+      "name": "LayoutNGBlockFlow DIV id='target' class='composited box opaque'",
+      "position": [8, 8],
       "bounds": [100, 100],
-      "backgroundColor": "#ADD8E6",
-      "transform": 1
+      "backgroundColor": "#ADD8E6"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='squashed'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='squashed'",
       "position": [16, 4],
       "bounds": [40, 90],
       "backgroundColor": "#90EE90"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/repaint-child-of-squashed-expected.txt
index da06b4ebd..bae9427 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/repaint-child-of-squashed-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -8,30 +8,19 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [50, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box top'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box top'",
       "position": [130, 130],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
-    }
   ]
 }
 
@@ -45,37 +34,26 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [50, 50],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box top'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box top'",
       "position": [130, 130],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#00FFFF",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='inner'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='inner'",
           "rect": [10, 10, 50, 50],
           "reason": "background"
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-distant-relative-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-distant-relative-expected.txt
index 311d1a15..d437df1 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-distant-relative-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-distant-relative-expected.txt
@@ -7,22 +7,9 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='squashing'",
-      "bounds": [1, 1],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-33554430, 0, 0, 1]
-      ]
+      "name": "LayoutNGBlockFlow (positioned) DIV id='squashing'",
+      "drawsContent": false,
+      "backgroundColor": "#FFFFFF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-nephew-expected.txt
index 8ac8f3d..6acb954 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-nephew-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-onto-nephew-expected.txt
@@ -7,29 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [125, 125],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box middle'",
       "position": [40, 40],
       "bounds": [180, 190],
       "backgroundColor": "#00FF00"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [125, 125, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
index 565ddf0..2b93d631 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
@@ -8,10 +8,10 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV",
-      "bounds": [100, 5000],
+      "position": [8, 8],
+      "bounds": [100, 592],
       "contentsOpaque": true,
-      "backgroundColor": "#ADD8E6",
-      "transform": 1
+      "backgroundColor": "#ADD8E6"
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV",
@@ -26,17 +26,6 @@
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
  {
@@ -49,10 +38,10 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV",
-      "bounds": [100, 5000],
+      "position": [8, 8],
+      "bounds": [100, 592],
       "contentsOpaque": true,
-      "backgroundColor": "#ADD8E6",
-      "transform": 1
+      "backgroundColor": "#ADD8E6"
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV",
@@ -67,17 +56,6 @@
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-simple-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-simple-expected.txt
index dafa7e1..e55d6da 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-simple-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-simple-expected.txt
@@ -7,29 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box middle'",
       "position": [20, 20],
       "bounds": [260, 260],
       "backgroundColor": "#00FF00"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-three-layers-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-three-layers-expected.txt
index dd83e213..c96bc1def 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-three-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/squashing/squash-three-layers-expected.txt
@@ -7,29 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box middle'",
       "position": [40, 40],
       "bounds": [180, 190],
       "backgroundColor": "#00FF00"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/tiled-layers-hidpi-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/tiled-layers-hidpi-expected.txt
index 1956c11..c6e09552 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/tiled-layers-hidpi-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/tiled-layers-hidpi-expected.txt
@@ -12,22 +12,11 @@
       "bounds": [1600, 30]
     },
     {
-      "name": "LayoutBlockFlow DIV id='composited'",
+      "name": "LayoutNGBlockFlow DIV id='composited'",
+      "position": [16, 16],
       "bounds": [3600, 20],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [16, 16, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
index 859d060..ea918f7 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
@@ -7,22 +7,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'",
-      "position": [-75, -75],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'",
+      "position": [25, 25],
       "bounds": [260, 260],
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
index fa6bdc1..df919c5 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
@@ -7,22 +7,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited'",
-      "position": [-75, -75],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited'",
+      "position": [25, 25],
       "bounds": [250, 250],
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
index a3f262dc..68de4101 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [250, 250],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
@@ -35,29 +24,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [250, 250],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
       "position": [100, 100],
       "bounds": [200, 200],
       "backgroundColor": "#000000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
index a3f262dc..68de4101 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [250, 250],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
@@ -35,29 +24,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [250, 250],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
       "position": [100, 100],
       "bounds": [200, 200],
       "backgroundColor": "#000000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [250, 250, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-many-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-many-expected.txt
deleted file mode 100644
index e026dbf..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-many-expected.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-Tests that there is an upper limit on the number of hit rects generated per layer. http://crbug.com/299177.
-
-Test node has 99 children with 100 rects
-Test node has 100 children with 101 rects
-FAIL - got 101 rects, expected 1.
-Test node has 101 children with 102 rects
-FAIL - got 102 rects, expected 1.
-manychildren: layer(0,0 308x1228) has hit test rect (0,0 290x12)
-manychildren: layer(0,0 308x1228) has hit test rect (301,21 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,33 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,45 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,57 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,69 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,81 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,93 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,105 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,117 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,129 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,141 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,153 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,165 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,177 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,189 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,201 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,213 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,225 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,237 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,249 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,261 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,273 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,285 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,297 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,309 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,321 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,333 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,345 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,357 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,369 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,381 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,393 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,405 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,417 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,429 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,441 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,453 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,465 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,477 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,489 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,501 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,513 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,525 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,537 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,549 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,561 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,573 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,585 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,597 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,609 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,621 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,633 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,645 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,657 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,669 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,681 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,693 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,705 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,717 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,729 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,741 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,753 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,765 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,777 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,789 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,801 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,813 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,825 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,837 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,849 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,861 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,873 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,885 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,897 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,909 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,921 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,933 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,945 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,957 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,969 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,981 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,993 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1005 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1017 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1029 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1041 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1053 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1065 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1077 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1089 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1101 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1113 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1125 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1137 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1149 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1161 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1173 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1185 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1197 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1209 7x7)
-manychildren: layer(0,0 308x1228) has hit test rect (301,1221 7x7)
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-scroll-expected.txt
index 01bdec5..f7be972 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-scroll-expected.txt
@@ -14,7 +14,7 @@
 overflowwithborder: layer(10,6 274x58) has hit test rect (0,0 255x58)
 overflowwithborder: layer(0,0 785x777) has hit test rect (13,365 290x70)
 
-withTransform: layer(0,0 271x12) has hit test rect (0,0 271x12)
+withTransform: layer(12,25 271x12) has hit test rect (0,0 271x12)
 withTransform: layer(1,1 288x50) has hit test rect (0,0 273x7)
 
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-squashing-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-squashing-expected.txt
deleted file mode 100644
index 961afa6d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-squashing-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This test verifies the hit test regions given to the compositor for composited layer squashing.
-
-behind: layer(0,0 52x52) has hit test rect (0,0 52x52)
-
-middle: layer(25,55 132x132) has hit test rect (0,0 52x52)
-
-top: layer(25,55 132x132) has hit test rect (80,80 52x52)
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-with-negative-child-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-with-negative-child-expected.txt
index 920d6bc0..84acd68 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-with-negative-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/events/touch/compositor-touch-hit-rects-with-negative-child-expected.txt
@@ -1,5 +1,5 @@
 This tests verifies the hit test regions given to the compositor for an element with child at negative offset. It can only be run in DumpRenderTree.
 
-negativeOffsetChild: layer(-109,0 211x13) has hit test rect (0,1 102x12)
+negativeOffsetChild: layer(26,96 212x13) has hit test rect (0,1 103x12)
 
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
index bd800b5..f541c98d 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
@@ -8,27 +8,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
-      "position": [10, 0],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
+      "position": [21, 0],
       "bounds": [12, 12],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
           "rect": [0, 0, 12, 12],
           "reason": "paint property change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [11, 0, 0, 1]
       ]
     }
   ]
@@ -43,27 +31,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
-      "position": [9, 0],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
+      "position": [20, 0],
       "bounds": [13, 12],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
           "rect": [0, 0, 13, 12],
           "reason": "paint property change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [11, 0, 0, 1]
       ]
     }
   ]
@@ -78,27 +54,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
-      "position": [10, 0],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
+      "position": [20, 0],
       "bounds": [13, 12],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
           "rect": [0, 0, 13, 12],
           "reason": "paint property change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 0, 0, 1]
       ]
     }
   ]
@@ -113,27 +77,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
-      "position": [10, 0],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
+      "position": [21, 0],
       "bounds": [13, 12],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
           "rect": [0, 0, 13, 12],
           "reason": "paint property change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [11, 0, 0, 1]
       ]
     }
   ]
@@ -148,27 +100,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
-      "position": [10, 0],
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
+      "position": [20, 0],
       "bounds": [13, 12],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='container'",
           "rect": [0, 0, 13, 12],
           "reason": "paint property change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [10, 0, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/background/multiple-backgrounds-style-change-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/background/multiple-backgrounds-style-change-expected.txt
index 69aed64..f17c5d8 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/background/multiple-backgrounds-style-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/background/multiple-backgrounds-style-change-expected.txt
@@ -7,30 +7,9 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='test' class='composited box changed'",
-      "bounds": [202, 202],
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
-      ]
+      "name": "LayoutNGBlockFlow DIV id='test' class='composited box changed'",
+      "position": [58, 58],
+      "bounds": [202, 202]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt
index 23dcf9ef..a6e087e 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt
@@ -7,27 +7,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='container'",
-      "position": [-1, 0],
+      "name": "LayoutNGBlockFlow (positioned) DIV class='container'",
+      "position": [100, 100],
       "bounds": [15, 14],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='target' class='green'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target' class='green'",
           "rect": [0, 0, 15, 14],
           "reason": "style change"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [101, 100, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/chunk-reorder-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/chunk-reorder-expected.txt
index aa1eaa14..efe986c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/chunk-reorder-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/chunk-reorder-expected.txt
@@ -7,32 +7,21 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [550, 550],
       "backgroundColor": "#FF0000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='chunk3'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='chunk3'",
           "rect": [400, 400, 100, 100],
           "reason": "chunk reordered"
         },
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='chunk2'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='chunk2'",
           "rect": [0, 0, 1, 1],
           "reason": "chunk reordered"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt
index f795adf..456d2ea 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt
@@ -12,27 +12,16 @@
       "bounds": [15, 600]
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 408],
       "bounds": [304, 154],
       "backgroundColor": "#9A9A9A",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV",
+          "object": "LayoutNGBlockFlow DIV",
           "rect": [10, 10, 50, 50],
           "reason": "background"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 408, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
index b422a92..f845d26 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -7,58 +7,38 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV",
+      "name": "LayoutNGBlockFlow (positioned) DIV",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#D3D3D3",
-      "transform": 1
+      "backgroundColor": "#D3D3D3"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV",
+      "name": "LayoutNGBlockFlow (positioned) DIV",
       "position": [50, 50],
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#ADD8E6",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target'",
           "rect": [0, 0, 200, 200],
           "reason": "disappeared"
         }
       ]
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='target'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='target'",
+      "position": [50, 50],
       "bounds": [200, 200],
       "contentsOpaque": true,
       "backgroundColor": "#ADD8E6",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target'",
           "rect": [0, 0, 200, 200],
           "reason": "full layer"
         }
-      ],
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt
index 2ba8c10..c123e81 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt
@@ -7,52 +7,31 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='parent'",
+      "name": "LayoutNGBlockFlow DIV id='parent'",
+      "position": [8, 8],
       "bounds": [400, 400],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='parent'",
+          "object": "LayoutNGBlockFlow DIV id='parent'",
           "rect": [0, 0, 400, 400],
           "reason": "background"
         }
-      ],
-      "transform": 1
+      ]
     },
     {
-      "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
+      "name": "LayoutNGBlockFlow (relative positioned) DIV id='child'",
+      "position": [58, 58],
       "bounds": [75, 75],
       "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='child'",
+          "object": "LayoutNGBlockFlow (relative positioned) DIV id='child'",
           "rect": [0, 0, 75, 75],
           "reason": "background"
         }
-      ],
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 50, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt
index 59c815f4..07ebb526 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt
@@ -11,12 +11,12 @@
       "bounds": [600, 200],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='chip'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='chip'",
           "rect": [400, 0, 50, 50],
           "reason": "geometry"
         },
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='chip'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='chip'",
           "rect": [0, 0, 50, 50],
           "reason": "geometry"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
index 04ace0c..4042a82 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -11,36 +11,25 @@
       "bounds": [800, 600]
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [800, 800],
       "contentsOpaque": true,
-      "backgroundColor": "#D3D3D3",
-      "transform": 1
+      "backgroundColor": "#D3D3D3"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV",
+      "name": "LayoutNGBlockFlow (positioned) DIV",
       "position": [400, 400],
       "bounds": [200, 200],
       "contentsOpaque": true,
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='imgElement'",
+          "object": "LayoutNGBlockFlow DIV id='imgElement'",
           "rect": [0, 0, 200, 200],
           "reason": "background"
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
index 186bdec9..a160f68 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -7,37 +7,26 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#ADD8E6",
-      "transform": 1
+      "backgroundColor": "#ADD8E6"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='container'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='container'",
       "position": [50, 50],
       "bounds": [50, 50],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) SPAN class='child embiggen'",
+          "object": "LayoutNGBlockFlow (positioned) SPAN class='child embiggen'",
           "rect": [0, 0, 50, 50],
           "reason": "background"
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/resize-repaint-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/resize-repaint-expected.txt
index 2485071..957fb6d 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/resize-repaint-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/resize-repaint-expected.txt
@@ -7,36 +7,25 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='resizing'",
+      "name": "LayoutNGBlockFlow DIV id='resizing'",
+      "position": [8, 8],
       "bounds": [402, 207],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='resizing'",
+          "object": "LayoutNGBlockFlow DIV id='resizing'",
           "rect": [0, 0, 402, 207],
           "reason": "geometry"
         },
         {
-          "object": "LayoutBlockFlow DIV",
+          "object": "LayoutNGBlockFlow DIV",
           "rect": [2, 155, 398, 50],
           "reason": "appeared"
         },
         {
-          "object": "LayoutBlockFlow DIV",
+          "object": "LayoutNGBlockFlow DIV",
           "rect": [2, 104, 398, 50],
           "reason": "appeared"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt
index 075a2a5..be82e3c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt
@@ -7,30 +7,9 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='composited-box'",
-      "bounds": [102, 102],
-      "transform": 2
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
-    },
-    {
-      "id": 2,
-      "parent": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
+      "name": "LayoutNGBlockFlow DIV id='composited-box'",
+      "position": [108, 108],
+      "bounds": [102, 102]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
index 0500c6f8..b7e4e2b 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -7,14 +7,14 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='composited box behind'",
+      "position": [100, 100],
       "bounds": [100, 100],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "name": "LayoutNGBlockFlow (positioned) DIV class='box middle'",
       "position": [180, 180],
       "bounds": [262, 200],
       "backgroundColor": "#00FF00",
@@ -26,17 +26,6 @@
         }
       ]
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [100, 100, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
index e02ea368..d3630bcc 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -7,21 +7,21 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
-      "transform": 3
+      "transform": 2
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='target'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='target'",
       "position": [28, 28],
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target'",
           "rect": [0, 0, 100, 100],
           "reason": "background"
         }
@@ -45,12 +45,6 @@
       ],
       "flattenInheritedTransform": false,
       "renderingContext": 1
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "flattenInheritedTransform": false,
-      "renderingContext": 1
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
index f64f209..efd3ebd 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV",
+      "name": "LayoutNGBlockFlow DIV",
+      "position": [8, 8],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#FA8072",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#FA8072"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/updating-scrolling-container-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/updating-scrolling-container-expected.txt
index 4175f20..10d5718 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/updating-scrolling-container-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/compositing/updating-scrolling-container-expected.txt
@@ -7,7 +7,7 @@
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='container'",
+          "object": "LayoutNGBlockFlow DIV id='container'",
           "rect": [8, 108, 210, 210],
           "reason": "style change"
         }
@@ -18,7 +18,7 @@
       "bounds": [210, 210],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='container'",
+          "object": "LayoutNGBlockFlow DIV id='container'",
           "rect": [0, 0, 210, 210],
           "reason": "style change"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt
index 91ecf63..a921ed9 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt
@@ -7,35 +7,22 @@
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='box' class='green drop-shadowed box'",
+          "object": "LayoutNGBlockFlow DIV id='box' class='green drop-shadowed box'",
           "rect": [8, 8, 330, 330],
           "reason": "chunk disappeared"
         }
       ]
     },
     {
-      "name": "LayoutBlockFlow DIV id='box' class='green box blurry'",
-      "position": [-30, -30],
-      "bounds": [260, 260],
+      "name": "LayoutNGBlockFlow DIV id='box' class='green box blurry'",
+      "bounds": [238, 238],
       "backgroundColor": "#008000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='box' class='green box blurry'",
-          "rect": [0, 0, 260, 260],
+          "object": "LayoutNGBlockFlow DIV id='box' class='green box blurry'",
+          "rect": [0, 0, 238, 238],
           "reason": "full layer"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
index c6d341b..01947e4e 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -7,28 +7,15 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='resize' class='drop-shadow'",
-      "position": [-14, -14],
-      "bounds": [160, 260],
+      "name": "LayoutNGBlockFlow DIV id='resize' class='drop-shadow'",
+      "bounds": [154, 254],
       "backgroundColor": "#008000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'",
-          "rect": [0, 0, 160, 260],
+          "object": "LayoutNGBlockFlow DIV id='resize' class='drop-shadow'",
+          "rect": [0, 0, 154, 254],
           "reason": "geometry"
         }
-      ],
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
       ]
     }
   ]
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
index 1a364693..d5448a0 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='resize' class='accelerated'",
+      "name": "LayoutNGBlockFlow DIV id='resize' class='accelerated'",
+      "position": [8, 8],
       "bounds": [100, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [8, 8, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-child-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-child-expected.txt
index 54c5736..b583209 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-child-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [302, 202],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='container'",
+          "object": "LayoutNGBlockFlow DIV class='container'",
           "rect": [186, 1, 100, 100],
           "reason": "chunk appeared"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-parent-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-parent-expected.txt
index 5b6340b1..75cf49c 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-parent-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-parent-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [302, 202],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='container'",
+          "object": "LayoutNGBlockFlow DIV class='container'",
           "rect": [1, 1, 100, 100],
           "reason": "chunk appeared"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-same-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-same-expected.txt
index e7eae80d..6850464 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-same-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/overflow/vertical-overflow-same-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [302, 202],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='vertical-rl container'",
+          "object": "LayoutNGBlockFlow DIV class='vertical-rl container'",
           "rect": [1, 1, 100, 100],
           "reason": "chunk appeared"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt
index 81cad27f..238540d 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [300, 300],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='fixed'",
           "rect": [100, 100, 100, 100],
           "reason": "background"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt
index 81cad27f..238540d 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt
@@ -11,7 +11,7 @@
       "bounds": [300, 300],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+          "object": "LayoutNGBlockFlow (positioned) DIV id='fixed'",
           "rect": [100, 100, 100, 100],
           "reason": "background"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
index 852d45b..5950c949 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
@@ -7,7 +7,7 @@
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [172, 173, 75, 75],
           "reason": "style change"
         }
@@ -18,7 +18,7 @@
       "bounds": [130, 130],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [10, 10, 75, 75],
           "reason": "style change"
         }
@@ -30,7 +30,7 @@
       "bounds": [130, 130],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [30, 10, 75, 75],
           "reason": "style change"
         }
@@ -42,7 +42,7 @@
       "bounds": [130, 130],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [10, 10, 75, 75],
           "reason": "style change"
         }
@@ -54,7 +54,7 @@
       "bounds": [130, 130],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [45, 10, 75, 75],
           "reason": "style change"
         }
@@ -66,7 +66,7 @@
       "bounds": [130, 130],
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow DIV class='target'",
+          "object": "LayoutNGBlockFlow DIV class='target'",
           "rect": [10, 30, 75, 75],
           "reason": "style change"
         }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt
index 59bf467..9044750 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt
@@ -15,6 +15,7 @@
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='container'",
+      "position": [50, 0],
       "bounds": [600, 600],
       "contentsOpaque": true,
       "backgroundColor": "#FF0000",
@@ -25,7 +26,7 @@
           "reason": "appeared"
         }
       ],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -47,16 +48,6 @@
         [0, 0, 1, 0],
         [-365, 0, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [50, 0, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
index 0ffcbf9..6ad2c7f 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -8,19 +8,18 @@
       "transform": 1
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "position": [150, 100],
+      "name": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
       "bounds": [100, 100],
       "contentsOpaque": true,
       "backgroundColor": "#008000",
       "paintInvalidations": [
         {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
+          "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
           "rect": [0, 0, 100, 100],
           "reason": "full layer"
         }
       ],
-      "transform": 3
+      "transform": 2
     }
   ],
   "transforms": [
@@ -41,16 +40,6 @@
         [0, 0, 1, 0],
         [100, 150, 0, 1]
       ]
-    },
-    {
-      "id": 3,
-      "parent": 2,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [-150, -100, 0, 1]
-      ]
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
index 38fc07c..75395879 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -7,18 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='inner'",
+      "name": "LayoutNGBlockFlow DIV id='inner'",
       "bounds": [102, 102],
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='inner'",
+      "name": "LayoutNGBlockFlow DIV id='inner'",
       "position": [94, 1],
       "bounds": [7, 100],
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='outer'",
+      "name": "LayoutNGBlockFlow DIV id='outer'",
       "position": [394, 1],
       "bounds": [7, 300]
     }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
index 38fc07c..75395879 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -7,18 +7,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow DIV id='inner'",
+      "name": "LayoutNGBlockFlow DIV id='inner'",
       "bounds": [102, 102],
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='inner'",
+      "name": "LayoutNGBlockFlow DIV id='inner'",
       "position": [94, 1],
       "bounds": [7, 100],
       "transform": 2
     },
     {
-      "name": "LayoutBlockFlow DIV id='outer'",
+      "name": "LayoutNGBlockFlow DIV id='outer'",
       "position": [394, 1],
       "bounds": [7, 300]
     }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
index 5f3bc1c..8c9add12 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
@@ -7,22 +7,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'",
-      "position": [-150, -150],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'",
+      "position": [50, 50],
       "bounds": [520, 520],
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [200, 200, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
index 2efc314..82105ea 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
@@ -7,22 +7,10 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited'",
-      "position": [-150, -150],
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited'",
+      "position": [50, 50],
       "bounds": [500, 500],
-      "backgroundColor": "#008000",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [200, 200, 0, 1]
-      ]
+      "backgroundColor": "#008000"
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
index 570ff175..b3927fa6 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [500, 500],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [500, 500, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
@@ -35,29 +24,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [500, 500],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
       "position": [200, 200],
       "bounds": [400, 400],
       "backgroundColor": "#000000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [500, 500, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
index 570ff175..b3927fa6 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/virtual/scalefactor200/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
@@ -7,22 +7,11 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [500, 500],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [500, 500, 0, 1]
-      ]
+      "backgroundColor": "#0000FF"
     }
   ]
 }
@@ -35,29 +24,18 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
+      "position": [500, 500],
       "bounds": [200, 200],
       "contentsOpaque": true,
-      "backgroundColor": "#0000FF",
-      "transform": 1
+      "backgroundColor": "#0000FF"
     },
     {
-      "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
+      "name": "LayoutNGBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
       "position": [200, 200],
       "bounds": [400, 400],
       "backgroundColor": "#000000"
     }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [500, 500, 0, 1]
-      ]
-    }
   ]
 }
 
diff --git a/third_party/blink/web_tests/http/tests/loading/sxg/sxg-subresource-origin-trial.https.html b/third_party/blink/web_tests/http/tests/loading/sxg/sxg-subresource-origin-trial.https.html
index df34bef..d1931a9b 100644
--- a/third_party/blink/web_tests/http/tests/loading/sxg/sxg-subresource-origin-trial.https.html
+++ b/third_party/blink/web_tests/http/tests/loading/sxg/sxg-subresource-origin-trial.https.html
@@ -9,6 +9,7 @@
 </head>
 <body>
 <script>
+const kSignedExchangeSubresourcePrefetch = 2953; // see web_feature.mojom
 if (window.testRunner) {
   testRunner.dumpAsText();
   testRunner.waitUntilDone();
@@ -19,7 +20,10 @@
   new PerformanceObserver((list) => {
     for (let e of list.getEntries()) {
       if (e.name.endsWith('sxg-subresource-script.sxg')) {
-        location.href = sxg_path;
+        if (internals.isUseCounted(document,
+                                   kSignedExchangeSubresourcePrefetch)) {
+          location.href = sxg_path;
+        }
       }
     }
   }).observe({ entryTypes: ['resource'] });
diff --git a/third_party/blink/web_tests/vr/VRDisplay_rAF_fires_with_window_rAF.html b/third_party/blink/web_tests/vr/VRDisplay_rAF_fires_with_window_rAF.html
index 7712f2e8..2d6b6056 100644
--- a/third_party/blink/web_tests/vr/VRDisplay_rAF_fires_with_window_rAF.html
+++ b/third_party/blink/web_tests/vr/VRDisplay_rAF_fires_with_window_rAF.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/events_vrdisplayactivate.html b/third_party/blink/web_tests/vr/events_vrdisplayactivate.html
index 1b79a52..c6f4bea7 100644
--- a/third_party/blink/web_tests/vr/events_vrdisplayactivate.html
+++ b/third_party/blink/web_tests/vr/events_vrdisplayactivate.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/events_vrdisplayconnect.html b/third_party/blink/web_tests/vr/events_vrdisplayconnect.html
index dd6aa1a..ec53079 100644
--- a/third_party/blink/web_tests/vr/events_vrdisplayconnect.html
+++ b/third_party/blink/web_tests/vr/events_vrdisplayconnect.html
@@ -1,9 +1,11 @@
 <!DOCTYPE html>
+<script> let legacy_vr_test = true; </script>
 <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="resources/vr-test-utils.js "></script>
 
 <canvas id="webgl-canvas"></canvas>
@@ -27,7 +29,7 @@
       assert_equals(displays.length, 1);
     }, "Starting with a single display");
 
-    XRTest.simulateDeviceConnection({ supportsImmersive: false });
+    navigator.vr.test.simulateDeviceConnection(VALID_NON_IMMERSIVE_DEVICE);
 
     setTimeout( () => {
       navigator.getVRDisplays().then( (displays) => {
diff --git a/third_party/blink/web_tests/vr/events_vrdisplaypresentchange.html b/third_party/blink/web_tests/vr/events_vrdisplaypresentchange.html
index 6d9629e..ac0681f 100644
--- a/third_party/blink/web_tests/vr/events_vrdisplaypresentchange.html
+++ b/third_party/blink/web_tests/vr/events_vrdisplaypresentchange.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/exitPresent_reject_notpresenting.html b/third_party/blink/web_tests/vr/exitPresent_reject_notpresenting.html
index 41cb060..47c362e2 100644
--- a/third_party/blink/web_tests/vr/exitPresent_reject_notpresenting.html
+++ b/third_party/blink/web_tests/vr/exitPresent_reject_notpresenting.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/exitPresent_resolve.html b/third_party/blink/web_tests/vr/exitPresent_resolve.html
index 233cee01..9410813 100644
--- a/third_party/blink/web_tests/vr/exitPresent_resolve.html
+++ b/third_party/blink/web_tests/vr/exitPresent_resolve.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/getEyeParameters_match.html b/third_party/blink/web_tests/vr/getEyeParameters_match.html
index 968a39e..1523a90 100644
--- a/third_party/blink/web_tests/vr/getEyeParameters_match.html
+++ b/third_party/blink/web_tests/vr/getEyeParameters_match.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getEyeParameters_null.html b/third_party/blink/web_tests/vr/getEyeParameters_null.html
index 0cc58a8..057b446 100644
--- a/third_party/blink/web_tests/vr/getEyeParameters_null.html
+++ b/third_party/blink/web_tests/vr/getEyeParameters_null.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getFrameData_noupdate.html b/third_party/blink/web_tests/vr/getFrameData_noupdate.html
index 0567fa8..ae66e1a 100644
--- a/third_party/blink/web_tests/vr/getFrameData_noupdate.html
+++ b/third_party/blink/web_tests/vr/getFrameData_noupdate.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getFrameData_oneframeupdate.html b/third_party/blink/web_tests/vr/getFrameData_oneframeupdate.html
index acc371c..ce21537 100644
--- a/third_party/blink/web_tests/vr/getFrameData_oneframeupdate.html
+++ b/third_party/blink/web_tests/vr/getFrameData_oneframeupdate.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getFrameData_samewithinframe.html b/third_party/blink/web_tests/vr/getFrameData_samewithinframe.html
index 568c0cf4..1370ce0 100644
--- a/third_party/blink/web_tests/vr/getFrameData_samewithinframe.html
+++ b/third_party/blink/web_tests/vr/getFrameData_samewithinframe.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getFrameData_windowRAF.html b/third_party/blink/web_tests/vr/getFrameData_windowRAF.html
index 96e16f6..46f6cf29 100644
--- a/third_party/blink/web_tests/vr/getFrameData_windowRAF.html
+++ b/third_party/blink/web_tests/vr/getFrameData_windowRAF.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getLayers_notpresenting.html b/third_party/blink/web_tests/vr/getLayers_notpresenting.html
index 633d2309..aa027a0 100644
--- a/third_party/blink/web_tests/vr/getLayers_notpresenting.html
+++ b/third_party/blink/web_tests/vr/getLayers_notpresenting.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/getLayers_presenting.html b/third_party/blink/web_tests/vr/getLayers_presenting.html
index 8eefa20..ff6f17a 100644
--- a/third_party/blink/web_tests/vr/getLayers_presenting.html
+++ b/third_party/blink/web_tests/vr/getLayers_presenting.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getLayers_presenting_nondefaultbounds.html b/third_party/blink/web_tests/vr/getLayers_presenting_nondefaultbounds.html
index 64f745e..f251dea 100644
--- a/third_party/blink/web_tests/vr/getLayers_presenting_nondefaultbounds.html
+++ b/third_party/blink/web_tests/vr/getLayers_presenting_nondefaultbounds.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getLayers_update.html b/third_party/blink/web_tests/vr/getLayers_update.html
index 9c5a7ee..cd0efdd 100644
--- a/third_party/blink/web_tests/vr/getLayers_update.html
+++ b/third_party/blink/web_tests/vr/getLayers_update.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getVRDisplays_one_display.html b/third_party/blink/web_tests/vr/getVRDisplays_one_display.html
index 7dd37e9e7..21defbe 100644
--- a/third_party/blink/web_tests/vr/getVRDisplays_one_display.html
+++ b/third_party/blink/web_tests/vr/getVRDisplays_one_display.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/vr/getVRDisplays_zero_display.html b/third_party/blink/web_tests/vr/getVRDisplays_zero_display.html
index ba31c9d..6f7242f 100644
--- a/third_party/blink/web_tests/vr/getVRDisplays_zero_display.html
+++ b/third_party/blink/web_tests/vr/getVRDisplays_zero_display.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/multiple_requestAnimationFrame_called.html b/third_party/blink/web_tests/vr/multiple_requestAnimationFrame_called.html
index ea62950..99451734 100644
--- a/third_party/blink/web_tests/vr/multiple_requestAnimationFrame_called.html
+++ b/third_party/blink/web_tests/vr/multiple_requestAnimationFrame_called.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_called.html b/third_party/blink/web_tests/vr/requestAnimationFrame_called.html
index e858a2d..3164e38 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_called.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_called.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_consistentTimestamps.html b/third_party/blink/web_tests/vr/requestAnimationFrame_consistentTimestamps.html
index c3653606..66fbc18 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_consistentTimestamps.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_consistentTimestamps.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_handoff.html b/third_party/blink/web_tests/vr/requestAnimationFrame_handoff.html
index 0c0b1ac..ee6e371 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_handoff.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_handoff.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_invalidhandle.html b/third_party/blink/web_tests/vr/requestAnimationFrame_invalidhandle.html
index 496ca9ea..7d778621 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_invalidhandle.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_invalidhandle.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_submitFrame_combinations.html b/third_party/blink/web_tests/vr/requestAnimationFrame_submitFrame_combinations.html
index 177a711..912f14a 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_submitFrame_combinations.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_submitFrame_combinations.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="../xr/resources/xr-internal-device-mocking.js"></script>
 <script src="resources/vr-test-utils.js "></script>
diff --git a/third_party/blink/web_tests/vr/requestAnimationFrame_unregister.html b/third_party/blink/web_tests/vr/requestAnimationFrame_unregister.html
index 263d4966..2269b80 100644
--- a/third_party/blink/web_tests/vr/requestAnimationFrame_unregister.html
+++ b/third_party/blink/web_tests/vr/requestAnimationFrame_unregister.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_NaN_bounds.html b/third_party/blink/web_tests/vr/requestPresent_reject_NaN_bounds.html
index 19582b6..cee1556 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_NaN_bounds.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_NaN_bounds.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_badleftbounds.html b/third_party/blink/web_tests/vr/requestPresent_reject_badleftbounds.html
index dbbc9034..f123330 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_badleftbounds.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_badleftbounds.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_badrightbounds.html b/third_party/blink/web_tests/vr/requestPresent_reject_badrightbounds.html
index 1fcbd42..c60914a 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_badrightbounds.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_badrightbounds.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_nogesture.html b/third_party/blink/web_tests/vr/requestPresent_reject_nogesture.html
index 36ed691f..d7ede9f9 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_nogesture.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_nogesture.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_nolayers.html b/third_party/blink/web_tests/vr/requestPresent_reject_nolayers.html
index c34db803..39ecf80b 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_nolayers.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_nolayers.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_nosource.html b/third_party/blink/web_tests/vr/requestPresent_reject_nosource.html
index 3e5534b..06d31e06 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_nosource.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_nosource.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_notsupported.html b/third_party/blink/web_tests/vr/requestPresent_reject_notsupported.html
index f225d77..dc96dbe9 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_notsupported.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_notsupported.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_nowebgl.html b/third_party/blink/web_tests/vr/requestPresent_reject_nowebgl.html
index 210dc29a..10610a8c 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_nowebgl.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_nowebgl.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_nullsource.html b/third_party/blink/web_tests/vr/requestPresent_reject_nullsource.html
index 2f7ff1b..8aae417b 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_nullsource.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_nullsource.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_reject_toomanylayers.html b/third_party/blink/web_tests/vr/requestPresent_reject_toomanylayers.html
index 532f42d1..4bd8f25a 100644
--- a/third_party/blink/web_tests/vr/requestPresent_reject_toomanylayers.html
+++ b/third_party/blink/web_tests/vr/requestPresent_reject_toomanylayers.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_resolve.html b/third_party/blink/web_tests/vr/requestPresent_resolve.html
index b054da02..6dbd91c 100644
--- a/third_party/blink/web_tests/vr/requestPresent_resolve.html
+++ b/third_party/blink/web_tests/vr/requestPresent_resolve.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithgesture.html b/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithgesture.html
index 9a92b1a..e80ef293 100644
--- a/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithgesture.html
+++ b/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithgesture.html
@@ -4,6 +4,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithoutgesture.html b/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithoutgesture.html
index 90f90273..3f09cb9 100644
--- a/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithoutgesture.html
+++ b/third_party/blink/web_tests/vr/requestPresent_resolve_repeatwithoutgesture.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_resolve_then_reject.html b/third_party/blink/web_tests/vr/requestPresent_resolve_then_reject.html
index 2389f21..762adff 100644
--- a/third_party/blink/web_tests/vr/requestPresent_resolve_then_reject.html
+++ b/third_party/blink/web_tests/vr/requestPresent_resolve_then_reject.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/requestPresent_resolve_webgl2.html b/third_party/blink/web_tests/vr/requestPresent_resolve_webgl2.html
index 9a96991f..d8c72a89 100644
--- a/third_party/blink/web_tests/vr/requestPresent_resolve_webgl2.html
+++ b/third_party/blink/web_tests/vr/requestPresent_resolve_webgl2.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 
diff --git a/third_party/blink/web_tests/vr/resources/vr-test-utils.js b/third_party/blink/web_tests/vr/resources/vr-test-utils.js
index c129ade7..25f83a8 100644
--- a/third_party/blink/web_tests/vr/resources/vr-test-utils.js
+++ b/third_party/blink/web_tests/vr/resources/vr-test-utils.js
@@ -53,7 +53,7 @@
   let firstDeviceController;
   vrDisplays.forEach(display => {
     return chain.then(
-        XRTest
+        navigator.vr.test
             .simulateDeviceConnection(
                 {supportsImmersive: display.capabilities.canPresent})
             .then((deviceController) => {
diff --git a/third_party/blink/web_tests/vr/stageParameters_match.html b/third_party/blink/web_tests/vr/stageParameters_match.html
index 58bd3164..e1771f33 100644
--- a/third_party/blink/web_tests/vr/stageParameters_match.html
+++ b/third_party/blink/web_tests/vr/stageParameters_match.html
@@ -3,6 +3,7 @@
 <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> let legacy_vr_test = true; </script>
 <script src="../external/wpt/resources/chromium/webxr-test.js"></script>
 <script src="resources/vr-test-utils.js "></script>
 <script src="resources/test-constants.js"></script>
diff --git a/third_party/blink/web_tests/xr/ar_hittest.html b/third_party/blink/web_tests/xr/ar_hittest.html
index aae505b6..7c58915 100644
--- a/third_party/blink/web_tests/xr/ar_hittest.html
+++ b/third_party/blink/web_tests/xr/ar_hittest.html
@@ -14,6 +14,7 @@
 let testName = "Ensures hit-test returns expected mock results";
 
 let fakeDeviceInitParams = { supportsImmersive: true,
+                             views: VALID_VIEWS,
                              supportsEnvironmentIntegration: true };
 
 let requestSessionModes = [ 'immersive-ar' ];
diff --git a/third_party/blink/web_tests/xr/events_deviceconnect.html b/third_party/blink/web_tests/xr/events_deviceconnect.html
index c73600c..95633fb3 100644
--- a/third_party/blink/web_tests/xr/events_deviceconnect.html
+++ b/third_party/blink/web_tests/xr/events_deviceconnect.html
@@ -4,6 +4,7 @@
 <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>
@@ -28,7 +29,7 @@
   // register the listener on the backend, which doesn't go through until the
   // javascript pauses.
   setTimeout(() => {
-    XRTest.simulateDeviceConnection({ supportsImmersive:true });
+    navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE);
   }, 100);
 
   return promise;
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
index db44c52..a7c3bfc 100644
--- a/third_party/blink/web_tests/xr/events_input_source_recreation.html
+++ b/third_party/blink/web_tests/xr/events_input_source_recreation.html
@@ -14,7 +14,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -22,17 +22,6 @@
   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) {
diff --git a/third_party/blink/web_tests/xr/events_input_sources_change.html b/third_party/blink/web_tests/xr/events_input_sources_change.html
index a4b01318..1b4b81db 100644
--- a/third_party/blink/web_tests/xr/events_input_sources_change.html
+++ b/third_party/blink/web_tests/xr/events_input_sources_change.html
@@ -14,7 +14,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -24,17 +24,6 @@
   let eventPromise = eventWatcher.wait_for(
     ["inputsourceschange", "selectstart", "select", "selectend", "inputsourceschange", "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) {
diff --git a/third_party/blink/web_tests/xr/events_referenceSpace_reset.html b/third_party/blink/web_tests/xr/events_referenceSpace_reset.html
index 663d1c3b..9f09711f 100644
--- a/third_party/blink/web_tests/xr/events_referenceSpace_reset.html
+++ b/third_party/blink/web_tests/xr/events_referenceSpace_reset.html
@@ -15,7 +15,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'inline',
@@ -23,6 +23,9 @@
 ];
 
 let testFunction = function(session, t, fakeDeviceController) {
+  // TODO(981003): Because the device gets re-used we have to ensure that the
+  // resetPose bit is cleared.
+  fakeDeviceController.setResetPose(false);
   // Session must have a baseLayer or frame requests will be ignored.
   session.updateRenderState({
     baseLayer: new XRWebGLLayer(session, gl, {
@@ -40,16 +43,6 @@
     return eventWatcher.wait_for(["reset", "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
-    }]);
   fakeDeviceController.setResetPose(true);
 
   // Trigger the reset pose.
diff --git a/third_party/blink/web_tests/xr/events_session_select.html b/third_party/blink/web_tests/xr/events_session_select.html
index a0281f6..38210bd 100644
--- a/third_party/blink/web_tests/xr/events_session_select.html
+++ b/third_party/blink/web_tests/xr/events_session_select.html
@@ -15,7 +15,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -27,17 +27,6 @@
   let eventPromise = eventWatcher.wait_for(
     ["selectstart", "select", "selectend", "watcherdone"]);
 
-  // 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
-    }]);
-
   function tryCallingFrameMethods(frame) {
     t.step(() => {
       // Frame is active but not an animation frame, so calling getPose is
diff --git a/third_party/blink/web_tests/xr/events_session_select_subframe.html b/third_party/blink/web_tests/xr/events_session_select_subframe.html
index 621b7163..f9e91cf 100644
--- a/third_party/blink/web_tests/xr/events_session_select_subframe.html
+++ b/third_party/blink/web_tests/xr/events_session_select_subframe.html
@@ -16,7 +16,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -26,17 +26,6 @@
   let eventPromise = eventWatcher.wait_for(
     ["selectstart", "selectend", "select", "watcherdone"]);
 
-  // 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
-    }]);
-
   function onSessionSelectStart(event) {
     t.step( () => {
       let input_sources = session.inputSources;
diff --git a/third_party/blink/web_tests/xr/exclusive_requestFrame_nolayer.html b/third_party/blink/web_tests/xr/exclusive_requestFrame_nolayer.html
index 11b1207..4e505b7d 100644
--- a/third_party/blink/web_tests/xr/exclusive_requestFrame_nolayer.html
+++ b/third_party/blink/web_tests/xr/exclusive_requestFrame_nolayer.html
@@ -4,6 +4,7 @@
 <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>
 
@@ -11,7 +12,7 @@
 let testName = "XRSession requestAnimationFrame must fail if the session has "
   + "no baseLayer";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'immersive-vr',
diff --git a/third_party/blink/web_tests/xr/getInputPose_hand.html b/third_party/blink/web_tests/xr/getInputPose_hand.html
index 5820906..8693c64 100644
--- a/third_party/blink/web_tests/xr/getInputPose_hand.html
+++ b/third_party/blink/web_tests/xr/getInputPose_hand.html
@@ -14,7 +14,7 @@
 let testName = "XRInputSources with a target ray mode of 'tracked-pointer' "
   + "properly communicate their poses";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
@@ -23,17 +23,6 @@
     // Session must have a baseLayer or frame requests will be ignored.
     session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-    // 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 input_source = new MockXRInputSource();
     input_source.targetRayMode = "tracked-pointer";
     input_source.handedness = "right";
diff --git a/third_party/blink/web_tests/xr/getInputPose_handedness.html b/third_party/blink/web_tests/xr/getInputPose_handedness.html
index a774537..6d72a6c 100644
--- a/third_party/blink/web_tests/xr/getInputPose_handedness.html
+++ b/third_party/blink/web_tests/xr/getInputPose_handedness.html
@@ -13,7 +13,7 @@
 
 let testName = "XRInputSources properly communicate their handedness";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
@@ -22,17 +22,6 @@
     // Session must have a baseLayer or frame requests will be ignored.
     session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-    // 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 input_source = new MockXRInputSource();
     input_source.targetRayMode = "tracked-pointer";
 
diff --git a/third_party/blink/web_tests/xr/getInputPose_ray.html b/third_party/blink/web_tests/xr/getInputPose_ray.html
index d070e45..edf4da7 100644
--- a/third_party/blink/web_tests/xr/getInputPose_ray.html
+++ b/third_party/blink/web_tests/xr/getInputPose_ray.html
@@ -13,7 +13,7 @@
 
 let testName = "XRInputSources produce valid target rays";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
@@ -22,17 +22,6 @@
     // Session must have a baseLayer or frame requests will be ignored.
     session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-    // 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 input_source = new MockXRInputSource();
     input_source.targetRayMode = "tracked-pointer";
     input_source.handedness = "right";
diff --git a/third_party/blink/web_tests/xr/render_state_vertical_fov_immersive.html b/third_party/blink/web_tests/xr/render_state_vertical_fov_immersive.html
index 4b78857..11c54a1 100644
--- a/third_party/blink/web_tests/xr/render_state_vertical_fov_immersive.html
+++ b/third_party/blink/web_tests/xr/render_state_vertical_fov_immersive.html
@@ -12,7 +12,7 @@
 <script>
 let testName = "inlineVerticalFieldOfView is set appropriately on immersively sessions";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
diff --git a/third_party/blink/web_tests/xr/render_state_vertical_fov_inline.html b/third_party/blink/web_tests/xr/render_state_vertical_fov_inline.html
index 1967ad8..8882517 100644
--- a/third_party/blink/web_tests/xr/render_state_vertical_fov_inline.html
+++ b/third_party/blink/web_tests/xr/render_state_vertical_fov_inline.html
@@ -12,7 +12,7 @@
 <script>
 let testName = "inlineVerticalFieldOfView is set appropriately on inline sessions";
 
-let fakeDeviceInitParams = { supportsImmersive:false };
+let fakeDeviceInitParams = VALID_NON_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [ 'inline' ];
 
diff --git a/third_party/blink/web_tests/xr/resources/xr-test-utils.js b/third_party/blink/web_tests/xr/resources/xr-test-utils.js
index 7b3edd39..195c7fc3 100644
--- a/third_party/blink/web_tests/xr/resources/xr-test-utils.js
+++ b/third_party/blink/web_tests/xr/resources/xr-test-utils.js
@@ -10,7 +10,7 @@
 
   promise_test((t) => {
     let fakeDeviceController;
-    return XRTest.simulateDeviceConnection(deviceOptions)
+    return navigator.xr.test.simulateDeviceConnection(deviceOptions)
         .then((controller) => {
           fakeDeviceController = controller;
           if (gl) {
@@ -51,7 +51,6 @@
                     // already ended is not defined by the spec. This
                     // should be defined or removed.
                     testSession.end().catch(() => {});
-                    fakeDeviceController.setXRPresentationFrameData(null);
                   })
                   .then(() => nextSessionTest(++i))
                   .catch((err) => {
@@ -222,4 +221,4 @@
   }
   document.addEventListener('keypress', thunk, false);
   eventSender.keyDown(' ', []);
-}
\ No newline at end of file
+}
diff --git a/third_party/blink/web_tests/xr/xrBoundedReferenceSpace_updates.html b/third_party/blink/web_tests/xr/xrBoundedReferenceSpace_updates.html
index 575bf13..806a653e 100644
--- a/third_party/blink/web_tests/xr/xrBoundedReferenceSpace_updates.html
+++ b/third_party/blink/web_tests/xr/xrBoundedReferenceSpace_updates.html
@@ -13,7 +13,7 @@
 let testName =
   "'XRBoundedReferenceSpace updates properly when the changes are applied";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'immersive-vr',
@@ -27,15 +27,6 @@
 
   fakeDeviceController.setStageTransform(VALID_STAGE_TRANSFORM);
   fakeDeviceController.setStageSize(2.0, 3.0);
-  fakeDeviceController.setXRPresentationFrameData(ORIGIN_POSE, [{
-      eye:"left",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }, {
-      eye:"right",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }]);
 
   return new Promise((resolve, reject) => {
 
diff --git a/third_party/blink/web_tests/xr/xrFrame_getPose.html b/third_party/blink/web_tests/xr/xrFrame_getPose.html
index cc1c613..a43739b7 100644
--- a/third_party/blink/web_tests/xr/xrFrame_getPose.html
+++ b/third_party/blink/web_tests/xr/xrFrame_getPose.html
@@ -15,7 +15,7 @@
 // of 1.6 meters defined in xr_stationary_reference_space.cc
 let testName = "XRFrame.getPose works between eye-level and floor-level spaces";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -24,17 +24,6 @@
   let webglLayer = new XRWebGLLayer(session, gl);
   session.updateRenderState({ baseLayer: webglLayer });
 
-  // 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
-    }]);
-
   return Promise.all([
     session.requestReferenceSpace('local'),
     session.requestReferenceSpace('local-floor')
diff --git a/third_party/blink/web_tests/xr/xrInputSource_add_remove.html b/third_party/blink/web_tests/xr/xrInputSource_add_remove.html
index 993389f..6c6c38c 100644
--- a/third_party/blink/web_tests/xr/xrInputSource_add_remove.html
+++ b/third_party/blink/web_tests/xr/xrInputSource_add_remove.html
@@ -14,7 +14,7 @@
 let testName = "XRInputSources can be properly added and removed from the "
   + "session";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -22,17 +22,6 @@
     // Session must have a baseLayer or frame requests will be ignored.
     session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-    // 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 input_sources = session.inputSources;
 
     t.step( () => {
diff --git a/third_party/blink/web_tests/xr/xrInputSource_gamepad_disconnect.html b/third_party/blink/web_tests/xr/xrInputSource_gamepad_disconnect.html
index 25714d44..38599a50 100644
--- a/third_party/blink/web_tests/xr/xrInputSource_gamepad_disconnect.html
+++ b/third_party/blink/web_tests/xr/xrInputSource_gamepad_disconnect.html
@@ -14,7 +14,7 @@
 
 let watcherDone = new Event("watcherdone");
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -22,17 +22,6 @@
   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) {
diff --git a/third_party/blink/web_tests/xr/xrInputSource_gamepad_input_registered.html b/third_party/blink/web_tests/xr/xrInputSource_gamepad_input_registered.html
index b321826..4b198f6 100644
--- a/third_party/blink/web_tests/xr/xrInputSource_gamepad_input_registered.html
+++ b/third_party/blink/web_tests/xr/xrInputSource_gamepad_input_registered.html
@@ -12,27 +12,17 @@
 <script>
 let testName = "WebXR InputSource's gamepad properly registers input";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
 let testFunction = function(session, t, fakeDeviceController) {
-  // 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
-    }]);
 
   // There should only be one input source change event, which is from adding
   // the input source at the start of the test.
   let inputChangeEvents = 0;
   function onInputSourcesChange(event) {
-    assert_equals(inputChangeEvents, 0, 
+    assert_equals(inputChangeEvents, 0,
       "Gamepad button or input axis value changes should not fire an input source change event.");
     inputChangeEvents++;
   }
diff --git a/third_party/blink/web_tests/xr/xrReferenceSpace_originOffset.html b/third_party/blink/web_tests/xr/xrReferenceSpace_originOffset.html
index 3d61acdc..478ebf9 100644
--- a/third_party/blink/web_tests/xr/xrReferenceSpace_originOffset.html
+++ b/third_party/blink/web_tests/xr/xrReferenceSpace_originOffset.html
@@ -15,7 +15,28 @@
 // is not available there.
 let testName = "Updating XRReferenceSpace origin offset updates view and input matrices.";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+const VIEW_OFFSET_WITH_ROTATION = {
+  position: [4, 3, 2],
+  orientation: [0, -0.71, 0, 0.71 ]
+};
+
+const VIEWS_WITH_OFFSET = [{
+  eye:"left",
+  projectionMatrix: VALID_PROJECTION_MATRIX,
+  viewOffset: VIEW_OFFSET_WITH_ROTATION,
+  resolution: VALID_RESOLUTION
+}, {
+  eye:"right",
+  projectionMatrix: VALID_PROJECTION_MATRIX,
+  viewOffset: VIEW_OFFSET_WITH_ROTATION,
+  resolution: VALID_RESOLUTION
+}];
+
+let fakeDeviceInitParams = {
+  supportsImmersive: true,
+  viewerOrigin: VALID_POSE_TRANSFORM,
+  views: VIEWS_WITH_OFFSET
+};
 
 let requestSessionModes =  ['immersive-vr'];
 
@@ -24,14 +45,6 @@
     // Session must have a baseLayer or frame requests will be ignored.
     session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-    // Need to have a valid pose or input events don't process.
-    const VIEW_MATRIX_WITH_ROTATION = [
-      1, 0, 0, 0, // 1st col
-      0, 0, 1, 0, // 2nd col
-      0, -1, 0, 0, // 3rd col
-      4, 3, 2, 1 // 4th col
-    ];
-
     const GRIP_MATRIX_WITH_ROTATION = [
       0, 0, -1, 0, // 1st col
       0, 1, 0, 0, // 2nd col
@@ -44,17 +57,7 @@
       -1, 0, 0, 0, // 2nd col
       0, 0, 1, 0, // 3rd col
       2, 0, 1, 1 // 4th col
-    ]
-
-    fakeDeviceController.setXRPresentationFrameData(VALID_POSE_MATRIX, [{
-        eye:"left",
-        projectionMatrix: VALID_PROJECTION_MATRIX,
-        viewMatrix: VIEW_MATRIX_WITH_ROTATION
-      }, {
-        eye:"right",
-        projectionMatrix: VALID_PROJECTION_MATRIX,
-        viewMatrix: VIEW_MATRIX_WITH_ROTATION
-      }]);
+    ];
 
     let input_source = new MockXRInputSource();
     input_source.targetRayMode = "tracked-pointer";
@@ -65,15 +68,15 @@
 
     const RADIANS_90D = Math.PI / 2;
 
-    const EXPECTED_VIEW_MATRIX_1 = [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -1, -1, -1, 1];
+    const EXPECTED_VIEW_MATRIX_1 = [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5, -4, -3, 1];
     const EXPECTED_GRIP_MATRIX_1 = [0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 3, 1];
     const EXPECTED_RAY_MATRIX_1 = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 2, 1, 1];
 
-    const EXPECTED_VIEW_MATRIX_2 = [0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -4, 4, 9, 1];
+    const EXPECTED_VIEW_MATRIX_2 = [0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -8, 1, 7, 1];
     const EXPECTED_GRIP_MATRIX_2 = [0, -1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, -9, -2, -5, 1];
     const EXPECTED_RAY_MATRIX_2 = [0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -8, -4, -5, 1];
 
-    const EXPECTED_VIEW_MATRIX_3 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4, 6, 14, 1];
+    const EXPECTED_VIEW_MATRIX_3 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -8, 3, 12, 1];
     const EXPECTED_GRIP_MATRIX_3 = [0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 5, -4, -14, 1];
     const EXPECTED_RAY_MATRIX_3 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5, -6, -13, 1];
 
@@ -84,17 +87,19 @@
         let source = session.inputSources[0];
 
         function CheckState(referenceSpace, expected_view_matrix, expected_grip_matrix, expected_ray_matrix) {
-          let pose = frame.getViewerPose(referenceSpace);
-          let grip_pose = frame.getPose(source.gripSpace, referenceSpace);
-          let input_pose = frame.getPose(source.targetRaySpace, referenceSpace);
+          t.step(() => {
+            let pose = frame.getViewerPose(referenceSpace);
+            let grip_pose = frame.getPose(source.gripSpace, referenceSpace);
+            let input_pose = frame.getPose(source.targetRaySpace, referenceSpace);
 
-          let view_matrix = pose.views[0].transform.inverse.matrix;
-          let grip_matrix = grip_pose.transform.matrix;
-          let ray_matrix = input_pose.transform.matrix;
+            let view_matrix = pose.views[0].transform.inverse.matrix;
+            let grip_matrix = grip_pose.transform.matrix;
+            let ray_matrix = input_pose.transform.matrix;
 
-          assert_matrices_approx_equal(view_matrix, expected_view_matrix);
-          assert_matrices_approx_equal(grip_matrix, expected_grip_matrix);
-          assert_matrices_approx_equal(ray_matrix, expected_ray_matrix);
+            assert_matrices_approx_equal(view_matrix, expected_view_matrix);
+            assert_matrices_approx_equal(grip_matrix, expected_grip_matrix);
+            assert_matrices_approx_equal(ray_matrix, expected_ray_matrix);
+          });
         }
 
         CheckState(referenceSpace, EXPECTED_VIEW_MATRIX_1, EXPECTED_GRIP_MATRIX_1, EXPECTED_RAY_MATRIX_1);
diff --git a/third_party/blink/web_tests/xr/xrReferenceSpace_originOffsetBounded.html b/third_party/blink/web_tests/xr/xrReferenceSpace_originOffsetBounded.html
index fe5005d..de36ea92 100644
--- a/third_party/blink/web_tests/xr/xrReferenceSpace_originOffsetBounded.html
+++ b/third_party/blink/web_tests/xr/xrReferenceSpace_originOffsetBounded.html
@@ -14,25 +14,43 @@
 // Can't go in external WPT tests because this test uses MockXRInputSource which
 // is not available there.
 const testName = "Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry.";
-const fakeDeviceInitParams = { supportsImmersive: true };
+
+const INITIAL_VIEW_OFFSET = {
+  position: [1, 2, 3],
+  orientation: [0,0,0,1]
+};
+
+const VIEWS_WITH_OFFSET = [{
+    eye:"left",
+    projectionMatrix: VALID_PROJECTION_MATRIX,
+    viewOffset: INITIAL_VIEW_OFFSET,
+    resolution: VALID_RESOLUTION
+  }, {
+    eye:"right",
+    projectionMatrix: VALID_PROJECTION_MATRIX,
+    viewOffset: INITIAL_VIEW_OFFSET,
+    resolution: VALID_RESOLUTION
+}];
+
+const fakeDeviceInitParams = {
+  supportsImmersive: true,
+  views: VIEWS_WITH_OFFSET,
+  viewerOrigin: IDENTITY_TRANSFORM
+};
 const requestSessionModes = ['immersive-vr'];
 
 function testFunction(session, t, fakeDeviceController) {
   // Session must have a baseLayer or frame requests will be ignored.
   session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
 
-  const INITIAL_VIEW_MATRIX = [
-    1, 0, 0, 0,
-    0, 1, 0, 0,
-    0, 0, 1, 0,
-    1, 2, 3, 1,
-  ];
+
   const INITIAL_GRIP_MATRIX = [
     1, 0, 0, 0,
     0, 1, 0, 0,
     0, 0, 1, 0,
     1, 2, 3, 1,
   ];
+
   const LOCAL_POINTER_OFFSET = [
     1,    0,    0,    0,
     0,    1,    0,    0,
@@ -49,15 +67,6 @@
 
   fakeDeviceController.setStageTransform(STAGE_TRANSFORM);
   fakeDeviceController.setStageSize(2.0, 3.0);
-  fakeDeviceController.setXRPresentationFrameData(IDENTITY_MATRIX, [{
-      eye:"left",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: INITIAL_VIEW_MATRIX,
-    }, {
-      eye:"right",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: INITIAL_VIEW_MATRIX,
-  }]);
 
   let input_source = new MockXRInputSource();
   input_source.targetRayMode = "tracked-pointer";
@@ -79,29 +88,31 @@
           expected_ray_matrix,
           expected_bounds_geometry
         ) {
-          let pose = frame.getViewerPose(reference_space);
-          let grip_pose = frame.getPose(input_source.gripSpace, reference_space);
-          let input_pose = frame.getPose(input_source.targetRaySpace, reference_space);
+          t.step(() => {
+            let pose = frame.getViewerPose(reference_space);
+            let grip_pose = frame.getPose(input_source.gripSpace, reference_space);
+            let input_pose = frame.getPose(input_source.targetRaySpace, reference_space);
 
-          let view_matrix = pose.views[0].transform.inverse.matrix;
-          let grip_matrix = grip_pose.transform.matrix;
-          let ray_matrix = input_pose.transform.matrix;
+            let view_matrix = pose.views[0].transform.inverse.matrix;
+            let grip_matrix = grip_pose.transform.matrix;
+            let ray_matrix = input_pose.transform.matrix;
 
-          assert_matrices_approx_equal(expected_view_matrix, view_matrix);
-          assert_matrices_approx_equal(expected_grip_matrix, grip_matrix);
-          assert_matrices_approx_equal(expected_ray_matrix, ray_matrix);
+            assert_matrices_approx_equal(expected_view_matrix, view_matrix);
+            assert_matrices_approx_equal(expected_grip_matrix, grip_matrix);
+            assert_matrices_approx_equal(expected_ray_matrix, ray_matrix);
 
-          assert_equals(reference_space.boundsGeometry.length, expected_bounds_geometry.length);
-          for (var i = 0; i < reference_space.boundsGeometry.length; ++i) {
-            assert_points_approx_equal(reference_space.boundsGeometry[i], expected_bounds_geometry[i]);
-          }
+            assert_equals(reference_space.boundsGeometry.length, expected_bounds_geometry.length);
+            for (var i = 0; i < reference_space.boundsGeometry.length; ++i) {
+              assert_points_approx_equal(reference_space.boundsGeometry[i], expected_bounds_geometry[i]);
+            }
+          });
         }
 
         const EXPECTED_VIEW_MATRIX_1 = [
            1,    0,    0,   0,
            0,    1,    0,   0,
            0,    0,    1,   0,
-          -0.1, -0.2, -0.3, 1,
+          -1.1, -2.2, -3.3, 1,
         ];
         const EXPECTED_GRIP_MATRIX_1 = [
           1,   0,   0,   0,
@@ -152,7 +163,7 @@
           1,    0,   0,   0,
           0,    0,   1,   0,
           0,   -1,   0,   0,
-          9.9, -3.2, 4.7, 1,
+          8.9, -5.2, 1.7, 1,
         ];
         const EXPECTED_GRIP_MATRIX_2 = [
            1,    0,    0,   0,
@@ -201,7 +212,7 @@
            0,    1,   0,   0,
            0,    0,   1,   0,
            1,    0,   0,   0,
-          14.9, -3.2, 6.7, 1,
+          13.9, -5.2, 3.7, 1,
         ];
         const EXPECTED_GRIP_MATRIX_3 = [
           0,    0,     1,   0,
diff --git a/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_immersive.html b/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_immersive.html
index 33501424..634f439 100644
--- a/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_immersive.html
+++ b/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_immersive.html
@@ -13,7 +13,7 @@
 <script>
 
 let testName = "Immersive session ends if data provider disconnects.";
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 let requestSessionModes = ['immersive-vr'];
 
 let testFunction = function(session, t, fakeDeviceController) {
diff --git a/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_inline.html b/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_inline.html
index 3cd5ac7..c819e84 100644
--- a/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_inline.html
+++ b/third_party/blink/web_tests/xr/xrSession_dataProviderDisconnect_inline.html
@@ -13,7 +13,7 @@
 <script>
 
 let testName = "Inline session ends if magic window data provider disconnects.";
-let fakeDeviceInitParams = { supportsImmersive: false };
+let fakeDeviceInitParams = VALID_NON_IMMERSIVE_DEVICE;
 let requestSessionModes = ['inline'];
 
 let testFunction = function(session, t, fakeDeviceController) {
diff --git a/third_party/blink/web_tests/xr/xrSession_deviceDisconnect.html b/third_party/blink/web_tests/xr/xrSession_deviceDisconnect.html
index 6f2a586..fdc9c8b 100644
--- a/third_party/blink/web_tests/xr/xrSession_deviceDisconnect.html
+++ b/third_party/blink/web_tests/xr/xrSession_deviceDisconnect.html
@@ -129,7 +129,7 @@
       "Immersive should not be supported once device is disconnected", "NotSupportedError"));
 
     // Force the device disconnect, which should cause the promises to resolve.
-    XRTest.getService().closeDevice();
+    navigator.xr.test.getService().closeDevice();
 
     // Call this after we close the device, because we don't expect this to rely
     // on (or request) the presence of a device.
diff --git a/third_party/blink/web_tests/xr/xrSession_environmentBlendMode.html b/third_party/blink/web_tests/xr/xrSession_environmentBlendMode.html
index 4534a2ce..e367fb02 100644
--- a/third_party/blink/web_tests/xr/xrSession_environmentBlendMode.html
+++ b/third_party/blink/web_tests/xr/xrSession_environmentBlendMode.html
@@ -4,6 +4,7 @@
 <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>
 
@@ -11,7 +12,7 @@
 
 let testName = "environmentBlendMode is correct for a VR device";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'inline',
diff --git a/third_party/blink/web_tests/xr/xrSession_environmentProviderDisconnect.html b/third_party/blink/web_tests/xr/xrSession_environmentProviderDisconnect.html
index 49bccae..09e8b4a 100644
--- a/third_party/blink/web_tests/xr/xrSession_environmentProviderDisconnect.html
+++ b/third_party/blink/web_tests/xr/xrSession_environmentProviderDisconnect.html
@@ -4,6 +4,7 @@
 <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>
 <script src="../xr/resources/test-constants.js"></script>
@@ -14,6 +15,7 @@
 let testName = "Outstanding promises get rejected if environmentProvider disconencts";
 
 let fakeDeviceInitParams = { supportsImmersive: true,
+                             views: VALID_VIEWS,
                              supportsEnvironmentIntegration: true };
 
 let requestSessionModes = ['immersive-ar'];
diff --git a/third_party/blink/web_tests/xr/xrSession_input_events_end.html b/third_party/blink/web_tests/xr/xrSession_input_events_end.html
index dc790ba..3cf5137 100644
--- a/third_party/blink/web_tests/xr/xrSession_input_events_end.html
+++ b/third_party/blink/web_tests/xr/xrSession_input_events_end.html
@@ -12,7 +12,7 @@
 <script>
 let testName = "Calling end during an input callback stops processing at the right time";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -59,17 +59,6 @@
     });
   }
 
-  // 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
-    }]);
-
   // End our first session, just for simplicity, then make end session calls
   // during each of our input events, and ensure that events stop processing
   // and no crashes occur from calling end inside the event callbacks.
diff --git a/third_party/blink/web_tests/xr/xrSession_requestAnimationFrame_timestamp.html b/third_party/blink/web_tests/xr/xrSession_requestAnimationFrame_timestamp.html
index 099124314..3729ee3 100644
--- a/third_party/blink/web_tests/xr/xrSession_requestAnimationFrame_timestamp.html
+++ b/third_party/blink/web_tests/xr/xrSession_requestAnimationFrame_timestamp.html
@@ -14,7 +14,7 @@
 
 let testName = "XRFrame getViewerPose updates on the next frame";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'inline',
@@ -28,18 +28,6 @@
         compositionDisabled: session.mode == 'inline' })
   });
 
-  // 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('local')
     .then((referenceSpace) => new Promise((resolve, reject) => {
       let counter = 0;
diff --git a/third_party/blink/web_tests/xr/xrStationaryReferenceSpace_floorlevel_updates.html b/third_party/blink/web_tests/xr/xrStationaryReferenceSpace_floorlevel_updates.html
index 816c578e..a255dee 100644
--- a/third_party/blink/web_tests/xr/xrStationaryReferenceSpace_floorlevel_updates.html
+++ b/third_party/blink/web_tests/xr/xrStationaryReferenceSpace_floorlevel_updates.html
@@ -13,7 +13,7 @@
 let testName =
   "'floor-level' XRStationaryReferenceSpace updates properly when the transform changes";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'inline',
@@ -27,16 +27,9 @@
         compositionDisabled: session.mode == 'inline' })
   });
 
+  // TODO(981003): Because the device gets re-used we have to ensure that the
+  //stage transform is cleared here, it shouldn't be set from the initial device.
   fakeDeviceController.setStageTransform(null);
-  fakeDeviceController.setXRPresentationFrameData(ORIGIN_POSE, [{
-      eye:"left",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }, {
-      eye:"right",
-      projectionMatrix: VALID_PROJECTION_MATRIX,
-      viewMatrix: VALID_VIEW_MATRIX
-    }]);
 
   // Don't need to request a frame/allow the stage updates to propagate before
   // requesting local-floor because if the stage transform is set it just won't
diff --git a/third_party/blink/web_tests/xr/xrView_match.html b/third_party/blink/web_tests/xr/xrView_match.html
index 2ca10bf..a736ad85 100644
--- a/third_party/blink/web_tests/xr/xrView_match.html
+++ b/third_party/blink/web_tests/xr/xrView_match.html
@@ -12,7 +12,24 @@
 
 let testName = "XRFrame contains the expected views";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+const fakeViews = [{
+        eye:"left",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: LEFT_OFFSET,
+        resolution: VALID_RESOLUTION
+    }, {
+        eye:"right",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: RIGHT_OFFSET,
+        resolution: VALID_RESOLUTION
+    },
+];
+
+let fakeDeviceInitParams = {
+    supportsImmersive: true,
+    views: fakeViews,
+    viewerOrigin: IDENTITY_TRANSFORM
+};
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -21,17 +38,6 @@
   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('viewer').then(function(viewerSpace) {
     return session.requestReferenceSpace('local').then((referenceSpace) => new Promise((resolve) => {
       function onFrame(time, xrFrame) {
diff --git a/third_party/blink/web_tests/xr/xrView_oneframeupdate.html b/third_party/blink/web_tests/xr/xrView_oneframeupdate.html
index 0b882a0..491422f 100644
--- a/third_party/blink/web_tests/xr/xrView_oneframeupdate.html
+++ b/third_party/blink/web_tests/xr/xrView_oneframeupdate.html
@@ -13,23 +13,30 @@
 let testName = "XRView projection matrices update near and far depths on the "
   + "next frame";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+const fakeViews = [{
+        eye:"left",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: LEFT_OFFSET,
+        resolution: VALID_RESOLUTION
+    }, {
+        eye:"right",
+        projectionMatrix: VALID_PROJECTION_MATRIX,
+        viewOffset: RIGHT_OFFSET,
+        resolution: VALID_RESOLUTION
+    },
+];
+
+let fakeDeviceInitParams = {
+    supportsImmersive: true,
+    views: fakeViews,
+    viewerOrigin: IDENTITY_TRANSFORM
+};
 
 let requestSessionModes = ['immersive-vr'];
 
 let testFunction = function(session, t, fakeDeviceController) {
   // Session must have a baseLayer or frame requests will be ignored.
   session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
-  // 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('local')
     .then((referenceSpace) => new Promise((resolve) =>{
diff --git a/third_party/blink/web_tests/xr/xrViewport_valid.html b/third_party/blink/web_tests/xr/xrViewport_valid.html
index 316185f..3d3e7ba 100644
--- a/third_party/blink/web_tests/xr/xrViewport_valid.html
+++ b/third_party/blink/web_tests/xr/xrViewport_valid.html
@@ -11,7 +11,7 @@
 <script>
 let testName = "XRViewport attributes are valid";
 
-let fakeDeviceInitParams = { supportsImmersive:true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = ['immersive-vr'];
 
@@ -20,17 +20,6 @@
   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('local')
     .then((referenceSpace) => new Promise((resolve) =>{
       function onFrame(time, xrFrame) {
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_constructor.html b/third_party/blink/web_tests/xr/xrWebGLLayer_constructor.html
index ffefa8a..2a61f47 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_constructor.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_constructor.html
@@ -4,6 +4,7 @@
 <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>
 
@@ -11,7 +12,7 @@
 let testName =
   "Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_dirty_framebuffer.html b/third_party/blink/web_tests/xr/xrWebGLLayer_dirty_framebuffer.html
index 2d05ce0..53e447e3 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_dirty_framebuffer.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_dirty_framebuffer.html
@@ -4,6 +4,7 @@
 <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>
@@ -13,7 +14,7 @@
 let testName = "A frame should be submitted if the base layer was written to "
   + "during requestAnimationFrame";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_draw.html b/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_draw.html
index 525162b..61cf697 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_draw.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_draw.html
@@ -4,6 +4,7 @@
 <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>
 
@@ -12,7 +13,7 @@
 let testName =
   "Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_scale.html b/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_scale.html
index 812c225..9526b3c 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_scale.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_framebuffer_scale.html
@@ -12,7 +12,7 @@
 
 let testName = "Ensure framebuffer scaling works as expected.";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes =  ['immersive-vr'];
 
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_incompatible_device.html b/third_party/blink/web_tests/xr/xrWebGLLayer_incompatible_device.html
index 39c8a0f..e148bdfe 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_incompatible_device.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_incompatible_device.html
@@ -4,6 +4,7 @@
 <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>
 
@@ -12,7 +13,7 @@
 
 promise_test( (t) => {
   webglCanvasSetup();
-  return XRTest.simulateDeviceConnection({ supportsImmersive:true })
+  return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
     .then( (controller) => new Promise((resolve) => {
       runWithUserGesture( () => {
         resolve(navigator.xr.requestSession('immersive-vr')
diff --git a/third_party/blink/web_tests/xr/xrWebGLLayer_opaque_framebuffer.html b/third_party/blink/web_tests/xr/xrWebGLLayer_opaque_framebuffer.html
index 35a9bfc9..d46144b 100644
--- a/third_party/blink/web_tests/xr/xrWebGLLayer_opaque_framebuffer.html
+++ b/third_party/blink/web_tests/xr/xrWebGLLayer_opaque_framebuffer.html
@@ -4,13 +4,14 @@
 <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 that the framebuffer given by the WebGL layer is opaque";
 
-let fakeDeviceInitParams = { supportsImmersive: true };
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
 
 let requestSessionModes = [
   'immersive-vr',
diff --git a/third_party/webxr_test_pages/webxr-samples/positional-audio.html b/third_party/webxr_test_pages/webxr-samples/positional-audio.html
index 2cd7fd1..f80212b 100644
--- a/third_party/webxr_test_pages/webxr-samples/positional-audio.html
+++ b/third_party/webxr_test_pages/webxr-samples/positional-audio.html
@@ -297,6 +297,9 @@
               if (audioContext.state == 'running') {
                 pauseAudio();
               } else {
+                if("userActivation" in navigator) {
+                  console.debug(navigator.userActivation);
+                }
                 playAudio();
               }
             });
diff --git a/tools/grit/grit_rule.gni b/tools/grit/grit_rule.gni
index f63bc5f..8a4f3f9 100644
--- a/tools/grit/grit_rule.gni
+++ b/tools/grit/grit_rule.gni
@@ -225,7 +225,7 @@
 
 # TODO(aberent): Enable for other platforms once the build machines have
 #                Java on them (and hence can run the closure compiler).
-_strip_resource_files = is_android
+_strip_resource_files = is_android && is_official_build
 _js_minifier = "//third_party/closure_compiler/js_minify.py"
 
 grit_resource_id_file = "//tools/gritsettings/resource_ids"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f4a55de..ae80a51 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -6832,6 +6832,8 @@
   <int value="22" label="RenderPassDrawQuad has a sorting context id."/>
   <int value="23" label="Too many RenderPassDrawQuads."/>
   <int value="24" label="Unsupported rounded corner rect."/>
+  <int value="25" label="Rounded rect doesn't match clip rect."/>
+  <int value="26" label="Rounded rect doesn't have uniform corner radii."/>
 </enum>
 
 <enum name="CanMakePaymentUsage">
@@ -12858,6 +12860,7 @@
   <int value="3" label="Background Sync"/>
   <int value="4" label="Push Messaging"/>
   <int value="5" label="Notifications"/>
+  <int value="6" label="Payment Handler"/>
 </enum>
 
 <enum name="DevToolsPanel">
@@ -23819,6 +23822,7 @@
   <int value="2950" label="CredentialManagerCreateSuccessWithUVM"/>
   <int value="2951" label="CredentialManagerGetSuccessWithUVM"/>
   <int value="2952" label="DiscardInputEventToMovingIframe"/>
+  <int value="2953" label="SignedExchangeSubresourcePrefetch"/>
 </enum>
 
 <enum name="FeaturePolicyAllowlistType">
@@ -28717,6 +28721,12 @@
   <int value="2" label="Closed without action"/>
 </enum>
 
+<enum name="GpuWatchdogThreadEvent">
+  <int value="0" label="Watchdog Start"/>
+  <int value="1" label="Watchdog Kill"/>
+  <int value="2" label="Watchdog End"/>
+</enum>
+
 <enum name="GPUWebGraphicsContext3D_Init_CanLoseContext">
   <summary>
     Combinations of context loss variables from
@@ -34630,6 +34640,7 @@
   <int value="-541611402" label="OfflinePagesPrefetching:enabled"/>
   <int value="-540150399" label="TapVisualizerApp:enabled"/>
   <int value="-539105193" label="SendTabToSelfBroadcast:disabled"/>
+  <int value="-538141684" label="SafetyTip:enabled"/>
   <int value="-536289234" label="ssl-interstitial-v2-colorful"/>
   <int value="-536230323" label="SingleClickAutofill:disabled"/>
   <int value="-535662704" label="BundledConnectionHelp:enabled"/>
@@ -36429,6 +36440,7 @@
   <int value="2098907258" label="UseSurfaceLayerForVideo:disabled"/>
   <int value="2101151142" label="disable-direct-write"/>
   <int value="2104788328" label="use-winrt-midi-api"/>
+  <int value="2106798283" label="SafetyTip:disabled"/>
   <int value="2106855416" label="HostWindowsInAppShimProcess:enabled"/>
   <int value="2113804526" label="EnableAppShortcutSearch:enabled"/>
   <int value="2114843059" label="ContextualSuggestionsOptOut:enabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index afbd015..dd57d01 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -13656,16 +13656,17 @@
 <histogram base="true" name="Blink.ResourceLoadScheduler.DecodedBytes"
     units="bytes" expires_after="2018-08-06">
   <obsolete>
-    Deprecated as of 8/2018.
+    Removed as of 8/2018.
   </obsolete>
 <!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->
 
   <owner>toyoshim@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
   <summary>Count received data size in bytes for each resource.</summary>
 </histogram>
 
 <histogram name="Blink.ResourceLoadScheduler.DecodedBytes.KBPerFrameStatus"
-    enum="RendererSchedulerFrameType2" expires_after="M77">
+    enum="RendererSchedulerFrameType2" expires_after="M85">
   <owner>toyoshim@chromium.org</owner>
   <owner>altimin@chromium.org</owner>
   <summary>
@@ -13693,8 +13694,9 @@
 </histogram>
 
 <histogram name="Blink.ResourceLoadScheduler.RequestCount"
-    enum="ResourceLoadSchedulerCircumstance" expires_after="M77">
+    enum="ResourceLoadSchedulerCircumstance" expires_after="M85">
   <owner>toyoshim@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
   <summary>
     Count resource request circumstance, e.g. from the main frame vs sub-frames,
     or in throttled state vs in not-throttled state, on each resource load
@@ -13763,11 +13765,12 @@
 <histogram base="true" name="Blink.ResourceLoadScheduler.TrafficBytes"
     units="bytes" expires_after="2018-08-06">
   <obsolete>
-    Deprecated as of 8/2018.
+    Removed as of 8/2018.
   </obsolete>
 <!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->
 
   <owner>toyoshim@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
   <summary>
     Count traffic data size in bytes transferred over networks to load each
     resource.
@@ -24948,7 +24951,7 @@
 </histogram>
 
 <histogram name="DataReductionProxy.ProxyPrefMigrationResult"
-    enum="DataReductionProxyProxyPrefMigrationResult" expires_after="M77">
+    enum="DataReductionProxyProxyPrefMigrationResult" expires_after="M82">
   <owner>sclittle@chromium.org</owner>
   <summary>
     Records the result of migrating the Data Reduction Proxy away from being
@@ -30199,6 +30202,18 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="Download.InsecureBlocking.Verification"
+    enum="DownloadContentType" expires_after="M80">
+  <owner>jdeblasio@chromium.org</owner>
+  <owner>estark@chromium.org</owner>
+  <owner>cthomp@chromium.org</owner>
+  <summary>
+    Records mime-type of download to support analysis for mixed content file
+    download blocking. This is a temporary metric for investigating differences
+    in metrics.
+  </summary>
+</histogram>
+
 <histogram name="Download.InterruptedAtEndError" enum="NetErrorCodes">
   <owner>dtrainor@chromium.org</owner>
   <summary>
@@ -32998,7 +33013,7 @@
 </histogram>
 
 <histogram name="Enterprise.PolicyUpdatePeriod.Device" units="days"
-    expires_after="M77">
+    expires_after="M84">
   <owner>antrim@chromium.org</owner>
   <summary>Time since last device policy fetch.</summary>
 </histogram>
@@ -46765,6 +46780,25 @@
   </summary>
 </histogram>
 
+<histogram name="GPU.WatchdogThread.Event" enum="GpuWatchdogThreadEvent"
+    expires_after="2021-07-01">
+  <owner>magchen@chromium.org</owner>
+  <owner>zmo@chromium.org</owner>
+  <summary>
+    Recorded for each time the GPU watchdog thread starts, crashes and ends.
+    This includes data from both watchdog V1 and V2.
+  </summary>
+</histogram>
+
+<histogram name="GPU.WatchdogThread.Event.V2" enum="GpuWatchdogThreadEvent"
+    expires_after="2021-07-01">
+  <owner>magchen@chromium.org</owner>
+  <owner>zmo@chromium.org</owner>
+  <summary>
+    Recorded for each time the GPU watchdog V2 thread starts, crashes and ends.
+  </summary>
+</histogram>
+
 <histogram name="GPU.WebGraphicsContext3D_Init_CanLoseContext"
     enum="GPUWebGraphicsContext3D_Init_CanLoseContext">
   <owner>vmiura@chromium.org</owner>
@@ -57956,6 +57990,9 @@
 </histogram>
 
 <histogram name="Media.Timeline.Width" units="CSS px" expires_after="M77">
+  <obsolete>
+    Removed from code as of 07/2019.
+  </obsolete>
 <!-- Name completed by histogram_suffixes name="MediaElementConfigurations" -->
 
   <owner>johnme@chromium.org</owner>
@@ -87557,9 +87594,10 @@
 </histogram>
 
 <histogram name="OriginTrials.ValidationResult" enum="OriginTrialTokenStatus"
-    expires_after="M77">
+    expires_after="M80">
   <owner>chasej@chromium.org</owner>
   <owner>iclelland@chromium.org</owner>
+  <owner>feature-control@chromium.org</owner>
   <summary>
     Counts the results of token validation checks to enable experimental
     features. The result for each token validation check is counted once per
@@ -88080,7 +88118,7 @@
 </histogram>
 
 <histogram name="P2P.Client.Canceled.WaitingTimeSeconds" units="seconds"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The wall-clock time spent until a lookup was canceled. This is reported
@@ -88089,7 +88127,7 @@
 </histogram>
 
 <histogram name="P2P.Client.Found.CandidateCount" units="count"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The number of candidates on the LAN, i.e. the number of peers on the LAN
@@ -88099,7 +88137,7 @@
 </histogram>
 
 <histogram name="P2P.Client.Found.ConnectionCount" units="count"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The number of p2p downloads of the peer that the returned URL points to.
@@ -88109,7 +88147,7 @@
 </histogram>
 
 <histogram name="P2P.Client.Found.WaitingTimeSeconds" units="seconds"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The wall-clock time spent waiting for the LAN-wide number of p2p downloads
@@ -88120,7 +88158,7 @@
 </histogram>
 
 <histogram name="P2P.Client.LookupResult" enum="P2PLookupResult"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The result of the lookup. Possible values include &quot;Found&quot; (if a
@@ -88134,7 +88172,7 @@
   </summary>
 </histogram>
 
-<histogram name="P2P.Client.NumPeers" units="count" expires_after="M77">
+<histogram name="P2P.Client.NumPeers" units="count" expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The number of peers implementing p2p file sharing on the network. This is
@@ -88144,7 +88182,7 @@
 </histogram>
 
 <histogram name="P2P.Client.Vanished.WaitingTimeSeconds" units="seconds"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The wall-clock time spent waiting for one or more candidates (i.e. peers
@@ -88163,7 +88201,7 @@
 </histogram>
 
 <histogram name="P2P.Server.ContentServedInterruptedMB" units="MB"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
@@ -88173,7 +88211,7 @@
 </histogram>
 
 <histogram name="P2P.Server.ContentServedSuccessfullyMB" units="MB"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     Number of megabytes (1,000,000 bytes) served from the device (via HTTP).
@@ -88181,7 +88219,7 @@
   </summary>
 </histogram>
 
-<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s" expires_after="M77">
+<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s" expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The average speed at which the download was served at, in kB/s. This is
@@ -88189,7 +88227,7 @@
   </summary>
 </histogram>
 
-<histogram name="P2P.Server.FileCount" units="count" expires_after="M77">
+<histogram name="P2P.Server.FileCount" units="count" expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The number of files available via p2p. This is reported every time a file is
@@ -88197,7 +88235,7 @@
   </summary>
 </histogram>
 
-<histogram name="P2P.Server.RangeBeginPercentage" units="%" expires_after="M77">
+<histogram name="P2P.Server.RangeBeginPercentage" units="%" expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     When a client resumes a download, the HTTP request includes range specifier
@@ -88208,7 +88246,7 @@
 </histogram>
 
 <histogram name="P2P.Server.RequestResult" enum="P2PServerResult"
-    expires_after="M77">
+    expires_after="M93">
   <owner>ahassani@chromium.org</owner>
   <summary>
     The result of the HTTP request. Possible values include &quot;Response
@@ -95949,16 +95987,18 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.BootSectorsRead">
+<histogram name="Platform.BootSectorsRead" expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-performance@google.com</owner>
   <summary>
     Chrome OS number of disk sectors read at boot from kernel start to
     login-prompt-ready.
   </summary>
 </histogram>
 
-<histogram name="Platform.BootSectorsWritten" expires_after="M77">
+<histogram name="Platform.BootSectorsWritten" expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-performance@google.com</owner>
   <summary>
     Chrome OS number of disk sectors written at boot from kernel start to
     login-prompt-ready.
@@ -96007,15 +96047,19 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.CompressedSwapSize" units="MB" expires_after="M77">
+<histogram name="Platform.CompressedSwapSize" units="MB"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Chrome OS size of allocated swap area in megabytes (before compression)
   </summary>
 </histogram>
 
-<histogram name="Platform.CpuFrequencyThermalScaling" units="%">
+<histogram name="Platform.CpuFrequencyThermalScaling" units="%"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-performance@google.com</owner>
   <summary>
     CPU frequency as percent of the baseline frequency, sampled every 30s. This
     may be throttled down from 100% due to power dissipation issues (too high
@@ -96025,7 +96069,7 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.CpuUsage" units="%">
+<histogram name="Platform.CpuUsage" units="%" expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
   <owner>cast-analytics@google.com</owner>
   <summary>
@@ -96430,8 +96474,9 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.LogicalCpuCount">
+<histogram name="Platform.LogicalCpuCount" expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-performance@google.com</owner>
   <summary>
     Number of logical processors. This includes Hyperthreaded cores.
   </summary>
@@ -96450,22 +96495,22 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.Mem" units="%">
+<histogram name="Platform.Mem" units="%" expires_after="2020-07-02">
   <owner>hajimehoshi@chromium.org</owner>
   <owner>kouhei@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
-  <owner>semenzato@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Various memory usage % of total memory on Chrome OS devices (snapshotted
     every 30s).
   </summary>
 </histogram>
 
-<histogram name="Platform.Meminfo" units="KB">
+<histogram name="Platform.Meminfo" units="KB" expires_after="2020-07-02">
   <owner>hajimehoshi@chromium.org</owner>
   <owner>kouhei@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
-  <owner>semenzato@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Various memory usage amount on Chrome OS devices (snapshotted every 30s).
   </summary>
@@ -96474,8 +96519,8 @@
 <histogram name="Platform.Memory.ARC" units="MiB" expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of all ARC processes in Chrome OS, reported every 10 minutes.
   </summary>
@@ -96485,8 +96530,8 @@
     expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of browser and helper processes (excluding GPU process and
     renderers) in Chrome OS, reported every 10 minutes.
@@ -96497,8 +96542,8 @@
     expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of user-level daemons in Chrome OS, reported every 10 minutes.
   </summary>
@@ -96507,8 +96552,8 @@
 <histogram name="Platform.Memory.Gpu" units="MiB" expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of the GPU process in Chrome OS, reported every 10 minutes.
   </summary>
@@ -96518,8 +96563,8 @@
     expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of renderer processes in Chrome OS, reported every 10 minutes.
   </summary>
@@ -96528,8 +96573,8 @@
 <histogram name="Platform.Memory.VMs" units="MiB" expires_after="2020-11-01">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
-  <owner>semenzato@chromium.org</owner>
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Memory usage of VMs (crostini) in Chrome OS, reported every 10 minutes.
   </summary>
@@ -96622,15 +96667,18 @@
 </histogram>
 
 <histogram name="Platform.PageFaultsLong" units="page faults/second"
-    expires_after="M77">
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Page faults per second averaged over 30s interval, sampled continuously.
   </summary>
 </histogram>
 
-<histogram name="Platform.PageFaultsShort" units="page faults/second">
+<histogram name="Platform.PageFaultsShort" units="page faults/second"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Page faults per second averaged over 1s interval, sampled every 30s.
   </summary>
@@ -96735,15 +96783,19 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.SwapInLong" units="pages/second">
+<histogram name="Platform.SwapInLong" units="pages/second"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Average pages/second swapped IN over a 30s interval, sampled every 30s.
   </summary>
 </histogram>
 
-<histogram name="Platform.SwapInShort" units="pages/second">
+<histogram name="Platform.SwapInShort" units="pages/second"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Average pages/second swapped IN over a 1s interval, sampled every 30s.
   </summary>
@@ -97517,15 +97569,19 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.SwapOutLong" units="pages/second">
+<histogram name="Platform.SwapOutLong" units="pages/second"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Average pages/second swapped OUT over a 30s interval, sampled every 30s.
   </summary>
 </histogram>
 
-<histogram name="Platform.SwapOutShort" units="pages/second">
+<histogram name="Platform.SwapOutShort" units="pages/second"
+    expires_after="2020-07-02">
   <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Average pages/second swapped OUT over a 1s interval, sampled every 30s.
   </summary>
@@ -97927,16 +97983,20 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.ZramCompressedSize" units="MB">
-  <owner>semenzato@google.com</owner>
+<histogram name="Platform.ZramCompressedSize" units="MB"
+    expires_after="2020-07-02">
+  <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Compressed swap size in megabytes. This is the actual amount of RAM used by
     the system to compress memory (i.e. after compression). Snapshot every 30s.
   </summary>
 </histogram>
 
-<histogram name="Platform.ZramCompressionRatioPercent" units="%">
-  <owner>semenzato@google.com</owner>
+<histogram name="Platform.ZramCompressionRatioPercent" units="%"
+    expires_after="2020-07-02">
+  <owner>sonnyrao@chromium.org</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     The ratio of compressed memory (zram) before and after compression when the
     denominator at least 1 MB. Ratios of interest are between 1 and 6 (typically
@@ -97981,8 +98041,9 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.ZramSavings" units="MB">
-  <owner>semenzato@google.com</owner>
+<histogram name="Platform.ZramSavings" units="MB" expires_after="2020-07-02">
+  <owner>sonnyrao@google.com</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     RAM savings in megabytes from using memory compression. This is the
     difference between the RAM size before and after compression. Snapshot every
@@ -97990,16 +98051,20 @@
   </summary>
 </histogram>
 
-<histogram name="Platform.ZramZeroPages" units="pages">
-  <owner>semenzato@google.com</owner>
+<histogram name="Platform.ZramZeroPages" units="pages"
+    expires_after="2020-07-02">
+  <owner>sonnyrao@google.com</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     Number of zero-filled pages that the OS is compressing. A large number
     suggests wasteful allocation. Snapshot every 30s.
   </summary>
 </histogram>
 
-<histogram name="Platform.ZramZeroRatioPercent" units="%" expires_after="M77">
-  <owner>semenzato@google.com</owner>
+<histogram name="Platform.ZramZeroRatioPercent" units="%"
+    expires_after="2020-07-02">
+  <owner>sonnyrao@google.com</owner>
+  <owner>chromeos-memory@google.com</owner>
   <summary>
     The fraction of compressed memory that consists of zero-filled pages.
     Snapshot every 30s.
@@ -99589,6 +99654,9 @@
 
 <histogram name="Plugin.RequestObjectResult" enum="BooleanSuccess"
     expires_after="M77">
+  <obsolete>
+    Removed from code 07/2019.
+  </obsolete>
   <owner>mlamouri@chromium.org</owner>
   <summary>Result of HTMLPluginElement::requestObject in Blink.</summary>
 </histogram>
@@ -144855,7 +144923,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize"
-    units="bytes">
+    units="bytes" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the total size of tombstones deleted by the IndexedDB Tombstone
@@ -144867,7 +144935,7 @@
 
 <histogram
     name="WebCore.IndexedDB.TombstoneSweeper.DeletionCommitTime.Complete"
-    units="ms" expires_after="M78">
+    units="ms" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the time it takes for the IndexedDB Tombstone Sweeper to commit
@@ -144878,7 +144946,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete"
-    units="ms" expires_after="M77">
+    units="ms" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the time it takes for the IndexedDB Tombstone Sweeper to fully sweep
@@ -144889,7 +144957,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletionWriteError"
-    units="LevelDBStatus" expires_after="M77">
+    units="LevelDBStatus" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records when an error occurs during deletion of index tombstones by the
@@ -144900,7 +144968,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent"
-    units="%/5" expires_after="M77">
+    units="%/5" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Recorded on the browser side (back end) when the IndexedDB Tombstone Sweeper
@@ -144911,7 +144979,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones"
-    units="Index Tombstones">
+    units="Index Tombstones" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the number of tombstones deleted by the IndexedDB Tombstone Sweeper.
@@ -144921,7 +144989,11 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.NumTombstones"
-    units="Index Tombstones">
+    units="Index Tombstones" expires_after="2019-07-02">
+  <obsolete>
+    Replaced with WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones in
+    07/2017.
+  </obsolete>
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the number of tombstones encountered by the IndexedDB Tombstone
@@ -144932,7 +145004,11 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.StatsTotalTime.Complete"
-    units="ms">
+    units="ms" expires_after="2017-07-02">
+  <obsolete>
+    Replaced with WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete
+    in 07/2017.
+  </obsolete>
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the time it takes for the IndexedDB Tombstone Sweeper to fully scan
@@ -144943,7 +145019,7 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.SweepError"
-    enum="LevelDBStatus" expires_after="M77">
+    enum="LevelDBStatus" expires_after="M85">
   <owner>dmurph@chromium.org</owner>
   <summary>
     Recorded on the browser side (back end) when the IndexedDB Tombstone Sweeper
@@ -144952,7 +145028,11 @@
 </histogram>
 
 <histogram name="WebCore.IndexedDB.TombstoneSweeper.TombstonesSize"
-    units="bytes">
+    units="bytes" expires_after="2017-07-02">
+  <obsolete>
+    Replaced with WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize in
+    07/2017.
+  </obsolete>
   <owner>dmurph@chromium.org</owner>
   <summary>
     Records the total size of tombstones encountered by the IndexedDB Tombstone
@@ -156386,6 +156466,9 @@
 </histogram_suffixes>
 
 <histogram_suffixes name="MediaElementConfigurations" separator=".">
+  <obsolete>
+    Removed from code as of 07/2019.
+  </obsolete>
   <suffix name="FullscreenLandscape"/>
   <suffix name="FullscreenPortrait"/>
   <suffix name="InlineLandscape"/>
@@ -156729,6 +156812,20 @@
   <affected-histogram name="Download.InsecureBlocking.Extensions"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="MixedContentDownloadMimeSecurity" separator=".">
+  <suffix name="Insecure"/>
+  <suffix name="Other"/>
+  <suffix name="Secure"/>
+  <affected-histogram name="Download.InsecureBlocking.Verification.Item"/>
+  <affected-histogram name="Download.InsecureBlocking.Verification.Manager"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MixedContentDownloadMimeSource" separator=".">
+  <suffix base="true" name="Item"/>
+  <suffix base="true" name="Manager"/>
+  <affected-histogram name="Download.InsecureBlocking.Verification"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="Mobile.DefaultBrowser.SystemDefaultBrowser.Type"
     separator=".">
   <suffix name="ChromeNotSystem"
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py
index cbd2f70..2ebce8c4 100644
--- a/tools/perf/core/bot_platforms.py
+++ b/tools/perf/core/bot_platforms.py
@@ -24,9 +24,10 @@
 
 class PerfPlatform(object):
   def __init__(self, name, description, benchmark_names,
-               num_shards=None, platform_os=None, is_fyi=False):
+               num_shards, platform_os, is_fyi=False):
     self._name = name
     self._description = description
+    self._platform_os = platform_os
     # For sorting ignore case and "segments" in the bot name.
     self._sort_key = name.lower().replace('-', ' ')
     self._is_fyi = is_fyi
@@ -36,10 +37,6 @@
     for benchmark_name in benchmark_names:
       benchmarks.append(_ALL_BENCHMARKS_BY_NAMES[benchmark_name])
     benchmarks_to_run = frozenset(benchmarks)
-    if platform_os:
-      self._platform_os = platform_os
-    else:
-      self._platform_os = self._sort_key.split(' ', 1)[0]
     # pylint: disable=redefined-outer-name
     self._benchmarks_to_run = frozenset([
         b for b in benchmarks_to_run if
@@ -143,75 +140,76 @@
 # Linux
 LINUX = PerfPlatform(
     'linux-perf', 'Ubuntu-14.04, 8 core, NVIDIA Quadro P400',
-    _LINUX_BENCHMARK_NAMES, num_shards=26)
+    _LINUX_BENCHMARK_NAMES, 26, 'linux')
 
 # Mac
 MAC_HIGH_END = PerfPlatform(
     'mac-10_13_laptop_high_end-perf',
     'MacBook Pro, Core i7 2.8 GHz, 16GB RAM, 256GB SSD, Radeon 55',
-    _MAC_HIGH_END_BENCHMARK_NAMES, num_shards=26)
+    _MAC_HIGH_END_BENCHMARK_NAMES, 26, 'mac')
 MAC_LOW_END = PerfPlatform(
     'mac-10_12_laptop_low_end-perf',
     'MacBook Air, Core i5 1.8 GHz, 8GB RAM, 128GB SSD, HD Graphics',
-    _MAC_LOW_END_BENCHMARK_NAMES, num_shards=26)
+    _MAC_LOW_END_BENCHMARK_NAMES, 26, 'mac')
 
 # Win
 WIN_10 = PerfPlatform(
     'win-10-perf',
     'Windows Intel HD 630 towers, Core i7-7700 3.6 GHz, 16GB RAM,'
     ' Intel Kaby Lake HD Graphics 630', _WIN_10_BENCHMARK_NAMES,
-    num_shards=26)
+    26, 'win')
 WIN_7 = PerfPlatform(
     'Win 7 Perf', 'N/A', _WIN_7_BENCHMARK_NAMES,
-    num_shards=5)
+    5, 'win')
 WIN_7_GPU = PerfPlatform(
     'Win 7 Nvidia GPU Perf', 'N/A', _WIN_7_GPU_BENCHMARK_NAMES,
-    num_shards=5)
+    5, 'win')
 
 # Android
 ANDROID_GO = PerfPlatform(
     'android-go-perf', 'Android O (gobo)', _ANDROID_GO_BENCHMARK_NAMES,
-    num_shards=19)
+    19, 'android')
 ANDROID_GO_WEBVIEW = PerfPlatform(
     'android-go_webview-perf', 'Android OPM1.171019.021 (gobo)',
-    _ANDROID_GO_WEBVIEW_BENCHMARK_NAMES, num_shards=25)
+    _ANDROID_GO_WEBVIEW_BENCHMARK_NAMES, 25, 'android')
 ANDROID_NEXUS_5 = PerfPlatform(
     'Android Nexus5 Perf', 'Android KOT49H', _ANDROID_NEXUS_5_BENCHMARK_NAMES,
-    num_shards=16)
+    16, 'android')
 ANDROID_NEXUS_5X = PerfPlatform(
     'android-nexus5x-perf', 'Android MMB29Q',
-    _ANDROID_NEXUS_5X_BENCHMARK_NAMES, num_shards=16)
+    _ANDROID_NEXUS_5X_BENCHMARK_NAMES, 16, 'android')
 ANDROID_NEXUS_5X_WEBVIEW = PerfPlatform(
     'Android Nexus5X WebView Perf', 'Android AOSP MOB30K',
-    _ANDROID_NEXUS_5X_WEBVIEW_BENCHMARK_NAMES, num_shards=16)
+    _ANDROID_NEXUS_5X_WEBVIEW_BENCHMARK_NAMES, 16, 'android')
 ANDROID_NEXUS_6_WEBVIEW = PerfPlatform(
     'Android Nexus6 WebView Perf', 'Android AOSP MOB30K',
     _ANDROID_NEXUS_6_WEBVIEW_BENCHMARK_NAMES,
-    num_shards=12)  # Reduced from 16 per crbug.com/891848.
+    12,  # Reduced from 16 per crbug.com/891848.
+    'android')
 ANDROID_PIXEL2 = PerfPlatform(
     'android-pixel2-perf', 'Android OPM1.171019.021',
-    _ANDROID_PIXEL2_BENCHMARK_NAMES, num_shards=35)
+    _ANDROID_PIXEL2_BENCHMARK_NAMES, 35, 'android')
 ANDROID_PIXEL2_WEBVIEW = PerfPlatform(
     'android-pixel2_webview-perf', 'Android OPM1.171019.021',
-    _ANDROID_PIXEL2_WEBVIEW_BENCHMARK_NAMES, num_shards=28)
+    _ANDROID_PIXEL2_WEBVIEW_BENCHMARK_NAMES, 28, 'android')
 
 # FYI bots
 WIN_10_LOW_END_HP_CANDIDATE = PerfPlatform(
     'win-10_laptop_low_end-perf_HP-Candidate', 'HP 15-BS121NR Laptop Candidate',
     _WIN_10_LOW_END_HP_CANDIDATE_BENCHMARK_NAMES,
-    num_shards=1, platform_os='win', is_fyi=True)
+    1, 'win', is_fyi=True)
 ANDROID_NEXUS5X_PERF_FYI =  PerfPlatform(
     'android-nexus5x-perf-fyi', 'Android MMB29Q',
     _ANDROID_NEXUS5X_FYI_BENCHMARK_NAMES,
-    num_shards=3, is_fyi=True)
+    3, 'android', is_fyi=True)
 ANDROID_PIXEL2_PERF_FYI = PerfPlatform(
     'android-pixel2-perf-fyi', 'Android OPM1.171019.021',
     _ANDROID_PIXEL2_FYI_BENCHMARK_NAMES,
-    num_shards=4, platform_os='android', is_fyi=True)
+    4, 'android', is_fyi=True)
 CHROMEOS_KEVIN_PERF_FYI = PerfPlatform(
     'chromeos-kevin-perf-fyi', '',
     _CHROMEOS_KEVIN_FYI_BENCHMARK_NAMES,
-    num_shards=4, platform_os='chromeos', is_fyi=True)
+    4, 'chromeos', is_fyi=True)
 
 # TODO(crbug.com/902089): Add linux-perf-fyi once the bot is configured to use
 # the sharding map.
diff --git a/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm b/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
index ba08f5f6..83e5a43 100644
--- a/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
+++ b/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
@@ -27,6 +27,7 @@
 
   bool is_clipped = true;
   gfx::Rect clip_rect;
+  float clip_rect_corner_radius = 0;
   int sorting_context_id = 0;
   gfx::Transform transform;
   gfx::RectF contents_rect = gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f);
@@ -65,10 +66,10 @@
                      CALayerProperties* properties) {
   return tree->ScheduleCALayer(ui::CARendererLayerParams(
       properties->is_clipped, properties->clip_rect,
-      properties->sorting_context_id, properties->transform,
-      properties->gl_image.get(), properties->contents_rect, properties->rect,
-      properties->background_color, properties->edge_aa_mask,
-      properties->opacity, properties->filter));
+      properties->clip_rect_corner_radius, properties->sorting_context_id,
+      properties->transform, properties->gl_image.get(),
+      properties->contents_rect, properties->rect, properties->background_color,
+      properties->edge_aa_mask, properties->opacity, properties->filter));
 }
 
 void UpdateCALayerTree(std::unique_ptr<ui::CARendererLayerTree>& ca_layer_tree,
@@ -103,6 +104,7 @@
     CALayerProperties properties;
     properties.allow_solid_color_layers = allow_solid_color_layers;
     properties.clip_rect = gfx::Rect(2, 4, 8, 16);
+    properties.clip_rect_corner_radius = 13;
     properties.transform.Translate(10, 20);
     properties.contents_rect = gfx::RectF(0.0f, 0.25f, 0.5f, 0.75f);
     properties.rect = gfx::Rect(16, 32, 64, 128);
@@ -139,6 +141,8 @@
       EXPECT_TRUE([clip_and_sorting_layer masksToBounds]);
       EXPECT_EQ(gfx::Rect(properties.clip_rect.size()),
                 gfx::Rect([clip_and_sorting_layer bounds]));
+      EXPECT_EQ(properties.clip_rect_corner_radius,
+                [clip_and_sorting_layer cornerRadius]);
       EXPECT_EQ(properties.clip_rect.origin(),
                 gfx::Point([clip_and_sorting_layer position]));
       EXPECT_EQ(-properties.clip_rect.origin().x(),
diff --git a/ui/accelerated_widget_mac/ca_renderer_layer_tree.h b/ui/accelerated_widget_mac/ca_renderer_layer_tree.h
index 42e274c..3c3fc18 100644
--- a/ui/accelerated_widget_mac/ca_renderer_layer_tree.h
+++ b/ui/accelerated_widget_mac/ca_renderer_layer_tree.h
@@ -107,6 +107,7 @@
   struct ClipAndSortingLayer {
     ClipAndSortingLayer(bool is_clipped,
                         gfx::Rect clip_rect,
+                        float clip_rect_corner_radius,
                         unsigned sorting_context_id,
                         bool is_singleton_sorting_context);
     ClipAndSortingLayer(ClipAndSortingLayer&& layer);
@@ -123,6 +124,7 @@
     std::vector<TransformLayer> transform_layers;
     bool is_clipped = false;
     gfx::Rect clip_rect;
+    float clip_rect_corner_radius = 0;
     unsigned sorting_context_id = 0;
     bool is_singleton_sorting_context = false;
     base::scoped_nsobject<CALayer> ca_layer;
diff --git a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
index 30e30cb7..1903b0f 100644
--- a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
+++ b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
@@ -331,10 +331,12 @@
 CARendererLayerTree::ClipAndSortingLayer::ClipAndSortingLayer(
     bool is_clipped,
     gfx::Rect clip_rect,
+    float clip_rect_corner_radius,
     unsigned sorting_context_id,
     bool is_singleton_sorting_context)
     : is_clipped(is_clipped),
       clip_rect(clip_rect),
+      clip_rect_corner_radius(clip_rect_corner_radius),
       sorting_context_id(sorting_context_id),
       is_singleton_sorting_context(is_singleton_sorting_context) {}
 
@@ -343,6 +345,7 @@
     : transform_layers(std::move(layer.transform_layers)),
       is_clipped(layer.is_clipped),
       clip_rect(layer.clip_rect),
+      clip_rect_corner_radius(layer.clip_rect_corner_radius),
       sorting_context_id(layer.sorting_context_id),
       is_singleton_sorting_context(layer.is_singleton_sorting_context),
       ca_layer(layer.ca_layer) {
@@ -506,7 +509,9 @@
     if (params.sorting_context_id &&
         current_layer.sorting_context_id == params.sorting_context_id &&
         (current_layer.is_clipped != params.is_clipped ||
-         current_layer.clip_rect != params.clip_rect)) {
+         current_layer.clip_rect != params.clip_rect ||
+         current_layer.clip_rect_corner_radius !=
+             params.clip_rect_corner_radius)) {
       DLOG(ERROR) << "CALayer changed clip inside non-zero sorting context.";
       return false;
     }
@@ -514,14 +519,16 @@
         !current_layer.is_singleton_sorting_context &&
         current_layer.is_clipped == params.is_clipped &&
         current_layer.clip_rect == params.clip_rect &&
+        current_layer.clip_rect_corner_radius ==
+            params.clip_rect_corner_radius &&
         current_layer.sorting_context_id == params.sorting_context_id) {
       needs_new_clip_and_sorting_layer = false;
     }
   }
   if (needs_new_clip_and_sorting_layer) {
     clip_and_sorting_layers.push_back(ClipAndSortingLayer(
-        params.is_clipped, params.clip_rect, params.sorting_context_id,
-        is_singleton_sorting_context));
+        params.is_clipped, params.clip_rect, params.clip_rect_corner_radius,
+        params.sorting_context_id, is_singleton_sorting_context));
   }
   clip_and_sorting_layers.back().AddContentLayer(tree, params);
   return true;
@@ -617,11 +624,15 @@
     float scale_factor) {
   bool update_is_clipped = true;
   bool update_clip_rect = true;
+  bool update_corner_radius = true;
   if (old_layer) {
     DCHECK(old_layer->ca_layer);
     std::swap(ca_layer, old_layer->ca_layer);
     update_is_clipped = old_layer->is_clipped != is_clipped;
     update_clip_rect = update_is_clipped || old_layer->clip_rect != clip_rect;
+    update_corner_radius =
+        update_is_clipped ||
+        old_layer->clip_rect_corner_radius != clip_rect_corner_radius;
   } else {
     ca_layer.reset([[CALayer alloc] init]);
     [ca_layer setAnchorPoint:CGPointZero];
@@ -651,6 +662,9 @@
     }
   }
 
+  if (update_corner_radius)
+    [ca_layer setCornerRadius:clip_rect_corner_radius];
+
   for (size_t i = 0; i < transform_layers.size(); ++i) {
     TransformLayer* old_transform_layer = nullptr;
     if (old_layer && i < old_layer->transform_layers.size())
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index 7627b702..d31244ec 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -118,6 +118,7 @@
 
   if (has_native_accessibility) {
     sources += [
+      "platform/ax_fragment_root_delegate_win.h",
       "platform/ax_fragment_root_win.cc",
       "platform/ax_fragment_root_win.h",
       "platform/ax_platform_node_mac.h",
diff --git a/ui/accessibility/platform/ax_fragment_root_delegate_win.h b/ui/accessibility/platform/ax_fragment_root_delegate_win.h
new file mode 100644
index 0000000..9c01644ca
--- /dev/null
+++ b/ui/accessibility/platform/ax_fragment_root_delegate_win.h
@@ -0,0 +1,30 @@
+// 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_ACCESSIBILITY_PLATFORM_AX_FRAGMENT_ROOT_DELEGATE_WIN_H_
+#define UI_ACCESSIBILITY_PLATFORM_AX_FRAGMENT_ROOT_DELEGATE_WIN_H_
+
+#include "ui/gfx/native_widget_types.h"
+
+namespace ui {
+
+// Delegate interface for clients of AXFragmentRootWin. This allows the client
+// to relate the fragment root to its neighbors in a loosely coupled way.
+class AXFragmentRootDelegateWin {
+ public:
+  // In our design, a fragment root can have at most one child.
+  // See AXFragmentRootWin for more details.
+  virtual gfx::NativeViewAccessible GetChildOfAXFragmentRoot() = 0;
+
+  // Optionally returns a parent node for the fragment root. This is used, for
+  // example, to place the web content fragment at the correct spot in the
+  // browser UI's accessibility tree.
+  // If a fragment root returns no parent, the OS will use HWND parent-child
+  // relationships to establish the fragment root's location in the tree.
+  virtual gfx::NativeViewAccessible GetParentOfAXFragmentRoot() = 0;
+};
+
+}  // namespace ui
+
+#endif  // UI_ACCESSIBILITY_PLATFORM_AX_FRAGMENT_ROOT_DELEGATE_WIN_H_
diff --git a/ui/accessibility/platform/ax_fragment_root_win.cc b/ui/accessibility/platform/ax_fragment_root_win.cc
index 70b947a..898d8683 100644
--- a/ui/accessibility/platform/ax_fragment_root_win.cc
+++ b/ui/accessibility/platform/ax_fragment_root_win.cc
@@ -7,6 +7,7 @@
 #include <unordered_map>
 
 #include "base/no_destructor.h"
+#include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/accessibility/platform/ax_platform_node_win.h"
 #include "ui/base/win/atl_module.h"
 
@@ -176,9 +177,8 @@
 };
 
 AXFragmentRootWin::AXFragmentRootWin(gfx::AcceleratedWidget widget,
-                                     gfx::NativeViewAccessible child) {
-  widget_ = widget;
-  SetChild(child);
+                                     AXFragmentRootDelegateWin* delegate)
+    : widget_(widget), delegate_(delegate) {
   platform_node_ = ui::AXFragmentRootPlatformNodeWin::Create(this);
   AXFragmentRootMapWin::GetInstance().AddFragmentRoot(widget, this);
 }
@@ -187,7 +187,6 @@
   AXFragmentRootMapWin::GetInstance().RemoveFragmentRoot(widget_);
   platform_node_->Destroy();
   platform_node_ = nullptr;
-  child_ = nullptr;
 }
 
 AXFragmentRootWin* AXFragmentRootWin::GetForAcceleratedWidget(
@@ -199,56 +198,34 @@
   return platform_node_.Get();
 }
 
-void AXFragmentRootWin::SetParent(gfx::NativeViewAccessible parent) {
-  if (parent != nullptr) {
-    parent_ = static_cast<ui::AXPlatformNodeWin*>(
-        ui::AXPlatformNode::FromNativeViewAccessible(parent));
-    DCHECK(parent_);
-  } else {
-    parent_ = nullptr;
-  }
-}
-
-void AXFragmentRootWin::SetChild(gfx::NativeViewAccessible child) {
-  if (child != nullptr) {
-    child_ = static_cast<ui::AXPlatformNodeWin*>(
-        ui::AXPlatformNode::FromNativeViewAccessible(child));
-    DCHECK(child_);
-  } else {
-    child_ = nullptr;
-  }
-}
-
 gfx::NativeViewAccessible AXFragmentRootWin::GetParent() {
-  if (parent_ != nullptr) {
-    return parent_->GetNativeViewAccessible();
-  }
-
-  return nullptr;
+  return delegate_->GetParentOfAXFragmentRoot();
 }
 
 int AXFragmentRootWin::GetChildCount() {
-  return (child_ != nullptr) ? 1 : 0;
+  return delegate_->GetChildOfAXFragmentRoot() ? 1 : 0;
 }
 
 gfx::NativeViewAccessible AXFragmentRootWin::ChildAtIndex(int index) {
-  if (index == 0 && child_ != nullptr) {
-    return child_->GetNativeViewAccessible();
+  if (index == 0) {
+    return delegate_->GetChildOfAXFragmentRoot();
   }
 
   return nullptr;
 }
 
 gfx::NativeViewAccessible AXFragmentRootWin::HitTestSync(int x, int y) {
-  if (child_ != nullptr)
-    return child_->GetDelegate()->HitTestSync(x, y);
+  AXPlatformNodeDelegate* child_delegate = GetChildNodeDelegate();
+  if (child_delegate)
+    return child_delegate->HitTestSync(x, y);
 
   return nullptr;
 }
 
 gfx::NativeViewAccessible AXFragmentRootWin::GetFocus() {
-  if (child_ != nullptr)
-    return child_->GetDelegate()->GetFocus();
+  AXPlatformNodeDelegate* child_delegate = GetChildNodeDelegate();
+  if (child_delegate)
+    return child_delegate->GetFocus();
 
   return nullptr;
 }
@@ -261,4 +238,13 @@
 AXFragmentRootWin::GetTargetForNativeAccessibilityEvent() {
   return widget_;
 }
+
+AXPlatformNodeDelegate* AXFragmentRootWin::GetChildNodeDelegate() {
+  gfx::NativeViewAccessible child = delegate_->GetChildOfAXFragmentRoot();
+  if (child)
+    return ui::AXPlatformNode::FromNativeViewAccessible(child)->GetDelegate();
+
+  return nullptr;
+}
+
 }  // namespace ui
diff --git a/ui/accessibility/platform/ax_fragment_root_win.h b/ui/accessibility/platform/ax_fragment_root_win.h
index 0682bca..2ffe019b 100644
--- a/ui/accessibility/platform/ax_fragment_root_win.h
+++ b/ui/accessibility/platform/ax_fragment_root_win.h
@@ -11,7 +11,7 @@
 
 namespace ui {
 
-class AXPlatformNodeWin;
+class AXFragmentRootDelegateWin;
 class AXFragmentRootPlatformNodeWin;
 
 // UI Automation on Windows requires the root of a multi-element provider to
@@ -29,7 +29,7 @@
 class AX_EXPORT AXFragmentRootWin : public ui::AXPlatformNodeDelegateBase {
  public:
   AXFragmentRootWin(gfx::AcceleratedWidget widget,
-                    gfx::NativeViewAccessible child);
+                    AXFragmentRootDelegateWin* delegate);
   ~AXFragmentRootWin() override;
 
   // Fragment roots register themselves in a map upon creation and unregister
@@ -41,15 +41,6 @@
   // Return the NativeViewAccessible for this fragment root.
   gfx::NativeViewAccessible GetNativeViewAccessible();
 
-  // The legacy window needs to provide navigation to its parent for tree
-  // linkage to be correct.
-  void SetParent(gfx::NativeViewAccessible parent);
-
-  // The sole child of a fragment root is permitted to change during the
-  // fragment root's lifetime. This will happen, for example, on a web content
-  // navigation.
-  void SetChild(gfx::NativeViewAccessible child);
-
  private:
   // AXPlatformNodeDelegate overrides.
   gfx::NativeViewAccessible GetParent() override;
@@ -60,11 +51,13 @@
   const ui::AXUniqueId& GetUniqueId() const override;
   gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() override;
 
-  Microsoft::WRL::ComPtr<ui::AXFragmentRootPlatformNodeWin> platform_node_;
-  Microsoft::WRL::ComPtr<ui::AXPlatformNodeWin> parent_;
-  Microsoft::WRL::ComPtr<ui::AXPlatformNodeWin> child_;
-  ui::AXUniqueId unique_id_;
+  // If a child node is available, return its delegate.
+  AXPlatformNodeDelegate* GetChildNodeDelegate();
+
   gfx::AcceleratedWidget widget_;
+  AXFragmentRootDelegateWin* const delegate_;
+  Microsoft::WRL::ComPtr<ui::AXFragmentRootPlatformNodeWin> platform_node_;
+  ui::AXUniqueId unique_id_;
 };
 
 }  // namespace ui
diff --git a/ui/accessibility/platform/ax_fragment_root_win_unittest.cc b/ui/accessibility/platform/ax_fragment_root_win_unittest.cc
index 003c613..1d35919 100644
--- a/ui/accessibility/platform/ax_fragment_root_win_unittest.cc
+++ b/ui/accessibility/platform/ax_fragment_root_win_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "ui/accessibility/platform/ax_fragment_root_win.h"
+#include "ui/accessibility/platform/ax_platform_node_win.h"
 #include "ui/accessibility/platform/ax_platform_node_win_unittest.h"
 
 #include <UIAutomationClient.h>
@@ -173,4 +174,45 @@
             fragment_root_provider->GetFocus(&returned_fragment_provider));
 }
 
+TEST_F(AXFragmentRootTest, TestGetChildCount) {
+  AXNodeData root;
+  Init(root);
+  InitFragmentRoot();
+
+  AXPlatformNodeDelegate* fragment_root = ax_fragment_root_.get();
+  EXPECT_EQ(1, fragment_root->GetChildCount());
+
+  test_fragment_root_delegate_->child_ = nullptr;
+  EXPECT_EQ(0, fragment_root->GetChildCount());
+}
+
+TEST_F(AXFragmentRootTest, TestChildAtIndex) {
+  AXNodeData root;
+  Init(root);
+  InitFragmentRoot();
+
+  gfx::NativeViewAccessible native_view_accessible =
+      AXPlatformNodeFromNode(GetRootNode())->GetNativeViewAccessible();
+  AXPlatformNodeDelegate* fragment_root = ax_fragment_root_.get();
+  EXPECT_EQ(native_view_accessible, fragment_root->ChildAtIndex(0));
+  EXPECT_EQ(nullptr, fragment_root->ChildAtIndex(1));
+
+  test_fragment_root_delegate_->child_ = nullptr;
+  EXPECT_EQ(nullptr, fragment_root->ChildAtIndex(0));
+}
+
+TEST_F(AXFragmentRootTest, TestGetParent) {
+  AXNodeData root;
+  Init(root);
+  InitFragmentRoot();
+
+  AXPlatformNodeDelegate* fragment_root = ax_fragment_root_.get();
+  EXPECT_EQ(nullptr, fragment_root->GetParent());
+
+  gfx::NativeViewAccessible native_view_accessible =
+      AXPlatformNodeFromNode(GetRootNode())->GetNativeViewAccessible();
+  test_fragment_root_delegate_->parent_ = native_view_accessible;
+  EXPECT_EQ(native_view_accessible, fragment_root->GetParent());
+}
+
 }  // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 7221dab..5d88a03 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -4103,6 +4103,35 @@
   return E_FAIL;
 }
 
+//
+// Methods used by the ATL COM map.
+//
+
+// static
+STDMETHODIMP AXPlatformNodeWin::InternalQueryInterface(
+    void* this_ptr,
+    const _ATL_INTMAP_ENTRY* entries,
+    REFIID riid,
+    void** object) {
+  if (!object)
+    return E_INVALIDARG;
+  *object = nullptr;
+  AXPlatformNodeWin* accessible =
+      reinterpret_cast<AXPlatformNodeWin*>(this_ptr);
+  DCHECK(accessible);
+
+  if (riid == IID_IAccessibleTable || riid == IID_IAccessibleTable2) {
+    if (!IsTableLike(accessible->GetData().role))
+      return E_NOINTERFACE;
+  } else if (riid == IID_IAccessibleTableCell) {
+    if (!IsCellOrTableHeader(accessible->GetData().role))
+      return E_NOINTERFACE;
+  }
+
+  return CComObjectRootBase::InternalQueryInterface(this_ptr, entries, riid,
+                                                    object);
+}
+
 HRESULT AXPlatformNodeWin::GetTextAttributeValue(TEXTATTRIBUTEID attribute_id,
                                                  VARIANT* result) {
   // Text attributes of kInlineTextBox nodes are stored on the parent node
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h
index fddbb617..10ee34b 100644
--- a/ui/accessibility/platform/ax_platform_node_win.h
+++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -997,6 +997,16 @@
                               REFIID riid,
                               void** object) override;
 
+  //
+  // Methods used by the ATL COM map.
+  //
+
+  // Called by BEGIN_COM_MAP() / END_COM_MAP().
+  static STDMETHODIMP InternalQueryInterface(void* this_ptr,
+                                             const _ATL_INTMAP_ENTRY* entries,
+                                             REFIID riid,
+                                             void** object);
+
   // Support method for ITextRangeProvider::GetAttributeValue
   HRESULT GetTextAttributeValue(TEXTATTRIBUTEID attribute_id, VARIANT* result);
 
diff --git a/ui/accessibility/platform/ax_platform_node_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
index 779ba157..76aac7b 100644
--- a/ui/accessibility/platform/ax_platform_node_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
@@ -226,6 +226,15 @@
   ASSERT_EQ(0U, AXPlatformNodeBase::GetInstanceCountForTesting());
 }
 
+AXPlatformNode* AXPlatformNodeWinTest::AXPlatformNodeFromNode(AXNode* node) {
+  const TestAXNodeWrapper* wrapper =
+      TestAXNodeWrapper::GetOrCreate(tree_.get(), node);
+  if (!wrapper)
+    return nullptr;
+
+  return wrapper->ax_platform_node();
+}
+
 template <typename T>
 ComPtr<T> AXPlatformNodeWinTest::QueryInterfaceFromNodeId(int32_t id) {
   const TestAXNodeWrapper* wrapper =
@@ -243,12 +252,9 @@
 
 template <typename T>
 ComPtr<T> AXPlatformNodeWinTest::QueryInterfaceFromNode(AXNode* node) {
-  const TestAXNodeWrapper* wrapper =
-      TestAXNodeWrapper::GetOrCreate(tree_.get(), node);
-  if (!wrapper)
+  AXPlatformNode* ax_platform_node = AXPlatformNodeFromNode(node);
+  if (!ax_platform_node)
     return ComPtr<T>();
-
-  AXPlatformNode* ax_platform_node = wrapper->ax_platform_node();
   ComPtr<T> result;
   EXPECT_HRESULT_SUCCEEDED(
       ax_platform_node->GetNativeViewAccessible()->QueryInterface(__uuidof(T),
@@ -359,12 +365,12 @@
 }
 
 void AXPlatformNodeWinTest::InitFragmentRoot() {
-  TestAXNodeWrapper* wrapper =
-      TestAXNodeWrapper::GetOrCreate(tree_.get(), GetRootNode());
+  test_fragment_root_delegate_ = std::make_unique<TestFragmentRootDelegate>();
+  test_fragment_root_delegate_->child_ =
+      AXPlatformNodeFromNode(GetRootNode())->GetNativeViewAccessible();
 
   ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(
-      gfx::kMockAcceleratedWidget,
-      static_cast<ui::AXPlatformNodeWin*>(wrapper->ax_platform_node()));
+      gfx::kMockAcceleratedWidget, test_fragment_root_delegate_.get());
 }
 
 ComPtr<IRawElementProviderFragmentRoot>
@@ -402,6 +408,19 @@
   return supported_patterns;
 }
 
+TestFragmentRootDelegate::TestFragmentRootDelegate() = default;
+
+TestFragmentRootDelegate::~TestFragmentRootDelegate() = default;
+
+gfx::NativeViewAccessible TestFragmentRootDelegate::GetChildOfAXFragmentRoot() {
+  return child_;
+}
+
+gfx::NativeViewAccessible
+TestFragmentRootDelegate::GetParentOfAXFragmentRoot() {
+  return parent_;
+}
+
 TEST_F(AXPlatformNodeWinTest, TestIAccessibleDetachedObject) {
   AXNodeData root;
   root.id = 1;
@@ -1375,6 +1394,37 @@
   }
 }
 
+TEST_F(AXPlatformNodeWinTest, TestIAccessibleTableQueryInterfaceOnNonTable) {
+  ComPtr<IAccessibleTable> table;
+  ComPtr<IAccessibleTable2> table2;
+
+  AXNodeData root;
+  root.id = 1;
+  root.role = ax::mojom::Role::kWebArea;
+  Init(root);
+
+  ComPtr<IAccessible> root_obj = GetRootIAccessible();
+  EXPECT_EQ(E_NOINTERFACE, root_obj->QueryInterface(IID_PPV_ARGS(&table)));
+  EXPECT_EQ(E_NOINTERFACE, root_obj->QueryInterface(IID_PPV_ARGS(&table2)));
+
+  AXTreeUpdate update = Build3X3Table();
+  update.node_id_to_clear = 1;
+  Init(update);
+
+  ComPtr<IAccessibleTableCell> cell = GetCellInTable();
+  ASSERT_NE(nullptr, cell.Get());
+  EXPECT_EQ(E_NOINTERFACE, cell->QueryInterface(IID_PPV_ARGS(&table)));
+  EXPECT_EQ(E_NOINTERFACE, cell->QueryInterface(IID_PPV_ARGS(&table2)));
+}
+
+TEST_F(AXPlatformNodeWinTest, TestIAccessibleTableCellQueryInterfaceOnNonCell) {
+  Init(Build3X3Table());
+
+  ComPtr<IAccessible> root_obj = GetRootIAccessible();
+  ComPtr<IAccessibleTableCell> cell;
+  EXPECT_EQ(E_NOINTERFACE, root_obj->QueryInterface(IID_PPV_ARGS(&cell)));
+}
+
 TEST_F(AXPlatformNodeWinTest, TestIAccessible2ScrollToPoint) {
   AXNodeData root;
   root.id = 1;
diff --git a/ui/accessibility/platform/ax_platform_node_win_unittest.h b/ui/accessibility/platform/ax_platform_node_win_unittest.h
index 88a871a..b8c0f0e 100644
--- a/ui/accessibility/platform/ax_platform_node_win_unittest.h
+++ b/ui/accessibility/platform/ax_platform_node_win_unittest.h
@@ -10,6 +10,7 @@
 #include <memory>
 #include <unordered_set>
 
+#include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/base/win/accessibility_misc_utils.h"
 
 struct IAccessible;
@@ -30,6 +31,17 @@
 namespace ui {
 
 class AXFragmentRootWin;
+class AXPlatformNode;
+
+class TestFragmentRootDelegate : public AXFragmentRootDelegateWin {
+ public:
+  TestFragmentRootDelegate();
+  virtual ~TestFragmentRootDelegate();
+  gfx::NativeViewAccessible GetChildOfAXFragmentRoot() override;
+  gfx::NativeViewAccessible GetParentOfAXFragmentRoot() override;
+  gfx::NativeViewAccessible child_ = nullptr;
+  gfx::NativeViewAccessible parent_ = nullptr;
+};
 
 class AXPlatformNodeWinTest : public ui::AXPlatformNodeTest {
  public:
@@ -41,6 +53,7 @@
   void TearDown() override;
 
  protected:
+  AXPlatformNode* AXPlatformNodeFromNode(AXNode* node);
   template <typename T>
   Microsoft::WRL::ComPtr<T> QueryInterfaceFromNodeId(int32_t id);
   template <typename T>
@@ -70,7 +83,10 @@
 
   using PatternSet = std::unordered_set<LONG>;
   PatternSet GetSupportedPatternsFromNodeId(int32_t id);
+
   std::unique_ptr<AXFragmentRootWin> ax_fragment_root_;
+
+  std::unique_ptr<TestFragmentRootDelegate> test_fragment_root_delegate_;
 };
 
 }  // namespace ui
diff --git a/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java b/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java
index 8c6a902..e3b88137 100644
--- a/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java
+++ b/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java
@@ -149,6 +149,8 @@
         if (resType != AndroidResourceType.DYNAMIC_BITMAP && resType != AndroidResourceType.DYNAMIC)
             return;
 
+        if (mNativeResourceManagerPtr == 0) return;
+
         nativeRemoveResource(mNativeResourceManagerPtr, resType, resId);
     }
 
diff --git a/ui/base/ime/win/tsf_bridge.cc b/ui/base/ime/win/tsf_bridge.cc
index e70f1b9..4cd0e61 100644
--- a/ui/base/ime/win/tsf_bridge.cc
+++ b/ui/base/ime/win/tsf_bridge.cc
@@ -110,10 +110,6 @@
   // An ITfThreadMgr object to be used in focus and document management.
   Microsoft::WRL::ComPtr<ITfThreadMgr> thread_manager_;
 
-  // An ITfInputProcessorProfiles object to be used to get current language
-  // locale profile.
-  Microsoft::WRL::ComPtr<ITfInputProcessorProfiles> input_processor_profiles_;
-
   // A map from TextInputType to an editable document for TSF. We use multiple
   // TSF documents that have different InputScopes and TSF attributes based on
   // the TextInputType associated with the target document. For a TextInputType
@@ -177,13 +173,6 @@
     return false;
   }
 
-  if (FAILED(::CoCreateInstance(CLSID_TF_InputProcessorProfiles, nullptr,
-                                CLSCTX_ALL,
-                                IID_PPV_ARGS(&input_processor_profiles_)))) {
-    DVLOG(1) << "Failed to create InputProcessorProfiles instance.";
-    return false;
-  }
-
   if (FAILED(::CoCreateInstance(CLSID_TF_ThreadMgr, nullptr, CLSCTX_ALL,
                                 IID_PPV_ARGS(&thread_manager_)))) {
     DVLOG(1) << "Failed to create ThreadManager instance.";
@@ -345,14 +334,12 @@
 }
 
 bool TSFBridgeImpl::IsInputLanguageCJK() {
-  LANGID lang_locale;
-  if (SUCCEEDED(input_processor_profiles_->GetCurrentLanguage(&lang_locale))) {
-    lang_locale = PRIMARYLANGID(lang_locale);
-    return lang_locale == LANG_CHINESE || lang_locale == LANG_JAPANESE ||
-           lang_locale == LANG_KOREAN;
-  } else {
-    return false;
-  }
+  // See the following article about how LANGID in HKL is determined.
+  // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardlayout
+  LANGID lang_locale =
+      PRIMARYLANGID(LOWORD(HandleToLong(GetKeyboardLayout(0))));
+  return lang_locale == LANG_CHINESE || lang_locale == LANG_JAPANESE ||
+         lang_locale == LANG_KOREAN;
 }
 
 TextInputClient* TSFBridgeImpl::GetFocusedTextInputClient() const {
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 151525f4..6cea60f 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -12,6 +12,7 @@
 #include <sys/ipc.h>
 #include <sys/shm.h>
 
+#include <bitset>
 #include <list>
 #include <map>
 #include <memory>
@@ -193,10 +194,6 @@
   return min_dimension > 0 ? min_dimension : 64;
 }
 
-struct XImageDeleter {
-  void operator()(XImage* image) const { XDestroyImage(image); }
-};
-
 // Custom release function that will be passed to Skia so that it deletes the
 // image when the SkBitmap goes out of scope.
 // |address| is the pointer to the data inside the XImage.
@@ -1341,6 +1338,11 @@
   cursor_ = cursor;
 }
 
+void XImageDeleter::operator()(XImage* image) const {
+  if (image)
+    XDestroyImage(image);
+}
+
 namespace test {
 
 const XcursorImage* GetCachedXcursorImage(::Cursor cursor) {
@@ -1492,7 +1494,7 @@
                                            Visual** visual,
                                            int* depth,
                                            Colormap* colormap,
-                                           bool* using_argb_visual) {
+                                           bool* visual_has_alpha) {
   base::AutoLock lock(lock_);
   bool use_argb = want_argb_visual && using_compositing_wm_ &&
                   (using_software_rendering_ || have_gpu_argb_visual_);
@@ -1501,7 +1503,7 @@
                            : system_visual_id_;
 
   bool success =
-      GetVisualInfoImpl(visual_id, visual, depth, colormap, using_argb_visual);
+      GetVisualInfoImpl(visual_id, visual, depth, colormap, visual_has_alpha);
   DCHECK(success);
 }
 
@@ -1509,10 +1511,10 @@
                                    Visual** visual,
                                    int* depth,
                                    Colormap* colormap,
-                                   bool* using_argb_visual) {
+                                   bool* visual_has_alpha) {
   base::AutoLock lock(lock_);
   return GetVisualInfoImpl(visual_id, visual, depth, colormap,
-                           using_argb_visual);
+                           visual_has_alpha);
 }
 
 bool XVisualManager::OnGPUInfoChanged(bool software_rendering,
@@ -1543,7 +1545,7 @@
                                        Visual** visual,
                                        int* depth,
                                        Colormap* colormap,
-                                       bool* using_argb_visual) {
+                                       bool* visual_has_alpha) {
   auto it = visuals_.find(visual_id);
   if (it == visuals_.end())
     return false;
@@ -1558,8 +1560,15 @@
     *depth = visual_info.depth;
   if (colormap)
     *colormap = is_default_visual ? CopyFromParent : visual_data.GetColormap();
-  if (using_argb_visual)
-    *using_argb_visual = visual_id == transparent_visual_id_;
+  if (visual_has_alpha) {
+    auto popcount = [](auto x) {
+      return std::bitset<8 * sizeof(decltype(x))>(x).count();
+    };
+    *visual_has_alpha = popcount(visual_info.red_mask) +
+                            popcount(visual_info.green_mask) +
+                            popcount(visual_info.blue_mask) <
+                        static_cast<std::size_t>(visual_info.depth);
+  }
   return true;
 }
 
diff --git a/ui/base/x/x11_util.h b/ui/base/x/x11_util.h
index 496d2fa..050ea9cd 100644
--- a/ui/base/x/x11_util.h
+++ b/ui/base/x/x11_util.h
@@ -357,6 +357,10 @@
   DISALLOW_COPY_AND_ASSIGN(XScopedCursor);
 };
 
+struct COMPONENT_EXPORT(UI_BASE_X) XImageDeleter {
+  void operator()(XImage* image) const;
+};
+
 namespace test {
 
 // Returns the cached XcursorImage for |cursor|.
diff --git a/ui/base/x/x11_util_internal.h b/ui/base/x/x11_util_internal.h
index 0b74133..cd97da64 100644
--- a/ui/base/x/x11_util_internal.h
+++ b/ui/base/x/x11_util_internal.h
@@ -61,13 +61,13 @@
                              Visual** visual,
                              int* depth,
                              Colormap* colormap,
-                             bool* visual_is_argb);
+                             bool* visual_has_alpha);
 
   bool GetVisualInfo(VisualID visual_id,
                      Visual** visual,
                      int* depth,
                      Colormap* colormap,
-                     bool* visual_is_argb);
+                     bool* visual_has_alpha);
 
   // Called by GpuDataManagerImplPrivate when GPUInfo becomes available.  It is
   // necessary for the GPU process to find out which visuals are best for GL
@@ -104,7 +104,7 @@
                          Visual** visual,
                          int* depth,
                          Colormap* colormap,
-                         bool* visual_is_argb);
+                         bool* visual_has_alpha);
 
   mutable base::Lock lock_;
 
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index fafc16f..f360326f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -90,6 +90,7 @@
 <translation id="197560921582345123">ማርትዕ ይችላሉ</translation>
 <translation id="1984603991036629094">የአርሜኒያ ፎነቲክ ቁልፍ ሰሌዳ</translation>
 <translation id="2001796770603320721">በDrive ውስጥ ያስተዳድሩ</translation>
+<translation id="2009067268969781306">አንጻፊን መቅረጽ በላዩ ላይ ያለን ሁሉንም ውሂብ ይሰርዛል። ይህ እርምጃ ሊቀለበስ አይችልም።</translation>
 <translation id="2028997212275086731">RAR ማህደር</translation>
 <translation id="2046702855113914483">ራመን</translation>
 <translation id="2070909990982335904">በነጥብ የሚጀምሩ ስሞች ለስርዓቱ የተቀመጡ ናቸው። እባክዎ ሌላ ስም ይምረጡ።</translation>
@@ -341,6 +342,7 @@
 <translation id="5038625366300922036">ተጨማሪ ይመልከቱ...</translation>
 <translation id="5061708541166515394">ንፅፅር</translation>
 <translation id="5068919226082848014">ፒዛ</translation>
+<translation id="5081517858322016911"><ph name="TOTAL_FILE_SIZE" /> ከፋይሎች ይሰረዛል</translation>
 <translation id="509429900233858213">ስህተት አጋጥሟል።</translation>
 <translation id="5098629044894065541">ዕብራስጥ</translation>
 <translation id="5123433949759960244">ቅርጫት ኳስ</translation>
@@ -412,6 +414,7 @@
 <translation id="5752453871435543420">የChrome OS የክላውድ ምትኬ</translation>
 <translation id="5756666464756035725">የሃንጋሪኛ QWERTY</translation>
 <translation id="5771585441665576801">በቋንቋ ፊደል መጻፍ (geia → γεια)</translation>
+<translation id="5776325638577448643">ደምስስ እና ቅረጽ</translation>
 <translation id="57838592816432529">ድምጽ ይዝጉ</translation>
 <translation id="5788127256798019331">የPlay ፋይሎች</translation>
 <translation id="5790193330357274855">ካዛክኛ</translation>
@@ -427,6 +430,7 @@
 <translation id="5857774240076772505">የLinux መተግበሪያዎች በ<ph name="FOLDER_NAME" /> አቃፊ ውስጥ ያሉ ፋይሎችን እንዲቀይሩ ይፍቀዱ</translation>
 <translation id="5892290200158927959">የፈረንሳይኛ BÉPO ቁልፍ ሰሌዳ</translation>
 <translation id="5911887972742538906">የእርስዎን የLinux መተግበሪያ በመጫን ወቅት ስህተት አጋጥሟል።</translation>
+<translation id="5912396950572065471">ቅርጸት</translation>
 <translation id="5913638992615760742">የመቅዳት ክወና አልተሳካም፣ ያልተጠበቀ ስህተት፦ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="5932901536148835538">Chromebit</translation>
 <translation id="5949281959820712067">የLinux መተግበሪያዎች በእርስዎ Google Drive ውስጥ ፋይሎችን የመቀየር ፈቃድ ይስጧቸው። ለውጦች ከሌሎች መሣሪያዎችዎ ጋር ይሳመራሉ።</translation>
@@ -451,6 +455,7 @@
 <translation id="6189412234224385711">በ<ph name="EXTENSION_NAME" /> ክፈት</translation>
 <translation id="6199801702437275229">የቦታ መረጃን በመጠበቅ ላይ...</translation>
 <translation id="6205710420833115353">አንዳንድ ክወናዎች ከሚጠበቀው በላይ ጊዜ እየወሰዱ ነው። ሊያቋርጧቸው ይፈልጋሉ?</translation>
+<translation id="6224253798271602650">ቅርጸት <ph name="DRIVE_NAME" /></translation>
 <translation id="6227235786875481728">ይህ ፋይል ሊጫወት አይችልም።</translation>
 <translation id="6248400709929739064">የግርጌ ጽሑፎችን አንቃ</translation>
 <translation id="6264347891387618177">በቋንቋ ፊደል መጻፍ (selam → ሰላም)</translation>
@@ -531,6 +536,7 @@
 <translation id="719009910964971313">የአሜሪካ Dvorak ፕሮግራመር ቁልፍ ሰሌዳ</translation>
 <translation id="7191454237977785534">ፋይል አስቀምጥ እንደ</translation>
 <translation id="7222624196722476520">የቡልጋሪያ ፎነቲክ ቁልፍ ሰሌዳ</translation>
+<translation id="7238097264433196391">የአንጻፊ ስም</translation>
 <translation id="7248671827512403053">መተግበሪያ</translation>
 <translation id="7268659760406822741">የሚገኙ አገልግሎቶች</translation>
 <translation id="7283041136720745563">የእርስዎ Google Drive ኮታ ያን ያህል በቂ አይደለም።</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index ee085d1..a5748db 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -90,6 +90,7 @@
 <translation id="197560921582345123">Se puede editar</translation>
 <translation id="1984603991036629094">Teclado fonético armenio</translation>
 <translation id="2001796770603320721">Administrar en Drive</translation>
+<translation id="2009067268969781306">Si formateas una unidad, se borrarán todos los datos almacenados. No se puede deshacer esta acción.</translation>
 <translation id="2028997212275086731">Archivo RAR</translation>
 <translation id="2046702855113914483">Ramen</translation>
 <translation id="2070909990982335904">Los nombres que comienzan con un punto se reservan para el sistema. Elige otro nombre.</translation>
@@ -341,6 +342,7 @@
 <translation id="5038625366300922036">Ver más…</translation>
 <translation id="5061708541166515394">Contraste</translation>
 <translation id="5068919226082848014">Pizza</translation>
+<translation id="5081517858322016911">Se eliminarán <ph name="TOTAL_FILE_SIZE" /> de archivos</translation>
 <translation id="509429900233858213">Se ha producido un error.</translation>
 <translation id="5098629044894065541">Hebreo</translation>
 <translation id="5123433949759960244">Básquet</translation>
@@ -412,6 +414,7 @@
 <translation id="5752453871435543420">Copia de seguridad en la nube del Sistema operativo Chrome</translation>
 <translation id="5756666464756035725">QWERTY húngaro</translation>
 <translation id="5771585441665576801">Transliteración (geia → γεια)</translation>
+<translation id="5776325638577448643">Borrar y formatear</translation>
 <translation id="57838592816432529">Silenciar</translation>
 <translation id="5788127256798019331">Archivos de Play</translation>
 <translation id="5790193330357274855">Kazajo</translation>
@@ -428,6 +431,7 @@
 <translation id="5857774240076772505">Permite que las apps de Linux puedan modificar los archivos de la carpeta <ph name="FOLDER_NAME" /></translation>
 <translation id="5892290200158927959">Teclado francés BÉPO</translation>
 <translation id="5911887972742538906">Se produjo un error durante la instalación de tu app de Linux.</translation>
+<translation id="5912396950572065471">Formato</translation>
 <translation id="5913638992615760742">Se produjo un error al realizar la operación de copia (error inesperado: <ph name="ERROR_MESSAGE" />)</translation>
 <translation id="5932901536148835538">Chromebit</translation>
 <translation id="5949281959820712067">Permite que las apps de Linux modifiquen archivos en tu cuenta de Google Drive. Los cambios se sincronizarán con tus otros dispositivos.</translation>
@@ -452,6 +456,7 @@
 <translation id="6189412234224385711">Abrir con <ph name="EXTENSION_NAME" /></translation>
 <translation id="6199801702437275229">Esperando información sobre espacio...</translation>
 <translation id="6205710420833115353">Algunas operaciones están tardando más de lo esperado. ¿Quieres cancelarlas?</translation>
+<translation id="6224253798271602650">Formatear <ph name="DRIVE_NAME" /></translation>
 <translation id="6227235786875481728">Este archivo no se puede reproducir.</translation>
 <translation id="6248400709929739064">Habilitar subtítulos</translation>
 <translation id="6264347891387618177">Transliteración (selam → ሰላም)</translation>
@@ -532,6 +537,7 @@
 <translation id="719009910964971313">Teclado Programmer Dvorak, EE. UU.</translation>
 <translation id="7191454237977785534">Guardar archivo como</translation>
 <translation id="7222624196722476520">Teclado búlgaro fonético</translation>
+<translation id="7238097264433196391">Nombre de la unidad</translation>
 <translation id="7248671827512403053">Aplicación</translation>
 <translation id="7268659760406822741">Servicios disponibles</translation>
 <translation id="7283041136720745563">Tu cuota de Google Drive no es lo suficientemente grande.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
index 4b4656bc..2d954c99 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -90,6 +90,7 @@
 <translation id="197560921582345123">Makakapag-edit</translation>
 <translation id="1984603991036629094">Armenian na Phonetic keyboard</translation>
 <translation id="2001796770603320721">Pamahalaan sa Drive</translation>
+<translation id="2009067268969781306">Kapag nag-format ng drive, made-delete ang lahat ng data na naka-store doon. Hindi puwedeng i-undo ang pagkilos na ito.</translation>
 <translation id="2028997212275086731">Archive na RAR</translation>
 <translation id="2046702855113914483">Ramen</translation>
 <translation id="2070909990982335904">Nakalaan para sa system ang mga pangalang nagsisimula sa tuldok. Mangyaring pumili ng isa pang pangalan.</translation>
@@ -341,6 +342,7 @@
 <translation id="5038625366300922036">Tingnan ang higit pa...</translation>
 <translation id="5061708541166515394">Contrast</translation>
 <translation id="5068919226082848014">Pizza</translation>
+<translation id="5081517858322016911">Ide-delete ang <ph name="TOTAL_FILE_SIZE" /> ng mga file</translation>
 <translation id="509429900233858213">May naganap na error.</translation>
 <translation id="5098629044894065541">Hebrew</translation>
 <translation id="5123433949759960244">Basketball</translation>
@@ -412,6 +414,7 @@
 <translation id="5752453871435543420">Backup sa Chrome OS Cloud</translation>
 <translation id="5756666464756035725">Hungarian na QWERTY</translation>
 <translation id="5771585441665576801">Transliteration (geia → γεια)</translation>
+<translation id="5776325638577448643">Burahin at I-format</translation>
 <translation id="57838592816432529">I-mute</translation>
 <translation id="5788127256798019331">Mga Play file</translation>
 <translation id="5790193330357274855">Kazakh</translation>
@@ -428,6 +431,7 @@
 <translation id="5857774240076772505">Bigyan ng pahintulot ang mga Linux app na baguhin ang mga file sa folder na <ph name="FOLDER_NAME" /></translation>
 <translation id="5892290200158927959">French na BÉPO keyboard</translation>
 <translation id="5911887972742538906">Nagkaroon ng error habang ini-install ang iyong Linux application.</translation>
+<translation id="5912396950572065471">Format</translation>
 <translation id="5913638992615760742">Hindi nakopya, nagkaroon ng hindi inaasahang error: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="5932901536148835538">Chromebit</translation>
 <translation id="5949281959820712067">Bigyan ang mga Linux app ng pahintulot na baguhin ang mga file sa iyong Google Drive. Masi-sync sa iba mo pang device ang mga pagbabago.</translation>
@@ -452,6 +456,7 @@
 <translation id="6189412234224385711">Buksan gamit ang <ph name="EXTENSION_NAME" /></translation>
 <translation id="6199801702437275229">Hinihintay ang impormasyon ng espasyo...</translation>
 <translation id="6205710420833115353">Mas matagal kaysa sa inaasahan ang ilang operasyon. Gusto mo bang i-abort ang mga ito?</translation>
+<translation id="6224253798271602650">I-format ang <ph name="DRIVE_NAME" /></translation>
 <translation id="6227235786875481728">Hindi ma-play ang file na ito.</translation>
 <translation id="6248400709929739064">I-enable ang mga subtitle</translation>
 <translation id="6264347891387618177">Transliteration (selam → ሰላም)</translation>
@@ -532,6 +537,7 @@
 <translation id="719009910964971313">Keyboard ng US Programmer Dvorak</translation>
 <translation id="7191454237977785534">I-save ang file bilang</translation>
 <translation id="7222624196722476520">Bulgarian Phonetic keyboard</translation>
+<translation id="7238097264433196391">Pangalan ng drive</translation>
 <translation id="7248671827512403053">Application</translation>
 <translation id="7268659760406822741">Mga available na serbisyo</translation>
 <translation id="7283041136720745563">Hindi sapat ang laki ng iyong quota sa Google Drive.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index d119ff4..18f0cbb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -86,7 +86,7 @@
 <translation id="197560921582345123">ಸಂಪಾದಿಸಬಹುದು</translation>
 <translation id="1984603991036629094">ಅರ್ಮೇನಿಯನ್ ಫೋನೆಟಿಕ್ ಕೀಬೋರ್ಡ್</translation>
 <translation id="2001796770603320721">ಡ್ರೈವ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಿ</translation>
-<translation id="2009067268969781306">ಡ್ರೈವ್ ಅನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದು, ಅದರಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಎಲ್ಲಾ ಡೆಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ. ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
+<translation id="2009067268969781306">ಡ್ರೈವ್ ಅನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದರಿಂದ, ಅದರಲ್ಲಿ ಸಂಗ್ರಣೆಯಾಗಿರುವ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ. ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="2028997212275086731">RAR ಆರ್ಕೈವ್</translation>
 <translation id="2046702855113914483">ರಾಮೆನ್</translation>
 <translation id="2070909990982335904">ಡಾಟ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುವ ಹೆಸರುಗಳನ್ನು ಸಿಸ್ಟಂಗಾಗಿ ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಇನ್ನೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation>
@@ -338,7 +338,7 @@
 <translation id="5038625366300922036">ಇನ್ನಷ್ಟು ನೋಡಿ...</translation>
 <translation id="5061708541166515394">ಕಾಂಟ್ರಾಸ್ಟ್‌‌</translation>
 <translation id="5068919226082848014">ಪಿಜ್ಜಾ</translation>
-<translation id="5081517858322016911">ಫೈಲ್‌ಗಳಲ್ಲಿ <ph name="TOTAL_FILE_SIZE" /> ಅನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ</translation>
+<translation id="5081517858322016911"><ph name="TOTAL_FILE_SIZE" /> ಗಾತ್ರದ ಫೈಲ್‍‍ಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ</translation>
 <translation id="509429900233858213">ದೋಷವೊಂದು ಕಾಣಿಸಿಕೊಂಡಿದೆ.</translation>
 <translation id="5098629044894065541">Hebrew</translation>
 <translation id="5123433949759960244">ಬ್ಯಾಸ್ಕೆಟ್‌ಬಾಲ್‌</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index ac03650..7eed3082 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -90,7 +90,7 @@
 <translation id="197560921582345123">수정 가능</translation>
 <translation id="1984603991036629094">Armenian Phonetic 키보드</translation>
 <translation id="2001796770603320721">드라이브에서 관리</translation>
-<translation id="2009067268969781306">드라이브를 포맷하면 드라이브에 저장된 데이터가 모두 삭제됩니다. 이 작업은 실행취소할 수 없습니다.</translation>
+<translation id="2009067268969781306">드라이브를 포맷하면 드라이브에 저장된 데이터가 모두 삭제됩니다. 이 작업은 취소할 수 없습니다.</translation>
 <translation id="2028997212275086731">RAR 압축 파일</translation>
 <translation id="2046702855113914483">라면</translation>
 <translation id="2070909990982335904">점(.)으로 시작하는 이름은 시스템 전용입니다. 다른 이름을 선택하세요.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
index dce989d..7966912 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -90,7 +90,7 @@
 <translation id="197560921582345123">Unaweza kubadilisha</translation>
 <translation id="1984603991036629094">Kibodi ya Kifonetiki ya Kiarmenia</translation>
 <translation id="2001796770603320721">Dhibiti katika Hifadhi ya Google</translation>
-<translation id="2009067268969781306">Hatua ya kuumbiza hifadhi itafuta data yote iliyomo. Kitendo hiki hakiwezi kutenduliwa.</translation>
+<translation id="2009067268969781306">Hatua ya kubadilisha muundo wa hifadhi itafuta data yote iliyomo. Kitendo hiki hakiwezi kutenduliwa.</translation>
 <translation id="2028997212275086731">Kumbukumbu la RAR</translation>
 <translation id="2046702855113914483">Rameni</translation>
 <translation id="2070909990982335904">Majina yanayoanza kwa nukta yametengwa mahususi kwa mfumo. Tafadahili chagua jina jingine.</translation>
@@ -414,7 +414,7 @@
 <translation id="5752453871435543420">Hifadhi rudufu ya Wingu la Chrome OS</translation>
 <translation id="5756666464756035725">QWERTY ya Kihungaria</translation>
 <translation id="5771585441665576801">Unukuzi wa mfumo wa kuandika (geia → γεια)</translation>
-<translation id="5776325638577448643">Futa na Uumbize</translation>
+<translation id="5776325638577448643">Futa na ubadilishe muundo</translation>
 <translation id="57838592816432529">Zima sauti</translation>
 <translation id="5788127256798019331">Faili za Google Play</translation>
 <translation id="5790193330357274855">Kikazakhi</translation>
@@ -456,7 +456,7 @@
 <translation id="6189412234224385711">Fungua ukitumia <ph name="EXTENSION_NAME" /></translation>
 <translation id="6199801702437275229">Inasubiri maelezo ya nafasi...</translation>
 <translation id="6205710420833115353">Vitendo vingine vinachukua muda zaidi ya ilivyotarajiwa. Unataka kuvighairi?</translation>
-<translation id="6224253798271602650">Umbiza <ph name="DRIVE_NAME" /></translation>
+<translation id="6224253798271602650">Badilisha muundo <ph name="DRIVE_NAME" /></translation>
 <translation id="6227235786875481728">Faili hii isingeweza kuchezwa.</translation>
 <translation id="6248400709929739064">Washa manukuu</translation>
 <translation id="6264347891387618177">Unukuzi wa mfumo wa kuandika (selam → ሰላም)</translation>
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc
index 2498868..3749059 100644
--- a/ui/events/blink/blink_event_util.cc
+++ b/ui/events/blink/blink_event_util.cc
@@ -317,9 +317,17 @@
   }
 
   if (event.has_synthetic_phase) {
-    // It is alright to coalesce a wheel event with synthetic phaseChanged to
-    // its previous one with synthetic phaseBegan.
-    return (event.phase == WebMouseWheelEvent::kPhaseBegan &&
+    // Synthetic phase information is added based on a timer in
+    // MouseWheelPhaseHandler. This information is for simulating scroll
+    // sequences when the beginning and end of scrolls are not available. It is
+    // alright to coalesce an event with synthetic phaseBegan to its previous
+    // event with synthetic phaseEnded since these phase values don't correspond
+    // with real start and end of the scroll sequences.
+    // It is also alright to coalesce a wheel event with synthetic phaseChanged
+    // to its previous one with synthetic phaseBegan.
+    return (event.phase == WebMouseWheelEvent::kPhaseEnded &&
+            event_to_coalesce.phase == WebMouseWheelEvent::kPhaseBegan) ||
+           (event.phase == WebMouseWheelEvent::kPhaseBegan &&
             event_to_coalesce.phase == WebMouseWheelEvent::kPhaseChanged);
   }
   return false;
@@ -369,11 +377,18 @@
       MergeDispatchTypes(old_dispatch_type, event_to_coalesce.dispatch_type);
   if (event_to_coalesce.has_synthetic_phase &&
       event_to_coalesce.phase != old_phase) {
-    // Coalesce  a wheel event with synthetic phase changed to a wheel event
-    // with synthetic phase began.
-    DCHECK_EQ(WebMouseWheelEvent::kPhaseChanged, event_to_coalesce.phase);
-    DCHECK_EQ(WebMouseWheelEvent::kPhaseBegan, old_phase);
-    event->phase = WebMouseWheelEvent::kPhaseBegan;
+    if (event_to_coalesce.phase == WebMouseWheelEvent::kPhaseBegan) {
+      // Coalesce a wheel event with synthetic phase began with a wheel event
+      // with synthetic phase ended.
+      DCHECK_EQ(WebMouseWheelEvent::kPhaseEnded, old_phase);
+      event->phase = WebMouseWheelEvent::kPhaseChanged;
+    } else {
+      // Coalesce  a wheel event with synthetic phase changed to a wheel event
+      // with synthetic phase began.
+      DCHECK_EQ(WebMouseWheelEvent::kPhaseChanged, event_to_coalesce.phase);
+      DCHECK_EQ(WebMouseWheelEvent::kPhaseBegan, old_phase);
+      event->phase = WebMouseWheelEvent::kPhaseBegan;
+    }
   }
 }
 
diff --git a/ui/events/blink/blink_event_util_unittest.cc b/ui/events/blink/blink_event_util_unittest.cc
index dbaa3698..04b8b52 100644
--- a/ui/events/blink/blink_event_util_unittest.cc
+++ b/ui/events/blink/blink_event_util_unittest.cc
@@ -252,24 +252,21 @@
   coalesced_event.phase = blink::WebMouseWheelEvent::kPhaseEnded;
   EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
 
-  // With timer based wheel scroll latching, we break the latching sequence on
-  // direction change when all prior GSU events in the current sequence are
-  // ignored. To do so we dispatch the pending wheel event with phaseEnded and
-  // the first wheel event in the opposite direction will have phaseBegan. The
-  // GSB generated from this wheel event will cause a new hittesting. To make
-  // sure that a GSB will actually get created we should not coalesce the wheel
-  // event with synthetic kPhaseBegan to one with synthetic kPhaseEnded.
   event_to_be_coalesced.has_synthetic_phase = true;
   coalesced_event.has_synthetic_phase = true;
-  EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
+  EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
+  Coalesce(event_to_be_coalesced, &coalesced_event);
+  EXPECT_EQ(blink::WebMouseWheelEvent::kPhaseChanged, coalesced_event.phase);
+  EXPECT_EQ(7, coalesced_event.delta_x);
+  EXPECT_EQ(9, coalesced_event.delta_y);
 
   event_to_be_coalesced.phase = blink::WebMouseWheelEvent::kPhaseChanged;
   coalesced_event.phase = blink::WebMouseWheelEvent::kPhaseBegan;
   EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
   Coalesce(event_to_be_coalesced, &coalesced_event);
   EXPECT_EQ(blink::WebMouseWheelEvent::kPhaseBegan, coalesced_event.phase);
-  EXPECT_EQ(7, coalesced_event.delta_x);
-  EXPECT_EQ(9, coalesced_event.delta_y);
+  EXPECT_EQ(10, coalesced_event.delta_x);
+  EXPECT_EQ(13, coalesced_event.delta_y);
 
   event_to_be_coalesced.resending_plugin_id = 3;
   EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
diff --git a/ui/gfx/x/x11_atom_cache.cc b/ui/gfx/x/x11_atom_cache.cc
index 9cd921e..f6190968 100644
--- a/ui/gfx/x/x11_atom_cache.cc
+++ b/ui/gfx/x/x11_atom_cache.cc
@@ -113,6 +113,7 @@
     "CHECK",
     "CHOME_SELECTION",
     "CHROME_SELECTION",
+    "CHROMIUM_COMPOSITE_WINDOW",
     "CHROMIUM_TIMESTAMP",
     "CLIPBOARD",
     "CLIPBOARD_MANAGER",
diff --git a/ui/gl/ca_renderer_layer_params.cc b/ui/gl/ca_renderer_layer_params.cc
index 8a4d745..73d1bde6 100644
--- a/ui/gl/ca_renderer_layer_params.cc
+++ b/ui/gl/ca_renderer_layer_params.cc
@@ -8,6 +8,7 @@
 
 CARendererLayerParams::CARendererLayerParams(bool is_clipped,
                                              const gfx::Rect clip_rect,
+                                             float clip_rect_corner_radius,
                                              unsigned sorting_context_id,
                                              const gfx::Transform& transform,
                                              gl::GLImage* image,
@@ -19,6 +20,7 @@
                                              unsigned filter)
     : is_clipped(is_clipped),
       clip_rect(clip_rect),
+      clip_rect_corner_radius(clip_rect_corner_radius),
       sorting_context_id(sorting_context_id),
       transform(transform),
       image(image),
diff --git a/ui/gl/ca_renderer_layer_params.h b/ui/gl/ca_renderer_layer_params.h
index ab046a2..83dd4b8b 100644
--- a/ui/gl/ca_renderer_layer_params.h
+++ b/ui/gl/ca_renderer_layer_params.h
@@ -23,6 +23,7 @@
 struct GL_EXPORT CARendererLayerParams {
   CARendererLayerParams(bool is_clipped,
                         const gfx::Rect clip_rect,
+                        float clip_rect_corner_radius,
                         unsigned sorting_context_id,
                         const gfx::Transform& transform,
                         gl::GLImage* image,
@@ -37,6 +38,7 @@
 
   bool is_clipped;
   const gfx::Rect clip_rect;
+  float clip_rect_corner_radius;
   unsigned sorting_context_id;
   const gfx::Transform transform;
   gl::GLImage* image;
diff --git a/ui/message_center/views/notification_view_md.cc b/ui/message_center/views/notification_view_md.cc
index 7a32271..21d2931 100644
--- a/ui/message_center/views/notification_view_md.cc
+++ b/ui/message_center/views/notification_view_md.cc
@@ -638,6 +638,7 @@
   }
 
   // The animation is needed to run inside of the border.
+  ink_drop_container_->SetBoundsRect(GetLocalBounds());
   if (ink_drop_layer_)
     ink_drop_layer_->SetBounds(GetContentsBounds());
   if (ink_drop_mask_)
diff --git a/ui/ozone/platform/drm/host/drm_window_host.cc b/ui/ozone/platform/drm/host/drm_window_host.cc
index 2190f242..fd52ea4 100644
--- a/ui/ozone/platform/drm/host/drm_window_host.cc
+++ b/ui/ozone/platform/drm/host/drm_window_host.cc
@@ -115,7 +115,7 @@
 }
 
 PlatformWindowState DrmWindowHost::GetPlatformWindowState() const {
-  return PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
+  return PlatformWindowState::kUnknown;
 }
 
 void DrmWindowHost::SetCursor(PlatformCursor cursor) {
diff --git a/ui/ozone/platform/scenic/scenic_window.cc b/ui/ozone/platform/scenic/scenic_window.cc
index 9f3e5d1..c9884857 100644
--- a/ui/ozone/platform/scenic/scenic_window.cc
+++ b/ui/ozone/platform/scenic/scenic_window.cc
@@ -135,7 +135,7 @@
 }
 
 PlatformWindowState ScenicWindow::GetPlatformWindowState() const {
-  return PLATFORM_WINDOW_STATE_NORMAL;
+  return PlatformWindowState::kNormal;
 }
 
 void ScenicWindow::SetCursor(PlatformCursor cursor) {
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc
index 193bd2a..bc0598a1 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -88,8 +88,8 @@
     : delegate_(delegate),
       connection_(connection),
       xdg_shell_objects_factory_(new XDGShellObjectFactory()),
-      state_(PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL),
-      pending_state_(PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN) {
+      state_(PlatformWindowState::kNormal),
+      pending_state_(PlatformWindowState::kUnknown) {
   // Set a class property key, which allows |this| to be used for interactive
   // events, e.g. move or resize.
   SetWmMoveResizeHandler(this, AsWmMoveResizeHandler());
@@ -417,7 +417,7 @@
   // trigger the change.
   if (!is_active_) {
     DCHECK(!IsFullscreen());
-    pending_state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+    pending_state_ = PlatformWindowState::kFullScreen;
     return;
   }
 
@@ -431,12 +431,12 @@
     // state changes asynchronously, which leads to a wrong return value in
     // DesktopWindowTreeHostPlatform::IsFullscreen, for example, and media
     // files can never be set to fullscreen.
-    state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+    state_ = PlatformWindowState::kFullScreen;
     xdg_surface_->SetFullscreen();
   } else {
     // Check the comment above. If it's not handled synchronously, media files
     // may not leave the fullscreen mode.
-    state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
+    state_ = PlatformWindowState::kUnknown;
     xdg_surface_->UnSetFullscreen();
   }
 
@@ -593,16 +593,16 @@
   // minimized before and !is_activated is sent.
   if ((is_minimizing_ || IsMinimized()) && !is_activated) {
     is_minimizing_ = false;
-    state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+    state_ = PlatformWindowState::kMinimized;
   } else if (is_fullscreen) {
     // To ensure the |delegate_| is notified about state changes to fullscreen,
     // assume the old_state is UNKNOWN (check comment in ToggleFullscreen).
-    old_state = PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
-    DCHECK(state_ == PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN);
+    old_state = PlatformWindowState::kUnknown;
+    DCHECK(state_ == PlatformWindowState::kFullScreen);
   } else if (is_maximized) {
-    state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+    state_ = PlatformWindowState::kMaximized;
   } else {
-    state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL;
+    state_ = PlatformWindowState::kNormal;
   }
   const bool state_changed = old_state != state_;
   const bool is_normal = !IsFullscreen() && !IsMaximized();
@@ -643,7 +643,7 @@
     // have any meaningful value stored.
     if (is_normal) {
       SetRestoredBoundsInPixels({});
-    } else if (old_state == PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL ||
+    } else if (old_state == PlatformWindowState::kNormal ||
                restored_bounds_px_.IsEmpty()) {
       SetRestoredBoundsInPixels(bounds_px_);
     }
@@ -773,24 +773,22 @@
 }
 
 bool WaylandWindow::IsMinimized() const {
-  return state_ == PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+  return state_ == PlatformWindowState::kMinimized;
 }
 
 bool WaylandWindow::IsMaximized() const {
-  return state_ == PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+  return state_ == PlatformWindowState::kMaximized;
 }
 
 bool WaylandWindow::IsFullscreen() const {
-  return state_ == PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+  return state_ == PlatformWindowState::kFullScreen;
 }
 
 void WaylandWindow::MaybeTriggerPendingStateChange() {
-  if (pending_state_ == PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN ||
-      !is_active_)
+  if (pending_state_ == PlatformWindowState::kUnknown || !is_active_)
     return;
-  DCHECK_EQ(pending_state_,
-            PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN);
-  pending_state_ = PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
+  DCHECK_EQ(pending_state_, PlatformWindowState::kFullScreen);
+  pending_state_ = PlatformWindowState::kUnknown;
   ToggleFullscreen();
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h
index f54115e..9fec3b4 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.h
+++ b/ui/ozone/platform/wayland/host/wayland_window.h
@@ -254,10 +254,10 @@
   int32_t buffer_scale_ = 1;
 
   // Stores current states of the window.
-  ui::PlatformWindowState state_;
+  PlatformWindowState state_;
   // Stores a pending state of the window, which is used before the surface is
   // activated.
-  ui::PlatformWindowState pending_state_;
+  PlatformWindowState pending_state_;
 
   // Stores current opacity of the window. Set on ::Initialize call.
   ui::PlatformWindowOpacity opacity_;
diff --git a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
index 8083f7a..699d3ce 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
@@ -234,7 +234,7 @@
   // Make sure the window has normal state initially.
   EXPECT_CALL(delegate_, OnBoundsChanged(kNormalBounds));
   window_->SetBounds(kNormalBounds);
-  EXPECT_EQ(PLATFORM_WINDOW_STATE_NORMAL, window_->GetPlatformWindowState());
+  EXPECT_EQ(PlatformWindowState::kNormal, window_->GetPlatformWindowState());
   VerifyAndClearExpectations();
 
   auto active_maximized = MakeStateArray(
@@ -245,7 +245,7 @@
   EXPECT_CALL(delegate_, OnActivationChanged(Eq(true)));
   EXPECT_CALL(delegate_, OnBoundsChanged(kMaximizedBounds));
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_MAXIMIZED)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kMaximized)));
   window_->Maximize();
   SendConfigureEvent(kMaximizedBounds.width(), kMaximizedBounds.height(), 1,
                      active_maximized.get());
@@ -276,7 +276,7 @@
   EXPECT_CALL(*xdg_surface_, SetWindowGeometry(0, 0, kNormalBounds.width(),
                                                kNormalBounds.height()));
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_NORMAL)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kNormal)));
   EXPECT_CALL(delegate_, OnActivationChanged(_)).Times(0);
   EXPECT_CALL(delegate_, OnBoundsChanged(kNormalBounds));
   EXPECT_CALL(*GetXdgSurface(), UnsetMaximized());
@@ -291,7 +291,7 @@
   ScopedWlArray states;
 
   // Make sure the window is initialized to normal state from the beginning.
-  EXPECT_EQ(PLATFORM_WINDOW_STATE_NORMAL, window_->GetPlatformWindowState());
+  EXPECT_EQ(PlatformWindowState::kNormal, window_->GetPlatformWindowState());
   SendConfigureEvent(0, 0, 1, states.get());
   Sync();
 
@@ -302,7 +302,7 @@
   // comes, its state is changed to minimized. This EXPECT_CALL ensures this
   // behaviour.
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_MINIMIZED)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kMinimized)));
   window_->Minimize();
   // Reinitialize wl_array, which removes previous old states.
   states = ScopedWlArray();
@@ -323,7 +323,7 @@
 
 TEST_P(WaylandWindowTest, SetFullscreenAndRestore) {
   // Make sure the window is initialized to normal state from the beginning.
-  EXPECT_EQ(PLATFORM_WINDOW_STATE_NORMAL, window_->GetPlatformWindowState());
+  EXPECT_EQ(PlatformWindowState::kNormal, window_->GetPlatformWindowState());
 
   ScopedWlArray states = InitializeWlArrayWithActivatedState();
   SendConfigureEvent(0, 0, 1, states.get());
@@ -333,20 +333,20 @@
 
   EXPECT_CALL(*GetXdgSurface(), SetFullscreen());
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_FULLSCREEN)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kFullScreen)));
   window_->ToggleFullscreen();
   // Make sure than WaylandWindow manually handles fullscreen states. Check the
   // comment in the WaylandWindow::ToggleFullscreen.
   EXPECT_EQ(window_->GetPlatformWindowState(),
-            PLATFORM_WINDOW_STATE_FULLSCREEN);
+            PlatformWindowState::kFullScreen);
   SendConfigureEvent(0, 0, 2, states.get());
   Sync();
 
   EXPECT_CALL(*GetXdgSurface(), UnsetFullscreen());
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_NORMAL)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kNormal)));
   window_->Restore();
-  EXPECT_EQ(window_->GetPlatformWindowState(), PLATFORM_WINDOW_STATE_UNKNOWN);
+  EXPECT_EQ(window_->GetPlatformWindowState(), PlatformWindowState::kUnknown);
   // Reinitialize wl_array, which removes previous old states.
   states = InitializeWlArrayWithActivatedState();
   SendConfigureEvent(0, 0, 3, states.get());
@@ -355,7 +355,7 @@
 
 TEST_P(WaylandWindowTest, StartWithFullscreen) {
   // Make sure the window is initialized to normal state from the beginning.
-  EXPECT_EQ(PLATFORM_WINDOW_STATE_NORMAL, window_->GetPlatformWindowState());
+  EXPECT_EQ(PlatformWindowState::kNormal, window_->GetPlatformWindowState());
 
   // The state must not be changed to the fullscreen before the surface is
   // activated.
@@ -363,7 +363,7 @@
   EXPECT_CALL(delegate_, OnWindowStateChanged(_)).Times(0);
   window_->ToggleFullscreen();
   // The state of the window must still be a normal one.
-  EXPECT_EQ(window_->GetPlatformWindowState(), PLATFORM_WINDOW_STATE_NORMAL);
+  EXPECT_EQ(window_->GetPlatformWindowState(), PlatformWindowState::kNormal);
 
   Sync();
 
@@ -371,7 +371,7 @@
   // the state change.
   EXPECT_CALL(*GetXdgSurface(), SetFullscreen());
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_FULLSCREEN)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kFullScreen)));
 
   // Activate the surface.
   ScopedWlArray states = InitializeWlArrayWithActivatedState();
@@ -383,7 +383,7 @@
   // must change to a fullscreen before the state change is confirmed by the
   // wayland. See comment in the WaylandWindow::ToggleFullscreen.
   EXPECT_EQ(window_->GetPlatformWindowState(),
-            PLATFORM_WINDOW_STATE_FULLSCREEN);
+            PlatformWindowState::kFullScreen);
 
   AddStateToWlArray(XDG_SURFACE_STATE_FULLSCREEN, states.get());
   SendConfigureEvent(0, 0, 2, states.get());
@@ -398,7 +398,7 @@
   // Make sure the window has normal state initially.
   EXPECT_CALL(delegate_, OnBoundsChanged(kNormalBounds));
   window_->SetBounds(kNormalBounds);
-  EXPECT_EQ(PLATFORM_WINDOW_STATE_NORMAL, window_->GetPlatformWindowState());
+  EXPECT_EQ(PlatformWindowState::kNormal, window_->GetPlatformWindowState());
   VerifyAndClearExpectations();
 
   auto active_maximized = MakeStateArray(
@@ -409,7 +409,7 @@
   EXPECT_CALL(delegate_, OnActivationChanged(Eq(true)));
   EXPECT_CALL(delegate_, OnBoundsChanged(kMaximizedBounds));
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_MAXIMIZED)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kMaximized)));
   window_->Maximize();
   SendConfigureEvent(kMaximizedBounds.width(), kMaximizedBounds.height(), 2,
                      active_maximized.get());
@@ -421,7 +421,7 @@
                                                kMaximizedBounds.height()));
   EXPECT_CALL(delegate_, OnBoundsChanged(_)).Times(0);
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_FULLSCREEN)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kFullScreen)));
   window_->ToggleFullscreen();
   AddStateToWlArray(XDG_SURFACE_STATE_FULLSCREEN, active_maximized.get());
   SendConfigureEvent(kMaximizedBounds.width(), kMaximizedBounds.height(), 3,
@@ -435,7 +435,7 @@
   EXPECT_CALL(*GetXdgSurface(), UnsetMaximized());
   EXPECT_CALL(delegate_, OnBoundsChanged(kNormalBounds));
   EXPECT_CALL(delegate_,
-              OnWindowStateChanged(Eq(PLATFORM_WINDOW_STATE_NORMAL)));
+              OnWindowStateChanged(Eq(PlatformWindowState::kNormal)));
   window_->Restore();
   // Reinitialize wl_array, which removes previous old states.
   auto active = InitializeWlArrayWithActivatedState();
diff --git a/ui/ozone/platform/wayland/wayland_buffer_fuzzer.cc b/ui/ozone/platform/wayland/wayland_buffer_fuzzer.cc
index c6176586..310d46e 100644
--- a/ui/ozone/platform/wayland/wayland_buffer_fuzzer.cc
+++ b/ui/ozone/platform/wayland/wayland_buffer_fuzzer.cc
@@ -39,7 +39,7 @@
   MOCK_METHOD1(DispatchEvent, void(ui::Event* event));
   MOCK_METHOD0(OnCloseRequest, void());
   MOCK_METHOD0(OnClosed, void());
-  MOCK_METHOD1(OnWindowStateChanged, void(ui::PlatformWindowState new_state));
+  MOCK_METHOD1(OnWindowStateChanged, void(PlatformWindowState new_state));
   MOCK_METHOD0(OnLostCapture, void());
   MOCK_METHOD1(OnAcceleratedWidgetAvailable,
                void(gfx::AcceleratedWidget widget));
diff --git a/ui/ozone/platform/x11/x11_window_ozone.cc b/ui/ozone/platform/x11/x11_window_ozone.cc
index b02c487a9..f911b88 100644
--- a/ui/ozone/platform/x11/x11_window_ozone.cc
+++ b/ui/ozone/platform/x11/x11_window_ozone.cc
@@ -44,7 +44,7 @@
       xwindow_(x11::None),
       mapped_(false),
       bounds_(bounds),
-      state_(ui::PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN) {
+      state_(PlatformWindowState::kUnknown) {
   DCHECK(delegate_);
   DCHECK(window_manager_);
 
@@ -492,22 +492,22 @@
   // Propagate the window state information to the client.
   // Note that the order of checks is important here, because window can have
   // several proprties at the same time.
-  ui::PlatformWindowState old_state = state_;
+  PlatformWindowState old_state = state_;
   if (ui::HasWMSpecProperty(window_properties_,
                             gfx::GetAtom("_NET_WM_STATE_HIDDEN"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+    state_ = PlatformWindowState::kMinimized;
   } else if (ui::HasWMSpecProperty(window_properties_,
                                    gfx::GetAtom("_NET_WM_STATE_FULLSCREEN"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+    state_ = PlatformWindowState::kFullScreen;
   } else if (ui::HasWMSpecProperty(
                  window_properties_,
                  gfx::GetAtom("_NET_WM_STATE_MAXIMIZED_VERT")) &&
              ui::HasWMSpecProperty(
                  window_properties_,
                  gfx::GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+    state_ = PlatformWindowState::kMaximized;
   } else {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL;
+    state_ = PlatformWindowState::kNormal;
   }
 
   if (old_state != state_)
@@ -515,11 +515,11 @@
 }
 
 bool X11WindowOzone::IsMaximized() const {
-  return state_ == ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+  return state_ == PlatformWindowState::kMaximized;
 }
 
 bool X11WindowOzone::IsFullscreen() const {
-  return state_ == ui::PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+  return state_ == PlatformWindowState::kFullScreen;
 }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/x11/x11_window_ozone.h b/ui/ozone/platform/x11/x11_window_ozone.h
index 6188274c..03f391b 100644
--- a/ui/ozone/platform/x11/x11_window_ozone.h
+++ b/ui/ozone/platform/x11/x11_window_ozone.h
@@ -86,7 +86,7 @@
   bool mapped_;
   gfx::Rect bounds_;
   base::string16 window_title_;
-  ui::PlatformWindowState state_;
+  PlatformWindowState state_;
   base::flat_set<XAtom> window_properties_;
 
   // Tells if this dispatcher can process next translated event based on a
diff --git a/ui/platform_window/platform_window_delegate.h b/ui/platform_window/platform_window_delegate.h
index bf8b46b..0b6bdb8 100644
--- a/ui/platform_window/platform_window_delegate.h
+++ b/ui/platform_window/platform_window_delegate.h
@@ -15,12 +15,12 @@
 
 class Event;
 
-enum PlatformWindowState {
-  PLATFORM_WINDOW_STATE_UNKNOWN,
-  PLATFORM_WINDOW_STATE_MAXIMIZED,
-  PLATFORM_WINDOW_STATE_MINIMIZED,
-  PLATFORM_WINDOW_STATE_NORMAL,
-  PLATFORM_WINDOW_STATE_FULLSCREEN,
+enum class PlatformWindowState {
+  kUnknown,
+  kMaximized,
+  kMinimized,
+  kNormal,
+  kFullScreen,
 };
 
 class PlatformWindowDelegate {
diff --git a/ui/platform_window/stub/stub_window.cc b/ui/platform_window/stub/stub_window.cc
index b8cb5e8..80ca7e1 100644
--- a/ui/platform_window/stub/stub_window.cc
+++ b/ui/platform_window/stub/stub_window.cc
@@ -61,7 +61,7 @@
 void StubWindow::Restore() {}
 
 PlatformWindowState StubWindow::GetPlatformWindowState() const {
-  return PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
+  return PlatformWindowState::kUnknown;
 }
 
 void StubWindow::SetCursor(PlatformCursor cursor) {}
diff --git a/ui/platform_window/win/win_window.cc b/ui/platform_window/win/win_window.cc
index 3ba824297..f0e4f209 100644
--- a/ui/platform_window/win/win_window.cc
+++ b/ui/platform_window/win/win_window.cc
@@ -122,7 +122,7 @@
 void WinWindow::Restore() {}
 
 PlatformWindowState WinWindow::GetPlatformWindowState() const {
-  return PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN;
+  return PlatformWindowState::kUnknown;
 }
 
 void WinWindow::SetCursor(PlatformCursor cursor) {
diff --git a/ui/platform_window/x11/x11_window_base.cc b/ui/platform_window/x11/x11_window_base.cc
index 0d477a7..14deb96 100644
--- a/ui/platform_window/x11/x11_window_base.cc
+++ b/ui/platform_window/x11/x11_window_base.cc
@@ -38,7 +38,7 @@
       xdisplay_(gfx::GetXDisplay()),
       xroot_window_(DefaultRootWindow(xdisplay_)),
       bounds_(bounds),
-      state_(ui::PlatformWindowState::PLATFORM_WINDOW_STATE_UNKNOWN) {
+      state_(PlatformWindowState::kUnknown) {
   DCHECK(delegate_);
   Create();
   pointer_barriers_.fill(x11::None);
@@ -395,22 +395,22 @@
   // Propagate the window state information to the client.
   // Note that the order of checks is important here, because window can have
   // several proprties at the same time.
-  ui::PlatformWindowState old_state = state_;
+  PlatformWindowState old_state = state_;
   if (ui::HasWMSpecProperty(window_properties_,
                             gfx::GetAtom("_NET_WM_STATE_HIDDEN"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+    state_ = PlatformWindowState::kMinimized;
   } else if (ui::HasWMSpecProperty(window_properties_,
                                    gfx::GetAtom("_NET_WM_STATE_FULLSCREEN"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+    state_ = PlatformWindowState::kFullScreen;
   } else if (ui::HasWMSpecProperty(
                  window_properties_,
                  gfx::GetAtom("_NET_WM_STATE_MAXIMIZED_VERT")) &&
              ui::HasWMSpecProperty(
                  window_properties_,
                  gfx::GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ"))) {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+    state_ = PlatformWindowState::kMaximized;
   } else {
-    state_ = ui::PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL;
+    state_ = PlatformWindowState::kNormal;
   }
 
   if (old_state != state_)
@@ -418,11 +418,11 @@
 }
 
 bool X11WindowBase::IsMaximized() const {
-  return state_ == ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+  return state_ == PlatformWindowState::kMaximized;
 }
 
 bool X11WindowBase::IsFullscreen() const {
-  return state_ == ui::PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+  return state_ == PlatformWindowState::kFullScreen;
 }
 
 }  // namespace ui
diff --git a/ui/platform_window/x11/x11_window_base.h b/ui/platform_window/x11/x11_window_base.h
index cd312eb4..2292f6a 100644
--- a/ui/platform_window/x11/x11_window_base.h
+++ b/ui/platform_window/x11/x11_window_base.h
@@ -91,7 +91,7 @@
   base::flat_set<::Atom> window_properties_;
 
   // Stores current state of this window.
-  ui::PlatformWindowState state_;
+  PlatformWindowState state_;
 
   // Keep track of barriers to confine cursor.
   bool has_pointer_barriers_ = false;
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb
index 32235fb..3cce960 100644
--- a/ui/strings/translations/ui_strings_de.xtb
+++ b/ui/strings/translations/ui_strings_de.xtb
@@ -57,7 +57,7 @@
 <translation id="2583543531130364912">Touchscreen kalibrieren</translation>
 <translation id="2666092431469916601">Oben</translation>
 <translation id="2701330563083355633">Geteilt von <ph name="DEVICE_NAME" /></translation>
-<translation id="2743387203779672305">In Zwischenablage kopieren</translation>
+<translation id="2743387203779672305">In die Zwischenablage kopieren</translation>
 <translation id="2803313416453193357">Ordner öffnen</translation>
 <translation id="2824719307700604149">{YEARS,plural, =1{vor 1 Jahr}other{vor # Jahren}}</translation>
 <translation id="2907671656515444832">{DAYS,plural, =1{in 1 T.}other{in # T.}}</translation>
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn
index 864dac20..b801528 100644
--- a/ui/views/BUILD.gn
+++ b/ui/views/BUILD.gn
@@ -84,6 +84,8 @@
     "animation/ink_drop_stub.h",
     "animation/ink_drop_util.h",
     "animation/installable_ink_drop.h",
+    "animation/installable_ink_drop_animator.h",
+    "animation/installable_ink_drop_painter.h",
     "animation/scroll_animator.h",
     "animation/square_ink_drop_ripple.h",
     "background.h",
@@ -304,6 +306,8 @@
     "animation/ink_drop_stub.cc",
     "animation/ink_drop_util.cc",
     "animation/installable_ink_drop.cc",
+    "animation/installable_ink_drop_animator.cc",
+    "animation/installable_ink_drop_painter.cc",
     "animation/scroll_animator.cc",
     "animation/square_ink_drop_ripple.cc",
     "background.cc",
@@ -980,6 +984,7 @@
     "animation/ink_drop_impl_unittest.cc",
     "animation/ink_drop_ripple_unittest.cc",
     "animation/ink_drop_unittest.cc",
+    "animation/installable_ink_drop_animator_unittest.cc",
     "animation/installable_ink_drop_unittest.cc",
     "animation/square_ink_drop_ripple_unittest.cc",
     "border_unittest.cc",
diff --git a/ui/views/animation/installable_ink_drop.cc b/ui/views/animation/installable_ink_drop.cc
index 512b323e..d7d0caa 100644
--- a/ui/views/animation/installable_ink_drop.cc
+++ b/ui/views/animation/installable_ink_drop.cc
@@ -22,11 +22,6 @@
 #include "ui/views/view.h"
 #include "ui/views/view_class_properties.h"
 
-namespace {
-constexpr SkColor kInstallableInkDropPlaceholderColor =
-    SkColorSetA(SK_ColorBLACK, 0.08 * SK_AlphaOPAQUE);
-}  // namespace
-
 namespace views {
 
 const base::Feature kInstallableInkDropFeature{
@@ -34,8 +29,11 @@
 
 InstallableInkDrop::InstallableInkDrop(View* view)
     : view_(view),
+      layer_(std::make_unique<ui::Layer>()),
       event_handler_(view_, this),
-      layer_(std::make_unique<ui::Layer>()) {
+      animator_(&painter_,
+                base::Bind(&InstallableInkDrop::SchedulePaint,
+                           base::Unretained(this))) {
   // Catch if |view_| is destroyed out from under us.
   if (DCHECK_IS_ON())
     view_->AddObserver(this);
@@ -64,11 +62,11 @@
 }
 
 InkDropState InstallableInkDrop::GetTargetInkDropState() const {
-  return current_state_;
+  return animator_.target_state();
 }
 
 void InstallableInkDrop::AnimateToState(InkDropState ink_drop_state) {
-  current_state_ = ink_drop_state;
+  animator_.AnimateToState(ink_drop_state);
 }
 
 void InstallableInkDrop::SetHoverHighlightFadeDurationMs(int duration_ms) {
@@ -79,16 +77,28 @@
   NOTREACHED();
 }
 
-void InstallableInkDrop::SnapToActivated() {}
+void InstallableInkDrop::SnapToActivated() {
+  // TODO(crbug.com/933384): do this without animation.
+  animator_.AnimateToState(InkDropState::ACTIVATED);
+}
 
-void InstallableInkDrop::SnapToHidden() {}
+void InstallableInkDrop::SnapToHidden() {
+  // TODO(crbug.com/933384): do this without animation.
+  animator_.AnimateToState(InkDropState::HIDDEN);
+}
 
-void InstallableInkDrop::SetHovered(bool is_hovered) {}
+void InstallableInkDrop::SetHovered(bool is_hovered) {
+  is_hovered_ = is_hovered;
+  UpdatePainterForCurrentState();
+}
 
-void InstallableInkDrop::SetFocused(bool is_focused) {}
+void InstallableInkDrop::SetFocused(bool is_focused) {
+  is_focused_ = is_focused;
+  UpdatePainterForCurrentState();
+}
 
 bool InstallableInkDrop::IsHighlightFadingInOrVisible() const {
-  return false;
+  return is_hovered_ || is_focused_;
 }
 
 void InstallableInkDrop::SetShowHighlightOnHover(bool show_highlight_on_hover) {
@@ -121,12 +131,9 @@
 
   ui::PaintRecorder paint_recorder(context, layer_->size());
   gfx::Canvas* canvas = paint_recorder.canvas();
+  canvas->ClipPath(GetHighlightPathForView(view_), true);
 
-  cc::PaintFlags flags;
-  flags.setStyle(cc::PaintFlags::kFill_Style);
-  flags.setColor(kInstallableInkDropPlaceholderColor);
-
-  canvas->DrawPath(GetHighlightPathForView(view_), flags);
+  painter_.Paint(canvas, view_->size());
 }
 
 void InstallableInkDrop::OnDeviceScaleFactorChanged(
@@ -151,4 +158,13 @@
   return path;
 }
 
+void InstallableInkDrop::SchedulePaint() {
+  layer_->SchedulePaint(gfx::Rect(layer_->size()));
+}
+
+void InstallableInkDrop::UpdatePainterForCurrentState() {
+  painter_.SetHighlighted(IsHighlightFadingInOrVisible());
+  SchedulePaint();
+}
+
 }  // namespace views
diff --git a/ui/views/animation/installable_ink_drop.h b/ui/views/animation/installable_ink_drop.h
index 69906887..5fea597f 100644
--- a/ui/views/animation/installable_ink_drop.h
+++ b/ui/views/animation/installable_ink_drop.h
@@ -12,6 +12,8 @@
 #include "ui/views/animation/ink_drop.h"
 #include "ui/views/animation/ink_drop_event_handler.h"
 #include "ui/views/animation/ink_drop_state.h"
+#include "ui/views/animation/installable_ink_drop_animator.h"
+#include "ui/views/animation/installable_ink_drop_painter.h"
 #include "ui/views/view_observer.h"
 #include "ui/views/views_export.h"
 
@@ -43,6 +45,10 @@
  public:
   // Create ink drop for |view|. Note that |view| must live longer than us.
   explicit InstallableInkDrop(View* view);
+
+  InstallableInkDrop(const InstallableInkDrop&) = delete;
+  InstallableInkDrop(InstallableInkDrop&&) = delete;
+
   ~InstallableInkDrop() override;
 
   // Should only be used for inspecting properties of the layer in tests.
@@ -80,18 +86,25 @@
   static SkPath GetHighlightPathForView(const View* view);
 
  private:
+  void SchedulePaint();
+  void UpdatePainterForCurrentState();
+
   // The view this ink drop is showing for. |layer_| is added to the layer
   // hierarchy that |view_| belongs to. We track events on |view_| to update our
   // visual state.
   View* const view_;
 
-  // Observes |view_| and updates our visual state accordingly.
-  InkDropEventHandler event_handler_;
-
   // The layer we paint to.
   std::unique_ptr<ui::Layer> layer_;
 
-  InkDropState current_state_ = InkDropState::HIDDEN;
+  // Observes |view_| and updates our visual state accordingly.
+  InkDropEventHandler event_handler_;
+
+  InstallableInkDropPainter painter_;
+  InstallableInkDropAnimator animator_;
+
+  bool is_hovered_ = false;
+  bool is_focused_ = false;
 };
 
 }  // namespace views
diff --git a/ui/views/animation/installable_ink_drop_animator.cc b/ui/views/animation/installable_ink_drop_animator.cc
new file mode 100644
index 0000000..b205c5b
--- /dev/null
+++ b/ui/views/animation/installable_ink_drop_animator.cc
@@ -0,0 +1,60 @@
+// 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/views/animation/installable_ink_drop_animator.h"
+
+#include "base/bind.h"
+#include "ui/views/animation/installable_ink_drop_painter.h"
+
+namespace views {
+
+// static
+constexpr base::TimeDelta InstallableInkDropAnimator::kAnimationDuration;
+
+InstallableInkDropAnimator::InstallableInkDropAnimator(
+    InstallableInkDropPainter* painter,
+    base::RepeatingClosure repaint_callback)
+    : painter_(painter), repaint_callback_(repaint_callback) {}
+
+InstallableInkDropAnimator::~InstallableInkDropAnimator() {
+  transition_delay_timer_.Stop();
+}
+
+void InstallableInkDropAnimator::AnimateToState(InkDropState target_state) {
+  transition_delay_timer_.Stop();
+
+  const InkDropState last_state = target_state_;
+  switch (target_state) {
+    case InkDropState::HIDDEN:
+    case InkDropState::DEACTIVATED:
+      target_state_ = InkDropState::HIDDEN;
+      painter_->SetActivated(false);
+      break;
+    case InkDropState::ACTION_PENDING:
+    case InkDropState::ALTERNATE_ACTION_PENDING:
+    case InkDropState::ACTIVATED:
+      target_state_ = target_state;
+      painter_->SetActivated(true);
+      break;
+    case InkDropState::ACTION_TRIGGERED:
+    case InkDropState::ALTERNATE_ACTION_TRIGGERED:
+      if (last_state == InkDropState::ACTION_PENDING ||
+          last_state == InkDropState::ALTERNATE_ACTION_PENDING) {
+        target_state_ = InkDropState::HIDDEN;
+        painter_->SetActivated(false);
+      } else {
+        target_state_ = target_state;
+        painter_->SetActivated(true);
+        transition_delay_timer_.Start(
+            FROM_HERE, kAnimationDuration,
+            base::Bind(&InstallableInkDropAnimator::AnimateToState,
+                       base::Unretained(this), InkDropState::HIDDEN));
+      }
+      break;
+  }
+
+  repaint_callback_.Run();
+}
+
+}  // namespace views
diff --git a/ui/views/animation/installable_ink_drop_animator.h b/ui/views/animation/installable_ink_drop_animator.h
new file mode 100644
index 0000000..2e3f0c2
--- /dev/null
+++ b/ui/views/animation/installable_ink_drop_animator.h
@@ -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.
+
+#ifndef UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_ANIMATOR_H_
+#define UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_ANIMATOR_H_
+
+#include "base/callback.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "ui/views/animation/ink_drop_state.h"
+
+namespace views {
+
+class InstallableInkDropPainter;
+
+// Manages animating the ink drop's visual state. This class is essentially a
+// state machine, using the current and target InkDropStates to affect the
+// InstallableInkDropPainter passed in. The animations are currently minimal.
+class VIEWS_EXPORT InstallableInkDropAnimator {
+ public:
+  static constexpr base::TimeDelta kAnimationDuration =
+      base::TimeDelta::FromMilliseconds(500);
+
+  explicit InstallableInkDropAnimator(InstallableInkDropPainter* painter,
+                                      base::RepeatingClosure repaint_callback);
+  ~InstallableInkDropAnimator();
+
+  // Set the target state and animate to it.
+  void AnimateToState(InkDropState target_state);
+
+  InkDropState target_state() const { return target_state_; }
+
+ private:
+  // The painter whose state we are controlling.
+  InstallableInkDropPainter* const painter_;
+
+  // Called when |painter_| is modified so that the owner can repaint it.
+  base::RepeatingClosure repaint_callback_;
+
+  InkDropState target_state_ = InkDropState::HIDDEN;
+
+  base::OneShotTimer transition_delay_timer_;
+};
+
+}  // namespace views
+
+#endif  // UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_ANIMATOR_H_
diff --git a/ui/views/animation/installable_ink_drop_animator_unittest.cc b/ui/views/animation/installable_ink_drop_animator_unittest.cc
new file mode 100644
index 0000000..71280ca
--- /dev/null
+++ b/ui/views/animation/installable_ink_drop_animator_unittest.cc
@@ -0,0 +1,100 @@
+// 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/views/animation/installable_ink_drop_animator.h"
+
+#include "base/bind_helpers.h"
+#include "base/run_loop.h"
+#include "base/test/scoped_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/views/animation/ink_drop_state.h"
+#include "ui/views/animation/installable_ink_drop_painter.h"
+
+namespace views {
+
+class InstallableInkDropAnimatorTest : public ::testing::Test {
+ public:
+  InstallableInkDropAnimatorTest()
+      : scoped_task_environment_(
+            base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {}
+
+  base::test::ScopedTaskEnvironment* scoped_task_environment() {
+    return &scoped_task_environment_;
+  }
+
+ private:
+  base::test::ScopedTaskEnvironment scoped_task_environment_;
+};
+
+TEST_F(InstallableInkDropAnimatorTest, UpdatesTargetState) {
+  InstallableInkDropPainter painter;
+  InstallableInkDropAnimator animator(&painter, base::DoNothing());
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+
+  animator.AnimateToState(InkDropState::ACTIVATED);
+  EXPECT_EQ(InkDropState::ACTIVATED, animator.target_state());
+}
+
+TEST_F(InstallableInkDropAnimatorTest, InstantAnimationsFinishImmediately) {
+  InstallableInkDropPainter painter;
+
+  bool callback_called = false;
+  base::RepeatingClosure callback = base::Bind(
+      [](bool* callback_called) { *callback_called = true; }, &callback_called);
+  InstallableInkDropAnimator animator(&painter, callback);
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+  EXPECT_FALSE(painter.activated());
+  EXPECT_FALSE(callback_called);
+
+  animator.AnimateToState(InkDropState::ACTION_PENDING);
+  EXPECT_EQ(InkDropState::ACTION_PENDING, animator.target_state());
+  EXPECT_TRUE(painter.activated());
+  EXPECT_TRUE(callback_called);
+
+  callback_called = false;
+  animator.AnimateToState(InkDropState::ACTION_TRIGGERED);
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+  EXPECT_FALSE(painter.activated());
+  EXPECT_TRUE(callback_called);
+
+  callback_called = false;
+  animator.AnimateToState(InkDropState::ACTIVATED);
+  EXPECT_EQ(InkDropState::ACTIVATED, animator.target_state());
+  EXPECT_TRUE(painter.activated());
+  EXPECT_TRUE(callback_called);
+
+  callback_called = false;
+  animator.AnimateToState(InkDropState::DEACTIVATED);
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+  EXPECT_FALSE(painter.activated());
+  EXPECT_TRUE(callback_called);
+}
+
+TEST_F(InstallableInkDropAnimatorTest,
+       TriggeredAnimationDelaysTransitionToHidden) {
+  InstallableInkDropPainter painter;
+
+  bool callback_called = false;
+  base::RepeatingClosure callback = base::Bind(
+      [](bool* callback_called) { *callback_called = true; }, &callback_called);
+  InstallableInkDropAnimator animator(&painter, callback);
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+  EXPECT_FALSE(painter.activated());
+  EXPECT_FALSE(callback_called);
+
+  animator.AnimateToState(InkDropState::ACTION_TRIGGERED);
+  EXPECT_EQ(InkDropState::ACTION_TRIGGERED, animator.target_state());
+  EXPECT_TRUE(painter.activated());
+  EXPECT_TRUE(callback_called);
+
+  callback_called = false;
+  scoped_task_environment()->FastForwardBy(
+      InstallableInkDropAnimator::kAnimationDuration);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(InkDropState::HIDDEN, animator.target_state());
+  EXPECT_FALSE(painter.activated());
+  EXPECT_TRUE(callback_called);
+}
+
+}  // namespace views
diff --git a/ui/views/animation/installable_ink_drop_painter.cc b/ui/views/animation/installable_ink_drop_painter.cc
new file mode 100644
index 0000000..421f5318
--- /dev/null
+++ b/ui/views/animation/installable_ink_drop_painter.cc
@@ -0,0 +1,39 @@
+// 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/views/animation/installable_ink_drop_painter.h"
+
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace {
+// Placeholder colors and alphas. TODO(crbug.com/933384): get rid of
+// these and make colors configurable, with same defaults as existing
+// ink drops.
+constexpr SkColor kInstallableInkDropBaseColor = SK_ColorBLACK;
+constexpr SkAlpha kInstallableInkDropHighlightedOpacity = 0.08 * SK_AlphaOPAQUE;
+constexpr SkAlpha kInstallableInkDropActivatedOpacity = 0.16 * SK_AlphaOPAQUE;
+}  // namespace
+
+namespace views {
+
+gfx::Size InstallableInkDropPainter::GetMinimumSize() const {
+  return gfx::Size();
+}
+
+void InstallableInkDropPainter::Paint(gfx::Canvas* canvas,
+                                      const gfx::Size& size) {
+  if (activated_) {
+    canvas->FillRect(gfx::Rect(size),
+                     SkColorSetA(kInstallableInkDropBaseColor,
+                                 kInstallableInkDropActivatedOpacity));
+  } else if (highlighted_) {
+    canvas->FillRect(gfx::Rect(size),
+                     SkColorSetA(kInstallableInkDropBaseColor,
+                                 kInstallableInkDropHighlightedOpacity));
+  }
+}
+
+}  // namespace views
diff --git a/ui/views/animation/installable_ink_drop_painter.h b/ui/views/animation/installable_ink_drop_painter.h
new file mode 100644
index 0000000..e5c3d76
--- /dev/null
+++ b/ui/views/animation/installable_ink_drop_painter.h
@@ -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.
+
+#ifndef UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_PAINTER_H_
+#define UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_PAINTER_H_
+
+#include "ui/views/painter.h"
+
+namespace views {
+
+// Holds the current visual state of the installable ink drop and handles
+// painting it. The |Painter::Paint()| implementation draws a rectangular ink
+// drop of the given size; the user should set a clip path via
+// |gfx::Canvas::ClipPath()| to control the shape.
+class VIEWS_EXPORT InstallableInkDropPainter : public Painter {
+ public:
+  InstallableInkDropPainter() = default;
+  ~InstallableInkDropPainter() override = default;
+
+  void SetActivated(bool activated) { activated_ = activated; }
+  bool activated() const { return activated_; }
+
+  void SetHighlighted(bool highlighted) { highlighted_ = highlighted; }
+  bool highlighted() const { return highlighted_; }
+
+  // Painter:
+  gfx::Size GetMinimumSize() const override;
+  void Paint(gfx::Canvas* canvas, const gfx::Size& size) override;
+
+ private:
+  bool activated_ = false;
+  bool highlighted_ = false;
+};
+
+}  // namespace views
+
+#endif  // UI_VIEWS_ANIMATION_INSTALLABLE_INK_DROP_PAINTER_H_
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc
index d9ef602..befb2c5 100644
--- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_ozone_unittest.cc
@@ -45,7 +45,7 @@
   void Minimize() override {}
   void Restore() override {}
   ui::PlatformWindowState GetPlatformWindowState() const override {
-    return ui::PlatformWindowState::PLATFORM_WINDOW_STATE_NORMAL;
+    return ui::PlatformWindowState::kNormal;
   }
   void SetCursor(ui::PlatformCursor cursor) override {}
   void MoveCursorTo(const gfx::Point& location) override {}
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
index ac7c92d..521601e5 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
@@ -333,12 +333,12 @@
 
 bool DesktopWindowTreeHostPlatform::IsMaximized() const {
   return platform_window()->GetPlatformWindowState() ==
-         ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MAXIMIZED;
+         ui::PlatformWindowState::kMaximized;
 }
 
 bool DesktopWindowTreeHostPlatform::IsMinimized() const {
   return platform_window()->GetPlatformWindowState() ==
-         ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+         ui::PlatformWindowState::kMinimized;
 }
 
 bool DesktopWindowTreeHostPlatform::HasCapture() const {
@@ -419,7 +419,7 @@
 
 bool DesktopWindowTreeHostPlatform::IsFullscreen() const {
   return platform_window()->GetPlatformWindowState() ==
-         ui::PlatformWindowState::PLATFORM_WINDOW_STATE_FULLSCREEN;
+         ui::PlatformWindowState::kFullScreen;
 }
 
 void DesktopWindowTreeHostPlatform::SetOpacity(float opacity) {
@@ -519,8 +519,7 @@
   // Propagate minimization/restore to compositor to avoid drawing 'blank'
   // frames that could be treated as previews, which show content even if a
   // window is minimized.
-  bool visible =
-      new_state != ui::PlatformWindowState::PLATFORM_WINDOW_STATE_MINIMIZED;
+  bool visible = new_state != ui::PlatformWindowState::kMinimized;
   if (visible != compositor()->IsVisible()) {
     compositor()->SetVisible(visible);
     native_widget_delegate_->OnNativeWidgetVisibilityChanged(visible);
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
index efe92fed..83793e6a 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
@@ -1028,7 +1028,7 @@
 }
 
 bool DesktopWindowTreeHostX11::ShouldWindowContentsBeTransparent() const {
-  return use_argb_visual_;
+  return visual_has_alpha_;
 }
 
 void DesktopWindowTreeHostX11::FrameTypeChanged() {
@@ -1195,8 +1195,8 @@
 
 bool DesktopWindowTreeHostX11::IsTranslucentWindowOpacitySupported() const {
   // This function may be called before InitX11Window() (which
-  // initializes |use_argb_visual_|), so we cannot simply return
-  // |use_argb_visual_|.
+  // initializes |visual_has_alpha_|), so we cannot simply return
+  // |visual_has_alpha_|.
   return ui::XVisualManager::GetInstance()->ArgbVisualAvailable();
 }
 
@@ -1501,9 +1501,10 @@
   ui::XVisualManager* visual_manager = ui::XVisualManager::GetInstance();
   if (!visual_id_ ||
       !visual_manager->GetVisualInfo(visual_id_, &visual, &depth, &colormap,
-                                     &use_argb_visual_)) {
+                                     &visual_has_alpha_)) {
     visual_manager->ChooseVisualForWindow(enable_transparent_visuals, &visual,
-                                          &depth, &colormap, &use_argb_visual_);
+                                          &depth, &colormap,
+                                          &visual_has_alpha_);
   }
 
   if (colormap != CopyFromParent) {
@@ -2080,10 +2081,10 @@
 }
 
 void DesktopWindowTreeHostX11::SetWindowTransparency() {
-  compositor()->SetBackgroundColor(use_argb_visual_ ? SK_ColorTRANSPARENT
-                                                    : SK_ColorWHITE);
-  window()->SetTransparent(use_argb_visual_);
-  content_window()->SetTransparent(use_argb_visual_);
+  compositor()->SetBackgroundColor(visual_has_alpha_ ? SK_ColorTRANSPARENT
+                                                     : SK_ColorWHITE);
+  window()->SetTransparent(visual_has_alpha_);
+  content_window()->SetTransparent(visual_has_alpha_);
 }
 
 void DesktopWindowTreeHostX11::Relayout() {
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
index 4717440a..47944a04 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
@@ -367,7 +367,7 @@
   bool should_maximize_after_map_ = false;
 
   // Whether we used an ARGB visual for our window.
-  bool use_argb_visual_ = false;
+  bool visual_has_alpha_ = false;
 
   DesktopDragDropClientAuraX11* drag_drop_client_ = nullptr;
 
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index ef9275f..da11a3de 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -446,6 +446,16 @@
   DCHECK(delegate_->GetHWNDMessageDelegateInputMethod());
   delegate_->GetHWNDMessageDelegateInputMethod()->AddObserver(this);
 
+  // The usual way for UI Automation to obtain a fragment root is through
+  // WM_GETOBJECT. However, if there's a relation such as "Controller For"
+  // between element A in one window and element B in another window, UIA might
+  // call element A to discover the relation, receive a pointer to element B,
+  // then ask element B for its fragment root, without having sent WM_GETOBJECT
+  // to element B's window.
+  // So we create the fragment root now to ensure it's ready if asked for.
+  if (::switches::IsExperimentalAccessibilityPlatformUIAEnabled())
+    ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(hwnd(), this);
+
   // Disable pen flicks (http://crbug.com/506977)
   base::win::DisableFlicks(hwnd());
 }
@@ -1217,6 +1227,14 @@
                        ui::ScrollEventPhase::kNone);
 }
 
+gfx::NativeViewAccessible HWNDMessageHandler::GetChildOfAXFragmentRoot() {
+  return delegate_->GetNativeViewAccessible();
+}
+
+gfx::NativeViewAccessible HWNDMessageHandler::GetParentOfAXFragmentRoot() {
+  return nullptr;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // HWNDMessageHandler, private:
 
@@ -1770,9 +1788,6 @@
     if (is_uia_request &&
         ::switches::IsExperimentalAccessibilityPlatformUIAEnabled()) {
       // Retrieve UIA object for the root view.
-      if (!ax_fragment_root_)
-        ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(
-            hwnd(), delegate_->GetNativeViewAccessible());
       Microsoft::WRL::ComPtr<IRawElementProviderSimple> root;
       ax_fragment_root_->GetNativeViewAccessible()->QueryInterface(
           IID_PPV_ARGS(&root));
diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
index 060aa2d..d918f23a 100644
--- a/ui/views/win/hwnd_message_handler.h
+++ b/ui/views/win/hwnd_message_handler.h
@@ -22,6 +22,7 @@
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/win_util.h"
 #include "ui/accessibility/ax_enums.mojom.h"
+#include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/base/ime/input_method_observer.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/base/win/window_event_target.h"
@@ -81,7 +82,8 @@
 // TODO(beng): This object should eventually *become* the WindowImpl.
 class VIEWS_EXPORT HWNDMessageHandler : public gfx::WindowImpl,
                                         public ui::InputMethodObserver,
-                                        public ui::WindowEventTarget {
+                                        public ui::WindowEventTarget,
+                                        public ui::AXFragmentRootDelegateWin {
  public:
   // See WindowImpl for details on |debugging_id|.
   HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate,
@@ -241,6 +243,10 @@
   void ApplyPanGestureFlingBegin() override;
   void ApplyPanGestureFlingEnd() override;
 
+  // Overridden from AXFragmentRootDelegateWin.
+  gfx::NativeViewAccessible GetChildOfAXFragmentRoot() override;
+  gfx::NativeViewAccessible GetParentOfAXFragmentRoot() override;
+
   void ApplyPanGestureEvent(int scroll_x,
                             int scroll_y,
                             ui::EventMomentumPhase momentum_phase,
diff --git a/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn b/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
index e1de442..016a1189 100644
--- a/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
@@ -13,7 +13,6 @@
 js_library("cr_view_manager") {
   deps = [
     "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:cr",
   ]
   externs_list = [ "$externs_path/web_animations.js" ]
 }
diff --git a/ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager.html b/ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager.html
index 45ff7d8..da455e1 100644
--- a/ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager.html
+++ b/ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager.html
@@ -1,7 +1,6 @@
 <link rel="import" href="../../html/polymer.html">
 
 <link rel="import" href="../../html/assert.html">
-<link rel="import" href="../../html/cr.html">
 
 <dom-module id="cr-view-manager">
   <template>