diff --git a/.gitignore b/.gitignore
index 57e16a3..c75691e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -297,6 +297,7 @@
 /tools/metrics/histograms/histograms_xml/*.before.pretty-print.xml
 /tools/metrics/histograms/enums.before.pretty-print.xml
 /tools/page_cycler/acid3
+/tools/reclient
 /tools/skia_goldctl/
 /tools/swarming_client
 /tools/tryserver
diff --git a/AUTHORS b/AUTHORS
index 681d467..29011ff 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -442,6 +442,7 @@
 James Willcox <jwillcox@litl.com>
 Jan Rucka <ruckajan10@gmail.com>
 Jan Sauer <jan@jansauer.de>
+Janusz Majnert <jmajnert@gmail.com>
 Janwar Dinata <j.dinata@gmail.com>
 Jared Shumway <jaredshumway94@gmail.com>
 Jared Sohn <jared.sohn@gmail.com>
diff --git a/DEPS b/DEPS
index d5a74d5..53dc51a 100644
--- a/DEPS
+++ b/DEPS
@@ -139,6 +139,9 @@
   # e.g. with custom_vars.
   'checkout_ios_webkit': False,
 
+  # By default, do not checkout the re-client binaries.
+  'checkout_reclient': False,
+
   # Fetches only the SDK boot images which match at least one of the whitelist
   # entries in a comma-separated list.
   #
@@ -178,7 +181,7 @@
   # luci-go CIPD package version.
   # Make sure the revision is uploaded by infra-packagers builder.
   # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console
-  'luci_go': 'git_revision:1a022d3a4c50be4207ee93451255d71896416596',
+  'luci_go': 'git_revision:6cbe3f56e9f00b8f65eae21f01838a8b58191a47',
 
   # This can be overridden, e.g. with custom_vars, to build clang from HEAD
   # instead of downloading the prebuilt pinned revision.
@@ -197,7 +200,7 @@
   # 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': '9496fe5bcec9438958073ed8959627d20eaf8532',
+  'skia_revision': 'b69a9d48bf176ba802a22c1bc0002fe09045b458',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -209,7 +212,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '46107d3ece07f5cd1946b1013f69c110c0229a93',
+  'angle_revision': '7784fce44d7b02b849b1e72a830296356f2d5791',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -264,7 +267,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': '2ed6fc040fdce14fa59d3ac4be168b05bcc6b179',
+  'catapult_revision': '6743d1edbf356c3c9c648353e68fc266c1f18819',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -272,7 +275,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'd0b25f6e314a3a91b43c98898afca90826863442',
+  'devtools_frontend_revision': 'd99bf143c616d7af3274253ba1789c516efc240e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -324,7 +327,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '1a14e7e0244114fe737caf46e3a2690355aceafe',
+  'dawn_revision': 'd2953cff41e76f2a48bb43c0a62b9ce1936496a5',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -447,7 +450,16 @@
     'dep_type': 'cipd',
     'condition': 'host_os == "win"',
   },
-
+  'src/tools/reclient': {
+    'packages': [
+      {
+        'package': 'infra/rbe/client/linux-amd64',
+        'version': 'FY971v8hquNEs2x-L-AvVGygtX9sFTRy9aloq85WbqYC',
+      }
+    ],
+    'dep_type': 'cipd',
+    'condition': 'host_os == "linux" and checkout_reclient',
+  },
   'src/chrome/browser/resources/media_router/extension/src':
     Var('chromium_git') + '/media_router.git' + '@' + 'd4389c097c61fa8c5aa5eb7c3ba34ee203dd62e3',
 
@@ -551,7 +563,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'a4d253d6717ce4e055f3fb5d06473992f229d79d',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'a539853e3ca9603dfc10f9e6680114970a295879',
       'condition': 'checkout_ios',
   },
 
@@ -887,7 +899,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f577788041b61d7417cc5c9bb2aeba142ef13324',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '168214172df511b2bee5f79d0e1fa15d2f6f5c45',
       'condition': 'checkout_chromeos',
   },
 
@@ -907,7 +919,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '2f8e0fa49d955d9c8f5addaf8ff1b88def004e2e',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '9c0dc3026eedcd500b61df4f5a36febc1edda545',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1262,7 +1274,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + '01490a48c0c69e0d30e283d881b4e53b339b2c80',
+    Var('chromium_git') + '/openscreen' + '@' + '8dae1eb937cba58791c16a9caaa723676de563a1',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '97cfe495bb7a3853266b646d1c79e169387f9c7a',
@@ -1611,7 +1623,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@ae6ae76845bc23cde695a1d64023095f1267acf1',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@196fb8cb97ad1fdae6ea9b66373f3356728c13d7',
     'condition': 'checkout_src_internal',
   },
 
@@ -1619,7 +1631,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'zwjjfdu5X9OPcMNJ2vD6-qpbr5JfXymOFoQz-LOYG6cC',
+        'version': 'GMpv5BeMv05YOVfWTRvy3QascUDxh-A2Ke1ODjXWbrcC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1630,7 +1642,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'diLwXTxdRV6cbd18SoCniJNniVTvHD4wv7-x_eVBHkkC',
+        'version': 'wD5d5h6w6xyoGNkFcBA3bn0PFBJtnousZlP-04-mbXAC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/gfx/aw_vulkan_context_provider.cc b/android_webview/browser/gfx/aw_vulkan_context_provider.cc
index d2525ac629..44622b3 100644
--- a/android_webview/browser/gfx/aw_vulkan_context_provider.cc
+++ b/android_webview/browser/gfx/aw_vulkan_context_provider.cc
@@ -215,6 +215,13 @@
   return !!globals_;
 }
 
+bool AwVulkanContextProvider::InitializeGrContext(
+    const GrContextOptions& context_options) {
+  // GrContext is created in Globals, so nothing to do here besides DCHECK.
+  DCHECK(globals_);
+  return globals_->gr_context.get() != nullptr;
+}
+
 void AwVulkanContextProvider::SecondaryCBDrawBegin(
     sk_sp<GrVkSecondaryCBDrawContext> draw_context) {
   DCHECK(draw_context);
diff --git a/android_webview/browser/gfx/aw_vulkan_context_provider.h b/android_webview/browser/gfx/aw_vulkan_context_provider.h
index d8c719b..39e19b8 100644
--- a/android_webview/browser/gfx/aw_vulkan_context_provider.h
+++ b/android_webview/browser/gfx/aw_vulkan_context_provider.h
@@ -48,6 +48,7 @@
       AwDrawFn_InitVkParams* params);
 
   // viz::VulkanContextProvider implementation:
+  bool InitializeGrContext(const GrContextOptions& context_options) override;
   gpu::VulkanImplementation* GetVulkanImplementation() override;
   gpu::VulkanDeviceQueue* GetDeviceQueue() override;
   GrDirectContext* GetGrContext() override;
diff --git a/ash/ambient/ambient_photo_controller.cc b/ash/ambient/ambient_photo_controller.cc
index d69a6b9..ffd5351 100644
--- a/ash/ambient/ambient_photo_controller.cc
+++ b/ash/ambient/ambient_photo_controller.cc
@@ -203,6 +203,7 @@
     auto simple_loader = CreateSimpleURLLoader(url);
     auto loader_factory = AmbientClient::Get()->GetURLLoaderFactory();
     auto* loader_ptr = simple_loader.get();
+    auto* loader_factory_ptr = loader_factory.get();
 
     // Create a temporary file path as target for download to guard against race
     // conditions in reading.
@@ -212,7 +213,7 @@
     // Download to temp file first to guarantee entire image is written without
     // errors before attempting to read it.
     loader_ptr->DownloadToFile(
-        loader_factory.get(),
+        loader_factory_ptr,
         base::BindOnce(&AmbientURLLoaderImpl::OnUrlDownloadedToFile,
                        weak_factory_.GetWeakPtr(), std::move(callback),
                        std::move(simple_loader), std::move(loader_factory),
diff --git a/ash/ambient/ui/media_string_view.cc b/ash/ambient/ui/media_string_view.cc
index c0d4088..e749548 100644
--- a/ash/ambient/ui/media_string_view.cc
+++ b/ash/ambient/ui/media_string_view.cc
@@ -10,6 +10,7 @@
 #include "ash/ambient/ui/ambient_view_ids.h"
 #include "ash/ambient/util/ambient_util.h"
 #include "ash/public/cpp/ash_pref_names.h"
+#include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/shell_delegate.h"
@@ -23,11 +24,13 @@
 #include "ui/compositor/layer.h"
 #include "ui/compositor/paint_recorder.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
+#include "ui/gfx/font.h"
+#include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/shadow_value.h"
 #include "ui/gfx/skia_paint_util.h"
 #include "ui/gfx/text_constants.h"
 #include "ui/gfx/transform.h"
-#include "ui/views/border.h"
+#include "ui/views/controls/image_view.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/flex_layout.h"
@@ -96,7 +99,8 @@
 
 // Typography.
 constexpr char kMiddleDotSeparator[] = " \u00B7 ";
-constexpr char kPreceedingEighthNoteSymbol[] = "\u266A ";
+
+constexpr int kMusicNoteIconSizeDip = 20;
 
 // Returns true if we should show media string for ambient mode on lock-screen
 // based on user pref. We should keep the same user policy here as the
@@ -198,14 +202,19 @@
   SetPaintToLayer();
   layer()->SetFillsBoundsOpaquely(false);
 
+  constexpr int kChildSpacingDip = 8;
   auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kHorizontal));
   layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kStart);
   layout->set_cross_axis_alignment(
       views::BoxLayout::CrossAxisAlignment::kCenter);
+  layout->set_between_child_spacing(kChildSpacingDip);
 
-  icon_ = AddChildView(std::make_unique<views::Label>(
-      base::UTF8ToUTF16(kPreceedingEighthNoteSymbol)));
+  icon_ = AddChildView(std::make_unique<views::ImageView>());
+  icon_->SetPreferredSize(
+      gfx::Size(kMusicNoteIconSizeDip, kMusicNoteIconSizeDip));
+  icon_->SetImage(gfx::CreateVectorIcon(kMusicNoteIcon, kMusicNoteIconSizeDip,
+                                        SK_ColorWHITE));
 
   media_text_container_ = AddChildView(std::make_unique<views::View>());
   media_text_container_->SetPaintToLayer();
@@ -227,16 +236,16 @@
   constexpr SkColor kTextColor = SK_ColorWHITE;
   constexpr int kDefaultFontSizeDip = 64;
   constexpr int kMediaStringFontSizeDip = 18;
-  for (auto* view : {icon_, media_text_}) {
-    view->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_TO_HEAD);
-    view->SetVerticalAlignment(gfx::VerticalAlignment::ALIGN_BOTTOM);
-    view->SetAutoColorReadabilityEnabled(false);
-    view->SetEnabledColor(kTextColor);
-    view->SetFontList(ambient::util::GetDefaultFontlist().DeriveWithSizeDelta(
-        kMediaStringFontSizeDip - kDefaultFontSizeDip));
-    view->SetShadows(ambient::util::GetTextShadowValues());
-    view->SetElideBehavior(gfx::ElideBehavior::NO_ELIDE);
-  }
+  media_text_->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_TO_HEAD);
+  media_text_->SetVerticalAlignment(gfx::VerticalAlignment::ALIGN_MIDDLE);
+  media_text_->SetAutoColorReadabilityEnabled(false);
+  media_text_->SetEnabledColor(kTextColor);
+  media_text_->SetFontList(
+      ambient::util::GetDefaultFontlist()
+          .DeriveWithSizeDelta(kMediaStringFontSizeDip - kDefaultFontSizeDip)
+          .DeriveWithWeight(gfx::Font::Weight::MEDIUM));
+  media_text_->SetShadows(ambient::util::GetTextShadowValues());
+  media_text_->SetElideBehavior(gfx::ElideBehavior::NO_ELIDE);
 
   BindMediaControllerObserver();
 }
diff --git a/ash/ambient/ui/media_string_view.h b/ash/ambient/ui/media_string_view.h
index d4f323a..feac0d9 100644
--- a/ash/ambient/ui/media_string_view.h
+++ b/ash/ambient/ui/media_string_view.h
@@ -16,6 +16,7 @@
 #include "ui/views/view_observer.h"
 
 namespace views {
+class ImageView;
 class Label;
 }  // namespace views
 
@@ -84,7 +85,7 @@
   views::Label* media_text_label_for_testing() { return media_text_; }
 
   // Music eighth note.
-  views::Label* icon_ = nullptr;
+  views::ImageView* icon_ = nullptr;
 
   // Container of media info text.
   views::View* media_text_container_ = nullptr;
diff --git a/ash/app_list/views/search_result_tile_item_list_view_unittest.cc b/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
index 7502af4..7116fb5 100644
--- a/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
+++ b/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
@@ -182,7 +182,7 @@
         result->set_title(base::ASCIIToUTF16("RecommendedApp ") +
                           base::NumberToString16(i));
         result->SetRating(1 + i);
-        results->AddAt(result->display_index(), std::move(result));
+        results->AddAt(display_indexes[i], std::move(result));
       }
     }
 
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index f0ea790..e3cdbf9 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -827,6 +827,9 @@
       <message name="IDS_ASH_SWITCH_ACCESS_KEYBOARD" desc="The label for the Switch Access menu option to open the onscreen keyboard.">
         Keyboard
       </message>
+      <message name="IDS_ASH_SWITCH_ACCESS_LEFT_CLICK" desc="The label for the Switch Access menu option to left click.">
+        Left click
+      </message>
       <message name="IDS_ASH_SWITCH_ACCESS_MOVE_BACKWARD_ONE_CHAR_OF_TEXT" desc="The label for the Switch Access menu option to move the cursor backward one character of text.">
         Back by letter
       </message>
@@ -854,6 +857,9 @@
       <message name="IDS_ASH_SWITCH_ACCESS_POINT_SCAN" desc="The label for the Switch Access menu option to start point scanning.">
         Point scanning
       </message>
+      <message name="IDS_ASH_SWITCH_ACCESS_RIGHT_CLICK" desc="The label for the Switch Access menu option to right click.">
+        Right Click
+      </message>
       <message name="IDS_ASH_SWITCH_ACCESS_SCROLL_DOWN" desc="The label for the Switch Access menu option to scroll the selected view down.">
         Scroll down
       </message>
@@ -3118,10 +3124,10 @@
       <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_FULLSCREEN_IMAGE_CAPTURE_TABLET" desc="The capture label message which shows in the middle of the screen when in fullscreen image capture mode in tablet mode.">
         Tap anywhere to capture full screen
       </message>
-      <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_FULLSCREEN_VIDEO_RECORD_CLAMSHELL" desc="The capture label message which shows in the middle of the screen when in fullscreen image capture mode in clamshell mode.">
+      <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_FULLSCREEN_VIDEO_RECORD_CLAMSHELL" desc="The capture label message which shows in the middle of the screen when in fullscreen video record mode in clamshell mode.">
         Click anywhere to record full screen
       </message>
-      <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_FULLSCREEN_VIDEO_RECORD_TABLET" desc="The capture label message which shows in the middle of the screen when in fullscreen image capture mode in tablet mode.">
+      <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_FULLSCREEN_VIDEO_RECORD_TABLET" desc="The capture label message which shows in the middle of the screen when in fullscreen video record mode in tablet mode.">
         Tap anywhere to record full screen
       </message>
       <message name="IDS_ASH_SCREEN_CAPTURE_LABEL_REGION_IMAGE_CAPTURE" desc="The caputre label message which shows in the middle of the screen when in region image capture mode.">
diff --git a/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_LEFT_CLICK.png.sha1 b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_LEFT_CLICK.png.sha1
new file mode 100644
index 0000000..f68530b
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_LEFT_CLICK.png.sha1
@@ -0,0 +1 @@
+f94169c8c8e4335b62f8de724e78a7993fbd44b0
\ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_RIGHT_CLICK.png.sha1 b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_RIGHT_CLICK.png.sha1
new file mode 100644
index 0000000..8e160a7
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_SWITCH_ACCESS_RIGHT_CLICK.png.sha1
@@ -0,0 +1 @@
+30d97c0603d4fee8cf9e90b0bdbea2acaef2871a
\ No newline at end of file
diff --git a/ash/login/ui/arrow_button_view.cc b/ash/login/ui/arrow_button_view.cc
index c81c412..0b3633f 100644
--- a/ash/login/ui/arrow_button_view.cc
+++ b/ash/login/ui/arrow_button_view.cc
@@ -43,7 +43,9 @@
              /*sweepAngle=*/360 * loading_fraction, /*forceMoveTo=*/true);
 
   cc::PaintFlags flags;
-  flags.setColor(gfx::kGoogleGrey100);
+  // Use the same color as the arrow icon.
+  flags.setColor(AshColorProvider::Get()->GetContentLayerColor(
+      AshColorProvider::ContentLayerType::kButtonIconColor));
   flags.setStyle(cc::PaintFlags::kStroke_Style);
   flags.setAntiAlias(true);
   canvas->DrawPath(path, flags);
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 2820dae..d948b67 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -114,9 +114,6 @@
 constexpr int kHorizontalPaddingAuthErrorBubbleDp = 8;
 constexpr int kVerticalPaddingAuthErrorBubbleDp = 8;
 
-// The font color of the bottom status indicator for ADB warning.
-constexpr SkColor kBottomStatusAdbFontColor = gfx::kGoogleRed300;
-
 // Spacing between the bottom status indicator and the shelf.
 constexpr int kBottomStatusIndicatorBottomMarginDp = 16;
 
@@ -778,13 +775,13 @@
     return;
   bottom_status_indicator_->SetIcon(
       chromeos::kEnterpriseIcon,
-      AshColorProvider::ContentLayerType::kIconColorPrimary);
+      AshColorProvider::ContentLayerType::kButtonIconColorPrimary);
   bottom_status_indicator_->SetText(l10n_util::GetStringFUTF16(
       IDS_ASH_LOGIN_MANAGED_DEVICE_INDICATOR, ui::GetChromeOSDeviceName(),
       base::UTF8ToUTF16(entreprise_domain_manager)));
   bottom_status_indicator_->SetEnabledTextColors(
       AshColorProvider::Get()->GetContentLayerColor(
-          AshColorProvider::ContentLayerType::kTextColorPrimary));
+          AshColorProvider::ContentLayerType::kButtonLabelColorPrimary));
   bottom_status_indicator_->set_role_for_accessibility(
       ax::mojom::Role::kButton);
   bottom_status_indicator_status_ = BottomIndicatorState::kManagedDevice;
@@ -797,7 +794,9 @@
       AshColorProvider::ContentLayerType::kIconColorAlert);
   bottom_status_indicator_->SetText(
       l10n_util::GetStringUTF16(IDS_ASH_LOGIN_SCREEN_UNVERIFIED_CODE_WARNING));
-  bottom_status_indicator_->SetEnabledTextColors(kBottomStatusAdbFontColor);
+  bottom_status_indicator_->SetEnabledTextColors(
+      AshColorProvider::Get()->GetContentLayerColor(
+          AshColorProvider::ContentLayerType::kTextColorAlert));
   bottom_status_indicator_->set_role_for_accessibility(
       ax::mojom::Role::kStaticText);
   bottom_status_indicator_status_ =
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc
index 96d2006..f0302fe 100644
--- a/ash/login/ui/login_auth_user_view.cc
+++ b/ash/login/ui/login_auth_user_view.cc
@@ -90,8 +90,6 @@
 // Distance from the top of the user view to the user icon.
 constexpr int kDistanceFromTopOfBigUserViewToUserIconDp = 24;
 
-constexpr SkColor kChallengeResponseErrorColor = gfx::kGoogleRed300;
-
 // Date time format containing only the day of the week, for example: "Tuesday".
 constexpr char kDayOfWeekOnlyTimeFormat[] = "EEEE";
 
@@ -444,9 +442,10 @@
     label_->SetTextBasedOnAuthAttempt(success);
 
     if (success) {
-      icon_->SetImage(gfx::CreateVectorIcon(kLockScreenFingerprintSuccessIcon,
-                                            kFingerprintIconSizeDp,
-                                            gfx::kGoogleGreen300));
+      icon_->SetImage(gfx::CreateVectorIcon(
+          kLockScreenFingerprintSuccessIcon, kFingerprintIconSizeDp,
+          AshColorProvider::Get()->GetContentLayerColor(
+              AshColorProvider::ContentLayerType::kIconColorPositive)));
     } else {
       SetIcon(FingerprintState::DISABLED_FROM_ATTEMPTS);
       // base::Unretained is safe because reset_state_ is owned by |this|.
@@ -628,9 +627,10 @@
             AshColorProvider::Get()->GetContentLayerColor(
                 AshColorProvider::ContentLayerType::kIconColorPrimary));
       case State::kFailure:
-        return gfx::CreateVectorIcon(kLockScreenSmartCardFailureIcon,
-                                     kChallengeResponseIconSizeDp,
-                                     kChallengeResponseErrorColor);
+        return gfx::CreateVectorIcon(
+            kLockScreenSmartCardFailureIcon, kChallengeResponseIconSizeDp,
+            AshColorProvider::Get()->GetContentLayerColor(
+                AshColorProvider::ContentLayerType::kIconColorAlert));
     }
   }
 
diff --git a/ash/login/ui/login_expanded_public_account_view.cc b/ash/login/ui/login_expanded_public_account_view.cc
index 3a79f27..4e14681 100644
--- a/ash/login/ui/login_expanded_public_account_view.cc
+++ b/ash/login/ui/login_expanded_public_account_view.cc
@@ -53,14 +53,6 @@
 constexpr int kLeftMarginForSelectionButton = 8;
 constexpr int kRightMarginForSelectionButton = 3;
 
-constexpr SkColor kPublicSessionBackgroundColor =
-    SkColorSetARGB(0xAB, 0x00, 0x00, 0x00);
-constexpr SkColor kBorderColor = SkColorSetA(SK_ColorWHITE, 0x33);
-constexpr SkColor kPublicSessionBlueColor =
-    SkColorSetARGB(0xDE, 0x7B, 0xAA, 0xF7);
-constexpr SkColor kSelectionMenuTitleColor =
-    SkColorSetARGB(0x57, 0xFF, 0xFF, 0xFF);
-
 constexpr int kDropDownIconSizeDp = 16;
 constexpr int kArrowButtonSizeDp = 48;
 constexpr int kAdvancedViewButtonWidthDp = 190;
@@ -232,7 +224,9 @@
 
     image_ = new views::ImageView();
     image_->SetImage(gfx::CreateVectorIcon(
-        vector_icons::kWarningIcon, kMonitoringWarningIconSizeDp, SK_ColorRED));
+        vector_icons::kWarningIcon, kMonitoringWarningIconSizeDp,
+        AshColorProvider::Get()->GetContentLayerColor(
+            AshColorProvider::ContentLayerType::kIconColorWarning)));
     image_->SetPreferredSize(
         gfx::Size(kMonitoringWarningIconSizeDp, kMonitoringWarningIconSizeDp));
     image_->SetVisible(false);
@@ -333,7 +327,9 @@
 
     views::StyledLabel::RangeStyleInfo link_style =
         views::StyledLabel::RangeStyleInfo::CreateForLink(on_learn_more_tapped);
-    link_style.override_color = kPublicSessionBlueColor;
+    const SkColor blue = AshColorProvider::Get()->GetContentLayerColor(
+        AshColorProvider::ContentLayerType::kButtonLabelColorBlue);
+    link_style.override_color = blue;
     learn_more_label_->AddStyleRange(gfx::Range(offset, offset + link.length()),
                                      link_style);
     learn_more_label_->SetAutoColorReadabilityEnabled(false);
@@ -344,9 +340,8 @@
                             base::Unretained(this)),
         l10n_util::GetStringUTF16(
             IDS_ASH_LOGIN_PUBLIC_SESSION_LANGUAGE_AND_INPUT));
-    advanced_view_button_->SetTextColor(kPublicSessionBlueColor);
-    advanced_view_button_->SetIcon(kLoginScreenButtonDropdownIcon,
-                                   kPublicSessionBlueColor);
+    advanced_view_button_->SetTextColor(blue);
+    advanced_view_button_->SetIcon(kLoginScreenButtonDropdownIcon, blue);
     advanced_view_button_->SetPreferredSize(
         gfx::Size(kAdvancedViewButtonWidthDp, kAdvancedViewButtonHeightDp));
     AddChildView(advanced_view_button_);
@@ -357,6 +352,10 @@
         views::BoxLayout::Orientation::kVertical));
     AddChildView(advanced_view_);
 
+    const SkColor selection_menu_title_color =
+        AshColorProvider::Get()->GetContentLayerColor(
+            AshColorProvider::ContentLayerType::kTextColorSecondary);
+
     // Creates button to open the menu.
     auto create_menu_button =
         [&](views::Button::PressedCallback callback,
@@ -367,8 +366,10 @@
       button->SetMargins(kLeftMarginForSelectionButton,
                          kRightMarginForSelectionButton);
       button->SetBorder(views::CreateRoundedRectBorder(
-          kBorderThicknessDp, kRoundRectCornerRadiusDp, kBorderColor));
-      button->SetIcon(kLoginScreenMenuDropdownIcon, kSelectionMenuTitleColor);
+          kBorderThicknessDp, kRoundRectCornerRadiusDp,
+          AshColorProvider::Get()->GetContentLayerColor(
+              AshColorProvider::ContentLayerType::kSeparatorColor)));
+      button->SetIcon(kLoginScreenMenuDropdownIcon, selection_menu_title_color);
       return button;
     };
 
@@ -380,7 +381,7 @@
 
     views::Label* language_title = CreateLabel(
         l10n_util::GetStringUTF16(IDS_ASH_LOGIN_LANGUAGE_SELECTION_SELECT),
-        kSelectionMenuTitleColor);
+        selection_menu_title_color);
     language_selection_ = create_menu_button(
         base::BindRepeating(&RightPaneView::LanguageSelectionButtonPressed,
                             base::Unretained(this)),
@@ -388,7 +389,7 @@
 
     views::Label* keyboard_title = CreateLabel(
         l10n_util::GetStringUTF16(IDS_ASH_LOGIN_KEYBOARD_SELECTION_SELECT),
-        kSelectionMenuTitleColor);
+        selection_menu_title_color);
     keyboard_selection_ = create_menu_button(
         base::BindRepeating(&RightPaneView::KeyboardSelectionButtonPressed,
                             base::Unretained(this)),
@@ -806,8 +807,10 @@
       gfx::Size(kNonEmptyWidth, kTopSpacingForUserViewDp));
   left_pane->AddChildView(top_spacing);
   left_pane->AddChildView(user_view_);
-  left_pane->SetBorder(
-      views::CreateSolidSidedBorder(0, 0, 0, kBorderThicknessDp, kBorderColor));
+  left_pane->SetBorder(views::CreateSolidSidedBorder(
+      0, 0, 0, kBorderThicknessDp,
+      AshColorProvider::Get()->GetContentLayerColor(
+          AshColorProvider::ContentLayerType::kSeparatorColor)));
 
   right_pane_ = new RightPaneView(
       base::BindRepeating(&LoginExpandedPublicAccountView::ShowWarningDialog,
@@ -885,7 +888,8 @@
 
   cc::PaintFlags flags;
   flags.setStyle(cc::PaintFlags::kFill_Style);
-  flags.setColor(kPublicSessionBackgroundColor);
+  flags.setColor(AshColorProvider::Get()->GetShieldLayerColor(
+      AshColorProvider::ShieldLayerType::kShield80));
   flags.setAntiAlias(true);
   canvas->DrawRoundRect(GetContentsBounds(), kRoundRectCornerRadiusDp, flags);
 }
diff --git a/ash/login/ui/login_menu_view.cc b/ash/login/ui/login_menu_view.cc
index 4b70508..bf761171 100644
--- a/ash/login/ui/login_menu_view.cc
+++ b/ash/login/ui/login_menu_view.cc
@@ -30,8 +30,6 @@
 
 namespace {
 
-constexpr SkColor kMenuBackgroundColor = SkColorSetRGB(0x3C, 0x40, 0x43);
-
 class MenuItemView : public views::Button {
  public:
   MenuItemView(const LoginMenuView::Item& item,
@@ -132,7 +130,6 @@
                              LoginButton* opener,
                              const OnSelect& on_select)
     : LoginBaseBubbleView(anchor_view), opener_(opener), on_select_(on_select) {
-  SetBackground(views::CreateSolidBackground(kMenuBackgroundColor));
   SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
 
   scroller_ = new views::ScrollView();
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc
index 0451ab5..1e46272 100644
--- a/ash/login/ui/login_user_view.cc
+++ b/ash/login/ui/login_user_view.cc
@@ -102,7 +102,10 @@
  public:
   IconRoundedView(int size) : radius_(size / 2) {
     icon_ = gfx::ImageSkiaOperations::CreateResizedImage(
-        gfx::CreateVectorIcon(chromeos::kEnterpriseIcon, gfx::kGoogleGrey500),
+        gfx::CreateVectorIcon(
+            chromeos::kEnterpriseIcon,
+            AshColorProvider::Get()->GetContentLayerColor(
+                AshColorProvider::ContentLayerType::kIconColorSecondary)),
         skia::ImageOperations::RESIZE_BEST,
         gfx::Size(size * kIconProportion, size * kIconProportion));
   }
@@ -125,9 +128,9 @@
     cc::PaintFlags flags;
     flags.setAntiAlias(true);
     flags.setColor(AshColorProvider::Get()->GetContentLayerColor(
-        AshColorProvider::ContentLayerType::kIconColorPrimary));
+        AshColorProvider::ContentLayerType::kIconColorSecondaryBackground));
     flags.setStyle(cc::PaintFlags::kFill_Style);
-    // The white circle on which we paint the icon.
+    // The colored circle on which we paint the icon.
     canvas->DrawCircle(center_circle, radius_, flags);
     canvas->DrawImageInPath(icon_, image_bounds.x(), image_bounds.y(), path,
                             flags);
diff --git a/ash/login/ui/pin_request_view.cc b/ash/login/ui/pin_request_view.cc
index 2caecfb..6a7bdd5 100644
--- a/ash/login/ui/pin_request_view.cc
+++ b/ash/login/ui/pin_request_view.cc
@@ -74,11 +74,6 @@
     kAccessCodeToPinKeyboardDistanceDp + kPinKeyboardToFooterDistanceDp +
     kArrowButtonSizeDp + kPinRequestViewMainHorizontalInsetDp;  // = 266
 
-constexpr int kAlpha70Percent = 178;
-constexpr int kAlpha74Percent = 189;
-
-constexpr SkColor kErrorColor = gfx::kGoogleRed300;
-
 bool IsTabletMode() {
   return Shell::Get()->tablet_mode_controller()->InTabletMode();
 }
@@ -151,21 +146,9 @@
 
 // static
 SkColor PinRequestView::GetChildUserDialogColor(bool using_blur) {
-  SkColor color = AshColorProvider::Get()->GetBaseLayerColor(
-      AshColorProvider::BaseLayerType::kOpaque);
-
-  SkColor extracted_color =
-      Shell::Get()->wallpaper_controller()->GetProminentColor(
-          color_utils::ColorProfile(color_utils::LumaRange::DARK,
-                                    color_utils::SaturationRange::MUTED));
-
-  if (extracted_color != kInvalidWallpaperColor &&
-      extracted_color != SK_ColorTRANSPARENT) {
-    color = color_utils::GetResultingPaintColor(
-        SkColorSetA(SK_ColorBLACK, kAlpha70Percent), extracted_color);
-  }
-
-  return using_blur ? SkColorSetA(color, kAlpha74Percent) : color;
+  return AshColorProvider::Get()->GetBaseLayerColor(
+      using_blur ? AshColorProvider::BaseLayerType::kTransparent80
+                 : AshColorProvider::BaseLayerType::kOpaque);
 }
 
 // TODO(crbug.com/1061008): Make dialog look good on small screens with high
@@ -505,6 +488,8 @@
       return;
     }
     case PinRequestViewState::kError: {
+      const SkColor kErrorColor = AshColorProvider::Get()->GetContentLayerColor(
+          AshColorProvider::ContentLayerType::kTextColorAlert);
       access_code_view_->SetInputColor(kErrorColor);
       title_label_->SetEnabledColor(kErrorColor);
       // Read out the error.
diff --git a/ash/login/ui/scrollable_users_list_view.cc b/ash/login/ui/scrollable_users_list_view.cc
index 8f675329..215bf42 100644
--- a/ash/login/ui/scrollable_users_list_view.cc
+++ b/ash/login/ui/scrollable_users_list_view.cc
@@ -59,8 +59,6 @@
 constexpr int kScrollThumbPaddingDp = 8;
 // Radius of the scroll bar thumb.
 constexpr int kScrollThumbRadiusDp = 8;
-// Alpha of scroll bar thumb (43/255 = 17%).
-constexpr int kScrollThumbAlpha = 43;
 // How long for the scrollbar to hide after no scroll events have been received?
 constexpr base::TimeDelta kScrollThumbHideTimeout =
     base::TimeDelta::FromMilliseconds(500);
@@ -108,7 +106,8 @@
   void OnPaint(gfx::Canvas* canvas) override {
     cc::PaintFlags fill_flags;
     fill_flags.setStyle(cc::PaintFlags::kFill_Style);
-    fill_flags.setColor(SkColorSetA(SK_ColorWHITE, kScrollThumbAlpha));
+    fill_flags.setColor(AshColorProvider::Get()->GetContentLayerColor(
+        AshColorProvider::ContentLayerType::kLoginScrollBarColor));
     canvas->DrawRoundRect(GetLocalBounds(), kScrollThumbRadiusDp, fill_flags);
   }
 
diff --git a/ash/magnifier/docked_magnifier_controller_impl.cc b/ash/magnifier/docked_magnifier_controller_impl.cc
index 228acb26..513a8fa 100644
--- a/ash/magnifier/docked_magnifier_controller_impl.cc
+++ b/ash/magnifier/docked_magnifier_controller_impl.cc
@@ -621,8 +621,9 @@
   params.accept_events = false;
   params.bounds = viewport_bounds;
   params.opacity = views::Widget::InitParams::WindowOpacity::kOpaque;
-  params.parent =
+  aura::Window* const parent =
       GetViewportParentContainerForRoot(current_source_root_window_);
+  params.parent = parent;
   params.name = kDockedMagnifierViewportWindowName;
   viewport_widget_->Init(std::move(params));
 
@@ -632,7 +633,7 @@
   separator_layer_->SetColor(SK_ColorBLACK);
   separator_layer_->SetBounds(
       SeparatorBoundsFromViewportBounds(viewport_bounds));
-  params.parent->layer()->Add(separator_layer_.get());
+  parent->layer()->Add(separator_layer_.get());
 
   // 3- Create a background layer that will show a dark gray color behind the
   //    magnifier layer. It has the same bounds as the viewport.
diff --git a/ash/resources/vector_icons/BUILD.gn b/ash/resources/vector_icons/BUILD.gn
index 4b122a0a..f4f039d 100644
--- a/ash/resources/vector_icons/BUILD.gn
+++ b/ash/resources/vector_icons/BUILD.gn
@@ -193,6 +193,7 @@
     "switch_access_jump_to_beginning_of_text.icon",
     "switch_access_jump_to_end_of_text.icon",
     "switch_access_keyboard.icon",
+    "switch_access_left_click.icon",
     "switch_access_move_backward_one_char_of_text.icon",
     "switch_access_move_backward_one_word_of_text.icon",
     "switch_access_move_cursor.icon",
@@ -202,6 +203,7 @@
     "switch_access_move_up_one_line_of_text.icon",
     "switch_access_paste.icon",
     "switch_access_point_scan.icon",
+    "switch_access_right_click.icon",
     "switch_access_scroll_down.icon",
     "switch_access_scroll_left.icon",
     "switch_access_scroll_right.icon",
diff --git a/ash/resources/vector_icons/switch_access_left_click.icon b/ash/resources/vector_icons/switch_access_left_click.icon
new file mode 100644
index 0000000..c8d49e6
--- /dev/null
+++ b/ash/resources/vector_icons/switch_access_left_click.icon
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+CANVAS_DIMENSIONS, 20,
+R_MOVE_TO, 8, 16.71f,
+R_CUBIC_TO, -2.89f, -0.86f, -5, -3.54f, -5, -6.71f,
+R_CUBIC_TO, 0, -3.87f, 3.13f, -7, 7, -7,
+R_CUBIC_TO, 3.17f, 0, 5.85f, 2.11f, 6.71f, 5,
+R_H_LINE_TO, -2.13f,
+R_CUBIC_TO, -0.77f, -1.77f, -2.53f, -3, -4.58f, -3,
+R_CUBIC_TO, -2.76f, 0, -5, 2.24f, -5, 5,
+R_CUBIC_TO, 0, 2.05f, 1.23f, 3.81f, 3, 4.58f,
+CLOSE,
+R_MOVE_TO, 7, -5.71f,
+R_H_LINE_TO, -2.59f,
+R_LINE_TO, 5.07f, 5.07f,
+R_LINE_TO, -1.41f, 1.41f,
+R_LINE_TO, -5.07f, -5.07f,
+R_V_LINE_TO, 2.59f,
+R_H_LINE_TO, -2,
+R_V_LINE_TO, -6,
+R_H_LINE_TO, 6,
+CLOSE
\ No newline at end of file
diff --git a/ash/resources/vector_icons/switch_access_right_click.icon b/ash/resources/vector_icons/switch_access_right_click.icon
new file mode 100644
index 0000000..24d7ea1
--- /dev/null
+++ b/ash/resources/vector_icons/switch_access_right_click.icon
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+CANVAS_DIMENSIONS, 20,
+R_MOVE_TO, 3.07f, 9,
+R_CUBIC_TO, 0.49f, -3.39f, 3.4f, -6, 6.93f, -6,
+R_CUBIC_TO, 3.87f, 0, 7, 3.13f, 7, 7,
+R_CUBIC_TO, 0, 3.17f, -2.11f, 5.85f, -5, 6.71f,
+R_V_LINE_TO, -2.13f,
+R_CUBIC_TO, 1.77f, -0.77f, 3, -2.53f, 3, -4.58f,
+R_CUBIC_TO, 0, -2.76f, -2.24f, -5, -5, -5,
+R_CUBIC_TO, -2.42f, 0, -4.44f, 1.72f, -4.9f, 4,
+CLOSE,
+R_MOVE_TO, 1.9f, 3,
+R_V_LINE_TO, -2,
+R_H_LINE_TO, 6,
+R_V_LINE_TO, 6,
+R_H_LINE_TO, -2,
+R_V_LINE_TO, -2.59f,
+R_LINE_TO, -5.07f, 5.07f,
+R_LINE_TO, -1.41f, -1.41f,
+R_LINE_TO, 5.07f, -5.07f,
+CLOSE
\ No newline at end of file
diff --git a/ash/shelf/home_button_unittest.cc b/ash/shelf/home_button_unittest.cc
index 9d696fc8..5ff42553 100644
--- a/ash/shelf/home_button_unittest.cc
+++ b/ash/shelf/home_button_unittest.cc
@@ -34,6 +34,7 @@
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/views/animation/bounds_animator.h"
+#include "ui/wm/core/coordinate_conversion.h"
 
 namespace ash {
 
@@ -180,6 +181,81 @@
 // is enabled.
 INSTANTIATE_TEST_SUITE_P(All, HomeButtonTest, testing::Bool());
 
+// Tests that the shelf navigation widget clip rect is not clipping the intended
+// home button bounds.
+TEST_P(HomeButtonTest, ClipRectDoesNotClipHomeButtonBounds) {
+  ShelfNavigationWidget* const nav_widget =
+      GetPrimaryShelf()->navigation_widget();
+  ShelfNavigationWidget::TestApi test_api(nav_widget);
+  ASSERT_TRUE(test_api.IsHomeButtonVisible());
+  ASSERT_TRUE(home_button());
+
+  auto home_button_bounds = [&]() -> gfx::Rect {
+    return home_button()->GetBoundsInScreen();
+  };
+
+  auto clip_rect_bounds = [&]() -> gfx::Rect {
+    gfx::Rect clip_bounds = nav_widget->GetLayer()->clip_rect();
+    wm::ConvertRectToScreen(nav_widget->GetNativeWindow(), &clip_bounds);
+    return clip_bounds;
+  };
+
+  std::string display_configs[] = {
+      "1+1-1200x1000",
+      "1+1-1000x1200",
+      "1+1-800x600",
+      "1+1-600x800",
+  };
+
+  for (const auto& display_config : display_configs) {
+    SCOPED_TRACE(display_config);
+    UpdateDisplay(display_config);
+
+    EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+
+    // Enter tablet mode - note that home button may be invisible in this case.
+    Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
+    ShelfViewTestAPI shelf_test_api(
+        GetPrimaryShelf()->GetShelfViewForTesting());
+    shelf_test_api.RunMessageLoopUntilAnimationsDone(
+        test_api.GetBoundsAnimator());
+
+    if (home_button() && test_api.IsHomeButtonVisible())
+      EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+
+    // Create a test widget to transition to in-app shelf.
+    std::unique_ptr<views::Widget> widget = CreateTestWidget();
+    shelf_test_api.RunMessageLoopUntilAnimationsDone(
+        test_api.GetBoundsAnimator());
+
+    if (home_button() && test_api.IsHomeButtonVisible())
+      EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+
+    // Back to home launcher shelf.
+    widget.reset();
+    shelf_test_api.RunMessageLoopUntilAnimationsDone(
+        test_api.GetBoundsAnimator());
+
+    if (home_button() && test_api.IsHomeButtonVisible())
+      EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+
+    // Open another window and go back to clamshell.
+    Shell::Get()->tablet_mode_controller()->SetEnabledForTest(false);
+    widget = CreateTestWidget();
+    shelf_test_api.RunMessageLoopUntilAnimationsDone(
+        test_api.GetBoundsAnimator());
+
+    EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+
+    // Verify bounds after the test widget is closed.
+    widget.reset();
+    shelf_test_api.RunMessageLoopUntilAnimationsDone(
+        test_api.GetBoundsAnimator());
+
+    EXPECT_TRUE(clip_rect_bounds().Contains(home_button_bounds()));
+  }
+}
+
 TEST_P(HomeButtonTest, SwipeUpToOpenFullscreenAppList) {
   Shelf* shelf = GetPrimaryShelf();
   EXPECT_EQ(ShelfAlignment::kBottom, shelf->alignment());
diff --git a/ash/shelf/shelf_navigation_widget.cc b/ash/shelf/shelf_navigation_widget.cc
index a54eaf7..09c28a4 100644
--- a/ash/shelf/shelf_navigation_widget.cc
+++ b/ash/shelf/shelf_navigation_widget.cc
@@ -25,6 +25,7 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/compositor/animation_throughput_reporter.h"
 #include "ui/compositor/layer_animation_observer.h"
+#include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/compositor/throughput_tracker.h"
 #include "ui/gfx/transform_util.h"
@@ -595,7 +596,7 @@
       SetBounds(target_bounds_);
   }
 
-  if (update_bounds && Shell::Get()->IsInTabletMode())
+  if (update_bounds)
     GetLayer()->SetClipRect(clip_rect_);
 
   views::View* const back_button = delegate_->back_button();
@@ -626,7 +627,9 @@
 
   if (animate) {
     if (bounds_animator_->GetTargetBounds(home_button) != home_button_bounds) {
-      bounds_animator_->SetAnimationDuration(animation_duration);
+      bounds_animator_->SetAnimationDuration(
+          ui::ScopedAnimationDurationScaleMode::duration_multiplier() *
+          animation_duration);
       bounds_animator_->AnimateViewTo(
           home_button, home_button_bounds,
           std::make_unique<BoundsAnimationReporter>(
diff --git a/ash/shelf/shelf_widget_unittest.cc b/ash/shelf/shelf_widget_unittest.cc
index b29859f..bfb512f 100644
--- a/ash/shelf/shelf_widget_unittest.cc
+++ b/ash/shelf/shelf_widget_unittest.cc
@@ -347,16 +347,17 @@
   const int kOverlapSize = 15;
   const int kWindowHeight = 200;
   const int kWindowWidth = 200;
+  const gfx::Rect bounds(shelf_bounds.height() - kOverlapSize,
+                         shelf_bounds.y() - kWindowHeight + kOverlapSize,
+                         kWindowWidth, kWindowHeight);
   views::Widget* widget = new views::Widget;
   views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
-  params.bounds = gfx::Rect(shelf_bounds.height() - kOverlapSize,
-                            shelf_bounds.y() - kWindowHeight + kOverlapSize,
-                            kWindowWidth, kWindowHeight);
+  params.bounds = bounds;
   params.context = GetContext();
   // Widget is now owned by the parent window.
   widget->Init(std::move(params));
   // Explicitly set the bounds which will allow the widget to overlap the shelf.
-  widget->SetBounds(params.bounds);
+  widget->SetBounds(bounds);
   widget->Show();
   gfx::Rect widget_bounds = widget->GetWindowBoundsInScreen();
   EXPECT_TRUE(widget_bounds.Intersects(shelf_bounds));
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc
index ce9bab10..a6141832 100644
--- a/ash/shell_unittest.cc
+++ b/ash/shell_unittest.cc
@@ -324,10 +324,9 @@
 }
 
 TEST_F(ShellTest, CreateLockScreenModalWindow) {
+  // Create a normal window.
   views::Widget::InitParams widget_params(
       views::Widget::InitParams::TYPE_WINDOW);
-
-  // Create a normal window.
   views::Widget* widget = CreateTestWindow(std::move(widget_params));
   widget->Show();
   EXPECT_TRUE(widget->GetNativeView()->HasFocus());
@@ -338,7 +337,9 @@
 
   GetSessionControllerClient()->LockScreen();
   // Create a LockScreen window.
-  views::Widget* lock_widget = CreateTestWindow(std::move(widget_params));
+  views::Widget::InitParams lock_widget_params(
+      views::Widget::InitParams::TYPE_WINDOW);
+  views::Widget* lock_widget = CreateTestWindow(std::move(lock_widget_params));
   Shell::GetContainer(Shell::GetPrimaryRootWindow(),
                       kShellWindowId_LockScreenContainer)
       ->AddChild(lock_widget->GetNativeView());
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index cc48eb9..99dd66d 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">የምሽት ብርሃን</translation>
 <translation id="2727175239389218057">ምላሽ ስጥ</translation>
 <translation id="2727977024730340865">አነስተኛ ኃይል ወዳለው ባትሪ መሙያ ተሰክቷል። የባትሪ መሙላት አስተማማኝ ላይሆን ይችላል።</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> የሚተዳደር ነው</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">አሁን ዘግተው እንዲወጡ ይደረጋሉ።</translation>
 <translation id="28232023175184696">ከበይነመረቡ ጋር መገናኘት አልተቻለም። እንደገና ለመሞከር ጠቅ ያድርጉ።</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">ክልል ለመምረጥ ስቲለሱን ይጠቀሙ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ወደ <ph name="ROTATION" /> ዞሯል</translation>
 <translation id="6315170314923504164">ድምፅ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> በ<ph name="MANAGER" /> የሚተዳደር ክፍለ-ጊዜ ነው</translation>
 <translation id="6376931439017688372">ብሉቱዝ በርቷል</translation>
 <translation id="6381109794406942707">መሣሪያውን ለመክፈት የእርስዎን ፒን ያስገቡ።</translation>
 <translation id="639644700271529076">CAPS LOCK ጠፍቷል</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 258d9c6..4d107ba 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -120,7 +120,7 @@
 <translation id="2049240716062114887">تم تغيير اسم سطح المكتب إلى <ph name="DESK_NAME" />.</translation>
 <translation id="2050339315714019657">رأسي</translation>
 <translation id="2067602449040652523">سطوع لوحة المفاتيح</translation>
-<translation id="2078034614700056995">يمكنك التمرير سريعًا لليمين بأربعة أصابع للتبديل إلى سطح المكتب التالي.</translation>
+<translation id="2078034614700056995">يمكنك التمرير سريعًا لليسار بأربعة أصابع للتبديل إلى سطح المكتب التالي.</translation>
 <translation id="2083190527011054446">ليلة سعيدة <ph name="GIVEN_NAME" />،</translation>
 <translation id="209965399369889474">لا يتوفّر اتصال بالشبكة</translation>
 <translation id="2126242104232412123">سطح مكتب جديد</translation>
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">الإضاءة الليلية</translation>
 <translation id="2727175239389218057">الرّد</translation>
 <translation id="2727977024730340865">تمّ توصيل شاحن منخفض الطاقة. لذا قد لا تكون عملية شحن البطارية جديرة بالثقة.</translation>
+<translation id="2778650143428714839">تتم إدارة <ph name="DEVICE_TYPE" /> من خلال <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">‏Alt+مفتاح البحث</translation>
 <translation id="2819276065543622893">سيتم تسجيل خروجك الآن.</translation>
 <translation id="28232023175184696">تعذَّر الاتصال بالإنترنت. يُرجى النقر لإعادة المحاولة.</translation>
@@ -237,7 +238,7 @@
 <translation id="3236488194889173876">ليست هناك شبكة جوّال متاحة</translation>
 <translation id="3249513730522716925">تم نقل النافذة <ph name="WINDOW_TITLE" /> من سطح المكتب <ph name="ACTIVE_DESK" /> إلى سطح المكتب <ph name="TARGET_DESK" />.</translation>
 <translation id="3255483164551725916">ما الإجراء المطلوب؟</translation>
-<translation id="3289674678944039601">‏جارٍ الشحن عبر محوِّل AC.</translation>
+<translation id="3289674678944039601">جارٍ الشحن عبر المحوِّل.</translation>
 <translation id="3290356915286466215">غير مؤمّن</translation>
 <translation id="3294437725009624529">ضيف</translation>
 <translation id="3307642347673023554">تمّ التبديل إلى وضع الكمبيوتر المحمول.</translation>
@@ -474,17 +475,17 @@
 <translation id="54609108002486618">تتم إدارته</translation>
 <translation id="5465662442746197494">هل تريد المساعدة؟</translation>
 <translation id="5496819745535887422">‏يعمل المشرف على إعادة النسخة السابقة من نظام التشغيل Chrome إلى جهازك. وسيتم حذف جميع البيانات عند إعادة تشغيل الجهاز.</translation>
-<translation id="5516420770350073386">لقد أوقف المشرف تسجيل الشاشة بسبب ظهور محتوى محظور على شاشتك.</translation>
+<translation id="5516420770350073386">لقد أوقف المشرف تسجيل الشاشة بسبب المحتوى الذي يظهر على شاشتك.</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166">جارٍ اتصال <ph name="FEATURE_NAME" />.</translation>
-<translation id="5532994612895037630">انقر في أي مكان لالتقاط صورة في وضع ملء الشاشة.</translation>
+<translation id="5532994612895037630">انقر في أي مكان للتسجيل في وضع ملء الشاشة.</translation>
 <translation id="553675580533261935">جارٍ الخروج من الجلسة</translation>
 <translation id="5537725057119320332">إرسال</translation>
 <translation id="554893713779400387">تبديل الإملاء</translation>
 <translation id="556042886152191864">زر</translation>
 <translation id="5571066253365925590">تم تفعيل البلوتوث</translation>
 <translation id="557563299383177668">الفقرة التالية</translation>
-<translation id="55808498489107691">لقد حظر المشرف وضع "التقاط الشاشة" بسبب ظهور محتوى محظور على شاشتك.</translation>
+<translation id="55808498489107691">لقد حظر المشرف وضع "تصوير الشاشة" بسبب المحتوى الذي يظهر على شاشتك.</translation>
 <translation id="558849140439112033">يُرجى السحب لتحديد منطقة لالتقاط صورة لها.</translation>
 <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />، <ph name="DATE" /></translation>
 <translation id="5600837773213129531">‏اضغط على Ctrl + Alt + Z لإيقاف التعليقات والملاحظات المنطوقة</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">استخدام قلم الشاشة لتحديد منطقة</translation>
 <translation id="6310121235600822547">تم تدوير <ph name="DISPLAY_NAME" /> إلى <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">الصوت</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> هي جلسة تتم إدارتها من خلال <ph name="MANAGER" />.</translation>
 <translation id="6376931439017688372">تم تفعيل البلوتوث</translation>
 <translation id="6381109794406942707">لفتح قفل الجهاز، أدخِل رقم التعريف الشخصي.</translation>
 <translation id="639644700271529076">‏مفتاح CAPS LOCK قيد الإيقاف</translation>
@@ -769,7 +771,7 @@
 <translation id="8247060538831475781">حالة الاتصال <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />، بطارية الهاتف <ph name="BATTERY_STATUS" /></translation>
 <translation id="826107067893790409">‏عليك الضغط على Enter لفتح قفل <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8261506727792406068">حذف</translation>
-<translation id="8284362522226889623">يمكنك التمرير سريعًا لليسار بأربعة أصابع للتبديل إلى سطح المكتب السابق.</translation>
+<translation id="8284362522226889623">يمكنك التمرير سريعًا لليمين بأربعة أصابع للتبديل إلى سطح المكتب السابق.</translation>
 <translation id="828708037801473432">غير مُفعَّلة</translation>
 <translation id="8297006494302853456">ضعيفة</translation>
 <translation id="8308637677604853869">القائمة السابقة</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index e16ad2f..736c2a1 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Gecə İşığı</translation>
 <translation id="2727175239389218057">Cavablayın</translation>
 <translation id="2727977024730340865">Zəif şarjerə qoşulub. Ola bilər ki, enerji dolmasın.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> tərəfindən idarə edilir</translation>
 <translation id="2792498699870441125">Alt+Axtarış</translation>
 <translation id="2819276065543622893">Az sonra hesabdan çıxacaqsınız.</translation>
 <translation id="28232023175184696">İnternetə qoşulmaq olmur. Yenidən cəhd etmək üçün klikləyin.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Bölgə seçmək üçün fırçadan istifadə edin</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> tərəfə fırladıldı</translation>
 <translation id="6315170314923504164">Səs</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> sessiyası <ph name="MANAGER" /> tərəfindən idarə olunur</translation>
 <translation id="6376931439017688372">Bluetooth aktivdir</translation>
 <translation id="6381109794406942707">Cihazı kiliddən çıxarmaq üçün PIN'nizi daxil edin.</translation>
 <translation id="639644700271529076">LOCK off CAPS</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index 51d0a5b..c95df43 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Начная падсветка</translation>
 <translation id="2727175239389218057">Адказаць</translation>
 <translation id="2727977024730340865">Падключана зарадная прылада нізкай магутнасці. Зарадка акумулятара можа быць нестабільнай.</translation>
+<translation id="2778650143428714839">Прыладай <ph name="DEVICE_TYPE" /> кіруе <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Пошук</translation>
 <translation id="2819276065543622893">Вы выйдзеце з уліковага запісу зараз.</translation>
 <translation id="28232023175184696">Няма падключэння да інтэрнэту. Націсніце, каб паўтарыць спробу.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Выкарыстоўвайце стыло для выбару рэгіёна</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> павернуты на <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Галасавы ўвод</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – сеанс, якім кіруе <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth уключаны</translation>
 <translation id="6381109794406942707">Каб разблакіраваць прыладу, увядзіце PIN-код.</translation>
 <translation id="639644700271529076">CAPS LOCK выключаны</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 92a161c..1660264 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Нощно осветление</translation>
 <translation id="2727175239389218057">Отговор</translation>
 <translation id="2727977024730340865">Използва се зарядно устройство с малка мощност. Зареждането на батерията може да не е надеждно.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> се управлява от <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + търсене</translation>
 <translation id="2819276065543622893">Ще излезете сега.</translation>
 <translation id="28232023175184696">Няма връзка с интернет. Кликнете, за да опитате отново.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Използвайте писалката, за да изберете област</translation>
 <translation id="6310121235600822547">Завъртяхте „<ph name="DISPLAY_NAME" />“ на <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Глас</translation>
+<translation id="6338485349199627913">„<ph name="DISPLAY_NAME" />“ е сесия, управлявана от <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Функцията за Bluetooth е включена</translation>
 <translation id="6381109794406942707">Въведете ПИН кода си, за да отключите устройството.</translation>
 <translation id="639644700271529076">„CAPS LOCK“ е изключен</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index f7080e2..f6777b1 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -98,6 +98,7 @@
 <translation id="1838895407229022812">নাইট লাইট ফিচার বন্ধ করা আছে।</translation>
 <translation id="1850504506766569011">ওয়াই-ফাই বন্ধ আছে৷</translation>
 <translation id="1864454756846565995">USB-C ডিভাইস (পিছনের পোর্ট)</translation>
+<translation id="1882814835921407042">মোবাইল নেটওয়ার্ক নেই</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> তে প্রতিবিম্বিত হচ্ছে</translation>
 <translation id="1885785240814121742">আঙ্গুলের ছাপ দিয়ে আনলক করুন</translation>
 <translation id="1888656773939766144"><ph name="DISPLAY_NAME" />-এ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> হার্জ) কাজ করে না। রেজোলিউশন পরিবর্তন করে <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) করা হয়েছে। পরিবর্তিত সেটিংস রেখে দিতে 'কনফার্ম করুন' বিকল্পে ক্লিক করুন। <ph name="TIMEOUT_SECONDS" />-এর মধ্যে পুরনো সেটিংসে ফিরিয়ে নিয়ে যাওয়া হবে।</translation>
@@ -119,6 +120,7 @@
 <translation id="2049240716062114887">ডেস্কের নাম পরিবর্তন করে <ph name="DESK_NAME" /> রাখা হয়েছে</translation>
 <translation id="2050339315714019657">প্রতিকৃতি</translation>
 <translation id="2067602449040652523">কীবোর্ডের উজ্জ্বলতা</translation>
+<translation id="2078034614700056995">পরবর্তী ডেস্কে সুইচ করতে, চার আঙুল ব্যবহার করে ডানদিকে সোয়াইপ করুন</translation>
 <translation id="2083190527011054446">শুভরাত্রি <ph name="GIVEN_NAME" />,</translation>
 <translation id="209965399369889474">কোনও নেটওয়ার্কে কানেক্ট করা নেই</translation>
 <translation id="2126242104232412123">নতুন ডেস্ক</translation>
@@ -126,6 +128,7 @@
 <translation id="2132302418721800944">ফুল স্ক্রিন রেকর্ড করুন</translation>
 <translation id="2135456203358955318">ডক করা ম্যাগনিফায়ার</translation>
 <translation id="2158971754079422508"><ph name="DESC_TEXT" />: আবার চেষ্টা করুন</translation>
+<translation id="2170530631236737939">'এক নজরে' মোড থেকে বেরিয়ে আসতে তিনটি আঙুল দিয়ে নিচের দিকে সোয়াইপ করুন</translation>
 <translation id="2208323208084708176">একীভূত ডেস্কটপ মোড</translation>
 <translation id="2220572644011485463">PIN বা পাসওয়ার্ড</translation>
 <translation id="2222338659135520253">সাইন-ইন করা প্রয়োজন</translation>
@@ -234,6 +237,7 @@
 <translation id="3236488194889173876">কোনো মোবাইল নেটওয়ার্ক উপলব্ধ নেই</translation>
 <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> ডেস্ক <ph name="ACTIVE_DESK" /> থেকে ডেস্ক <ph name="TARGET_DESK" />-এ সরানো হয়েছে</translation>
 <translation id="3255483164551725916">আপনি কি করতে পারেন?</translation>
+<translation id="3289674678944039601">অ্যাডাপ্টার দিয়ে চার্জ হচ্ছে</translation>
 <translation id="3290356915286466215">সুরক্ষিত নেই</translation>
 <translation id="3294437725009624529">অতিথি</translation>
 <translation id="3307642347673023554">'ল্যাপটপ' মোডে পাল্টানো হয়েছে</translation>
@@ -292,6 +296,7 @@
 <translation id="3799080171973636491">ফুল-স্ক্রিন ম্যাগনিফায়ারের জন্য আপনি কীবোর্ড শর্টকাট টিপেছেন। আপনি কি এটি চালু করতে চান?</translation>
 <translation id="380165613292957338">হাই, আমি কীভাবে সাহায্য করতে পারি?</translation>
 <translation id="3826099427150913765">যাচাইকরণের জন্য পাসওয়ার্ড ব্যবহার করুন</translation>
+<translation id="383058930331066723">'ব্যাটারি সেভার' মোড চালু আছে</translation>
 <translation id="383629559565718788">কীবোর্ড সেটিংস দেখান</translation>
 <translation id="3846214748874656680">পূর্ণস্ক্রীন থেকে প্রস্থান করুন</translation>
 <translation id="3846575436967432996">কোনো নেটওয়ার্ক সংক্রান্ত তথ্য উপলব্ধ নেই</translation>
@@ -336,6 +341,7 @@
 <translation id="4217571870635786043">ডিক্টেশন</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">স্ক্রিনশট</translation>
+<translation id="425364040945105958">কোনও সিম নেই</translation>
 <translation id="4261870227682513959">বিজ্ঞপ্তি সেটিংস দেখান। বিজ্ঞপ্তি বন্ধ আছে</translation>
 <translation id="4267383818855338811">কোনও ভার্চুয়াল মেশিন আপনার ক্যামেরা ব্যবহার করছে</translation>
 <translation id="4269883910223712419">এই ডিভাইসের প্রশাসক এগুলি করতে পারেন:</translation>
@@ -468,14 +474,17 @@
 <translation id="54609108002486618">পরিচালিত</translation>
 <translation id="5465662442746197494">সাহায্য চান?</translation>
 <translation id="5496819745535887422">আপনার অ্যাডমিনিস্ট্রেটর আপনার ডিভাইসটি রোল ব্যাক করেছেন। ডিভাইসটি রিস্টার্টের সময় সমস্ত ডেটা মুছে ফেলা হবে।</translation>
+<translation id="5516420770350073386">আপনার স্ক্রিনে কন্টেন্ট থাকার জন্য আপনার অ্যাডমিনিস্ট্রেটর স্ক্রিন রেকর্ড করা বন্ধ করে দিয়েছেন।</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166"><ph name="FEATURE_NAME" /> কানেক্ট করা হচ্ছে।</translation>
+<translation id="5532994612895037630">ফুল স্ক্রিন ছবি ক্যাপচার করতে, যেকোনও জায়গায় ট্যাপ করুন</translation>
 <translation id="553675580533261935">সেশন থেকে প্রস্থান করছে</translation>
 <translation id="5537725057119320332">কাস্ট করুন</translation>
 <translation id="554893713779400387">ডিক্টেশন চালু বা বন্ধ করুন</translation>
 <translation id="556042886152191864">বোতাম</translation>
 <translation id="5571066253365925590">ব্লুটুথ সক্ষমিত</translation>
 <translation id="557563299383177668">পরবর্তী অনুচ্ছেদ</translation>
+<translation id="55808498489107691">আপনার স্ক্রিনে কন্টেন্ট থাকার জন্য অ্যাডমিনিস্ট্রেটর স্ক্রিন ক্যাপচারের সুবিধা ব্লক করে দিয়েছেন।</translation>
 <translation id="558849140439112033">যে জায়গার স্ক্রিন ক্যাপচার করতে চান সেটি ড্র্যাগ করে বেছে নিন</translation>
 <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation>
 <translation id="5600837773213129531">কথ্য প্রতিবার্তা বন্ধ করতে Ctrl + Alt + Z টিপুন।</translation>
@@ -526,6 +535,7 @@
 <translation id="602001110135236999">বাঁ দিকে স্ক্রল করুন</translation>
 <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে</translation>
 <translation id="6030495522958826102">স্ক্রিনের নিচে বাঁদিকের কোণায় মেনু সরে গেছে।</translation>
+<translation id="6032620807120418574">ফুল স্ক্রিন ছবি রেকর্ড করতে, যেকোনও জায়গায় ক্লিক করুন</translation>
 <translation id="6040143037577758943">বন্ধ</translation>
 <translation id="6043212731627905357">এই মনিটরটি আপনার <ph name="DEVICE_TYPE" /> এর সাথে তাল মেলাতে পারছে না (মনিটরটি সমর্থিত নয়)।</translation>
 <translation id="6043994281159824495">এখনই সাইন-আউট করুন</translation>
@@ -534,6 +544,7 @@
 <translation id="6059276912018042191">Chrome-এ সম্প্রতি খোলা ট্যাবগুলি</translation>
 <translation id="6062360702481658777">আপনি <ph name="LOGOUT_TIME_LEFT" /> এর মধ্যে স্বয়ংক্রিয়ভাবে প্রস্থান করুন হবেন৷</translation>
 <translation id="607652042414456612">আপনার কম্পিউটার কাছাকাছি ব্লুটুথ ডিভাইসে খুঁজে পাওয়া সম্ভব এবং ঠিকানা <ph name="ADDRESS" /> সমেত "<ph name="NAME" />" হিসাবে প্রদর্শিত হবে</translation>
+<translation id="6119360623251949462"><ph name="CHARGING_STATE" />। <ph name="BATTERY_SAVER_STATE" /></translation>
 <translation id="612734058257491180">Google অ্যাসিস্ট্যান্ট কোনও গেস্ট সেশনে উপলভ্য নয়।</translation>
 <translation id="6137566720514957455"><ph name="USER_EMAIL_ADDRESS" />-এর জন্য, 'অ্যাকাউন্ট সরিয়ে দিন' ডায়ালগ খুলুন</translation>
 <translation id="615957422585914272">অন-স্ক্রিন কীবোর্ড প্রদর্শন করুন</translation>
@@ -549,6 +560,7 @@
 <translation id="6283712521836204486">'বিরক্ত করবে না' মোড বন্ধ আছে</translation>
 <translation id="6284232397434400372">রেজোলিউশন পরিবর্তন করা হয়েছে</translation>
 <translation id="6288235558961782912">পরে অভিভাবকের অনুমতি সহ <ph name="USER_EMAIL_ADDRESS" /> আবার যোগ করা যেতে পারে।</translation>
+<translation id="6291221004442998378">চার্জ হচ্ছে না</translation>
 <translation id="6297287540776456956">একটি অঞ্চল নির্বাচন করতে স্টাইলাস ব্যবহার করুন</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> আবর্তিত হয়েছে</translation>
 <translation id="6315170314923504164">ভয়েস</translation>
@@ -577,6 +589,7 @@
 <translation id="6537924328260219877">সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, ফোনের ব্যাটারি <ph name="BATTERY_STATUS" /></translation>
 <translation id="6542521951477560771"><ph name="RECEIVER_NAME" /> এ কাস্ট করা হচ্ছে</translation>
 <translation id="6559976592393364813">অ্যাডমিনিস্ট্রেটরকে জিজ্ঞাসা করুন</translation>
+<translation id="6570902864550063460">USB দিয়ে চার্জ হচ্ছে</translation>
 <translation id="6585808820553845416"><ph name="SESSION_TIME_REMAINING" /> এর মধ্যে সেশন শেষ হয়ে যাবে৷</translation>
 <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে</translation>
 <translation id="6614169507485700968">গোপনীয়তা স্ক্রিন চালু করা আছে</translation>
@@ -654,6 +667,7 @@
 <translation id="7377169924702866686">Caps Lock চালু আছে৷</translation>
 <translation id="7378203170292176219">রেকর্ড করতে ড্র্যাগ করে কিছুটা জায়গা বেছে নিন</translation>
 <translation id="7378594059915113390">মিডিয়ার নিয়ন্ত্রণ</translation>
+<translation id="7378889811480108604">'ব্যাটারি সেভার' মোড বন্ধ আছে</translation>
 <translation id="7392563512730092880">সেটিংস থেকে আপনি যখন খুশি সেট আপ করে নিতে পারেন।</translation>
 <translation id="7398254312354928459">নেটওয়ার্ক সংযোগ পরিবর্তন করা হয়েছে</translation>
 <translation id="7405710164030118432">ডিভাইসটি আনলক করতে আপনার Family Link-এর অভিভাবকীয় অ্যাক্সেস কোডটি লিখুন</translation>
@@ -703,6 +717,7 @@
 <translation id="7837740436429729974">সময় শেষ</translation>
 <translation id="7842569679327885685">সতর্কতা: পরীক্ষামূলক বৈশিষ্ট্য</translation>
 <translation id="7846634333498149051">কীবোর্ড</translation>
+<translation id="7860671499921112077">'এক নজরে' মোডে প্রবেশ করতে, তিনটি আঙুল দিয়ে উপরের দিকে সোয়াইপ করুন</translation>
 <translation id="7868900307798234037">আঙ্গুলের ছাপ দিয়ে আনলক করা হচ্ছে</translation>
 <translation id="7872786842639831132">বন্ধ আছে</translation>
 <translation id="7886169021410746335">গোপনীয়তা সেটিংস অ্যাডজাস্ট করুন</translation>
@@ -744,6 +759,7 @@
 <translation id="8152092012181020186">বন্ধ করতে Ctrl + W প্রেস করুন।</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> এই সেটিং আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে থাকে।</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> ব্যবহার করা হচ্ছে</translation>
+<translation id="8170567869359129153">মোবাইল নেটওয়ার্ক। সিগন্যাল ক্ষমতা <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">বিজ্ঞপ্তি লুকানো আছে।</translation>
 <translation id="8196787716797768628">একটি অ্যাপ থেকে খুব তাড়াতাড়ি অন্য অ্যাপে যেতে এবং ট্যাবলেট মোডে আপনার Chromebook-এ নেভিগেট করার জন্য জেসচার ফিচার ব্যবহার করুন।</translation>
 <translation id="8200772114523450471">আবার চালু করা</translation>
@@ -753,6 +769,7 @@
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, ফোনের ব্যাটারি <ph name="BATTERY_STATUS" /></translation>
 <translation id="826107067893790409"><ph name="USER_EMAIL_ADDRESS" /> আনলক করতে এন্টার বোতামে প্রেস করুন</translation>
 <translation id="8261506727792406068">মুছুন</translation>
+<translation id="8284362522226889623">পূর্ববর্তী ডেস্কে সুইচ করতে, চার আঙুল ব্যবহার করে বাঁদিকে সোয়াইপ করুন</translation>
 <translation id="828708037801473432">বন্ধ করা আছে</translation>
 <translation id="8297006494302853456">দুর্বল</translation>
 <translation id="8308637677604853869">পূর্ববর্তী মেনু</translation>
@@ -809,6 +826,7 @@
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" />-এ কানেক্ট করুন</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />। <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">ওয়াই-ফাই</translation>
+<translation id="881757059229893486">'ইনপুট পদ্ধতি' সেটিংস</translation>
 <translation id="8825863694328519386">ফিরে যেতে আপনার স্ক্রিনের বাম প্রান্ত থেকে সোয়াইপ করুন</translation>
 <translation id="8828714802988429505">৯০°</translation>
 <translation id="8841375032071747811">ফিরে যাওয়ার বোতাম</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 627adaf..97f85e3 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -58,7 +58,7 @@
 <translation id="1420408895951708260">Activa o desactiva la funció Llum nocturna. <ph name="STATE_TEXT" /></translation>
 <translation id="1420527829902822813">La captura de pantalla s'ha fet i s'ha desat al porta-retalls</translation>
 <translation id="1426410128494586442">Sí</translation>
-<translation id="144853431011121127">Rep les notificacions del telèfon al dispositiu <ph name="DEVICE_TYPE" /></translation>
+<translation id="144853431011121127">Rep les notificacions del telèfon al teu <ph name="DEVICE_TYPE" /></translation>
 <translation id="1455242230282523554">Mostra la configuració d'idioma</translation>
 <translation id="1460620680449458626">El volum està silenciat.</translation>
 <translation id="1467432559032391204">Esquerra</translation>
@@ -352,7 +352,7 @@
 <translation id="4296136865091727875">Esborra les <ph name="COUNT" /> notificacions</translation>
 <translation id="4302592941791324970">No disponible</translation>
 <translation id="4303223480529385476">Desplega l'àrea d'estat</translation>
-<translation id="4315586716182276649">Amplia la connexió a Internet del telèfon, controla la funció No molestis i localitza el teu dispositiu. Consulta des del teu dispositiu <ph name="DEVICE_TYPE" /> les pestanyes de Chrome que tens actives al telèfon.</translation>
+<translation id="4315586716182276649">Amplia la connexió a Internet del telèfon, controla la funció No molestis i localitza el teu dispositiu. Consulta al teu <ph name="DEVICE_TYPE" /> les pestanyes de Chrome actives del telèfon.</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Has premut la tecla de drecera de l'alt contrast. Vols activar-lo?</translation>
 <translation id="4331809312908958774">Chrome OS</translation>
@@ -749,7 +749,7 @@
 <translation id="8054466585765276473">S'està calculant el temps de la bateria.</translation>
 <translation id="8061464966246066292">Contrast alt</translation>
 <translation id="8098591350844501178">Deixa d'emetre la pantalla a <ph name="RECEIVER_NAME" /></translation>
-<translation id="8108657971283652031">Amplia la connexió a Internet del telèfon, controla la funció No molestis i localitza el teu telèfon. Consulta des del teu dispositiu <ph name="DEVICE_TYPE" /> les pestanyes de Chrome que tens actives al telèfon.</translation>
+<translation id="8108657971283652031">Amplia la connexió a Internet del telèfon, controla la funció No molestis i localitza el teu telèfon. Consulta al teu <ph name="DEVICE_TYPE" /> les pestanyes de Chrome actives del telèfon.</translation>
 <translation id="8113423164597455979">Sí, en totes</translation>
 <translation id="8129620843620772246"><ph name="TEMPERATURE_C" /> °C</translation>
 <translation id="8131740175452115882">Confirma</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index dec6f52..001a6ca 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">نور شب</translation>
 <translation id="2727175239389218057">پاسخ دادن</translation>
 <translation id="2727977024730340865">باتری به شارژر برق ضعیف متصل است. شارژ باتری ممکن است قابل اطمینان نباشد.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> تحت مدیریت <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">‏Alt+جستجو</translation>
 <translation id="2819276065543622893">هم‌اکنون از سیستم خارج خواهید شد.</translation>
 <translation id="28232023175184696">اتصال به اینترنت ممکن نیست. برای امتحان مجدد، کلیک کنید.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">از قلم برای انتخاب منطقه استفاده کنید</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> به <ph name="ROTATION" /> چرخانده شد</translation>
 <translation id="6315170314923504164">صدا</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> جلسه مدیریت‌شده‌ای است که توسط <ph name="MANAGER" /> مدیریت می‌شود</translation>
 <translation id="6376931439017688372">بلوتوث روشن است</translation>
 <translation id="6381109794406942707">برای باز کردن قفل دستگاه، پین را وارد کنید.</translation>
 <translation id="639644700271529076">‏CAPS LOCK خاموش است</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index f0b1b67..aead260 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Yövalo</translation>
 <translation id="2727175239389218057">Vastaa</translation>
 <translation id="2727977024730340865">Pienitehoinen laturi kytketty. Akku ei ehkä lataudu luotettavasti.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" />: ylläpitäjä on <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + haku</translation>
 <translation id="2819276065543622893">Sinut kirjataan ulos nyt.</translation>
 <translation id="28232023175184696">Ei internetyhteyttä. Yritä uudelleen klikkaamalla.</translation>
@@ -535,7 +536,7 @@
 <translation id="602001110135236999">Vieritä vasemmalle</translation>
 <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signaalin vahvuus <ph name="SIGNAL_STRENGTH" />, järjestelmänvalvojan hallinnoima</translation>
 <translation id="6030495522958826102">Valikko siirretty näytön vasempaan alanurkkaan</translation>
-<translation id="6032620807120418574">Ota koko ruudun kuvakaappaus klikkaamalla minne tahansa</translation>
+<translation id="6032620807120418574">Ota kuvakaappaus koko näytöstä klikkaamalla minne tahansa</translation>
 <translation id="6040143037577758943">Sulje</translation>
 <translation id="6043212731627905357">Näyttö ja <ph name="DEVICE_TYPE" /> eivät sovi yhteen (näyttöä ei tueta).</translation>
 <translation id="6043994281159824495">Kirjaudu ulos nyt</translation>
@@ -565,6 +566,7 @@
 <translation id="6297287540776456956">Valitse alue näyttökynällä.</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> käännettiin asentoon <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Ääni</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> on ylläpidetty käyttökerta, jota ylläpitää <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth on päällä</translation>
 <translation id="6381109794406942707">Avaa laitteen lukitus lisäämällä PIN-koodisi.</translation>
 <translation id="639644700271529076">CAPS LOCK on pois päältä</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 075ae24..6ead4ee 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Night Light</translation>
 <translation id="2727175239389218057">Sumagot</translation>
 <translation id="2727977024730340865">Naka-saksak sa isang low-power charger. Maaaring hindi maging tiyak ang pag-charge ng baterya.</translation>
+<translation id="2778650143428714839">Pinapamahalaan ng <ph name="MANAGER" /> ang <ph name="DEVICE_TYPE" /></translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">Masa-sign out ka ngayon.</translation>
 <translation id="28232023175184696">Hindi makakonekta sa internet. I-click para subukan ulit.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Gamitin ang stylus upang pumili ng rehiyon</translation>
 <translation id="6310121235600822547">Na-rotate ang <ph name="DISPLAY_NAME" /> sa <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voice</translation>
+<translation id="6338485349199627913">Ang <ph name="DISPLAY_NAME" /> ay isang session na pinapamahalaan ng <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Naka-on ang Bluetooth</translation>
 <translation id="6381109794406942707">Para i-unlock ang device, ilagay ang iyong PIN.</translation>
 <translation id="639644700271529076">Naka-off ang CAPS LOCK</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index dab701b..45023c1 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Éclairage nocturne</translation>
 <translation id="2727175239389218057">Répondre</translation>
 <translation id="2727977024730340865">L'appareil est branché à un chargeur de faible puissance. Il se peut que la recharge de la batterie ne soit pas fiable.</translation>
+<translation id="2778650143428714839">Ce <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Recherche</translation>
 <translation id="2819276065543622893">Vous allez maintenant être déconnecté.</translation>
 <translation id="28232023175184696">Impossible de se connecter à Internet. Cliquez pour réessayer.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Utilisez un stylet pour sélectionner une zone</translation>
 <translation id="6310121235600822547">L'écran <ph name="DISPLAY_NAME" /> a été pivoté de <ph name="ROTATION" />.</translation>
 <translation id="6315170314923504164">Voix</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> est une session gérée par <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Le Bluetooth est activé</translation>
 <translation id="6381109794406942707">Pour déverrouiller l'appareil, entrez votre NIP.</translation>
 <translation id="639644700271529076">Touche de verrouillage des majuscules désactivée</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 45697a6..3ef412d 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -128,7 +128,7 @@
 <translation id="2132302418721800944">Enregistrer tout l'écran</translation>
 <translation id="2135456203358955318">Loupe ancrée</translation>
 <translation id="2158971754079422508"><ph name="DESC_TEXT" /> : Réessayez</translation>
-<translation id="2170530631236737939">Balayez l'écran vers le bas avec trois doigts pour quitter l'aperçu</translation>
+<translation id="2170530631236737939">Balayez l'écran vers le bas avec trois doigts pour quitter l'Aperçu</translation>
 <translation id="2208323208084708176">Mode bureau unifié</translation>
 <translation id="2220572644011485463">Code ou mot de passe</translation>
 <translation id="2222338659135520253">Connexion requise</translation>
@@ -535,7 +535,7 @@
 <translation id="602001110135236999">Vers la gauche</translation>
 <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" />, géré par votre administrateur</translation>
 <translation id="6030495522958826102">Le menu a été déplacé dans l'angle inférieur gauche de l'écran.</translation>
-<translation id="6032620807120418574">Cliquez n'importe où pour enregistrer tout l'écran</translation>
+<translation id="6032620807120418574">Cliquez n'importe où pour capturer tout l'écran</translation>
 <translation id="6040143037577758943">Fermer</translation>
 <translation id="6043212731627905357">Ce moniteur ne fonctionne pas avec votre <ph name="DEVICE_TYPE" /> (il n'est pas compatible).</translation>
 <translation id="6043994281159824495">Se déconnecter maintenant</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index bfe6a82..a2d2553 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727175239389218057">Responder</translation>
 <translation id="2727977024730340865">Conectado a un cargador de baixa potencia. É posible que a carga da batería non sexa fiable.</translation>
+<translation id="2778650143428714839"><ph name="MANAGER" /> xestiona este dispositivo (<ph name="DEVICE_TYPE" />)</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">Pecharase a túa sesión agora.</translation>
 <translation id="28232023175184696">Non foi posible conectarse a Internet. Facer clic para tentalo de novo.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">Utiliza o lapis óptico para seleccionar unha área</translation>
 <translation id="6310121235600822547">A rotación de <ph name="DISPLAY_NAME" /> cambiou a <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voz</translation>
+<translation id="6338485349199627913"><ph name="MANAGER" /> xestiona esta sesión (<ph name="DISPLAY_NAME" />)</translation>
 <translation id="6376931439017688372">O Bluetooth está activado</translation>
 <translation id="6381109794406942707">Para desbloquear o dispositivo escribe o PIN.</translation>
 <translation id="639644700271529076">O bloqueo de maiúsculas está desactivado</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 55eb9d78..f0a64e5 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">नाइट लाइट</translation>
 <translation id="2727175239389218057">जवाब दें</translation>
 <translation id="2727977024730340865">कम-शक्ति वाले चार्जर में प्लग इन करें. बैटरी चार्ज करना संभवत: विश्वसनीय नहीं होगा.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> को <ph name="MANAGER" /> प्रबंधित करता है</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">अब आप प्रस्थान कर जाएंगे.</translation>
 <translation id="28232023175184696">इंटरनेट से कनेक्ट नहीं किया जा सका. फिर से कोशिश करने के लिए क्लिक करें.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">कोई क्षेत्र चुनने के लिए स्टाइलस का उपयोग करें</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> को <ph name="ROTATION" /> पर घुमाया गया</translation>
 <translation id="6315170314923504164">ध्वनि</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> एक प्रबंधित सत्र है. इसे <ph name="MANAGER" /> प्रबंधित करता है</translation>
 <translation id="6376931439017688372">ब्लूटूथ चालू है</translation>
 <translation id="6381109794406942707">यह डिवाइस अनलॉक करने के लिए, अपना पिन डालें.</translation>
 <translation id="639644700271529076">CAPS LOCK बंद है</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 9b6147d..db38f01 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Éjszakai fény</translation>
 <translation id="2727175239389218057">Válasz</translation>
 <translation id="2727977024730340865">Kis teljesítményű töltőt csatlakoztatott. Az akkumulátor töltése nem megbízható.</translation>
+<translation id="2778650143428714839">A(z) <ph name="DEVICE_TYPE" /> kezelője: <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Keresés</translation>
 <translation id="2819276065543622893">A rendszer most kijelentkezteti Önt.</translation>
 <translation id="28232023175184696">Nem lehet csatlakozni az internethez. Kattintson az újrapróbálkozáshoz.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">Terület kijelöléséhez használja az érintőceruzát</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> elfordult erre: <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Hang</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – <ph name="MANAGER" /> által kezelt munkamenet</translation>
 <translation id="6376931439017688372">A Bluetooth be van kapcsolva</translation>
 <translation id="6381109794406942707">Az eszköz feloldásához adja meg a PIN-kódot.</translation>
 <translation id="639644700271529076">A CAPS LOCK ki van kapcsolva</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 9824238f..4024766 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Գիշերային ռեժիմ</translation>
 <translation id="2727175239389218057">Պատասխանել</translation>
 <translation id="2727977024730340865">Միացված է թույլ լիցքավորիչի: Մարտկոցի լիցքավորումը կարող է հուսալի չլինել:</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> սարքը կառավարվում է <ph name="MANAGER" />-ի կողմից</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">Դուք հիմա դուրս կգրվեք:</translation>
 <translation id="28232023175184696">Չհաջողվեց միանալ ինտերնետին։ Սեղմեք՝ նորից փորձելու համար:</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Հատվածն ընտրեք ստիլուսի միջոցով</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />՝ պտտված է <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Ձայնային</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> աշխատաշրջանը կառավարվում է <ph name="MANAGER" />-ի կողմից</translation>
 <translation id="6376931439017688372">Bluetooth-ը միացված է</translation>
 <translation id="6381109794406942707">Սարքն ապակողպելու համար մուտքագրեք ձեր PIN կոդը։</translation>
 <translation id="639644700271529076">CAPS LOCK-ն անջատված է</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index f5f106d..fe97edf 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -758,7 +758,7 @@
 <translation id="8152092012181020186">Tekan Ctrl + W untuk menutup.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Setelan ini dikelola oleh administrator Anda.</translation>
 <translation id="8167567890448493835">Menggunakan <ph name="LOCALE_NAME" /></translation>
-<translation id="8170567869359129153">Jaringan seluler. Kekuatan sinyal dari <ph name="SIGNAL_STRENGTH" /></translation>
+<translation id="8170567869359129153">Jaringan seluler. Kekuatan sinyal <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Notifikasi disembunyikan.</translation>
 <translation id="8196787716797768628">Gunakan gestur untuk berpindah-pindah aplikasi dengan cepat dan berinteraksi dengan Chromebook dalam mode tablet.</translation>
 <translation id="8200772114523450471">Lanjutkan</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index d17ec1d..1a721e4 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -484,7 +484,7 @@
 <translation id="556042886152191864">ボタン</translation>
 <translation id="5571066253365925590">Bluetooth オン</translation>
 <translation id="557563299383177668">次の段落</translation>
-<translation id="55808498489107691">画面上のコンテンツに問題があるため、管理者によって画面キャプチャがブロックされました。</translation>
+<translation id="55808498489107691">画面上のコンテンツに問題があるため、管理者によってスクリーン キャプチャがブロックされました。</translation>
 <translation id="558849140439112033">キャプチャする領域をドラッグして選択してください</translation>
 <translation id="5597451508971090205"><ph name="DATE" /> (<ph name="SHORT_WEEKDAY" />)</translation>
 <translation id="5600837773213129531">音声フィードバックを無効にするには Ctrl+Alt+Z を押してください。</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 3d1d7f9..b0d45595 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Түнгі жарық</translation>
 <translation id="2727175239389218057">Жауап беру</translation>
 <translation id="2727977024730340865">Төмен қуатты зарядтағышқа жалғанған. Батареяны зарядтау кезінде қиындықтар болуы мүмкін.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> құрылғысын <ph name="MANAGER" /> басқарады.</translation>
 <translation id="2792498699870441125">Alt+Іздеу</translation>
 <translation id="2819276065543622893">Жүйеден қазір шығасыз.</translation>
 <translation id="28232023175184696">Интернетке қосыла алмай жатыр. Әрекетті қайталау үшін түртіңіз.</translation>
@@ -474,7 +475,7 @@
 <translation id="54609108002486618">Басқарылады</translation>
 <translation id="5465662442746197494">Көмек керек пе?</translation>
 <translation id="5496819745535887422">Әкімші құрылғыны алдыңғы нұсқаға қайтаруда. Құрылғы қайта қосылған кезде, барлық деректер жойылады.</translation>
-<translation id="5516420770350073386">Құпия мазмұнның болуына байланысты әкімші экранды бейнеге жазуды тоқтатты.</translation>
+<translation id="5516420770350073386">Экраныңыздағы мазмұнға байланысты әкімші экранды бейнеге жазуды тоқтатты.</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166"><ph name="FEATURE_NAME" /> қосылуда.</translation>
 <translation id="5532994612895037630">Толық экранды жазу үшін кез келген жерді басыңыз.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Бөлікті таңдау үшін стилусты таңдаңыз</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> дисплейі <ph name="ROTATION" /> бағытында бұрылды</translation>
 <translation id="6315170314923504164">Микрофон</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – <ph name="MANAGER" /> басқаратын сеанс.</translation>
 <translation id="6376931439017688372">Bluetooth қосулы</translation>
 <translation id="6381109794406942707">Құрылғының құлпын ашу үшін PIN кодын енгізіңіз.</translation>
 <translation id="639644700271529076">CAPS LOCK өшірулі</translation>
@@ -666,7 +668,7 @@
 <translation id="7377169924702866686">Caps Lock қосулы.</translation>
 <translation id="7378203170292176219">Жазуға керек аймақты таңдау үшін сүйреңіз.</translation>
 <translation id="7378594059915113390">Медианы басқару элементтері</translation>
-<translation id="7378889811480108604">Қуатты үнемдеу режимі өшірулі.</translation>
+<translation id="7378889811480108604">Батареяны үнемдеу режимі өшірулі.</translation>
 <translation id="7392563512730092880">Мұны кейінірек "Параметрлер" бөлімінде реттей аласыз.</translation>
 <translation id="7398254312354928459">Желі ауысты</translation>
 <translation id="7405710164030118432">Құрылғының құлпын ашу үшін Family Link ата-анаға арналған кіру кодын енгізіңіз.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index e15f4bc..81eb9cf 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">ពន្លឺពេលយប់</translation>
 <translation id="2727175239389218057">ឆ្លើយតប</translation>
 <translation id="2727977024730340865">បានដោតទៅឆ្នាំងសាកថាមពលខ្សោយ។ ការសាកថ្មប្រហែលជាមិនអាចជឿជាក់បានទេ។</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> ស្ថិតក្រោម​ការគ្រប់គ្រងរបស់ <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+ស្វែងរក</translation>
 <translation id="2819276065543622893">អ្នកនឹងត្រូវចាកចេញឥឡូវនេះ។</translation>
 <translation id="28232023175184696">មិនអាចភ្ជាប់អ៊ីនធឺណិតបានទេ។ សូមចុច​ដើម្បី​ព្យាយាម​ម្ដង​ទៀត។</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">ប្រើប៊ិចដើម្បីជ្រើសរើសតំបន់</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ត្រូវបានបង្វិលទៅ <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">សម្លេង</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> គឺជា​រយៈពេល​ចូលប្រើ​ដែល​ស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">ប៊្លូធូស​ត្រូវបាន​បើក</translation>
 <translation id="6381109794406942707">ដើម្បីដោះសោឧបករណ៍នេះ សូមបញ្ចូលកូដ PIN របស់អ្នក។</translation>
 <translation id="639644700271529076">CAPS LOCK ត្រូវបានបិទ</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index b397a58..cce351c 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">ನೈಟ್ ಲೈಟ್</translation>
 <translation id="2727175239389218057">ಪ್ರತ್ಯುತ್ತರಿಸಿ</translation>
 <translation id="2727977024730340865">ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್‌ಗೆ ಪ್ಲಗ್ ಮಾಡಲಾಗಿದೆ. ಬ್ಯಾಟರಿ ಚಾರ್ಜಿಂಗ್ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲದಿರಬಹುದು.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು <ph name="MANAGER" /> ನಿರ್ವಹಿಸುತ್ತಿದೆ</translation>
 <translation id="2792498699870441125">Alt+ಹುಡುಕಾಟ</translation>
 <translation id="2819276065543622893">ಈಗ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="28232023175184696">ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">ಪ್ರದೇಶವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಸ್ಟೈಲಸ್ ಬಳಸಿ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ಅನ್ನು <ph name="ROTATION" /> ಗೆ ತಿರುಗಿಸಲಾಗಿದೆ</translation>
 <translation id="6315170314923504164">ಧ್ವನಿ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ಎಂಬುದು <ph name="MANAGER" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾದ ಒಂದು ನಿರ್ವಹಿಸಿದ ಸೆಶನ್ ಆಗಿದೆ</translation>
 <translation id="6376931439017688372">ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ</translation>
 <translation id="6381109794406942707">ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ನಿಮ್ಮ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ.</translation>
 <translation id="639644700271529076">CAPS LOCK ಆಫ್ ಆಗಿದೆ</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index a0124c9..fac39f16 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Түнкү режим</translation>
 <translation id="2727175239389218057">Жооп берүү</translation>
 <translation id="2727977024730340865">Кубаттуулугу төмөн кубаттагычка сайылды. Батареяны кубаттоо аракети ишенимдүү эмес.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> түзмөгү <ph name="MANAGER" /> тарабынан башкарылат</translation>
 <translation id="2792498699870441125">Alt+Издөө</translation>
 <translation id="2819276065543622893">Сиз азыр чыгарыласыз.</translation>
 <translation id="28232023175184696">Интернетке туташпай жатат. Кайра аракет кылуу үчүн таптап коюңуз.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Тандалган бөлүктө стилусту колдонуу</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> буга <ph name="ROTATION" /> айланды</translation>
 <translation id="6315170314923504164">Үн</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – <ph name="MANAGER" /> тарабынан башкарылган сеанс</translation>
 <translation id="6376931439017688372">Bluetooth күйүк</translation>
 <translation id="6381109794406942707">Түзмөктүн кулпусун ачуу үчүн PIN кодуңузду киргизиңиз.</translation>
 <translation id="639644700271529076">CAPS LOCK өчүк</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index b99623d..98c23f48 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -98,7 +98,7 @@
 <translation id="1838895407229022812">ແສງກາງຄືນປິດຢູ່.</translation>
 <translation id="1850504506766569011">Wi​-Fi ປິດແລ້ວ​.</translation>
 <translation id="1864454756846565995">ອຸ​ປະ​ກອນ USB-C (ຜອດ​ດ້ານຫຼັງ)</translation>
-<translation id="1882814835921407042">ບໍ່ມີເຄືອຂ່າຍ</translation>
+<translation id="1882814835921407042">ບໍ່ມີເຄືອຂ່າຍມືຖື</translation>
 <translation id="1882897271359938046">ການສ່ອງໜ້າຈໍໃສ່ <ph name="DISPLAY_NAME" /></translation>
 <translation id="1885785240814121742">ປົດລັອກດ້ວຍລາຍນີ້ວມື</translation>
 <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ບໍ່ຮອງຮັບ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). ຄວາມລະອຽດໄດ້ຖືກປ່ຽນເປັນ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) ແລ້ວ. ກະລຸນາຄລິກຢືນຢັນເພື່ອຮັກສາການປ່ຽນແປງ. ລະບົບຈະກູ້ຄືນການຕັ້ງຄ່າກ່ອນໜ້າໃນ <ph name="TIMEOUT_SECONDS" />.</translation>
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">ແສງກາງຄືນ</translation>
 <translation id="2727175239389218057">ຕອບກັບ</translation>
 <translation id="2727977024730340865">ສຽບໃສ່ເຄື່ອງສາກໄຟຕໍ່າແລ້ວ. ການສາກແບັດເຕີຣີອາດຈະບໍ່ເຊື່ອຖືໄດ້.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> ທີ່ຖືກຈັດການໂດຍ <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+ຊອກຫາ</translation>
 <translation id="2819276065543622893">ທ່ານຈະຖືກອອກຈາກລະບົບດຽວນີ້.</translation>
 <translation id="28232023175184696">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບອິນເຕີເນັດໄດ້. ຄລິກເພື່ອລອງໃໝ່.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">ໃຊ້ປາຍປາກກາເພື່ອເລືອກພື້ນທີ່</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />ຖືກໝຸນໄປທີ່<ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">ສຽງ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ແມ່ນເຊດຊັນແບບມີການຈັດການທີ່ຖືກຈັດການໂດຍ <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth ເປີດຢູ່</translation>
 <translation id="6381109794406942707">ເພື່ອປົດລັອກອຸປະກອນ, ກະລຸນາປ້ອນ PIN ຂອງທ່ານ.</translation>
 <translation id="639644700271529076">CAPS LOCK ປິດ</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index fd9af02..d448218 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Nakts režīms</translation>
 <translation id="2727175239389218057">Atbildēt</translation>
 <translation id="2727977024730340865">Pievienots lādētājs ar mazu strāvas padevi. Akumulatora uzlāde var nebūt uzticama.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> ierīci pārvalda <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Meklēt</translation>
 <translation id="2819276065543622893">Jūs tagad tiksiet izrakstīts.</translation>
 <translation id="28232023175184696">Nevar izveidot savienojumu ar internetu. Noklikšķiniet, lai mēģinātu vēlreiz.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Izmantojiet skārienekrāna pildspalvu, lai atlasītu ekrāna daļu.</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> tika pagriezts šādi: <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Balss</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ir pārvaldīta sesija, ko pārvalda <ph name="MANAGER" />.</translation>
 <translation id="6376931439017688372">Bluetooth ir ieslēgts</translation>
 <translation id="6381109794406942707">Lai atbloķētu ierīci, ievadiet PIN.</translation>
 <translation id="639644700271529076">Funkcija CAPS LOCK ir izslēgta.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index dc141ee..cf812f0 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -128,7 +128,7 @@
 <translation id="2132302418721800944">പൂർണ്ണ സ്ക്രീൻ റെക്കോർഡ് ചെയ്യുക</translation>
 <translation id="2135456203358955318">ഡോക്ക് ചെയ്‌ത മാഗ്‌നിഫയർ</translation>
 <translation id="2158971754079422508"><ph name="DESC_TEXT" />: വീണ്ടും ശ്രമിക്കുക</translation>
-<translation id="2170530631236737939">അവലോകനത്തിൽ നിന്ന് പുറത്ത് കടക്കാൻ മൂന്നുവിരലുകൾ ഉപയോഗിച്ച് താഴേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation>
+<translation id="2170530631236737939">അവലോകനത്തിൽ നിന്ന് പുറത്ത് കടക്കാൻ മൂന്നു വിരലുകൾ ഉപയോഗിച്ച് താഴേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation>
 <translation id="2208323208084708176">ഏകീകൃത ഡെസ്‌ക്‌ടോപ്പ് മോഡ്</translation>
 <translation id="2220572644011485463">പിൻ അല്ലെങ്കിൽ പാസ്‌വേഡ്</translation>
 <translation id="2222338659135520253">സൈൻ ഇൻ ചെയ്യേണ്ടത് ആവശ്യമാണ്</translation>
@@ -297,7 +297,7 @@
 <translation id="3799080171973636491">നിങ്ങൾ പൂർണ്ണ സ്‌ക്രീൻ മാഗ്നിഫയറിനുള്ള കീബോഡ് കുറുക്കുവഴി അമർത്തി. അത് ഓണാക്കണോ?</translation>
 <translation id="380165613292957338">ഹായ്, എന്ത് സഹായമാണ് വേണ്ടത്?</translation>
 <translation id="3826099427150913765">പാസ്‌വേഡിലേക്ക് മാറുക</translation>
-<translation id="383058930331066723">ബാറ്ററി ലാഭിക്കൽ ഓണാണ്</translation>
+<translation id="383058930331066723">ബാറ്ററി ലാഭിക്കൽ മോഡ് ഓണാണ്</translation>
 <translation id="383629559565718788">കീബോഡ് ക്രമീകരണം കാണിക്കുക</translation>
 <translation id="3846214748874656680">പൂർണ്ണ സ്‌ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക</translation>
 <translation id="3846575436967432996">നെറ്റ്‌വർക്ക് വിവരങ്ങളൊന്നും ലഭ്യമല്ല</translation>
@@ -718,7 +718,7 @@
 <translation id="7837740436429729974">സമയം കഴിഞ്ഞു</translation>
 <translation id="7842569679327885685">മുന്നറിയിപ്പ്: പരീക്ഷണാത്മക ഫീച്ചർ</translation>
 <translation id="7846634333498149051">കീബോർഡ്</translation>
-<translation id="7860671499921112077">അവലോകനത്തിലേക്ക് കടക്കാൻ മൂന്നുവിരലുകൾ ഉപയോഗിച്ച് മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation>
+<translation id="7860671499921112077">അവലോകനത്തിലേക്ക് കടക്കാൻ മൂന്നു വിരലുകൾ ഉപയോഗിച്ച് മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation>
 <translation id="7868900307798234037">വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുന്നു</translation>
 <translation id="7872786842639831132">ഓഫാണ്</translation>
 <translation id="7886169021410746335">സ്വകാര്യതാ ക്രമീകരണം ശരിയാക്കുക</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 25cb6cd..97ca9a1 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Шөнийн гэрэл</translation>
 <translation id="2727175239389218057">Хариулах</translation>
 <translation id="2727977024730340865">Бага энергитэй цэнэглэгч залгасан байна. Тэжээлийг цэнэглэхгүй байж болох юм.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" />-г <ph name="MANAGER" /> удирддаг</translation>
 <translation id="2792498699870441125">Alt+ Хайлт</translation>
 <translation id="2819276065543622893">Та нэвтрэх хэсгээс яг одоо гарч байна.</translation>
 <translation id="28232023175184696">Интернэтэд холбогдох боломжгүй байна. Дахин оролдохын тулд товшино уу.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">Бүс сонгохын тулд мэдрэгч үзэг ашиглах</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> -ийг  <ph name="ROTATION" /> руу эргүүлсэн</translation>
 <translation id="6315170314923504164">Дуу хоолой</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> нь <ph name="MANAGER" />-н удирддаг хяналттай харилцан үйлдэл юм</translation>
 <translation id="6376931439017688372">Bluetooth асаалттай байна</translation>
 <translation id="6381109794406942707">Төхөөрөмжийн түгжээг тайлахын тулд ПИН-ээ оруулна уу.</translation>
 <translation id="639644700271529076">CAPS LOCK идэвхгүй байна</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index a821d02..a6e3ac6 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Cahaya Malam</translation>
 <translation id="2727175239389218057">Balas</translation>
 <translation id="2727977024730340865">Dipalamkan pada pengecas berkuasa rendah. Pengecasan bateri mungkin tidak boleh diharapkan.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> diurus oleh <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">Anda akan dilog keluar sekarang.</translation>
 <translation id="28232023175184696">Tidak dapat menyambung kepada Internet. Klik untuk mencuba lagi.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">Gunakan stilus untuk memilih bahagian</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> telah diputarkan ke <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Suara</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ialah sesi terurus yang diurus oleh <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth dihidupkan</translation>
 <translation id="6381109794406942707">Untuk membuka kunci peranti, masukkan PIN anda.</translation>
 <translation id="639644700271529076">Kekunci CAPS LOCK dimatikan</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 8e8f19e84..f6ce797 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">ညအလင်းရောင်</translation>
 <translation id="2727175239389218057">စာပြန်ရန်</translation>
 <translation id="2727977024730340865">ပါဝါနည်းသည့် အားသွင်းကိရိယာသို့ ချိတ်ဆက်ထားသည်။ ဘတ်ထရီအားသွင်းခြင်း အားကိုး၍ရမည် မဟုတ်ပါ။</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> ကို <ph name="MANAGER" /> က စီမံခန့်ခွဲသည်</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">သင်ယခု ထွက်ပါမည်။</translation>
 <translation id="28232023175184696">အင်တာနက်သို့ ချိတ်ဆက်၍မရပါ။ ထပ်စမ်းကြည့်ရန် နှိပ်ပါ။</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">အစိတ်အပိုင်းကိုရွေးရန် စတိုင်လက်စ်ခဲတံအား အသုံးပြုပါ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ကို <ph name="ROTATION" />ဆီသို့ လှည့်ပေးခဲ့</translation>
 <translation id="6315170314923504164">အသံ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> သည် <ph name="MANAGER" /> က စီမံခန့်ခွဲထားသည့် စက်ရှင်ဖြစ်သည်</translation>
 <translation id="6376931439017688372">ဘလူးတုသ်ကို ဖွင့်ထားသည်</translation>
 <translation id="6381109794406942707">ဤစက်ကိုဖွင့်ရန် သင့်ပင်နံပါတ် ထည့်ပါ။</translation>
 <translation id="639644700271529076">စာလုံးကြီးများကို နှိပ်မထား</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index fae187a..47cf0f6 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -67,7 +67,7 @@
 <translation id="1503394326855300303">यो मालिक खाता मल्टिपल साइन-इन सत्रमा पहिलो पटक साइन-इन गरिएको खाता हुनुपर्दछ।</translation>
 <translation id="1510238584712386396">लन्चर</translation>
 <translation id="1516740043221086139">बाधा नपुर्‍याउनुहोस् नामक मोड सक्रिय छ।</translation>
-<translation id="1520303207432623762">{NUM_APPS,plural, =1{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। एउटा अनुप्रयोगका लागि सूचनाहरू निष्क्रिय छन्}other{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। # अनुप्रयोगका लागि सूचनाहरू निष्क्रिय छन्}}</translation>
+<translation id="1520303207432623762">{NUM_APPS,plural, =1{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। एउटा एपका लागि सूचनाहरू निष्क्रिय छन्}other{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। # एपका लागि सूचनाहरू निष्क्रिय छन्}}</translation>
 <translation id="1525508553941733066">खारेज गर्नुहोस्</translation>
 <translation id="15373452373711364">ठुलो माउस कर्सर</translation>
 <translation id="1546492247443594934">डेस्क २</translation>
@@ -477,7 +477,7 @@
 <translation id="5516420770350073386">तपाईंको स्क्रिनमा गोप्य सामग्री भएका कारण तपाईंका एड्मिनले स्क्रिन रेकर्ड गर्ने कार्य बन्द गर्नुभएको छ।</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166"><ph name="FEATURE_NAME" /> कनेक्ट हुँदै छ।</translation>
-<translation id="5532994612895037630">स्क्रिनको सबै भाग रेकर्ड गर्न कुनै पनि ठाउँमा ट्याप गर्नुहोस्</translation>
+<translation id="5532994612895037630">फुल स्क्रिनमा रेकर्ड गर्न कुनै पनि ठाउँमा ट्याप गर्नुहोस्</translation>
 <translation id="553675580533261935">सत्रबाट बाहिर जाँदै</translation>
 <translation id="5537725057119320332">कास्ट गर्नु</translation>
 <translation id="554893713779400387">श्रुतिलेखन सुविधा टगल गर्नुहोस्</translation>
@@ -535,7 +535,7 @@
 <translation id="602001110135236999">बायाँतिर स्क्रोल गर्नुहोस्</translation>
 <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, सिग्नलको क्षमता <ph name="SIGNAL_STRENGTH" />, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ</translation>
 <translation id="6030495522958826102">मेनु सारेर स्क्रिनको फेदको बायाँ कुनामा लगियो।</translation>
-<translation id="6032620807120418574">स्क्रिनको सबै भाग रेकर्ड गर्न कुनै पनि ठाउँमा क्लिक गर्नुहोस्</translation>
+<translation id="6032620807120418574">फुल स्क्रिनमा रेकर्ड गर्न कुनै पनि ठाउँमा क्लिक गर्नुहोस्</translation>
 <translation id="6040143037577758943">बन्द गर्नुहोस्</translation>
 <translation id="6043212731627905357">तपाईंको मनिटरले <ph name="DEVICE_TYPE" /> सँग राम्ररी काम गरिरहेको छैन (यस मनिटरलाई समर्थन छैन)।</translation>
 <translation id="6043994281159824495">अहिले साइन आउट गर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 86c069b..b9b3e6b 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Nachtlicht</translation>
 <translation id="2727175239389218057">Reageren</translation>
 <translation id="2727977024730340865">Aangesloten op een laag-vermogen-lader. Opladen van de batterij mogelijk niet betrouwbaar.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> beheerd door <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Zoeken</translation>
 <translation id="2819276065543622893">Je wordt nu uitgelogd.</translation>
 <translation id="28232023175184696">Kan geen verbinding maken met internet. Klik om het opnieuw te proberen.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Gebruik de stylus om een gebied te selecteren</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> is gedraaid naar <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Spraak</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> is een beheerde sessie die wordt beheerd door <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth is ingeschakeld</translation>
 <translation id="6381109794406942707">Geef je pincode op om het apparaat te ontgrendelen.</translation>
 <translation id="639644700271529076">CAPS LOCK is uitgeschakeld</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index a8902ce..5f8b61f 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -128,7 +128,7 @@
 <translation id="2132302418721800944">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ ରେକର୍ଡ କରନ୍ତୁ</translation>
 <translation id="2135456203358955318">ଡକ୍‌ଡ ମ୍ୟାଗ୍ନିଫାୟର୍</translation>
 <translation id="2158971754079422508"><ph name="DESC_TEXT" />: ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ</translation>
-<translation id="2170530631236737939">ଓଭରଭିଉରୁ ବାହାରି ଯିବା ପାଇଁ ତିନୋଟି ଆଙ୍ଗୁଠିରେ ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ</translation>
+<translation id="2170530631236737939">ଓଭରଭିଉରୁ ବାହାରିଯିବା ପାଇଁ ତିନୋଟି ଆଙ୍ଗୁଠିରେ ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ</translation>
 <translation id="2208323208084708176">ଏକୀକୃତ ଡେସ୍କଟପ୍ ମୋଡ୍</translation>
 <translation id="2220572644011485463">ପିନ୍‌ କିମ୍ବା ପାସ୍‌ୱର୍ଡ</translation>
 <translation id="2222338659135520253">ସାଇନ୍ ଇନ୍ କରିବା ଆବଶ୍ୟକ</translation>
@@ -758,7 +758,7 @@
 <translation id="8152092012181020186">ବନ୍ଦ କରିବାକୁ Ctrl + W ଦବାନ୍ତୁ।</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ଏହି ସେଟିଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ।</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" />କୁ ବ୍ୟବହାର କରାଯାଉଛି</translation>
-<translation id="8170567869359129153">ମୋବାଇଲ ନେଟୱାର୍କ। <ph name="SIGNAL_STRENGTH" />ର ସିଗନାଲର କ୍ଷମତା</translation>
+<translation id="8170567869359129153">ମୋବାଇଲ ନେଟୱାର୍କ। <ph name="SIGNAL_STRENGTH" />ର ସିଗନାଲ୍ କ୍ଷମତା</translation>
 <translation id="8192202700944119416">ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଲୁଚାଯାଇଛି।</translation>
 <translation id="8196787716797768628">ଆପଗୁଡ଼ିକ ମଧ୍ୟରେ ଦ୍ରୁତ ଭାବରେ ସ୍ୱିଚ୍ କରିବାକୁ ଏବଂ ଟାବଲେଟ୍ ମୋଡରେ ଆପଣଙ୍କ Chromebook ସହିତ ଇଣ୍ଟରାକ୍ଟ କରିବାକୁ ଜେଶ୍ଚରଗୁଡ଼ିକ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="8200772114523450471">ସାରାଶଂ</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index c90f34f..74740a9 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -474,7 +474,7 @@
 <translation id="54609108002486618">ਪ੍ਰਬੰਧਿਤ</translation>
 <translation id="5465662442746197494">ਕੀ ਸਹਾਇਤਾ ਦੀ ਲੋੜ ਹੈ?</translation>
 <translation id="5496819745535887422">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਪਿਛਲੇ ਵਰਜਨ 'ਤੇ ਵਾਪਸ ਲਿਆ ਰਿਹਾ ਹੈ। ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਸ਼ੁਰੂ ਕੀਤੇ ਜਾਣ 'ਤੇ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation>
-<translation id="5516420770350073386">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਸਮੱਗਰੀ ਹੋਣ ਕਾਰਨ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ।</translation>
+<translation id="5516420770350073386">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਸਮੱਗਰੀ ਹੋਣ ਕਾਰਨ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ।</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166"><ph name="FEATURE_NAME" /> ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।</translation>
 <translation id="5532994612895037630">ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਕਿਤੇ ਵੀ ਟੈਪ ਕਰੋ</translation>
@@ -484,7 +484,7 @@
 <translation id="556042886152191864">ਬਟਨ</translation>
 <translation id="5571066253365925590">ਬਲੂਟੁੱਥ ਸਮਰਥਿਤ</translation>
 <translation id="557563299383177668">ਅਗਲਾ ਪੈਰਾ</translation>
-<translation id="55808498489107691">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਸਮੱਗਰੀ ਦੇ ਕਾਰਨ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਕ੍ਰੀਨ ਕੈਪਚਰ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ।</translation>
+<translation id="55808498489107691">ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਸਮੱਗਰੀ ਹੋਣ ਕਾਰਨ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਕ੍ਰੀਨ ਕੈਪਚਰ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ।</translation>
 <translation id="558849140439112033">ਕੈਪਚਰ ਕਰਨ ਲਈ ਕਿਸੇ ਖੇਤਰ ਨੂੰ ਚੁਣਨ ਵਾਸਤੇ ਘਸੀਟੋ</translation>
 <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation>
 <translation id="5600837773213129531">ਬੋਲੀ ਪ੍ਰਤੀਕਰਮ ਬੰਦ ਕਰਨ ਲਈ Ctrl + Alt + Z ਦਬਾਓ।</translation>
@@ -758,7 +758,7 @@
 <translation id="8152092012181020186">ਬੰਦ ਕਰਨ ਲਈ Ctrl + W ਦਬਾਓ।</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਸੈਟਿੰਗ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ।</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</translation>
-<translation id="8170567869359129153">ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ। <ph name="SIGNAL_STRENGTH" /> ਦੀ ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ</translation>
+<translation id="8170567869359129153">ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ। <ph name="SIGNAL_STRENGTH" /> ਦੀ ਸਿਗਨਲ ਤੀਬਰਤਾ</translation>
 <translation id="8192202700944119416">ਸੂਚਨਾਵਾਂ ਲੁਕੀਆਂ ਹੋਈਆਂ ਹਨ।</translation>
 <translation id="8196787716797768628">ਐਪਾਂ ਵਿਚਾਲੇ ਤੁਰੰਤ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ ਅਤੇ ਟੈਬਲੈੱਟ ਮੋਡ ਵਿੱਚ ਆਪਣੀ Chromebook ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਲਈ ਇਸ਼ਾਰਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation>
 <translation id="8200772114523450471">ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 5d60c52..65b6301 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Lum. de noapte</translation>
 <translation id="2727175239389218057">Răspunde</translation>
 <translation id="2727977024730340865">V-ați conectat la un încărcător de putere joasă. Încărcarea bateriei poate fi nesigură.</translation>
+<translation id="2778650143428714839">Dispozitivul <ph name="DEVICE_TYPE" /> gestionat de <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Căutare</translation>
 <translation id="2819276065543622893">Veți fi deconectat(ă) acum.</translation>
 <translation id="28232023175184696">Nu ne putem conecta la internet. Dă clic pentru a încerca din nou.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Folosește creionul pentru a selecta o zonă</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> a fost rotit la <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voce</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> este o sesiune gestionată de <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth este activat</translation>
 <translation id="6381109794406942707">Pentru a debloca dispozitivul, introdu codul PIN.</translation>
 <translation id="639644700271529076">Tasta CAPS LOCK este dezactivată</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 4c2857f..3f69a55 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">රාත්‍රී ආලෝකය</translation>
 <translation id="2727175239389218057">පිළිතුරු දෙන්න</translation>
 <translation id="2727977024730340865">අඩු බල චාජරයකට ප්ලග් ඉන් කර ඇත. බැටරිය චාජ් කිරිම විශ්වාස නැති විය හැක.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> විසින් කළමනාකරණය කෙරේ</translation>
 <translation id="2792498699870441125">Alt+සෙවීම</translation>
 <translation id="2819276065543622893">ඔබව දැන් වරනු ඇත.</translation>
 <translation id="28232023175184696">අන්තර්ජාලයට සම්බන්ධ විය නොහැකිය. නැවත උත්සාහ කිරීමට ක්ලික් කරන්න.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">කලාපයක් තේරීමට පන්හිඳ භාවිතා කරන්න</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />  <ph name="ROTATION" /> වෙත භ්‍රමණය විය</translation>
 <translation id="6315170314923504164">හඬ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> යනු <ph name="MANAGER" /> විසින් කළමනාකරණය කරනු ලබන කළමනාකරණය කළ සැසියකි</translation>
 <translation id="6376931439017688372">බ්ලූටූත් ක්‍රියාත්මකයි</translation>
 <translation id="6381109794406942707">උපාංගය අගුලු ඇරීමට, ඔබේ රහස් අංකය ඇතුළත් කරන්න.</translation>
 <translation id="639644700271529076">කැප්ස් ලොක් අක්‍රීයයි</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index d4b8e8b..8d53542 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Nočný režim</translation>
 <translation id="2727175239389218057">Odpovedať</translation>
 <translation id="2727977024730340865">Batéria je zapojená do nabíjačky s nízkym výkonom. Nabíjanie batérie nemusí byť spoľahlivé.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> spravuje <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Hľadať</translation>
 <translation id="2819276065543622893">Teraz prebehne odhlásenie.</translation>
 <translation id="28232023175184696">Nedá sa pripojiť k internetu. Kliknutím to skúste znova.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Pomocou dotykového pera vyberte oblasť</translation>
 <translation id="6310121235600822547">Obrazovka <ph name="DISPLAY_NAME" /> bola otočená o <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Hlas</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> je spravovaná relácia, ktorú riadi <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Rozhranie Bluetooth je zapnuté</translation>
 <translation id="6381109794406942707">Ak chcete odomknúť zariadenie, zadajte PIN.</translation>
 <translation id="639644700271529076">CAPS LOCK je vypnutý</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 4ab1505..bc44661 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Drita e natës</translation>
 <translation id="2727175239389218057">Përgjigju</translation>
 <translation id="2727977024730340865">E lidhur me një karikues me fuqi të ulët. Ngarkimi i baterisë mund të mos jetë i sigurt.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> menaxhohet nga <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+Kërko</translation>
 <translation id="2819276065543622893">Do të dalësh nga llogaria tani.</translation>
 <translation id="28232023175184696">S'mund të lidhet me internetin. Kliko për të provuar përsëri.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Përdor stilolapsin për të zgjedhur një sektorin</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> u rrotullua në <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voice</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> është sesion i menaxhuar që menaxhohet nga <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth-i është aktiv</translation>
 <translation id="6381109794406942707">Për të shkyçur pajisjen, fut kodin PIN.</translation>
 <translation id="639644700271529076">KYÇJA E KAPITALEVE është joaktive</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 5999e4d..507c03b 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Nattljus</translation>
 <translation id="2727175239389218057">Svara</translation>
 <translation id="2727977024730340865">Ansluten till en laddare med låg effekt. Batteriet kanske inte laddas ordentligt.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> hanteras av <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Sök</translation>
 <translation id="2819276065543622893">Du loggas nu ut.</translation>
 <translation id="28232023175184696">Det gick inte att ansluta till internet. Klicka om du vill försöka igen.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Markera ett område med e-pennan</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> byttes till <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Mikrofon</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> är en hanterad session som hanteras av <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth är aktiverat</translation>
 <translation id="6381109794406942707">Lås upp enheten genom att ange pinkoden.</translation>
 <translation id="639644700271529076">CAPS LOCK är av</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index c05d90d..cbf8c42 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Mwanga wa Usiku</translation>
 <translation id="2727175239389218057">Jibu</translation>
 <translation id="2727977024730340865">Imechomekwa katika chaja ya kawi ya chini. Huenda kuchaji kwa betri hakutakuwa kuzuri.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> inadhibitiwa na <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Utafutaji</translation>
 <translation id="2819276065543622893">Utaondolewa kwenye akaunti sasa hivi.</translation>
 <translation id="28232023175184696">Imeshindwa kuunganisha kwenye intaneti. Bofya ili ujaribu tena.</translation>
@@ -484,7 +485,7 @@
 <translation id="556042886152191864">Kitufe</translation>
 <translation id="5571066253365925590">Bluetooth imewezeshwa</translation>
 <translation id="557563299383177668">Aya inayofuata</translation>
-<translation id="55808498489107691">Kipengele cha kupiga picha ya skrini kimezuiwa na msimamizi wako kwa sababu ya maudhui yaliyo kwenye skrini yako.</translation>
+<translation id="55808498489107691">Kipengele cha kurekodi skrini kimezuiwa na msimamizi wako kwa sababu ya maudhui yaliyo kwenye skrini yako.</translation>
 <translation id="558849140439112033">Buruta ili uchague sehemu ya kunasa</translation>
 <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation>
 <translation id="5600837773213129531">Bonyeza Ctrl + Alt + Z ili uzime kipengele cha maelezo yanayotamkwa.</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">Tumia stylus kuchagua eneo</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ilizungushwa hadi <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Sauti</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ni kipindi kinachodhibitiwa ambacho kinadhibitiwa na <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth imewashwa</translation>
 <translation id="6381109794406942707">Ili ufungue kifaa, weka PIN yako.</translation>
 <translation id="639644700271529076">CAPS LOCK imezimwa</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index eacb8d4d..6c4fd72 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">நைட் லைட்</translation>
 <translation id="2727175239389218057">பதிலளி</translation>
 <translation id="2727977024730340865">குறைந்த சக்தியிலான சார்ஜர் செருகப்பட்டுள்ளது. பேட்டரி சார்ஜிங் நம்பகமானதாக இல்லாமல் இருக்கலாம்.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> சாதனத்தை <ph name="MANAGER" /> நிர்வகிக்கிறது</translation>
 <translation id="2792498699870441125">Alt+தேடல்</translation>
 <translation id="2819276065543622893">இப்போது வெளியேற்றப்படுவீர்கள்.</translation>
 <translation id="28232023175184696">இணையத்துடன் இணைக்க முடியவில்லை. மீண்டும் முயல கிளிக் செய்யுங்கள்.</translation>
@@ -558,6 +559,7 @@
 <translation id="6297287540776456956">பகுதியைத் தேர்ந்தெடுக்க, ஸ்டைஸைப் பயன்படுத்தவும்</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> ஆகச் சுழற்றப்பட்டது</translation>
 <translation id="6315170314923504164">குரல்</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> என்பது நிர்வகிக்கப்பட்ட ஓர் அமர்வாகும், <ph name="MANAGER" /> இதை நிர்வகிக்கிறது</translation>
 <translation id="6376931439017688372">புளூடூத் இயக்கப்பட்டுள்ளது</translation>
 <translation id="6381109794406942707">சாதனத்தைத் திறக்க உங்கள் பின்னை உள்ளிடவும்.</translation>
 <translation id="639644700271529076">CAPS LOCK முடக்கப்பட்டுள்ளது</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 2b147aac..01ee921f 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -98,7 +98,7 @@
 <translation id="1838895407229022812">రాత్రి కాంతి ఆఫ్‌లో ఉంది.</translation>
 <translation id="1850504506766569011">Wi-Fi ఆఫ్ చేయబడింది.</translation>
 <translation id="1864454756846565995">USB-C పరికరం (వెనుకవైపు పోర్ట్)</translation>
-<translation id="1882814835921407042">ఏ మొబైల్ నెట్‌వర్క్ అందుబాటులో లేదు</translation>
+<translation id="1882814835921407042">మొబైల్ నెట్‌వర్క్ ఏదీ అందుబాటులో లేదు</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />కు మిర్రరింగ్ చేస్తోంది</translation>
 <translation id="1885785240814121742">వేలిముద్రతో అన్‌లాక్ చేయండి</translation>
 <translation id="1888656773939766144"><ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)ను <ph name="DISPLAY_NAME" /> సపోర్ట్ చేయదు. రిజల్యూషన్ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)కు మార్చబడింది. మార్పులను అలాగే ఉంచడానికి 'నిర్ధారించు'ను క్లిక్ చేయండి. మునుపటి సెట్టింగ్‌లు <ph name="TIMEOUT_SECONDS" />లో రీస్టోర్ చేయబడతాయి.</translation>
@@ -120,7 +120,7 @@
 <translation id="2049240716062114887">డెస్క్ పేరు <ph name="DESK_NAME" />గా మార్చబడింది</translation>
 <translation id="2050339315714019657">పోర్ట్రెయిట్</translation>
 <translation id="2067602449040652523">కీబోర్డ్ ప్రకాశం</translation>
-<translation id="2078034614700056995">తర్వాతి డెస్క్‌కు స్విచ్ చేయడానికి నాలుగు వేళ్లతో కుడి వైపుకు స్వైప్ చేయండి</translation>
+<translation id="2078034614700056995">తర్వాతి డెస్క్‌కు మారడానికి నాలుగు వేళ్లతో కుడి వైపు స్వైప్ చేయండి</translation>
 <translation id="2083190527011054446">శుభరాత్రి <ph name="GIVEN_NAME" />,</translation>
 <translation id="209965399369889474">నెట్‌వర్క్‌కు కనెక్ట్ కాలేదు</translation>
 <translation id="2126242104232412123">కొత్త డెస్క్</translation>
@@ -761,7 +761,7 @@
 <translation id="8152092012181020186">మూసివేయడానికి Ctrl + W నొక్కండి.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా నిర్వహించబడుతుంది.</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" />ని ఉపయోగిస్తోంది</translation>
-<translation id="8170567869359129153">మొబైల్ నెట్‌వర్క్. <ph name="SIGNAL_STRENGTH" /> యొక్క సిగ్నల్ సామర్థ్యం</translation>
+<translation id="8170567869359129153">మొబైల్ నెట్‌వర్క్. సిగ్నల్ సామర్థ్యం - <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">నోటిఫికేషన్‌లు దాచబడ్డాయి.</translation>
 <translation id="8196787716797768628">టాబ్లెట్ మోడ్‌లో, యాప్‌ల మధ్య త్వరగా మారడానికి, అలాగే మీ Chromebookతో ఇంటరాక్ట్ కావడానికి సంజ్ఞలను ఉపయోగించండి.</translation>
 <translation id="8200772114523450471">మ‌ళ్లీ ప్రారంభించు</translation>
@@ -771,7 +771,7 @@
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, ఫోన్ బ్యాటరీ <ph name="BATTERY_STATUS" /></translation>
 <translation id="826107067893790409"><ph name="USER_EMAIL_ADDRESS" /> కోసం అన్‌లాక్ చేయడానికి నమోదును నొక్కండి</translation>
 <translation id="8261506727792406068">తొలగించు</translation>
-<translation id="8284362522226889623">మునుపటి డెస్క్‌కు స్విచ్ చేయడానికి నాలుగు వేళ్లతో ఎడమ వైపుకు స్వైప్ చేయండి</translation>
+<translation id="8284362522226889623">మునుపటి డెస్క్‌కు మారడానికి నాలుగు వేళ్లతో ఎడమ వైపు స్వైప్ చేయండి</translation>
 <translation id="828708037801473432">ఆఫ్</translation>
 <translation id="8297006494302853456">బలహీనం</translation>
 <translation id="8308637677604853869">మునుపటి మెనూ</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index cbcb2b7..1c7e922 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -237,7 +237,7 @@
 <translation id="3236488194889173876">ไม่มีเครือข่ายมือถือพร้อมใช้งาน</translation>
 <translation id="3249513730522716925">ย้ายหน้าต่าง <ph name="WINDOW_TITLE" /> จากเดสก์ <ph name="ACTIVE_DESK" /> ไปยังเดสก์ <ph name="TARGET_DESK" /> แล้ว</translation>
 <translation id="3255483164551725916">เธอทำอะไรได้บ้าง</translation>
-<translation id="3289674678944039601">กำลังชาร์จด้วยอะแดปเตอร์</translation>
+<translation id="3289674678944039601">กำลังชาร์จผ่านอะแดปเตอร์</translation>
 <translation id="3290356915286466215">ไม่ปลอดภัย</translation>
 <translation id="3294437725009624529">ผู้มาเยือน</translation>
 <translation id="3307642347673023554">เปลี่ยนเป็นโหมดแล็ปท็อปแล้ว</translation>
@@ -559,7 +559,7 @@
 <translation id="6283712521836204486">โหมดห้ามรบกวนปิดอยู่</translation>
 <translation id="6284232397434400372">เปลี่ยนความละเอียดแล้ว</translation>
 <translation id="6288235558961782912">คุณจะเพิ่ม <ph name="USER_EMAIL_ADDRESS" /> ได้อีกครั้งในภายหลังโดยต้องได้รับอนุญาตจากผู้ปกครอง</translation>
-<translation id="6291221004442998378">ไม่ได้ชาร์จ</translation>
+<translation id="6291221004442998378">ไม่ได้เสียบชาร์จ</translation>
 <translation id="6297287540776456956">ใช้สไตลัสเพื่อเลือกพื้นที่</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> หมุนเวียนเป็น <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">เสียง</translation>
@@ -588,7 +588,7 @@
 <translation id="6537924328260219877">ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />, แบตเตอรี่โทรศัพท์ <ph name="BATTERY_STATUS" /></translation>
 <translation id="6542521951477560771">แคสต์ไปที่<ph name="RECEIVER_NAME" /></translation>
 <translation id="6559976592393364813">ถามผู้ดูแลระบบ</translation>
-<translation id="6570902864550063460">กำลังชาร์จด้วย USB</translation>
+<translation id="6570902864550063460">กำลังชาร์จผ่าน USB</translation>
 <translation id="6585808820553845416">เซสชันจะสิ้นสุดใน <ph name="SESSION_TIME_REMAINING" /></translation>
 <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />, จัดการโดยผู้ดูแลระบบ</translation>
 <translation id="6614169507485700968">หน้าจอส่วนตัวเปิดอยู่</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 453d542..1d92348 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -98,6 +98,7 @@
 <translation id="1838895407229022812">当前已关闭护眼模式。</translation>
 <translation id="1850504506766569011">Wi-Fi 已关闭。</translation>
 <translation id="1864454756846565995">USB-C 设备(背面端口)</translation>
+<translation id="1882814835921407042">无移动网络</translation>
 <translation id="1882897271359938046">正在镜像到<ph name="DISPLAY_NAME" /></translation>
 <translation id="1885785240814121742">使用指纹解锁</translation>
 <translation id="1888656773939766144">“<ph name="DISPLAY_NAME" />”不支持 <ph name="SPECIFIED_RESOLUTION" />(<ph name="SPECIFIED_REFRESH_RATE" /> 赫兹)。分辨率已改为 <ph name="FALLBACK_RESOLUTION" />(<ph name="FALLBACK_REFRESH_RATE" />)。点击“确认”即可保留更改。系统将在 <ph name="TIMEOUT_SECONDS" />后恢复以前的设置。</translation>
@@ -119,6 +120,7 @@
 <translation id="2049240716062114887">桌面名称已更改为“<ph name="DESK_NAME" />”</translation>
 <translation id="2050339315714019657">纵向</translation>
 <translation id="2067602449040652523">键盘亮度</translation>
+<translation id="2078034614700056995">若要切换到下一个桌面,请用四根手指向右滑动</translation>
 <translation id="2083190527011054446"><ph name="GIVEN_NAME" />,晚安!</translation>
 <translation id="209965399369889474">未连接到网络</translation>
 <translation id="2126242104232412123">新桌面</translation>
@@ -126,6 +128,7 @@
 <translation id="2132302418721800944">录制整个屏幕</translation>
 <translation id="2135456203358955318">停靠的放大镜</translation>
 <translation id="2158971754079422508"><ph name="DESC_TEXT" />:重试</translation>
+<translation id="2170530631236737939">若要退出“概览”模式,请用三根手指向下滑动</translation>
 <translation id="2208323208084708176">统一桌面模式</translation>
 <translation id="2220572644011485463">PIN 码或密码</translation>
 <translation id="2222338659135520253">必须登录</translation>
@@ -234,6 +237,7 @@
 <translation id="3236488194889173876">没有可用的移动网络</translation>
 <translation id="3249513730522716925">窗口“<ph name="WINDOW_TITLE" />”已由桌面 <ph name="ACTIVE_DESK" /> 移至桌面 <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">你能做些什么?</translation>
+<translation id="3289674678944039601">正在通过适配器充电</translation>
 <translation id="3290356915286466215">无保护</translation>
 <translation id="3294437725009624529">访客</translation>
 <translation id="3307642347673023554">已切换到笔记本电脑模式</translation>
@@ -292,6 +296,7 @@
 <translation id="3799080171973636491">您按下了全屏放大镜的键盘快捷键。要开启这项功能吗?</translation>
 <translation id="380165613292957338">嗨,有什么我可以帮你的吗?</translation>
 <translation id="3826099427150913765">切换到密码</translation>
+<translation id="383058930331066723">省电模式已开启</translation>
 <translation id="383629559565718788">显示键盘设置</translation>
 <translation id="3846214748874656680">退出全屏模式</translation>
 <translation id="3846575436967432996">没有可用的网络信息</translation>
@@ -336,6 +341,7 @@
 <translation id="4217571870635786043">语音输入</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">屏幕截图</translation>
+<translation id="425364040945105958">无 SIM 卡</translation>
 <translation id="4261870227682513959">显示通知设置。通知已关闭</translation>
 <translation id="4267383818855338811">有一台虚拟机正在使用您的摄像头</translation>
 <translation id="4269883910223712419">此设备的管理员能够:</translation>
@@ -468,14 +474,17 @@
 <translation id="54609108002486618">托管</translation>
 <translation id="5465662442746197494">需要帮助?</translation>
 <translation id="5496819745535887422">您的管理员正在回滚您的设备。设备重启后,所有数据都会被删除。</translation>
+<translation id="5516420770350073386">为了保护您屏幕上的内容,管理员已停止录制屏幕。</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="5523434445161341166">“<ph name="FEATURE_NAME" />”正在连接。</translation>
+<translation id="5532994612895037630">点按任意位置即可录制整个屏幕</translation>
 <translation id="553675580533261935">退出会话</translation>
 <translation id="5537725057119320332">投射</translation>
 <translation id="554893713779400387">开启/关闭语音输入</translation>
 <translation id="556042886152191864">按钮</translation>
 <translation id="5571066253365925590">蓝牙已启用</translation>
 <translation id="557563299383177668">下一个段落</translation>
+<translation id="55808498489107691">为了保护您屏幕上的内容,管理员已禁止截取屏幕。</translation>
 <translation id="558849140439112033">拖动鼠标指针即可选择要截取的区域</translation>
 <translation id="5597451508971090205"><ph name="DATE" /><ph name="SHORT_WEEKDAY" /></translation>
 <translation id="5600837773213129531">按 Ctrl + Alt + Z 即可停用语音反馈。</translation>
@@ -526,6 +535,7 @@
 <translation id="602001110135236999">向左滚动</translation>
 <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />,<ph name="CONNECTION_STATUS" />,信号强度为 <ph name="SIGNAL_STRENGTH" />,由您的管理员管理</translation>
 <translation id="6030495522958826102">菜单已移至屏幕的左下角。</translation>
+<translation id="6032620807120418574">点击任意位置即可录制整个屏幕</translation>
 <translation id="6040143037577758943">关闭</translation>
 <translation id="6043212731627905357">该显示器与您的<ph name="DEVICE_TYPE" />不兼容(系统不支持该显示器)。</translation>
 <translation id="6043994281159824495">立即退出</translation>
@@ -534,6 +544,7 @@
 <translation id="6059276912018042191">最近打开的 Chrome 标签页</translation>
 <translation id="6062360702481658777">您将在<ph name="LOGOUT_TIME_LEFT" />后自动退出。</translation>
 <translation id="607652042414456612">附近的蓝牙设备可检测到您的计算机(名称将显示为“<ph name="NAME" />”,地址为<ph name="ADDRESS" />)</translation>
+<translation id="6119360623251949462"><ph name="CHARGING_STATE" />。<ph name="BATTERY_SAVER_STATE" /></translation>
 <translation id="612734058257491180">无法在访客会话中使用 Google 助理。</translation>
 <translation id="6137566720514957455">打开与 <ph name="USER_EMAIL_ADDRESS" /> 对应的“移除帐号”对话框</translation>
 <translation id="615957422585914272">显示屏幕键盘</translation>
@@ -548,6 +559,7 @@
 <translation id="6283712521836204486">“勿扰”模式已关闭。</translation>
 <translation id="6284232397434400372">分辨率已更改</translation>
 <translation id="6288235558961782912">日后在获得家长允许的情况下可以重新添加 <ph name="USER_EMAIL_ADDRESS" />。</translation>
+<translation id="6291221004442998378">未在充电</translation>
 <translation id="6297287540776456956">使用触控笔选择一个区域</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />已旋转为<ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">语音</translation>
@@ -576,6 +588,7 @@
 <translation id="6537924328260219877">信号强度为 <ph name="SIGNAL_STRENGTH" />,剩余电量为 <ph name="BATTERY_STATUS" /></translation>
 <translation id="6542521951477560771">正在投射到<ph name="RECEIVER_NAME" /></translation>
 <translation id="6559976592393364813">询问您的管理员</translation>
+<translation id="6570902864550063460">正在通过 USB 充电</translation>
 <translation id="6585808820553845416">会话将在<ph name="SESSION_TIME_REMAINING" />后结束。</translation>
 <translation id="661203523074512333"><ph name="SECURITY_STATUS" />,信号强度为 <ph name="SIGNAL_STRENGTH" />,由您的管理员管理</translation>
 <translation id="6614169507485700968">已开启隐私保护屏</translation>
@@ -653,6 +666,7 @@
 <translation id="7377169924702866686">大写锁定已打开。</translation>
 <translation id="7378203170292176219">拖动鼠标指针即可选择要录制的区域</translation>
 <translation id="7378594059915113390">媒体控件</translation>
+<translation id="7378889811480108604">省电模式已关闭</translation>
 <translation id="7392563512730092880">日后您随时可从“设置”中进行设置。</translation>
 <translation id="7398254312354928459">已切换网络连接</translation>
 <translation id="7405710164030118432">要解锁此设备,请输入您的 Family Link 家长访问码</translation>
@@ -702,6 +716,7 @@
 <translation id="7837740436429729974">时间到</translation>
 <translation id="7842569679327885685">警告:实验性功能</translation>
 <translation id="7846634333498149051">键盘</translation>
+<translation id="7860671499921112077">若要进入“概览”模式,请用三根手指向上滑动</translation>
 <translation id="7868900307798234037">正在使用指纹解锁</translation>
 <translation id="7872786842639831132">关闭</translation>
 <translation id="7886169021410746335">调整隐私设置</translation>
@@ -743,6 +758,7 @@
 <translation id="8152092012181020186">按 Ctrl + W 即可关闭。</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" />:此设置由您的管理员管理。</translation>
 <translation id="8167567890448493835">目前使用的是“<ph name="LOCALE_NAME" />”</translation>
+<translation id="8170567869359129153">移动网络。信号强度为 <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">已隐藏通知。</translation>
 <translation id="8196787716797768628">在平板电脑模式下,使用手势快速切换应用以及与 Chromebook 互动。</translation>
 <translation id="8200772114523450471">继续</translation>
@@ -752,6 +768,7 @@
 <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />,信号强度为 <ph name="SIGNAL_STRENGTH" />,剩余电量为 <ph name="BATTERY_STATUS" /></translation>
 <translation id="826107067893790409">按 Enter 键即可为 <ph name="USER_EMAIL_ADDRESS" /> 解锁</translation>
 <translation id="8261506727792406068">删除</translation>
+<translation id="8284362522226889623">若要切换到上一个桌面,请用四根手指向左滑动</translation>
 <translation id="828708037801473432">已关闭</translation>
 <translation id="8297006494302853456">弱</translation>
 <translation id="8308637677604853869">上一菜单</translation>
@@ -808,6 +825,7 @@
 <translation id="8785070478575117577">连接到“<ph name="NETWORK_NAME" />”</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />。<ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
+<translation id="881757059229893486">输入法设置</translation>
 <translation id="8825863694328519386">从左侧向右滑动手指即可返回</translation>
 <translation id="8828714802988429505">90°</translation>
 <translation id="8841375032071747811">“返回”按钮</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 6b3eed4..48a150a 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">夜燈模式</translation>
 <translation id="2727175239389218057">回覆</translation>
 <translation id="2727977024730340865">使用低功率充電器,可能導致充電狀態不穩定。</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> 由 <ph name="MANAGER" /> 管理</translation>
 <translation id="2792498699870441125">Alt + 搜尋鍵</translation>
 <translation id="2819276065543622893">現在即將登出。</translation>
 <translation id="28232023175184696">連接唔到互聯網。㩒一下就可以試多次。</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">使用觸控筆選取區域</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> 已旋轉到 <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">語音</translation>
+<translation id="6338485349199627913">「<ph name="DISPLAY_NAME" />」是由 <ph name="MANAGER" /> 管理的工作階段</translation>
 <translation id="6376931439017688372">藍牙已開啟</translation>
 <translation id="6381109794406942707">如要解鎖裝置,請輸入 PIN。</translation>
 <translation id="639644700271529076">大寫鍵已關閉</translation>
diff --git a/ash/style/ash_color_provider.cc b/ash/style/ash_color_provider.cc
index 523dbcf..24dfd8b9 100644
--- a/ash/style/ash_color_provider.cc
+++ b/ash/style/ash_color_provider.cc
@@ -211,12 +211,15 @@
 SkColor AshColorProvider::GetContentLayerColor(ContentLayerType type) const {
   const bool is_dark_mode = IsDarkModeEnabled();
   switch (type) {
+    case ContentLayerType::kLoginScrollBarColor:
     case ContentLayerType::kSeparatorColor:
     case ContentLayerType::kShelfHandleColor:
       return is_dark_mode ? SkColorSetA(SK_ColorWHITE, 0x24)
                           : SkColorSetA(SK_ColorBLACK, 0x24);
     case ContentLayerType::kIconColorSecondary:
       return gfx::kGoogleGrey500;
+    case ContentLayerType::kIconColorSecondaryBackground:
+      return is_dark_mode ? gfx::kGoogleGrey100 : gfx::kGoogleGrey800;
     case ContentLayerType::kButtonLabelColor:
     case ContentLayerType::kButtonIconColor:
     case ContentLayerType::kAppStateIndicatorColor:
diff --git a/ash/style/ash_color_provider.h b/ash/style/ash_color_provider.h
index 89fcdc7..2ec63be 100644
--- a/ash/style/ash_color_provider.h
+++ b/ash/style/ash_color_provider.h
@@ -79,6 +79,7 @@
   };
 
   enum class ContentLayerType {
+    kLoginScrollBarColor,
     kSeparatorColor,
 
     kTextColorPrimary,
@@ -96,6 +97,9 @@
     // VPN detailed view.
     kIconColorProminent,
 
+    // Background for kIconColorSecondary.
+    kIconColorSecondaryBackground,
+
     // The default color for button labels.
     kButtonLabelColor,
     kButtonLabelColorPrimary,
diff --git a/ash/system/accessibility/switch_access_menu_view.cc b/ash/system/accessibility/switch_access_menu_view.cc
index 4db30332..8afc21b 100644
--- a/ash/system/accessibility/switch_access_menu_view.cc
+++ b/ash/system/accessibility/switch_access_menu_view.cc
@@ -96,6 +96,12 @@
       menu_button_details->insert(
           {"pointScan",
            {&kSwitchAccessPointScanIcon, IDS_ASH_SWITCH_ACCESS_POINT_SCAN}});
+      menu_button_details->insert(
+          {"leftClick",
+           {&kSwitchAccessLeftClickIcon, IDS_ASH_SWITCH_ACCESS_LEFT_CLICK}});
+      menu_button_details->insert(
+          {"rightClick",
+           {&kSwitchAccessRightClickIcon, IDS_ASH_SWITCH_ACCESS_RIGHT_CLICK}});
     }
   }
   return *menu_button_details;
diff --git a/ash/system/bluetooth/bluetooth_detailed_view.cc b/ash/system/bluetooth/bluetooth_detailed_view.cc
index 75b282f..778175a 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view.cc
@@ -145,6 +145,9 @@
 
 void BluetoothDetailedView::ShowBluetoothDisabledPanel() {
   device_map_.clear();
+  paired_devices_heading_ = nullptr;
+  unpaired_devices_heading_ = nullptr;
+  bluetooth_discovering_label_ = nullptr;
   scroll_content()->RemoveAllChildViews(true);
 
   DCHECK(scroller());
diff --git a/ash/system/bluetooth/unified_bluetooth_detailed_view_controller_unittest.cc b/ash/system/bluetooth/unified_bluetooth_detailed_view_controller_unittest.cc
index 62f7cd6..2f9f7e2 100644
--- a/ash/system/bluetooth/unified_bluetooth_detailed_view_controller_unittest.cc
+++ b/ash/system/bluetooth/unified_bluetooth_detailed_view_controller_unittest.cc
@@ -36,7 +36,6 @@
   ~UnifiedBluetoothDetailedViewControllerTest() override = default;
 
   void SetUp() override {
-    bluez::BluezDBusManager::InitializeFake();
     AshTestBase::SetUp();
 
     // Set fake adapter client to powered-on and initialize with zero simulation
@@ -44,10 +43,7 @@
     adapter_client_ = static_cast<bluez::FakeBluetoothAdapterClient*>(
         bluez::BluezDBusManager::Get()->GetBluetoothAdapterClient());
     adapter_client_->SetSimulationIntervalMs(0);
-    adapter_client_
-        ->GetProperties(
-            dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath))
-        ->powered.ReplaceValue(true);
+    SetAdapterPowered(true);
 
     // Enable fake device client and initialize with zero simulation interval.
     device_client_ = static_cast<bluez::FakeBluetoothDeviceClient*>(
@@ -70,6 +66,14 @@
     AshTestBase::TearDown();
   }
 
+  void SetAdapterPowered(bool powered) {
+    adapter_client_
+        ->GetProperties(
+            dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath))
+        ->powered.ReplaceValue(powered);
+    task_environment()->RunUntilIdle();
+  }
+
   void AddTestDevice() {
     bluez::FakeBluetoothDeviceClient::IncomingDeviceProperties props;
     props.device_path = "/fake/hci0/dev123";
@@ -81,10 +85,24 @@
         props);
   }
 
+  void RemoveAllDevices() {
+    dbus::ObjectPath fake_adapter_path(
+        bluez::FakeBluetoothAdapterClient::kAdapterPath);
+    std::vector<dbus::ObjectPath> device_paths =
+        device_client_->GetDevicesForAdapter(fake_adapter_path);
+    for (auto& device_path : device_paths) {
+      device_client_->RemoveDevice(fake_adapter_path, device_path);
+    }
+  }
+
   UnifiedBluetoothDetailedViewController* bt_detailed_view_controller() {
     return bt_detailed_view_controller_.get();
   }
 
+  bluez::FakeBluetoothAdapterClient* adapter_client() {
+    return adapter_client_;
+  }
+
  private:
   bluez::FakeBluetoothAdapterClient* adapter_client_;
   bluez::FakeBluetoothDeviceClient* device_client_;
@@ -120,4 +138,29 @@
   EXPECT_EQ(scroll_content_size + 1u, scroll_content->children().size());
 }
 
+TEST_F(UnifiedBluetoothDetailedViewControllerTest,
+       UpdateScrollListPowerCycleTest) {
+  // Disable discovery simulation and remove all existing
+  // devices so that only the "Scanning" message is displayed.
+  adapter_client()->SetDiscoverySimulation(false);
+  RemoveAllDevices();
+
+  tray::BluetoothDetailedView* bluetooth_detailed_view =
+      static_cast<tray::BluetoothDetailedView*>(
+          bt_detailed_view_controller()->CreateView());
+  task_environment()->FastForwardBy(kUpdateFrequencyMs);
+
+  const views::View* scroll_content = bluetooth_detailed_view->GetViewByID(
+      tray::BluetoothDetailedView::kScrollContentID);
+  // Only the scanning message should be displayed.
+  EXPECT_EQ(1u, scroll_content->children().size());
+
+  // Verify that if bluetooth is powered off and back on again
+  // the scroll list is cleared and populated back again properly.
+  SetAdapterPowered(false);
+  EXPECT_EQ(0u, scroll_content->children().size());
+  SetAdapterPowered(true);
+  EXPECT_EQ(1u, scroll_content->children().size());
+}
+
 }  // namespace ash
\ No newline at end of file
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 066b973..2ec746a4 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3864,7 +3864,6 @@
     ]
 
     sources = [
-      "test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java",
       "test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java",
       "test/android/javatests/src/org/chromium/base/test/BaseChromiumRunnerCommon.java",
       "test/android/javatests/src/org/chromium/base/test/BaseJUnit4ClassRunner.java",
@@ -3996,6 +3995,7 @@
       "android/junit/src/org/chromium/base/supplier/OneShotCallbackTest.java",
       "android/junit/src/org/chromium/base/supplier/OneshotSupplierImplTest.java",
       "android/junit/src/org/chromium/base/task/AsyncTaskThreadTest.java",
+      "android/junit/src/org/chromium/base/task/SequencedTaskRunnerTaskMigrationTest.java",
       "android/junit/src/org/chromium/base/task/TaskTraitsTest.java",
       "android/junit/src/org/chromium/base/util/GarbageCollectionTestUtilsUnitTest.java",
       "test/android/junit/src/org/chromium/base/test/SetUpStatementTest.java",
diff --git a/base/allocator/allocator_shim.cc b/base/allocator/allocator_shim.cc
index 19493d7..954797f 100644
--- a/base/allocator/allocator_shim.cc
+++ b/base/allocator/allocator_shim.cc
@@ -133,7 +133,7 @@
 //   - If the std::new_handler is NOT set just return nullptr.
 //   - If the std::new_handler is set:
 //     - Assume it will abort() if it fails (very likely the new_handler will
-//       just suicide priting a message).
+//       just suicide printing a message).
 //     - Assume it did succeed if it returns, in which case reattempt the alloc.
 
 ALWAYS_INLINE void* ShimCppNew(size_t size) {
diff --git a/base/allocator/partition_allocator/memory_reclaimer.cc b/base/allocator/partition_allocator/memory_reclaimer.cc
index 7adca37..58cf9e3 100644
--- a/base/allocator/partition_allocator/memory_reclaimer.cc
+++ b/base/allocator/partition_allocator/memory_reclaimer.cc
@@ -95,23 +95,34 @@
   // singleton.
   timer_->Start(
       FROM_HERE, kInterval,
-      BindRepeating(&PartitionAllocMemoryReclaimer::Reclaim, Unretained(this)));
+      BindRepeating(&PartitionAllocMemoryReclaimer::ReclaimPeriodically,
+                    Unretained(this)));
 }
 
 PartitionAllocMemoryReclaimer::PartitionAllocMemoryReclaimer() = default;
 PartitionAllocMemoryReclaimer::~PartitionAllocMemoryReclaimer() = default;
 
-void PartitionAllocMemoryReclaimer::Reclaim() {
+void PartitionAllocMemoryReclaimer::ReclaimAll() {
+  constexpr int kFlags = PartitionPurgeDecommitEmptySlotSpans |
+                         PartitionPurgeDiscardUnusedSystemPages |
+                         PartitionPurgeForceAllFreed;
+  Reclaim(kFlags);
+}
+
+void PartitionAllocMemoryReclaimer::ReclaimPeriodically() {
+  constexpr int kFlags = PartitionPurgeDecommitEmptySlotSpans |
+                         PartitionPurgeDiscardUnusedSystemPages;
+  Reclaim(kFlags);
+}
+
+void PartitionAllocMemoryReclaimer::Reclaim(int flags) {
   AutoLock lock(lock_);  // Has to protect from concurrent (Un)Register calls.
   TRACE_EVENT0("base", "PartitionAllocMemoryReclaimer::Reclaim()");
 
-  constexpr int kFlags = PartitionPurgeDecommitEmptySlotSpans |
-                         PartitionPurgeDiscardUnusedSystemPages;
-
   for (auto* partition : thread_safe_partitions_)
-    partition->PurgeMemory(kFlags);
+    partition->PurgeMemory(flags);
   for (auto* partition : thread_unsafe_partitions_)
-    partition->PurgeMemory(kFlags);
+    partition->PurgeMemory(flags);
 }
 
 void PartitionAllocMemoryReclaimer::ResetForTesting() {
diff --git a/base/allocator/partition_allocator/memory_reclaimer.h b/base/allocator/partition_allocator/memory_reclaimer.h
index d7594aa..0a177bf 100644
--- a/base/allocator/partition_allocator/memory_reclaimer.h
+++ b/base/allocator/partition_allocator/memory_reclaimer.h
@@ -42,12 +42,17 @@
   void UnregisterPartition(PartitionRoot<internal::NotThreadSafe>* partition);
   // Starts the periodic reclaim. Should be called once.
   void Start(scoped_refptr<SequencedTaskRunner> task_runner);
-  // Triggers an explicit reclaim now.
-  void Reclaim();
+  // Triggers an explicit reclaim now reclaiming all free memory
+  void ReclaimAll();
+  // Triggers an explicit reclaim now to reclaim as much free memory as
+  // possible.
+  void ReclaimPeriodically();
 
  private:
   PartitionAllocMemoryReclaimer();
   ~PartitionAllocMemoryReclaimer();
+  // |flags| is an OR of base::PartitionPurgeFlags
+  void Reclaim(int flags);
   void ReclaimAndReschedule();
   void ResetForTesting();
 
diff --git a/base/allocator/partition_allocator/memory_reclaimer_unittest.cc b/base/allocator/partition_allocator/memory_reclaimer_unittest.cc
index f05801c..a3cdb4c 100644
--- a/base/allocator/partition_allocator/memory_reclaimer_unittest.cc
+++ b/base/allocator/partition_allocator/memory_reclaimer_unittest.cc
@@ -98,7 +98,7 @@
 
     size_t committed_before = root->get_total_size_of_committed_pages();
     EXPECT_GT(committed_before, committed_initially);
-    PartitionAllocMemoryReclaimer::Instance()->Reclaim();
+    PartitionAllocMemoryReclaimer::Instance()->ReclaimAll();
     size_t committed_after = root->get_total_size_of_committed_pages();
 
     EXPECT_LT(committed_after, committed_before);
diff --git a/base/allocator/partition_allocator/partition_page.h b/base/allocator/partition_allocator/partition_page.h
index 46a0d74..61df972 100644
--- a/base/allocator/partition_allocator/partition_page.h
+++ b/base/allocator/partition_allocator/partition_page.h
@@ -305,7 +305,12 @@
   const ptrdiff_t ptr_offset = maybe_inner_ptr - slot_span_begin;
   PA_DCHECK(0 <= ptr_offset &&
             ptr_offset < static_cast<ptrdiff_t>(
-                             slot_span->bucket->get_bytes_per_span()));
+                             slot_span->bucket->get_pages_per_slot_span() *
+                             PartitionPageSize()));
+  // Slot span size in bytes is not necessarily multiple of partition page.
+  if (ptr_offset >=
+      static_cast<ptrdiff_t>(slot_span->bucket->get_bytes_per_span()))
+    return nullptr;
   const size_t slot_size = slot_span->bucket->slot_size;
   const size_t slot_number = slot_span->bucket->GetSlotNumber(ptr_offset);
   char* const result = slot_span_begin + (slot_number * slot_size);
diff --git a/base/allocator/partition_allocator/partition_root.cc b/base/allocator/partition_allocator/partition_root.cc
index 5d0a893..782c827f 100644
--- a/base/allocator/partition_allocator/partition_root.cc
+++ b/base/allocator/partition_allocator/partition_root.cc
@@ -620,7 +620,7 @@
 template <bool thread_safe>
 void PartitionRoot<thread_safe>::PurgeMemory(int flags) {
   // TODO(chromium:1129751): Change to LIKELY once PCScan is enabled by default.
-  if (UNLIKELY(pcscan)) {
+  if (UNLIKELY(pcscan) && (flags & PartitionPurgeForceAllFreed)) {
     pcscan->PerformScanIfNeeded(
         internal::PCScan<thread_safe>::InvocationMode::kBlocking);
   }
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h
index 1d74d83..4144046 100644
--- a/base/allocator/partition_allocator/partition_root.h
+++ b/base/allocator/partition_allocator/partition_root.h
@@ -78,6 +78,8 @@
   // size. It often frees a similar amount of memory to decommitting the empty
   // slot spans, though.
   PartitionPurgeDiscardUnusedSystemPages = 1 << 1,
+  // Free calls which have not been marterialized are forced now.
+  PartitionPurgeForceAllFreed = 1 << 2,
 };
 
 // Options struct used to configure PartitionRoot and PartitionAllocator.
diff --git a/base/allocator/partition_allocator/pcscan.cc b/base/allocator/partition_allocator/pcscan.cc
index d4b5d1a..7ea6592 100644
--- a/base/allocator/partition_allocator/pcscan.cc
+++ b/base/allocator/partition_allocator/pcscan.cc
@@ -486,8 +486,7 @@
 
 template <bool thread_safe>
 void PCScan<thread_safe>::PerformScanIfNeeded(InvocationMode invocation_mode) {
-  // Perform PCScan only if quarantine is not empty.
-  if (quarantine_data_.size())
+  if (quarantine_data_.MinimumScanningThresholdReached())
     PerformScan(invocation_mode);
 }
 
diff --git a/base/allocator/partition_allocator/pcscan.h b/base/allocator/partition_allocator/pcscan.h
index 1c17f70..7d47a4d 100644
--- a/base/allocator/partition_allocator/pcscan.h
+++ b/base/allocator/partition_allocator/pcscan.h
@@ -73,6 +73,10 @@
     }
     size_t last_size() const { return last_size_; }
 
+    bool MinimumScanningThresholdReached() const {
+      return size() > kQuarantineSizeMinLimit;
+    }
+
    private:
     static constexpr size_t kQuarantineSizeMinLimit = 1 * 1024 * 1024;
 
diff --git a/base/android/java/src/org/chromium/base/RadioUtils.java b/base/android/java/src/org/chromium/base/RadioUtils.java
index 919273e..1ca65b8 100644
--- a/base/android/java/src/org/chromium/base/RadioUtils.java
+++ b/base/android/java/src/org/chromium/base/RadioUtils.java
@@ -97,8 +97,16 @@
         TelephonyManager telephonyManager =
                 (TelephonyManager) ContextUtils.getApplicationContext().getSystemService(
                         Context.TELEPHONY_SERVICE);
-        SignalStrength signalStrength = telephonyManager.getSignalStrength();
-        if (signalStrength == null) return -1;
-        return signalStrength.getLevel();
+        int level = -1;
+        try {
+            SignalStrength signalStrength = telephonyManager.getSignalStrength();
+            if (signalStrength != null) {
+                level = signalStrength.getLevel();
+            }
+        } catch (java.lang.SecurityException e) {
+            // Sometimes SignalStrength.getLevel() requires extra permissions
+            // that Chrome doesn't have. See crbug.com/1150536.
+        }
+        return level;
     }
 }
diff --git a/base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java b/base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java
index 98ca82e..68d8eaa 100644
--- a/base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java
+++ b/base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java
@@ -13,6 +13,8 @@
 public class SequencedTaskRunnerImpl extends TaskRunnerImpl implements SequencedTaskRunner {
     private AtomicInteger mPendingTasks = new AtomicInteger();
 
+    private volatile boolean mReadyToCreateNativeTaskRunner;
+
     /**
      * @param traits The TaskTraits associated with this SequencedTaskRunnerImpl.
      */
@@ -31,7 +33,27 @@
     protected void runPreNativeTask() {
         super.runPreNativeTask();
         if (mPendingTasks.decrementAndGet() > 0) {
-            super.schedulePreNativeTask();
+            if (!mReadyToCreateNativeTaskRunner) {
+                // Kick off execution in the pre-native pool.
+                super.schedulePreNativeTask();
+            } else {
+                // Initialize native runner so it can take over tasks in queue.
+                super.initNativeTaskRunner();
+            }
+        }
+    }
+
+    @Override
+    void initNativeTaskRunner() {
+        mReadyToCreateNativeTaskRunner = true;
+        // There are two possibilities:
+        // 1. There is no task currently running - native runner is initialized immediately.
+        //    Incrementing mPendingTaskCounter prevents concurrent calls to post(Delayed)Task
+        //    from starting task in pre-native pool while native runner is being initialized.
+        // 2. There is a task currently running in pre-native pool. The native runner will be
+        //    initialized when the task is completed.
+        if (mPendingTasks.getAndIncrement() == 0) {
+            super.initNativeTaskRunner();
         }
     }
 }
diff --git a/base/android/junit/src/org/chromium/base/task/SequencedTaskRunnerTaskMigrationTest.java b/base/android/junit/src/org/chromium/base/task/SequencedTaskRunnerTaskMigrationTest.java
new file mode 100644
index 0000000..6ad6990
--- /dev/null
+++ b/base/android/junit/src/org/chromium/base/task/SequencedTaskRunnerTaskMigrationTest.java
@@ -0,0 +1,197 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base.task;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.test.util.JniMocker;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class SequencedTaskRunnerTaskMigrationTest {
+    @Rule
+    public JniMocker mMocker = new JniMocker();
+
+    // It might be tempting to use fake executor similar to Robolectric's scheduler that is driven
+    // from the test's main thread. Unfortunately this approach means that only two states of the
+    // TaskRunner are observable: the posted task resides in the internal queue or the task is
+    // removed from the queue and has its execution completed. The tricky case is the another state:
+    // the task is already removed but is not yet completed. This can only be modelled with real
+    // concurrency.
+    private final ExecutorService mConcurrentExecutor = Executors.newCachedThreadPool();
+
+    @Before
+    public void setUp() throws Exception {
+        PostTask.setPrenativeThreadPoolExecutorForTesting(mConcurrentExecutor);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        PostTask.resetPrenativeThreadPoolExecutorForTesting();
+        // Ensure that no stuck threads left behind.
+        List<Runnable> queuedRunnables = mConcurrentExecutor.shutdownNow();
+        Assert.assertTrue("Some task is stuck in thread pool queue", queuedRunnables.isEmpty());
+        // Termination will be immediate if tests aren't broken. Generous timeout prevents test
+        // from being stuck forever.
+        Assert.assertTrue("Some task is stuck in thread pool",
+                mConcurrentExecutor.awaitTermination(10, TimeUnit.SECONDS));
+    }
+
+    @Test
+    public void nativeRunnerShouldNotExecuteTasksIfJavaThreadIsWorking() {
+        Executor noopExecutor = runnable -> {};
+        FakeTaskRunnerImplNatives fakeTaskRunnerNatives =
+                new FakeTaskRunnerImplNatives(noopExecutor);
+        mMocker.mock(TaskRunnerImplJni.TEST_HOOKS, fakeTaskRunnerNatives);
+        BlockingTask preNativeTask = new BlockingTask();
+        SequencedTaskRunnerImpl taskRunner = new SequencedTaskRunnerImpl(TaskTraits.USER_VISIBLE);
+
+        taskRunner.postTask(preNativeTask);
+        // Dummy task that is planned to be executed on native pool.
+        taskRunner.postTask(() -> {});
+
+        // Ensure that first task is running on pre-native thread pool: avoid race between
+        // starting the task and requesting native task runner's init.
+        preNativeTask.awaitTaskStarted();
+        taskRunner.initNativeTaskRunner();
+
+        Assert.assertFalse("Native task should not start before java task completion",
+                fakeTaskRunnerNatives.hasReceivedTasks());
+    }
+
+    @Test
+    public void pendingTasksShouldBeExecutedOnNativeRunnerAfterInit() {
+        FakeTaskRunnerImplNatives fakeTaskRunnerNatives =
+                new FakeTaskRunnerImplNatives(mConcurrentExecutor);
+        mMocker.mock(TaskRunnerImplJni.TEST_HOOKS, fakeTaskRunnerNatives);
+        BlockingTask preNativeTask = new BlockingTask();
+        AwaitableTask nativeTask = new AwaitableTask();
+        SequencedTaskRunnerImpl taskRunner = new SequencedTaskRunnerImpl(TaskTraits.USER_VISIBLE);
+
+        taskRunner.postTask(preNativeTask);
+        taskRunner.postTask(nativeTask);
+
+        // Ensure that first task is running on pre-native thread pool: avoid race between
+        // starting the task and requesting native task runner's init.
+        preNativeTask.awaitTaskStarted();
+        taskRunner.initNativeTaskRunner();
+        // Allow pre-native task to complete. Second task is going to be run on native pool because
+        // native task runner is available.
+        preNativeTask.allowComplete();
+
+        // Wait for second task to be started: avoid race between submitting task to the native task
+        // runner and checking the state of the latter in assertion below.
+        nativeTask.awaitTaskStarted();
+
+        Assert.assertTrue("Second task should run on the native pool",
+                fakeTaskRunnerNatives.hasReceivedTasks());
+    }
+
+    @Test
+    public void taskPostedAfterNativeInitShouldRunInNativePool() {
+        FakeTaskRunnerImplNatives fakeTaskRunnerNatives =
+                new FakeTaskRunnerImplNatives(mConcurrentExecutor);
+        mMocker.mock(TaskRunnerImplJni.TEST_HOOKS, fakeTaskRunnerNatives);
+
+        SequencedTaskRunnerImpl taskRunner = new SequencedTaskRunnerImpl(TaskTraits.USER_VISIBLE);
+        taskRunner.initNativeTaskRunner();
+
+        AwaitableTask nativeTask = new AwaitableTask();
+        taskRunner.postTask(nativeTask);
+
+        // Wait for the task to be started: avoid race between submitting task to the native task
+        // runner and checking the state of the latter in assertion below.
+        nativeTask.awaitTaskStarted();
+        Assert.assertTrue(
+                "Task should run on the native pool", fakeTaskRunnerNatives.hasReceivedTasks());
+    }
+
+    private static void awaitNoInterruptedException(CountDownLatch taskLatch) {
+        try {
+            // Generous timeout prevents test from being stuck forever. Actual delay is going to
+            // be a few milliseconds.
+            Assert.assertTrue("Timed out waiting for latch to count down",
+                    taskLatch.await(10, TimeUnit.SECONDS));
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    private static class AwaitableTask implements Runnable {
+        private final CountDownLatch mTaskStartedLatch = new CountDownLatch(1);
+
+        @Override
+        public void run() {
+            mTaskStartedLatch.countDown();
+        }
+
+        public void awaitTaskStarted() {
+            awaitNoInterruptedException(mTaskStartedLatch);
+        }
+    }
+
+    private static class BlockingTask extends AwaitableTask {
+        private final CountDownLatch mTaskAllowedToComplete = new CountDownLatch(1);
+
+        @Override
+        public void run() {
+            super.run();
+            awaitNoInterruptedException(mTaskAllowedToComplete);
+        }
+
+        public void allowComplete() {
+            mTaskAllowedToComplete.countDown();
+        }
+    }
+
+    private static class FakeTaskRunnerImplNatives implements TaskRunnerImpl.Natives {
+        private final AtomicInteger mReceivedTasksCount = new AtomicInteger();
+        private final Executor mExecutor;
+
+        public FakeTaskRunnerImplNatives(Executor executor) {
+            mExecutor = executor;
+        }
+
+        @Override
+        public long init(int taskRunnerType, int priority, boolean mayBlock, boolean useThreadPool,
+                byte extensionId, byte[] extensionData) {
+            return 1;
+        }
+
+        @Override
+        public void destroy(long nativeTaskRunnerAndroid) {}
+
+        @Override
+        public void postDelayedTask(
+                long nativeTaskRunnerAndroid, Runnable task, long delay, String runnableClassName) {
+            mReceivedTasksCount.incrementAndGet();
+            mExecutor.execute(task);
+        }
+
+        @Override
+        public boolean belongsToCurrentThread(long nativeTaskRunnerAndroid) {
+            return false;
+        }
+
+        public boolean hasReceivedTasks() {
+            return mReceivedTasksCount.get() > 0;
+        }
+    }
+}
diff --git a/base/debug/proc_maps_linux.cc b/base/debug/proc_maps_linux.cc
index c150bb5..ed47c58 100644
--- a/base/debug/proc_maps_linux.cc
+++ b/base/debug/proc_maps_linux.cc
@@ -17,15 +17,6 @@
 #include <inttypes.h>
 #endif
 
-#if defined(OS_ANDROID) && !defined(__LP64__)
-// In 32-bit mode, Bionic's inttypes.h defines PRI/SCNxPTR as an
-// unsigned long int, which is incompatible with Bionic's stdint.h
-// defining uintptr_t as an unsigned int:
-// https://code.google.com/p/android/issues/detail?id=57218
-#undef SCNxPTR
-#define SCNxPTR "x"
-#endif
-
 namespace base {
 namespace debug {
 
diff --git a/base/process/process.h b/base/process/process.h
index 218ee08..239993dc 100644
--- a/base/process/process.h
+++ b/base/process/process.h
@@ -74,12 +74,6 @@
   static Process OpenWithAccess(ProcessId pid, DWORD desired_access);
 #endif
 
-  // Creates an object from a |handle| owned by someone else.
-  // Don't use this for new code. It is only intended to ease the migration to
-  // a strict ownership model.
-  // TODO(rvargas) crbug.com/417532: Remove this code.
-  static Process DeprecatedGetProcessFromHandle(ProcessHandle handle);
-
   // Returns true if processes can be backgrounded.
   static bool CanBackgroundProcesses();
 
diff --git a/base/process/process_fuchsia.cc b/base/process/process_fuchsia.cc
index 45af7bc5..c04e29d 100644
--- a/base/process/process_fuchsia.cc
+++ b/base/process/process_fuchsia.cc
@@ -117,20 +117,6 @@
 }
 
 // static
-Process Process::DeprecatedGetProcessFromHandle(ProcessHandle handle) {
-  DCHECK_NE(handle, GetCurrentProcessHandle());
-  zx::process out;
-  zx_status_t result =
-      zx::unowned_process(handle)->duplicate(ZX_RIGHT_SAME_RIGHTS, &out);
-  if (result != ZX_OK) {
-    ZX_DLOG(ERROR, result) << "zx_handle_duplicate(from_handle)";
-    return Process();
-  }
-
-  return Process(out.release());
-}
-
-// static
 bool Process::CanBackgroundProcesses() {
   return false;
 }
diff --git a/base/process/process_posix.cc b/base/process/process_posix.cc
index fc771b3..3f73b82f 100644
--- a/base/process/process_posix.cc
+++ b/base/process/process_posix.cc
@@ -261,12 +261,6 @@
   return Open(pid);
 }
 
-// static
-Process Process::DeprecatedGetProcessFromHandle(ProcessHandle handle) {
-  DCHECK_NE(handle, GetCurrentProcessHandle());
-  return Process(handle);
-}
-
 #if !defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_MAC) && \
     !defined(OS_AIX)
 // static
diff --git a/base/process/process_unittest.cc b/base/process/process_unittest.cc
index 3f7fa42..7a4b3a6 100644
--- a/base/process/process_unittest.cc
+++ b/base/process/process_unittest.cc
@@ -117,21 +117,6 @@
   ASSERT_TRUE(process2.IsValid());
 }
 
-TEST_F(ProcessTest, DeprecatedGetProcessFromHandle) {
-  Process process1(SpawnChild("SimpleChildProcess"));
-  ASSERT_TRUE(process1.IsValid());
-
-  Process process2 = Process::DeprecatedGetProcessFromHandle(process1.Handle());
-  ASSERT_TRUE(process1.IsValid());
-  ASSERT_TRUE(process2.IsValid());
-  EXPECT_EQ(process1.Pid(), process2.Pid());
-  EXPECT_FALSE(process1.is_current());
-  EXPECT_FALSE(process2.is_current());
-
-  process1.Close();
-  ASSERT_TRUE(process2.IsValid());
-}
-
 MULTIPROCESS_TEST_MAIN(SleepyChildProcess) {
   PlatformThread::Sleep(TestTimeouts::action_max_timeout());
   return 0;
diff --git a/base/process/process_win.cc b/base/process/process_win.cc
index 85688b7..cdefa09 100644
--- a/base/process/process_win.cc
+++ b/base/process/process_win.cc
@@ -72,18 +72,6 @@
 }
 
 // static
-Process Process::DeprecatedGetProcessFromHandle(ProcessHandle handle) {
-  DCHECK_NE(handle, ::GetCurrentProcess());
-  ProcessHandle out_handle;
-  if (!::DuplicateHandle(GetCurrentProcess(), handle,
-                         GetCurrentProcess(), &out_handle,
-                         0, FALSE, DUPLICATE_SAME_ACCESS)) {
-    return Process();
-  }
-  return Process(out_handle);
-}
-
-// static
 bool Process::CanBackgroundProcesses() {
   return true;
 }
diff --git a/base/test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java b/base/test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java
deleted file mode 100644
index af570fb..0000000
--- a/base/test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base.test;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.support.test.runner.lifecycle.Stage;
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-
-import org.junit.Assert;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-import org.chromium.base.ContextUtils;
-import org.chromium.base.Log;
-import org.chromium.base.test.util.ApplicationTestUtils;
-
-/**
- * A replacement for ActivityTestRule, designed for use in Chromium. This implementation supports
- * launching the target activity through a launcher or redirect from another Activity.
- *
- * @param <T> The type of Activity this Rule will use.
- */
-public class BaseActivityTestRule<T extends Activity> implements TestRule {
-    private static final String TAG = "BaseActivityTestRule";
-
-    private final Class<T> mActivityClass;
-    private boolean mFinishActivity = true;
-    private T mActivity;
-
-    /**
-     * @param activityClass The Class of the Activity the TestRule will use.
-     */
-    public BaseActivityTestRule(Class<T> activityClass) {
-        mActivityClass = activityClass;
-    }
-
-    @Override
-    public Statement apply(final Statement base, final Description desc) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                base.evaluate();
-                if (mFinishActivity && mActivity != null) {
-                    ApplicationTestUtils.finishActivity(mActivity);
-                }
-            }
-        };
-    }
-
-    /**
-     * @param finishActivity Whether to finish the Activity between tests. This is only meaningful
-     *     in the context of {@link Batch} tests. Non-batched tests will always finish Activities
-     *     between tests.
-     */
-    public void setFinishActivity(boolean finishActivity) {
-        mFinishActivity = finishActivity;
-    }
-
-    /**
-     * @return The activity under test.
-     */
-    public T getActivity() {
-        return mActivity;
-    }
-
-    /**
-     * Set the Activity to be used by this TestRule.
-     */
-    public void setActivity(T activity) {
-        mActivity = activity;
-    }
-
-    /**
-     * Launches the Activity under test using the provided intent.
-     */
-    public void launchActivity(@NonNull Intent startIntent) {
-        String packageName = ContextUtils.getApplicationContext().getPackageName();
-        Assert.assertTrue(TextUtils.equals(startIntent.getPackage(), packageName)
-                || TextUtils.equals(startIntent.getComponent().getPackageName(), packageName));
-
-        startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
-        Log.d(TAG, String.format("Launching activity %s", mActivityClass.getName()));
-
-        mActivity = ApplicationTestUtils.waitForActivityWithClass(mActivityClass, Stage.CREATED,
-                () -> ContextUtils.getApplicationContext().startActivity(startIntent));
-    }
-}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/ApplicationTestUtils.java b/base/test/android/javatests/src/org/chromium/base/test/util/ApplicationTestUtils.java
index bd174282..799c803 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/util/ApplicationTestUtils.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/util/ApplicationTestUtils.java
@@ -26,16 +26,9 @@
 
     /** Waits until the given activity transitions to the given state. */
     public static void waitForActivityState(Activity activity, Stage stage) {
-        waitForActivityState(null, activity, stage);
-    }
-
-    /** Waits until the given activity transitions to the given state. */
-    public static void waitForActivityState(String failureReason, Activity activity, Stage stage) {
-        CriteriaHelper.pollUiThread(
-                ()
-                        -> { return sMonitor.getLifecycleStageOf(activity) == stage; },
-                failureReason, ScalableTimeout.scaleTimeout(10000),
-                CriteriaHelper.DEFAULT_POLLING_INTERVAL);
+        CriteriaHelper.pollUiThread(() -> {
+            return sMonitor.getLifecycleStageOf(activity) == stage;
+        }, ScalableTimeout.scaleTimeout(10000), CriteriaHelper.DEFAULT_POLLING_INTERVAL);
     }
 
     /** Finishes the given activity and waits for its onDestroy() to be called. */
@@ -45,9 +38,7 @@
                 activity.finish();
             }
         });
-        waitForActivityState(
-                "Failed to finish the Activity. Did you start a second Activity and not finish it?",
-                activity, Stage.DESTROYED);
+        waitForActivityState(activity, Stage.DESTROYED);
     }
 
     /**
@@ -57,25 +48,11 @@
      * @return The newly created Activity.
      */
     public static <T extends Activity> T recreateActivity(T activity) {
-        return waitForActivityWithClass(
-                activity.getClass(), Stage.RESUMED, () -> activity.recreate());
-    }
-
-    /**
-     * Waits for an activity of the specified class to reach the specified Activity {@link Stage},
-     * triggered by running the provided trigger.
-     *
-     * @param activityClass The class type to wait for.
-     * @param state The Activity {@link Stage} to wait for an activity of the right class type to
-     * reach.
-     * @param trigger The Runnable that will trigger the state change to wait for.
-     */
-    public static <T extends Activity> T waitForActivityWithClass(
-            Class<? extends Activity> activityClass, Stage stage, Runnable trigger) {
+        final Class<?> activityClass = activity.getClass();
         final CallbackHelper activityCallback = new CallbackHelper();
         final AtomicReference<T> activityRef = new AtomicReference<>();
-        ActivityLifecycleCallback stateListener = (Activity newActivity, Stage newStage) -> {
-            if (newStage == stage) {
+        ActivityLifecycleCallback stateListener = (Activity newActivity, Stage stage) -> {
+            if (stage == Stage.RESUMED) {
                 if (!activityClass.isAssignableFrom(newActivity.getClass())) return;
 
                 activityRef.set((T) newActivity);
@@ -85,8 +62,8 @@
         sMonitor.addLifecycleCallback(stateListener);
 
         try {
-            ThreadUtils.runOnUiThreadBlocking(() -> trigger.run());
-            activityCallback.waitForCallback("No Activity reached target state.", 0);
+            ThreadUtils.runOnUiThreadBlocking(() -> activity.recreate());
+            activityCallback.waitForCallback("Activity did not start as expected", 0);
             T createdActivity = activityRef.get();
             Assert.assertNotNull("Activity reference is null.", createdActivity);
             return createdActivity;
diff --git a/base/threading/platform_thread_mac.mm b/base/threading/platform_thread_mac.mm
index 3a32146..f6bbdca 100644
--- a/base/threading/platform_thread_mac.mm
+++ b/base/threading/platform_thread_mac.mm
@@ -148,9 +148,12 @@
   mach_timebase_info(&tb_info);
 
   if (!realtime_period.is_zero()) {
-    uint32_t abs_realtime_period =
-        saturated_cast<uint32_t>(realtime_period.InNanoseconds() *
-                                 (double(tb_info.denom) / tb_info.numer));
+    // Limit the lowest value to 2.9 ms we used to have historically. The lower
+    // the period, the more CPU frequency may go up, and we don't want to risk
+    // worsening the thermal situation.
+    uint32_t abs_realtime_period = saturated_cast<uint32_t>(
+        std::max(realtime_period.InNanoseconds(), 2900000LL) *
+        (double(tb_info.denom) / tb_info.numer));
     TimeConstraints config = g_time_constraints.load();
     time_constraints.period = abs_realtime_period;
     time_constraints.constraint = std::min(
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index 38fd838..cc1ca9ba 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -138,6 +138,7 @@
 class Predictor;
 }
 namespace chrome_cleaner {
+class ResetShortcutsComponent;
 class SystemReportComponent;
 }
 namespace content {
@@ -453,6 +454,7 @@
   friend class blink::SourceStream;
   friend class blink::WorkerThread;
   friend class blink::scheduler::WorkerThread;
+  friend class chrome_cleaner::ResetShortcutsComponent;
   friend class chrome_cleaner::SystemReportComponent;
   friend class content::BrowserMainLoop;
   friend class content::BrowserProcessSubThread;
diff --git a/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java b/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java
index 2199588b1..565ebe6 100644
--- a/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java
+++ b/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java
@@ -20,15 +20,11 @@
  * See crbug.com/1144345 for more context.
  */
 public class FragmentActivityReplacer extends ByteCodeRewriter {
-    private static final String FRAGMENT_CLASS_PATH = "androidx/fragment/app/Fragment.class";
-    private static final String FRAGMENT_ACTIVITY_INTERNAL_CLASS_NAME =
-            "androidx/fragment/app/FragmentActivity";
-    private static final String ACTIVITY_INTERNAL_CLASS_NAME = "android/app/Activity";
     private static final String GET_ACTIVITY_METHOD_NAME = "getActivity";
-    private static final String REQUIRE_ACTIVITY_METHOD_NAME = "requireActivity";
+    private static final String NEW_METHOD_DESCRIPTOR = "()Landroid/app/Activity;";
     private static final String OLD_METHOD_DESCRIPTOR =
             "()Landroidx/fragment/app/FragmentActivity;";
-    private static final String NEW_METHOD_DESCRIPTOR = "()Landroid/app/Activity;";
+    private static final String REQUIRE_ACTIVITY_METHOD_NAME = "requireActivity";
 
     public static void main(String[] args) throws IOException {
         // Invoke this script using //build/android/gyp/bytecode_processor.py
@@ -49,7 +45,7 @@
     @Override
     protected ClassVisitor getClassVisitorForClass(String classPath, ClassVisitor delegate) {
         ClassVisitor getActivityReplacer = new GetActivityReplacer(delegate);
-        if (classPath.equals(FRAGMENT_CLASS_PATH)) {
+        if (classPath.equals("androidx/fragment/app/Fragment.class")) {
             return new FragmentClassVisitor(getActivityReplacer);
         }
         return getActivityReplacer;
@@ -84,8 +80,7 @@
     }
 
     /**
-     * Makes Fragment.getActivity() and Fragment.requireActivity() non-final, and changes their
-     * return types to Activity.
+     * Updates the implementation of Fragment.getActivity() and Fragment.requireActivity().
      */
     private static class FragmentClassVisitor extends ClassVisitor {
         private FragmentClassVisitor(ClassVisitor baseVisitor) {
@@ -95,21 +90,33 @@
         @Override
         public MethodVisitor visitMethod(
                 int access, String name, String descriptor, String signature, String[] exceptions) {
-            MethodVisitor base;
-            // Update the descriptor of getActivity/requireActivity, and make them non-final.
+            // Update the descriptor of getActivity() and requireActivity().
+            MethodVisitor baseVisitor;
             if (name.equals(GET_ACTIVITY_METHOD_NAME)
                     || name.equals(REQUIRE_ACTIVITY_METHOD_NAME)) {
-                base = super.visitMethod(
+                baseVisitor = super.visitMethod(
                         access & ~Opcodes.ACC_FINAL, name, NEW_METHOD_DESCRIPTOR, null, exceptions);
             } else {
-                base = super.visitMethod(access, name, descriptor, signature, exceptions);
+                baseVisitor = super.visitMethod(access, name, descriptor, signature, exceptions);
             }
 
-            return new MethodRemapper(base, new Remapper() {
+            // Replace getActivity() with `return ContextUtils.activityFromContext(getContext());`
+            if (name.equals(GET_ACTIVITY_METHOD_NAME)) {
+                baseVisitor.visitVarInsn(Opcodes.ALOAD, 0);
+                baseVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "androidx/fragment/app/Fragment",
+                        "getContext", "()Landroid/content/Context;", false);
+                baseVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "org/chromium/utils/ContextUtils",
+                        "activityFromContext", "(Landroid/content/Context;)Landroid/app/Activity;",
+                        false);
+                baseVisitor.visitInsn(Opcodes.ARETURN);
+                return null;
+            }
+
+            return new MethodRemapper(baseVisitor, new Remapper() {
                 @Override
                 public String mapType(String internalName) {
-                    if (internalName.equals(FRAGMENT_ACTIVITY_INTERNAL_CLASS_NAME)) {
-                        return ACTIVITY_INTERNAL_CLASS_NAME;
+                    if (internalName.equals("androidx/fragment/app/FragmentActivity")) {
+                        return "android/app/Activity";
                     }
                     return internalName;
                 }
diff --git a/build/android/gyp/compile_java.py b/build/android/gyp/compile_java.py
index 9939bd7..215231f3 100755
--- a/build/android/gyp/compile_java.py
+++ b/build/android/gyp/compile_java.py
@@ -207,6 +207,8 @@
       r'(Note: .* uses? unchecked or unsafe operations.)$')
   recompile_re = re.compile(r'(Note: Recompile with -Xlint:.* for details.)$')
 
+  activity_re = re.compile(r'^(?P<prefix>\s*location: )class Activity$')
+
   warning_color = ['full_message', colorama.Fore.YELLOW + colorama.Style.DIM]
   error_color = ['full_message', colorama.Fore.MAGENTA + colorama.Style.BRIGHT]
   marker_color = ['marker', colorama.Fore.BLUE + colorama.Style.BRIGHT]
@@ -222,6 +224,13 @@
     return not (deprecated_re.match(line) or unchecked_re.match(line)
                 or recompile_re.match(line))
 
+  def Elaborate(line):
+    if activity_re.match(line):
+      prefix = ' ' * activity_re.match(line).end('prefix')
+      return '{}\n{}Expecting a FragmentActivity? See {}'.format(
+          line, prefix, 'docs/ui/android/bytecode_rewriting.md')
+    return line
+
   def ApplyColors(line):
     if warning_re.match(line):
       line = Colorize(line, warning_re, warning_color)
@@ -231,7 +240,9 @@
       line = Colorize(line, marker_re, marker_color)
     return line
 
-  return '\n'.join(map(ApplyColors, filter(ApplyFilters, output.split('\n'))))
+  lines = (l for l in output.split('\n') if ApplyFilters(l))
+  lines = (ApplyColors(Elaborate(l)) for l in lines)
+  return '\n'.join(lines)
 
 
 def CheckErrorproneStderrWarning(jar_path, expected_warning_regex,
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py
index 84cfffa..91d8f9f 100755
--- a/build/android/resource_sizes.py
+++ b/build/android/resource_sizes.py
@@ -222,7 +222,9 @@
   skip_extract_lib = bool(parse_attr('android:extractNativeLibs'))
   sdk_version = parse_attr('android:minSdkVersion')
   is_feature_split = parse_attr('android:isFeatureSplit')
-  on_demand = bool(is_feature_split and parse_attr('dist:onDemand'))
+  # Can use <dist:on-demand>, or <module dist:onDemand="true">.
+  on_demand = parse_attr('dist:onDemand') or 'dist:on-demand' in output
+  on_demand = bool(on_demand and is_feature_split)
 
   return sdk_version, skip_extract_lib, on_demand
 
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index f3b7e7a..05221ad 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -337,6 +337,7 @@
 
 if (is_win) {
   default_compiler_configs += [
+    "//build/config/win:default_cfg_compiler",
     "//build/config/win:default_crt",
     "//build/config/win:lean_and_mean",
     "//build/config/win:nominmax",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index ec939f2..5703325 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -263,7 +263,10 @@
   # of some security-critical code: see https://crbug.com/1139129.
   # Nacl does not support the flag. And, we still want UBSAN to catch undefined
   # behavior related to nullptrs, so do not add this flag if UBSAN is enabled.
-  if (!is_nacl && !is_ubsan) {
+  # GCC seems to have some bugs compiling constexpr code when this is defined,
+  # so only enable it if using_clang. See: https://gcc.gnu.org/PR97913
+  # TODO(mpdenton): remove is_clang once GCC bug is fixed.
+  if (!is_nacl && !is_ubsan && is_clang) {
     cflags += [ "-fno-delete-null-pointer-checks" ]
   }
 
diff --git a/build/config/fuchsia/tests-with-exec.cmx b/build/config/fuchsia/tests-with-exec.cmx
index 8cd8b75f..7e6b3d20 100644
--- a/build/config/fuchsia/tests-with-exec.cmx
+++ b/build/config/fuchsia/tests-with-exec.cmx
@@ -1,9 +1,5 @@
 {
   "sandbox": {
-    "dev": [
-      "null",
-      "zero"
-    ],
     "features": [
       "deprecated-ambient-replace-as-executable",
       "isolated-cache-storage",
@@ -12,6 +8,10 @@
       "root-ssl-certificates",
       "vulkan"
     ],
+    "dev": [
+      "null",
+      "zero"
+    ],
     "services": [
       "fuchsia.accessibility.semantics.SemanticsManager",
       "fuchsia.camera3.DeviceWatcher",
@@ -26,7 +26,7 @@
       "fuchsia.mediacodec.CodecFactory",
       "fuchsia.memorypressure.Provider",
       "fuchsia.net.NameLookup",
-      "fuchsia.net.interfaces.State",
+      "fuchsia.netstack.Netstack",
       "fuchsia.posix.socket.Provider",
       "fuchsia.process.Launcher",
       "fuchsia.sys.Environment",
diff --git a/build/config/fuchsia/tests.cmx b/build/config/fuchsia/tests.cmx
index e263b0e..57d07851 100644
--- a/build/config/fuchsia/tests.cmx
+++ b/build/config/fuchsia/tests.cmx
@@ -1,9 +1,5 @@
 {
   "sandbox": {
-    "dev": [
-      "null",
-      "zero"
-    ],
     "features": [
       "config-data",
       "isolated-cache-storage",
@@ -12,6 +8,10 @@
       "root-ssl-certificates",
       "vulkan"
     ],
+    "dev": [
+      "null",
+      "zero"
+    ],
     "services": [
       "fuchsia.accessibility.semantics.SemanticsManager",
       "fuchsia.camera3.DeviceWatcher",
@@ -26,7 +26,7 @@
       "fuchsia.mediacodec.CodecFactory",
       "fuchsia.memorypressure.Provider",
       "fuchsia.net.NameLookup",
-      "fuchsia.net.interfaces.State",
+      "fuchsia.netstack.Netstack",
       "fuchsia.posix.socket.Provider",
       "fuchsia.process.Launcher",
       "fuchsia.sys.Environment",
diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn
index e72cbd4..51437c6 100644
--- a/build/config/win/BUILD.gn
+++ b/build/config/win/BUILD.gn
@@ -90,16 +90,6 @@
     # Tell clang which version of MSVC to emulate.
     cflags += [ "-fmsc-version=1916" ]
 
-    # Emit table of address-taken functions for Control-Flow Guard (CFG).
-    # This is needed to allow functions to be called by code that is built
-    # with CFG enabled, such as system libraries.
-    # The CFG guards are only emitted if |win_enable_cfg_guards| is enabled.
-    if (win_enable_cfg_guards) {
-      cflags += [ "/guard:cf" ]
-    } else {
-      cflags += [ "/guard:cf,nochecks" ]
-    }
-
     if (is_component_build) {
       cflags += [
         # Do not export inline member functions. This makes component builds
@@ -353,6 +343,31 @@
   }
 }
 
+config("default_cfg_compiler") {
+  # Emit table of address-taken functions for Control-Flow Guard (CFG).
+  # This is needed to allow functions to be called by code that is built
+  # with CFG enabled, such as system libraries.
+  # The CFG guards are only emitted if |win_enable_cfg_guards| is enabled.
+  if (is_clang) {
+    if (win_enable_cfg_guards) {
+      cflags = [ "/guard:cf" ]
+    } else {
+      cflags = [ "/guard:cf,nochecks" ]
+    }
+  }
+}
+
+# To disable CFG guards for a target, remove the "default_cfg_compiler"
+# config, and add "disable_guards_cfg_compiler" config.
+config("disable_guards_cfg_compiler") {
+  # Emit table of address-taken functions for Control-Flow Guard (CFG).
+  # This is needed to allow functions to be called by code that is built
+  # with CFG enabled, such as system libraries.
+  if (is_clang) {
+    cflags = [ "/guard:cf,nochecks" ]
+  }
+}
+
 config("cfi_linker") {
   # Control Flow Guard (CFG)
   # https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 0d5d9c6..5df48ad 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20201119.2.1
+0.20201120.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 0d5d9c6..5df48ad 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20201119.2.1
+0.20201120.1.1
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 3bb5e55..6c69653 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -208,6 +208,8 @@
     "raster/raster_buffer.h",
     "raster/raster_buffer_provider.cc",
     "raster/raster_buffer_provider.h",
+    "raster/raster_query_queue.cc",
+    "raster/raster_query_queue.h",
     "raster/raster_source.cc",
     "raster/raster_source.h",
     "raster/scoped_gpu_raster.cc",
@@ -482,6 +484,8 @@
     "test/fake_proxy.h",
     "test/fake_raster_buffer_provider.cc",
     "test/fake_raster_buffer_provider.h",
+    "test/fake_raster_query_queue.cc",
+    "test/fake_raster_query_queue.h",
     "test/fake_raster_source.cc",
     "test/fake_raster_source.h",
     "test/fake_recording_source.cc",
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc
index d159f9a..84a794c3 100644
--- a/cc/paint/oop_pixeltest.cc
+++ b/cc/paint/oop_pixeltest.cc
@@ -1906,12 +1906,13 @@
   auto* sii = raster_context_provider_->SharedImageInterface();
   gpu::Mailbox dest_mailbox = CreateMailboxSharedImage(
       ri, sii, options, viz::ResourceFormat::RGBA_8888);
-  gpu::Mailbox y_mailbox = CreateMailboxSharedImage(
-      ri, sii, options, viz::ResourceFormat::LUMINANCE_8);
-  gpu::Mailbox u_mailbox = CreateMailboxSharedImage(
-      ri, sii, uv_options, viz::ResourceFormat::LUMINANCE_8);
-  gpu::Mailbox v_mailbox = CreateMailboxSharedImage(
-      ri, sii, uv_options, viz::ResourceFormat::LUMINANCE_8);
+  gpu::Mailbox yuv_mailboxes[3]{
+      CreateMailboxSharedImage(ri, sii, options,
+                               viz::ResourceFormat::LUMINANCE_8),
+      CreateMailboxSharedImage(ri, sii, uv_options,
+                               viz::ResourceFormat::LUMINANCE_8),
+      CreateMailboxSharedImage(ri, sii, uv_options,
+                               viz::ResourceFormat::LUMINANCE_8)};
 
   size_t y_pixels_size = options.resource_size.GetArea();
   size_t uv_pixels_size = uv_options.resource_size.GetArea();
@@ -1926,27 +1927,28 @@
 
   // Upload initial yuv image data
   gpu::gles2::GLES2Interface* gl = gles2_context_provider_->ContextGL();
-  UploadPixels(gl, y_mailbox, options.resource_size, GL_LUMINANCE,
+  UploadPixels(gl, yuv_mailboxes[0], options.resource_size, GL_LUMINANCE,
                GL_UNSIGNED_BYTE, y_pix.get());
-  UploadPixels(gl, u_mailbox, uv_options.resource_size, GL_LUMINANCE,
+  UploadPixels(gl, yuv_mailboxes[1], uv_options.resource_size, GL_LUMINANCE,
                GL_UNSIGNED_BYTE, u_pix.get());
-  UploadPixels(gl, v_mailbox, uv_options.resource_size, GL_LUMINANCE,
+  UploadPixels(gl, yuv_mailboxes[2], uv_options.resource_size, GL_LUMINANCE,
                GL_UNSIGNED_BYTE, v_pix.get());
   gl->OrderingBarrierCHROMIUM();
 
-  ri->ConvertYUVMailboxesToRGB(dest_mailbox, kJPEG_SkYUVColorSpace, y_mailbox,
-                               u_mailbox, v_mailbox);
+  ri->ConvertYUVAMailboxesToRGB(dest_mailbox, kJPEG_SkYUVColorSpace,
+                                SkYUVAInfo::PlaneConfig::kY_U_V,
+                                SkYUVAInfo::Subsampling::k420, yuv_mailboxes);
   ri->OrderingBarrierCHROMIUM();
   SkBitmap actual_bitmap = ReadbackMailbox(gl, dest_mailbox, options);
 
   // Create the expected result using SkImage::MakeFromYUVTextures
   GrBackendTexture backend_textures[3];
-  backend_textures[0] = MakeBackendTexture(gl, y_mailbox, options.resource_size,
-                                           GL_LUMINANCE8_EXT);
+  backend_textures[0] = MakeBackendTexture(
+      gl, yuv_mailboxes[0], options.resource_size, GL_LUMINANCE8_EXT);
   backend_textures[1] = MakeBackendTexture(
-      gl, u_mailbox, uv_options.resource_size, GL_LUMINANCE8_EXT);
+      gl, yuv_mailboxes[1], uv_options.resource_size, GL_LUMINANCE8_EXT);
   backend_textures[2] = MakeBackendTexture(
-      gl, v_mailbox, uv_options.resource_size, GL_LUMINANCE8_EXT);
+      gl, yuv_mailboxes[2], uv_options.resource_size, GL_LUMINANCE8_EXT);
 
   SkYUVAInfo yuva_info(
       {options.resource_size.width(), options.resource_size.height()},
@@ -1973,9 +1975,9 @@
   gpu::SyncToken sync_token;
   gl->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData());
   sii->DestroySharedImage(sync_token, dest_mailbox);
-  sii->DestroySharedImage(sync_token, y_mailbox);
-  sii->DestroySharedImage(sync_token, u_mailbox);
-  sii->DestroySharedImage(sync_token, v_mailbox);
+  sii->DestroySharedImage(sync_token, yuv_mailboxes[0]);
+  sii->DestroySharedImage(sync_token, yuv_mailboxes[1]);
+  sii->DestroySharedImage(sync_token, yuv_mailboxes[2]);
 }
 
 TEST_F(OopPixelTest, ReadbackImagePixels) {
@@ -2032,10 +2034,11 @@
 
   gpu::Mailbox dest_mailbox = CreateMailboxSharedImage(
       ri, sii, options, viz::ResourceFormat::RGBA_8888);
-  gpu::Mailbox y_mailbox = CreateMailboxSharedImage(
-      ri, sii, options, viz::ResourceFormat::LUMINANCE_8);
-  gpu::Mailbox uv_mailbox =
-      CreateMailboxSharedImage(ri, sii, uv_options, viz::ResourceFormat::RG_88);
+  gpu::Mailbox y_uv_mailboxes[2]{
+      CreateMailboxSharedImage(ri, sii, options,
+                               viz::ResourceFormat::LUMINANCE_8),
+      CreateMailboxSharedImage(ri, sii, uv_options, viz::ResourceFormat::RG_88),
+  };
 
   size_t y_pixels_size = options.resource_size.GetArea();
   size_t uv_pixels_size = uv_options.resource_size.GetArea() * 2;
@@ -2049,23 +2052,24 @@
   }
 
   gpu::gles2::GLES2Interface* gl = gles2_context_provider_->ContextGL();
-  UploadPixels(gl, y_mailbox, options.resource_size, GL_LUMINANCE,
+  UploadPixels(gl, y_uv_mailboxes[0], options.resource_size, GL_LUMINANCE,
                GL_UNSIGNED_BYTE, y_pix.get());
-  UploadPixels(gl, uv_mailbox, uv_options.resource_size, GL_RG,
+  UploadPixels(gl, y_uv_mailboxes[1], uv_options.resource_size, GL_RG,
                GL_UNSIGNED_BYTE, uv_pix.get());
   gl->OrderingBarrierCHROMIUM();
 
-  ri->ConvertNV12MailboxesToRGB(dest_mailbox, kJPEG_SkYUVColorSpace, y_mailbox,
-                                uv_mailbox);
+  ri->ConvertYUVAMailboxesToRGB(dest_mailbox, kJPEG_SkYUVColorSpace,
+                                SkYUVAInfo::PlaneConfig::kY_UV,
+                                SkYUVAInfo::Subsampling::k420, y_uv_mailboxes);
   ri->OrderingBarrierCHROMIUM();
   SkBitmap actual_bitmap = ReadbackMailbox(gl, dest_mailbox, options);
 
   // Create the expected result using SkImage::MakeFromYUVTextures
   GrBackendTexture backend_textures[2];
-  backend_textures[0] = MakeBackendTexture(gl, y_mailbox, options.resource_size,
-                                           GL_LUMINANCE8_EXT);
-  backend_textures[1] =
-      MakeBackendTexture(gl, uv_mailbox, uv_options.resource_size, GL_RG8);
+  backend_textures[0] = MakeBackendTexture(
+      gl, y_uv_mailboxes[0], options.resource_size, GL_LUMINANCE8_EXT);
+  backend_textures[1] = MakeBackendTexture(gl, y_uv_mailboxes[1],
+                                           uv_options.resource_size, GL_RG8);
 
   SkYUVAInfo yuva_info(
       {options.resource_size.width(), options.resource_size.height()},
@@ -2091,8 +2095,8 @@
   gpu::SyncToken sync_token;
   gl->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData());
   sii->DestroySharedImage(sync_token, dest_mailbox);
-  sii->DestroySharedImage(sync_token, y_mailbox);
-  sii->DestroySharedImage(sync_token, uv_mailbox);
+  sii->DestroySharedImage(sync_token, y_uv_mailboxes[0]);
+  sii->DestroySharedImage(sync_token, y_uv_mailboxes[1]);
 }
 #endif  // !defined(OS_ANDROID)
 
diff --git a/cc/raster/bitmap_raster_buffer_provider.cc b/cc/raster/bitmap_raster_buffer_provider.cc
index 0e6287c..397fe086 100644
--- a/cc/raster/bitmap_raster_buffer_provider.cc
+++ b/cc/raster/bitmap_raster_buffer_provider.cc
@@ -160,8 +160,4 @@
 
 void BitmapRasterBufferProvider::Shutdown() {}
 
-bool BitmapRasterBufferProvider::CheckRasterFinishedQueries() {
-  return false;
-}
-
 }  // namespace cc
diff --git a/cc/raster/bitmap_raster_buffer_provider.h b/cc/raster/bitmap_raster_buffer_provider.h
index 60a01b0..88a1837 100644
--- a/cc/raster/bitmap_raster_buffer_provider.h
+++ b/cc/raster/bitmap_raster_buffer_provider.h
@@ -51,7 +51,6 @@
       base::OnceClosure callback,
       uint64_t pending_callback_id) const override;
   void Shutdown() override;
-  bool CheckRasterFinishedQueries() override;
 
  private:
   std::unique_ptr<base::trace_event::ConvertableToTraceFormat> StateAsValue()
diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc
index 76ecd0d..5dfca52 100644
--- a/cc/raster/gpu_raster_buffer_provider.cc
+++ b/cc/raster/gpu_raster_buffer_provider.cc
@@ -372,6 +372,7 @@
     const gfx::Size& max_tile_size,
     bool unpremultiply_and_dither_low_bit_depth_tiles,
     bool enable_oop_rasterization,
+    RasterQueryQueue* const pending_raster_queries,
     float raster_metric_probability)
     : compositor_context_provider_(compositor_context_provider),
       worker_context_provider_(worker_context_provider),
@@ -381,8 +382,10 @@
       unpremultiply_and_dither_low_bit_depth_tiles_(
           unpremultiply_and_dither_low_bit_depth_tiles),
       enable_oop_rasterization_(enable_oop_rasterization),
+      pending_raster_queries_(pending_raster_queries),
       random_generator_(static_cast<uint32_t>(base::RandUint64())),
       bernoulli_distribution_(raster_metric_probability) {
+  DCHECK(pending_raster_queries);
   DCHECK(compositor_context_provider);
   DCHECK(worker_context_provider);
 }
@@ -494,7 +497,7 @@
     bool depends_on_at_raster_decodes,
     bool depends_on_hardware_accelerated_jpeg_candidates,
     bool depends_on_hardware_accelerated_webp_candidates) {
-  PendingRasterQuery query;
+  RasterQuery query;
   query.depends_on_hardware_accelerated_jpeg_candidates =
       depends_on_hardware_accelerated_jpeg_candidates;
   query.depends_on_hardware_accelerated_webp_candidates =
@@ -511,13 +514,12 @@
       query.raster_buffer_creation_time = raster_buffer_creation_time;
 
     // Note that it is important to scope the raster context lock to
-    // PlaybackOnWorkerThreadInternal and release it before acquiring this lock
-    // to avoid a deadlock in CheckRasterFinishedQueries which acquires the
-    // raster context lock while holding this lock.
-    base::AutoLock hold(pending_raster_queries_lock_);
-    pending_raster_queries_.push_back(query);
+    // PlaybackOnWorkerThreadInternal and release it before calling this
+    // function to avoid a deadlock in
+    // RasterQueryQueue::CheckRasterFinishedQueries which acquires the raster
+    // context lock while holding a lock used in the function.
+    pending_raster_queries_->Append(std::move(query));
   }
-  DCHECK(!query.raster_start_query_id || query.raster_duration_query_id);
 
   return raster_finished_token;
 }
@@ -539,7 +541,7 @@
     const RasterSource::PlaybackSettings& playback_settings,
     const GURL& url,
     bool depends_on_at_raster_decodes,
-    PendingRasterQuery* query) {
+    RasterQuery* query) {
   viz::RasterContextProvider::ScopedRasterContextLock scoped_context(
       worker_context_provider_, url.possibly_invalid_spec().c_str());
   gpu::raster::RasterInterface* ri = scoped_context.RasterInterface();
@@ -620,113 +622,4 @@
   }
 }
 
-#define UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(name, total_time) \
-  UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(                              \
-      name, total_time, base::TimeDelta::FromMicroseconds(1),           \
-      base::TimeDelta::FromMilliseconds(100), 100);
-
-bool GpuRasterBufferProvider::CheckRasterFinishedQueries() {
-  base::AutoLock hold(pending_raster_queries_lock_);
-  if (pending_raster_queries_.empty())
-    return false;
-
-  viz::RasterContextProvider::ScopedRasterContextLock scoped_context(
-      worker_context_provider_);
-  auto* ri = scoped_context.RasterInterface();
-
-  auto it = pending_raster_queries_.begin();
-  while (it != pending_raster_queries_.end()) {
-    GLuint complete = 0;
-    ri->GetQueryObjectuivEXT(it->raster_duration_query_id,
-                             GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT,
-                             &complete);
-    if (!complete)
-      break;
-
-#if DCHECK_IS_ON()
-    if (it->raster_start_query_id) {
-      // We issued the GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM query prior to the
-      // GL_COMMANDS_ISSUED_CHROMIUM query. Therefore, if the result of the
-      // latter is available, the result of the former should be too.
-      complete = 0;
-      ri->GetQueryObjectuivEXT(it->raster_start_query_id,
-                               GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT,
-                               &complete);
-      DCHECK(complete);
-    }
-#endif
-
-    GLuint gpu_raster_duration = 0u;
-    ri->GetQueryObjectuivEXT(it->raster_duration_query_id, GL_QUERY_RESULT_EXT,
-                             &gpu_raster_duration);
-    ri->DeleteQueriesEXT(1, &it->raster_duration_query_id);
-
-    base::TimeDelta raster_duration =
-        it->worker_raster_duration +
-        base::TimeDelta::FromMicroseconds(gpu_raster_duration);
-
-    // It is safe to use the UMA macros here with runtime generated strings
-    // because the client name should be initialized once in the process, before
-    // recording any metrics here.
-    const char* client_name = GetClientNameForMetrics();
-
-    if (it->raster_start_query_id) {
-      GLuint64 gpu_raster_start_time = 0u;
-      ri->GetQueryObjectui64vEXT(it->raster_start_query_id, GL_QUERY_RESULT_EXT,
-                                 &gpu_raster_start_time);
-      ri->DeleteQueriesEXT(1, &it->raster_start_query_id);
-
-      // The base::checked_cast<int64_t> should not crash as long as the GPU
-      // process was not compromised: that's because the result of the query
-      // should have been generated using base::TimeDelta::InMicroseconds()
-      // there, so the result should fit in an int64_t.
-      base::TimeDelta raster_scheduling_delay =
-          base::TimeDelta::FromMicroseconds(
-              base::checked_cast<int64_t>(gpu_raster_start_time)) -
-          it->raster_buffer_creation_time.since_origin();
-
-      // We expect the clock we're using to be monotonic, so we shouldn't get a
-      // negative scheduling delay.
-      DCHECK_GE(raster_scheduling_delay.InMicroseconds(), 0u);
-      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
-          base::StringPrintf(
-              "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes.All",
-              client_name),
-          raster_scheduling_delay);
-      if (it->depends_on_hardware_accelerated_jpeg_candidates) {
-        UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
-            base::StringPrintf(
-                "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes."
-                "TilesWithJpegHwDecodeCandidates",
-                client_name),
-            raster_scheduling_delay);
-      }
-      if (it->depends_on_hardware_accelerated_webp_candidates) {
-        UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
-            base::StringPrintf(
-                "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes."
-                "TilesWithWebPHwDecodeCandidates",
-                client_name),
-            raster_scheduling_delay);
-      }
-    }
-
-    if (enable_oop_rasterization_) {
-      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
-          base::StringPrintf("Renderer4.%s.RasterTaskTotalDuration.Oop",
-                             client_name),
-          raster_duration);
-    } else {
-      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
-          base::StringPrintf("Renderer4.%s.RasterTaskTotalDuration.Gpu",
-                             client_name),
-          raster_duration);
-    }
-
-    it = pending_raster_queries_.erase(it);
-  }
-
-  return pending_raster_queries_.size() > 0u;
-}
-
 }  // namespace cc
diff --git a/cc/raster/gpu_raster_buffer_provider.h b/cc/raster/gpu_raster_buffer_provider.h
index 780f3304..d3cc322 100644
--- a/cc/raster/gpu_raster_buffer_provider.h
+++ b/cc/raster/gpu_raster_buffer_provider.h
@@ -12,6 +12,7 @@
 
 #include "base/time/time.h"
 #include "cc/raster/raster_buffer_provider.h"
+#include "cc/raster/raster_query_queue.h"
 #include "gpu/command_buffer/common/sync_token.h"
 
 namespace gpu {
@@ -38,6 +39,7 @@
       const gfx::Size& max_tile_size,
       bool unpremultiply_and_dither_low_bit_depth_tiles,
       bool enable_oop_rasterization,
+      RasterQueryQueue* const pending_raster_queries,
       float raster_metric_probability = kRasterMetricProbability);
   GpuRasterBufferProvider(const GpuRasterBufferProvider&) = delete;
   ~GpuRasterBufferProvider() override;
@@ -63,7 +65,6 @@
       base::OnceClosure callback,
       uint64_t pending_callback_id) const override;
   void Shutdown() override;
-  bool CheckRasterFinishedQueries() override;
 
   gpu::SyncToken PlaybackOnWorkerThread(
       gpu::Mailbox* mailbox,
@@ -138,26 +139,6 @@
     base::TimeTicks creation_time_;
   };
 
-  struct PendingRasterQuery {
-    // The id for querying the duration in executing the GPU side work.
-    GLuint raster_duration_query_id = 0u;
-
-    // The duration for executing the work on the raster worker thread.
-    base::TimeDelta worker_raster_duration;
-
-    // The id for querying the time at which we're about to start issuing raster
-    // work to the driver.
-    GLuint raster_start_query_id = 0u;
-
-    // The time at which the raster buffer was created.
-    base::TimeTicks raster_buffer_creation_time;
-
-    // Whether the raster work depends on candidates for hardware accelerated
-    // JPEG or WebP decodes.
-    bool depends_on_hardware_accelerated_jpeg_candidates = false;
-    bool depends_on_hardware_accelerated_webp_candidates = false;
-  };
-
   bool ShouldUnpremultiplyAndDitherResource(viz::ResourceFormat format) const;
   gpu::SyncToken PlaybackOnWorkerThreadInternal(
       gpu::Mailbox* mailbox,
@@ -176,7 +157,7 @@
       const RasterSource::PlaybackSettings& playback_settings,
       const GURL& url,
       bool depends_on_at_raster_decodes,
-      PendingRasterQuery* query);
+      RasterQuery* query);
 
   viz::ContextProvider* const compositor_context_provider_;
   viz::RasterContextProvider* const worker_context_provider_;
@@ -186,11 +167,7 @@
   const bool unpremultiply_and_dither_low_bit_depth_tiles_;
   const bool enable_oop_rasterization_;
 
-  // Note that this lock should never be acquired while holding the raster
-  // context lock.
-  base::Lock pending_raster_queries_lock_;
-  base::circular_deque<PendingRasterQuery> pending_raster_queries_
-      GUARDED_BY(pending_raster_queries_lock_);
+  RasterQueryQueue* const pending_raster_queries_;
 
   // Accessed with the worker context lock acquired.
   std::mt19937 random_generator_;
diff --git a/cc/raster/one_copy_raster_buffer_provider.cc b/cc/raster/one_copy_raster_buffer_provider.cc
index 191a1aa..fd09b83 100644
--- a/cc/raster/one_copy_raster_buffer_provider.cc
+++ b/cc/raster/one_copy_raster_buffer_provider.cc
@@ -491,8 +491,4 @@
   return out_sync_token;
 }
 
-bool OneCopyRasterBufferProvider::CheckRasterFinishedQueries() {
-  return false;
-}
-
 }  // namespace cc
diff --git a/cc/raster/one_copy_raster_buffer_provider.h b/cc/raster/one_copy_raster_buffer_provider.h
index b429529..a5f91e1 100644
--- a/cc/raster/one_copy_raster_buffer_provider.h
+++ b/cc/raster/one_copy_raster_buffer_provider.h
@@ -66,7 +66,6 @@
       base::OnceClosure callback,
       uint64_t pending_callback_id) const override;
   void Shutdown() override;
-  bool CheckRasterFinishedQueries() override;
 
   // Playback raster source and copy result into |resource|.
   gpu::SyncToken PlaybackAndCopyOnWorkerThread(
diff --git a/cc/raster/raster_buffer_provider.h b/cc/raster/raster_buffer_provider.h
index 71632ec..d0da146 100644
--- a/cc/raster/raster_buffer_provider.h
+++ b/cc/raster/raster_buffer_provider.h
@@ -90,14 +90,6 @@
 
   // Shutdown for doing cleanup.
   virtual void Shutdown() = 0;
-
-  // Checks whether GPU side queries issued for previous raster work have been
-  // finished. Note that this will acquire the worker context lock so it can be
-  // used from any thread. But usage from the compositor thread should be
-  // avoided to prevent contention with worker threads.
-  // Returns true if there are pending queries that could not be completed in
-  // this check.
-  virtual bool CheckRasterFinishedQueries() = 0;
 };
 
 }  // namespace cc
diff --git a/cc/raster/raster_buffer_provider_perftest.cc b/cc/raster/raster_buffer_provider_perftest.cc
index 8290aa08..f4d55dbf 100644
--- a/cc/raster/raster_buffer_provider_perftest.cc
+++ b/cc/raster/raster_buffer_provider_perftest.cc
@@ -13,6 +13,7 @@
 #include "cc/raster/gpu_raster_buffer_provider.h"
 #include "cc/raster/one_copy_raster_buffer_provider.h"
 #include "cc/raster/raster_buffer_provider.h"
+#include "cc/raster/raster_query_queue.h"
 #include "cc/raster/synchronous_task_graph_runner.h"
 #include "cc/raster/zero_copy_raster_buffer_provider.h"
 #include "cc/resources/resource_pool.h"
@@ -354,6 +355,9 @@
  public:
   // Overridden from testing::Test:
   void SetUp() override {
+    pending_raster_queries_ = std::make_unique<RasterQueryQueue>(
+        worker_context_provider_.get(), /*oop_rasterization_enabled=*/false);
+
     switch (GetParam()) {
       case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
         Create3dResourceProvider();
@@ -374,7 +378,8 @@
         Create3dResourceProvider();
         raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>(
             compositor_context_provider_.get(), worker_context_provider_.get(),
-            false, viz::RGBA_8888, gfx::Size(), true, false);
+            false, viz::RGBA_8888, gfx::Size(), true, false,
+            pending_raster_queries_.get());
         break;
       case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
         CreateSoftwareResourceProvider();
@@ -553,6 +558,7 @@
   std::unique_ptr<TileTaskManager> tile_task_manager_;
   std::unique_ptr<RasterBufferProvider> raster_buffer_provider_;
   viz::TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
+  std::unique_ptr<RasterQueryQueue> pending_raster_queries_;
 };
 
 TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) {
diff --git a/cc/raster/raster_buffer_provider_unittest.cc b/cc/raster/raster_buffer_provider_unittest.cc
index a429683cd..a19a04e9 100644
--- a/cc/raster/raster_buffer_provider_unittest.cc
+++ b/cc/raster/raster_buffer_provider_unittest.cc
@@ -35,6 +35,7 @@
 #include "cc/raster/bitmap_raster_buffer_provider.h"
 #include "cc/raster/gpu_raster_buffer_provider.h"
 #include "cc/raster/one_copy_raster_buffer_provider.h"
+#include "cc/raster/raster_query_queue.h"
 #include "cc/raster/synchronous_task_graph_runner.h"
 #include "cc/raster/zero_copy_raster_buffer_provider.h"
 #include "cc/resources/resource_pool.h"
@@ -232,13 +233,15 @@
         Create3dResourceProvider();
         raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>(
             context_provider_.get(), worker_context_provider_.get(), false,
-            viz::RGBA_8888, gfx::Size(), true, false, 1);
+            viz::RGBA_8888, gfx::Size(), true, false,
+            pending_raster_queries_.get(), 1);
         break;
       case RASTER_BUFFER_PROVIDER_TYPE_GPU_OOPR:
         Create3dResourceProvider();
         raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>(
             context_provider_.get(), worker_context_provider_.get(), false,
-            viz::RGBA_8888, gfx::Size(), true, true, 1);
+            viz::RGBA_8888, gfx::Size(), true, true,
+            pending_raster_queries_.get(), 1);
         break;
       case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
         CreateSoftwareResourceProvider();
@@ -381,7 +384,9 @@
     context_provider_ = viz::TestContextProvider::Create(std::move(gl_owned));
     context_provider_->BindToCurrentThread();
 
+    bool oop_rasterization_enabled = false;
     if (GetParam() == RASTER_BUFFER_PROVIDER_TYPE_GPU_OOPR) {
+      oop_rasterization_enabled = true;
       auto worker_gl_owned = std::make_unique<viz::TestGLES2Interface>();
       auto worker_support_owned = std::make_unique<viz::TestContextSupport>();
       auto worker_ri_owned = std::make_unique<RasterImplementationForOOPR>(
@@ -398,6 +403,9 @@
 
     layer_tree_frame_sink_ = FakeLayerTreeFrameSink::Create3d();
     resource_provider_ = std::make_unique<viz::ClientResourceProvider>();
+
+    pending_raster_queries_ = std::make_unique<RasterQueryQueue>(
+        worker_context_provider_.get(), oop_rasterization_enabled);
   }
 
   void CreateSoftwareResourceProvider() {
@@ -427,6 +435,7 @@
   std::vector<RasterTaskResult> completed_tasks_;
   std::vector<ResourcePool::InUsePoolResource> resources_;
   TaskGraph graph_;
+  std::unique_ptr<RasterQueryQueue> pending_raster_queries_;
 };
 
 TEST_P(RasterBufferProviderTest, Basic) {
@@ -655,7 +664,7 @@
   histogram_tester.ExpectTotalCount(delay_histogram_jpeg_tiles, 0);
   histogram_tester.ExpectTotalCount(delay_histogram_webp_tiles, 0);
   bool has_pending_queries =
-      raster_buffer_provider_->CheckRasterFinishedQueries();
+      pending_raster_queries_->CheckRasterFinishedQueries();
   EXPECT_FALSE(has_pending_queries);
   histogram_tester.ExpectTotalCount(duration_histogram, 9);
 
diff --git a/cc/raster/raster_query_queue.cc b/cc/raster/raster_query_queue.cc
new file mode 100644
index 0000000..b77d3c6
--- /dev/null
+++ b/cc/raster/raster_query_queue.cc
@@ -0,0 +1,145 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/raster/raster_query_queue.h"
+
+#include <utility>
+
+#include "cc/base/histograms.h"
+#include "components/viz/common/gpu/raster_context_provider.h"
+#include "gpu/GLES2/gl2extchromium.h"
+#include "gpu/command_buffer/client/raster_interface.h"
+
+namespace cc {
+
+RasterQuery::RasterQuery() = default;
+
+RasterQuery::~RasterQuery() = default;
+
+RasterQueryQueue::RasterQueryQueue(
+    viz::RasterContextProvider* const worker_context_provider,
+    bool oop_rasterization_enabled)
+    : worker_context_provider_(worker_context_provider),
+      oop_rasterization_enabled_(oop_rasterization_enabled) {}
+
+RasterQueryQueue::~RasterQueryQueue() = default;
+
+void RasterQueryQueue::Append(RasterQuery raster_query) {
+  // It is important for this method to not be called with the raster context
+  // lock to avoid a deadlock in CheckRasterFinishedQueries, which acquired
+  // the raster context lock while holding this lock.
+  base::AutoLock hold(pending_raster_queries_lock_);
+  pending_raster_queries_.push_back(std::move(raster_query));
+}
+
+#define UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(name, total_time) \
+  UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(                              \
+      name, total_time, base::TimeDelta::FromMicroseconds(1),           \
+      base::TimeDelta::FromMilliseconds(100), 100);
+
+bool RasterQueryQueue::CheckRasterFinishedQueries() {
+  base::AutoLock hold(pending_raster_queries_lock_);
+  if (pending_raster_queries_.empty())
+    return false;
+
+  viz::RasterContextProvider::ScopedRasterContextLock scoped_context(
+      worker_context_provider_);
+  auto* ri = scoped_context.RasterInterface();
+
+  auto it = pending_raster_queries_.begin();
+  while (it != pending_raster_queries_.end()) {
+    GLuint complete = 0;
+    ri->GetQueryObjectuivEXT(it->raster_duration_query_id,
+                             GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT,
+                             &complete);
+    if (!complete)
+      break;
+
+#if DCHECK_IS_ON()
+    if (it->raster_start_query_id) {
+      // We issued the GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM query prior to the
+      // GL_COMMANDS_ISSUED_CHROMIUM query. Therefore, if the result of the
+      // latter is available, the result of the former should be too.
+      complete = 0;
+      ri->GetQueryObjectuivEXT(it->raster_start_query_id,
+                               GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT,
+                               &complete);
+      DCHECK(complete);
+    }
+#endif
+
+    GLuint gpu_raster_duration = 0u;
+    ri->GetQueryObjectuivEXT(it->raster_duration_query_id, GL_QUERY_RESULT_EXT,
+                             &gpu_raster_duration);
+    ri->DeleteQueriesEXT(1, &it->raster_duration_query_id);
+
+    base::TimeDelta raster_duration =
+        it->worker_raster_duration +
+        base::TimeDelta::FromMicroseconds(gpu_raster_duration);
+
+    // It is safe to use the UMA macros here with runtime generated strings
+    // because the client name should be initialized once in the process, before
+    // recording any metrics here.
+    const char* client_name = GetClientNameForMetrics();
+
+    if (it->raster_start_query_id) {
+      GLuint64 gpu_raster_start_time = 0u;
+      ri->GetQueryObjectui64vEXT(it->raster_start_query_id, GL_QUERY_RESULT_EXT,
+                                 &gpu_raster_start_time);
+      ri->DeleteQueriesEXT(1, &it->raster_start_query_id);
+
+      // The base::checked_cast<int64_t> should not crash as long as the GPU
+      // process was not compromised: that's because the result of the query
+      // should have been generated using base::TimeDelta::InMicroseconds()
+      // there, so the result should fit in an int64_t.
+      base::TimeDelta raster_scheduling_delay =
+          base::TimeDelta::FromMicroseconds(
+              base::checked_cast<int64_t>(gpu_raster_start_time)) -
+          it->raster_buffer_creation_time.since_origin();
+
+      // We expect the clock we're using to be monotonic, so we shouldn't get a
+      // negative scheduling delay.
+      DCHECK_GE(raster_scheduling_delay.InMicroseconds(), 0u);
+      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
+          base::StringPrintf(
+              "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes.All",
+              client_name),
+          raster_scheduling_delay);
+      if (it->depends_on_hardware_accelerated_jpeg_candidates) {
+        UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
+            base::StringPrintf(
+                "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes."
+                "TilesWithJpegHwDecodeCandidates",
+                client_name),
+            raster_scheduling_delay);
+      }
+      if (it->depends_on_hardware_accelerated_webp_candidates) {
+        UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
+            base::StringPrintf(
+                "Renderer4.%s.RasterTaskSchedulingDelayNoAtRasterDecodes."
+                "TilesWithWebPHwDecodeCandidates",
+                client_name),
+            raster_scheduling_delay);
+      }
+    }
+
+    if (oop_rasterization_enabled_) {
+      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
+          base::StringPrintf("Renderer4.%s.RasterTaskTotalDuration.Oop",
+                             client_name),
+          raster_duration);
+    } else {
+      UMA_HISTOGRAM_RASTER_TIME_CUSTOM_MICROSECONDS(
+          base::StringPrintf("Renderer4.%s.RasterTaskTotalDuration.Gpu",
+                             client_name),
+          raster_duration);
+    }
+
+    it = pending_raster_queries_.erase(it);
+  }
+
+  return pending_raster_queries_.size() > 0u;
+}
+
+}  // namespace cc
diff --git a/cc/raster/raster_query_queue.h b/cc/raster/raster_query_queue.h
new file mode 100644
index 0000000..e81400a
--- /dev/null
+++ b/cc/raster/raster_query_queue.h
@@ -0,0 +1,69 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_RASTER_RASTER_QUERY_QUEUE_H_
+#define CC_RASTER_RASTER_QUERY_QUEUE_H_
+
+#include "base/containers/circular_deque.h"
+#include "base/synchronization/lock.h"
+#include "base/thread_annotations.h"
+#include "base/time/time.h"
+#include "cc/cc_export.h"
+#include "third_party/khronos/GLES2/gl2.h"
+
+namespace viz {
+class RasterContextProvider;
+}  // namespace viz
+
+namespace cc {
+
+struct CC_EXPORT RasterQuery {
+  RasterQuery();
+  ~RasterQuery();
+
+  // The id for querying the duration in executing the GPU side work.
+  GLuint raster_duration_query_id = 0u;
+
+  // The duration for executing the work on the raster worker thread.
+  base::TimeDelta worker_raster_duration;
+
+  // The id for querying the time at which we're about to start issuing raster
+  // work to the driver.
+  GLuint raster_start_query_id = 0u;
+
+  // The time at which the raster buffer was created.
+  base::TimeTicks raster_buffer_creation_time;
+
+  // Whether the raster work depends on candidates for hardware accelerated
+  // JPEG or WebP decodes.
+  bool depends_on_hardware_accelerated_jpeg_candidates = false;
+  bool depends_on_hardware_accelerated_webp_candidates = false;
+};
+
+class CC_EXPORT RasterQueryQueue {
+ public:
+  RasterQueryQueue(viz::RasterContextProvider* const worker_context_provider,
+                   bool oop_rasterization_enabled);
+  virtual ~RasterQueryQueue();
+
+  // These functions should never be called with the raster context lock
+  // acquired.
+  void Append(RasterQuery raster_query);
+  // This function is only virtual for testing purposes.
+  virtual bool CheckRasterFinishedQueries();
+
+ private:
+  viz::RasterContextProvider* const worker_context_provider_;
+  const bool oop_rasterization_enabled_;
+
+  // Note that this lock should never be acquired while holding the raster
+  // context lock.
+  base::Lock pending_raster_queries_lock_;
+  base::circular_deque<RasterQuery> pending_raster_queries_
+      GUARDED_BY(pending_raster_queries_lock_);
+};
+
+}  // namespace cc
+
+#endif  // CC_RASTER_RASTER_QUERY_QUEUE_H_
diff --git a/cc/raster/zero_copy_raster_buffer_provider.cc b/cc/raster/zero_copy_raster_buffer_provider.cc
index e8e5c21..cca625539 100644
--- a/cc/raster/zero_copy_raster_buffer_provider.cc
+++ b/cc/raster/zero_copy_raster_buffer_provider.cc
@@ -236,8 +236,4 @@
 
 void ZeroCopyRasterBufferProvider::Shutdown() {}
 
-bool ZeroCopyRasterBufferProvider::CheckRasterFinishedQueries() {
-  return false;
-}
-
 }  // namespace cc
diff --git a/cc/raster/zero_copy_raster_buffer_provider.h b/cc/raster/zero_copy_raster_buffer_provider.h
index 18ab5a9..f2322a8 100644
--- a/cc/raster/zero_copy_raster_buffer_provider.h
+++ b/cc/raster/zero_copy_raster_buffer_provider.h
@@ -57,7 +57,6 @@
       base::OnceClosure callback,
       uint64_t pending_callback_id) const override;
   void Shutdown() override;
-  bool CheckRasterFinishedQueries() override;
 
  private:
   std::unique_ptr<base::trace_event::ConvertableToTraceFormat> StateAsValue()
diff --git a/cc/test/fake_raster_buffer_provider.cc b/cc/test/fake_raster_buffer_provider.cc
index aa31d5b..1b3c53c8 100644
--- a/cc/test/fake_raster_buffer_provider.cc
+++ b/cc/test/fake_raster_buffer_provider.cc
@@ -66,8 +66,4 @@
 
 void FakeRasterBufferProviderImpl::Shutdown() {}
 
-bool FakeRasterBufferProviderImpl::CheckRasterFinishedQueries() {
-  return false;
-}
-
 }  // namespace cc
diff --git a/cc/test/fake_raster_buffer_provider.h b/cc/test/fake_raster_buffer_provider.h
index 5c6e056..6d19a84 100644
--- a/cc/test/fake_raster_buffer_provider.h
+++ b/cc/test/fake_raster_buffer_provider.h
@@ -37,7 +37,6 @@
       base::OnceClosure callback,
       uint64_t pending_callback_id) const override;
   void Shutdown() override;
-  bool CheckRasterFinishedQueries() override;
 };
 
 }  // namespace cc
diff --git a/cc/test/fake_raster_query_queue.cc b/cc/test/fake_raster_query_queue.cc
new file mode 100644
index 0000000..13763dd
--- /dev/null
+++ b/cc/test/fake_raster_query_queue.cc
@@ -0,0 +1,20 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/test/fake_raster_query_queue.h"
+
+namespace cc {
+
+FakeRasterQueryQueue::FakeRasterQueryQueue(
+    viz::RasterContextProvider* const worker_context_provider,
+    bool oop_rasterization_enabled)
+    : RasterQueryQueue(worker_context_provider, oop_rasterization_enabled) {}
+
+FakeRasterQueryQueue::~FakeRasterQueryQueue() = default;
+
+bool FakeRasterQueryQueue::CheckRasterFinishedQueries() {
+  return false;
+}
+
+}  // namespace cc
diff --git a/cc/test/fake_raster_query_queue.h b/cc/test/fake_raster_query_queue.h
new file mode 100644
index 0000000..d06388d
--- /dev/null
+++ b/cc/test/fake_raster_query_queue.h
@@ -0,0 +1,26 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_TEST_FAKE_RASTER_QUERY_QUEUE_H_
+#define CC_TEST_FAKE_RASTER_QUERY_QUEUE_H_
+
+#include "cc/raster/raster_query_queue.h"
+
+namespace cc {
+
+// Fake RasterQueryQueue that just no-ops all calls.
+class FakeRasterQueryQueue : public RasterQueryQueue {
+ public:
+  FakeRasterQueryQueue(
+      viz::RasterContextProvider* const worker_context_provider,
+      bool oop_rasterization_enabled);
+  ~FakeRasterQueryQueue() override;
+
+  // RasterQueryQueue methods.
+  bool CheckRasterFinishedQueries() override;
+};
+
+}  // namespace cc
+
+#endif  // CC_TEST_FAKE_RASTER_QUERY_QUEUE_H_
diff --git a/cc/test/fake_tile_manager.cc b/cc/test/fake_tile_manager.cc
index 53649b3..8ec9f80 100644
--- a/cc/test/fake_tile_manager.cc
+++ b/cc/test/fake_tile_manager.cc
@@ -48,7 +48,7 @@
   SetResources(resource_pool, &image_decode_cache_, GetGlobalTaskGraphRunner(),
                GetGlobalRasterBufferProvider(),
                false /* use_gpu_rasterization */,
-               false /* use_oop_rasterization */);
+               false /* use_oop_rasterization */, nullptr);
   SetTileTaskManagerForTesting(std::make_unique<FakeTileTaskManagerImpl>());
 }
 
diff --git a/cc/test/layer_tree_pixel_resource_test.cc b/cc/test/layer_tree_pixel_resource_test.cc
index 709d46b..542951e 100644
--- a/cc/test/layer_tree_pixel_resource_test.cc
+++ b/cc/test/layer_tree_pixel_resource_test.cc
@@ -84,7 +84,8 @@
       return std::make_unique<GpuRasterBufferProvider>(
           compositor_context_provider, worker_context_provider, false,
           gpu_raster_format, gfx::Size(), true,
-          /*enable_oop_rasterization=*/raster_type() == TestRasterType::kOop);
+          /*enable_oop_rasterization=*/raster_type() == TestRasterType::kOop,
+          host_impl->GetRasterQueryQueueForTesting());
     case TestRasterType::kZeroCopy:
       EXPECT_TRUE(compositor_context_provider);
       EXPECT_TRUE(gpu_memory_buffer_manager);
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index c6c7cd5b..474ac90 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -338,18 +338,21 @@
  public:
   using CompletionCb = base::OnceCallback<void(bool has_pending_queries)>;
   DidFinishRunningAllTilesTask(base::SequencedTaskRunner* task_runner,
-                               RasterBufferProvider* raster_buffer_provider,
+                               RasterQueryQueue* pending_raster_queries,
                                CompletionCb completion_cb)
       : TileTask(TileTask::SupportsConcurrentExecution::kNo,
                  TileTask::SupportsBackgroundThreadPriority::kYes),
         task_runner_(task_runner),
-        raster_buffer_provider_(raster_buffer_provider),
+        pending_raster_queries_(pending_raster_queries),
         completion_cb_(std::move(completion_cb)) {}
 
   void RunOnWorkerThread() override {
     TRACE_EVENT0("cc", "TaskSetFinishedTaskImpl::RunOnWorkerThread");
-    bool has_pending_queries =
-        raster_buffer_provider_->CheckRasterFinishedQueries();
+    bool has_pending_queries = false;
+    if (pending_raster_queries_) {
+      has_pending_queries =
+          pending_raster_queries_->CheckRasterFinishedQueries();
+    }
     task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(completion_cb_),
                                                      has_pending_queries));
   }
@@ -361,7 +364,7 @@
 
  private:
   base::SequencedTaskRunner* task_runner_;
-  RasterBufferProvider* raster_buffer_provider_;
+  RasterQueryQueue* pending_raster_queries_;
   CompletionCb completion_cb_;
 };
 
@@ -465,12 +468,14 @@
                                TaskGraphRunner* task_graph_runner,
                                RasterBufferProvider* raster_buffer_provider,
                                bool use_gpu_rasterization,
-                               bool use_oop_rasterization) {
+                               bool use_oop_rasterization,
+                               RasterQueryQueue* pending_raster_queries) {
   DCHECK(!tile_task_manager_);
   DCHECK(task_graph_runner);
 
   use_gpu_rasterization_ = use_gpu_rasterization;
   use_oop_rasterization_ = use_oop_rasterization;
+  pending_raster_queries_ = pending_raster_queries;
   resource_pool_ = resource_pool;
   image_controller_.SetImageDecodeCache(image_decode_cache);
   tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner);
@@ -1020,7 +1025,7 @@
                      task_set_finished_weak_ptr_factory_.GetWeakPtr());
   scoped_refptr<TileTask> all_done_task =
       base::MakeRefCounted<DidFinishRunningAllTilesTask>(
-          task_runner_, raster_buffer_provider_, std::move(all_done_cb));
+          task_runner_, pending_raster_queries_, std::move(all_done_cb));
 
   // Build a new task queue containing all task currently needed. Tasks
   // are added in order of priority, highest priority task first.
@@ -1477,7 +1482,11 @@
   if (has_scheduled_tile_tasks_ || !signals_.all_tile_tasks_completed)
     return;
 
-  has_pending_queries_ = raster_buffer_provider_->CheckRasterFinishedQueries();
+  has_pending_queries_ = false;
+  if (pending_raster_queries_) {
+    has_pending_queries_ =
+        pending_raster_queries_->CheckRasterFinishedQueries();
+  }
   if (has_pending_queries_)
     ScheduleCheckRasterFinishedQueries();
 }
diff --git a/cc/tiles/tile_manager.h b/cc/tiles/tile_manager.h
index 0495ba08..39cf268 100644
--- a/cc/tiles/tile_manager.h
+++ b/cc/tiles/tile_manager.h
@@ -19,6 +19,7 @@
 #include "base/values.h"
 #include "cc/base/unique_notifier.h"
 #include "cc/raster/raster_buffer_provider.h"
+#include "cc/raster/raster_query_queue.h"
 #include "cc/raster/raster_source.h"
 #include "cc/resources/memory_history.h"
 #include "cc/resources/resource_pool.h"
@@ -180,7 +181,8 @@
                     TaskGraphRunner* task_graph_runner,
                     RasterBufferProvider* raster_buffer_provider,
                     bool use_gpu_rasterization,
-                    bool use_oop_rasterization);
+                    bool use_oop_rasterization,
+                    RasterQueryQueue* pending_raster_queries);
 
   // This causes any completed raster work to finalize, so that tiles get up to
   // date draw information.
@@ -260,6 +262,11 @@
     raster_buffer_provider_ = raster_buffer_provider;
   }
 
+  void SetPendingRasterQueriesForTesting(
+      RasterQueryQueue* pending_raster_queries) {
+    pending_raster_queries_ = pending_raster_queries;
+  }
+
   std::vector<Tile*> AllTilesForTesting() const {
     std::vector<Tile*> tiles;
     for (auto& tile_pair : tiles_)
@@ -442,6 +449,7 @@
   const TileManagerSettings tile_manager_settings_;
   bool use_gpu_rasterization_;
   bool use_oop_rasterization_;
+  RasterQueryQueue* pending_raster_queries_ = nullptr;
 
   std::unordered_map<Tile::Id, Tile*> tiles_;
 
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc
index e557b09..f55fc43 100644
--- a/cc/tiles/tile_manager_unittest.cc
+++ b/cc/tiles/tile_manager_unittest.cc
@@ -26,6 +26,7 @@
 #include "cc/test/fake_paint_image_generator.h"
 #include "cc/test/fake_picture_layer_impl.h"
 #include "cc/test/fake_picture_layer_tiling_client.h"
+#include "cc/test/fake_raster_query_queue.h"
 #include "cc/test/fake_raster_source.h"
 #include "cc/test/fake_recording_source.h"
 #include "cc/test/fake_tile_manager.h"
@@ -3520,23 +3521,31 @@
 
 class TileManagerCheckRasterQueriesTest : public TileManagerTest {
  public:
+  TileManagerCheckRasterQueriesTest()
+      : pending_raster_queries_(viz::TestContextProvider::CreateWorker().get(),
+                                /*oop_rasterization_enabled=*/false) {}
   ~TileManagerCheckRasterQueriesTest() override {
     // Ensure that the host impl doesn't outlive |raster_buffer_provider_|.
     TakeHostImpl();
   }
   void SetUp() override {
     TileManagerTest::SetUp();
-    host_impl()->tile_manager()->SetRasterBufferProviderForTesting(
-        &raster_buffer_provider_);
+    host_impl()->tile_manager()->SetPendingRasterQueriesForTesting(
+        &pending_raster_queries_);
   }
 
  protected:
-  class MockRasterBufferProvider : public FakeRasterBufferProviderImpl {
+  class MockRasterQueryQueue : public FakeRasterQueryQueue {
    public:
+    MockRasterQueryQueue(
+        viz::RasterContextProvider* const worker_context_provider,
+        bool oop_rasterization_enabled)
+        : FakeRasterQueryQueue(worker_context_provider,
+                               oop_rasterization_enabled) {}
     MOCK_METHOD0(CheckRasterFinishedQueries, bool());
   };
 
-  MockRasterBufferProvider raster_buffer_provider_;
+  MockRasterQueryQueue pending_raster_queries_;
 };
 
 TEST_F(TileManagerCheckRasterQueriesTest,
@@ -3545,7 +3554,7 @@
   EXPECT_FALSE(host_impl()->tile_manager()->HasScheduledTileTasksForTesting());
   EXPECT_CALL(MockHostImpl(), NotifyAllTileTasksCompleted())
       .WillOnce(testing::Invoke([&run_loop]() { run_loop.Quit(); }));
-  EXPECT_CALL(raster_buffer_provider_, CheckRasterFinishedQueries()).Times(1);
+  EXPECT_CALL(pending_raster_queries_, CheckRasterFinishedQueries()).Times(1);
   host_impl()->tile_manager()->PrepareTiles(host_impl()->global_tile_state());
   EXPECT_TRUE(host_impl()->tile_manager()->HasScheduledTileTasksForTesting());
   run_loop.Run();
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index cdddc4c..b589893c 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -3358,8 +3358,6 @@
 }
 
 void LayerTreeHostImpl::CreateTileManagerResources() {
-  raster_buffer_provider_ = CreateRasterBufferProvider();
-
   viz::ResourceFormat tile_format = TileRasterBufferFormat(
       settings_, layer_tree_frame_sink_->context_provider(),
       use_gpu_rasterization_);
@@ -3372,6 +3370,11 @@
                                                 tile_format),
         settings_.decoded_image_working_set_budget_bytes, max_texture_size_,
         paint_image_generator_client_id_, dark_mode_filter_);
+
+    pending_raster_queries_ = std::make_unique<RasterQueryQueue>(
+        layer_tree_frame_sink_->worker_context_provider(),
+        can_use_oop_rasterization_);
+
   } else {
     bool gpu_compositing = !!layer_tree_frame_sink_->context_provider();
     image_decode_cache_ = std::make_unique<SoftwareImageDecodeCache>(
@@ -3380,6 +3383,8 @@
         paint_image_generator_client_id_);
   }
 
+  raster_buffer_provider_ = CreateRasterBufferProvider();
+
   // Pass the single-threaded synchronous task graph runner to the worker pool
   // if we're in synchronous single-threaded mode.
   TaskGraphRunner* task_graph_runner = task_graph_runner_;
@@ -3392,7 +3397,8 @@
 
   tile_manager_.SetResources(resource_pool_.get(), image_decode_cache_.get(),
                              task_graph_runner, raster_buffer_provider_.get(),
-                             use_gpu_rasterization_, use_oop_rasterization());
+                             use_gpu_rasterization_, use_oop_rasterization(),
+                             pending_raster_queries_.get());
   tile_manager_.SetCheckerImagingForceDisabled(
       settings_.only_checker_images_with_gpu_raster && !use_gpu_rasterization_);
   UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
@@ -3423,7 +3429,7 @@
         settings_.resource_settings.use_gpu_memory_buffer_resources,
         tile_format, settings_.max_gpu_raster_tile_size,
         settings_.unpremultiply_and_dither_low_bit_depth_tiles,
-        can_use_oop_rasterization_);
+        can_use_oop_rasterization_, pending_raster_queries_.get());
   }
 
   bool use_zero_copy = settings_.use_zero_copy;
@@ -3520,6 +3526,7 @@
   single_thread_synchronous_task_graph_runner_ = nullptr;
   image_decode_cache_ = nullptr;
   raster_buffer_provider_ = nullptr;
+  pending_raster_queries_ = nullptr;
   // Any resources that were allocated previously should be considered not good
   // for reuse, as the RasterBufferProvider will be replaced and it may choose
   // to allocate future resources differently.
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index eee1d46b..4ecd191 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -41,6 +41,7 @@
 #include "cc/metrics/total_frame_counter.h"
 #include "cc/paint/discardable_image_map.h"
 #include "cc/paint/paint_worklet_job.h"
+#include "cc/raster/raster_query_queue.h"
 #include "cc/resources/ui_resource_client.h"
 #include "cc/scheduler/begin_frame_tracker.h"
 #include "cc/scheduler/commit_earlyout_reason.h"
@@ -818,6 +819,10 @@
     return client_->IsInSynchronousComposite();
   }
 
+  RasterQueryQueue* GetRasterQueryQueueForTesting() const {
+    return pending_raster_queries_.get();
+  }
+
  protected:
   LayerTreeHostImpl(
       const LayerTreeSettings& settings,
@@ -1012,6 +1017,7 @@
       GpuRasterizationStatus::OFF_DEVICE;
   std::unique_ptr<RasterBufferProvider> raster_buffer_provider_;
   std::unique_ptr<ResourcePool> resource_pool_;
+  std::unique_ptr<RasterQueryQueue> pending_raster_queries_;
   std::unique_ptr<ImageDecodeCache> image_decode_cache_;
 
   GlobalStateThatImpactsTilePriority global_tile_state_;
diff --git a/chrome/VERSION b/chrome/VERSION
index fa2d9b8..39c467e 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=89
 MINOR=0
-BUILD=4331
+BUILD=4332
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 21bcd3d..03f1be2 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -1029,6 +1029,7 @@
     "//chrome/browser/endpoint_fetcher:java",
     "//chrome/browser/engagement/android:java",
     "//chrome/browser/enterprise/util:java",
+    "//chrome/browser/feedback/android:java",
     "//chrome/browser/flags:java",
     "//chrome/browser/fullscreen/android:java",
     "//chrome/browser/image_descriptions:javatests",
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni
index c82c076..0a43519 100644
--- a/chrome/android/chrome_java_resources.gni
+++ b/chrome/android/chrome_java_resources.gni
@@ -748,6 +748,7 @@
   "java/res/layout/account_chooser_dialog_title.xml",
   "java/res/layout/account_divider_preference.xml",
   "java/res/layout/account_management_account_row.xml",
+  "java/res/layout/account_picker_bottom_sheet_continue_button.xml",
   "java/res/layout/account_picker_bottom_sheet_header.xml",
   "java/res/layout/account_picker_bottom_sheet_view.xml",
   "java/res/layout/account_picker_dialog_body.xml",
@@ -756,6 +757,12 @@
   "java/res/layout/account_picker_new_account_row_legacy.xml",
   "java/res/layout/account_picker_row.xml",
   "java/res/layout/account_picker_row_legacy.xml",
+  "java/res/layout/account_picker_state_auth_error.xml",
+  "java/res/layout/account_picker_state_collapsed.xml",
+  "java/res/layout/account_picker_state_expanded.xml",
+  "java/res/layout/account_picker_state_general_error.xml",
+  "java/res/layout/account_picker_state_no_account.xml",
+  "java/res/layout/account_picker_state_signin_in_progress.xml",
   "java/res/layout/add_languages_main.xml",
   "java/res/layout/add_to_homescreen_dialog.xml",
   "java/res/layout/add_to_menu_dialog.xml",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index 0e233dd..1c7c7fb 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -294,7 +294,6 @@
   "javatests/src/org/chromium/chrome/browser/notifications/settings/NotificationSettingsTest.java",
   "javatests/src/org/chromium/chrome/browser/ntp/IncognitoDescriptionViewRenderTest.java",
   "javatests/src/org/chromium/chrome/browser/ntp/IncognitoNewTabPageTest.java",
-  "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageColorTest.java",
   "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageLoadTest.java",
   "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageNavigationTest.java",
   "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java",
@@ -637,5 +636,8 @@
 ]
 
 if (enable_feed_v1) {
-  chrome_test_java_sources += [ "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchFeedFlowTest.java" ]
+  chrome_test_java_sources += [
+    "javatests/src/org/chromium/chrome/browser/ntp/NewTabPageColorTest.java",
+    "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchFeedFlowTest.java",
+  ]
 }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java
index cc1e7c8..eb97928 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java
@@ -337,9 +337,10 @@
      */
     @CalledByNative
     private AssistantChip createActionButton(int icon, String text, int actionIndex,
-            boolean disabled, boolean sticky, boolean visible) {
-        AssistantChip chip =
-                AssistantChip.createHairlineAssistantChip(icon, text, disabled, sticky, visible);
+            boolean disabled, boolean sticky, boolean visible,
+            @Nullable String contentDescription) {
+        AssistantChip chip = AssistantChip.createHairlineAssistantChip(
+                icon, text, disabled, sticky, visible, contentDescription);
         chip.setSelectedListener(() -> safeNativeOnUserActionSelected(actionIndex));
         return chip;
     }
@@ -349,9 +350,10 @@
      */
     @CalledByNative
     private AssistantChip createHighlightedActionButton(int icon, String text, int actionIndex,
-            boolean disabled, boolean sticky, boolean visible) {
-        AssistantChip chip =
-                AssistantChip.createHighlightedAssistantChip(icon, text, disabled, sticky, visible);
+            boolean disabled, boolean sticky, boolean visible,
+            @Nullable String contentDescription) {
+        AssistantChip chip = AssistantChip.createHighlightedAssistantChip(
+                icon, text, disabled, sticky, visible, contentDescription);
         chip.setSelectedListener(() -> safeNativeOnUserActionSelected(actionIndex));
         return chip;
     }
@@ -363,9 +365,10 @@
      */
     @CalledByNative
     private AssistantChip createCancelButton(int icon, String text, int actionIndex,
-            boolean disabled, boolean sticky, boolean visible) {
-        AssistantChip chip =
-                AssistantChip.createHairlineAssistantChip(icon, text, disabled, sticky, visible);
+            boolean disabled, boolean sticky, boolean visible,
+            @Nullable String contentDescription) {
+        AssistantChip chip = AssistantChip.createHairlineAssistantChip(
+                icon, text, disabled, sticky, visible, contentDescription);
         chip.setSelectedListener(() -> safeNativeOnCancelButtonClicked(actionIndex));
         return chip;
     }
@@ -374,10 +377,10 @@
      * Adds a close action button to the chip list, which shuts down Autofill Assistant.
      */
     @CalledByNative
-    private AssistantChip createCloseButton(
-            int icon, String text, boolean disabled, boolean sticky, boolean visible) {
-        AssistantChip chip =
-                AssistantChip.createHairlineAssistantChip(icon, text, disabled, sticky, visible);
+    private AssistantChip createCloseButton(int icon, String text, boolean disabled, boolean sticky,
+            boolean visible, @Nullable String contentDescription) {
+        AssistantChip chip = AssistantChip.createHairlineAssistantChip(
+                icon, text, disabled, sticky, visible, contentDescription);
         chip.setSelectedListener(() -> safeNativeOnCloseButtonClicked());
         return chip;
     }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java
index b7c14c7..15045cd7 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java
@@ -90,19 +90,24 @@
     /** The callback to invoke when the n'th item in {@code mPopupItems} is selected. */
     private @Nullable Callback<Integer> mOnPopupItemSelected;
 
+    /** The content description for the chip. */
+    private final @Nullable String mContentDescription;
+
     public AssistantChip(@Type int type, @Icon int icon, String text, boolean disabled,
-            boolean sticky, boolean visible) {
+            boolean sticky, boolean visible, @Nullable String contentDescription) {
         mType = type;
         mIcon = icon;
         mText = text;
         mDisabled = disabled;
         mSticky = sticky;
         mVisible = visible;
+        mContentDescription = contentDescription;
     }
 
     public AssistantChip(@Type int type, @Icon int icon, String text, boolean disabled,
-            boolean sticky, boolean visible, Runnable selectedListener) {
-        this(type, icon, text, disabled, sticky, visible);
+            boolean sticky, boolean visible, Runnable selectedListener,
+            @Nullable String contentDescription) {
+        this(type, icon, text, disabled, sticky, visible, contentDescription);
         assert selectedListener != null;
         mSelectedListener = selectedListener;
     }
@@ -147,6 +152,10 @@
         mSelectedListener = selectedListener;
     }
 
+    public @Nullable String getContentDescription() {
+        return mContentDescription;
+    }
+
     public void setPopupItems(List<String> popupItems, Callback<Integer> onSelectedCallback) {
         mPopupItems = popupItems;
         mOnPopupItemSelected = onSelectedCallback;
@@ -177,10 +186,10 @@
      * before the view is inflated.
      */
     @CalledByNative
-    public static AssistantChip createHairlineAssistantChip(
-            int icon, String text, boolean disabled, boolean sticky, boolean visible) {
-        return new AssistantChip(
-                AssistantChip.Type.BUTTON_HAIRLINE, icon, text, disabled, sticky, visible);
+    public static AssistantChip createHairlineAssistantChip(int icon, String text, boolean disabled,
+            boolean sticky, boolean visible, @Nullable String contentDescription) {
+        return new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, icon, text, disabled, sticky,
+                visible, contentDescription);
     }
 
     /**
@@ -188,9 +197,11 @@
      * before the view is inflated.
      */
     @CalledByNative
-    public static AssistantChip createHighlightedAssistantChip(
-            int icon, String text, boolean disabled, boolean sticky, boolean visible) {
-        return new AssistantChip(Type.BUTTON_FILLED_BLUE, icon, text, disabled, sticky, visible);
+    public static AssistantChip createHighlightedAssistantChip(int icon, String text,
+            boolean disabled, boolean sticky, boolean visible,
+            @Nullable String contentDescription) {
+        return new AssistantChip(
+                Type.BUTTON_FILLED_BLUE, icon, text, disabled, sticky, visible, contentDescription);
     }
 
     @CalledByNative
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java
index 10e789ed..cffd3a2 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java
@@ -127,7 +127,10 @@
 
         mView.setIcon(iconResource, /* tintWithTextColor= */ true);
 
-        if (iconDescriptionResource != 0 && text.isEmpty()) {
+        String contentDescription = chip.getContentDescription();
+        if (contentDescription != null) {
+            mView.setContentDescription(contentDescription);
+        } else if (iconDescriptionResource != 0 && text.isEmpty()) {
             mView.setContentDescription(mView.getContext().getString(iconDescriptionResource));
         } else {
             mView.setContentDescription(text);
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderCoordinator.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderCoordinator.java
index e115edd..27e4839d 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderCoordinator.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderCoordinator.java
@@ -36,7 +36,7 @@
     private final ProfileDataCache mProfileCache;
     private final ViewGroup mView;
     private final ImageView mProfileView;
-    private final String mSignedInAccountName;
+    private final String mSignedInAccountEmail;
     private final ViewHolder mViewHolder;
     private final RecyclerView mChipsContainer;
 
@@ -59,7 +59,7 @@
         mProfileView = mView.findViewById(R.id.profile_image);
         IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager(
                 AutofillAssistantUiController.getProfile());
-        mSignedInAccountName = CoreAccountInfo.getEmailFrom(
+        mSignedInAccountEmail = CoreAccountInfo.getEmailFrom(
                 identityManager.getPrimaryAccountInfo(ConsentLevel.SYNC));
         setupProfileImage();
 
@@ -114,11 +114,11 @@
     }
 
     @Override
-    public void onProfileDataUpdated(String account) {
-        if (!mSignedInAccountName.equals(account)) {
+    public void onProfileDataUpdated(String accountEmail) {
+        if (!mSignedInAccountEmail.equals(accountEmail)) {
             return;
         }
-        setProfileImageFor(mSignedInAccountName);
+        setProfileImageFor(mSignedInAccountEmail);
     }
 
     /** Return the view associated to this coordinator. */
@@ -135,7 +135,7 @@
      * Cleanup resources when this goes out of scope.
      */
     public void destroy() {
-        if (mSignedInAccountName != null) {
+        if (mSignedInAccountEmail != null) {
             mProfileCache.removeObserver(this);
         }
     }
@@ -148,9 +148,9 @@
     // TODO(b/130415092): Use image from AGSA if chrome is not signed in.
 
     private void setupProfileImage() {
-        if (mSignedInAccountName != null) {
+        if (mSignedInAccountEmail != null) {
             mProfileCache.addObserver(this);
-            mProfileCache.update(Collections.singletonList(mSignedInAccountName));
+            mProfileCache.update(Collections.singletonList(mSignedInAccountEmail));
         }
     }
     private void setProfileImageFor(String signedInAccountName) {
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
index 2717c72..80b4009 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
@@ -23,9 +23,10 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.verify;
 
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntil;
 import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition;
 
-import android.support.test.runner.lifecycle.Stage;
+import android.app.Activity;
 import android.text.Spanned;
 import android.text.style.ClickableSpan;
 import android.view.View;
@@ -42,10 +43,10 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
+import org.chromium.base.ActivityState;
+import org.chromium.base.ApplicationStatus;
 import org.chromium.base.Callback;
-import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.chrome.autofill_assistant.R;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayCoordinator;
@@ -56,6 +57,7 @@
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.util.ChromeTabUtils;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
 import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -293,11 +295,8 @@
                                     spannedMessage.getSpanEnd(spans[0]))
                             .toString());
         });
-        CustomTabActivity activity = ApplicationTestUtils.waitForActivityWithClass(
-                CustomTabActivity.class, Stage.RESUMED, () -> spans[0].onClick(termsMessage));
-        CriteriaHelper.pollUiThread(
-                () -> activity.getActivityTab().getUrlString().equals(expectedTermsUrl));
-        activity.finish();
+        spans[0].onClick(termsMessage);
+        waitUntil(() -> getOpenedUrlSpec().equals(expectedTermsUrl));
     }
 
     @Test
@@ -357,13 +356,12 @@
                             .toString()
                             .replaceAll("\\s+", " "));
         });
-        CustomTabActivity activity = ApplicationTestUtils.waitForActivityWithClass(
-                CustomTabActivity.class, Stage.RESUMED, () -> spans[0].onClick(termsMessage));
-        String url = mActivity.getResources()
-                             .getText(R.string.autofill_assistant_google_terms_url)
-                             .toString();
-        CriteriaHelper.pollUiThread(() -> activity.getActivityTab().getUrlString().equals(url));
-        activity.finish();
+        spans[0].onClick(termsMessage);
+        waitUntil(()
+                          -> getOpenedUrlSpec().equals(
+                                  mActivity.getResources()
+                                          .getText(R.string.autofill_assistant_google_terms_url)
+                                          .toString()));
     }
 
     /** Trigger onboarding and wait until it is fully displayed. */
@@ -372,4 +370,21 @@
         TestThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(callback));
         waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isCompletelyDisplayed());
     }
+
+    // Get the newly opened Activity (through CustomTabActivity.showInfoPage) that happens on
+    // terms click. Return the URL of the current tab on that activity.
+    private String getOpenedUrlSpec() {
+        for (Activity runningActivity : ApplicationStatus.getRunningActivities()) {
+            if (runningActivity instanceof CustomTabActivity
+                    && ApplicationStatus.getStateForActivity(runningActivity)
+                            == ActivityState.RESUMED) {
+                return ChromeTabUtils
+                        .getUrlOnUiThread(((CustomTabActivity) runningActivity)
+                                                  .getTabModelSelector()
+                                                  .getCurrentTab())
+                        .getSpec();
+            }
+        }
+        return "";
+    }
 }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java
index 8ba50ed..f77f4a4 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java
@@ -10,6 +10,7 @@
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -96,7 +97,7 @@
                         -> model.set(AssistantCarouselModel.CHIPS,
                                 Collections.singletonList(new AssistantChip(
                                         AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                                        "Test", false, true, true))));
+                                        "Test", false, true, true, ""))));
 
         // Chip was created and is displayed on the screen.
         onView(is(coordinator.getView()))
@@ -117,10 +118,10 @@
         List<AssistantChip> chips = new ArrayList<>();
         for (int i = 0; i < numChips; i++) {
             chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                    "T" + i, false, false, true));
+                    "T" + i, false, false, true, ""));
         }
         chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                "X", false, true, true));
+                "X", false, true, true, ""));
 
         TestThreadUtils.runOnUiThreadBlocking(() -> model.set(AssistantCarouselModel.CHIPS, chips));
 
@@ -145,10 +146,10 @@
         List<AssistantChip> chips = new ArrayList<>();
         for (int i = 0; i < numChips; i++) {
             chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                    "Test" + i, false, false, true));
+                    "Test" + i, false, false, true, ""));
         }
         chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                "Cancel", false, true, true));
+                "Cancel", false, true, true, ""));
         TestThreadUtils.runOnUiThreadBlocking(() -> model.set(AssistantCarouselModel.CHIPS, chips));
 
         // Cancel chip is initially displayed to the user.
@@ -174,9 +175,9 @@
 
         List<AssistantChip> chips = new ArrayList<>();
         chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                "Test 2", false, false, true));
+                "Test 2", false, false, true, ""));
         chips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                "Cancel", false, true, true));
+                "Cancel", false, true, true, ""));
         TestThreadUtils.runOnUiThreadBlocking(() -> model.set(AssistantCarouselModel.CHIPS, chips));
         onView(withText("Cancel")).check(matches(isDisplayed()));
         onView(withText("Test 2")).check(matches(isDisplayed()));
@@ -185,7 +186,7 @@
         List<AssistantChip> newChips = new ArrayList<>();
         newChips.add(chips.get(0));
         newChips.add(new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
-                "Test 1", false, false, true));
+                "Test 1", false, false, true, ""));
         newChips.add(chips.get(1));
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> model.set(AssistantCarouselModel.CHIPS, newChips));
@@ -195,4 +196,98 @@
         onView(withText("Test 1")).check(isRightOf(withText("Cancel")));
         onView(withText("Test 2")).check(isRightOf(withText("Test 1")));
     }
+
+    /**
+     * Adds a single chip with non empty content description, and tests that same is used as content
+     * description.
+     */
+    @Test
+    @MediumTest
+    public void testSuppliedNonEmptyContentDescriptionIsUsed() throws Exception {
+        String contentDescription = "Test content description";
+        AssistantCarouselModel model = new AssistantCarouselModel();
+        AssistantActionsCarouselCoordinator coordinator = createCoordinator(model);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                ()
+                        -> model.set(AssistantCarouselModel.CHIPS,
+                                Collections.singletonList(new AssistantChip(
+                                        AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
+                                        "Chip", false, true, true, contentDescription))));
+
+        onView(is(coordinator.getView()))
+                .check(matches(hasDescendant(
+                        allOf(withContentDescription(contentDescription), isDisplayed()))));
+    }
+
+    /**
+     * Adds a single chip with empty content description, and tests that same is used as content
+     * description.
+     */
+    @Test
+    @MediumTest
+    public void testSuppliedEmptyContentDescriptionIsUsed() throws Exception {
+        String contentDescription = "";
+        AssistantCarouselModel model = new AssistantCarouselModel();
+        AssistantActionsCarouselCoordinator coordinator = createCoordinator(model);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                ()
+                        -> model.set(AssistantCarouselModel.CHIPS,
+                                Collections.singletonList(new AssistantChip(
+                                        AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.NONE,
+                                        "Chip", false, true, true, contentDescription))));
+
+        onView(is(coordinator.getView()))
+                .check(matches(hasDescendant(
+                        allOf(withContentDescription(contentDescription), isDisplayed()))));
+    }
+
+    /**
+     * Adds a single chip with null content description, and tests that chip text is used as content
+     * description if it's non-empty.
+     */
+    @Test
+    @MediumTest
+    public void testWhenNullContentDescriptionIsSuppliedChipTextIsUsed() throws Exception {
+        String chipText = "Chip Text";
+        AssistantCarouselModel model = new AssistantCarouselModel();
+        AssistantActionsCarouselCoordinator coordinatorNonEmptyChipText = createCoordinator(model);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                ()
+                        -> model.set(AssistantCarouselModel.CHIPS,
+                                Collections.singletonList(
+                                        new AssistantChip(AssistantChip.Type.BUTTON_HAIRLINE,
+                                                AssistantChip.Icon.DONE, chipText, false, true,
+                                                true, /* contentDescription */ null))));
+
+        onView(is(coordinatorNonEmptyChipText.getView()))
+                .check(matches(
+                        hasDescendant(allOf(withContentDescription(chipText), isDisplayed()))));
+    }
+
+    /**
+     * Adds a single chip with null content description and empty chip text, and tests that icon
+     * description is used as content description if available.
+     */
+    @Test
+    @MediumTest
+    public void testWhenNullContentDescriptionIsSuppliedChipTextOrIconDescriptionIsUsed()
+            throws Exception {
+        AssistantCarouselModel model = new AssistantCarouselModel();
+        AssistantActionsCarouselCoordinator coordinatorEmptyChipText = createCoordinator(model);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                ()
+                        -> model.set(AssistantCarouselModel.CHIPS,
+                                Collections.singletonList(new AssistantChip(
+                                        AssistantChip.Type.BUTTON_HAIRLINE, AssistantChip.Icon.DONE,
+                                        /* chipText */ "", false, true, true,
+                                        /* contentDescription */ null))));
+
+        onView(is(coordinatorEmptyChipText.getView()))
+                .check(matches(
+                        hasDescendant(allOf(withContentDescription("Done"), isDisplayed()))));
+    }
 }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantHeaderUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantHeaderUiTest.java
index 27cdf22..164bd89 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantHeaderUiTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantHeaderUiTest.java
@@ -11,6 +11,7 @@
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
@@ -206,9 +207,11 @@
         AssistantHeaderCoordinator coordinator = createCoordinator(model);
 
         String chipText = "Hello World";
+        String contentDescription = "Hello World description";
         AssistantChip chip =
                 new AssistantChip(AssistantChip.Type.BUTTON_FILLED_BLUE, Icon.DONE, chipText,
-                        /* disabled= */ false, /* sticky= */ false, /* visible= */ true);
+                        /* disabled= */ false, /* sticky= */ false, /* visible= */ true,
+                        contentDescription);
 
         // Set the header chip without displaying it.
         List<AssistantChip> chips = new ArrayList<>();
@@ -218,6 +221,7 @@
         Matcher<View> chipMatcher =
                 allOf(isDescendantOfA(is(coordinator.getView())), withText(chipText));
         onView(chipMatcher).check(doesNotExist());
+        onView(withContentDescription(contentDescription)).check(doesNotExist());
 
         // Show the chip
         TestThreadUtils.runOnUiThreadBlocking(
@@ -225,6 +229,7 @@
         onView(chipMatcher)
                 .check(matches(isDisplayed()))
                 .check(isRightOf(withId(R.id.status_message)));
+        onView(withContentDescription(contentDescription)).check(matches(isDisplayed()));
     }
 
     @Test
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java
index 8b84e49..51cef43 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java
@@ -35,7 +35,6 @@
 import org.chromium.chrome.browser.autofill_assistant.proto.ChipType;
 import org.chromium.chrome.browser.autofill_assistant.proto.ClickProto;
 import org.chromium.chrome.browser.autofill_assistant.proto.ClickType;
-import org.chromium.chrome.browser.autofill_assistant.proto.DropdownSelectStrategy;
 import org.chromium.chrome.browser.autofill_assistant.proto.KeyboardValueFillStrategy;
 import org.chromium.chrome.browser.autofill_assistant.proto.OptionalStep;
 import org.chromium.chrome.browser.autofill_assistant.proto.ProcessedActionProto;
@@ -49,6 +48,7 @@
 import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto.KeyPress;
 import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto;
 import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto;
+import org.chromium.chrome.browser.autofill_assistant.proto.TextFilter;
 import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
 import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -299,8 +299,9 @@
                          .setSelectOption(
                                  SelectOptionProto.newBuilder()
                                          .setElement(element)
-                                         .setSelectedOption("one")
-                                         .setSelectStrategy(DropdownSelectStrategy.VALUE_MATCH))
+                                         .setTextFilterValue(TextFilter.newBuilder().setRe2("one"))
+                                         .setOptionComparisonAttribute(
+                                                 SelectOptionProto.OptionComparisonAttribute.VALUE))
                          .build());
         list.add((ActionProto) ActionProto.newBuilder()
                          .setPrompt(PromptProto.newBuilder()
@@ -310,13 +311,15 @@
                                                             .setType(ChipType.HIGHLIGHTED_ACTION)
                                                             .setText("Continue"))))
                          .build());
-        list.add((ActionProto) ActionProto.newBuilder()
-                         .setSelectOption(
-                                 SelectOptionProto.newBuilder()
-                                         .setElement(element)
-                                         .setSelectedOption("Three")
-                                         .setSelectStrategy(DropdownSelectStrategy.LABEL_MATCH))
-                         .build());
+        list.add(
+                (ActionProto) ActionProto.newBuilder()
+                        .setSelectOption(
+                                SelectOptionProto.newBuilder()
+                                        .setElement(element)
+                                        .setTextFilterValue(TextFilter.newBuilder().setRe2("Three"))
+                                        .setOptionComparisonAttribute(
+                                                SelectOptionProto.OptionComparisonAttribute.LABEL))
+                        .build());
         list.add((ActionProto) ActionProto.newBuilder()
                          .setPrompt(PromptProto.newBuilder()
                                             .setMessage("Label Match")
@@ -326,11 +329,13 @@
                                                             .setText("Continue"))))
                          .build());
         list.add((ActionProto) ActionProto.newBuilder()
-                         .setSelectOption(SelectOptionProto.newBuilder()
-                                                  .setElement(element)
-                                                  .setSelectedOption("Zürich")
-                                                  .setSelectStrategy(
-                                                          DropdownSelectStrategy.LABEL_STARTS_WITH))
+                         .setSelectOption(
+                                 SelectOptionProto.newBuilder()
+                                         .setElement(element)
+                                         .setTextFilterValue(
+                                                 TextFilter.newBuilder().setRe2("^Zürich"))
+                                         .setOptionComparisonAttribute(
+                                                 SelectOptionProto.OptionComparisonAttribute.LABEL))
                          .build());
         list.add((ActionProto) ActionProto.newBuilder()
                          .setPrompt(PromptProto.newBuilder()
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java
index 7f8c846..d5f3796 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java
@@ -237,11 +237,12 @@
                 Arrays.asList(new AssistantChip(AssistantChip.Type.CHIP_ASSISTIVE,
                                       AssistantChip.Icon.NONE, "chip 0",
                                       /* disabled= */ false, /* sticky= */ false,
-                                      /* visible= */ true, () -> {/* do nothing */}),
+                                      /* visible= */ true,
+                                      () -> {/* do nothing */}, /* contentDescription= */ ""),
                         new AssistantChip(AssistantChip.Type.CHIP_ASSISTIVE,
                                 AssistantChip.Icon.NONE, "chip 1",
                                 /* disabled= */ false, /* sticky= */ false, /* visible= */ true,
-                                mRunnableMock));
+                                mRunnableMock, /* contentDescription= */ ""));
         TestThreadUtils.runOnUiThreadBlocking(() -> carouselModel.setChips(chips));
         RecyclerView chipsViewContainer = carouselCoordinator.getView();
         Assert.assertEquals(2, chipsViewContainer.getAdapter().getItemCount());
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
index 0ff907b..e507266 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
@@ -65,7 +65,6 @@
 import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
-import org.chromium.base.test.util.ScalableTimeout;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
@@ -173,7 +172,7 @@
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_LAUNCHER);
         mActivityTestRule.prepareUrlIntent(intent, null);
-        mActivityTestRule.launchActivity(intent);
+        mActivityTestRule.startActivityCompletely(intent);
     }
 
     public static Bitmap createThumbnailBitmapAndWriteToFile(int tabId) {
@@ -272,8 +271,7 @@
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> mActivityTestRule.getActivity().startDelayedNativeInitializationForTests());
         CriteriaHelper.pollUiThread(
-                mActivityTestRule.getActivity().getTabModelSelector()::isTabStateInitialized,
-                ScalableTimeout.scaleTimeout(10000L), CriteriaHelper.DEFAULT_POLLING_INTERVAL);
+                mActivityTestRule.getActivity().getTabModelSelector()::isTabStateInitialized);
         Assert.assertTrue(LibraryLoader.getInstance().isInitialized());
     }
 
@@ -570,7 +568,6 @@
             RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(i);
             if (viewHolder != null) {
                 ImageView thumbnail = viewHolder.itemView.findViewById(R.id.tab_thumbnail);
-                if (!(thumbnail.getDrawable() instanceof BitmapDrawable)) return false;
                 BitmapDrawable drawable = (BitmapDrawable) thumbnail.getDrawable();
                 Bitmap bitmap = drawable.getBitmap();
                 if (bitmap == null) return false;
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java
index 260b84d6..19a30c7 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java
@@ -91,7 +91,7 @@
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_LAUNCHER);
         mActivityTestRule.prepareUrlIntent(intent, null);
-        mActivityTestRule.launchActivity(intent);
+        mActivityTestRule.startActivityCompletely(intent);
     }
 
     @Before
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
index 8df0af2..863eac0 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -812,7 +812,7 @@
     @CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/true"
             + "/show_last_active_tab_only/true/show_stack_tab_switcher/true"})
     public void
-    testShow_SingleAsHomepageV2_FromResumeShowStart() throws Exception {
+    testShow_SingleAsHomepageV2_FromResumeShowStart() throws ExecutionException {
         // clang-format on
         if (!mImmediateReturn) return;
 
@@ -832,7 +832,7 @@
         pressHome();
 
         // Simulates pressing Chrome's icon and launching Chrome from warm start.
-        mActivityTestRule.resumeMainActivityFromLauncher();
+        startMainActivityFromLauncher();
 
         CriteriaHelper.pollUiThread(
                 () -> cta.getLayoutManager() != null && cta.getLayoutManager().overviewVisible());
@@ -1392,7 +1392,6 @@
     @Feature({"StartSurface"})
     // clang-format off
     @CommandLineFlags.Add({BASE_PARAMS + "/single"})
-    @DisableIf.Build(sdk_is_less_than = P, message = "https://crbug.com/1150937")
     public void testShow_SingleAsHomepage_BottomSheet() {
         // clang-format on
         if (!mImmediateReturn) {
@@ -1408,6 +1407,11 @@
         TabUiTestHelper.verifyTabModelTabCount(cta, 1, 0);
         assertFalse(bottomSheetTestSupport.hasSuppressionTokens());
 
+        if (isInstantReturn()) {
+            // TODO(crbug.com/1076274): fix toolbar to avoid wrongly focusing on the toolbar
+            // omnibox.
+            return;
+        }
         onView(withId(org.chromium.chrome.tab_ui.R.id.tab_list_view))
                 .perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
         assertFalse(bottomSheetTestSupport.hasSuppressionTokens());
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb
index 6d6f177..5032b48 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb
@@ -21,6 +21,8 @@
 <translation id="4212246570487010370">ব্রাউজ করা চালিয়ে যান</translation>
 <translation id="4450893287417543264">আর দেখতে চাই না</translation>
 <translation id="4648718555153979859">আপনার ট্যাবগুলি এখানে একসাথে গ্রুপ করা আছে</translation>
+<translation id="4922064041913095674">খোলা থাকা ট্যাবগুলিতে কোন আইটেমের দাম কম তা দেখুন</translation>
+<translation id="492284538114688557">দাম কমেছে বোঝা গেছে</translation>
 <translation id="5007392906805964215">পর্যালোচনা করুন</translation>
 <translation id="5073204694187207510">ফুলস্ক্রিন গ্রিড লুকান</translation>
 <translation id="5082793167783849073">একটি গ্রুপ তৈরি করে দ্রুত পৃষ্ঠাগুলির তুলনা করুন। শুরু করতে, কোনও একটি লিঙ্ক স্পর্শ করে ধরে থাকুন।</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
index b9d8367..63b29da 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
@@ -22,7 +22,7 @@
 <translation id="4450893287417543264">Ne prikazuj ponovo</translation>
 <translation id="4648718555153979859">Vaše kartice su grupisane ovdje</translation>
 <translation id="4922064041913095674">Pogledajte koja stavka u vašim otvorenim karticama ima povoljniju cijenu</translation>
-<translation id="492284538114688557">Primjećen je pad cijene</translation>
+<translation id="492284538114688557">Primijećen je pad cijene</translation>
 <translation id="5007392906805964215">Pregled</translation>
 <translation id="5073204694187207510">Sakrij mrežu cijelog ekrana</translation>
 <translation id="5082793167783849073">Kreirajte grupu i brzo uporedite stranice. Da započnete, dodirnite i držite link.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
index 632ff1c..21f3dbf 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">Lanjutkan menjelajah</translation>
 <translation id="4450893287417543264">Jangan tampilkan lagi</translation>
 <translation id="4648718555153979859">Tab Anda dikelompokkan menjadi satu di sini</translation>
-<translation id="4922064041913095674">Di tab terbuka, lihat item mana yang memiliki harga lebih terjangkau</translation>
+<translation id="4922064041913095674">Lihat item mana di tab terbuka yang memiliki harga lebih terjangkau</translation>
 <translation id="492284538114688557">Diskon ditemukan</translation>
 <translation id="5007392906805964215">Tinjau</translation>
 <translation id="5073204694187207510">Sembunyikan petak layar penuh</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
index 813e859..f924d58a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">Continua la navigazione</translation>
 <translation id="4450893287417543264">Non mostrare più</translation>
 <translation id="4648718555153979859">Le schede sono raggruppate qui</translation>
-<translation id="4922064041913095674">Scopri quale oggetto nelle schede aperte ha un prezzo migliore</translation>
+<translation id="4922064041913095674">Scopri quale articolo nelle schede aperte ha un prezzo migliore</translation>
 <translation id="492284538114688557">Prezzo in calo rilevato</translation>
 <translation id="5007392906805964215">Visualizza</translation>
 <translation id="5073204694187207510">Nascondi la griglia a schermo intero</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
index 6318f98..e83f857 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">ब्राउजिङ जारी राख्नुहोस्</translation>
 <translation id="4450893287417543264">फेरि नदेखाउनुहोस्</translation>
 <translation id="4648718555153979859">तपाईंका ट्याबहरू यहाँ एकै ठाउँमा समूहबद्ध गरिएको छन्</translation>
-<translation id="4922064041913095674">तपाईंले खोल्नुभएका ट्याबहरूमा भएको कुन चाहिँ वस्तुको मूल्य घटेको छ भन्ने कुरा हेर्नुहोस्</translation>
+<translation id="4922064041913095674">तपाईंले खोल्नुभएका ट्याबहरूमा भएको कुन चाहिँ वस्तुको मूल्य कम छ भन्ने कुरा हेर्नुहोस्</translation>
 <translation id="492284538114688557">मूल्य घटेको कुरा पत्ता लाग्यो</translation>
 <translation id="5007392906805964215">समीक्षा गर्नुहोस्</translation>
 <translation id="5073204694187207510">फुल स्क्रिन ग्रिड लुकाउनुहोस्</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
index 5683f8b..0e19fa2 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
@@ -22,7 +22,7 @@
 <translation id="4450893287417543264">Usionyeshe tena</translation>
 <translation id="4648718555153979859">Vichupo vyako vimewekwa katika kikundi kimoja hapa</translation>
 <translation id="4922064041913095674">Angalia bidhaa iliyo na bei bora katika vichupo ulivyovifungua</translation>
-<translation id="492284538114688557">Punguzo la bei limetambuliwa</translation>
+<translation id="492284538114688557">Punguo la bei limetambuliwa</translation>
 <translation id="5007392906805964215">Maoni</translation>
 <translation id="5073204694187207510">Ficha gridi ya skrini nzima</translation>
 <translation id="5082793167783849073">Linganisha kurasa kwa haraka kwa kuanzisha kikundi. Ili uanze, gusa na ushikilie kiungo.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb
index 2d6b990..934b94a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">బ్రౌజింగ్‌ను కొనసాగించండి</translation>
 <translation id="4450893287417543264">మళ్లీ చూపవద్దు</translation>
 <translation id="4648718555153979859">మీ ట్యాబ్‌లు గ్రూప్ చేయబడి, ఇక్కడ ఉన్నాయి</translation>
-<translation id="4922064041913095674">మీ తెరిచిన ట్యాబ్‌లలో ఏ ఐటెమ్‌కు మంచి ధర ఉందో చూడండి</translation>
+<translation id="4922064041913095674">మీరు ప్రస్తుతం తెరిచి ఉంచిన ట్యాబ్‌లలో ఏ ఐటెమ్ ధర తగ్గిందో చూడండి</translation>
 <translation id="492284538114688557">ధర తగ్గింపు గుర్తించబడింది</translation>
 <translation id="5007392906805964215">సమీక్షించు</translation>
 <translation id="5073204694187207510">పూర్తి స్క్రీన్ గ్రిడ్‌‌ను దాచిపెట్టు</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
index 8a44d8f..b0b895b 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">Продовжити перегляд</translation>
 <translation id="4450893287417543264">Більше не показувати</translation>
 <translation id="4648718555153979859">Тут згруповано ваші вкладки</translation>
-<translation id="4922064041913095674">Дізнайтеся, який товар у відкритих вкладах має кращу ціну</translation>
+<translation id="4922064041913095674">Дізнайтеся, який товар на відкритих вкладках має кращу ціну</translation>
 <translation id="492284538114688557">Виявлено зниження ціни</translation>
 <translation id="5007392906805964215">Переглянути</translation>
 <translation id="5073204694187207510">Сховати повноекранну сітку</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb
index 55e740a..856df49 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb
@@ -21,6 +21,8 @@
 <translation id="4212246570487010370">继续浏览</translation>
 <translation id="4450893287417543264">不再显示</translation>
 <translation id="4648718555153979859">您的标签页会按组列在此处</translation>
+<translation id="4922064041913095674">查看您打开的标签页中哪件商品的价格更优惠</translation>
+<translation id="492284538114688557">发现了降价商品</translation>
 <translation id="5007392906805964215">查看</translation>
 <translation id="5073204694187207510">隐藏“全屏网格状视图”按钮</translation>
 <translation id="5082793167783849073">通过分组快速比较网页。为此,请先轻触并按住某个链接。</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
index 9237e8d..58ba9fe 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
@@ -21,7 +21,7 @@
 <translation id="4212246570487010370">繼續瀏覽</translation>
 <translation id="4450893287417543264">不要再顯示</translation>
 <translation id="4648718555153979859">你的分頁都集中顯示在這裡</translation>
-<translation id="4922064041913095674">查看已開啟分頁中已降價的商品</translation>
+<translation id="4922064041913095674">查看已開啟分頁中的降價商品</translation>
 <translation id="492284538114688557">有商品降價了</translation>
 <translation id="5007392906805964215">查看</translation>
 <translation id="5073204694187207510">隱藏全螢幕格狀檢視</translation>
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
index 88e74be..354f6d7 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
@@ -175,24 +175,38 @@
         int viewsCountThreshold = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
                 ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS,
                 NOTICE_CARD_VIEWS_COUNT_THRESHOLD_PARAM_NAME, 3);
-        int viewsCount = UserPrefs.get(Profile.getLastUsedRegularProfile())
-                                 .getInteger(Pref.NOTICE_CARD_VIEWS_COUNT);
-        if (viewsCount >= viewsCountThreshold) {
-            return true;
-        }
+        assert viewsCountThreshold >= 0 : "view count threshold cannot be negative";
 
         int clicksCountThreshold = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
                 ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS,
                 NOTICE_CARD_CLICKS_COUNT_THRESHOLD_PARAM_NAME, 1);
-        int clicksCount = UserPrefs.get(Profile.getLastUsedRegularProfile())
-                                  .getInteger(Pref.NOTICE_CARD_CLICKS_COUNT);
-        if (clicksCount >= clicksCountThreshold) {
+        assert clicksCountThreshold >= 0 : "clicks count threshold cannot be negative";
+
+        // Make sure that there is at least one condition to auto-dismiss the notice card.
+        assert (viewsCountThreshold > 0 || clicksCountThreshold > 0)
+            : String.join(" ", "all notice card auto-dismiss thresholds are set to 0",
+                    "when there should be at least one threshold above 0");
+
+        if (viewsCountThreshold > 0 && getNoticeCardViewsCount() >= viewsCountThreshold) {
+            return true;
+        }
+        if (clicksCountThreshold > 0 && getNoticeCardClicksCount() >= clicksCountThreshold) {
             return true;
         }
 
         return false;
     }
 
+    private static int getNoticeCardViewsCount() {
+        return UserPrefs.get(Profile.getLastUsedRegularProfile())
+                .getInteger(Pref.NOTICE_CARD_VIEWS_COUNT);
+    }
+
+    private static int getNoticeCardClicksCount() {
+        return UserPrefs.get(Profile.getLastUsedRegularProfile())
+                .getInteger(Pref.NOTICE_CARD_CLICKS_COUNT);
+    }
+
     private RequestBuilder newDefaultRequest(@RequestReason int requestReason) {
         return new RequestBuilder(mContext, mApplicationInfo, mConfiguration, requestReason);
     }
diff --git a/chrome/android/java/res/layout/account_picker_bottom_sheet_continue_button.xml b/chrome/android/java/res/layout/account_picker_bottom_sheet_continue_button.xml
new file mode 100644
index 0000000..d2494e5
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_bottom_sheet_continue_button.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<org.chromium.ui.widget.ButtonCompat
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/account_picker_continue_as_button"
+    style="@style/FilledButton.Flat"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="24dp"
+    android:layout_marginEnd="24dp"
+    android:layout_marginTop="8dp"
+    android:ellipsize="end"
+    android:singleLine="true"
+    android:text="@string/signin_promo_continue_as" />
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml b/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml
index bc556c2..4eafd91 100644
--- a/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml
+++ b/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml
@@ -8,7 +8,6 @@
     xmlns:android="http://schemas.android.com/apk/res/android" >
 
   <ImageView
-      android:id="@+id/account_picker_bottom_sheet_logo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
@@ -16,7 +15,6 @@
       app:srcCompat="@drawable/chrome_sync_logo" />
 
   <TextView
-      android:id="@+id/account_picker_bottom_sheet_title"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="12dp"
@@ -26,7 +24,6 @@
       android:text="@string/signin_account_picker_dialog_title" />
 
   <org.chromium.ui.widget.TextViewWithLeading
-      android:id="@+id/account_picker_bottom_sheet_subtitle"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginStart="24dp"
diff --git a/chrome/android/java/res/layout/account_picker_bottom_sheet_view.xml b/chrome/android/java/res/layout/account_picker_bottom_sheet_view.xml
index bf41b2a..176cf33 100644
--- a/chrome/android/java/res/layout/account_picker_bottom_sheet_view.xml
+++ b/chrome/android/java/res/layout/account_picker_bottom_sheet_view.xml
@@ -5,7 +5,6 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
@@ -20,68 +19,34 @@
         android:importantForAccessibility="no"
         app:srcCompat="@drawable/drag_handlebar" />
 
-    <include layout="@layout/account_picker_bottom_sheet_header" />
-
-    <View
-        android:id="@+id/account_picker_horizontal_divider"
-        style="@style/HorizontalDivider" />
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/account_picker_account_list"
+    <ViewFlipper
+        android:id="@+id/account_picker_state_view_flipper"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginTop="8dp"
-        android:visibility="gone"
-        android:requiresFadingEdge="vertical"
-        android:scrollbars="vertical"
-        android:scrollbarStyle="outsideOverlay"
-        tools:listitem="@layout/account_chooser_dialog_item" />
+        android:measureAllChildren="false" >
 
-    <include
-        android:id="@+id/account_picker_selected_account"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="16dp"
-        android:layout_marginTop="8dp"
-        layout="@layout/account_picker_row" />
+        <include
+            android:id="@+id/account_picker_state_no_account"
+            layout="@layout/account_picker_state_no_account" />
+        <include
+            android:id="@+id/account_picker_state_collapsed"
+            layout="@layout/account_picker_state_collapsed" />
+        <include
+            android:id="@+id/account_picker_state_expanded"
+            layout="@layout/account_picker_state_expanded" />
+        <include
+            android:id="@+id/account_picker_state_signin_in_progress"
+            layout="@layout/account_picker_state_signin_in_progress" />
+        <include
+            android:id="@+id/account_picker_state_incognito_interstitial"
+            layout="@layout/incognito_interstitial_bottom_sheet_view" />
+        <include
+            android:id="@+id/account_picker_state_general_error"
+            layout="@layout/account_picker_state_general_error" />
+        <include
+            android:id="@+id/account_picker_state_auth_error"
+            layout="@layout/account_picker_state_auth_error" />
 
-    <ProgressBar
-        android:id="@+id/account_picker_signin_spinner_view"
-        android:layout_width="32dp"
-        android:layout_height="32dp"
-        android:layout_gravity="center"
-        android:layout_marginTop="64dp"
-        android:layout_marginBottom="128dp"
-        android:visibility="gone" />
-
-    <org.chromium.ui.widget.ButtonCompat
-        android:id="@+id/account_picker_continue_as_button"
-        style="@style/FilledButton.Flat"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="24dp"
-        android:layout_marginEnd="24dp"
-        android:layout_marginTop="8dp"
-        android:ellipsize="end"
-        android:singleLine="true"
-        android:text="@string/signin_promo_continue_as" />
-
-    <org.chromium.ui.widget.ButtonCompat
-        android:id="@+id/account_picker_dismiss_button"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="24dp"
-        android:layout_marginEnd="24dp"
-        android:text="@string/no_thanks"
-        style="@style/TextButton" />
-
-    <include
-        android:id="@+id/incognito_interstitial_bottom_sheet_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:visibility="gone"
-        layout="@layout/incognito_interstitial_bottom_sheet_view"/>
+    </ViewFlipper>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/account_picker_state_auth_error.xml b/chrome/android/java/res/layout/account_picker_state_auth_error.xml
new file mode 100644
index 0000000..87770e3
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_auth_error.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<LinearLayout
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:importantForAccessibility="no"
+        app:srcCompat="@drawable/ic_warning_red_24dp" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:layout_marginBottom="8dp"
+        android:gravity="center_horizontal"
+        android:textAppearance="@style/TextAppearance.TextLarge.Primary"
+        android:text="@string/signin_account_picker_bottom_sheet_error_title" />
+
+    <org.chromium.ui.widget.TextViewWithLeading
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="24dp"
+        android:layout_marginEnd="24dp"
+        android:layout_marginBottom="16dp"
+        android:gravity="center_horizontal"
+        android:textAppearance="@style/TextAppearance.TextMedium.Secondary"
+        android:text="@string/signin_account_picker_auth_error_subtitle"
+        app:leading="@dimen/text_size_medium_leading" />
+
+    <include layout="@layout/account_picker_bottom_sheet_continue_button" />
+
+</LinearLayout>
diff --git a/chrome/android/java/res/layout/account_picker_state_collapsed.xml b/chrome/android/java/res/layout/account_picker_state_collapsed.xml
new file mode 100644
index 0000000..ceb1b8e
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_collapsed.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <include layout="@layout/account_picker_bottom_sheet_header" />
+
+    <View style="@style/HorizontalDivider" />
+
+    <include
+        android:id="@+id/account_picker_selected_account"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:layout_marginTop="8dp"
+        layout="@layout/account_picker_row" />
+
+    <include layout="@layout/account_picker_bottom_sheet_continue_button" />
+
+    <org.chromium.ui.widget.ButtonCompat
+        android:id="@+id/account_picker_dismiss_button"
+        style="@style/TextButton"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="24dp"
+        android:layout_marginEnd="24dp"
+        android:text="@string/no_thanks" />
+
+</LinearLayout>
diff --git a/chrome/android/java/res/layout/account_picker_state_expanded.xml b/chrome/android/java/res/layout/account_picker_state_expanded.xml
new file mode 100644
index 0000000..619f264
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_expanded.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <include layout="@layout/account_picker_bottom_sheet_header" />
+
+    <View style="@style/HorizontalDivider" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/account_picker_account_list"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        android:requiresFadingEdge="vertical"
+        android:scrollbars="vertical"
+        android:scrollbarStyle="outsideOverlay" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/account_picker_state_general_error.xml b/chrome/android/java/res/layout/account_picker_state_general_error.xml
new file mode 100644
index 0000000..1ca831c
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_general_error.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<LinearLayout
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:importantForAccessibility="no"
+        app:srcCompat="@drawable/ic_warning_red_24dp" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:layout_marginBottom="8dp"
+        android:gravity="center_horizontal"
+        android:textAppearance="@style/TextAppearance.TextLarge.Primary"
+        android:text="@string/signin_account_picker_bottom_sheet_error_title" />
+
+    <org.chromium.ui.widget.TextViewWithLeading
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="24dp"
+        android:layout_marginEnd="24dp"
+        android:layout_marginBottom="16dp"
+        android:gravity="center_horizontal"
+        android:textAppearance="@style/TextAppearance.TextMedium.Secondary"
+        android:text="@string/signin_account_picker_general_error_subtitle"
+        app:leading="@dimen/text_size_medium_leading" />
+
+    <include layout="@layout/account_picker_bottom_sheet_continue_button" />
+
+</LinearLayout>
diff --git a/chrome/android/java/res/layout/account_picker_state_no_account.xml b/chrome/android/java/res/layout/account_picker_state_no_account.xml
new file mode 100644
index 0000000..ca3bbd7
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_no_account.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <include layout="@layout/account_picker_bottom_sheet_header" />
+
+    <View style="@style/HorizontalDivider" />
+
+    <include layout="@layout/account_picker_bottom_sheet_continue_button" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml b/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml
new file mode 100644
index 0000000..c4aebc38
--- /dev/null
+++ b/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:importantForAccessibility="no"
+        app:srcCompat="@drawable/chrome_sync_logo" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:layout_marginBottom="8dp"
+        android:gravity="center_horizontal"
+        android:textAppearance="@style/TextAppearance.TextLarge.Primary"
+        android:text="@string/signin_account_picker_bottom_sheet_signin_title" />
+
+    <ProgressBar
+        android:id="@+id/account_picker_signin_spinner_view"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="64dp"
+        android:layout_marginBottom="128dp" />
+
+</LinearLayout>
diff --git a/chrome/android/java/res/layout/editable_option_editor_footer.xml b/chrome/android/java/res/layout/editable_option_editor_footer.xml
index 14aca69..3e19d80 100644
--- a/chrome/android/java/res/layout/editable_option_editor_footer.xml
+++ b/chrome/android/java/res/layout/editable_option_editor_footer.xml
@@ -8,6 +8,7 @@
         android:orientation="vertical" >
 
     <TextView
+        android:id="@+id/required_fields_notice"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDialog.java
index 1346291..ccad56a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDialog.java
@@ -356,6 +356,18 @@
         cancelButton.setOnClickListener(this);
     }
 
+    private void prepareFooter() {
+        TextView requiredFieldsNotice = mLayout.findViewById(R.id.required_fields_notice);
+        int requiredFieldsNoticeVisibility = View.GONE;
+        for (int i = 0; i < mFieldViews.size(); i++) {
+            if (mFieldViews.get(i).isRequired()) {
+                requiredFieldsNoticeVisibility = View.VISIBLE;
+                break;
+            }
+        }
+        requiredFieldsNotice.setVisibility(requiredFieldsNoticeVisibility);
+    }
+
     /**
      * Create the visual representation of the EditorModel.
      *
@@ -453,6 +465,7 @@
 
                     // The fields may have changed.
                     prepareEditor();
+                    prepareFooter();
                     if (sObserverForTest != null) sObserverForTest.onEditorReadyToEdit();
                 }
             };
@@ -530,6 +543,7 @@
 
         prepareToolbar();
         prepareEditor();
+        prepareFooter();
         prepareButtons();
         show();
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDropdownField.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDropdownField.java
index 6ee8301c..dd49923 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDropdownField.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorDropdownField.java
@@ -178,6 +178,11 @@
     }
 
     @Override
+    public boolean isRequired() {
+        return mFieldModel.isRequired();
+    }
+
+    @Override
     public void updateDisplayedError(boolean showError) {
         View view = mDropdown.getSelectedView();
         if (view != null && view instanceof TextView) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorFieldView.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorFieldView.java
index c05464e..bf06d65 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorFieldView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorFieldView.java
@@ -16,6 +16,9 @@
     /** @return True if this field is valid. */
     boolean isValid();
 
+    /** @return True if this field is required. */
+    boolean isRequired();
+
     /** Scrolls to and focuses the field to bring user's attention to it. */
     void scrollToAndFocus();
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorTextField.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorTextField.java
index c7f4205..852a7e9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorTextField.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorTextField.java
@@ -257,6 +257,11 @@
     }
 
     @Override
+    public boolean isRequired() {
+        return mEditorFieldModel.isRequired();
+    }
+
+    @Override
     public void updateDisplayedError(boolean showError) {
         mInputLayout.setError(showError ? mEditorFieldModel.getErrorMessage() : null);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
index ace595e..d08773b8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
@@ -257,7 +257,7 @@
 
     // ProfileDataCache.Observer implementation.
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         triggerPromoUpdate();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
index eb59c8e..5762bfe 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
@@ -73,7 +73,7 @@
     private EmptyBottomSheetObserver mSheetObserver;
 
     private String mUrl;
-    private int mCurrentMaxSheetHeight;
+    private int mCurrentMaxViewHeight;
     private boolean mPeeked;
     private boolean mViewed; // Moved up from peek state by user
     private boolean mFullyOpened;
@@ -193,7 +193,7 @@
             };
             mBottomSheetController.addObserver(mSheetObserver);
             mSheetContent = new EphemeralTabSheetContent(mContext, this::openInNewTab,
-                    this::onToolbarClick, this::close, getMaxSheetHeight());
+                    this::onToolbarClick, this::close, getMaxViewHeight());
             mMediator.init(mWebContents, mContentView, mSheetContent, profile);
             mLayoutView.addOnLayoutChangeListener(this);
         }
@@ -277,17 +277,18 @@
 
         // It may not be possible to update the content height when the actual height changes
         // due to the current tab not being ready yet. Try it later again when the tab
-        // (hence MaxSheetHeight) becomes valid.
-        int maxSheetHeight = getMaxSheetHeight();
-        if (maxSheetHeight == 0 || mCurrentMaxSheetHeight == maxSheetHeight) return;
-        mSheetContent.updateContentHeight(maxSheetHeight);
-        mCurrentMaxSheetHeight = maxSheetHeight;
+        // (hence MaxViewHeight) becomes valid.
+        int maxViewHeight = getMaxViewHeight();
+        if (maxViewHeight == 0 || mCurrentMaxViewHeight == maxViewHeight) return;
+        mSheetContent.updateContentHeight(maxViewHeight);
+        mCurrentMaxViewHeight = maxViewHeight;
     }
 
-    private int getMaxSheetHeight() {
+    /** @return The maximum base view height for sheet content view. */
+    private int getMaxViewHeight() {
         Tab tab = mTabProvider.get();
         if (tab == null || tab.getView() == null) return 0;
-        return (int) (tab.getView().getHeight() * 0.9f);
+        return tab.getView().getHeight();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
index e597ea0..35a437d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
@@ -16,10 +16,12 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
 
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.components.browser_ui.widget.FadingShadow;
 import org.chromium.components.browser_ui.widget.FadingShadowView;
@@ -34,6 +36,9 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.url.GURL;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * Represents ephemeral tab content and the toolbar, which can be included inside the bottom sheet.
  */
@@ -46,6 +51,23 @@
 
     private static final float PEEK_TOOLBAR_HEIGHT_MULTIPLE = 2.f;
 
+    /** Ratio of the height when in half mode. */
+    private static final float HALF_HEIGHT_RATIO = 0.6f;
+
+    /** Ratio of the height when in full mode. Used in half-open variation. */
+    private static final float FULL_HEIGHT_RATIO = 0.9f;
+
+    private static final String OPEN_MODE_VARIATION_NAME = "ephemeral_tab_open_mode";
+
+    /** The state to which preview tab will open to when requested. */
+    @IntDef({OpenMode.PEEK, OpenMode.HALF, OpenMode.FULL})
+    @Retention(RetentionPolicy.SOURCE)
+    @interface OpenMode {
+        int PEEK = 0;
+        int HALF = 1;
+        int FULL = 2;
+    }
+
     private final Context mContext;
     private final Runnable mOpenNewTabCallback;
     private final Runnable mToolbarClickCallback;
@@ -61,6 +83,7 @@
     private FadingShadowView mShadow;
     private Drawable mCurrentFavicon;
     private ImageView mFaviconView;
+    private @OpenMode int mOpenMode;
 
     /**
      * Constructor.
@@ -71,7 +94,7 @@
      * @param maxSheetHeight The height of the sheet in full height position.
      */
     public EphemeralTabSheetContent(Context context, Runnable openNewTabCallback,
-            Runnable toolbarClickCallback, Runnable closeButtonCallback, int maxSheetHeight) {
+            Runnable toolbarClickCallback, Runnable closeButtonCallback, int maxViewHeight) {
         mContext = context;
         mOpenNewTabCallback = openNewTabCallback;
         mToolbarClickCallback = toolbarClickCallback;
@@ -79,8 +102,11 @@
         mToolbarHeightPx =
                 mContext.getResources().getDimensionPixelSize(R.dimen.sheet_tab_toolbar_height);
 
-        createThinWebView(maxSheetHeight);
+        createThinWebView((int) (maxViewHeight * FULL_HEIGHT_RATIO));
         createToolbarView();
+        mOpenMode = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
+                ChromeFeatureList.EPHEMERAL_TAB_USING_BOTTOM_SHEET, OPEN_MODE_VARIATION_NAME,
+                OpenMode.PEEK);
     }
 
     /**
@@ -135,14 +161,17 @@
     }
 
     /**
-     * Resizes the thin webview as per the given sheet height. This should never be more than the
-     * tab height for it to function correctly.
-     * @param maxContentHeight The height of the bottom sheet in the maximized state.
+     * Resizes the thin webview as per the given new max height.
+     * @param maxViewHeight The maximum height of the view.
      */
-    void updateContentHeight(int maxContentHeight) {
-        if (maxContentHeight == 0) return;
+    void updateContentHeight(int maxViewHeight) {
+        if (maxViewHeight == 0) return;
         ViewGroup.LayoutParams layoutParams = mThinWebView.getView().getLayoutParams();
-        layoutParams.height = maxContentHeight - mToolbarHeightPx;
+
+        // This should never be more than the tab height for it to function correctly.
+        // We scale it by |FULL_HEIGHT_RATIO| to make the size equal to that of
+        // ThinWebView and so it can leave a portion of the page below it visible.
+        layoutParams.height = (int) (maxViewHeight * FULL_HEIGHT_RATIO) - mToolbarHeightPx;
         mSheetContentView.requestLayout();
     }
 
@@ -249,14 +278,23 @@
 
     @Override
     public int getPeekHeight() {
-        int toolbarHeight =
-                mContext.getResources().getDimensionPixelSize(R.dimen.toolbar_height_no_shadow);
-        return (int) (toolbarHeight * PEEK_TOOLBAR_HEIGHT_MULTIPLE);
+        if (mOpenMode == OpenMode.PEEK) {
+            int toolbarHeight =
+                    mContext.getResources().getDimensionPixelSize(R.dimen.toolbar_height_no_shadow);
+            return (int) (toolbarHeight * PEEK_TOOLBAR_HEIGHT_MULTIPLE);
+        } else {
+            return HeightMode.DISABLED;
+        }
+    }
+
+    @Override
+    public float getHalfHeightRatio() {
+        return mOpenMode == OpenMode.HALF ? HALF_HEIGHT_RATIO : HeightMode.DEFAULT;
     }
 
     @Override
     public float getFullHeightRatio() {
-        return BottomSheetContent.HeightMode.WRAP_CONTENT;
+        return mOpenMode == OpenMode.HALF ? FULL_HEIGHT_RATIO : HeightMode.WRAP_CONTENT;
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contacts_picker/ChromePickerAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/contacts_picker/ChromePickerAdapter.java
index e1d0332..3bd589e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contacts_picker/ChromePickerAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contacts_picker/ChromePickerAdapter.java
@@ -67,8 +67,8 @@
     // ProfileDataCache.Observer:
 
     @Override
-    public void onProfileDataUpdated(String accountId) {
-        if (!mWaitingOnOwnerInfo || !TextUtils.equals(accountId, getOwnerEmail())) {
+    public void onProfileDataUpdated(String accountEmail) {
+        if (!mWaitingOnOwnerInfo || !TextUtils.equals(accountEmail, getOwnerEmail())) {
             return;
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java
index e815dcb1..e86e10f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java
@@ -157,6 +157,7 @@
                 mLoadingView.showLoadingUI();
                 setTosComponentVisibility(false);
             } else if (mSkipTosDialogPolicyListener.get()) {
+                setTosComponentVisibility(false);
                 skipTosByPolicy();
             }
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java
index 07787d5..cfae86e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java
@@ -110,6 +110,7 @@
             setTosAndUmaVisible(false);
         } else if (mSkipTosDialogPolicyListener.get()) {
             // Skip the FRE if we know dialog is disabled by policy.
+            setTosAndUmaVisible(false);
             exitCctFirstRun();
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterClient.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterClient.java
index 790e581..ddfd3ff7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterClient.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterClient.java
@@ -4,12 +4,14 @@
 
 package org.chromium.chrome.browser.media.router;
 
+import android.content.Context;
 import android.content.Intent;
 
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 
 import org.chromium.base.ApplicationStatus;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.chrome.R;
@@ -27,6 +29,11 @@
     private ChromeMediaRouterClient() {}
 
     @Override
+    public Context getContextForRemoting() {
+        return ContextUtils.getApplicationContext();
+    }
+
+    @Override
     public int getTabId(WebContents webContents) {
         Tab tab = TabUtils.fromWebContents(webContents);
         return tab == null ? -1 : tab.getId();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
index dd9ec16..e9a7ffb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -497,10 +497,6 @@
 
         mLogoDelegate.getSearchProviderLogo((logo, fromCache) -> {
             if (logo == null) {
-                if (fromCache) {
-                    return;
-                }
-
                 if (mSearchProviderIsGoogle) {
                     // We received a null logo and the provider is Google; this means there's no
                     // doodle.
@@ -519,6 +515,8 @@
                                 renderer.recordRenderEvent();
                             }));
                 }
+
+                if (fromCache) return;
             }
 
             mSearchProviderLogoView.setDelegate(mLogoDelegate);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
index 5ef015b..a9e2f4eff 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@@ -412,7 +412,7 @@
 
     // ProfileDataCache.Observer implementation.
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         update();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
index e90ae57..e8d0a51 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -271,7 +271,7 @@
 
         // ProfileDataCache.Observer implementation.
         @Override
-        public void onProfileDataUpdated(String accountId) {
+        public void onProfileDataUpdated(String accountEmail) {
             notifyDataChanged();
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
index f3776ee..5f964c2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.omnibox.suggestions;
 
 import android.text.TextUtils;
-import android.util.SparseArray;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -25,12 +24,10 @@
 import org.chromium.components.embedder_support.util.UrlUtilities;
 import org.chromium.components.omnibox.AutocompleteMatch;
 import org.chromium.components.omnibox.AutocompleteResult;
-import org.chromium.components.omnibox.AutocompleteResult.GroupDetails;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.url.GURL;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -309,40 +306,6 @@
         mVoiceSuggestionProvider.setVoiceResults(results);
     }
 
-    @CalledByNative
-    private static AutocompleteResult createAutocompleteResult(
-            int suggestionsCount, int groupsCount) {
-        return new AutocompleteResult(new ArrayList<AutocompleteMatch>(suggestionsCount),
-                new SparseArray<GroupDetails>(groupsCount));
-    }
-
-    /**
-     * Append suggestion to Suggestions List.
-     *
-     * @param autocompleteResult AutocompleteResult instance.
-     * @param suggestion Suggestion to append.
-     */
-    @CalledByNative
-    private static void addOmniboxSuggestionToResult(
-            AutocompleteResult autocompleteResult, AutocompleteMatch suggestion) {
-        autocompleteResult.getSuggestionsList().add(suggestion);
-    }
-
-    /**
-     * Insert element to GroupDetails map.
-     *
-     * @param autocompleteResult AutocompleteResult instance.
-     * @param groupId ID of a Group.
-     * @param headerText Group title.
-     * @param collapsedByDefault Whether group should be collapsed by default.
-     */
-    @CalledByNative
-    private static void addOmniboxGroupDetailsToResult(AutocompleteResult autocompleteResult,
-            int groupId, String headerText, boolean collapsedByDefault) {
-        autocompleteResult.getGroupsDetails().put(
-                groupId, new GroupDetails(headerText, collapsedByDefault));
-    }
-
     /**
      * Verifies whether the given AutocompleteMatch object has the same hashCode as another
      * suggestion. This is used to validate that the native AutocompleteMatch object is in sync
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
index a1da8d1..34280e3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
@@ -399,7 +399,7 @@
 
     // Implements BrowserPaymentRequest:
     @Override
-    public String continueShow(boolean isFinishedQueryingPaymentApps, boolean isUserGestureShow) {
+    public String continueShow(boolean isFinishedQueryingPaymentApps) {
         ChromeActivity chromeActivity = ChromeActivity.fromWebContents(mWebContents);
         if (chromeActivity == null) return ErrorStrings.ACTIVITY_NOT_FOUND;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/DisplayableProfileData.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/DisplayableProfileData.java
index 1ae4475..d26ffde 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/DisplayableProfileData.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/DisplayableProfileData.java
@@ -12,26 +12,26 @@
  * Immutable holder for displayable profile data.
  */
 public class DisplayableProfileData {
-    private final String mAccountName;
+    private final String mAccountEmail;
     private final Drawable mImage;
     private final @Nullable String mFullName;
     private final @Nullable String mGivenName;
 
-    public DisplayableProfileData(String accountName, Drawable image, @Nullable String fullName,
+    public DisplayableProfileData(String accountEmail, Drawable image, @Nullable String fullName,
             @Nullable String givenName) {
-        assert accountName != null;
+        assert accountEmail != null;
         assert image != null;
-        mAccountName = accountName;
+        mAccountEmail = accountEmail;
         mImage = image;
         mFullName = fullName;
         mGivenName = givenName;
     }
 
     /**
-     * @return The account name (i.e. the e-mail address).
+     * @return The account email.
      */
-    public String getAccountName() {
-        return mAccountName;
+    public String getAccountEmail() {
+        return mAccountEmail;
     }
 
     /**
@@ -60,7 +60,7 @@
      */
     public String getFullNameOrEmail() {
         if (mFullName == null) {
-            return mAccountName;
+            return mAccountEmail;
         }
         return mFullName;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDataCache.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDataCache.java
index f38f3e5..3991bede 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDataCache.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDataCache.java
@@ -53,9 +53,9 @@
     public interface Observer {
         /**
          * Notifies that an account's profile data has been updated.
-         * @param accountId An account ID.
+         * @param accountEmail An account email.
          */
-        void onProfileDataUpdated(String accountId);
+        void onProfileDataUpdated(String accountEmail);
     }
 
     /**
@@ -162,7 +162,6 @@
      * @param badgeResId Resource id of the badge to be attached. If it is 0 then no badge is
      *         attached
      */
-    @MainThread
     public void updateBadgeConfig(@DrawableRes int badgeResId) {
         ThreadUtils.assertOnUiThread();
         assert mBadgeConfig != null;
@@ -187,10 +186,10 @@
      *         given account or a {@link DisplayableProfileData} with a placeholder image and null
      *         full and given name.
      */
-    public DisplayableProfileData getProfileDataOrDefault(String accountName) {
-        DisplayableProfileData profileData = mCachedProfileData.get(accountName);
+    public DisplayableProfileData getProfileDataOrDefault(String accountEmail) {
+        DisplayableProfileData profileData = mCachedProfileData.get(accountEmail);
         if (profileData == null) {
-            return new DisplayableProfileData(accountName, mPlaceholderImage, null, null);
+            return new DisplayableProfileData(accountEmail, mPlaceholderImage, null, null);
         }
         return profileData;
     }
@@ -237,27 +236,27 @@
 
     private DisplayableProfileData createDisplayableProfileData(
             ProfileDataSource.ProfileData profileData) {
-        return new DisplayableProfileData(profileData.getAccountName(),
-                prepareAvatar(profileData.getAvatar(), profileData.getAccountName()),
+        return new DisplayableProfileData(profileData.getAccountEmail(),
+                prepareAvatar(profileData.getAvatar(), profileData.getAccountEmail()),
                 profileData.getFullName(), profileData.getGivenName());
     }
 
     @Override
-    public void onProfileDownloaded(String accountId, String fullName, String givenName,
-            Bitmap bitmap) {
+    public void onProfileDownloaded(
+            String accountEmail, String fullName, String givenName, Bitmap bitmap) {
         ThreadUtils.assertOnUiThread();
         updateCachedProfileDataAndNotifyObservers(new DisplayableProfileData(
-                accountId, prepareAvatar(bitmap, accountId), fullName, givenName));
+                accountEmail, prepareAvatar(bitmap, accountEmail), fullName, givenName));
     }
 
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         assert mProfileDataSource != null;
         ProfileDataSource.ProfileData profileData =
-                mProfileDataSource.getProfileDataForAccount(accountId);
+                mProfileDataSource.getProfileDataForAccount(accountEmail);
         if (profileData == null) {
-            mCachedProfileData.remove(accountId);
-            notifyObservers(accountId);
+            mCachedProfileData.remove(accountEmail);
+            notifyObservers(accountEmail);
         } else {
             updateCachedProfileDataAndNotifyObservers(createDisplayableProfileData(profileData));
         }
@@ -338,8 +337,8 @@
     }
 
     private void updateCachedProfileDataAndNotifyObservers(DisplayableProfileData profileData) {
-        mCachedProfileData.put(profileData.getAccountName(), profileData);
-        notifyObservers(profileData.getAccountName());
+        mCachedProfileData.put(profileData.getAccountEmail(), profileData);
+        notifyObservers(profileData.getAccountEmail());
     }
 
     private void notifyObservers(String accountEmail) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDownloader.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDownloader.java
index f6014b1..fe87ec7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDownloader.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/ProfileDownloader.java
@@ -30,13 +30,13 @@
     public interface Observer {
         /**
          * Notifies that an account data in the profile has been updated.
-         * @param accountId An account ID.
+         * @param accountEmail An account email.
          * @param fullName A full name.
          * @param givenName A given name.
          * @param bitmap A user picture.
          */
         void onProfileDownloaded(
-                String accountId, String fullName, String givenName, Bitmap bitmap);
+                String accountEmail, String fullName, String givenName, Bitmap bitmap);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
index d9bc9ea..2755e3f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
@@ -336,12 +336,12 @@
         if (!TextUtils.isEmpty(fullName)) {
             mConsentTextTracker.setTextNonRecordable(mView.getAccountTextPrimary(), fullName);
             mConsentTextTracker.setTextNonRecordable(
-                    mView.getAccountTextSecondary(), profileData.getAccountName());
+                    mView.getAccountTextSecondary(), profileData.getAccountEmail());
             mView.getAccountTextSecondary().setVisibility(View.VISIBLE);
         } else {
             // Full name is not available, show the email in the primary TextView.
             mConsentTextTracker.setTextNonRecordable(
-                    mView.getAccountTextPrimary(), profileData.getAccountName());
+                    mView.getAccountTextPrimary(), profileData.getAccountEmail());
             mView.getAccountTextSecondary().setVisibility(View.GONE);
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
index dd8d14c..b3ce91d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
@@ -317,14 +317,14 @@
         recordSigninButtonUsed();
         RecordUserAction.record(mSigninWithDefaultUserActionName);
         SigninActivityLauncherImpl.get().launchActivityForPromoDefaultFlow(
-                context, mAccessPoint, mProfileData.getAccountName());
+                context, mAccessPoint, mProfileData.getAccountEmail());
     }
 
     private void signinWithNotDefaultAccount(Context context) {
         recordSigninButtonUsed();
         RecordUserAction.record(mSigninNotDefaultUserActionName);
         SigninActivityLauncherImpl.get().launchActivityForPromoChooseAccountFlow(
-                context, mAccessPoint, mProfileData.getAccountName());
+                context, mAccessPoint, mProfileData.getAccountEmail());
     }
 
     private void recordSigninButtonUsed() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java
index d89c190..1e164e7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java
@@ -7,10 +7,11 @@
 import android.app.Activity;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.widget.ImageView;
-import android.widget.ProgressBar;
-import android.widget.TextView;
+import android.widget.ViewFlipper;
 
+import androidx.annotation.IdRes;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.recyclerview.widget.LinearLayoutManager;
@@ -18,6 +19,7 @@
 
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.signin.DisplayableProfileData;
+import org.chromium.chrome.browser.signin.account_picker.AccountPickerBottomSheetProperties.ViewState;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.ui.widget.ButtonCompat;
 
@@ -43,15 +45,9 @@
     private final Activity mActivity;
     private final BackPressListener mBackPressListener;
     private final View mContentView;
-    private final ImageView mLogoImage;
-    private final TextView mAccountPickerTitle;
-    private final TextView mAccountPickerSubtitle;
-    private final View mHorizontalDivider;
+    private final ViewFlipper mViewFlipper;
     private final RecyclerView mAccountListView;
     private final View mSelectedAccountView;
-    private final View mIncognitoInterstitialView;
-    private final ProgressBar mSpinnerView;
-    private final ButtonCompat mContinueAsButton;
     private final ButtonCompat mDismissButton;
 
     private @StringRes int mTitleId;
@@ -64,23 +60,28 @@
     AccountPickerBottomSheetView(Activity activity, BackPressListener backPressListener) {
         mActivity = activity;
         mBackPressListener = backPressListener;
-
         mContentView = LayoutInflater.from(mActivity).inflate(
                 R.layout.account_picker_bottom_sheet_view, null);
-        mLogoImage = mContentView.findViewById(R.id.account_picker_bottom_sheet_logo);
-        mAccountPickerTitle = mContentView.findViewById(R.id.account_picker_bottom_sheet_title);
-        mAccountPickerSubtitle =
-                mContentView.findViewById(R.id.account_picker_bottom_sheet_subtitle);
-        mHorizontalDivider = mContentView.findViewById(R.id.account_picker_horizontal_divider);
-        mAccountListView = mContentView.findViewById(R.id.account_picker_account_list);
-        mIncognitoInterstitialView =
-                mContentView.findViewById(R.id.incognito_interstitial_bottom_sheet_view);
+
+        mViewFlipper = mContentView.findViewById(R.id.account_picker_state_view_flipper);
+        checkViewFlipperChildrenAndViewStateMatch(mViewFlipper);
+        mAccountListView = mViewFlipper.getChildAt(ViewState.EXPANDED_ACCOUNT_LIST)
+                                   .findViewById(R.id.account_picker_account_list);
         mAccountListView.setLayoutManager(new LinearLayoutManager(
                 mAccountListView.getContext(), LinearLayoutManager.VERTICAL, false));
-        mSelectedAccountView = mContentView.findViewById(R.id.account_picker_selected_account);
-        mSpinnerView = mContentView.findViewById(R.id.account_picker_signin_spinner_view);
-        mContinueAsButton = mContentView.findViewById(R.id.account_picker_continue_as_button);
-        mDismissButton = mContentView.findViewById(R.id.account_picker_dismiss_button);
+        mSelectedAccountView = mViewFlipper.getChildAt(ViewState.COLLAPSED_ACCOUNT_LIST)
+                                       .findViewById(R.id.account_picker_selected_account);
+        mDismissButton = mViewFlipper.getChildAt(ViewState.COLLAPSED_ACCOUNT_LIST)
+                                 .findViewById(R.id.account_picker_dismiss_button);
+
+        // TODO(https://crbug.com/1146990): Use different continue buttons for different view
+        // states.
+        setUpContinueButton(mViewFlipper.getChildAt(ViewState.NO_ACCOUNTS),
+                R.string.signin_add_account_to_device);
+        setUpContinueButton(mViewFlipper.getChildAt(ViewState.SIGNIN_GENERAL_ERROR),
+                R.string.signin_account_picker_general_error_button);
+        setUpContinueButton(mViewFlipper.getChildAt(ViewState.SIGNIN_AUTH_ERROR),
+                R.string.auth_error_card_button);
     }
 
     void setTitleAndContentDescriptionStrings(
@@ -100,7 +101,7 @@
      * The incognito interstitial view when the user clicks on incognito mode option.
      */
     View getIncognitoInterstitialView() {
-        return mIncognitoInterstitialView;
+        return mViewFlipper.getChildAt(ViewState.INCOGNITO_INTERSTITIAL);
     }
 
     /**
@@ -111,10 +112,17 @@
     }
 
     /**
-     * The |Continue As| button on the bottom sheet.
+     * Sets the listener of the continue button.
+     * TODO(https://crbug.com/1146990): Use different continue buttons for different view states.
      */
-    ButtonCompat getContinueAsButton() {
-        return mContinueAsButton;
+    void setOnClickListenerOfContinueButton(OnClickListener listener) {
+        for (int i = 0; i < mViewFlipper.getChildCount(); ++i) {
+            ButtonCompat continueButton =
+                    mViewFlipper.getChildAt(i).findViewById(R.id.account_picker_continue_as_button);
+            if (continueButton != null) {
+                continueButton.setOnClickListener(listener);
+            }
+        }
     }
 
     /**
@@ -125,127 +133,31 @@
     }
 
     /**
+     * Sets the displayed view according to the given {@link ViewState}.
+     */
+    void setDisplayedView(@ViewState int state) {
+        mViewFlipper.setDisplayedChild(state);
+    }
+
+    /**
      * Updates the views related to the selected account.
      *
      * This method only updates the UI elements like text related to the selected account, it
      * does not change the visibility.
      */
     void updateSelectedAccount(DisplayableProfileData accountProfileData) {
+        View view = mViewFlipper.getChildAt(ViewState.COLLAPSED_ACCOUNT_LIST);
         ExistingAccountRowViewBinder.bindAccountView(accountProfileData, mSelectedAccountView);
 
         ImageView rowEndImage = mSelectedAccountView.findViewById(R.id.account_selection_mark);
         rowEndImage.setImageResource(R.drawable.ic_expand_more_in_circle_24dp);
 
+        ButtonCompat continueButton = view.findViewById(R.id.account_picker_continue_as_button);
         String continueAsButtonText = mActivity.getString(R.string.signin_promo_continue_as,
                 accountProfileData.getGivenNameOrFullNameOrEmail());
-        mContinueAsButton.setText(continueAsButtonText);
+        continueButton.setText(continueAsButtonText);
     }
 
-    /**
-     * Expands the account list.
-     */
-    void expandAccountList() {
-        // When the user pressed back from incognito interstitial where logo and title and gone,
-        // we need to set them visible again here.
-        mLogoImage.setVisibility(View.VISIBLE);
-        mAccountPickerTitle.setVisibility(View.VISIBLE);
-        mAccountPickerSubtitle.setText(R.string.signin_account_picker_bottom_sheet_subtitle);
-        mAccountPickerSubtitle.setVisibility(View.VISIBLE);
-        mHorizontalDivider.setVisibility(View.VISIBLE);
-        mAccountListView.setVisibility(View.VISIBLE);
-
-        mSelectedAccountView.setVisibility(View.GONE);
-        mContinueAsButton.setVisibility(View.GONE);
-        mDismissButton.setVisibility(View.GONE);
-        mIncognitoInterstitialView.setVisibility(View.GONE);
-    }
-
-    /**
-     * Collapses the account list to the selected account.
-     */
-    void collapseAccountList() {
-        mLogoImage.setImageResource(R.drawable.chrome_sync_logo);
-        mAccountPickerTitle.setText(R.string.signin_account_picker_dialog_title);
-        mAccountPickerSubtitle.setText(R.string.signin_account_picker_bottom_sheet_subtitle);
-        mHorizontalDivider.setVisibility(View.VISIBLE);
-        mSelectedAccountView.setVisibility(View.VISIBLE);
-        mContinueAsButton.setVisibility(View.VISIBLE);
-        mDismissButton.setVisibility(View.VISIBLE);
-
-        mAccountListView.setVisibility(View.GONE);
-        mSpinnerView.setVisibility(View.GONE);
-    }
-
-    /**
-     * Collapses the account list to the no account view.
-     */
-    void collapseToNoAccountView() {
-        mContinueAsButton.setText(R.string.signin_add_account_to_device);
-        mContinueAsButton.setVisibility(View.VISIBLE);
-        mDismissButton.setVisibility(View.VISIBLE);
-
-        mAccountListView.setVisibility(View.GONE);
-        mSelectedAccountView.setVisibility(View.GONE);
-    }
-
-    /**
-     * Sets up the sign-in in progress view.
-     */
-    void setUpSignInInProgressView() {
-        mLogoImage.setImageResource(R.drawable.chrome_sync_logo);
-        mAccountPickerTitle.setText(R.string.signin_account_picker_bottom_sheet_signin_title);
-        mSpinnerView.setVisibility(View.VISIBLE);
-
-        mAccountPickerSubtitle.setVisibility(View.GONE);
-        mHorizontalDivider.setVisibility(View.GONE);
-        mSelectedAccountView.setVisibility(View.GONE);
-        mContinueAsButton.setVisibility(View.GONE);
-        mDismissButton.setVisibility(View.GONE);
-    }
-
-    void setUpIncognitoInterstitialView() {
-        mIncognitoInterstitialView.setVisibility(View.VISIBLE);
-
-        mLogoImage.setVisibility(View.GONE);
-        mAccountPickerTitle.setVisibility(View.GONE);
-        mAccountPickerSubtitle.setVisibility(View.GONE);
-        mHorizontalDivider.setVisibility(View.GONE);
-        mAccountListView.setVisibility(View.GONE);
-    }
-
-    /**
-     * Sets up the view for sign-in general error.
-     */
-    void setUpSignInGeneralErrorView() {
-        mLogoImage.setImageResource(R.drawable.ic_warning_red_24dp);
-        mAccountPickerTitle.setText(R.string.signin_account_picker_bottom_sheet_error_title);
-        mAccountPickerSubtitle.setText(R.string.signin_account_picker_general_error_subtitle);
-        mAccountPickerSubtitle.setVisibility(View.VISIBLE);
-        mContinueAsButton.setText(R.string.signin_account_picker_general_error_button);
-        mContinueAsButton.setVisibility(View.VISIBLE);
-
-        mHorizontalDivider.setVisibility(View.GONE);
-        mSelectedAccountView.setVisibility(View.GONE);
-        mSpinnerView.setVisibility(View.GONE);
-        mDismissButton.setVisibility(View.GONE);
-    }
-
-    /**
-     * Sets up the view for sign-in auth error.
-     */
-    void setUpSignInAuthErrorView() {
-        mLogoImage.setImageResource(R.drawable.ic_warning_red_24dp);
-        mAccountPickerTitle.setText(R.string.signin_account_picker_bottom_sheet_error_title);
-        mAccountPickerSubtitle.setText(R.string.signin_account_picker_auth_error_subtitle);
-        mAccountPickerSubtitle.setVisibility(View.VISIBLE);
-        mContinueAsButton.setText(R.string.auth_error_card_button);
-        mContinueAsButton.setVisibility(View.VISIBLE);
-
-        mHorizontalDivider.setVisibility(View.GONE);
-        mSelectedAccountView.setVisibility(View.GONE);
-        mSpinnerView.setVisibility(View.GONE);
-        mDismissButton.setVisibility(View.GONE);
-    }
 
     @Override
     public View getContentView() {
@@ -312,4 +224,33 @@
         // picker is closed.
         return R.string.close;
     }
+
+    private static void setUpContinueButton(View view, @StringRes int buttonId) {
+        ButtonCompat continueButton = view.findViewById(R.id.account_picker_continue_as_button);
+        continueButton.setText(buttonId);
+    }
+
+    private static void checkViewFlipperChildrenAndViewStateMatch(ViewFlipper viewFlipper) {
+        checkViewFlipperChildIdAndViewStateMatch(
+                viewFlipper, ViewState.NO_ACCOUNTS, R.id.account_picker_state_no_account);
+        checkViewFlipperChildIdAndViewStateMatch(
+                viewFlipper, ViewState.COLLAPSED_ACCOUNT_LIST, R.id.account_picker_state_collapsed);
+        checkViewFlipperChildIdAndViewStateMatch(
+                viewFlipper, ViewState.EXPANDED_ACCOUNT_LIST, R.id.account_picker_state_expanded);
+        checkViewFlipperChildIdAndViewStateMatch(viewFlipper, ViewState.SIGNIN_IN_PROGRESS,
+                R.id.account_picker_state_signin_in_progress);
+        checkViewFlipperChildIdAndViewStateMatch(viewFlipper, ViewState.INCOGNITO_INTERSTITIAL,
+                R.id.account_picker_state_incognito_interstitial);
+        checkViewFlipperChildIdAndViewStateMatch(viewFlipper, ViewState.SIGNIN_GENERAL_ERROR,
+                R.id.account_picker_state_general_error);
+        checkViewFlipperChildIdAndViewStateMatch(
+                viewFlipper, ViewState.SIGNIN_AUTH_ERROR, R.id.account_picker_state_auth_error);
+    }
+
+    private static void checkViewFlipperChildIdAndViewStateMatch(
+            ViewFlipper viewFlipper, @ViewState int viewState, @IdRes int expectedChildId) {
+        if (viewFlipper.getChildAt(viewState).getId() != expectedChildId) {
+            throw new IllegalArgumentException("Match failed with ViewState:" + viewState);
+        }
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java
index 9bb857b3..08f6b2e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java
@@ -25,13 +25,9 @@
         } else if (propertyKey == AccountPickerBottomSheetProperties.VIEW_STATE) {
             @ViewState
             int viewState = model.get(AccountPickerBottomSheetProperties.VIEW_STATE);
-            switchToState(view, viewState);
-            if (viewState == ViewState.COLLAPSED_ACCOUNT_LIST) {
-                // This is needed when the view state changes from SIGNIN_AUTH_ERROR to
-                // COLLAPSED_ACCOUNT_LIST
-                view.updateSelectedAccount(
-                        model.get(AccountPickerBottomSheetProperties.SELECTED_ACCOUNT_DATA));
-            }
+            view.setTitleAndContentDescriptionStrings(
+                    getTitleId(viewState), getSubtitleId(viewState));
+            view.setDisplayedView(viewState);
         } else if (propertyKey == AccountPickerBottomSheetProperties.SELECTED_ACCOUNT_DATA) {
             DisplayableProfileData profileData =
                     model.get(AccountPickerBottomSheetProperties.SELECTED_ACCOUNT_DATA);
@@ -39,7 +35,7 @@
                 view.updateSelectedAccount(profileData);
             }
         } else if (propertyKey == AccountPickerBottomSheetProperties.ON_CONTINUE_AS_CLICKED) {
-            view.getContinueAsButton().setOnClickListener(
+            view.setOnClickListenerOfContinueButton(
                     model.get(AccountPickerBottomSheetProperties.ON_CONTINUE_AS_CLICKED));
         } else if (propertyKey == AccountPickerBottomSheetProperties.ON_DISMISS_CLICKED) {
             view.getDismissButton().setOnClickListener(
@@ -47,41 +43,6 @@
         }
     }
 
-    /**
-     * Sets up the configuration of account picker bottom sheet according to the given
-     * {@link ViewState}.
-     */
-    private static void switchToState(AccountPickerBottomSheetView view, @ViewState int viewState) {
-        view.setTitleAndContentDescriptionStrings(getTitleId(viewState), getSubtitleId(viewState));
-
-        switch (viewState) {
-            case ViewState.NO_ACCOUNTS:
-                view.collapseToNoAccountView();
-                break;
-            case ViewState.COLLAPSED_ACCOUNT_LIST:
-                view.collapseAccountList();
-                break;
-            case ViewState.EXPANDED_ACCOUNT_LIST:
-                view.expandAccountList();
-                break;
-            case ViewState.SIGNIN_IN_PROGRESS:
-                view.setUpSignInInProgressView();
-                break;
-            case ViewState.INCOGNITO_INTERSTITIAL:
-                view.setUpIncognitoInterstitialView();
-                break;
-            case ViewState.SIGNIN_GENERAL_ERROR:
-                view.setUpSignInGeneralErrorView();
-                break;
-            case ViewState.SIGNIN_AUTH_ERROR:
-                view.setUpSignInAuthErrorView();
-                break;
-            default:
-                throw new IllegalArgumentException(
-                        "Cannot bind AccountPickerBottomSheetView for the view state:" + viewState);
-        }
-    }
-
     private static @StringRes int getTitleId(@ViewState int viewState) {
         switch (viewState) {
             case ViewState.NO_ACCOUNTS:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediator.java
index e114797d..adb84f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediator.java
@@ -115,9 +115,9 @@
             DisplayableProfileData profileData, boolean isDefaultAccount) {
         Callback<DisplayableProfileData> profileDataCallback = profileData1
                 -> mAccountPickerListener.onAccountSelected(
-                        profileData1.getAccountName(), isDefaultAccount);
+                        profileData1.getAccountEmail(), isDefaultAccount);
         PropertyModel model = ExistingAccountRowProperties.createModel(profileData,
-                profileDataCallback, profileData.getAccountName().equals(mSelectedAccountName));
+                profileDataCallback, profileData.getAccountEmail().equals(mSelectedAccountName));
         return new MVCListAdapter.ListItem(ItemType.EXISTING_ACCOUNT_ROW, model);
     }
 
@@ -126,7 +126,7 @@
             if (item.type == AccountPickerProperties.ItemType.EXISTING_ACCOUNT_ROW) {
                 PropertyModel model = item.model;
                 boolean isSelectedAccount = TextUtils.equals(mSelectedAccountName,
-                        model.get(ExistingAccountRowProperties.PROFILE_DATA).getAccountName());
+                        model.get(ExistingAccountRowProperties.PROFILE_DATA).getAccountEmail());
                 model.set(ExistingAccountRowProperties.IS_SELECTED_ACCOUNT, isSelectedAccount);
             }
         }
@@ -140,7 +140,7 @@
             if (item.type == AccountPickerProperties.ItemType.EXISTING_ACCOUNT_ROW) {
                 PropertyModel model = item.model;
                 boolean isProfileDataUpdated = TextUtils.equals(accountName,
-                        model.get(ExistingAccountRowProperties.PROFILE_DATA).getAccountName());
+                        model.get(ExistingAccountRowProperties.PROFILE_DATA).getAccountEmail());
                 if (isProfileDataUpdated) {
                     model.set(ExistingAccountRowProperties.PROFILE_DATA,
                             mProfileDataCache.getProfileDataOrDefault(accountName));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/ExistingAccountRowViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/ExistingAccountRowViewBinder.java
index e18c741..aa5447a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/ExistingAccountRowViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/ExistingAccountRowViewBinder.java
@@ -78,11 +78,11 @@
         String fullName = profileData.getFullName();
         if (!TextUtils.isEmpty(fullName)) {
             accountTextPrimary.setText(fullName);
-            accountTextSecondary.setText(profileData.getAccountName());
+            accountTextSecondary.setText(profileData.getAccountEmail());
             accountTextSecondary.setVisibility(View.VISIBLE);
         } else {
             // Full name is not available, show the email in the primary TextView.
-            accountTextPrimary.setText(profileData.getAccountName());
+            accountTextPrimary.setText(profileData.getAccountEmail());
             accountTextSecondary.setVisibility(View.GONE);
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
index 9d31183..ea34073 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
@@ -400,7 +400,7 @@
 
     // ProfileDataCache.Observer implementation:
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         updateAccountsList();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
index 419ae9b..caf5e33 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -253,7 +253,7 @@
 
     // ProfileDataCache.Observer implementation.
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         update();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java
index 9091f47..3e1e3c0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java
@@ -184,7 +184,7 @@
      * {@link ProfileDataCache.Observer} implementation.
      */
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         update();
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
index f28dd80..38201ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
@@ -213,7 +213,7 @@
 
     // ProfileDataCache.Observer implementation.
     @Override
-    public void onProfileDataUpdated(String accountId) {
+    public void onProfileDataUpdated(String accountEmail) {
         update();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java
index 682c0d6..0607cc2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandler.java
@@ -12,13 +12,11 @@
 import org.chromium.base.Callback;
 import org.chromium.chrome.browser.omnibox.LocationBarDataProvider;
 import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
-import org.chromium.chrome.browser.ui.TabObscuringHandler;
 import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
 import org.chromium.components.browser_ui.widget.scrim.ScrimProperties;
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.util.ColorUtils;
-import org.chromium.ui.util.TokenHolder;
 
 /**
  * Handles showing and hiding a scrim when url bar focus changes.
@@ -26,10 +24,7 @@
 public class LocationBarFocusScrimHandler implements UrlFocusChangeListener {
     /** The params used to control how the scrim behaves when shown for the omnibox. */
     private PropertyModel mScrimModel;
-    private final TabObscuringHandler mTabObscuringHandler;
     private final ScrimCoordinator mScrimCoordinator;
-    /** A token held while the toolbar/omnibox is obscuring all visible tabs. */
-    private int mTabObscuringToken = TokenHolder.INVALID_TOKEN;
 
     /** Whether the scrim was shown on focus. */
     private boolean mScrimShown;
@@ -43,7 +38,7 @@
     /**
      *
      * @param scrimCoordinator Coordinator responsible for showing and hiding the scrim view.
-     * @param tabObscuringHandler Handler used to obscure/unobscure tabs when the scrim is
+     * @param visibilityChangeCallback Callback used to obscure/unobscure tabs when the scrim is
      *         shown/hidden.
      * @param context Context for retrieving resources.
      * @param locationBarDataProvider Provider of location bar data, e.g. the NTP state.
@@ -51,11 +46,10 @@
      * @param scrimTarget View that the scrim should be anchored to.
      */
     public LocationBarFocusScrimHandler(ScrimCoordinator scrimCoordinator,
-            TabObscuringHandler tabObscuringHandler, Context context,
+            Callback<Boolean> visibilityChangeCallback, Context context,
             LocationBarDataProvider locationBarDataProvider, Runnable clickDelegate,
             View scrimTarget) {
         mScrimCoordinator = scrimCoordinator;
-        mTabObscuringHandler = tabObscuringHandler;
         mLocationBarDataProvider = locationBarDataProvider;
         mClickDelegate = clickDelegate;
         mContext = context;
@@ -65,23 +59,6 @@
                 resources.getDimensionPixelSize(org.chromium.chrome.R.dimen.tab_strip_height);
         mLightScrimColor = ApiCompatibilityUtils.getColor(resources,
                 org.chromium.chrome.R.color.omnibox_focused_fading_background_color_light);
-
-        Callback<Boolean> visibilityChangeCallback = (visible) -> {
-            if (visible) {
-                // It's possible for the scrim to unfocus and refocus without the
-                // visibility actually changing. In this case we have to make sure we
-                // unregister the previous token before acquiring a new one.
-                int oldToken = mTabObscuringToken;
-                mTabObscuringToken = mTabObscuringHandler.obscureAllTabs();
-                if (oldToken != TokenHolder.INVALID_TOKEN) {
-                    mTabObscuringHandler.unobscureAllTabs(oldToken);
-                }
-            } else {
-                mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken);
-                mTabObscuringToken = TokenHolder.INVALID_TOKEN;
-            }
-        };
-
         mScrimModel = new PropertyModel.Builder(ScrimProperties.ALL_KEYS)
                               .with(ScrimProperties.ANCHOR_VIEW, scrimTarget)
                               .with(ScrimProperties.SHOW_IN_FRONT_OF_ANCHOR_VIEW, true)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
index 55cc509..2d53db6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
@@ -130,10 +130,10 @@
 
     @Override
     public boolean hasTab() {
-        // TODO(https://crbug.com/1147131): Remove the isInitialized() and isDestroyed checks when
-        // we no longer wait for TAB_CLOSED events to remove this tab.  Otherwise there is a chance
-        // we use this tab after {@link Tab#destroy()} is called.
-        return mTab != null && mTab.isInitialized() && !mTab.isDestroyed();
+        // TODO(dtrainor, tedchoc): Remove the isInitialized() check when we no longer wait for
+        // TAB_CLOSED events to remove this tab.  Otherwise there is a chance we use this tab after
+        // {@link ChromeTab#destroy()} is called.
+        return mTab != null && mTab.isInitialized();
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 85323e1..3c65b9a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -246,6 +246,32 @@
     private OneshotSupplier<IntentMetadata> mIntentMetadataOneshotSupplier;
     private OneshotSupplier<Boolean> mPromoShownOneshotSupplier;
 
+    private static class TabObscuringCallback implements Callback<Boolean> {
+        private final TabObscuringHandler mTabObscuringHandler;
+        /** A token held while the toolbar/omnibox is obscuring all visible tabs. */
+        private int mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+        public TabObscuringCallback(TabObscuringHandler handler) {
+            mTabObscuringHandler = handler;
+        }
+
+        @Override
+        public void onResult(Boolean visible) {
+            if (visible) {
+                // It's possible for the scrim to unfocus and refocus without the
+                // visibility actually changing. In this case we have to make sure we
+                // unregister the previous token before acquiring a new one.
+                int oldToken = mTabObscuringToken;
+                mTabObscuringToken = mTabObscuringHandler.obscureAllTabs();
+                if (oldToken != TokenHolder.INVALID_TOKEN) {
+                    mTabObscuringHandler.unobscureAllTabs(oldToken);
+                }
+            } else {
+                mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken);
+                mTabObscuringToken = TokenHolder.INVALID_TOKEN;
+            }
+        }
+    };
+
     /**
      * Creates a ToolbarManager object.
      *
@@ -437,9 +463,9 @@
         Runnable clickDelegate =
                 () -> setUrlBarFocus(false, OmniboxFocusReason.UNFOCUS);
         View scrimTarget = mCompositorViewHolder;
-        mLocationBarFocusHandler =
-                new LocationBarFocusScrimHandler(scrimCoordinator, tabObscuringHandler,
-                        /* context= */ activity, mLocationBarModel, clickDelegate, scrimTarget);
+        mLocationBarFocusHandler = new LocationBarFocusScrimHandler(scrimCoordinator,
+                new TabObscuringCallback(tabObscuringHandler), /* context= */ activity,
+                mLocationBarModel, clickDelegate, scrimTarget);
         if (mLocationBar.getFakeboxDelegate() != null) {
             mLocationBar.getFakeboxDelegate().addUrlFocusChangeListener(mLocationBarFocusHandler);
         }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/CopylessPasteTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/CopylessPasteTest.java
index d2e0260..279eb8d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/CopylessPasteTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/CopylessPasteTest.java
@@ -15,6 +15,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
@@ -71,6 +72,7 @@
     @After
     public void tearDown() throws Exception {
         AppIndexingUtil.setCallbackForTesting(null);
+        ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity());
     }
 
     private static class CopylessHelper extends CallbackHelper {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/MainActivityWithURLTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/MainActivityWithURLTest.java
index 723653c..cee2800 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/MainActivityWithURLTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/MainActivityWithURLTest.java
@@ -8,11 +8,13 @@
 
 import androidx.test.filters.SmallTest;
 
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
@@ -34,6 +36,11 @@
     @Rule
     public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
 
+    @After
+    public void tearDown() throws Exception {
+        ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity());
+    }
+
     /**
      * Verify launch the activity with URL.
      */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java
index 556cc41..7f88227 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java
@@ -11,11 +11,8 @@
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
-import static org.hamcrest.CoreMatchers.allOf;
 import static org.junit.Assert.assertEquals;
 
-import static org.chromium.chrome.test.util.ViewUtils.onViewWaiting;
-
 import android.support.test.InstrumentationRegistry;
 
 import androidx.test.filters.MediumTest;
@@ -91,7 +88,7 @@
     @MediumTest
     public void testPromoNotShownAfterBeingDismissed() {
         mBookmarkTestRule.showBookmarkManager(mActivityTestRule.getActivity());
-        onViewWaiting(allOf(withId(R.id.signin_promo_view_container), isDisplayed()));
+        onView(withId(R.id.signin_promo_view_container)).check(matches(isDisplayed()));
         onView(withId(R.id.signin_promo_close_button)).perform(click());
         onView(withId(R.id.signin_promo_view_container)).check(doesNotExist());
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
index 1a061de..0f80f83 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
@@ -204,9 +204,8 @@
     }
 
     @After
-    public void tearDown() throws Exception {
+    public void tearDown() {
         if (mTestServer != null) mTestServer.stopAndDestroyServer();
-        if (mBookmarkActivity != null) ApplicationTestUtils.finishActivity(mBookmarkActivity);
     }
 
     @AfterClass
@@ -284,7 +283,7 @@
         // Click the star button again to launch the edit activity.
         MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(),
                 mActivityTestRule.getActivity(), R.id.bookmark_this_page_id);
-        waitForEditActivity().finish();
+        waitForEditActivity();
     }
 
     @Test
@@ -315,9 +314,8 @@
             currentSnackbar.getController().onAction(null);
         });
 
-        BookmarkEditActivity activity = waitForEditActivity();
+        waitForEditActivity();
         SnackbarManager.setDurationForTesting(0);
-        activity.finish();
     }
 
     @Test
@@ -1703,13 +1701,12 @@
         RecyclerViewTestUtils.waitForStableRecyclerView(mItemsContainer);
     }
 
-    private BookmarkEditActivity waitForEditActivity() {
+    private void waitForEditActivity() {
         CriteriaHelper.pollUiThread(() -> {
             Criteria.checkThat(ApplicationStatus.getLastTrackedFocusedActivity(),
                     IsInstanceOf.instanceOf(BookmarkEditActivity.class));
         });
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-        return (BookmarkEditActivity) ApplicationStatus.getLastTrackedFocusedActivity();
     }
 
     private ChromeTabbedActivity waitForTabbedActivity() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java
index c6d9b533..6fc157e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java
@@ -17,7 +17,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnit;
@@ -45,18 +44,14 @@
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 public class ClearBrowsingDataFragmentBasicTest {
+    @Rule
     public final ChromeTabbedActivityTestRule mActivityTestRule =
             new ChromeTabbedActivityTestRule();
+    @Rule
     public final SettingsActivityTestRule<ClearBrowsingDataFragmentBasic>
             mSettingsActivityTestRule =
                     new SettingsActivityTestRule<>(ClearBrowsingDataFragmentBasic.class);
 
-    // SettingsActivity has to be finished before the outer CTA can be finished or trying to finish
-    // CTA won't work.
-    @Rule
-    public final RuleChain mRuleChain =
-            RuleChain.outerRule(mActivityTestRule).around(mSettingsActivityTestRule);
-
     @Rule
     public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
index 96b2323a..8101eec 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -707,7 +707,7 @@
         IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW);
         filter.addDataScheme(Uri.parse(mTestServer.getURL("/")).getScheme());
         final ActivityMonitor monitor =
-                InstrumentationRegistry.getInstrumentation().addMonitor(filter, null, true);
+                InstrumentationRegistry.getInstrumentation().addMonitor(filter, null, false);
         openAppMenuAndAssertMenuShown();
         PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
             MenuItem item =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestRule.java
index e832ecf..ff48c21 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestRule.java
@@ -4,20 +4,29 @@
 
 package org.chromium.chrome.browser.customtabs;
 
+import android.app.Activity;
 import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
 
-import androidx.annotation.NonNull;
-
+import org.hamcrest.Matchers;
 import org.junit.Assert;
 
+import org.chromium.base.ApplicationStatus;
 import org.chromium.base.FeatureList;
+import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.base.test.util.Criteria;
+import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.ScalableTimeout;
+import org.chromium.chrome.browser.DeferredStartupHandler;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabTestUtils;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 
 import java.util.Collections;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Custom ActivityTestRule for all instrumentation tests that require a {@link CustomTabActivity}.
@@ -45,13 +54,29 @@
     }
 
     @Override
-    public void launchActivity(@NonNull Intent intent) {
+    public void startActivityCompletely(Intent intent) {
         if (!FeatureList.hasTestFeatures()) {
             FeatureList.setTestFeatures(
                     Collections.singletonMap(ChromeFeatureList.SHARE_BY_DEFAULT_IN_CCT, true));
         }
         putCustomTabIdInIntent(intent);
-        super.launchActivity(intent);
+        int currentIntentId = getCustomTabIdFromIntent(intent);
+
+        Activity activity = InstrumentationRegistry.getInstrumentation().startActivitySync(intent);
+        Assert.assertNotNull("Main activity did not start", activity);
+        CriteriaHelper.pollUiThread(() -> {
+            for (Activity runningActivity : ApplicationStatus.getRunningActivities()) {
+                if (runningActivity instanceof CustomTabActivity) {
+                    CustomTabActivity customTabActivity = (CustomTabActivity) runningActivity;
+                    final int customTabIdInActivity =
+                            getCustomTabIdFromIntent(customTabActivity.getIntent());
+                    if (currentIntentId != customTabIdInActivity) continue;
+                    setActivity(customTabActivity);
+                    return true;
+                }
+            }
+            return false;
+        });
     }
 
     /**
@@ -59,8 +84,33 @@
      * initialized.
      */
     public void startCustomTabActivityWithIntent(Intent intent) {
+        DeferredStartupHandler.setExpectingActivityStartupForTesting();
         startActivityCompletely(intent);
+        waitForActivityNativeInitializationComplete();
+        CriteriaHelper.pollUiThread(() -> {
+            Criteria.checkThat(getActivity().getActivityTab(), Matchers.notNullValue());
+        });
         final Tab tab = getActivity().getActivityTab();
+        final CallbackHelper pageLoadFinishedHelper = new CallbackHelper();
+        tab.addObserver(new EmptyTabObserver() {
+            @Override
+            public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
+                pageLoadFinishedHelper.notifyCalled();
+            }
+        });
+        try {
+            if (tab.isLoading()) {
+                pageLoadFinishedHelper.waitForCallback(
+                        0, 1, LONG_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            }
+        } catch (TimeoutException e) {
+            Assert.fail();
+        }
+        Assert.assertTrue("Deferred startup never completed",
+                DeferredStartupHandler.waitForDeferredStartupCompleteForTesting(
+                        STARTUP_TIMEOUT_MS));
+        Assert.assertNotNull(tab);
+        Assert.assertNotNull(tab.getView());
         Assert.assertTrue(TabTestUtils.isCustomTab(tab));
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabFromChromeExternalNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabFromChromeExternalNavigationTest.java
index 1216b15..576b546 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabFromChromeExternalNavigationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabFromChromeExternalNavigationTest.java
@@ -111,7 +111,8 @@
     @Test
     @Feature("CustomTabFromChrome")
     @LargeTest
-    public void testIntentWithRedirectToApp() {
+    public void
+    testIntentWithRedirectToApp() {
         final String redirectUrl = "https://maps.google.com/maps?q=1600+amphitheatre+parkway";
         final String initialUrl =
                 mServerRule.getServer().getURL("/chrome/test/data/android/redirect/js_redirect.html"
@@ -122,7 +123,7 @@
                         + Base64.encodeToString(
                                 ApiCompatibilityUtils.getBytesUtf8(redirectUrl), Base64.URL_SAFE));
 
-        mActivityRule.launchActivity(getCustomTabFromChromeIntent(initialUrl, true));
+        mActivityRule.startActivityCompletely(getCustomTabFromChromeIntent(initialUrl, true));
         mActivityRule.waitForActivityNativeInitializationComplete();
 
         final AtomicReference<InterceptNavigationDelegateImpl> navigationDelegate =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/display_cutout/DisplayCutoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/display_cutout/DisplayCutoutTest.java
index af9727f..0899713 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/display_cutout/DisplayCutoutTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/display_cutout/DisplayCutoutTest.java
@@ -9,10 +9,12 @@
 
 import androidx.test.filters.LargeTest;
 
+import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
@@ -35,6 +37,11 @@
     public DisplayCutoutTestRule mTestRule =
             new DisplayCutoutTestRule<ChromeActivity>(ChromeActivity.class);
 
+    @After
+    public void tearDown() throws Exception {
+        ApplicationTestUtils.finishActivity(mTestRule.getActivity());
+    }
+
     /**
      * Test that no safe area is applied when we have viewport fit auto
      */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
index 7ad24349..c505f0f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
@@ -13,7 +13,6 @@
 import android.net.Uri;
 import android.os.SystemClock;
 import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.lifecycle.Stage;
 import android.text.TextUtils;
 import android.util.Base64;
 
@@ -29,13 +28,10 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.ScalableTimeout;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
@@ -428,26 +424,20 @@
 
     @Test
     @SmallTest
-    public void testRedirectionFromIntent() throws Exception {
+    public void testRedirectionFromIntent() {
         // Test cold-start.
         Intent intent = new Intent(Intent.ACTION_VIEW,
                 Uri.parse(mTestServer.getURL(NAVIGATION_FROM_JAVA_REDIRECTION_PAGE)));
         Context targetContext = InstrumentationRegistry.getTargetContext();
         intent.setClassName(targetContext, ChromeLauncherActivity.class.getName());
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        InstrumentationRegistry.getInstrumentation().startActivitySync(intent);
 
-        ChromeTabbedActivity activity =
-                ApplicationTestUtils.waitForActivityWithClass(ChromeTabbedActivity.class,
-                        Stage.CREATED, () -> targetContext.startActivity(intent));
-        mActivityTestRule.setActivity(activity);
-
-        CriteriaHelper.pollUiThread(() -> {
-            Criteria.checkThat(mActivityMonitor.getHits(), Matchers.is(1));
-        }, ScalableTimeout.scaleTimeout(10000L), CriteriaHelper.DEFAULT_POLLING_INTERVAL);
-        ApplicationTestUtils.waitForActivityState(activity, Stage.STOPPED);
+        CriteriaHelper.pollUiThread(
+                () -> Criteria.checkThat(mActivityMonitor.getHits(), Matchers.is(1)));
 
         // Test warm start.
-        mActivityTestRule.resumeMainActivityFromLauncher();
+        mActivityTestRule.startMainActivityOnBlankPage();
         targetContext.startActivity(intent);
 
         CriteriaHelper.pollUiThread(
@@ -499,6 +489,7 @@
         String originalUrl = mTestServer.getURL(NAVIGATION_TO_FILE_SCHEME_FROM_INTENT_URI);
         loadUrlAndWaitForIntentUrl(originalUrl, true, false, false, null, false, "null_scheme");
     }
+
     @Test
     @LargeTest
     public void testIntentURIWithEmptySchemeDoesNothing() throws TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java
index 3579486..7934a16 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java
@@ -16,7 +16,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ActivityState;
@@ -65,16 +64,12 @@
 
     private EmbeddedTestServer mTestServer;
 
+    @Rule
     public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
+    @Rule
     public SettingsActivityTestRule<HomepageSettings> mSettingsActivityTestRule =
             new SettingsActivityTestRule<>(HomepageSettings.class);
 
-    // SettingsActivity has to be finished before the outer CTA can be finished or trying to finish
-    // CTA won't work.
-    @Rule
-    public final RuleChain mRuleChain =
-            RuleChain.outerRule(mActivityTestRule).around(mSettingsActivityTestRule);
-
     @Rule
     public HomepageTestRule mHomepageTestRule = new HomepageTestRule();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/settings/HomepageSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/settings/HomepageSettingsFragmentTest.java
index a273db8..703521d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/settings/HomepageSettingsFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/settings/HomepageSettingsFragmentTest.java
@@ -14,7 +14,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UserActionTester;
@@ -105,8 +104,9 @@
         Assert.assertNotNull("Custom URI radio button is null.", mCustomUriRadioButton);
     }
 
-    private void finishSettingsActivity() throws Exception {
-        ApplicationTestUtils.finishActivity(mTestRule.getActivity());
+    private void finishSettingsActivity() {
+        mTestRule.getActivity().finish();
+        mTestRule.waitTillActivityIsDestroyed();
     }
 
     @Test
@@ -394,7 +394,7 @@
     @Test
     @SmallTest
     @Feature({"Homepage"})
-    public void testCheckRadioButtons() throws Exception {
+    public void testCheckRadioButtons() {
         mHomepageTestRule.useCustomizedHomepageForTest(TEST_URL_FOO);
         launchSettingsActivity();
         LocationChangedCounter counter = new LocationChangedCounter();
@@ -446,7 +446,7 @@
     @Test
     @SmallTest
     @Feature({"Homepage"})
-    public void testChangeCustomized() throws Exception {
+    public void testChangeCustomized() {
         mHomepageTestRule.useChromeNTPForTest();
         launchSettingsActivity();
         LocationChangedCounter actionCounter = new LocationChangedCounter();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/metrics/StartupLoadingMetricsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/metrics/StartupLoadingMetricsTest.java
index 98254843..5c0af74 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/metrics/StartupLoadingMetricsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/metrics/StartupLoadingMetricsTest.java
@@ -218,7 +218,7 @@
             // mSlowPage will hang for 2 seconds before sending a response. It should be enough to
             // put Chrome in background before the page is committed.
             mTabbedActivityTestRule.prepareUrlIntent(intent, mSlowPage);
-            mTabbedActivityTestRule.launchActivity(intent);
+            mTabbedActivityTestRule.startActivityCompletely(intent);
 
             // Put Chrome in background before the page is committed.
             ChromeApplicationTestUtils.fireHomeScreenIntent(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
index 8c2cbab..cdbf6b5 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
@@ -250,7 +250,6 @@
 
         // Offline indicator should not be shown.
         checkOfflineIndicatorVisibility(downloadActivity, false);
-        downloadActivity.finish();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiTest.java
index 012b466..4485b23 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiTest.java
@@ -13,8 +13,6 @@
 
 import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.ASSISTANT_VOICE_SEARCH_ENABLED;
 
-import android.support.test.runner.lifecycle.Stage;
-
 import androidx.test.filters.MediumTest;
 
 import org.junit.After;
@@ -28,7 +26,6 @@
 import org.mockito.junit.MockitoRule;
 
 import org.chromium.base.Callback;
-import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
@@ -36,7 +33,6 @@
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
-import org.chromium.chrome.browser.settings.SettingsActivity;
 import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
@@ -134,19 +130,16 @@
     public void testDialogInteractivity_LearnMoreButton() {
         showConsentUi();
 
-        SettingsActivity activity = ApplicationTestUtils.waitForActivityWithClass(
-                SettingsActivity.class, Stage.RESUMED, () -> {
-                    ClickUtils.clickButton(
-                            mAssistantVoiceSearchConsentUi.getContentView().findViewById(
-                                    R.id.avs_consent_ui_learn_more));
-                    mBottomSheetTestSupport.endAllAnimations();
-                });
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            ClickUtils.clickButton(mAssistantVoiceSearchConsentUi.getContentView().findViewById(
+                    R.id.avs_consent_ui_learn_more));
+            mBottomSheetTestSupport.endAllAnimations();
+        });
 
         onView(withText(mActivityTestRule.getActivity().getResources().getString(
                        R.string.avs_setting_category_title)))
                 .check(matches(isDisplayed()));
         Mockito.verify(mCallback, Mockito.times(0)).onResult(/* meaningless value */ true);
-        activity.finish();
     }
 
     @Test
@@ -163,4 +156,4 @@
         });
         Mockito.verify(mCallback, Mockito.timeout(1000)).onResult(false);
     }
-}
+}
\ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java
index bc91ea8..a7fd8a3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java
@@ -105,7 +105,7 @@
 
     private void loadUrlAndOpenPageInfo(String url) {
         mActivityTestRule.loadUrl(url);
-        onViewWaiting(allOf(withId(R.id.location_bar_status_icon), isDisplayed())).perform(click());
+        onView(withId(R.id.location_bar_status_icon)).perform(click());
     }
 
     private View getPageInfoView() {
@@ -184,6 +184,8 @@
         // Choose a fixed, "random" port to create stable screenshots.
         mTestServerRule.setServerPort(424242);
         mTestServerRule.setServerUsesHttps(true);
+
+        mActivityTestRule.startMainActivityOnBlankPage();
     }
 
     @After
@@ -207,7 +209,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowOnInsecureHttpWebsite() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         mTestServerRule.setServerUsesHttps(false);
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_HttpWebsite");
@@ -221,7 +222,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowOnSecureWebsite() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_SecureWebsite");
     }
@@ -235,7 +235,6 @@
     @DisabledTest(message = "https://crbug.com/1133770")
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowOnExpiredCertificateWebsite() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         mTestServerRule.setCertificateType(ServerCertificate.CERT_EXPIRED);
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_ExpiredCertWebsite");
@@ -249,7 +248,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testChromePage() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         loadUrlAndOpenPageInfo("chrome://version/");
         mRenderTestRule.render(getPageInfoView(), "PageInfo_InternalSite");
     }
@@ -263,7 +261,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowWithPermissions() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         mIsSystemLocationSettingEnabled = false;
         addSomePermissions(mTestServerRule.getServer().getURL("/"));
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
@@ -278,7 +275,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowWithCookieBlocking() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         setThirdPartyCookieBlocking(CookieControlsMode.BLOCK_THIRD_PARTY);
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_CookieBlocking");
@@ -292,7 +288,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowWithPermissionsAndCookieBlocking() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         addSomePermissions(mTestServerRule.getServer().getURL("/"));
         setThirdPartyCookieBlocking(CookieControlsMode.BLOCK_THIRD_PARTY);
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
@@ -307,7 +302,6 @@
     @Feature({"RenderTest"})
     @Features.DisableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowWithDefaultSettingPermissions() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         addDefaultSettingPermissions(mTestServerRule.getServer().getURL("/"));
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_DefaultSettingPermissions");
@@ -321,7 +315,6 @@
     @Feature({"RenderTest"})
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowOnSecureWebsiteV2() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         mRenderTestRule.render(getPageInfoView(), "PageInfo_SecureWebsiteV2");
     }
@@ -350,7 +343,6 @@
     @Feature({"RenderTest"})
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowConnectionInfoSubpage() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         onView(withId(R.id.page_info_connection_row)).perform(click());
         mRenderTestRule.render(getPageInfoView(), "PageInfo_ConnectionInfoSubpage");
@@ -364,7 +356,6 @@
     @Feature({"RenderTest"})
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowPermissionsSubpage() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         addSomePermissions(mTestServerRule.getServer().getURL("/"));
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         onView(withId(R.id.page_info_permissions_row)).perform(click());
@@ -379,7 +370,6 @@
     @Feature({"RenderTest"})
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testShowCookiesSubpage() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         setThirdPartyCookieBlocking(CookieControlsMode.BLOCK_THIRD_PARTY);
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         onView(withId(R.id.page_info_cookies_row)).perform(click());
@@ -394,7 +384,6 @@
     @MediumTest
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testNoPermissionsSubpage() throws IOException {
-        mActivityTestRule.startMainActivityOnBlankPage();
         loadUrlAndOpenPageInfo(mTestServerRule.getServer().getURL(sSimpleHtml));
         View dialog = (View) getPageInfoView().getParent();
         onView(withId(R.id.page_info_permissions_row))
@@ -409,7 +398,6 @@
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     @FlakyTest(message = "https://crbug.com/1147236")
     public void testClearCookiesOnSubpage() throws Exception {
-        mActivityTestRule.startMainActivityOnBlankPage();
         mActivityTestRule.loadUrl(mTestServerRule.getServer().getURL(sSiteDataHtml));
         // Create cookies.
         expectHasCookies(false);
@@ -435,7 +423,6 @@
     @MediumTest
     @Features.EnableFeatures(PageInfoFeatureList.PAGE_INFO_V2)
     public void testResetPermissionsOnSubpage() throws Exception {
-        mActivityTestRule.startMainActivityOnBlankPage();
         mActivityTestRule.loadUrl(mTestServerRule.getServer().getURL(sSiteDataHtml));
         String url = mTestServerRule.getServer().getURL("/");
         // Create permissions.
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 2c90ae8..3b5375a 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
@@ -1245,7 +1245,6 @@
         @Override
         public void create(PaymentAppFactoryDelegate delegate) {
             Runnable createApp = () -> {
-                if (delegate.getParams().hasClosed()) return;
                 boolean canMakePayment =
                         delegate.getParams().getMethodData().containsKey(mAppMethodName);
                 delegate.onCanMakePaymentCalculated(canMakePayment);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java
index 69e1dbf1..be2c00c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java
@@ -21,7 +21,6 @@
 import static org.chromium.chrome.browser.toolbar.top.ButtonHighlightMatcher.withHighlight;
 import static org.chromium.chrome.test.util.ViewUtils.waitForView;
 
-import android.os.Looper;
 import android.support.test.InstrumentationRegistry;
 import android.view.View;
 
@@ -80,7 +79,6 @@
 
     @Before
     public void setUp() {
-        Looper.prepare();
         // Pretend the feature engagement feature is already initialized. Otherwise
         // UserEducationHelper#requestShowIPH() calls get dropped during test.
         doAnswer(invocation -> {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
index 947221f..aa1888d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -15,7 +15,6 @@
 import static org.mockito.Mockito.verify;
 
 import android.app.Activity;
-import android.support.test.InstrumentationRegistry;
 import android.text.TextUtils;
 import android.view.View;
 
@@ -102,7 +101,7 @@
     private final SyncTestRule mSyncTestRule = new SyncTestRule();
 
     private final SettingsActivityTestRule<MainSettings> mSettingsActivityTestRule =
-            new SettingsActivityTestRule<>(MainSettings.class);
+            new SettingsActivityTestRule<>(MainSettings.class, true);
 
     // SettingsActivity needs to be initialized and destroyed with the mock
     // signin environment setup in SyncTestRule
@@ -134,7 +133,6 @@
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
-        InstrumentationRegistry.getInstrumentation().setInTouchMode(true);
         PasswordCheckFactory.setPasswordCheckForTesting(mPasswordCheck);
         SigninActivityLauncherImpl.setLauncherForTest(mMockSigninActivityLauncherImpl);
         DeveloperSettings.setIsEnabledForTests(true);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java
index 3f427946..516bc1db0 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java
@@ -22,6 +22,7 @@
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.test.filters.MediumTest;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -33,6 +34,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.test.params.ParameterAnnotations;
 import org.chromium.base.test.params.ParameterizedRunner;
+import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.CriteriaHelper;
@@ -118,6 +120,11 @@
         mActivityTestRule.startMainActivityOnBlankPage();
     }
 
+    @After
+    public void tearDown() throws Exception {
+        ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity());
+    }
+
     @AfterClass
     public static void tearDownAfterActivityDestroyed() {
         ChromeNightModeTestUtils.tearDownNightModeAfterChromeActivityDestroyed();
@@ -179,7 +186,7 @@
             throws IOException {
         mAccountManagerTestRule.addAccount(PROFILE_DATA1);
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws a connection error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -201,7 +208,7 @@
     public void testSigninGeneralErrorView(boolean nightModeEnabled) throws IOException {
         mAccountManagerTestRule.addAccount(PROFILE_DATA1);
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws a connection error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -223,7 +230,7 @@
     public void testSigninAuthErrorView(boolean nightModeEnabled) throws IOException {
         mAccountManagerTestRule.addAccount(PROFILE_DATA1);
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws an authentication error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -247,7 +254,7 @@
             throws IOException {
         mAccountManagerTestRule.addAccount(PROFILE_DATA1);
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws an auth error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -266,7 +273,7 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .updateCredentials(eq(PROFILE_DATA1.getAccountName()), any());
+                .updateCredentials(eq(PROFILE_DATA1.getAccountEmail()), any());
         onView(withText(R.string.auth_error_card_button)).perform(click());
         mRenderTestRule.render(
                 mCoordinator.getBottomSheetViewForTesting(), "collapsed_sheet_with_account");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
index b2e7a1d..b9da398 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
@@ -50,12 +50,15 @@
 import org.chromium.base.test.util.MetricsUtils;
 import org.chromium.base.test.util.MetricsUtils.HistogramDelta;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncher;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.incognito.interstitial.IncognitoInterstitialDelegate;
 import org.chromium.chrome.browser.signin.account_picker.AccountConsistencyPromoAction;
 import org.chromium.chrome.browser.signin.account_picker.AccountPickerBottomSheetCoordinator;
 import org.chromium.chrome.browser.signin.account_picker.AccountPickerDelegate;
+import org.chromium.chrome.browser.tabmodel.TabCreator;
+import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule;
@@ -116,6 +119,15 @@
             new AccountManagerTestRule(mFakeProfileDataSource);
 
     @Mock
+    private TabModel mTabModelMock;
+
+    @Mock
+    private TabCreator mTabCreatorMock;
+
+    @Mock
+    private HelpAndFeedbackLauncher mHelpAndFeedbackLauncherMock;
+
+    @Mock
     private AccountPickerDelegate mAccountPickerDelegateMock;
 
     @Mock
@@ -148,14 +160,14 @@
     @MediumTest
     public void testExpandedSheet() {
         buildAndShowExpandedBottomSheet();
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed()));
-        onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed()));
-        onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed()));
+        onView(withText(PROFILE_DATA2.getAccountEmail())).check(matches(isDisplayed()));
+        onVisibleView(withText(R.string.signin_add_account_to_device))
+                .check(matches(isDisplayed()));
         onView(withText(R.string.signin_incognito_button)).check(matches(isDisplayed()));
 
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(not(isDisplayed())));
     }
 
@@ -164,13 +176,13 @@
     public void testExpandedSheetWithIncognitoModeDisabled() {
         when(mAccountPickerDelegateMock.isIncognitoModeEnabled()).thenReturn(false);
         buildAndShowExpandedBottomSheet();
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed()));
-        onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed()));
-        onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed()));
+        onView(withText(PROFILE_DATA2.getAccountEmail())).check(matches(isDisplayed()));
+        onVisibleView(withText(R.string.signin_add_account_to_device))
+                .check(matches(isDisplayed()));
 
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
         onView(withText(R.string.signin_incognito_button)).check(doesNotExist());
     }
 
@@ -198,7 +210,7 @@
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.DISMISSED_BACK);
         buildAndShowCollapsedBottomSheet();
-        onView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         BottomSheetController controller = getBottomSheetController();
         Assert.assertTrue(controller.isSheetOpen());
         Assert.assertEquals(2, mFakeProfileDataSource.getNumberOfObservers());
@@ -216,7 +228,7 @@
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.DISMISSED_BUTTON);
         buildAndShowCollapsedBottomSheet();
-        onView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         BottomSheetController controller = getBottomSheetController();
         Assert.assertTrue(controller.isSheetOpen());
         Assert.assertEquals(2, mFakeProfileDataSource.getNumberOfObservers());
@@ -242,25 +254,25 @@
         onView(withText(R.string.signin_incognito_button)).perform(click());
         onView(isRoot()).perform(pressBack());
 
-        onView(withText(R.string.signin_account_picker_dialog_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.signin_account_picker_bottom_sheet_subtitle))
+        onVisibleView(withText(R.string.signin_account_picker_dialog_title))
                 .check(matches(isDisplayed()));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(isDisplayed()));
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onVisibleView(withText(R.string.signin_account_picker_bottom_sheet_subtitle))
+                .check(matches(isDisplayed()));
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed()));
-        onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed()));
-        onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed()));
+        onView(withText(PROFILE_DATA2.getAccountEmail())).check(matches(isDisplayed()));
+        onVisibleView(withText(R.string.signin_add_account_to_device))
+                .check(matches(isDisplayed()));
 
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
     }
 
     @Test
     @MediumTest
     public void testAccountDisappearedOnCollapsedSheet() {
         buildAndShowCollapsedBottomSheet();
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountName());
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountName());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountEmail());
         CriteriaHelper.pollUiThread(() -> {
             return !mCoordinator.getBottomSheetViewForTesting()
                             .findViewById(R.id.account_picker_selected_account)
@@ -273,8 +285,8 @@
     @MediumTest
     public void testAccountDisappearedOnExpandedSheet() {
         buildAndShowExpandedBottomSheet();
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountName());
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountName());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountEmail());
         CriteriaHelper.pollUiThread(() -> {
             return !mCoordinator.getBottomSheetViewForTesting()
                             .findViewById(R.id.account_picker_account_list)
@@ -286,8 +298,8 @@
     @Test
     @MediumTest
     public void testAccountReappearedOnCollapsedSheet() {
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountName());
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountName());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountEmail());
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mCoordinator = new AccountPickerBottomSheetCoordinator(sActivityTestRule.getActivity(),
                     getBottomSheetController(), mAccountPickerDelegateMock,
@@ -295,7 +307,7 @@
         });
         checkZeroAccountBottomSheet();
 
-        mAccountManagerTestRule.addAccount(PROFILE_DATA1.getAccountName());
+        mAccountManagerTestRule.addAccount(PROFILE_DATA1.getAccountEmail());
         checkCollapsedAccountList(PROFILE_DATA1);
     }
 
@@ -304,7 +316,7 @@
     public void testOtherAccountsChangeOnCollapsedSheet() {
         buildAndShowCollapsedBottomSheet();
         checkCollapsedAccountList(PROFILE_DATA1);
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountName());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountEmail());
         checkCollapsedAccountList(PROFILE_DATA1);
     }
 
@@ -312,7 +324,7 @@
     @MediumTest
     public void testSelectedAccountChangeOnCollapsedSheet() {
         buildAndShowCollapsedBottomSheet();
-        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountName());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountEmail());
         checkCollapsedAccountList(PROFILE_DATA2);
     }
 
@@ -323,16 +335,15 @@
         String newFullName = "New Full Name1";
         String newGivenName = "New Given Name1";
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mFakeProfileDataSource.setProfileData(PROFILE_DATA1.getAccountName(),
+            mFakeProfileDataSource.setProfileData(PROFILE_DATA1.getAccountEmail(),
                     new ProfileDataSource.ProfileData(
-                            PROFILE_DATA1.getAccountName(), null, newFullName, newGivenName));
+                            PROFILE_DATA1.getAccountEmail(), null, newFullName, newGivenName));
         });
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed()));
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).check(matches(isDisplayed()));
         onVisibleView(withText(newFullName)).check(matches(isDisplayed()));
         // Check that profile data update when the bottom sheet is expanded won't
         // toggle out any hidden part.
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
     }
 
     @Test
@@ -353,7 +364,7 @@
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT);
         buildAndShowExpandedBottomSheet();
-        onView(withText(PROFILE_DATA2.getAccountName())).perform(click());
+        onView(withText(PROFILE_DATA2.getAccountEmail())).perform(click());
         CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById(
                 R.id.account_picker_selected_account)::isShown);
         clickContinueButtonAndCheckSignInInProgressSheet();
@@ -372,14 +383,14 @@
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT);
         buildAndShowExpandedBottomSheet();
-        onView(withText(R.string.signin_add_account_to_device)).perform(click());
+        onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
         verify(mAccountPickerDelegateMock).addAccount(callbackArgumentCaptor.capture());
         ProfileDataSource.ProfileData profileDataAdded = new ProfileDataSource.ProfileData(
                 /* accountName= */ "test.account3@gmail.com", /* avatar= */ null,
                 /* fullName= */ null, /* givenName= */ null);
         Callback<String> callback = callbackArgumentCaptor.getValue();
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> callback.onResult(profileDataAdded.getAccountName()));
+                () -> callback.onResult(profileDataAdded.getAccountEmail()));
         clickContinueButtonAndCheckSignInInProgressSheet();
         Assert.assertEquals(1, addAccountHistogram.getDelta());
         Assert.assertEquals(1, signedInWithAddedAccountHistogram.getDelta());
@@ -400,18 +411,17 @@
         })
                 .when(mAccountPickerDelegateMock)
                 .signIn(eq(mAccountManagerTestRule.toCoreAccountInfo(
-                                PROFILE_DATA1.getAccountName())),
+                                PROFILE_DATA1.getAccountEmail())),
                         any());
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
-        onView(withText(R.string.signin_account_picker_bottom_sheet_error_title))
+        onVisibleView(withText(R.string.signin_account_picker_bottom_sheet_error_title))
                 .check(matches(isDisplayed()));
         onView(withText(R.string.signin_account_picker_general_error_subtitle))
                 .check(matches(isDisplayed()));
         onView(withText(R.string.signin_account_picker_general_error_button))
                 .check(matches(isDisplayed()));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_signin_spinner_view)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(not(isDisplayed())));
@@ -425,7 +435,7 @@
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.AUTH_ERROR_SHOWN);
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws an auth error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -438,12 +448,12 @@
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
-        onView(withText(R.string.signin_account_picker_bottom_sheet_error_title))
+
+        onVisibleView(withText(R.string.signin_account_picker_bottom_sheet_error_title))
                 .check(matches(isDisplayed()));
         onView(withText(R.string.signin_account_picker_auth_error_subtitle))
                 .check(matches(isDisplayed()));
         onView(withText(R.string.auth_error_card_button)).check(matches(isDisplayed()));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_signin_spinner_view)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(not(isDisplayed())));
@@ -454,7 +464,7 @@
     @MediumTest
     public void testTryAgainButtonOnSignInGeneralErrorSheet() {
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws a connection error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -476,7 +486,7 @@
     @MediumTest
     public void testSigninAgainButtonOnSigninAuthErrorSheet() {
         CoreAccountInfo coreAccountInfo =
-                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountName());
+                mAccountManagerTestRule.toCoreAccountInfo(PROFILE_DATA1.getAccountEmail());
         // Throws an auth error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -495,7 +505,7 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .updateCredentials(eq(PROFILE_DATA1.getAccountName()), any());
+                .updateCredentials(eq(PROFILE_DATA1.getAccountEmail()), any());
         onView(withText(R.string.auth_error_card_button)).perform(click());
         checkCollapsedAccountList(PROFILE_DATA1);
     }
@@ -506,14 +516,14 @@
         MetricsUtils.HistogramDelta accountConsistencyHistogram = new HistogramDelta(
                 "Signin.AccountConsistencyPromoAction", AccountConsistencyPromoAction.ADD_ACCOUNT);
         buildAndShowExpandedBottomSheet();
-        onView(withText(R.string.signin_add_account_to_device)).perform(click());
+        onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
         verify(mAccountPickerDelegateMock).addAccount(callbackArgumentCaptor.capture());
         ProfileDataSource.ProfileData profileDataAdded = new ProfileDataSource.ProfileData(
                 /* accountName= */ "test.account3@gmail.com", /* avatar= */ null,
                 /* fullName= */ null, /* givenName= */ null);
         Callback<String> callback = callbackArgumentCaptor.getValue();
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> callback.onResult(profileDataAdded.getAccountName()));
+                () -> callback.onResult(profileDataAdded.getAccountEmail()));
         checkCollapsedAccountList(profileDataAdded);
         Assert.assertEquals(1, accountConsistencyHistogram.getDelta());
     }
@@ -522,7 +532,7 @@
     @MediumTest
     public void testSelectAnotherAccountOnExpandedSheet() {
         buildAndShowExpandedBottomSheet();
-        onView(withText(PROFILE_DATA2.getAccountName())).perform(click());
+        onView(withText(PROFILE_DATA2.getAccountEmail())).perform(click());
         checkCollapsedAccountList(PROFILE_DATA2);
     }
 
@@ -530,7 +540,7 @@
     @MediumTest
     public void testSelectTheSameAccountOnExpandedSheet() {
         buildAndShowExpandedBottomSheet();
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).perform(click());
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).perform(click());
         checkCollapsedAccountList(PROFILE_DATA1);
     }
 
@@ -570,11 +580,8 @@
         onView(withId(R.id.incognito_interstitial_learn_more)).check(matches(isDisplayed()));
         onView(withId(R.id.incognito_interstitial_continue_button)).check(matches(isDisplayed()));
 
-        onView(withId(R.id.account_picker_bottom_sheet_subtitle))
-                .check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
+        onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(not(isDisplayed())));
     }
 
@@ -609,18 +616,14 @@
         });
         onView(withText(R.string.signin_account_picker_bottom_sheet_signin_title))
                 .check(matches(isDisplayed()));
-        onView(withId(R.id.account_picker_bottom_sheet_subtitle))
-                .check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
-        onView(withId(R.id.account_picker_continue_as_button)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(not(isDisplayed())));
     }
 
     private void checkZeroAccountBottomSheet() {
-        onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(doesNotExist());
-        onVisibleView(withText(PROFILE_DATA2.getAccountName())).check(doesNotExist());
+        onVisibleView(withText(PROFILE_DATA1.getAccountEmail())).check(doesNotExist());
+        onVisibleView(withText(PROFILE_DATA2.getAccountEmail())).check(doesNotExist());
         onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed())));
         onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed())));
         onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click());
@@ -630,11 +633,11 @@
     private void checkCollapsedAccountList(ProfileDataSource.ProfileData profileData) {
         CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById(
                 R.id.account_picker_selected_account)::isShown);
-        onView(withText(R.string.signin_account_picker_dialog_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.signin_account_picker_bottom_sheet_subtitle))
+        onVisibleView(withText(R.string.signin_account_picker_dialog_title))
                 .check(matches(isDisplayed()));
-        onView(withId(R.id.account_picker_horizontal_divider)).check(matches(isDisplayed()));
-        onVisibleView(withText(profileData.getAccountName())).check(matches(isDisplayed()));
+        onVisibleView(withText(R.string.signin_account_picker_bottom_sheet_subtitle))
+                .check(matches(isDisplayed()));
+        onVisibleView(withText(profileData.getAccountEmail())).check(matches(isDisplayed()));
         if (profileData.getFullName() != null) {
             onVisibleView(withText(profileData.getFullName())).check(matches(isDisplayed()));
         }
@@ -642,7 +645,7 @@
         String continueAsText =
                 sActivityTestRule.getActivity().getString(R.string.signin_promo_continue_as,
                         profileData.getGivenName() != null ? profileData.getGivenName()
-                                                           : profileData.getAccountName());
+                                                           : profileData.getAccountEmail());
         onView(withText(continueAsText)).check(matches(isDisplayed()));
         onView(withId(R.id.account_picker_dismiss_button)).check(matches(isDisplayed()));
         onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed())));
@@ -651,15 +654,21 @@
     private void buildAndShowCollapsedBottomSheet() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mCoordinator = new AccountPickerBottomSheetCoordinator(sActivityTestRule.getActivity(),
-                    getBottomSheetController(), mAccountPickerDelegateMock,
-                    mIncognitoInterstitialDelegateMock);
+                    getBottomSheetController(), mAccountPickerDelegateMock, mTabModelMock,
+                    mTabCreatorMock, mHelpAndFeedbackLauncherMock);
         });
         CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById(
                 R.id.account_picker_selected_account)::isShown);
     }
 
     private void buildAndShowExpandedBottomSheet() {
-        buildAndShowCollapsedBottomSheet();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mCoordinator = new AccountPickerBottomSheetCoordinator(sActivityTestRule.getActivity(),
+                    getBottomSheetController(), mAccountPickerDelegateMock,
+                    mIncognitoInterstitialDelegateMock);
+        });
+        CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById(
+                R.id.account_picker_selected_account)::isShown);
         onView(withText(PROFILE_DATA1.getFullName())).perform(click());
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java
index 5383798..16095c4 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java
@@ -100,7 +100,7 @@
     @Test
     @SmallTest
     public void testLaunchActivity() {
-        startManageSpaceActivity().finish();
+        startManageSpaceActivity();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
index d0a1c47..b42cd0d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
@@ -18,7 +18,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
@@ -41,18 +40,14 @@
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 public class AccountManagementFragmentTest {
+    @Rule
     public final SettingsActivityTestRule<AccountManagementFragment> mSettingsActivityTestRule =
             new SettingsActivityTestRule<>(AccountManagementFragment.class);
 
+    @Rule
     public final ChromeTabbedActivityTestRule mActivityTestRule =
             new ChromeTabbedActivityTestRule();
 
-    // SettingsActivity has to be finished before the outer CTA can be finished or trying to finish
-    // CTA won't work.
-    @Rule
-    public final RuleChain mRuleChain =
-            RuleChain.outerRule(mActivityTestRule).around(mSettingsActivityTestRule);
-
     @Rule
     public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
index 9b38421..dc9d76a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
@@ -16,7 +16,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
@@ -52,17 +51,13 @@
     @Rule
     public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
 
+    @Rule
     public final ChromeTabbedActivityTestRule mActivityTestRule =
             new ChromeTabbedActivityTestRule();
 
-    public final SettingsActivityTestRule<GoogleServicesSettings> mSettingsActivityTestRule =
-            new SettingsActivityTestRule<>(GoogleServicesSettings.class);
-
-    // SettingsActivity has to be finished before the outer CTA can be finished or trying to finish
-    // CTA won't work.
     @Rule
-    public final RuleChain mRuleChain =
-            RuleChain.outerRule(mActivityTestRule).around(mSettingsActivityTestRule);
+    public final SettingsActivityTestRule<GoogleServicesSettings> mSettingsActivityTestRule =
+            new SettingsActivityTestRule<>(GoogleServicesSettings.class, true);
 
     @Before
     public void setUp() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java
index 2acd095..9c90fe6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java
@@ -90,7 +90,7 @@
     private final SyncTestRule mSyncTestRule = new SyncTestRule();
 
     private final SettingsActivityTestRule<ManageSyncSettings> mSettingsActivityTestRule =
-            new SettingsActivityTestRule<>(ManageSyncSettings.class);
+            new SettingsActivityTestRule<>(ManageSyncSettings.class, true);
 
     // SettingsActivity needs to be initialized and destroyed with the mock
     // signin environment setup in SyncTestRule
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
index 559a75f..76da0b0 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
@@ -62,7 +62,7 @@
 
     @Rule
     public final SettingsActivityTestRule<ManageSyncSettings> mSettingsActivityTestRule =
-            new SettingsActivityTestRule<>(ManageSyncSettings.class);
+            new SettingsActivityTestRule<>(ManageSyncSettings.class, true);
 
     @Rule
     public final ChromeRenderTestRule mRenderTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageFactoryTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageFactoryTest.java
index c715a63..2611d9a5 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageFactoryTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageFactoryTest.java
@@ -64,11 +64,9 @@
         LevelDBPersistedTabDataStorage.setSkipNativeAssertionsForTesting(true);
     }
 
-    @UiThreadTest
     @SmallTest
     @Test
     public void testFactoryMethod() {
-        Profile realProfile = Profile.getLastUsedRegularProfile();
         LevelDBPersistedTabDataStorageFactory factory = new LevelDBPersistedTabDataStorageFactory();
         Profile.setLastUsedProfileForTesting(mProfile1);
         LevelDBPersistedTabDataStorage profile1Storage = factory.create();
@@ -78,8 +76,6 @@
         LevelDBPersistedTabDataStorage profile1StorageAgain = factory.create();
         Assert.assertEquals(profile1Storage, profile1StorageAgain);
         Assert.assertNotEquals(profile1Storage, profile2Storage);
-        // Restore the original profile so the Activity can shut down correctly.
-        Profile.setLastUsedProfileForTesting(realProfile);
     }
 
     @UiThreadTest
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java
index cf1a94e0..12907e8 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java
@@ -597,7 +597,7 @@
         intent.addCategory(Intent.CATEGORY_LAUNCHER);
         mActivityTestRule.prepareUrlIntent(intent, url);
         Assert.assertFalse(mInflated.get());
-        mActivityTestRule.launchActivity(intent);
+        mActivityTestRule.startActivityCompletely(intent);
         if (mUseInstantStart) {
             CriteriaHelper.pollUiThread(mInflated::get);
         } else {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
index 4c4f454d..828469ce 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
@@ -17,14 +17,11 @@
 
 import static org.chromium.chrome.browser.toolbar.top.ButtonHighlightMatcher.withHighlight;
 
-import android.os.Looper;
-
 import androidx.test.espresso.ViewInteraction;
 import androidx.test.espresso.action.ViewActions;
 import androidx.test.espresso.assertion.ViewAssertions;
 import androidx.test.filters.MediumTest;
 
-import org.hamcrest.Matchers;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -34,14 +31,9 @@
 import org.mockito.MockitoAnnotations;
 
 import org.chromium.base.Callback;
-import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.Criteria;
-import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
-import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -66,12 +58,8 @@
     @Mock
     private Tracker mTracker;
 
-    private BrowserControlsStateProvider.Observer mBrowserControlsObserver;
-    private CallbackHelper mBrowserControlsChangedCallbackHelper;
-
     @Before
     public void setUp() {
-        Looper.prepare();
         MockitoAnnotations.initMocks(this);
         // Pretend the feature engagement feature is already initialized. Otherwise
         // UserEducationHelper#requestShowIPH() calls get dropped during test.
@@ -83,57 +71,16 @@
                 .addOnInitializedCallback(any());
         TrackerFactory.setTrackerForTests(mTracker);
 
-        mActivityTestRule.startMainActivityOnBlankPage();
-
-        mBrowserControlsChangedCallbackHelper = new CallbackHelper();
-        mBrowserControlsObserver = new BrowserControlsStateProvider.Observer() {
-            @Override
-            public void onControlsOffsetChanged(int topOffset, int topControlsMinHeightOffset,
-                    int bottomOffset, int bottomControlsMinHeightOffset, boolean needsAnimate) {
-                // When glitching, the toolbar temporarily moves offscreen and animates back down.
-                // Wait for it to be done moving, which is known when the controls are fully
-                // visible.
-                if (BrowserControlsUtils.areBrowserControlsFullyVisible(
-                            mActivityTestRule.getActivity().getBrowserControlsManager())) {
-                    mBrowserControlsChangedCallbackHelper.notifyCalled();
-                }
-            }
-        };
-        mActivityTestRule.getActivity().getBrowserControlsManager().addObserver(
-                mBrowserControlsObserver);
+        // Start on a page from the test server. This works around a bug that causes the top toolbar
+        // to flicker. If the flicker happens while the IPH is visible, it will auto dismiss, and
+        // the test case will fail. See https://crbug.com/1144328.
+        mActivityTestRule.startMainActivityWithURL(
+                mActivityTestRule.getTestServer().getURL("/chrome/test/data/android/about.html"));
     }
 
     @After
     public void tearDown() {
         TrackerFactory.setTrackerForTests(null);
-        mActivityTestRule.getActivity().getBrowserControlsManager().removeObserver(
-                mBrowserControlsObserver);
-    }
-
-    /**
-     * If onControlsOffsetChanged() is called during the test run, try again. The toolbar glitches
-     * off the screen animates back sometimes, which will cause the IPH bubbles to auto-dismiss.
-     * This only happens during startup and the second attempt should not be affected.
-     * TODO(https://crbug.com/1144328): Remove this once the underlying bug is fixed.
-     */
-    private void runWithControlsChangeForgiveness(Runnable testBody) throws InterruptedException {
-        try {
-            testBody.run();
-        } catch (AssertionError ae) {
-            // This is a bit racy with checking our boolean flag, give it a little times. Don't let
-            // the error from CriteriaHelper escape because it would hide the underlying failure.
-            try {
-                CriteriaHelper.pollInstrumentationThread(
-                        ()
-                                -> Criteria.checkThat(
-                                        mBrowserControlsChangedCallbackHelper.getCallCount(),
-                                        Matchers.greaterThan(0)));
-            } catch (Throwable ignored) {
-                throw new AssertionError("Found no browser controls change", ae);
-            }
-
-            testBody.run();
-        }
     }
 
     @Test
@@ -142,13 +89,11 @@
         when(mTracker.shouldTriggerHelpUI(FeatureConstants.NEW_TAB_PAGE_HOME_BUTTON_FEATURE))
                 .thenReturn(true);
 
-        runWithControlsChangeForgiveness(() -> {
             mActivityTestRule.loadUrl(UrlConstants.NTP_URL);
             onView(withId(R.id.home_button)).check(matches(withHighlight(false)));
 
             mActivityTestRule.loadUrl("about:blank");
             onView(withId(R.id.home_button)).check(matches(withHighlight(true)));
-        });
     }
 
     @Test
@@ -179,18 +124,14 @@
         when(mTracker.shouldTriggerHelpUI(FeatureConstants.TAB_SWITCHER_BUTTON_FEATURE))
                 .thenReturn(true);
 
-        runWithControlsChangeForgiveness(() -> {
-            // Navigating to about:blank here was flaky for some reason, probably because the page
-            // was already on about:blank.
-            mActivityTestRule.loadUrl("chrome://about/");
-            ViewInteraction toolbarTabButtonInteraction = onView(withId(R.id.tab_switcher_button));
-            toolbarTabButtonInteraction.check(ViewAssertions.matches(withHighlight(true)));
+        mActivityTestRule.loadUrl("about:blank");
+        ViewInteraction toolbarTabButtonInteraction = onView(withId(R.id.tab_switcher_button));
+        toolbarTabButtonInteraction.check(ViewAssertions.matches(withHighlight(true)));
 
-            toolbarTabButtonInteraction.perform(ViewActions.click());
-            onView(withId(R.id.new_tab_button)).check(ViewAssertions.matches(withHighlight(true)));
+        toolbarTabButtonInteraction.perform(ViewActions.click());
+        onView(withId(R.id.new_tab_button)).check(ViewAssertions.matches(withHighlight(true)));
 
-            onView(withId(R.id.tab_switcher_mode_tab_switcher_button)).perform(ViewActions.click());
-            toolbarTabButtonInteraction.check(ViewAssertions.matches(withHighlight(false)));
-        });
+        onView(withId(R.id.tab_switcher_mode_tab_switcher_button)).perform(ViewActions.click());
+        toolbarTabButtonInteraction.check(ViewAssertions.matches(withHighlight(false)));
     }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java
index 57da929..9283bb7 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/password_manager/settings/DialogManagerTest.java
@@ -48,9 +48,9 @@
         /** The dialog has not been shown yet. */
         public static final int NEW = 0;
         /** The dialog is showing. */
-        public static final int SHOWING = 0;
+        public static final int SHOWING = 1;
         /** The dialog has been dismissed. */
-        public static final int DISMISSED = 0;
+        public static final int DISMISSED = 2;
 
         @DialogState
         private int mState = NEW;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediatorTest.java
index 16bc7be..2b5b2dc 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerMediatorTest.java
@@ -146,7 +146,7 @@
         Assert.assertEquals(AccountPickerProperties.ItemType.EXISTING_ACCOUNT_ROW, item.type);
         PropertyModel model = item.model;
         DisplayableProfileData profileData = model.get(ExistingAccountRowProperties.PROFILE_DATA);
-        Assert.assertEquals(accountEmail, profileData.getAccountName());
+        Assert.assertEquals(accountEmail, profileData.getAccountEmail());
         Assert.assertEquals(fullName, profileData.getFullName());
         Assert.assertEquals(
                 isSelectedAccount, model.get(ExistingAccountRowProperties.IS_SELECTED_ACCOUNT));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandlerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandlerTest.java
index a7dcd904..a0fd269 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandlerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/LocationBarFocusScrimHandlerTest.java
@@ -24,7 +24,6 @@
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.chrome.browser.omnibox.LocationBarDataProvider;
-import org.chromium.chrome.browser.ui.TabObscuringHandler;
 import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
 
 /** Unit tests for LocationBarFocusScrimHandler. */
@@ -44,8 +43,6 @@
     @Mock
     private Configuration mConfiguration;
     @Mock
-    private TabObscuringHandler mTabObscuringHandler;
-    @Mock
     private ScrimCoordinator mScrimCoordinator;
     @Mock
     private NewTabPageDelegate mNewTabPageDelegate;
@@ -57,8 +54,10 @@
         MockitoAnnotations.initMocks(this);
         doReturn(mResources).when(mContext).getResources();
         doReturn(mConfiguration).when(mResources).getConfiguration();
-        mScrimHandler = new LocationBarFocusScrimHandler(mScrimCoordinator, mTabObscuringHandler,
+        // clang-format off
+        mScrimHandler = new LocationBarFocusScrimHandler(mScrimCoordinator, (visible) -> {},
                 mContext, mLocationBarDataProvider, mClickDelegate, mScrimTarget);
+        // clang-format on
     }
 
     @Test
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index b3baab9..569d0fd 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -61,7 +61,6 @@
 <translation id="1060292118287751956">Bepaal die frekwensie waarteen die skerm opdateer</translation>
 <translation id="1061904396131502319">Dis amper tyd vir 'n blaaskans</translation>
 <translation id="1067048845568873861">Geskep</translation>
-<translation id="1067291318998134776">Linux (Beta)</translation>
 <translation id="1067922213147265141">Ander Google-dienste</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1070377999570795893">'n Ander program op jou rekenaar het 'n uitbreiding bygevoeg wat dalk die manier sal verander waarop Chrome werk.
@@ -929,7 +928,6 @@
 Jy kan hierdie rekening se instellings bestuur deur die Family Link-program op jou toestel te installeer.  Ons het vir jou instruksies in 'n e-pos gestuur.</translation>
 <translation id="2040460856718599782">Oeps! Kon jou nie staaf nie. Gaan asseblief jou aanmeldingeiebewyse weer na en probeer weer.</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{Jy het 1 gekompromitteerde wagwoord}other{Jy het # gekompromitteerde wagwoorde}}</translation>
-<translation id="2040863272941698761">Stel Linux op</translation>
 <translation id="204497730941176055">Microsoft-sertifikaattemplaatnaam</translation>
 <translation id="2045117674524495717">Kortpadsleutelhelper</translation>
 <translation id="2045969484888636535">Hou aan om webkoekies te blokkeer</translation>
@@ -1261,8 +1259,6 @@
 <translation id="2428510569851653187">Beskryf wat jy besig was om te doen toe die oortjie omgeval het</translation>
 <translation id="2428939361789119025">Skakel Wi-Fi af</translation>
 <translation id="2431027948063157455">Google Assistent kon nie laai nie. Gaan asseblief jou netwerkverbinding na en probeer weer.</translation>
-<translation id="2431846145771260397">Is jy seker jy wil 'n vastegrootteskyf vir Linux (Beta) reserveer?</translation>
-<translation id="2432753757290432042">Linux (Beta)-opdatering word vereis</translation>
 <translation id="2433452467737464329">Voeg 'n navraagparameter in URL by om die blad outomaties te herlaai: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433490881840073798"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /> <ph name="RECENT_PERMISSIONS_CHANGE" /></translation>
 <translation id="2433507940547922241">Voorkoms</translation>
@@ -1977,6 +1973,7 @@
 <translation id="3264544094376351444">Sans-serif lettertipe</translation>
 <translation id="3264582393905923483">Konteks</translation>
 <translation id="3265459715026181080">Maak venster toe</translation>
+<translation id="3266022278425892773">Linux-ontwikkelingomgewing</translation>
 <translation id="3266179261140759675">Keer dat werwe wat toe is steeds inligting stuur en ontvang</translation>
 <translation id="3266274118485960573">Veiligheidskontrole vind tans plaas</translation>
 <translation id="3267726687589094446">Hou aan om outomatiese aflaaie van veelvuldige lêers toe te laat</translation>
@@ -2277,7 +2274,6 @@
 <translation id="3600051066689725006">Webversoekinligting</translation>
 <translation id="3600792891314830896">Demp werwe wat klank speel</translation>
 <translation id="360180734785106144">Nuwe kenmerke aanbied wanneer hulle beskikbaar is</translation>
-<translation id="3602198818276948261">Jou houer is nie opgestel om die verandering van skyfgroottes te steun nie. Om die hoeveelheid spasie te verstel wat vir Linux (beta) gereserveer word, moet jy rugsteun en dan in 'n nuwe houer terugstel.</translation>
 <translation id="3602290021589620013">Voorskou</translation>
 <translation id="3603622770190368340">Kry netwerksertifikaat</translation>
 <translation id="3604713164406837697">Verander muurpapier</translation>
@@ -3402,6 +3398,7 @@
 <translation id="4925542575807923399">Die administrateur vir hierdie rekening vereis dat hierdie rekening die eerste een moet wees waarby in 'n veelvuldige aanmeldsessie aangemeld word.</translation>
 <translation id="4927753642311223124">Niks hier te sien nie, beweeg aan.</translation>
 <translation id="4929386379796360314">Drukbestemmings</translation>
+<translation id="4930447554870711875">Ontwikkelaars</translation>
 <translation id="4930714375720679147">Skakel aan</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="4933484234309072027">ingebed op <ph name="URL" /></translation>
@@ -3954,7 +3951,6 @@
 <translation id="558918721941304263">Laai tans programme …</translation>
 <translation id="5592595402373377407">Nog nie genoeg data beskikbaar nie.</translation>
 <translation id="5595485650161345191">Wysig adres</translation>
-<translation id="5595727715083333657">Jou houer se grootte kan nie verander word nie. Om die hoeveelheid spasie te verstel wat vooraf aan Linux (beta) toegewys word, moet jy rugsteun en dan in 'n nuwe houer terugstel.</translation>
 <translation id="5596627076506792578">Meer opsies</translation>
 <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> MB se mobiele data sal gebruik word om opdatering af te laai. Wil jy voortgaan?</translation>
 <translation id="5601503069213153581">PIN</translation>
@@ -4207,7 +4203,6 @@
 <translation id="5893589697005440881">Deel lêers met mense rondom jou</translation>
 <translation id="5895138241574237353">Herbegin</translation>
 <translation id="5900302528761731119">Google-profielfoto</translation>
-<translation id="5900358982890952556">Gradeer Linux op (Beta)</translation>
 <translation id="5901494423252125310">Drukkerdeur is oop</translation>
 <translation id="5901630391730855834">Geel</translation>
 <translation id="5904614460720589786">Kon nie <ph name="APP_NAME" /> opstel nie weens 'n opstellingprobleem. Kontak jou administrateur. Foutkode: <ph name="ERROR_CODE" />.</translation>
@@ -4674,6 +4669,7 @@
 <translation id="6434309073475700221">Gooi weg</translation>
 <translation id="6434325376267409267">Jou toestel moet opgedateer word voordat jy <ph name="APP_NAME" /> kan gebruik.</translation>
 <translation id="6436164536244065364">Bekyk in webwinkel</translation>
+<translation id="6438234780621650381">Stel instellings terug</translation>
 <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> – Oudio speel tans</translation>
 <translation id="6442187272350399447">Fantasties</translation>
 <translation id="6444070574980481588">Stel datum en tyd</translation>
@@ -5387,7 +5383,6 @@
 <translation id="7284411326658527427">Elke persoon kan hul rekening personaliseer en data privaat hou.</translation>
 <translation id="7287143125007575591">Toegang geweier.</translation>
 <translation id="7287411021188441799">Laai verstekagtergrond terug</translation>
-<translation id="7288013116963835700">Verwyder Linux vir <ph name="DEVICE_TYPE" /></translation>
 <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> dpi</translation>
 <translation id="7289225569524511578">Maak die muurpapierprogram oop</translation>
 <translation id="7290242001003353852">Hierdie aanmelddiens, waarvan <ph name="SAML_DOMAIN" /> die gasheer is, gaan tans by jou kamera in.</translation>
@@ -5773,7 +5768,6 @@
 <translation id="7730683939467795481">Hierdie bladsy is deur die "<ph name="EXTENSION_NAME" />"-uitbreiding verander</translation>
 <translation id="7732111077498238432">Netwerk word deur beleid beheer</translation>
 <translation id="7737115349420013392">Bind tans saam met "<ph name="DEVICE_NAME" />" …</translation>
-<translation id="7737238973539693982">Vee Linux (Beta) uit</translation>
 <translation id="7737948071472253612">Mag nie jou kamera gebruik nie</translation>
 <translation id="7740996059027112821">Standaard</translation>
 <translation id="7742706086992565332">Jy kan stel hoeveel jy in- of uitzoem op sekere webwerwe</translation>
@@ -6242,7 +6236,6 @@
 <translation id="825238165904109940">Wys altyd volle URL'e</translation>
 <translation id="8252569384384439529">Laai tans op …</translation>
 <translation id="8253198102038551905">Klik '+' om netwerkeienskappe te kry</translation>
-<translation id="8254954272268479918">Maak Linux (Beta) toe</translation>
 <translation id="8255451560461371599">Geen agtergrond nie</translation>
 <translation id="8256319818471787266">Sparky</translation>
 <translation id="8257950718085972371">Hou aan om kameratoegang te blokkeer</translation>
@@ -6978,7 +6971,6 @@
 <translation id="9088917181875854783">Bevestig asseblief dat hierdie wagsleutel op "<ph name="DEVICE_NAME" />" gewys word:</translation>
 <translation id="9089416786594320554">Invoermetodes</translation>
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> se profiel is reeds aangemeld by <ph name="NEW_USER" /></translation>
-<translation id="9093429538970210897">Dit word aanbeveel dat lêers gerugsteun word ingeval die opgradering nie voltooi kan word nie. As die opgradering begin word, sal dit veroorsaak dat Linux (beta) afgeskakel word. Stoor asseblief oop lêers voordat jy voortgaan.</translation>
 <translation id="9094033019050270033">Dateer wagwoord op</translation>
 <translation id="9094038138851891550">Gebruikernaam is ongeldig</translation>
 <translation id="9094982973264386462">Verwyder</translation>
@@ -7057,7 +7049,6 @@
 <translation id="9176476835295860688">Stuur gebruik- en diagnostiese data. Hierdie toestel stuur tans diagnostiese, toestel- en programgebruikdata outomaties na Google toe. Dit sal met stelsel- en programstabiliteit en ander verbeteringe help. Sekere saamgestelde data sal ook Google-programme en -vennote, soos Android-ontwikkelaars, help. Hierdie <ph name="BEGIN_LINK1" />instelling<ph name="END_LINK1" /> word deur die eienaar afgedwing. As jou bykomende Web- en Programaktiwiteit-instelling aangeskakel is, kan hierdie data in jou Google-rekening gestoor word. <ph name="BEGIN_LINK2" />Kom meer te wete<ph name="END_LINK2" /></translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth-toestel is gekoppel</translation>
 <translation id="9179524979050048593">Aanmeldskermgebruikernaam</translation>
-<translation id="9179734824669616955">Stel Linux (Beta) op jou <ph name="DEVICE_TYPE" /> op</translation>
 <translation id="9180281769944411366">Hierdie proses kan 'n paar minute neem. Begin tans die Linux-houer.</translation>
 <translation id="9180380851667544951">Werf kan jou skerm deel</translation>
 <translation id="9186963452600581158">Meld met jou kind se Google-rekening aan</translation>
@@ -7098,7 +7089,6 @@
 <translation id="93610034168535821">Algehele berging gebruik deur werwe:</translation>
 <translation id="936801553271523408">Stelsel se diagnostiese data</translation>
 <translation id="93766956588638423">Herstel uitbreiding</translation>
-<translation id="938339467127511841">Linux-berging (beta)</translation>
 <translation id="938470336146445890">Installeer 'n gebruikersertifikaat.</translation>
 <translation id="939252827960237676">Kon nie skermkiekie stoor nie</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 4e7ee55..aff61189 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -61,7 +61,6 @@
 <translation id="1060292118287751956">ማያ ገጹ የሚዘመንበት ተደጋጋሚነትን ይወስናል</translation>
 <translation id="1061904396131502319">የእረፍት ጊዜ ሊደርስ ነው</translation>
 <translation id="1067048845568873861">ተፈጥሯል</translation>
-<translation id="1067291318998134776">Linux (ቅድመ-ይሁንታ)</translation>
 <translation id="1067922213147265141">ሌሎች የGoogle አገልግሎቶች</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1070377999570795893">በኮምፒውተርዎ ላይ ያለ ሌላ ፕሮግራም Chrome የሚሰራበት መንገድ ሊቀይር የሚችል አንድ ቅጥያ አክሏል።
@@ -434,6 +433,7 @@
 <translation id="1475502736924165259">ከሌሎች ማንኛቸውም መደቦች ጋር የማይገጣጠሙ የእውቅና ማረጋገጫዎች በፋይል ላይ አለዎት</translation>
 <translation id="1476088332184200792">ወደ መሣሪያዎ ይቅዱ</translation>
 <translation id="1476607407192946488">የ&amp;ቋንቋ ቅንብሮች...</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> የእርስዎን ዘመናዊ ካርድ እንደገባ እንዲቆይ ይፈልግብዎታል።</translation>
 <translation id="1478340334823509079">ዝርዝሮች፦ <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">መጫን አልነቃም</translation>
 <translation id="1481537595330271162">የዲስክ መጠንን መቀየር ላይ ስሕተት</translation>
@@ -929,7 +929,6 @@
 የ Family Link መተግበሪያን በእርስዎ መሣሪያ ላይ በመጫን የዚህን መለያ ቅንብሮች ማስተዳደር ይችላሉ።  በኢሜይል መመሪያዎችን ለእርስዎ ልከናል።</translation>
 <translation id="2040460856718599782">ውይ!  እርስዎን ለማረጋገጥ በሚሞከርበት ጊዜ የሆነ ስህተት ተፈጥሯል።  እባክዎ የመለያ መግቢያ ምስክርነቶችዎን ደግመው ያረጋግጡና እንደገና ይሞክሩ።</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{1 የተጠለፈ የይለፍ ቃል አለዎት}one{# የተጠለፉ የይለፍ ቃላት አለዎት}other{# የተጠለፉ የይለፍ ቃላት አለዎት}}</translation>
-<translation id="2040863272941698761">Linuxን ያዋቅሩ</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
 <translation id="2045117674524495717">የቁልፍ ሰሌዳ አቋራጭ አጋዥ</translation>
 <translation id="2045969484888636535">ኩኪዎች ማገዱን ይቀጥሉ</translation>
@@ -1260,8 +1259,6 @@
 <translation id="2428510569851653187">ትሩ ሲሰናከል ምን እየሰሩ እንደነበር ያብራሩ</translation>
 <translation id="2428939361789119025">Wi-Fiን አጥፋ</translation>
 <translation id="2431027948063157455">Google ረዳት የአውታረ መረብ ግንኙነትዎን መፈተሽ እና ዳግም መሞከር አልቻለም።</translation>
-<translation id="2431846145771260397">እርግጠኛ ነዎት ለLinux (ቤታ) ቋሚ የዲስክ መጠን ማቆየት ይፈልጋሉ?</translation>
-<translation id="2432753757290432042">Linux (ቅድመ-ይሁንታ ሙከራ) ዝማኔ ያስፈልጋል</translation>
 <translation id="2433452467737464329">ገጹን በራስ-ሰር ለማደስ በዩ አር ኤል ውስጥ የመጠይቅ ልኬት ያክሉ፦ chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433490881840073798"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />፣ <ph name="RECENT_PERMISSIONS_CHANGE" /></translation>
 <translation id="2433507940547922241">ገጽታ</translation>
@@ -1976,6 +1973,7 @@
 <translation id="3264544094376351444">Sans-Serif ቅርጸ ቁምፊ፦</translation>
 <translation id="3264582393905923483">አውድ</translation>
 <translation id="3265459715026181080">መስኮት ዝጋ</translation>
+<translation id="3266022278425892773">የሊኑክስ ግንባታ አከባቢ</translation>
 <translation id="3266179261140759675">የተዘጉ ጣቢያዎች ውሂብን እንዳይልኩ እና እንዳይቀበሉ አግዳቸው</translation>
 <translation id="3266274118485960573">የደህንነት ፍተሻ በማሄድ ላይ ነው።</translation>
 <translation id="3267726687589094446">በርካታ ፋይሎችን በራስ ሰር ማውረድን መፍቀድ ቀጥል</translation>
@@ -2033,6 +2031,7 @@
 <translation id="3320630259304269485">የጥንቃቄ አሰሳ (ከአደገኛ ጣቢያዎች መጠበቅ) እና ሌሎች የደህንነት ቅንብሮች</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{ይህ ውሂብ ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}=1{ይህ ፋይል ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}one{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}other{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}}</translation>
 <translation id="3323521181261657960">ጉርሻ! ተጨማሪ የማያ ገጽ ጊዜ አለዎት</translation>
+<translation id="3325804108816646710">የሚገኙ መገለጫዎችን በመፈለግ ላይ...</translation>
 <translation id="3325910708063135066">ካሜራ እና ማይክሮፎን በMac System Preferences ውስጥ ጠፍተዋል</translation>
 <translation id="3327050066667856415">Chromebooks ለደህንነት የተነደፉ ናቸው። የእርስዎ መሣሪያ በራስ-ሰር ከተንኮል-አዘል ዌር የተጠበቀ ነው – ምንም ተጨማሪ ሶፍትዌር ሳያስፈልግ።</translation>
 <translation id="3328489342742826322">ከምትኬ ወደነበረበት መመለስ ነባር የLinux መተግበሪያዎችን እና በLinux ፋይሎች አቃፊዎ ውስጥ ያለ ውሂብን ይሰርዛል።</translation>
@@ -2100,6 +2099,7 @@
 <translation id="3412265149091626468">ወደ ተመረጠው ዝለል</translation>
 <translation id="3413122095806433232">CA ሰጪዎች፦ <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">መጠን፦</translation>
+<translation id="3414966631182382431">የእርስዎ <ph name="BEGIN_LINK" />አሳሽ የሚተዳደረው<ph name="END_LINK" /> በ<ph name="MANAGER" /> ነው</translation>
 <translation id="3416468988018290825">ሁልጊዜ ሙሉ ዩአርኤሎችን አሳይ</translation>
 <translation id="3417835166382867856">ትሮችን ይፈልጉ</translation>
 <translation id="3417836307470882032">ወታደራዊ ሰዓት</translation>
@@ -2274,7 +2274,6 @@
 <translation id="3600051066689725006">የድር ጥያቄ መረጃ</translation>
 <translation id="3600792891314830896">ድምጽን በሚያጫውቱ ጣቢያዎች ላይ ድምጸ-ከል አድርግ</translation>
 <translation id="360180734785106144">ልክ አዲስ ባህሪያት ሲገኙ ማቅረብ</translation>
-<translation id="3602198818276948261">የእርስዎ መያዣ የዲስክ መጠንን መቀየር ለመደገፍ እንዲችል አልተዋቀረም። ለLinux (ቅድመ-ይሁንታ) የተያዘለትን የቦታ መጠን ለማስተካከል ምትኬ ያስቀምጡና ከዚያ በአዲስ መያዣ ላይ ወደነበረበት ይመልሱ።</translation>
 <translation id="3602290021589620013">ቅድመ-ዕይታ</translation>
 <translation id="3603622770190368340">የአውታረ መረብ እውቅና ማረጋገጫ ያግኙ</translation>
 <translation id="3604713164406837697">ልጣፍ ይለውጡ</translation>
@@ -3173,6 +3172,7 @@
 <translation id="4651484272688821107">የመስመር ላይ ክፍለ አካላትን ከቅንጭብ ማሳያ ሁነታ ግብዓቶች ጋር መጫን አልተቻለም።</translation>
 <translation id="4652935475563630866">በካሜራ ቅንብሩ ውስጥ ያልወ ለውጥ የParallels Desktop ዳግም መጀመር ያስፈልገዋል። ለመቀጠል Parallels Desktopን ዳግም ያስጀምሩ።</translation>
 <translation id="4653405415038586100">Linuxን ማዋቀር ላይ ስህተት</translation>
+<translation id="4657914796247705218">የTrackPoint ፍጥነት</translation>
 <translation id="465878909996028221">http፣ https እና ፋይል ፕሮቶኮሎች ብቻ ለአሳሽ አቅጣጫ መቀየሮች ይደገፋሉ።</translation>
 <translation id="4659077111144409915">ዋና መለያ</translation>
 <translation id="4659126640776004816">ወደ የእርስዎ የ Google መለያ ሲገቡ፣ ይህ ባህሪ ይበራል።</translation>
@@ -3396,6 +3396,7 @@
 <translation id="4925542575807923399">የዚህ መለያ አስተዳዳሪ በአንድ ባለብዙ መለያ መግቢያ ክፍለ-ጊዜ ላይ ይህ መለያ መጀምሪያ እንዲገባ ይፈልጋል።</translation>
 <translation id="4927753642311223124">እዚህ ምንም የሚታይ ነገር የለም፣ ይቀጥሉ።</translation>
 <translation id="4929386379796360314">የሕትመት መድረሻዎች</translation>
+<translation id="4930447554870711875">ገንቢዎች</translation>
 <translation id="4930714375720679147">አብራ</translation>
 <translation id="4932733599132424254">ቀን</translation>
 <translation id="4933484234309072027"><ph name="URL" /> ላይ ተከትቷል</translation>
@@ -3832,6 +3833,7 @@
 <translation id="5470735824776589490">መሣሪያዎ በPowerwash ዳግም ሊጀምር ከመቻሉ በፊት ዳግም ማስጀመር ያስፈልጋል። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">ጤና ይስጥልን! እኔ የጽሑፍ-ወደ-ንግግር ድምጽዎ ነኝ።</translation>
 <translation id="5472627187093107397">ለዚህ ጣቢያ የይለፍ ቃላትን ያስቀምጡ</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ፒን ቢያንስ አንድ ቁምፊ መሆን አለበት}one{ፒን ቢያንስ # ቁምፊዎች መሆን አለበት}other{ፒን ቢያንስ # ቁምፊዎች መሆን አለበት}}</translation>
 <translation id="5473333559083690127">አዲሱን ፒን ደግመው ያስገቡ</translation>
 <translation id="5481273127572794904">ብዙ ፋይሎችን በራስ-ሰር ለማውረድ አልተፈቀደም</translation>
 <translation id="5481941284378890518">አቅራቢያ ያሉ አታሚዎችን አክል</translation>
@@ -3948,7 +3950,6 @@
 <translation id="558918721941304263">መተግበሪያዎችን በመጫን ላይ...</translation>
 <translation id="5592595402373377407">ገና ምንም በቂ ውሂብ የለም።</translation>
 <translation id="5595485650161345191">አድራሻ አርትዕ</translation>
-<translation id="5595727715083333657">የእርስዎ መያዣ መጠን መቀየርን አይደግፍም። ለLinux (ቅድመ-ይሁንታ) ቅድሚያ የተመደበው የቦታ መጠንን ለማስተካከል ምትኬ ያስቀምጡ እና አዲስ መያዣ ላይ ወደነበረበት ይመልሱ።</translation>
 <translation id="5596627076506792578">ተጨማሪ አማራጮች</translation>
 <translation id="5600706100022181951">ዝማኔው ከሞባይል ውሂብ <ph name="UPDATE_SIZE_MB" /> ሜባ በመጠቀም ይወርዳል። መቀጠል ይፈልጋሉ?</translation>
 <translation id="5601503069213153581">ፒን</translation>
@@ -4200,7 +4201,6 @@
 <translation id="5893589697005440881">ፋይሎችን በዙሪያዎ ላሉ ሰዎች ይጋሩ</translation>
 <translation id="5895138241574237353">እንደገና ጀምር</translation>
 <translation id="5900302528761731119">Google የመገለጫ ፎቶ</translation>
-<translation id="5900358982890952556">Linux (ቅድመ-ይሁንታ)ን ደረጃ አሻሽል</translation>
 <translation id="5901494423252125310">የማተሚያ በር ክፍት ነው</translation>
 <translation id="5901630391730855834">ቢጫ</translation>
 <translation id="5904614460720589786">በውቅረት ችግር ምክንያት <ph name="APP_NAME" />ን ማቀናበር አልተቻለም። እባክዎ አስተዳዳሪዎን ያነጋግሩ። የስሕተት ኮድ፦ <ph name="ERROR_CODE" />።</translation>
@@ -4372,6 +4372,7 @@
 <translation id="6087960857463881712">ግሩም ፊት</translation>
 <translation id="6091761513005122595">አጋራ በተሳካ ሁኔታ ተፈናጥጧል።</translation>
 <translation id="6093888419484831006">ዝማኔን በመሰረዝ ላይ...</translation>
+<translation id="6095541101974653012">ዘግተው ወጥተው ነበር።</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">ሰፍቶ ክፈት</translation>
 <translation id="6096326118418049043">X.500 ስም</translation>
@@ -4666,6 +4667,7 @@
 <translation id="6434309073475700221">ጣለው</translation>
 <translation id="6434325376267409267">እርስዎ <ph name="APP_NAME" />ን መጠቀም ከመቻልዎ በፊት የእርስዎ መሣሪያ መዘመን አለበት።</translation>
 <translation id="6436164536244065364">በድር  መደብር  ውስጥ ይመልከቱ</translation>
+<translation id="6438234780621650381">ቅንብሮችን ዳግም አስጀምር</translation>
 <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - ኦዲዮ በመጫወት ላይ ነው</translation>
 <translation id="6442187272350399447">ግሩም</translation>
 <translation id="6444070574980481588">ቀን እና ሰዓት ያዘጋጁ</translation>
@@ -4704,6 +4706,7 @@
 <translation id="6474884162850599008">የGoogle Drive መለያን አላቅቅ</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> የማያ ገጽዎን ይዘቶች ማጋራት ይፈልጋል። ምን ማጋራት እንደሚፈልጉ ይምረጡ።</translation>
 <translation id="6478248366783946499">አደገኛ ፋይል ይቀመጥ?</translation>
+<translation id="6480327114083866287">በ<ph name="MANAGER" /> የሚተዳደር</translation>
 <translation id="6483485061007832714">ውርድን ይክፈቱ</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> በመክፈት ላይ…</translation>
 <translation id="6488384360522318064">ቋንቋ ምረጥ</translation>
@@ -4892,6 +4895,7 @@
 <translation id="671928215901716392">ማያ ገጽ ይቆልፉ</translation>
 <translation id="6721678857435001674">የደህንነት ቁልፍዎን ስሪት እና ሞዴል ይመልከቱ</translation>
 <translation id="6721972322305477112">&amp;ፋይል</translation>
+<translation id="672208878794563299">ይህ ጣቢያ በሚቀጥለው ጊዜ እንደገና ይጠይቃል።</translation>
 <translation id="672213144943476270">እንደ እንግዳ ከማሰስዎ በፊት የእርስዎን መገለጫ እባክዎ ይክፈቱ።</translation>
 <translation id="6723661294526996303">ዕልባቶችን እና ቅንብሮችን አስመጣ...</translation>
 <translation id="6723839937902243910">ኃይል</translation>
@@ -5377,7 +5381,6 @@
 <translation id="7284411326658527427">እያንዳንዱ ሰው መለያቸውን የግል ማድረግ እና ውሂብን የግል አድርገው ማቆየት ይችላሉ።</translation>
 <translation id="7287143125007575591">መዳረሻ ተክልክሏል።</translation>
 <translation id="7287411021188441799">ወደነበረበት ነባሪ ዳራ መልስ</translation>
-<translation id="7288013116963835700">ለ<ph name="DEVICE_TYPE" /> Linuxን አስወግድ</translation>
 <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> dpi</translation>
 <translation id="7289225569524511578">የልጣፍ መተግበሪያውን ክፈት</translation>
 <translation id="7290242001003353852">ይህ በ<ph name="SAML_DOMAIN" /> የሚስተናገድ የመለያ መግቢያ አገልግሎት የእርስዎን ካሜራ እየደረሰበት ነው።</translation>
@@ -5763,7 +5766,6 @@
 <translation id="7730683939467795481">ይህ ገጽ በ «<ph name="EXTENSION_NAME" />» ቅጥያ ነበር የተለወጠዉ</translation>
 <translation id="7732111077498238432">አውታረ መረብ በመመሪያ ቁጥጥር የሚደረግበት ነው</translation>
 <translation id="7737115349420013392">ከ«<ph name="DEVICE_NAME" />» ጋር በማጣመር ላይ ...</translation>
-<translation id="7737238973539693982">Linux (ቅድመ-ይሁንታ)ን ሰርዝ</translation>
 <translation id="7737948071472253612">ካሜራዎን ለመጠቀም አልተፈቀደም</translation>
 <translation id="7740996059027112821">መደበኛ</translation>
 <translation id="7742706086992565332">በተወሰኑ ድር ጣቢያዎች ላይ ምን ያህል እንደሚያጎሉ ወይም እንደሚያሳንሱ ማቀናበር ይችላሉ</translation>
@@ -6237,7 +6239,6 @@
 <translation id="825238165904109940">ሁልጊዜ ሙሉ ዩአርኤሎችን አሳይ</translation>
 <translation id="8252569384384439529">በመስቀል ላይ…</translation>
 <translation id="8253198102038551905">የአውታረ መረብ ባህሪያትን ለማግኘት «+»ን ጠቅ ያድርጉ።</translation>
-<translation id="8254954272268479918">Linux (ቅድመ-ይሁንታ)ን ዝጋ</translation>
 <translation id="8255451560461371599">ምንም ጀርባ የለም</translation>
 <translation id="8256319818471787266">Sparky</translation>
 <translation id="8257950718085972371">የካሜራ መዳረሻ ማገዱን ቀጥል</translation>
@@ -6296,6 +6297,7 @@
 <translation id="8317671367883557781">የአውታረ መረብ ግንኙነት ያክሉ</translation>
 <translation id="8319414634934645341">የተስፋፋ ቁልፍ አጠቃቀም</translation>
 <translation id="8320459152843401447">የእርስዎ ሙሉ ማያ ገጽ</translation>
+<translation id="8321837372750396788">ይህ <ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> ነው የሚተዳደረው።</translation>
 <translation id="8322814362483282060">ይህ ገጽ ማይክሮፎንዎን እንዳይደርስበት ታግዷል።</translation>
 <translation id="8323167517179506834">ዩአርኤል ይተይቡ</translation>
 <translation id="8324784016256120271">ጣቢያዎች በተለያዩ ጣቢያዎች ላይ ለምሳሌ ማስታወቂያዎችን ግላዊነት ለማላበስ የእርስዎን የአሰሳ እንቅስቃሴ ለመመልከት ኩኪዎችን መጠቀም ይችላሉ</translation>
@@ -6603,6 +6605,7 @@
 <translation id="8698269656364382265">ወደ ቀዳሚው ማያ ገጽ ለመመለስ ከግራ ጎኑ ወደ ውስጥ ይጥረጉ።</translation>
 <translation id="869884720829132584">የመተግበሪያዎች ምናሌ</translation>
 <translation id="869891660844655955">የሚያበቀበት ጊዜ</translation>
+<translation id="8702825062053163569">የእርስዎ <ph name="DEVICE_TYPE" /> ተቆልፎ ነበር።</translation>
 <translation id="8703346390800944767">ማስታወቂያ ዝለል</translation>
 <translation id="8705331520020532516">መለያ ቁጥር</translation>
 <translation id="8705580154597116082">Wi-Fi በስልክ በኩል ይገኛል</translation>
@@ -6972,7 +6975,6 @@
 <translation id="9088917181875854783">እባክዎ ይህን የይለፍ ቁልፍ በ«<ph name="DEVICE_NAME" />» ላይ መታየቱን ያረጋግጡ፦</translation>
 <translation id="9089416786594320554">የግቤት ስልቶች</translation>
 <translation id="909108997331068008">የ<ph name="EXISTING_USER" /> መገለጫ ቀድሞውኑ ወደ <ph name="NEW_USER" /> ገብቷል</translation>
-<translation id="9093429538970210897">ማላቅ መጠናቀቅ የማይችል ከሆነ የፋይሎች ምትኬን ማስቀመጥ ይመከራል። ማላቅ መጀመሩ Linuxን (ቅድመ-ይሁንታ) ይዘገዋል። ከመቀጠልዎ በፊት እባክዎ የተከፈቱ ፋይሎችን ያስቀምጡ።</translation>
 <translation id="9094033019050270033">የይለፍ ቃል ያዘምኑ</translation>
 <translation id="9094038138851891550">ልክ ያልሆነ ተጠቃሚ ስም</translation>
 <translation id="9094982973264386462">አስወግድ</translation>
@@ -7051,7 +7053,6 @@
 <translation id="9176476835295860688">የአጠቃቀም እና የምርመራ ውሂብ ይላኩ። ይህ መሣሪያ በአሁኑ ጊዜ በራስ-ሰር የምርመራ፣ የመሣሪያ እና የመተግበሪያ አጠቃቀም ውሂብ ወደ Google እየላከ ነው። ይህ የስርዓት እና የመተግበሪያ እርጋታን እና ሌሎች ማሻሻያዎችን ያግዛል። አንዳንድ ውሑድ ውሂብ እንዲሁም የGoogle መተግበሪያዎችን እና እንደ የAndroid ገንቢዎች ያሉ አጋሮችን ያግዛሉ። ይህ <ph name="BEGIN_LINK1" />ቅንብር<ph name="END_LINK1" /> በባለቤቱ ተፈጻሚ ይደረጋል። የእርስዎ የተጨማሪ ድር እና መተግበሪያ እንቅስቃሴ ቅንብር በርቶ ከሆነ ይህ ውሂብ በGoogle መለያዎ ላይ ሊቀመጥ ይችላል። <ph name="BEGIN_LINK2" />የበለጠ ለመረዳት<ph name="END_LINK2" /></translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - የብሉቱዝ መሣሪያ ተገናኝቷል</translation>
 <translation id="9179524979050048593">የመግቢያ ገጽ ተጠቃሚ ስም</translation>
-<translation id="9179734824669616955">Linux (ቅድመ-ይሁንታ) በእርስዎ <ph name="DEVICE_TYPE" /> ላይ ያቀናብሩ</translation>
 <translation id="9180281769944411366">ይህ ሂደት ጥቂት ደቂቃዎችን ሊወስድ ይችላል። የLinux መያዣውን በመጀመር ላይ።</translation>
 <translation id="9180380851667544951">ጣቢያ የእርስዎን ማያ ገጽ ማጋራት ይችላል</translation>
 <translation id="9186963452600581158">በልጅ Google መለያ ይግቡ</translation>
@@ -7092,7 +7093,6 @@
 <translation id="93610034168535821">በጣቢያዎች ጥቅም ላይ የዋለ ድምር ማከማቻ፦</translation>
 <translation id="936801553271523408">የስርዓት ምርመራ ውሂብ</translation>
 <translation id="93766956588638423">ቅጥያ ይጠግኑ</translation>
-<translation id="938339467127511841">Linux (የቅድመ ይሁንታ ሙከራ) ማከማቻ</translation>
 <translation id="938470336146445890">እባክዎ የተጠቃሚ እውቅና ማረጋገጫ ይጫኑ።</translation>
 <translation id="939252827960237676">ቅጽበታዊ ገጽ እይታን ማስቀመጥ አልተቻለም</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 9dd991e..6cc1203 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -61,7 +61,6 @@
 <translation id="1060292118287751956">تحدّد معدّل تحديثات الشاشة</translation>
 <translation id="1061904396131502319">سيتم قفل الجهاز بعد قليل</translation>
 <translation id="1067048845568873861">تم الإنشاء</translation>
-<translation id="1067291318998134776">‏نظام التشغيل Linux (نسخة تجريبية)</translation>
 <translation id="1067922213147265141">‏خدمات Google الأخرى</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1070377999570795893">‏أضاف برنامج آخر بجهاز الكمبيوتر إضافة قد تؤدي إلى تغيير طريقة عمل Chrome.
@@ -86,7 +85,7 @@
 <translation id="1091767800771861448">‏اضغط على ESCAPE للتخطي (الإصدارات غير الرسمية فقط).</translation>
 <translation id="1093457606523402488">شبكات مرئية:</translation>
 <translation id="1094607894174825014">تم طلب عملية القراءة أو الكتابة باستخدام إزاحة غير صالحة على: "<ph name="DEVICE_NAME" />".</translation>
-<translation id="1095761715416917775">تأكّد من أنك تستطيع الوصول إلى بيانات المزامنة دائمًا</translation>
+<translation id="1095761715416917775">ضمان إمكانية الوصول إلى بيانات المزامنة دائمًا</translation>
 <translation id="109647177154844434">‏سيؤدي إلغاء تثبيت نظام Parallels Desktop إلى حذف صورة نظام التشغيل Windows، ويشمل هذا تطبيقاته وإعداداته وبياناته. هل أنت متأكّد من أنّك تريد المتابعة؟</translation>
 <translation id="1097515232094183876">{COUNT,plural, =1{رابط واحد}zero{# رابط}two{رابطان}few{# روابط}many{# رابطًا}other{# رابط}}</translation>
 <translation id="1097658378307015415">قبل تسجيل الدخول، يُرجى الدخول كضيف لتفعيل الشبكة <ph name="NETWORK_ID" /></translation>
@@ -122,7 +121,7 @@
 <translation id="1128591060186966949">تعديل محرّك البحث</translation>
 <translation id="1129850422003387628">إدارة التطبيقات</translation>
 <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> - جزء من مجموعة <ph name="GROUP_NAME" /></translation>
-<translation id="1130712065489627903">‏يمكنك الآن تلقّي الإشعارات من هاتفك على الجهاز <ph name="DEVICE_TYPE" />. وعند إغلاق الإشعارات على الجهاز <ph name="DEVICE_TYPE" />، سيتم إغلاقها على هاتفك أيضًا. يُرجى التأكد من أن هاتفك قريب ومن تفعيل اتصال شبكة البلوتوث وشبكة Wi-Fi.</translation>
+<translation id="1130712065489627903">‏يمكنك الآن تلقّي الإشعارات من هاتفك على الجهاز <ph name="DEVICE_TYPE" />. وعند إغلاق الإشعارات على الجهاز <ph name="DEVICE_TYPE" />، سيتم إغلاقها على هاتفك أيضًا. يُرجى التأكد من أن هاتفك قريب وغير مُقفل وتم تفعيل بلوتوث وWi-Fi فيه.</translation>
 <translation id="1134009406053225289">فتح في نافذة للتصفح المتخفي</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> من أصل <ph name="EMOJI_COUNT" /></translation>
 <translation id="1136712381129578788">تم قفل مفتاح الأمان بسبب إدخال رقم التعريف الشخصي غير الصحيح عدّة مرات. لفتح قفله، يمكنك إزالته وإعادة إدخاله.</translation>
@@ -437,6 +436,7 @@
 <translation id="1475502736924165259">لديك شهادات في الملف لا تندرج تحت أي فئة من الفئات الأخرى</translation>
 <translation id="1476088332184200792">‏نسخ إلى Your Device (جهازك)</translation>
 <translation id="1476607407192946488">إ&amp;عدادات اللغة</translation>
+<translation id="1477446329585670721">يتطلّب النطاق <ph name="DOMAIN" /> منك الإبقاء على بطاقتك الذكية مُدخَلة.</translation>
 <translation id="1478340334823509079">التفاصيل: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">التثبيت غير مُفعَّل</translation>
 <translation id="1481537595330271162">حدث خطأ أثناء تغيير حجم القرص.</translation>
@@ -932,7 +932,6 @@
 يمكنك إدارة إعدادات هذا الحساب من خلال تثبيت تطبيق Family Link على جهازك.  ولقد أرسلنا لك التعليمات في رسالة إلكترونية.</translation>
 <translation id="2040460856718599782">عفوًا، حدث خطأ ما أثناء محاولة مصادقتك. يُرجى التحقق جيدًا من بيانات اعتماد تسجيل الدخول وإعادة المحاولة.</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{لديك كلمة مرور واحدة محتمَل تعرّضها للاختراق}zero{لديك # كلمة مرور محتمَل تعرّضها للاختراق}two{لديك كلمتا مرور محتمَل تعرّضهما للاختراق}few{لديك # كلمات مرور محتمَل تعرّضها للاختراق}many{لديك # كلمة مرور محتمَل تعرّضها للاختراق}other{لديك # كلمة مرور محتمَل تعرّضها للاختراق}}</translation>
-<translation id="2040863272941698761">‏إعداد نظام التشغيل Linux</translation>
 <translation id="204497730941176055">‏اسم قالب الشهادات لـ Microsoft</translation>
 <translation id="2045117674524495717">مساعد اختصارات لوحة المفاتيح</translation>
 <translation id="2045969484888636535">متابعة حظر تشغيل ملفات تعريف الارتباط</translation>
@@ -1045,7 +1044,7 @@
 <translation id="2165421703844373933">‏الوصول إلى "مساعد Google" عند قول "Ok Google" لتوفير طاقة البطارية، اختَر "تفعيل (مُقترح)". ولن يستجيب "مساعد Google" إلا عند توصيل جهازك بمصدر طاقة أو شحنه.</translation>
 <translation id="2166369534954157698">أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ</translation>
 <translation id="2169062631698640254">تسجيل الدخول على أيّ حال</translation>
-<translation id="2170054054876170358">‏يُرجى التأكد من أن هاتفك قريب ومن تفعيل اتصال شبكة البلوتوث وشبكة Wi-Fi.</translation>
+<translation id="2170054054876170358">‏يُرجى التأكد من أن هاتفك قريب وغير مُقفل وتم تفعيل بلوتوث وWi-Fi فيه.</translation>
 <translation id="2172784515318616985">متابعة</translation>
 <translation id="2173302385160625112">يُرجى التحقُّق من اتصال الإنترنت</translation>
 <translation id="2173801458090845390">إضافة معرّف الطلبات إلى هذا الجهاز</translation>
@@ -1264,8 +1263,6 @@
 <translation id="2428510569851653187">وصف ما كنت تفعله عندما تعطّلت علامة التبويب</translation>
 <translation id="2428939361789119025">‏إيقاف شبكة Wi-Fi</translation>
 <translation id="2431027948063157455">‏تعذّر تحميل مساعد Google، يُرجى التحقُّق من اتصال الشبكة وإعادة المحاولة.</translation>
-<translation id="2431846145771260397">‏هل تريد فعلاً حجز قرص بحجم ثابت لنظام التشغيل Linux (إصدار تجريبي)؟</translation>
-<translation id="2432753757290432042">‏تحديث Linux (إصدار تجريبي) مطلوب</translation>
 <translation id="2433452467737464329">‏إضافة معلمة لطلب البحث في عنوان URL لإعادة تحميل الصفحة تلقائيًا: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433490881840073798"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /> و<ph name="RECENT_PERMISSIONS_CHANGE" /></translation>
 <translation id="2433507940547922241">المظهر</translation>
@@ -1776,7 +1773,7 @@
 <translation id="3000461861112256445">صوت أحادي</translation>
 <translation id="3001144475369593262">حسابات الطفل</translation>
 <translation id="3003144360685731741">الشبكات المُفضلة</translation>
-<translation id="3003189754374775221">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، موفِّر الشبكة <ph name="NETWORK_PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، الاتصال</translation>
+<translation id="3003189754374775221">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="NETWORK_PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، الاتصال</translation>
 <translation id="3003623123441819449">‏ذاكرة التخزين المؤقت للغة CSS</translation>
 <translation id="3003828226041301643">يتعذَّر ضم الجهاز إلى النطاق. يُرجى التحقُّق من حسابك للتأكُّد من حصولك على امتيازات لإضافة الأجهزة.</translation>
 <translation id="3003967365858406397">‏سينشئ هاتف <ph name="PHONE_NAME" /> اتصالاً خاصًا بشبكة Wi-Fi.</translation>
@@ -1828,7 +1825,7 @@
 <translation id="3058498974290601450">يمكنك تفعيل المزامنة في أي وقت في الإعدادات.</translation>
 <translation id="3060379269883947824">تفعيل الاختيار والاستماع</translation>
 <translation id="3060952009917586498">تغيير لغة الجهاز اللغة الحالية هي <ph name="LANGUAGE" />.</translation>
-<translation id="3060987956645097882">‏تعذَّر علينا إنشاء اتصال بهاتفك. يُرجى التأكد من أن هاتفك قريب ومن تفعيل اتصال شبكة البلوتوث وشبكة Wi-Fi.</translation>
+<translation id="3060987956645097882">‏تعذَّر علينا إنشاء اتصال بهاتفك. يُرجى التأكد من أن هاتفك قريب وغير مُقفل وتم تفعيل بلوتوث وWi-Fi فيه.</translation>
 <translation id="3065041951436100775">التعليقات المرتبطة بعلامة التبويب المعطلة.</translation>
 <translation id="306535478112428611">المواقع الإلكترونية التي لا يُسمح لها بتعديل الملفات والمجلدات على جهازك</translation>
 <translation id="3065522099314259755">وقت استجابة التكرار في لوحة المفاتيح</translation>
@@ -1885,7 +1882,7 @@
 <translation id="3129215702932019810">حدث خطأ أثناء تشغيل التطبيق</translation>
 <translation id="3130528281680948470">ستتم إعادة ضبط جهازك وستتم إزالة كل حسابات المستخدمين والبيانات المحلية. ولا يمكن التراجع عن ذلك.</translation>
 <translation id="313205617302240621">هل نسيت كلمة المرور؟</translation>
-<translation id="3132277757485842847">‏تعذَّر علينا المحافظة على الاتصال بهاتفك. يُرجى التأكد من أن هاتفك قريب ومن تفعيل اتصال شبكة البلوتوث وشبكة Wi-Fi.</translation>
+<translation id="3132277757485842847">‏تعذَّر علينا المحافظة على الاتصال بهاتفك. يُرجى التأكد من أن هاتفك قريب وغير مُقفل وتم تفعيل بلوتوث وWi-Fi فيه.</translation>
 <translation id="3132996321662585180">إعادة التحميل يوميًا</translation>
 <translation id="313963229645891001">جارٍ التنزيل، <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">الصورة الرمزية التلقائية الصفراء</translation>
@@ -1981,6 +1978,7 @@
 <translation id="3264544094376351444">‏خط Sans-serif</translation>
 <translation id="3264582393905923483">السياق</translation>
 <translation id="3265459715026181080">إغلاق الإطار</translation>
+<translation id="3266022278425892773">‏بيئة تطوير نظام التشغيل Linux</translation>
 <translation id="3266179261140759675">منع المواقع الإلكترونية التي تم إغلاقها مؤخرًا من إرسال البيانات واستلامها</translation>
 <translation id="3266274118485960573">"تأكيد السلامة" قيد التشغيل.</translation>
 <translation id="3267726687589094446">متابعة السماح بعمليات التنزيل التلقائية لعدة ملفات</translation>
@@ -2038,6 +2036,7 @@
 <translation id="3320630259304269485">التصفُّح الآمن (يوفّر حماية من المواقع الإلكترونية الضارة) وإعدادات الأمان الأخرى</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{تشتمل هذه البيانات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}=1{يشتمل هذا الملف على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}two{يشتمل هذان الملفان على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}few{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}many{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}other{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}}</translation>
 <translation id="3323521181261657960">إليك مكافأة. ستحظى بالمزيد من وقت النظر إلى الشاشة.</translation>
+<translation id="3325804108816646710">جارٍ البحث عن ملفات شخصية متوفّرة...</translation>
 <translation id="3325910708063135066">‏تم إيقاف الكاميرا والميكروفون في إعدادات نظام Mac المفضلة</translation>
 <translation id="3327050066667856415">‏يتم تصميم أجهزة Chromebook للحفاظ على الأمان. جهازك محمي من البرامج الضارة بشكل تلقائي ولا يتطلب أي برامج إضافية.</translation>
 <translation id="3328489342742826322">‏ستؤدي الاستعادة من نسخة احتياطية إلى حذف تطبيقات Linux الحالية والبيانات في مجلد "ملفات Linux".</translation>
@@ -2105,6 +2104,7 @@
 <translation id="3412265149091626468">انتقال سريع إلى التحديد</translation>
 <translation id="3413122095806433232">‏جهات إصدار المرجع المصدق (CA): <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">الحجم:</translation>
+<translation id="3414966631182382431"><ph name="BEGIN_LINK" />تتم إدارة متصفِّحك<ph name="END_LINK" /> من خلال <ph name="MANAGER" />.</translation>
 <translation id="3416468988018290825">‏عرض عناوين URL الكاملة دائمًا</translation>
 <translation id="3417835166382867856">البحث في علامات التبويب</translation>
 <translation id="3417836307470882032">التوقيت العسكري</translation>
@@ -2279,7 +2279,6 @@
 <translation id="3600051066689725006">معلومات طلب الويب</translation>
 <translation id="3600792891314830896">كتم صوت المواقع الإلكترونية التي تشغّل الصوت</translation>
 <translation id="360180734785106144">عرض ميزات جديدة عندما تصبح متاحة</translation>
-<translation id="3602198818276948261">‏لا تتيح الحاوية الخاصة بك تغيير حجم القرص. لضبط مقدار المساحة المخصّصة لنظام Linux (إصدار تجريبي)، يُرجى الاحتفاظ بنسخة احتياطية ثم استعادتها في حاوية جديدة.</translation>
 <translation id="3602290021589620013">معاينة</translation>
 <translation id="3603622770190368340">الحصول على شهادة الشبكة</translation>
 <translation id="3604713164406837697">تغيير الخلفية</translation>
@@ -2927,7 +2926,7 @@
 <translation id="4378551569595875038">جارٍ الاتصال...</translation>
 <translation id="4378556263712303865">طلب الجهاز</translation>
 <translation id="4379281552162875326">هل تريد إلغاء تثبيت "<ph name="APP_NAME" />"؟</translation>
-<translation id="4380245540200674032">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، موفِّر الشبكة <ph name="NETWORK_PROVIDER_NAME" />، حالة الاتصال <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، يدير المشرف هذه الشبكة، التفاصيل</translation>
+<translation id="4380245540200674032">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="NETWORK_PROVIDER_NAME" />، <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، يدير المشرف هذه الشبكة، التفاصيل</translation>
 <translation id="4380648069038809855">الدخول إلى وضع ملء الشاشة</translation>
 <translation id="4382131447572146376">{COUNT,plural, =0{<ph name="EMAIL" />}=1{<ph name="EMAIL" /> وحساب واحد آخر}two{<ph name="EMAIL" /> وحسابان آخران (<ph name="EXTRA_ACCOUNTS" />)}few{<ph name="EMAIL" /> و<ph name="EXTRA_ACCOUNTS" /> حسابات أخرى}many{<ph name="EMAIL" /> و<ph name="EXTRA_ACCOUNTS" /> حسابًا آخر}other{<ph name="EMAIL" /> و<ph name="EXTRA_ACCOUNTS" /> حساب آخر}}</translation>
 <translation id="4384312707950789900">إضافة إلى الشبكات المُفضلة</translation>
@@ -3177,6 +3176,7 @@
 <translation id="4651484272688821107">تعذَّر تحميل المكوِّن على الإنترنت باستخدام موارد الوضع التجريبي.</translation>
 <translation id="4652935475563630866">‏يتطلب تغيير إعدادات الكاميرا إعادة تشغيل نظام Parallels Desktop. أعِد تشغيل نظام Parallels Desktop للمتابعة.</translation>
 <translation id="4653405415038586100">‏حدث خطأ أثناء إعداد نظام التشغيل Linux.</translation>
+<translation id="4657914796247705218">‏سرعة TrackPoint</translation>
 <translation id="465878909996028221">‏يمكن إعادة توجيه المتصفّح باستخدام بروتوكولات الملف وhttp وhttps فقط.</translation>
 <translation id="4659077111144409915">الحساب الأساسي</translation>
 <translation id="4659126640776004816">‏عند تسجيل الدخول إلى حسابك على Google، يتم تفعيل هذه الميزة.</translation>
@@ -3351,7 +3351,7 @@
 <translation id="4880827082731008257">سجلّ البحث</translation>
 <translation id="4881695831933465202">فتح</translation>
 <translation id="4882312758060467256">يمكنها الوصول إلى الموقع الإلكتروني هذا</translation>
-<translation id="4882670371033027418">يمكنك إعداد بصمة الإصبع لفتح قفل الجهاز <ph name="DEVICE_TYPE" /> بشكل أسرع.</translation>
+<translation id="4882670371033027418">إعداد بصمة الإصبع لفتح قفل الجهاز <ph name="DEVICE_TYPE" /> بشكل أسرع</translation>
 <translation id="4882831918239250449">التحكُّم في كيفية استخدامنا لسِجل التصفُّح الخاص بك لتخصيص البحث والإعلانات والمزيد</translation>
 <translation id="4882919381756638075">تستخدم المواقع الإلكترونية عادةً الميكروفون لتتيح ميزات التواصل، مثل محادثة الفيديو.</translation>
 <translation id="4883436287898674711">جميع مواقع <ph name="WEBSITE_1" /></translation>
@@ -3376,7 +3376,7 @@
 <translation id="4902546322522096650">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، حالة الأمان <ph name="SECURITY_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، الاتصال</translation>
 <translation id="49027928311173603">السياسة التي تم تنزيلها من الخادم غير صالحة: <ph name="VALIDATION_ERROR" />.</translation>
 <translation id="4906490889887219338">إعداد خوادم مشاركة الملفات على الشبكة أو إدارتها <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
-<translation id="4906580650526544301">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الهاتف <ph name="PHONE_NAME" />، موفِّر الشبكة <ph name="PROVIDER_NAME" />، حالة الاتصال <ph name="CONNECTION_STATUS" />%، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، بطارية الهاتف <ph name="BATTERY_STATUS" />%، التفاصيل</translation>
+<translation id="4906580650526544301">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="PHONE_NAME" />، <ph name="PROVIDER_NAME" />، <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، بطارية الهاتف <ph name="BATTERY_STATUS" />%، التفاصيل</translation>
 <translation id="4907161631261076876">لا يتم تنزيل هذا الملف بشكل شائع وقد يكون ضارًا.</translation>
 <translation id="4907306957610201395">فئة الإذن</translation>
 <translation id="4908811072292128752">فتح علامة تبويب جديدة لتصفح موقعي ويب في وقت واحد</translation>
@@ -3400,6 +3400,7 @@
 <translation id="4925542575807923399">يحتاج مشرف هذا الحساب أن يكون هذا الحساب الأول في تسجيل الدخول إلى جلسة دخول متعدد.</translation>
 <translation id="4927753642311223124">ليس هناك شيء تراه هنا، انتقل إلى مكان آخر.</translation>
 <translation id="4929386379796360314">وجهات الطباعة</translation>
+<translation id="4930447554870711875">مطوّرو البرامج</translation>
 <translation id="4930714375720679147">تفعيل</translation>
 <translation id="4932733599132424254">التاريخ</translation>
 <translation id="4933484234309072027">مضمن في <ph name="URL" /></translation>
@@ -3837,6 +3838,7 @@
 <translation id="5470735824776589490">‏يلزم إعادة تشغيل الجهاز حتى يتسنى لك إعادة ضبطه باستخدام Powerwash. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">مرحبًا! هذا صوت ميزة تحويل النص إلى كلام.</translation>
 <translation id="5472627187093107397">حفظ كلمات المرور لهذا الموقع الإلكتروني</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{يجب ألا يقلّ رقم التعريف الشخصي عن حرف واحد.}zero{يجب ألا يقلّ رقم التعريف الشخصي عن # حرف.}two{يجب ألا يقلّ رقم التعريف الشخصي عن حرفَين.}few{يجب ألا يقلّ رقم التعريف الشخصي عن # أحرف.}many{يجب ألا يقلّ رقم التعريف الشخصي عن # حرفًا.}other{يجب ألا يقلّ رقم التعريف الشخصي عن # حرف.}}</translation>
 <translation id="5473333559083690127">إعادة إدخال رقم التعريف الشخصي الجديد</translation>
 <translation id="5481273127572794904">المواقع الإلكترونية التي لا يُسمح لها بتنزيل الملفات المتعدّدة تلقائيًا</translation>
 <translation id="5481941284378890518">إضافة طابعات مجاورة</translation>
@@ -3953,7 +3955,6 @@
 <translation id="558918721941304263">جارٍ تحميل التطبيقات...</translation>
 <translation id="5592595402373377407">لم تتوفر بيانات كافية بعد.</translation>
 <translation id="5595485650161345191">تعديل العنوان</translation>
-<translation id="5595727715083333657">‏لا يُسمح بتغيير حجم الحاوية الخاصة بك. لضبط مقدار المساحة التي تم تخصيصها مسبقًا لنظام Linux (إصدار تجريبي)، يُرجى الاحتفاظ بنسخة احتياطية ثم استعادتها في حاوية جديدة.</translation>
 <translation id="5596627076506792578">خيارات إضافية</translation>
 <translation id="5600706100022181951">سيستهلك تنزيل التحديث <ph name="UPDATE_SIZE_MB" /> ميغابايت من بيانات الجوّال. هل ترغب في المتابعة؟</translation>
 <translation id="5601503069213153581">رقم التعريف الشخصي</translation>
@@ -4205,7 +4206,6 @@
 <translation id="5893589697005440881">شارِك الملفات مع الأشخاص من حولك.</translation>
 <translation id="5895138241574237353">إعادة التشغيل</translation>
 <translation id="5900302528761731119">‏صورة الملف الشخصي في Google</translation>
-<translation id="5900358982890952556">‏ترقية نظام التشغيل Linux (إصدار تجريبي)</translation>
 <translation id="5901494423252125310">باب الطابعة مفتوح</translation>
 <translation id="5901630391730855834">أصفر</translation>
 <translation id="5904614460720589786">تعذّر إعداد <ph name="APP_NAME" /> بسبب مشكلة في الضبط. يُرجى التواصل مع مشرفك. رمز الخطأ: <ph name="ERROR_CODE" />.</translation>
@@ -4318,7 +4318,7 @@
 <translation id="6031600495088157824">خيارات الإدخال في شريط الأدوات</translation>
 <translation id="6032715498678347852">للسماح للإضافة بالوصول إلى بيانات هذا الموقع الإلكتروني، انقر على الإضافة.</translation>
 <translation id="6032912588568283682">نظام الملفات</translation>
-<translation id="603539183851330738">‏زر التراجع عن التصحيح التلقائي. التراجع عن تصحيح كلمة <ph name="TYPED_WORD" />.  اضغط على مفتاح enter للتراجع عن التصحيح التلقائي، أو على مفتاح escape للتجاهل.</translation>
+<translation id="603539183851330738">‏زر التراجع عن التصحيح التلقائي. يمكنك التراجع عن تصحيح كلمة <ph name="TYPED_WORD" />.  اضغط على مفتاح enter للتراجع عن التصحيح التلقائي، أو على مفتاح escape للتجاهل.</translation>
 <translation id="6035517790085323771">من يمكنه مشاركة الملفات مع جهازك</translation>
 <translation id="6038929619733116134">الحظر في حال كان الموقع الإلكتروني يعرض إعلانات مضلِّلة أو غير مرغوب فيها</translation>
 <translation id="6039651071822577588">قاموس خصائص الشبكة غير صالح</translation>
@@ -4377,6 +4377,7 @@
 <translation id="6087960857463881712">وجه رائع</translation>
 <translation id="6091761513005122595">تم تحميل المشاركة بنجاح.</translation>
 <translation id="6093888419484831006">جارٍ إلغاء التحديث...</translation>
+<translation id="6095541101974653012">تمّ الخروج من الحساب</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">فتح في وضع التكبير</translation>
 <translation id="6096326118418049043">‏اسم X.500</translation>
@@ -4672,6 +4673,7 @@
 <translation id="6434309073475700221">تجاهل</translation>
 <translation id="6434325376267409267">يجب تحديث الجهاز للتمكّن من استخدام <ph name="APP_NAME" />.</translation>
 <translation id="6436164536244065364">عرض في السوق الإلكتروني</translation>
+<translation id="6438234780621650381">إعادة ضبط الإعدادات</translation>
 <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - تشغيل الصوت</translation>
 <translation id="6442187272350399447">الروعة</translation>
 <translation id="6444070574980481588">تعيين التاريخ والوقت</translation>
@@ -4710,6 +4712,7 @@
 <translation id="6474884162850599008">‏إلغاء ربط حساب Google Drive</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> يود أن يشارك محتوى شاشتك. اختر ما ترغب في مشاركته.</translation>
 <translation id="6478248366783946499">هل تريد الاحتفاظ بالملف الضار؟</translation>
+<translation id="6480327114083866287">تتم الإدارة من خلال <ph name="MANAGER" /></translation>
 <translation id="6483485061007832714">فتح التنزيل</translation>
 <translation id="6483805311199035658">يجري فتح <ph name="FILE" />...</translation>
 <translation id="6488384360522318064">اختيار لغة</translation>
@@ -4898,6 +4901,7 @@
 <translation id="671928215901716392">قفل الشاشة</translation>
 <translation id="6721678857435001674">الاطّلاع على العلامة التجارية لمفتاح الأمان وطرازه.</translation>
 <translation id="6721972322305477112">&amp;ملف</translation>
+<translation id="672208878794563299">سيطلب هذا الموقع الإلكتروني الإذن في المرة القادمة.</translation>
 <translation id="672213144943476270">يُرجى فتح قفل ملفك الشخصي قبل التصفح كضيف.</translation>
 <translation id="6723661294526996303">استيراد الإشارات والإعدادات...</translation>
 <translation id="6723839937902243910">الطاقة</translation>
@@ -5015,7 +5019,7 @@
 <translation id="6853388645642883916">خدمة التحديث خاملة</translation>
 <translation id="68541483639528434">إغلاق علامات التبويب الأخرى</translation>
 <translation id="6855892664589459354">‏النسخ الاحتياطي واستعادة البيانات من نظام التشغيل Crostini</translation>
-<translation id="6856459657722366306">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، موفِّر الشبكة <ph name="NETWORK_PROVIDER_NAME" />، حالة الاتصال <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، التفاصيل</translation>
+<translation id="6856459657722366306">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="NETWORK_PROVIDER_NAME" />، <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، التفاصيل</translation>
 <translation id="6856623341093082836">إعداد دقة الشاشة التي تعمل باللمس وضبطها</translation>
 <translation id="6857699260879628349">الحصول على معلومات الضبط</translation>
 <translation id="6860097299815761905">إعدادات الخادم الوكيل...</translation>
@@ -5186,7 +5190,7 @@
 <translation id="7044124535091449260">مزيد من المعلومات عن إمكانية الوصول إلى الموقع الإلكتروني</translation>
 <translation id="7044606776288350625">مزامنة البيانات</translation>
 <translation id="7047059339731138197">اختيار خلفية</translation>
-<translation id="7048024426273850086">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الهاتف <ph name="PHONE_NAME" />، موفِّر الشبكة <ph name="PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، بطارية الهاتف <ph name="BATTERY_STATUS" />%، الاتصال</translation>
+<translation id="7048024426273850086">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="PHONE_NAME" />، <ph name="PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، بطارية الهاتف <ph name="BATTERY_STATUS" />%، الاتصال</translation>
 <translation id="7049293980323620022">هل تريد الاحتفاظ بالملف؟</translation>
 <translation id="7051943809462976355">جارٍ البحث عن الماوس...</translation>
 <translation id="7052237160939977163">إرسال بيانات تتبع مستوى الأداء</translation>
@@ -5383,7 +5387,6 @@
 <translation id="7284411326658527427">يمكن لكل شخص تخصيص حسابه والحفاظ على خصوصية بياناته.</translation>
 <translation id="7287143125007575591">تم رفض الدخول</translation>
 <translation id="7287411021188441799">استعادة الخلفية التلقائية</translation>
-<translation id="7288013116963835700">‏إزالة Linux من <ph name="DEVICE_TYPE" /></translation>
 <translation id="7288676996127329262">‏<ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> نقطة لكل بوصة</translation>
 <translation id="7289225569524511578">فتح تطبيق الخلفية</translation>
 <translation id="7290242001003353852">تحاول خدمة تسجيل الدخول هذه، المُستضافة من قبل <ph name="SAML_DOMAIN" />، الدخول إلى الكاميرا.</translation>
@@ -5769,7 +5772,6 @@
 <translation id="7730683939467795481">غيّرَت الإضافة "<ph name="EXTENSION_NAME" />" هذه الصفحة.</translation>
 <translation id="7732111077498238432">هناك سياسة تحكم هذه الشبكة</translation>
 <translation id="7737115349420013392">جارٍ الإقران مع "<ph name="DEVICE_NAME" />" ...</translation>
-<translation id="7737238973539693982">‏حذف Linux (إصدار تجريبي)</translation>
 <translation id="7737948071472253612">المواقع الإلكترونية التي لا يُسمح لها باستخدام الكاميرا</translation>
 <translation id="7740996059027112821">عادي</translation>
 <translation id="7742706086992565332">يمكنك ضبط مستوى التكبير أو التصغير على بعض المواقع الإلكترونية.</translation>
@@ -6239,7 +6241,6 @@
 <translation id="825238165904109940">‏عرض عناوين URL الكاملة دائمًا</translation>
 <translation id="8252569384384439529">جارٍ التحميل...</translation>
 <translation id="8253198102038551905">انقر '+' للحصول على خصائص الشبكة</translation>
-<translation id="8254954272268479918">‏إيقاف تطبيق Linux (إصدار تجريبي)</translation>
 <translation id="8255451560461371599">لا تتوفر خلفية</translation>
 <translation id="8256319818471787266">اللامع</translation>
 <translation id="8257950718085972371">متابعة حظر الدخول إلى الكاميرا</translation>
@@ -6298,6 +6299,7 @@
 <translation id="8317671367883557781">إضافة اتصال شبكة</translation>
 <translation id="8319414634934645341">استخدام المفتاح الموسع</translation>
 <translation id="8320459152843401447">شاشتك بأكملها</translation>
+<translation id="8321837372750396788">ستتم إدارة جهاز <ph name="DEVICE_TYPE" /> هذا من خلال <ph name="MANAGER" />.</translation>
 <translation id="8322814362483282060">تم حظر دخول هذه الصفحة إلى الميكروفون التابع لك.</translation>
 <translation id="8323167517179506834">‏اكتب عنوان URL</translation>
 <translation id="8324784016256120271">يسمح هذا الإجراء للمواقع الإلكترونية باستخدام ملفات تعريف الارتباط للاطّلاع على نشاط التصفُّح الخاص بك على المواقع الإلكترونية المختلفة، وذلك لتقديم إعلانات مخصَّصة لك مثلاً.</translation>
@@ -6605,6 +6607,7 @@
 <translation id="8698269656364382265">للرجوع إلى الشاشة السابقة، مرِّر سريعًا من الجانب الأيمن.</translation>
 <translation id="869884720829132584">قائمة التطبيقات</translation>
 <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation>
+<translation id="8702825062053163569">تم قفل الجهاز <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8703346390800944767">تخطي الإعلان</translation>
 <translation id="8705331520020532516">الرقم التسلسلي</translation>
 <translation id="8705580154597116082">‏اتصال Wi-Fi متاح عبر الهاتف</translation>
@@ -6648,7 +6651,7 @@
 <translation id="8737914367566358838">يُرجى اختيار اللغة التي تريد ترجمة الصفحة إليها.</translation>
 <translation id="8740247629089392745">‏يمكنك تسليم جهاز Chromebook هذا إلى <ph name="SUPERVISED_USER_NAME" />. أوشك الإعداد على الانتهاء. بعد ذلك، يمكنك استكشاف محتوى الجهاز.</translation>
 <translation id="8742998548129056176">‏هذه معلومات عامة حول جهازك وطريقة استخدامك له (مثل مستوى البطارية، ونشاط النظام والتطبيقات، والأخطاء). ويتم استخدام هذه البيانات من أجل تحسين Android، كما سيستفيد مطوّرو التطبيقات والشركاء في Google، مثل مطوّري البرامج المتوافقة مع Android، من بعض المعلومات المجمّعة لتحسين أداء تطبيقاتهم ومنتجاتهم.</translation>
-<translation id="8743164338060742337">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، موفِّر الشبكة <ph name="NETWORK_PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، يدير المشرف هذه الشبكة، الاتصال</translation>
+<translation id="8743164338060742337">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="NETWORK_PROVIDER_NAME" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />%، يدير المشرف هذه الشبكة، الاتصال</translation>
 <translation id="8743390665131937741">مستوى التكبير بملء الشاشة:</translation>
 <translation id="8743864605301774756">تم التحديث قبل ساعة واحدة</translation>
 <translation id="8746654918629346731">لقد سبق أن طلبت "<ph name="EXTENSION_NAME" />"</translation>
@@ -6752,7 +6755,7 @@
 <translation id="8830796635868321089">تعذّر البحث عن التحديثات باستخدام إعدادات الخادم الوكيل الحالية. يُرجى ضبط <ph name="PROXY_SETTINGS_LINK_START" />إعدادات الخادم الوكيل<ph name="PROXY_SETTINGS_LINK_END" />.</translation>
 <translation id="8831140208248705279">‏يعمل جهاز <ph name="DEVICE_TYPE" /> وهاتف Android بشكلٍ أفضل معًا. ويمكنك ربطهما حتى تتمكَّن من إرسال رسائل نصية من جهاز الكمبيوتر ومشاركة اتصالك بالإنترنت وفتح قفل جهاز Chromebook باستخدام هاتفك.<ph name="DEVICE_TYPE" /><ph name="FOOTNOTE_POINTER" /><ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="8834039744648160717">يتم التحكم في إعداد الشبكة بواسطة <ph name="USER_EMAIL" />.</translation>
-<translation id="8835786707922974220">تأكّد من أنك دائمًا تستطيع الوصول إلى كلمات المرور المحفوظة</translation>
+<translation id="8835786707922974220">ضمان إمكانية الوصول إلى كلمات المرور المحفوظة دائمًا</translation>
 <translation id="8838601485495657486">معتم</translation>
 <translation id="8838770651474809439">هامبورجر</translation>
 <translation id="883911313571074303">إضافة تعليق توضيحي على الصورة</translation>
@@ -6977,7 +6980,6 @@
 <translation id="9088917181875854783">يُرجى التأكيد أن مفتاح المرور هذا يظهر على "<ph name="DEVICE_NAME" />":</translation>
 <translation id="9089416786594320554">أساليب الإدخال</translation>
 <translation id="909108997331068008">الحساب <ph name="NEW_USER" /> مستخدَم حاليًا مع ملف <ph name="EXISTING_USER" /> الشخصي.</translation>
-<translation id="9093429538970210897">‏ننصحك بالاحتفاظ بنسخة احتياطية من الملفات في حال تعذُّر اكتمال عملية الترقية. وسيؤدي بدء الترقية إلى إيقاف تشغيل نظام التشغيل Linux (إصدار تجريبي). يُرجى حفظ الملفات المفتوحة قبل المتابعة.</translation>
 <translation id="9094033019050270033">تحديث كلمة المرور</translation>
 <translation id="9094038138851891550">اسم المستخدم غير صالح</translation>
 <translation id="9094982973264386462">إزالة</translation>
@@ -7056,7 +7058,6 @@
 <translation id="9176476835295860688">‏يمكنك إرسال بيانات الاستخدام والتشخيص. يرسل هذا الجهاز حاليًا بيانات استخدام التطبيق والجهاز والتشخيص تلقائيًا إلى Google. سيساعد ذلك في استقرار عمل النظام والتطبيقات، بالإضافة إلى التحسينات الأخرى. كما ستساعد بعض البيانات المجمّعة تطبيقات Google وشركائها، مثل مطوّري برامج نظام التشغيل Android. ويفرض المالك هذا <ph name="BEGIN_LINK1" />الإعداد<ph name="END_LINK1" />. في حال تفعيل إعداد "النشاط الإضافي على الويب وفي التطبيقات"، قد يتم حفظ هذه البيانات في حسابك على Google. <ph name="BEGIN_LINK2" />مزيد من المعلومات<ph name="END_LINK2" /></translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - جهاز البلوتوث متصل</translation>
 <translation id="9179524979050048593">اسم المستخدم في شاشة تسجيل الدخول</translation>
-<translation id="9179734824669616955">‏إعداد نظام التشغيل Linux (الإصدار التجريبي) على جهاز <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">‏قد تستغرق هذه العملية بضع دقائق. جارٍ بدء تشغيل حاوية نظام التشغيل Linux.</translation>
 <translation id="9180380851667544951">يمكن للموقع الإلكتروني مشاركة شاشتك.</translation>
 <translation id="9186963452600581158">‏تسجيل الدخول باستخدام حساب طفل على Google</translation>
@@ -7097,7 +7098,6 @@
 <translation id="93610034168535821">مساحة التخزين المستخدمة من قِبل المواقع الإلكترونية:</translation>
 <translation id="936801553271523408">بيانات تشخيص النظام</translation>
 <translation id="93766956588638423">إصلاح الإضافة</translation>
-<translation id="938339467127511841">‏مساحة تخزين نظام التشغيل Linux (نسخة تجريبية)</translation>
 <translation id="938470336146445890">يُرجى تثبيت شهادة مستخدم.</translation>
 <translation id="939252827960237676">تعذّر حفظ لقطة الشاشة</translation>
 <translation id="939519157834106403">SSID</translation>
@@ -7132,7 +7132,7 @@
 <translation id="971774202801778802">‏عنوان URL للإشارة</translation>
 <translation id="973473557718930265">إنهاء</translation>
 <translation id="975893173032473675">اللغة التي تريد الترجمة إليها</translation>
-<translation id="976499800099896273">‏يظهر مربّع حوار التراجع عن التصحيح التلقائي لكلمة <ph name="TYPED_WORD" />، والتي تم تصحيحها بلكمة <ph name="CORRECTED_WORD" />.  اضغط على مفتاح السهم المتّجه للأعلى للتراجع عن التصحيح التلقائي، أو اضغط على مفتاح escape للتجاهل.</translation>
+<translation id="976499800099896273">‏يُظهر مربّع الحوار إمكانية التراجع عن التصحيح التلقائي لكلمة <ph name="TYPED_WORD" /> التي تم تصحيحها بكلمة <ph name="CORRECTED_WORD" />.  اضغط على مفتاح السهم المتّجه للأعلى للتراجع عن التصحيح التلقائي، أو اضغط على مفتاح escape للتجاهل.</translation>
 <translation id="978146274692397928">العرض الأولي لعلامات الترقيم هو عرض بالكامل</translation>
 <translation id="97905529126098460">سيتم إغلاق هذه النافذة بعد اكتمال عملية الإلغاء.</translation>
 <translation id="980731642137034229">زر قائمة الإجراءات</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index a0eca75..d078e48 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -61,7 +61,6 @@
 <translation id="1060292118287751956">স্ক্ৰীনখন আপডে’ট হোৱা সঘনতা নিৰ্দিষ্ট কৰে</translation>
 <translation id="1061904396131502319">ডিভাইচ লক হওঁ হওঁ</translation>
 <translation id="1067048845568873861">সৃষ্টি কৰা হ’ল</translation>
-<translation id="1067291318998134776">Linux (বিটা)</translation>
 <translation id="1067922213147265141">অন্য Google সেৱা</translation>
 <translation id="1070066693520972135">ডব্লিউইপি</translation>
 <translation id="1070377999570795893">আপোনাৰ কম্পিউটাৰৰ অন্য প্ৰ’গামে যোগ কৰা এক্সটেনশ্বনে Chrome কার্যপ্ৰণালী সলনি কৰিব পাৰে।
@@ -926,7 +925,6 @@
 আপুনি নিজৰ ডিভাইচত Family Link এপ্‌টো ইনষ্টল কৰি এই একাউণ্টটোৰ ছেটিংসমূহ পৰিচালনা কৰিব পাৰে।  আমি এটা মেইলৰ জৰিয়তে আপোনালৈ নির্দেশনাৱলী পঠিয়াইছোঁ।</translation>
 <translation id="2040460856718599782">ওঁহ!  আপোনাৰ বিশ্বাসযোগ্যতা প্ৰমাণ কৰোঁতে কিবা ভুল হ’ল।  অনুগ্ৰহ কৰি আপোনাৰ ছাইন ইন কৰা ক্ৰেডেনশ্বিয়েলসমূহ ভালদৰে পৰীক্ষা কৰি আকৌ চেষ্টা কৰক।</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{আপোনাৰ ১ টা হেক কৰা পাছৱৰ্ড আছে}one{আপোনাৰ # টা হেক কৰা পাছৱৰ্ড আছে}other{আপোনাৰ # টা হেক কৰা পাছৱৰ্ড আছে}}</translation>
-<translation id="2040863272941698761">Linux ছেট আপ কৰক</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
 <translation id="2045117674524495717">কীব’ৰ্ডৰ শ্বৰ্টকাটৰ সহায়ক</translation>
 <translation id="2045969484888636535">কুকি অৱৰোধ কৰি থাকক</translation>
@@ -1258,8 +1256,6 @@
 <translation id="2428510569851653187">টেবটো ক্রেশ্ব হোৱাৰ সময়ত আপুনি কি কৰি আছিল সেয়া বর্ণনা কৰক</translation>
 <translation id="2428939361789119025">ৱাই-ফাই অফ কৰক</translation>
 <translation id="2431027948063157455">Google Assistant ল’ড কৰিব পৰা নগ’ল, অনুগ্ৰহ কৰি আপোনাৰ নেটৱর্ক সংযোগ পৰীক্ষা কৰি পুনৰ চেষ্টা কৰক।</translation>
-<translation id="2431846145771260397">আপুনি Linuxৰ (বিটা) বাবে এখন নিৰ্দিষ্ট আকাৰৰ ডিস্ক সংৰক্ষণ কৰিব বিচাৰে বুলি নিশ্চিতনে?</translation>
-<translation id="2432753757290432042">Linux (বিটা) আপডে’টৰ আৱশ্যক</translation>
 <translation id="2433452467737464329">পৃষ্ঠাটো স্বয়ংক্ৰিয়ভাৱে ৰিফ্রে’শ্ব কৰিবলৈ URLত সন্ধানৰ এটা পৰম যোগ কৰক: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433490881840073798"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE" /></translation>
 <translation id="2433507940547922241">ৰূপ</translation>
@@ -1974,6 +1970,7 @@
 <translation id="3264544094376351444">Sans-serif ফ’ণ্ট</translation>
 <translation id="3264582393905923483">প্ৰসংগ</translation>
 <translation id="3265459715026181080">ৱিণ্ড’ বন্ধ কৰক</translation>
+<translation id="3266022278425892773">Linux বিকাশৰ পৰিৱেশ</translation>
 <translation id="3266179261140759675">বন্ধ কৰি থোৱা ছাইটসমূহক তথ্য পঠিয়াব আৰু লাভ কৰিব নোৱৰাকৈ অৱৰোধ কৰক</translation>
 <translation id="3266274118485960573">সুৰক্ষা পৰীক্ষা চলি আছে।</translation>
 <translation id="3267726687589094446">একাধিক ফাইল স্বয়ংক্ৰিয়ভাৱে ডাউনল’ড হোৱাৰ অনুমতি দি থাকক</translation>
@@ -2272,7 +2269,6 @@
 <translation id="3600051066689725006">ৱেবৰ অনুৰোধ তথ্য</translation>
 <translation id="3600792891314830896">ধ্বনি প্লে’ কৰা ছাটসমূহ মিউট কৰক</translation>
 <translation id="360180734785106144">নতুন ফলাফলবোৰ উপলব্ধ হোৱাৰ লগে লগেই আগবঢ়োৱা হ’ব</translation>
-<translation id="3602198818276948261">আপোনাৰ কণ্টেইনাৰটো ডিস্কৰ আকাৰ সলনি কৰা সুবিধাটো সমৰ্থিত হোৱাকৈ কনফিগাৰ কৰা হোৱা নাই। Linux (বিটা)ৰ বাবে আৰক্ষিত ঠাইখিনিৰ পৰিমাণ মিলাবলৈ বেক আপ লওক আৰু তাৰ পাছত এটা নতুন কণ্টেইনাৰত পুনঃস্থাপন কৰক।</translation>
 <translation id="3602290021589620013">পূৰ্বদৰ্শন</translation>
 <translation id="3603622770190368340">নেটৱর্কৰ প্ৰমাণপত্ৰ পাওক</translation>
 <translation id="3604713164406837697">ৱালপেপাৰ সলনি কৰক</translation>
@@ -3392,6 +3388,7 @@
 <translation id="4925542575807923399">এই একাউণ্টৰ প্ৰশাসকে এই একাউণ্টটো একাধিকবাৰ ছাইন-ইন কৰা কোনো ছেশ্বনত প্ৰথমে ছাইন ইন কৰাটো বিচাৰে।</translation>
 <translation id="4927753642311223124">ইয়াত চাবলৈ একো নাই, আগবাঢ়ি যাওক।</translation>
 <translation id="4929386379796360314">প্রিণ্টাৰৰ তালিকা আৰু ছেভ কৰাৰ বিকল্প</translation>
+<translation id="4930447554870711875">বিকাশকৰ্তা</translation>
 <translation id="4930714375720679147">অন কৰক</translation>
 <translation id="4932733599132424254">তাৰিখ</translation>
 <translation id="4933484234309072027"><ph name="URL" />ত এম্বেড কৰা হৈছে</translation>
@@ -3943,7 +3940,6 @@
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="5592595402373377407">এতিয়ালৈকে পৰ্যাপ্ত ডেটা উপলব্ধ হোৱা নাই।</translation>
 <translation id="5595485650161345191">ঠিকনা সম্পাদনা কৰক</translation>
-<translation id="5595727715083333657">আপোনাৰ কণ্টেইনাৰটোৱে ইয়াৰ আকাৰ সলনি কৰাটো সমৰ্থন নকৰে। Linux (বিটা)ৰ বাবে পূর্বে আৱণ্টন কৰা ঠাইখিনি মিলাবলৈ বেক আপ লওক আৰু তাৰ পাছত এটা নতুন কণ্টেইনাৰত পুনঃস্থাপন কৰক।</translation>
 <translation id="5596627076506792578">অধিক বিকল্প</translation>
 <translation id="5600706100022181951">আপডে’টটো ম’বাইল ডেটাৰ <ph name="UPDATE_SIZE_MB" /> এম.বি. ব্যৱহাৰ কৰি ডাউনল’ড কৰা হ’ব। আপুনি অব্যাহত ৰাখিবলৈ বিচাৰেনে?</translation>
 <translation id="5601503069213153581">পিন</translation>
@@ -4195,7 +4191,6 @@
 <translation id="5893589697005440881">আপোনাৰ ওচৰে-পাজৰে থকা লোকসকলৰ সৈতে ফাইল শ্বেয়াৰ কৰক</translation>
 <translation id="5895138241574237353">ৰিষ্টাৰ্ট কৰক</translation>
 <translation id="5900302528761731119">Google প্ৰ’ফাইলৰ চিত্ৰ</translation>
-<translation id="5900358982890952556">Linux (বিটা) আপগ্ৰে’ড কৰক</translation>
 <translation id="5901494423252125310">প্ৰিণ্টাৰৰ দুৱাৰ খোল খাই আছে</translation>
 <translation id="5901630391730855834">হালধীয়া</translation>
 <translation id="5904614460720589786">কনফিগাৰেশ্বন সম্পৰ্কীয় এটা সমস্যাৰ বাবে <ph name="APP_NAME" /> ছেট আপ কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক। আসোঁৱাহ ক’ড: <ph name="ERROR_CODE" />।</translation>
@@ -5367,7 +5362,6 @@
 <translation id="7284411326658527427">প্ৰতিগৰাকী ব্যক্তিয়ে তেওঁৰ একাউণ্ট ব্যক্তিগতকৰণ কৰিব পাৰে আৰু ডেটাখিনি ব্যক্তিগত কৰি ৰাখিব পাৰে।</translation>
 <translation id="7287143125007575591">এক্সেছ অস্বীকাৰ কৰা হৈছে।</translation>
 <translation id="7287411021188441799">ডিফ'ল্ট নেপথ্য পুনঃস্থাপন কৰক</translation>
-<translation id="7288013116963835700"><ph name="DEVICE_TYPE" />ৰ বাবে Linux আঁতৰাওক</translation>
 <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> dpi</translation>
 <translation id="7289225569524511578">ৱালপেপাৰ এপ্ খোলক</translation>
 <translation id="7290242001003353852"><ph name="SAML_DOMAIN" />এ হ’ষ্ট কৰা এই ছাইন-ইন-ৰ সেৱাটোৱে আপোনাৰ কেমেৰা এক্সেছ কৰি আছে।</translation>
@@ -5751,7 +5745,6 @@
 <translation id="7730683939467795481">"<ph name="EXTENSION_NAME" />" এক্সটেনশ্বনে এই পৃষ্ঠাখন সলনি কৰিছে</translation>
 <translation id="7732111077498238432">নেটৱৰ্কটো নীতিৰ দ্বাৰা নিয়ন্ত্ৰণ কৰা হয়</translation>
 <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"ৰ সৈতে পেয়াৰ কৰি থকা হৈছে …</translation>
-<translation id="7737238973539693982">Linux (বিটা) মচক</translation>
 <translation id="7737948071472253612">আপোনাৰ কেমেৰা ব্যৱহাৰ কৰাৰ অনুমতি নাই</translation>
 <translation id="7740996059027112821">মান্য</translation>
 <translation id="7742706086992565332">আপুনি কিছুমান নিৰ্দিষ্ট ৱেবছাইটত কিমান জুম ইন অথবা আউট কৰে সেয়া ছেট কৰিব পাৰে</translation>
@@ -6220,7 +6213,6 @@
 <translation id="825238165904109940">সদায় সম্পূর্ণ URLসমূহ দেখুৱাওক</translation>
 <translation id="8252569384384439529">আপল’ড কৰি থকা হৈছে...</translation>
 <translation id="8253198102038551905">নেটৱর্কৰ বৈশিষ্ট্যসমূহ পাবলৈ ‘+’ ত ক্লিক কৰক</translation>
-<translation id="8254954272268479918">Linux বন্ধ কৰক (বিটা)</translation>
 <translation id="8255451560461371599">নেপথ্যত একো নাই</translation>
 <translation id="8256319818471787266">স্পাৰ্কী</translation>
 <translation id="8257950718085972371">কেমেৰাৰ এক্সেছ অৱৰোধ কৰা কার্য অব্যাহত ৰাখক</translation>
@@ -6954,7 +6946,6 @@
 <translation id="9088917181875854783">অনুগ্ৰহ কৰি নিশ্চিত কৰক যে এই পাছকীটো "<ph name="DEVICE_NAME" />"ত দেখুওৱা হৈছে:</translation>
 <translation id="9089416786594320554">ইনপুট পদ্ধতি</translation>
 <translation id="909108997331068008"><ph name="EXISTING_USER" />ৰ প্ৰ’ফাইলটো ইতিমধ্যে <ph name="NEW_USER" />ত ছাইন ইন হৈ আছে</translation>
-<translation id="9093429538970210897">আপগ্ৰে’ডটো সম্পূৰ্ণ কৰিব নোৱৰাৰ ক্ষেত্ৰত ফাইলসমূহৰ বেক আপ লোৱাটো চুপাৰিছ কৰা হয়। আপগ্ৰে’ডটো আৰম্ভ কৰাৰ ফলত Linux (বিটা) বন্ধ হৈ যাব। আগবঢ়াৰ পূৰ্বে অনুগ্ৰহ কৰি খোল খাই থকা ফাইলসমূহ ছেভ কৰক।</translation>
 <translation id="9094033019050270033">পাছৱৰ্ড আপডে’ট কৰক</translation>
 <translation id="9094038138851891550">ব্যৱহাৰকাৰীৰ নাম অমান্য</translation>
 <translation id="9094982973264386462">আঁতৰাওক</translation>
@@ -7033,7 +7024,6 @@
 <translation id="9176476835295860688">ব্যৱহাৰ আৰু ডায়গন’ষ্টিক ডেটা পঠিয়াওক। ডিভাইচটোৱে বর্তমান স্বয়ংক্ৰিয়ভাৱে Googleলৈ ডায়েগন’ষ্টিক, ডিভাইচ আৰু এপ্‌ ব্যৱহাৰৰ ডেটা পঠিয়াই আছে। এইটোৱে ছিষ্টেম তথা এপৰ স্থিৰতা বৃদ্ধি কৰাত আৰু অন্য উন্নয়নত সহায় কৰিব। কিছুমান একত্ৰিত তথ্যই Google এপ্‌ আৰু Android বিকাশকৰ্তাৰ দৰে অংশীদাৰকো সহায় কৰিব। এই <ph name="BEGIN_LINK1" />ছেটিং<ph name="END_LINK1" />টো গৰাকীয়ে বলপূৰ্বকভাৱে সন্নিবিষ্ট কৰিছে। যদি আপোনাৰ অতিৰিক্ত ৱেব আৰু এপ্‌ কাৰ্যকলাপ ছেটিংটো সক্ষম কৰা থাকে, তেন্তে এই ডেটা আপোনাৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে। <ph name="BEGIN_LINK2" />অধিক জানক<ph name="END_LINK2" /></translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - ব্লুটুথ ডিভাইচ সংযোগ কৰা হ'ল</translation>
 <translation id="9179524979050048593">ছাইন-ইন স্ক্ৰীনৰ ব্যৱহাৰকাৰীৰ নাম</translation>
-<translation id="9179734824669616955">আপোনাৰ <ph name="DEVICE_TYPE" />ত Linux (বিটা) ছেট আপ কৰক</translation>
 <translation id="9180281769944411366">এই প্ৰক্ৰিয়াৰ বাবে কেইমিনিটমান সময় লাগিব পাৰে। Linux কণ্টেনাৰ আৰম্ভ কৰি থকা হৈছে।</translation>
 <translation id="9180380851667544951">আপোনাৰ স্ক্ৰীণ শ্বেয়াৰ কৰিব পৰা ছাইট</translation>
 <translation id="9186963452600581158">শিশুৰ Google একাউণ্টৰ জৰিয়তে ছাইন ইন কৰক</translation>
@@ -7074,7 +7064,6 @@
 <translation id="93610034168535821">ছাইটসমূহে ব্যৱহাৰ কৰা মুঠ ষ্ট’ৰেজ:</translation>
 <translation id="936801553271523408">ছিষ্টেমৰ ডায়েগন’ষ্টিক ডেটা</translation>
 <translation id="93766956588638423">এক্সটেনশ্বন মেৰামতি কৰক</translation>
-<translation id="938339467127511841">Linux (বিটা) সঞ্চয়াগাৰ</translation>
 <translation id="938470336146445890">অনুগ্ৰহ কৰি, কোনো ব্যৱহাৰকাৰীৰ প্ৰমাণপত্ৰ ইনষ্টল কৰক।</translation>
 <translation id="939252827960237676">স্ক্ৰীণশ্বট ছেভ কৰিব পৰা নগ’ল</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index f3ecce7..dc527ed 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -61,7 +61,6 @@
 <translation id="1060292118287751956">Ekranın güncəllənmə tezliyini təyin edir</translation>
 <translation id="1061904396131502319">Fasilə vaxtıdır</translation>
 <translation id="1067048845568873861">Yaradılıb</translation>
-<translation id="1067291318998134776">Linux (Beta)</translation>
 <translation id="1067922213147265141">Digər Google xidmətləri</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1070377999570795893">Kompüterinizdə başqa bir proqram Chrome'un necə işlədiyini dəyişdirən artırma əlavə etdi. <ph name="EXTENSION_NAME" /></translation>
@@ -431,6 +430,7 @@
 <translation id="1475502736924165259">Digər kateqoriyalardan heç birinə uyğun olmayan faylda sertifikatlarınız var</translation>
 <translation id="1476088332184200792">Cihazınıza Kopyalayın</translation>
 <translation id="1476607407192946488">&amp;Dil Ayarları</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> smart kartınızın taxılı qalmasını tələb edir.</translation>
 <translation id="1478340334823509079">Ətraflı: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Quraşdırma aktiv deyil</translation>
 <translation id="1481537595330271162">Diskin ölçüsünü dəyişərkən xəta baş verdi</translation>
@@ -924,7 +924,6 @@
 Cihazda Family Link tətbiqini quraşdırmaqla bu hesabın ayarlarını idarə edə bilərsiniz.  Təlimatları e-məktubla göndərdik.</translation>
 <translation id="2040460856718599782">Sizi doğrulayan zaman xəta oldu. Giriş kredensiallarınızı yoxlayın və yenidən cəhd edin.</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{1 oğurlanmış parolunuz var}other{# oğurlanmış parolunuz var}}</translation>
-<translation id="2040863272941698761">Linux'u ayarlayın</translation>
 <translation id="204497730941176055">Microsoft Sertifikat Şablon adı</translation>
 <translation id="2045117674524495717">Klaviatura Qısayol Yardımı</translation>
 <translation id="2045969484888636535">Kukiləri blok etməyə davam edin</translation>
@@ -1255,8 +1254,6 @@
 <translation id="2428510569851653187">Tabda xəta baş verdiyi zaman nə etdiyinizi təsvir edin</translation>
 <translation id="2428939361789119025">Wi-Fi şəbəkəsini deaktiv edin</translation>
 <translation id="2431027948063157455">Google Assistent yüklənmədi. Şəbəkə bağlantısını yoxlayın və yenidən cəhd edin.</translation>
-<translation id="2431846145771260397">Linux (Beta) üçün sabit ölçülü diski saxlamaq istədiyinizə əminsiniz?</translation>
-<translation id="2432753757290432042">Linux (Beta) güncəlləməsi tələb olunur</translation>
 <translation id="2433452467737464329">Səhifəni avtomatik təzələmək üçün linkdə sorğu parametri əlavə edin: chrome://network/?refresh=&lt;sec&gt;</translation>
 <translation id="2433490881840073798"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE" /></translation>
 <translation id="2433507940547922241">Görünüş</translation>
@@ -1971,6 +1968,7 @@
 <translation id="3264544094376351444">Sans-serif şrifti</translation>
 <translation id="3264582393905923483">Məzmun</translation>
 <translation id="3265459715026181080">Pəncərəni Bağlayın</translation>
+<translation id="3266022278425892773">Linux inkişaf mühiti</translation>
 <translation id="3266179261140759675">Bağlanmış saytların data göndərməsini və qəbulunu bloklayın</translation>
 <translation id="3266274118485960573">Təhlükəsizlik yoxlanışı icra olunur.</translation>
 <translation id="3267726687589094446">Çoxsaylı faylların avtomatik endirilməsinə icazə verməyə davam edin</translation>
@@ -2028,6 +2026,7 @@
 <translation id="3320630259304269485">Təhlükəsiz Baxış (təhlükəli saytlardan qoruma) və digər güvənlik ayarları</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Bu data həssas və ya təhlükəli məzmun ehtiva edir. Bu məzmunu silin və yenidən cəhd edin.}=1{Bu fayl həssas və ya təhlükəli məzmun ehtiva edir. B