diff --git a/.gn b/.gn
index 1abcb11..15ddd275 100644
--- a/.gn
+++ b/.gn
@@ -129,7 +129,6 @@
   "//extensions/browser/api/system_storage:*",  # 6 errors
   "//extensions/browser/api/test:*",  # 1 error
   "//extensions/browser/api/usb:*",  # 12 errors
-  "//extensions/browser/api/virtual_keyboard:*",  # 1 error
   "//extensions/browser/api/virtual_keyboard_private:*",  # 2 errors
   "//extensions/browser/api/vpn_provider:*",  # 13 errors
   "//extensions/browser/api/web_request:*",  # 37 errors
diff --git a/DEPS b/DEPS
index 92e42f7..a4201b4 100644
--- a/DEPS
+++ b/DEPS
@@ -199,11 +199,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'd2f51b18065a1ed93a4195afb8852b12e2fae1cd',
+  'skia_revision': '2a735ba1cb32d7688c73845e92cbc2173a3b98e4',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'ff24c7121a8adc0450e1368daf5e060b7b4f64ca',
+  'v8_revision': '6bb19707a491fda7a4dc04dbbeb188d48f6d641d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -211,11 +211,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'f99ccb082ba59aab0fba2b8d04625bc2364fc01f',
+  'angle_revision': 'fa449cf3b0d00e411a47039408fd31389d79beb0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '937395c1ed5d20af5a5fd999d7e2deddf1b78fe3',
+  'swiftshader_revision': '2e89a70e3561793871480d971f4e958d04faf37a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -246,11 +246,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling NaCl
   # and whatever else without interference from each other.
-  'nacl_revision': '299d4780ec86121ff2a5368ed9435ade0e356e5e',
+  'nacl_revision': 'd28e6c52e05ea2f1b3231de473b6dbfce59bce40',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '0901a6f74c707f4e631d810b9f3ac7f0c0d2042e',
+  'freetype_revision': '34315538364b2e1ab7fb17d70dd59bb451982c80',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
@@ -274,7 +274,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': '51690fcadbede4f2005aece3d76191b7464d367f',
+  'devtools_frontend_revision': '59450acba8d5e784fcce316100c2aa938a105604',
   # 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.
@@ -314,7 +314,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': 'a2e02836a2600aa751f1b7eeb6bb56c4e573e230',
+  'dawn_revision': 'c4efeef8333435ef770fdf72f3ffdca9d7d19bfc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -873,7 +873,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' + '@' + 'd4e0f040446f15ae891f3354d80ab8706fb1a7ce',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '1f19c9cd819c65dd73a82acf39e0e5aee84175d1',
       'condition': 'checkout_chromeos',
   },
 
@@ -893,7 +893,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '60b433cf0b29e12218abbdf36a8d166fc59e7209',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0e4e5ae5944afdca30a6228cb2b56c8298e07a70',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1266,7 +1266,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'afc78f5e6ae999fd26a7473e8e2b068b6e666063',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '61125414310ae1df95fc378cd432071283783a81',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1485,7 +1485,7 @@
   'src/third_party/usrsctp/usrsctplib':
     Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + 'a3c3ef666b7a5e4c93ebae5a7462add6f86f5cf2',
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e395b66ed41c80a28349f18f9b16bce6bd80e2b3',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@a86dded0f15e65811c89bd2ccb27fd8c9aa1b47e',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '6c656df63da5995a932aafd45b32af1974e497d9',
@@ -1518,7 +1518,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '3c2fe3888658d82b47ca831d59a2e07579619c2d',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '1607b3aa8ccd55e48e2fc0204ee5cbe873d41928',
+    Var('webrtc_git') + '/src.git' + '@' + '644164c9c4b368d96bde2b3dcce68c57c2b7f749',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1590,7 +1590,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@36b254fb9b13503b7b3b181da82ab3a626c770e6',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e12745c2764b5d739d8de2d7dd92687868396961',
     'condition': 'checkout_src_internal',
   },
 
@@ -1598,7 +1598,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'BrzlGtpSjp8quKJlBN8pxLiY0XfrgeDpvKGKAovPBTIC',
+        'version': 'iymm0X4k86dP1qOJ7zLR6r45tSnluDcJ8ticed31c9wC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/OWNERS b/android_webview/javatests/src/org/chromium/android_webview/test/OWNERS
index e258f091..57f2843 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/OWNERS
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/OWNERS
@@ -1,3 +1,9 @@
+# Autofill
+per-file AwAutofillTest.java=battre@chromium.org
+
+# ContentCapture
+per-file AwContentCaptureTest.java=file://components/content_capture/OWNERS
+
 # Networking/Network Service
 per-file AwNetworkConfigurationTest.java=file://android_webview/browser/network_service/OWNERS
 per-file SslPreferencesTest.java=file://android_webview/browser/network_service/OWNERS
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn
index 84b4d6d..6a92be60 100644
--- a/ash/public/cpp/BUILD.gn
+++ b/ash/public/cpp/BUILD.gn
@@ -382,6 +382,7 @@
     ":cpp",
     "//base",
     "//base/test:test_support",
+    "//chromeos/ui/vector_icons",
     "//mojo/public/cpp/bindings",
     "//testing/gtest",
     "//ui/aura:test_support",
diff --git a/ash/public/cpp/holding_space/holding_space_constants.h b/ash/public/cpp/holding_space/holding_space_constants.h
index f87df492..2f700e6 100644
--- a/ash/public/cpp/holding_space/holding_space_constants.h
+++ b/ash/public/cpp/holding_space/holding_space_constants.h
@@ -41,6 +41,7 @@
 constexpr int kHoldingSpaceSectionChildSpacing = 16;
 constexpr float kHoldingSpaceSelectedOverlayOpacity = 0.24f;
 constexpr int kHoldingSpaceTrayIconMaxVisiblePreviews = 3;
+constexpr int kHoldingSpaceTrayIconPreviewSize = 32;
 constexpr int kHoldingSpaceTrayIconSize = 20;
 
 // Context menu commands.
diff --git a/ash/public/cpp/holding_space/holding_space_image.cc b/ash/public/cpp/holding_space/holding_space_image.cc
index 639a21d..33d1581 100644
--- a/ash/public/cpp/holding_space/holding_space_image.cc
+++ b/ash/public/cpp/holding_space/holding_space_image.cc
@@ -4,22 +4,75 @@
 
 #include "ash/public/cpp/holding_space/holding_space_image.h"
 
+#include <algorithm>
 #include <map>
 
+#include "ash/public/cpp/file_icon_util.h"
+#include "ash/public/cpp/holding_space/holding_space_color_provider.h"
+#include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/location.h"
+#include "chromeos/ui/vector_icons/vector_icons.h"
+#include "ui/gfx/image/canvas_image_source.h"
+#include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/image/image_skia_source.h"
+#include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/skia_util.h"
 
 namespace ash {
 
 namespace {
 
+// Appearance.
+constexpr int kFileTypeIconSize = 20;
+
 // Whether image invalidation should be done without a delay. May be set in
 // tests.
 bool g_use_zero_invalidation_delay_for_testing = false;
 
+// EmptyImageSkiaSource --------------------------------------------------------
+
+class EmptyImageSkiaSource : public gfx::CanvasImageSource {
+ public:
+  explicit EmptyImageSkiaSource(const gfx::Size& size)
+      : gfx::CanvasImageSource(size) {}
+
+  EmptyImageSkiaSource(const EmptyImageSkiaSource&) = delete;
+  EmptyImageSkiaSource& operator=(const EmptyImageSkiaSource&) = delete;
+  ~EmptyImageSkiaSource() override = default;
+
+ private:
+  // gfx::CanvasImageSource:
+  void Draw(gfx::Canvas* canvas) override {}  // Draw nothing.
+};
+
+// Helpers ---------------------------------------------------------------------
+
+// Creates an empty image of the specified `size`.
+gfx::ImageSkia CreateEmptyImageSkia(const gfx::Size& size) {
+  return gfx::ImageSkia(std::make_unique<EmptyImageSkiaSource>(size), size);
+}
+
+// Creates an image to represent the file type of the specified `file_path`.
+gfx::ImageSkia CreateFileTypeImageSkia(const base::FilePath& file_path,
+                                       bool is_folder,
+                                       const gfx::Size& size) {
+  gfx::ImageSkia file_type_icon;
+  if (is_folder) {
+    file_type_icon = gfx::CreateVectorIcon(
+        chromeos::kFiletypeFolderIcon, kFileTypeIconSize,
+        HoldingSpaceColorProvider::Get()->GetFileIconColor());
+  } else {
+    file_type_icon = GetIconForPath(
+        file_path, HoldingSpaceColorProvider::Get()->GetFileIconColor());
+  }
+  // Superimpose the `file_type_icon` over an empty image in order to center it
+  // within the image at a fixed size.
+  return gfx::ImageSkiaOperations::CreateSuperimposedImage(
+      CreateEmptyImageSkia(size), file_type_icon);
+}
+
 }  // namespace
 
 // HoldingSpaceImage::ImageSkiaSource ------------------------------------------
@@ -50,18 +103,42 @@
 
 // HoldingSpaceImage -----------------------------------------------------------
 
-HoldingSpaceImage::HoldingSpaceImage(const base::FilePath& backing_file_path,
-                                     const gfx::ImageSkia& placeholder,
+HoldingSpaceImage::HoldingSpaceImage(const gfx::Size& max_size,
+                                     const base::FilePath& backing_file_path,
                                      AsyncBitmapResolver async_bitmap_resolver)
-    : backing_file_path_(backing_file_path),
-      placeholder_(placeholder),
+    : max_size_(max_size),
+      backing_file_path_(backing_file_path),
       async_bitmap_resolver_(async_bitmap_resolver) {
+  // Use an empty `placeholder_` until a bitmap is asynchronously returned.
+  placeholder_ = CreateEmptyImageSkia(max_size_);
   CreateImageSkia();
 }
 
 HoldingSpaceImage::~HoldingSpaceImage() = default;
 
 // static
+gfx::Size HoldingSpaceImage::GetMaxSizeForType(HoldingSpaceItem::Type type) {
+  gfx::Size size;
+  switch (type) {
+    case HoldingSpaceItem::Type::kDownload:
+    case HoldingSpaceItem::Type::kNearbyShare:
+    case HoldingSpaceItem::Type::kPinnedFile:
+      size = gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize);
+      break;
+    case HoldingSpaceItem::Type::kScreenRecording:
+    case HoldingSpaceItem::Type::kScreenshot:
+      size = kHoldingSpaceScreenCaptureSize;
+      break;
+  }
+  // To avoid pixelation, ensure that the holding space image size is at least
+  // as large as the tray icon preview size. The image will be scaled down
+  // elsewhere if needed.
+  size.SetToMax(gfx::Size(kHoldingSpaceTrayIconPreviewSize,
+                          kHoldingSpaceTrayIconPreviewSize));
+  return size;
+}
+
+// static
 void HoldingSpaceImage::SetUseZeroInvalidationDelayForTesting(bool value) {
   g_use_zero_invalidation_delay_for_testing = value;
 }
@@ -78,22 +155,34 @@
 void HoldingSpaceImage::LoadBitmap(float scale) {
   async_bitmap_resolver_.Run(
       backing_file_path_, gfx::ScaleToCeiledSize(image_skia_.size(), scale),
-      scale,
       base::BindOnce(&HoldingSpaceImage::OnBitmapLoaded,
                      weak_factory_.GetWeakPtr(), backing_file_path_, scale));
 }
 
 void HoldingSpaceImage::OnBitmapLoaded(const base::FilePath& file_path,
                                        float scale,
-                                       const SkBitmap* bitmap) {
+                                       const SkBitmap* bitmap,
+                                       base::File::Error error) {
   if (!bitmap) {
-    // Retry load if the backing file path has changed while the image load was
-    // in progress.
-    if (backing_file_path_ != file_path)
+    DCHECK_NE(error, base::File::FILE_OK);
+    if (backing_file_path_ != file_path) {
+      // Retry load if the backing file path has changed while the image load
+      // was in progress.
       LoadBitmap(scale);
+    } else if (async_bitmap_resolver_error_ != error) {
+      // A new `error` may mean a better file type image can be displayed. The
+      // `error`, for example, may indicate that the file is in fact a folder in
+      // which case there is a more appropriate icon that can be shown. Notify
+      // subscribers to invalidate themselves.
+      async_bitmap_resolver_error_ = error;
+      callback_list_.Notify();
+    }
     return;
   }
 
+  DCHECK_EQ(error, base::File::FILE_OK);
+  async_bitmap_resolver_error_ = base::File::FILE_OK;
+
   // Force invalidate `image_skia_` for `scale` so that it will request the
   // updated `gfx::ImageSkiaRep` at next access.
   image_skia_.RemoveRepresentation(scale);
@@ -110,6 +199,50 @@
   callback_list_.Notify();
 }
 
+gfx::ImageSkia HoldingSpaceImage::GetImageSkia(
+    const base::Optional<gfx::Size>& opt_size) const {
+  const gfx::Size size = opt_size.value_or(max_size_);
+
+  // Requested `size` must be less than or equal to `max_size_` to avoid
+  // pixelation that would otherwise occur due to upscaling.
+  DCHECK_LE(size.height(), max_size_.height());
+  DCHECK_LE(size.width(), max_size_.width());
+
+  // Requested `size` must be greater than the file type icon size in order for
+  // the image representing file type to render correctly.
+  DCHECK_GT(size.height(), kFileTypeIconSize);
+  DCHECK_GT(size.width(), kFileTypeIconSize);
+
+  // When an error occurs, fallback to an image representing file type.
+  if (async_bitmap_resolver_error_ &&
+      async_bitmap_resolver_error_ != base::File::FILE_OK) {
+    const bool is_folder =
+        async_bitmap_resolver_error_ == base::File::FILE_ERROR_NOT_A_FILE;
+    return CreateFileTypeImageSkia(backing_file_path_, is_folder, size);
+  }
+
+  // Short-circuit resizing logic.
+  if (image_skia_.size() == size)
+    return image_skia_;
+
+  gfx::ImageSkia image_skia(image_skia_);
+
+  // Resize.
+  const float scale_x = size.width() / static_cast<float>(image_skia.width());
+  const float scale_y = size.height() / static_cast<float>(image_skia.height());
+  const float scale = std::max(scale_x, scale_y);
+  DCHECK_LE(scale, 1.f);  // Upscaling would result in pixelation.
+  gfx::Size scaled_size = gfx::ScaleToCeiledSize(image_skia.size(), scale);
+  image_skia = gfx::ImageSkiaOperations::CreateResizedImage(
+      image_skia, skia::ImageOperations::ResizeMethod::RESIZE_BEST,
+      scaled_size);
+
+  // Crop.
+  gfx::Rect cropped_bounds(image_skia.size());
+  cropped_bounds.ClampToCenteredSize(size);
+  return gfx::ImageSkiaOperations::ExtractSubset(image_skia, cropped_bounds);
+}
+
 void HoldingSpaceImage::Invalidate() {
   if (invalidate_timer_.IsRunning())
     return;
@@ -153,7 +286,7 @@
   image_skia_ =
       gfx::ImageSkia(std::make_unique<ImageSkiaSource>(
                          /*host=*/weak_factory_.GetWeakPtr(), placeholder_),
-                     placeholder_.size());
+                     max_size_);
 }
 
 }  // namespace ash
diff --git a/ash/public/cpp/holding_space/holding_space_image.h b/ash/public/cpp/holding_space/holding_space_image.h
index 524bcb00..f4f4b08 100644
--- a/ash/public/cpp/holding_space/holding_space_image.h
+++ b/ash/public/cpp/holding_space/holding_space_image.h
@@ -8,8 +8,11 @@
 #include <memory>
 
 #include "ash/public/cpp/ash_public_export.h"
+#include "ash/public/cpp/holding_space/holding_space_item.h"
 #include "base/callback_forward.h"
 #include "base/callback_list.h"
+#include "base/files/file.h"
+#include "base/optional.h"
 #include "base/timer/timer.h"
 #include "ui/gfx/image/image_skia.h"
 
@@ -21,22 +24,25 @@
   using CallbackList = base::RepeatingClosureList;
 
   // Returns a bitmap.
-  using BitmapCallback = base::OnceCallback<void(const SkBitmap*)>;
+  using BitmapCallback =
+      base::OnceCallback<void(const SkBitmap* bitmap, base::File::Error error)>;
 
   // Returns a bitmap asynchronously for a given size.
   using AsyncBitmapResolver =
       base::RepeatingCallback<void(const base::FilePath& file_path,
-                                   const gfx::Size&,
-                                   float scale_factor,
-                                   BitmapCallback)>;
+                                   const gfx::Size& size,
+                                   BitmapCallback callback)>;
 
-  HoldingSpaceImage(const base::FilePath& backing_file_path,
-                    const gfx::ImageSkia& placeholder,
+  HoldingSpaceImage(const gfx::Size& max_size,
+                    const base::FilePath& backing_file_path,
                     AsyncBitmapResolver async_bitmap_resolver);
   HoldingSpaceImage(const HoldingSpaceImage&) = delete;
   HoldingSpaceImage& operator=(const HoldingSpaceImage&) = delete;
   ~HoldingSpaceImage();
 
+  // Returns the maximum size required for a holding space item of `type`.
+  static gfx::Size GetMaxSizeForType(HoldingSpaceItem::Type type);
+
   static void SetUseZeroInvalidationDelayForTesting(bool value);
 
   bool operator==(const HoldingSpaceImage& rhs) const;
@@ -45,9 +51,14 @@
   base::CallbackListSubscription AddImageSkiaChangedCallback(
       CallbackList::CallbackType callback) const;
 
-  // Returns the underlying `gfx::ImageSkia`. Note that the image source may be
-  // dynamically updated, so UI classes should observe and react to updates.
-  const gfx::ImageSkia& image_skia() const { return image_skia_; }
+  // Returns the underlying `gfx::ImageSkia`. If `size` is omitted, the
+  // `max_size_` passed in the constructor is used. If `size` is present, it
+  // must be less than or equal to the `max_size_` passed in the constructor in
+  // order to prevent pixelation that would otherwise occur due to upscaling.
+  // Note that the image source may be dynamically updated, so UI classes should
+  // observe and react to updates.
+  gfx::ImageSkia GetImageSkia(
+      const base::Optional<gfx::Size>& size = base::nullopt) const;
 
   // Creates new image skia for the item, and thus invalidates currently loaded
   // representation. When the image is requested next time, the image
@@ -72,7 +83,8 @@
   // Response to an image representation load request.
   void OnBitmapLoaded(const base::FilePath& file_path,
                       float scale,
-                      const SkBitmap* bitmap);
+                      const SkBitmap* bitmap,
+                      base::File::Error error);
 
   // Creates `image_skia_` to be used for the holding space image.
   // If `image_skia_` already exists, it will be recreated with a fresh image
@@ -83,11 +95,13 @@
   // loads if the backing file gets updated multiple times in quick succession.
   void OnInvalidateTimer();
 
+  const gfx::Size max_size_;
   base::FilePath backing_file_path_;
-  gfx::ImageSkia placeholder_;
   AsyncBitmapResolver async_bitmap_resolver_;
+  base::Optional<base::File::Error> async_bitmap_resolver_error_;
 
   gfx::ImageSkia image_skia_;
+  gfx::ImageSkia placeholder_;
 
   // Timer used to throttle image invalidate requests.
   base::OneShotTimer invalidate_timer_;
diff --git a/ash/public/cpp/holding_space/holding_space_image_unittest.cc b/ash/public/cpp/holding_space/holding_space_image_unittest.cc
index cb3487c..45d7110 100644
--- a/ash/public/cpp/holding_space/holding_space_image_unittest.cc
+++ b/ash/public/cpp/holding_space/holding_space_image_unittest.cc
@@ -8,22 +8,35 @@
 #include <utility>
 #include <vector>
 
+#include "ash/public/cpp/file_icon_util.h"
+#include "ash/public/cpp/holding_space/holding_space_color_provider.h"
 #include "ash/public/cpp/holding_space/holding_space_item.h"
 #include "base/bind.h"
 #include "base/memory/weak_ptr.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
+#include "chromeos/ui/vector_icons/vector_icons.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/color_palette.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/image/image_unittest_util.h"
+#include "ui/gfx/paint_vector_icon.h"
 
 namespace ash {
 
 namespace {
 
+// Appearance.
+constexpr gfx::Size kImageSize(32, 32);
+constexpr int kFileTypeIconSize = 20;
+constexpr SkColor kFileTypeIconColor(gfx::kPlaceholderColor);
+
+// Helpers ---------------------------------------------------------------------
+
 SkBitmap CreateBitmap(int width, int height, SkColor color) {
   SkBitmap bitmap;
   bitmap.allocN32Pixels(width, height);
@@ -31,10 +44,35 @@
   return bitmap;
 }
 
-gfx::ImageSkia CreateImageSkia(int width, int height, SkColor color) {
-  return gfx::ImageSkia::CreateFrom1xBitmap(CreateBitmap(width, height, color));
+gfx::ImageSkia ExtractFileTypeIcon(const gfx::ImageSkia& image) {
+  gfx::Rect file_type_icon_bounds(image.size());
+  file_type_icon_bounds.ClampToCenteredSize(
+      gfx::Size(kFileTypeIconSize, kFileTypeIconSize));
+  return gfx::ImageSkiaOperations::ExtractSubset(image, file_type_icon_bounds);
 }
 
+bool ContainsFileTypeIcon(const gfx::ImageSkia& image,
+                          const base::FilePath& file_path) {
+  gfx::ImageSkia actual = ExtractFileTypeIcon(image);
+  gfx::ImageSkia expected = GetIconForPath(file_path, kFileTypeIconColor);
+  return gfx::test::AreImagesEqual(gfx::Image(actual), gfx::Image(expected));
+}
+
+bool ContainsFolderTypeIcon(const gfx::ImageSkia& image) {
+  gfx::ImageSkia actual = ExtractFileTypeIcon(image);
+  gfx::ImageSkia expected = gfx::CreateVectorIcon(
+      chromeos::kFiletypeFolderIcon, kFileTypeIconSize, kFileTypeIconColor);
+  return gfx::test::AreImagesEqual(gfx::Image(actual), gfx::Image(expected));
+}
+
+// Fake implementation of HoldingSpaceColorProvider.
+class FakeHoldingSpaceColorProvider : public HoldingSpaceColorProvider {
+ public:
+  // HoldingSpaceColorProvider:
+  SkColor GetBackgroundColor() const override { return gfx::kPlaceholderColor; }
+  SkColor GetFileIconColor() const override { return kFileTypeIconColor; }
+};
+
 // Helper class that provides a test implementation for the async bitmap
 // resolver callback used to generate holding space image representations.
 class ImageGenerator {
@@ -51,7 +89,6 @@
 
   void GenerateImage(const base::FilePath& file_path,
                      const gfx::Size& size,
-                     float scale,
                      HoldingSpaceImage::BitmapCallback callback) {
     auto request = std::make_unique<PendingRequest>();
     request->file_path = file_path;
@@ -81,17 +118,18 @@
 
     pending_requests_.erase(it);
 
-    std::move(callback).Run(&result);
+    std::move(callback).Run(&result, base::File::FILE_OK);
   }
 
-  void FailRequest(size_t index) {
+  void FailRequest(size_t index,
+                   base::File::Error error = base::File::FILE_ERROR_FAILED) {
     ASSERT_LT(index, pending_requests_.size());
 
     auto it = pending_requests_.begin() + index;
     HoldingSpaceImage::BitmapCallback callback = std::move((*it)->callback);
     pending_requests_.erase(it);
 
-    std::move(callback).Run(nullptr);
+    std::move(callback).Run(/*bitmap=*/nullptr, error);
   }
 
  private:
@@ -114,11 +152,11 @@
     image_subscription_ = image_->AddImageSkiaChangedCallback(
         base::BindRepeating(&TestImageClient::OnHoldingSpaceItemImageChanged,
                             base::Unretained(this)));
-    image_->image_skia().GetRepresentation(1.0f);
+    image_->GetImageSkia().GetRepresentation(1.0f);
   }
 
   void OnHoldingSpaceItemImageChanged() {
-    image_->image_skia().GetRepresentation(1.0f);
+    image_->GetImageSkia().GetRepresentation(1.0f);
     ++image_change_count_;
   }
 
@@ -137,20 +175,14 @@
 std::unique_ptr<HoldingSpaceItem> CreateTestItem(
     const base::FilePath& file_path,
     ImageGenerator* image_generator,
-    int image_size,
-    SkColor image_color) {
+    const gfx::Size& image_size) {
   const GURL file_system_url("filesystem:file_system_url");
-  gfx::ImageSkia placeholder(
-      CreateImageSkia(image_size, image_size, image_color));
-  placeholder.AddRepresentation(gfx::ImageSkiaRep(
-      CreateBitmap(image_size * 2, image_size * 2, image_color), 2));
-
   return HoldingSpaceItem::CreateFileBackedItem(
       HoldingSpaceItem::Type::kPinnedFile, file_path, file_system_url,
       base::BindLambdaForTesting([&](HoldingSpaceItem::Type type,
                                      const base::FilePath& file_path) {
         return std::make_unique<HoldingSpaceImage>(
-            file_path, placeholder, image_generator->CreateResolverCallback());
+            image_size, file_path, image_generator->CreateResolverCallback());
       }));
 }
 
@@ -165,6 +197,7 @@
 
  private:
   base::test::TaskEnvironment task_environment_;
+  FakeHoldingSpaceColorProvider holding_space_color_provider_;
 };
 
 // Tests the basic flow for generating holding space image bitmaps.
@@ -172,8 +205,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -184,9 +216,9 @@
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
   // The image should return the placeholder bitmap.
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   // Generate the holding space item image, and verify the icon has been
   // updated.
@@ -194,8 +226,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -208,8 +240,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   TestImageClient image_client(&holding_space_item->image());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
@@ -218,8 +249,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -231,49 +262,79 @@
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
   // Use placeholder while the image request is in progress.
-  EXPECT_EQ(20, bitmap_2x.height());
-  EXPECT_EQ(20, bitmap_2x.width());
-  EXPECT_EQ(SK_ColorRED, bitmap_2x.getColor(5, 5));
+  EXPECT_EQ(kImageSize.height() * 2, bitmap_2x.height());
+  EXPECT_EQ(kImageSize.width() * 2, bitmap_2x.width());
+  EXPECT_EQ(SK_ColorTRANSPARENT, bitmap_2x.getColor(5, 5));
 
   // Verify that the image gets updated once the holding space image is
   // generated.
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
-  image = holding_space_item->image().image_skia();
+  image = holding_space_item->image().GetImageSkia();
   const SkBitmap loaded_bitmap_2x = image.GetRepresentation(2.0f).GetBitmap();
-  EXPECT_EQ(20, loaded_bitmap_2x.height());
-  EXPECT_EQ(20, loaded_bitmap_2x.width());
+  EXPECT_EQ(kImageSize.height() * 2, loaded_bitmap_2x.height());
+  EXPECT_EQ(kImageSize.width() * 2, loaded_bitmap_2x.width());
   EXPECT_EQ(SK_ColorBLUE, loaded_bitmap_2x.getColor(5, 5));
 }
 
 // Verifies that the holding space image handles failed holding space image
 // requests.
 TEST_F(HoldingSpaceImageTest, ImageLoadFailure) {
+  const base::FilePath file_path("test_file.txt");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+      CreateTestItem(file_path, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
-  // Test image client requests an image representation durion construction.
+  // Test image client requests an image representation during construction.
   TestImageClient image_client(&holding_space_item->image());
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
   // Use placeholder while the image request is in progress.
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
-  // Simulate failed holding space item image request, and verify the icon keeps
-  // using the placeholder image.
+  // Simulate failed holding space item image request, and verify the icon will
+  // fallback to the file type icon.
   image_generator.FailRequest(0);
 
+  EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_TRUE(ContainsFileTypeIcon(image, file_path));
+}
+
+// Verifies that the holding space image handles failed holding space image
+// requests and special cases the fallback image for folders.
+TEST_F(HoldingSpaceImageTest, ImageLoadFailureForFolder) {
+  ImageGenerator image_generator;
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_folder"), &image_generator, kImageSize);
+
+  EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
+
+  // Test image client requests an image representation during construction.
+  TestImageClient image_client(&holding_space_item->image());
+  EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+
+  // Use placeholder while the image request is in progress.
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
+
+  // Simulate failed holding space item image request using the special case
+  // error code used to signal that the backing file is a folder.
+  image_generator.FailRequest(0, base::File::FILE_ERROR_NOT_A_FILE);
+
+  // Verify the image will fallback to the folder type icon.
+  EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_TRUE(ContainsFolderTypeIcon(image));
 }
 
 // Verifies that the holding space image can be updated using
@@ -282,8 +343,7 @@
   ImageGenerator image_generator;
   const base::FilePath kTestFile("test_file.test");
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   // Finish loading the initial image.
   TestImageClient image_client(&holding_space_item->image());
@@ -292,8 +352,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
@@ -308,8 +368,8 @@
   EXPECT_EQ(kTestFile, image_generator.GetPendingRequestFilePath(0));
 
   // While image load request is in progress, use the previously loaded icon.
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
@@ -318,8 +378,8 @@
   image_generator.FulfillRequest(0, SK_ColorGREEN);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -332,8 +392,7 @@
   ImageGenerator image_generator;
   const base::FilePath kTestFile("test_file.test");
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   // Finish loading the initial image.
   TestImageClient image_client(&holding_space_item->image());
@@ -341,8 +400,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
@@ -365,8 +424,8 @@
   image_generator.FulfillRequest(0, SK_ColorGREEN);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -377,9 +436,8 @@
 // load is in progress.
 TEST_F(HoldingSpaceImageTest, ImageRefreshDuringInitialLoad) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   // The test client implementation requests an image on construction.
   TestImageClient image_client(&holding_space_item->image());
@@ -387,18 +445,18 @@
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
   // Use placeholder while the image load is in progress.
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   holding_space_item->InvalidateImage();
   ASSERT_TRUE(
       holding_space_item->image_for_testing().FireInvalidateTimerForTesting());
 
   // Verify that placeholder image remains to be used.
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(2u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
@@ -407,17 +465,17 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   // Fulfill the later request, and verify the icon gets updated.
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   image_generator.FulfillRequest(0, SK_ColorGREEN);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -430,9 +488,8 @@
 TEST_F(HoldingSpaceImageTest,
        ImageRefreshDuringInitialLoadWithOutOfOrderResponses) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   // The test client implementation requests an image on construction.
   TestImageClient image_client(&holding_space_item->image());
@@ -440,9 +497,9 @@
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
   // Use placeholder while the image load is in progress.
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   holding_space_item->InvalidateImage();
   ASSERT_TRUE(
@@ -454,8 +511,8 @@
   image_generator.FulfillRequest(1, SK_ColorGREEN);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   // Fulfill the initial request, and verify the result is ignored
@@ -463,8 +520,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -476,16 +533,15 @@
 // using the image placeholder).
 TEST_F(HoldingSpaceImageTest, ImageRequestsAfterItemDestruction) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   // Finish the flow for loading 1x bitmap.
   TestImageClient image_client(&holding_space_item->image());
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   // Reset the holding space item, and request 2x representation.
@@ -494,9 +550,9 @@
 
   // Verify that image returns the placeholder bitmap, and that no image
   // generation requests are actually issued.
-  EXPECT_EQ(20, bitmap_2x.height());
-  EXPECT_EQ(20, bitmap_2x.width());
-  EXPECT_EQ(SK_ColorRED, bitmap_2x.getColor(5, 5));
+  EXPECT_EQ(kImageSize.height() * 2, bitmap_2x.height());
+  EXPECT_EQ(kImageSize.width() * 2, bitmap_2x.width());
+  EXPECT_EQ(SK_ColorTRANSPARENT, bitmap_2x.getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 }
@@ -505,25 +561,24 @@
 // image load is still in progress.
 TEST_F(HoldingSpaceImageTest, ItemDestructionDuringImageLoad) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   TestImageClient image_client(&holding_space_item->image());
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   // Reset the item, and then simulate image request response.
   holding_space_item.reset();
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
   // Verify that the image keeps using the placeholder bitmap.
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
@@ -533,9 +588,8 @@
 // image load is still in progress, in case the pending image load fails.
 TEST_F(HoldingSpaceImageTest, ItemDestructionDuringFailedImageLoad) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
   TestImageClient image_client(&holding_space_item->image());
@@ -543,17 +597,17 @@
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   // Reset the item, and then simulate a failed image request response.
   holding_space_item.reset();
   image_generator.FailRequest(0);
 
   // Verify that the image keeps using the placeholder bitmap.
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
@@ -563,9 +617,8 @@
 // while image refresh is in progress.
 TEST_F(HoldingSpaceImageTest, ItemDestructionDuringImageRefresh) {
   ImageGenerator image_generator;
-  std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(base::FilePath("test_file.txt"), &image_generator,
-                     /*image_size=*/10, /*image_color=*/SK_ColorRED);
+  std::unique_ptr<HoldingSpaceItem> holding_space_item = CreateTestItem(
+      base::FilePath("test_file.txt"), &image_generator, kImageSize);
 
   // Run thr flow for loading the initial image version.
   TestImageClient image_client(&holding_space_item->image());
@@ -573,8 +626,8 @@
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   holding_space_item->InvalidateImage();
@@ -588,7 +641,7 @@
   image_generator.FulfillRequest(0, SK_ColorGREEN);
 
   // Verify that the image keeps using previously generated icon.
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -601,8 +654,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -621,8 +673,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 
@@ -637,8 +689,8 @@
   image_generator.FulfillRequest(0, SK_ColorGREEN);
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
 }
@@ -649,8 +701,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -668,7 +719,7 @@
       kUpdatedTestFile, GURL("filesystem:updated_file_system_url"));
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
   image.GetRepresentation(2.0f);
 
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
@@ -676,8 +727,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
   const SkBitmap bitmap_2x = image.GetRepresentation(2.0f).GetBitmap();
-  EXPECT_EQ(20, bitmap_2x.height());
-  EXPECT_EQ(20, bitmap_2x.width());
+  EXPECT_EQ(kImageSize.height() * 2, bitmap_2x.height());
+  EXPECT_EQ(kImageSize.width() * 2, bitmap_2x.width());
   EXPECT_EQ(SK_ColorBLUE, bitmap_2x.getColor(10, 10));
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 }
@@ -688,8 +739,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -698,7 +748,7 @@
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
   EXPECT_EQ(kTestFile, image_generator.GetPendingRequestFilePath(0));
 
-  // Update the backing file path, and simulate image load failure..
+  // Update the backing file path, and simulate image load failure.
   const base::FilePath kUpdatedTestFile("updated_test_file.test");
   holding_space_item->UpdateBackingFile(
       kUpdatedTestFile, GURL("filesystem:updated_file_system_url"));
@@ -711,8 +761,8 @@
 
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 }
@@ -724,8 +774,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -736,9 +785,9 @@
   // Simulate request failure before updating the backing file path.
   image_generator.FailRequest(0);
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_TRUE(ContainsFileTypeIcon(image, kTestFile));
 
   // Update the backing file path, and verify the failed request was not
   // retried.
@@ -749,10 +798,10 @@
   // Verify that image load is retried using the new file path.
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
-  EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_TRUE(ContainsFileTypeIcon(image, kTestFile));
+  EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 }
 
 // Tests that failed image loads will be not be retried for requests issued
@@ -761,8 +810,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -778,10 +826,10 @@
   EXPECT_EQ(kUpdatedTestFile, image_generator.GetPendingRequestFilePath(0));
   image_generator.FailRequest(0);
 
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
-  EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_TRUE(ContainsFileTypeIcon(image, kUpdatedTestFile));
+  EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
 
   // Verify that the request is not retried.
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
@@ -792,8 +840,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
@@ -804,8 +851,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   // Update the backing file path, and verify the image load is not requested
@@ -814,8 +861,8 @@
   holding_space_item->UpdateBackingFile(
       kUpdatedTestFile, GURL("filesystem:updated_file_system_url"));
 
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   // Verify that the request is not retried.
@@ -830,8 +877,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
   // Create test image client.
@@ -850,8 +896,8 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorBLUE, image.bitmap()->getColor(5, 5));
 
   // Verify that the request is not retried.
@@ -874,8 +920,7 @@
   const base::FilePath kTestFile("test_file.test");
   ImageGenerator image_generator;
   std::unique_ptr<HoldingSpaceItem> holding_space_item =
-      CreateTestItem(kTestFile, &image_generator, /*image_size=*/10,
-                     /*image_color=*/SK_ColorRED);
+      CreateTestItem(kTestFile, &image_generator, kImageSize);
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
 
   // Create test image client to initiate image request.
@@ -901,9 +946,9 @@
   image_generator.FulfillRequest(0, SK_ColorBLUE);
 
   EXPECT_EQ(0u, image_client.GetAndResetImageChangeCount());
-  gfx::ImageSkia image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
-  EXPECT_EQ(SK_ColorRED, image.bitmap()->getColor(5, 5));
+  gfx::ImageSkia image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
+  EXPECT_EQ(SK_ColorTRANSPARENT, image.bitmap()->getColor(5, 5));
 
   // Finish the later request, and verify the image gets updated.
   EXPECT_EQ(1u, image_generator.NumberOfPendingRequests());
@@ -911,8 +956,8 @@
   image_generator.FulfillRequest(0, SK_ColorGREEN);
 
   EXPECT_EQ(1u, image_client.GetAndResetImageChangeCount());
-  image = holding_space_item->image().image_skia();
-  EXPECT_EQ(gfx::Size(10, 10), image.size());
+  image = holding_space_item->image().GetImageSkia();
+  EXPECT_EQ(kImageSize, image.size());
   EXPECT_EQ(SK_ColorGREEN, image.bitmap()->getColor(5, 5));
 
   EXPECT_EQ(0u, image_generator.NumberOfPendingRequests());
diff --git a/ash/public/cpp/holding_space/holding_space_item_unittest.cc b/ash/public/cpp/holding_space/holding_space_item_unittest.cc
index 6d8203e..d88b89ed 100644
--- a/ash/public/cpp/holding_space/holding_space_item_unittest.cc
+++ b/ash/public/cpp/holding_space/holding_space_item_unittest.cc
@@ -11,8 +11,6 @@
 #include "base/callback_helpers.h"
 #include "base/test/bind.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/image/image_unittest_util.h"
 
 namespace ash {
 
@@ -29,7 +27,7 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
   return std::make_unique<HoldingSpaceImage>(
-      file_path, /*placeholder=*/gfx::test::CreateImageSkia(10, 10),
+      HoldingSpaceImage::GetMaxSizeForType(type), file_path,
       /*async_bitmap_resolver=*/base::DoNothing());
 }
 
@@ -41,7 +39,6 @@
 TEST_P(HoldingSpaceItemTest, Serialization) {
   const base::FilePath file_path("file_path");
   const GURL file_system_url("filesystem:file_system_url");
-  const gfx::ImageSkia placeholder(gfx::test::CreateImageSkia(10, 10));
 
   const auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
       /*type=*/GetParam(), file_path, file_system_url,
diff --git a/ash/public/cpp/views_text_services_context_menu_impl.cc b/ash/public/cpp/views_text_services_context_menu_impl.cc
index 42f1396a..7fd34053 100644
--- a/ash/public/cpp/views_text_services_context_menu_impl.cc
+++ b/ash/public/cpp/views_text_services_context_menu_impl.cc
@@ -93,6 +93,9 @@
   const int target_index = index_of_paste + 1;
   menu->InsertItemAt(target_index, IDS_APP_SHOW_CLIPBOARD_HISTORY,
                      l10n_util::GetStringUTF16(IDS_APP_SHOW_CLIPBOARD_HISTORY));
+  menu->SetIsNewFeatureAt(
+      target_index,
+      chromeos::features::IsClipboardHistoryContextMenuNudgeEnabled());
 }
 
 }  // namespace ash
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 89c5a901..598d538 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">ከ<ph name="NAME" /> ጋር በመገናኘት ላይ</translation>
 <translation id="3943857333388298514">ለጥፍ</translation>
 <translation id="394485226368336402">የድምጽ ቅንብሮች</translation>
+<translation id="3945867833895287237">ከመገናኛ ነጥብ ጋር በመገናኘት ላይ...</translation>
 <translation id="3962859241508114581">ቀዳሚ ትራክ</translation>
 <translation id="3969043077941541451">አጥፋ</translation>
 <translation id="397105322502079400">በማስላት ላይ...</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 400f566..1c7ebb4a 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -586,7 +586,7 @@
 <translation id="6291221004442998378">চাৰ্জ হৈ থকা নাই</translation>
 <translation id="6297287540776456956">কোনো অংশ বাছনি কৰিবলৈ ষ্টাইলাছ ব্যৱহাৰ কৰক</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ক <ph name="ROTATION" />লৈ ঘূৰোৱা হৈছিল</translation>
-<translation id="6315170314923504164">কণ্ঠস্বৰ</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> হৈছে <ph name="MANAGER" />এ পৰিচালনা কৰা এটা পৰিচালিত ছেশ্বন</translation>
 <translation id="6376931439017688372">ব্লুটুথ অন কৰা আছে</translation>
 <translation id="6381109794406942707">ডিভাইচটো আনলক কৰিবলৈ, আপোনাৰ পিনটো দিয়ক।</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index ca1618aa..23facf9 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Ідзе падключэнне да сеткі <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Уставіць</translation>
 <translation id="394485226368336402">Налады гуку</translation>
+<translation id="3945867833895287237">Ідзе падключэнне да хот-спота...</translation>
 <translation id="3962859241508114581">Папярэдні трэк</translation>
 <translation id="3969043077941541451">Выключана</translation>
 <translation id="397105322502079400">Ідзе разлік...</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 46a75b1..45cdef1 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627"><ph name="NAME" />-এ সংযোগ করা হচ্ছে</translation>
 <translation id="3943857333388298514">পেস্ট করুন</translation>
 <translation id="394485226368336402">অডিও সেটিংস</translation>
+<translation id="3945867833895287237">হটস্পটে কানেক্ট করা হচ্ছে...</translation>
 <translation id="3962859241508114581">আগের ট্র্যাক চালান</translation>
 <translation id="3969043077941541451">বন্ধ আছে</translation>
 <translation id="397105322502079400">গণনা করা হচ্ছে...</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 5fa81397..d614a33 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">S'està connectant amb <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Enganxa</translation>
 <translation id="394485226368336402">Configuració d'àudio</translation>
+<translation id="3945867833895287237">S'està connectant a un punt d'accés…</translation>
 <translation id="3962859241508114581">Pista anterior</translation>
 <translation id="3969043077941541451">Desactivada</translation>
 <translation id="397105322502079400">S’està calculant...</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 0b6234ef..a39d82a 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Připojování k síti <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Vložit</translation>
 <translation id="394485226368336402">Nastavení zvuku</translation>
+<translation id="3945867833895287237">Připojování k hotspotu…</translation>
 <translation id="3962859241508114581">Předchozí skladba</translation>
 <translation id="3969043077941541451">Vypnout</translation>
 <translation id="397105322502079400">Probíhá výpočet…</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 42faeb28..a92e80650 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -328,6 +328,7 @@
 <translation id="3901991538546252627"><ph name="NAME" /> sarera konektatzen</translation>
 <translation id="3943857333388298514">Itsatsi</translation>
 <translation id="394485226368336402">Audio-ezarpenak</translation>
+<translation id="3945867833895287237">Wifi-gunera konektatzen…</translation>
 <translation id="3962859241508114581">Aurreko pista</translation>
 <translation id="3969043077941541451">Desaktibatuta</translation>
 <translation id="397105322502079400">Kalkulatzen…</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 69c4908..a1c47b6 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">در حال اتصال به <ph name="NAME" /></translation>
 <translation id="3943857333388298514">جاگذاری</translation>
 <translation id="394485226368336402">تنظیمات صوتی</translation>
+<translation id="3945867833895287237">درحال اتصال به نقطه اتصال…</translation>
 <translation id="3962859241508114581">آهنگ قبلی</translation>
 <translation id="3969043077941541451">خاموش</translation>
 <translation id="397105322502079400">در حال محاسبه…</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 77d273e..fd924493 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Yhdistetään verkkoon <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Liitä</translation>
 <translation id="394485226368336402">Ääniasetukset</translation>
+<translation id="3945867833895287237">Yhdistetään hotspotiin…</translation>
 <translation id="3962859241508114581">Edellinen kappale</translation>
 <translation id="3969043077941541451">Pois päältä</translation>
 <translation id="397105322502079400">Lasketaan...</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 1f9d8ad..9492330 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Connexion à <ph name="NAME" /> en cours...</translation>
 <translation id="3943857333388298514">Coller</translation>
 <translation id="394485226368336402">Paramètres audio</translation>
+<translation id="3945867833895287237">Connexion au point d'accès en cours…</translation>
 <translation id="3962859241508114581">Chanson précédente</translation>
 <translation id="3969043077941541451">Désactivé</translation>
 <translation id="397105322502079400">Calcul en cours...</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 24909785..9eddf18 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -328,6 +328,7 @@
 <translation id="3901991538546252627">Conectando con <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Pegar</translation>
 <translation id="394485226368336402">Configuración do audio</translation>
+<translation id="3945867833895287237">Conectándose á zona wifi...</translation>
 <translation id="3962859241508114581">Pista anterior</translation>
 <translation id="3969043077941541451">Desactivar</translation>
 <translation id="397105322502079400">Calculando...</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 48611eb9..0c18f4e 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -588,7 +588,7 @@
 <translation id="6291221004442998378">चार्ज नहीं हो रहा है</translation>
 <translation id="6297287540776456956">कोई क्षेत्र चुनने के लिए स्टाइलस का उपयोग करें</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> को <ph name="ROTATION" /> पर घुमाया गया</translation>
-<translation id="6315170314923504164">ध्वनि</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> एक प्रबंधित सत्र है. इसे <ph name="MANAGER" /> प्रबंधित करता है</translation>
 <translation id="6376931439017688372">ब्लूटूथ चालू है</translation>
 <translation id="6381109794406942707">यह डिवाइस अनलॉक करने के लिए, अपना पिन डालें.</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 3d04f99e..784295e 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Միացում <ph name="NAME" />-ին</translation>
 <translation id="3943857333388298514">Տեղադրել</translation>
 <translation id="394485226368336402">Ձայնի կարգավորումներ</translation>
+<translation id="3945867833895287237">Միացում թեժ կետին…</translation>
 <translation id="3962859241508114581">Նախորդ կատարումը</translation>
 <translation id="3969043077941541451">Անջատված է</translation>
 <translation id="397105322502079400">Հաշվարկում…</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 9bbdfdb..c8077de 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -588,7 +588,7 @@
 <translation id="6291221004442998378">ಚಾರ್ಜ್‌ ಆಗುತ್ತಿಲ್ಲ</translation>
 <translation id="6297287540776456956">ಪ್ರದೇಶವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಸ್ಟೈಲಸ್ ಬಳಸಿ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ಅನ್ನು <ph name="ROTATION" /> ಗೆ ತಿರುಗಿಸಲಾಗಿದೆ</translation>
-<translation id="6315170314923504164">ಧ್ವನಿ</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ಎಂಬುದು <ph name="MANAGER" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾದ ಒಂದು ನಿರ್ವಹಿಸಿದ ಸೆಶನ್ ಆಗಿದೆ</translation>
 <translation id="6376931439017688372">ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ</translation>
 <translation id="6381109794406942707">ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ನಿಮ್ಮ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index d427992..f59dbed 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Jungiamasi prie „<ph name="NAME" />“</translation>
 <translation id="3943857333388298514">Įklijuoti</translation>
 <translation id="394485226368336402">Garso nustatymai</translation>
+<translation id="3945867833895287237">Prisijungiama prie viešosios interneto prieigos taško...</translation>
 <translation id="3962859241508114581">Ankstesnis takelis</translation>
 <translation id="3969043077941541451">Išjungta</translation>
 <translation id="397105322502079400">Skaičiuojama...</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index 5438e37..5c5c3a996 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -328,6 +328,7 @@
 <translation id="3901991538546252627">Се поврзува со <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Залепи</translation>
 <translation id="394485226368336402">Поставки за аудио</translation>
+<translation id="3945867833895287237">Се поврзува со точка на пристап…</translation>
 <translation id="3962859241508114581">Претходна песна</translation>
 <translation id="3969043077941541451">Исклучи</translation>
 <translation id="397105322502079400">Се пресметува…</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 1f0988f..76954f0 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -325,6 +325,7 @@
 <translation id="3901991538546252627"><ph name="NAME" /> എന്നതിലേക്ക് കണക്റ്റുചെയ്യുന്നു</translation>
 <translation id="3943857333388298514">ഒട്ടിക്കുക</translation>
 <translation id="394485226368336402">ഓഡിയോ ക്രമീകരണം</translation>
+<translation id="3945867833895287237">ഹോട്ട്സ്പോട്ടിലേക്ക് കണക്റ്റ് ചെയ്യുന്നു...</translation>
 <translation id="3962859241508114581">മുമ്പത്തെ ട്രാക്ക്</translation>
 <translation id="3969043077941541451">ഓഫാണ്</translation>
 <translation id="397105322502079400">കണക്കാക്കുന്നു...</translation>
@@ -584,7 +585,7 @@
 <translation id="6291221004442998378">ചാർജ് ചെയ്യുന്നില്ല</translation>
 <translation id="6297287540776456956">ആവശ്യമുള്ള ഏരിയ തിരഞ്ഞെടുക്കാൻ സ്റ്റൈലസ് ഉപയോഗിക്കുക</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> എന്നതിനെ <ph name="ROTATION" /> എന്നതിലേയ്‌ക്ക് തിരിച്ചു</translation>
-<translation id="6315170314923504164">വോയ്സ്</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="MANAGER" /> മാനേജ് ചെയ്യുന്ന ഒരു മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനാണ് <ph name="DISPLAY_NAME" /></translation>
 <translation id="6376931439017688372">Bluetooth ഓണാണ്</translation>
 <translation id="6381109794406942707">ഉപകരണം അൺലോക്ക് ചെയ്യാൻ, നിങ്ങളുടെ പിൻ നൽകുക.</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index a404311..e684be0 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -586,7 +586,7 @@
 <translation id="6291221004442998378">ଚାର୍ଜ ହେଉନାହିଁ</translation>
 <translation id="6297287540776456956">ଏକ ଅଞ୍ଚଳ ଚୟନ କରିବାକୁ ଷ୍ଟାଇଲସ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />କୁ <ph name="ROTATION" />ରେ ଘୂରାଗଲା</translation>
-<translation id="6315170314923504164">ଭଏସ୍</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ହେଉଛି <ph name="MANAGER" /> ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଥିବା ଏକ ପରିଚାଳିତ ସେସନ୍</translation>
 <translation id="6376931439017688372">ବ୍ଲୁଟୁଥ୍ ଚାଲୁ ଅଛି</translation>
 <translation id="6381109794406942707">ଡିଭାଇସକୁ ଅନଲକ୍ କରିବା ପାଇଁ ଆପଣଙ୍କର PIN ଲେଖନ୍ତୁ।</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 25fce6b..da732df 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Se conectează la <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Inserează</translation>
 <translation id="394485226368336402">Setări audio</translation>
+<translation id="3945867833895287237">Se conectează la hotspot...</translation>
 <translation id="3962859241508114581">Melodia anterioară</translation>
 <translation id="3969043077941541451">Dezactivată</translation>
 <translation id="397105322502079400">Se calculează...</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 8983905..41dad50 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627"><ph name="NAME" /> වෙත සබඳ වෙමින්</translation>
 <translation id="3943857333388298514">අලවන්න</translation>
 <translation id="394485226368336402">ශ්‍රව්‍ය සැකසීම්</translation>
+<translation id="3945867833895287237">හොට්ස්පොට් වෙත සම්බන්ධ වෙමින්...</translation>
 <translation id="3962859241508114581">පෙර ඛණ්ඩය</translation>
 <translation id="3969043077941541451">ක්‍රියාවිරහිතයි</translation>
 <translation id="397105322502079400">ගණනය කරමින්...</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 93d4a2a..2d4ba62 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Pripája sa k sieti <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Prilepiť</translation>
 <translation id="394485226368336402">Nastavenia zvuku</translation>
+<translation id="3945867833895287237">Pripája sa k hotspotu…</translation>
 <translation id="3962859241508114581">Predchádzajúca stopa</translation>
 <translation id="3969043077941541451">Vypnuté</translation>
 <translation id="397105322502079400">Prebieha výpočet...</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index abf266c..290a263 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -327,6 +327,7 @@
 <translation id="3901991538546252627">Po lidhet me <ph name="NAME" /></translation>
 <translation id="3943857333388298514">Ngjite</translation>
 <translation id="394485226368336402">Cilësimet e audios</translation>
+<translation id="3945867833895287237">Po lidhet me zonën e qasjes për internet...</translation>
 <translation id="3962859241508114581">Kënga e mëparshme</translation>
 <translation id="3969043077941541451">Joaktive</translation>
 <translation id="397105322502079400">Po llogarit...</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index e65e0ef..5814dea1 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -588,7 +588,7 @@
 <translation id="6291221004442998378">ఛార్జ్ కావడం లేదు</translation>
 <translation id="6297287540776456956">ప్రాంతాన్ని ఎంచుకోవడానికి స్టైలస్‌ను ఉపయోగించండి</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" />కి తిప్పబడింది</translation>
-<translation id="6315170314923504164">వాయిస్</translation>
+<translation id="6315170314923504164">Voice</translation>
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> అనేది ఒక మేనేజ్ చేయబడిన సెషన్, దీనిని <ph name="MANAGER" /> మేనేజ్ చేస్తోంది</translation>
 <translation id="6376931439017688372">బ్లూటూత్ ఆన్ చేయబడింది</translation>
 <translation id="6381109794406942707">పరికరాన్ని అన్‌లాక్ చేయడానికి, మీ పిన్‌ను ఎంటర్ చేయండి.</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index d593465..52dc1bb 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -514,7 +514,7 @@
 <translation id="5648021990716966815">Mikrofon jakı</translation>
 <translation id="5669267381087807207">Etkinleştiriliyor</translation>
 <translation id="5673434351075758678">Ayarlarınız senkronize edildikten sonra "<ph name="FROM_LOCALE" />" olan dil "<ph name="TO_LOCALE" />" olarak değiştirildi.</translation>
-<translation id="5677928146339483299">Engellendi</translation>
+<translation id="5677928146339483299">Engelleniyor</translation>
 <translation id="5679050765726761783">Düşük güçlü bir adaptör bağlandı</translation>
 <translation id="5682642926269496722">Google Asistan geçerli kullanıcı hesabı için kullanılamaz.</translation>
 <translation id="5689633613396158040">Gece Işığı, loş ışıkta ekranınızı daha iyi görmenizi ve daha kolay okumanızı sağlar. Gece Işığı'nın ne zaman açılacağını değiştirmek veya tamamen kapatmak için dokunun.</translation>
diff --git a/ash/system/holding_space/holding_space_drag_util.cc b/ash/system/holding_space/holding_space_drag_util.cc
index 9a789a1..fc68eb99 100644
--- a/ash/system/holding_space/holding_space_drag_util.cc
+++ b/ash/system/holding_space/holding_space_drag_util.cc
@@ -159,8 +159,8 @@
     // painting the background outside content bounds as might otherwise occur
     // due to pixel rounding. Failure to do so could result in white paint
     // artifacts.
-    gfx::Rect bounds(GetContentsBounds());
-    bounds.Inset(gfx::Insets(1));
+    gfx::RectF bounds(GetContentsBounds());
+    bounds.Inset(gfx::InsetsF(0.5f));
 
     cc::PaintFlags flags;
     flags.setAntiAlias(true);
@@ -210,7 +210,7 @@
         RoundedImageView::Alignment::kCenter));
     icon->SetPreferredSize(gfx::Size(kDragImageItemChipViewIconSize,
                                      kDragImageItemChipViewIconSize));
-    icon->SetImage(item->image().image_skia(), icon->GetPreferredSize());
+    icon->SetImage(item->image().GetImageSkia(icon->GetPreferredSize()));
 
     // Label.
     ScopedLightModeAsDefault scoped_light_mode;
@@ -246,7 +246,7 @@
     auto* image = AddChildView(std::make_unique<RoundedImageView>(
         kDragImageItemViewCornerRadius, RoundedImageView::Alignment::kCenter));
     image->SetPreferredSize(kDragImageItemScreenshotViewPreferredSize);
-    image->SetImage(item->image().image_skia(), image->GetPreferredSize());
+    image->SetImage(item->image().GetImageSkia(image->GetPreferredSize()));
   }
 };
 
diff --git a/ash/system/holding_space/holding_space_item_chip_view.cc b/ash/system/holding_space/holding_space_item_chip_view.cc
index 3f06e6b7..8d1e1ee3 100644
--- a/ash/system/holding_space/holding_space_item_chip_view.cc
+++ b/ash/system/holding_space/holding_space_item_chip_view.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/holding_space/holding_space_item_chip_view.h"
 
+#include <algorithm>
+
 #include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_item.h"
 #include "ash/public/cpp/rounded_image_view.h"
@@ -17,9 +19,41 @@
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/metadata/metadata_impl_macros.h"
+#include "ui/views/painter.h"
 
 namespace ash {
 
+// CirclePainter ---------------------------------------------------------------
+
+class CirclePainter : public views::Painter {
+ public:
+  CirclePainter(SkColor color, const gfx::InsetsF& insets)
+      : color_(color), insets_(insets) {}
+  CirclePainter(const CirclePainter&) = delete;
+  CirclePainter& operator=(const CirclePainter&) = delete;
+  ~CirclePainter() override = default;
+
+ private:
+  // views::Painter:
+  gfx::Size GetMinimumSize() const override { return gfx::Size(); }
+
+  void Paint(gfx::Canvas* canvas, const gfx::Size& size) override {
+    gfx::RectF bounds{gfx::SizeF(size)};
+    bounds.Inset(insets_);
+
+    cc::PaintFlags flags;
+    flags.setAntiAlias(true);
+    flags.setColor(color_);
+
+    canvas->DrawCircle(
+        bounds.CenterPoint(),
+        std::min(bounds.size().width(), bounds.size().height()) / 2.f, flags);
+  }
+
+  const SkColor color_;
+  const gfx::InsetsF insets_;
+};
+
 // HoldingSpaceItemChipView::LabelMaskOwner ------------------------------------
 
 class HoldingSpaceItemChipView::LabelMaskLayerOwner : public ui::LayerDelegate {
@@ -88,8 +122,12 @@
 
   image_ = AddChildView(std::make_unique<RoundedImageView>(
       kHoldingSpaceChipIconSize / 2, RoundedImageView::Alignment::kLeading));
-  image_->SetBackground(views::CreateRoundedRectBackground(
-      SK_ColorWHITE, kHoldingSpaceChipIconSize / 2));
+
+  // Shrink circular background by a single pixel to prevent painting outside of
+  // the image which may otherwise occur due to pixel rounding. Failure to do so
+  // could result in white paint artifacts.
+  image_->SetBackground(views::CreateBackgroundFromPainter(
+      std::make_unique<CirclePainter>(SK_ColorWHITE, gfx::InsetsF(0.5f))));
 
   // Subscribe to be notified of changes to `item_`'s image.
   image_subscription_ =
@@ -153,9 +191,8 @@
 }
 
 void HoldingSpaceItemChipView::UpdateImage() {
-  image_->SetImage(
-      item()->image().image_skia(),
-      gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize));
+  image_->SetImage(item()->image().GetImageSkia(
+      gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize)));
   SchedulePaint();
 }
 
diff --git a/ash/system/holding_space/holding_space_item_screen_capture_view.cc b/ash/system/holding_space/holding_space_item_screen_capture_view.cc
index 96630d1..9afbb76 100644
--- a/ash/system/holding_space/holding_space_item_screen_capture_view.cc
+++ b/ash/system/holding_space/holding_space_item_screen_capture_view.cc
@@ -67,8 +67,8 @@
     default;
 
 void HoldingSpaceItemScreenCaptureView::UpdateImage() {
-  image_->SetImage(item()->image().image_skia(),
-                   kHoldingSpaceScreenCaptureSize);
+  image_->SetImage(
+      item()->image().GetImageSkia(kHoldingSpaceScreenCaptureSize));
   SchedulePaint();
 }
 
diff --git a/ash/system/holding_space/holding_space_tray_icon_preview.cc b/ash/system/holding_space/holding_space_tray_icon_preview.cc
index 9c89059..6f20f1dd 100644
--- a/ash/system/holding_space/holding_space_tray_icon_preview.cc
+++ b/ash/system/holding_space/holding_space_tray_icon_preview.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/holding_space/holding_space_tray_icon_preview.h"
 
+#include <algorithm>
+
 #include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_image.h"
 #include "ash/public/cpp/holding_space/holding_space_item.h"
@@ -20,12 +22,16 @@
 #include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/image/image_skia_source.h"
+#include "ui/gfx/shadow_util.h"
 #include "ui/gfx/skia_paint_util.h"
 
 namespace ash {
 
 namespace {
 
+// Appearance.
+constexpr int kElevation = 1;
+
 // The duration of each of the preview icon bounce animation.
 constexpr base::TimeDelta kBounceAnimationSegmentDuration =
     base::TimeDelta::FromMilliseconds(250);
@@ -43,7 +49,15 @@
 
 // Returns the preview icon contents size.
 gfx::Size GetPreviewSize() {
-  return gfx::Size(kTrayItemSize, kTrayItemSize);
+  return gfx::Size(kHoldingSpaceTrayIconPreviewSize,
+                   kHoldingSpaceTrayIconPreviewSize);
+}
+
+// Returns the shadow details for painting elevation.
+const gfx::ShadowDetails& GetShadowDetails() {
+  const gfx::Size size(GetPreviewSize());
+  const int radius = std::min(size.height(), size.width()) / 2;
+  return gfx::ShadowDetails::Get(kElevation, radius);
 }
 
 // Returns whether the specified `shelf_alignment` is horizontal.
@@ -82,26 +96,12 @@
   gfx::ImageSkiaRep GetImageForScale(float scale) override {
     gfx::ImageSkia image = item_image_;
 
-    // Crop to square (if necessary).
-    gfx::Size square_size = image.size();
-    square_size.SetToMin(gfx::Size(square_size.height(), square_size.width()));
-    if (image.size() != square_size) {
-      gfx::Rect square_rect(image.size());
-      square_rect.ClampToCenteredSize(square_size);
-      image = gfx::ImageSkiaOperations::ExtractSubset(image, square_rect);
-    }
-
-    // Resize to contents size (if necessary).
-    gfx::Size contents_size = GetPreviewSize();
-    if (image.size() != contents_size) {
-      image = gfx::ImageSkiaOperations::CreateResizedImage(
-          image, skia::ImageOperations::ResizeMethod::RESIZE_BEST,
-          contents_size);
-    }
+    // The `image` should already be sized appropriately.
+    DCHECK_EQ(image.size(), GetPreviewSize());
 
     // Clip to circle.
-    // NOTE: Since `image` has already been cropped to a square, the center
-    // x-coordinate, center y-coordinate, and radius all equal the same value.
+    // NOTE: Since `image` is a square, the center x-coordinate, center
+    // y-coordinate, and radius all equal the same value.
     const int radius = image.width() / 2;
     gfx::Canvas canvas(image.size(), scale, /*is_opaque=*/false);
     canvas.ClipPath(SkPath::Circle(/*cx=*/radius, /*cy=*/radius, radius),
@@ -122,9 +122,10 @@
     views::View* container,
     const HoldingSpaceItem* item)
     : shelf_(shelf), container_(container), item_(item) {
+  const gfx::Size size(GetPreviewSize());
   contents_image_ = gfx::ImageSkia(
-      std::make_unique<ContentsImageSource>(item->image().image_skia()),
-      GetPreviewSize());
+      std::make_unique<ContentsImageSource>(item->image().GetImageSkia(size)),
+      size);
   image_subscription_ =
       item->image().AddImageSkiaChangedCallback(base::BindRepeating(
           &HoldingSpaceTrayIconPreview::OnHoldingSpaceItemImageChanged,
@@ -319,13 +320,16 @@
   cc::PaintFlags flags;
   flags.setAntiAlias(true);
   flags.setColor(SK_ColorWHITE);
+  flags.setLooper(gfx::CreateShadowDrawLooper(GetShadowDetails().values));
   canvas->DrawCircle(
-      contents_bounds.CenterPoint(),
-      std::min(contents_bounds.width(), contents_bounds.height()) / 2 - 1,
+      gfx::PointF(contents_bounds.CenterPoint()),
+      std::min(contents_bounds.width(), contents_bounds.height()) / 2 - 0.5,
       flags);
 
   // Contents.
+  // NOTE: The `contents_image_` should already be resized.
   if (!contents_image_.isNull()) {
+    DCHECK_EQ(contents_image_.size(), contents_bounds.size());
     canvas->DrawImageInt(contents_image_, contents_bounds.x(),
                          contents_bounds.y());
   }
@@ -360,9 +364,10 @@
 }
 
 void HoldingSpaceTrayIconPreview::OnHoldingSpaceItemImageChanged() {
+  const gfx::Size size(GetPreviewSize());
   contents_image_ = gfx::ImageSkia(
-      std::make_unique<ContentsImageSource>(item_->image().image_skia()),
-      GetPreviewSize());
+      std::make_unique<ContentsImageSource>(item_->image().GetImageSkia(size)),
+      size);
   InvalidateLayer();
 }
 
diff --git a/ash/system/holding_space/holding_space_tray_unittest.cc b/ash/system/holding_space/holding_space_tray_unittest.cc
index a07debaf..0496a3cc 100644
--- a/ash/system/holding_space/holding_space_tray_unittest.cc
+++ b/ash/system/holding_space/holding_space_tray_unittest.cc
@@ -55,7 +55,7 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
   return std::make_unique<HoldingSpaceImage>(
-      file_path, /*placeholder=*/gfx::ImageSkia(),
+      HoldingSpaceImage::GetMaxSizeForType(type), file_path,
       /*async_bitmap_resolver=*/base::DoNothing());
 }
 
diff --git a/ash/wm/desks/desks_unittests.cc b/ash/wm/desks/desks_unittests.cc
index 5adfe22c..db25e16 100644
--- a/ash/wm/desks/desks_unittests.cc
+++ b/ash/wm/desks/desks_unittests.cc
@@ -3955,7 +3955,7 @@
 
   // Remove the active desk. The visible on all desks windows should be on
   // |desk_2|.
-  controller->RemoveDesk(desk_1, DesksCreationRemovalSource::kKeyboard);
+  RemoveDesk(desk_1);
   auto desk_2_children = desk_2->GetDeskContainerForRoot(root)->children();
   EXPECT_EQ(2u, desk_2_children.size());
   EXPECT_TRUE(IsStackedBelow(win0.get(), win1.get()));
diff --git a/ash/wm/window_properties.h b/ash/wm/window_properties.h
index b0c9278..4a88316d 100644
--- a/ash/wm/window_properties.h
+++ b/ash/wm/window_properties.h
@@ -7,7 +7,6 @@
 
 #include "ash/ash_export.h"
 #include "ui/base/class_property.h"
-#include "ui/base/ui_base_types.h"
 
 namespace aura {
 template <typename T>
diff --git a/base/metrics/field_trial_param_associator.cc b/base/metrics/field_trial_param_associator.cc
index 8414b52..3dbc5516 100644
--- a/base/metrics/field_trial_param_associator.cc
+++ b/base/metrics/field_trial_param_associator.cc
@@ -39,16 +39,13 @@
   return true;
 }
 
-bool FieldTrialParamAssociator::GetFieldTrialParams(
-    const std::string& trial_name,
-    FieldTrialParams* params) {
-  FieldTrial* field_trial = FieldTrialList::Find(trial_name);
+bool FieldTrialParamAssociator::GetFieldTrialParams(FieldTrial* field_trial,
+                                                    FieldTrialParams* params) {
   if (!field_trial)
     return false;
-
   // First try the local map, falling back to getting it from shared memory.
-  if (GetFieldTrialParamsWithoutFallback(trial_name, field_trial->group_name(),
-                                         params)) {
+  if (GetFieldTrialParamsWithoutFallback(field_trial->trial_name(),
+                                         field_trial->group_name(), params)) {
     return true;
   }
 
diff --git a/base/metrics/field_trial_param_associator.h b/base/metrics/field_trial_param_associator.h
index 27c5904..df507973 100644
--- a/base/metrics/field_trial_param_associator.h
+++ b/base/metrics/field_trial_param_associator.h
@@ -33,9 +33,9 @@
                                  const FieldTrialParams& params);
 
   // Gets the parameters for a field trial and its chosen group. If not found in
-  // field_trial_params_, then tries to looks it up in shared memory.
-  bool GetFieldTrialParams(const std::string& trial_name,
-                           FieldTrialParams* params);
+  // field_trial_params_, then tries to looks it up in shared memory. Returns
+  // false if no params are available or the passed |field_trial| is null.
+  bool GetFieldTrialParams(FieldTrial* field_trial, FieldTrialParams* params);
 
   // Gets the parameters for a field trial and its chosen group. Does not
   // fallback to looking it up in shared memory. This should only be used if you
diff --git a/base/metrics/field_trial_params.cc b/base/metrics/field_trial_params.cc
index 2f985c94..608d5d0 100644
--- a/base/metrics/field_trial_params.cc
+++ b/base/metrics/field_trial_params.cc
@@ -86,8 +86,9 @@
 
 bool GetFieldTrialParams(const std::string& trial_name,
                          FieldTrialParams* params) {
-  return FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams(
-      trial_name, params);
+  FieldTrial* trial = FieldTrialList::Find(trial_name);
+  return FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams(trial,
+                                                                       params);
 }
 
 bool GetFieldTrialParamsByFeature(const Feature& feature,
@@ -96,10 +97,8 @@
     return false;
 
   FieldTrial* trial = FeatureList::GetFieldTrial(feature);
-  if (!trial)
-    return false;
-
-  return GetFieldTrialParams(trial->trial_name(), params);
+  return FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams(trial,
+                                                                       params);
 }
 
 std::string GetFieldTrialParamValue(const std::string& trial_name,
diff --git a/base/metrics/field_trial_unittest.cc b/base/metrics/field_trial_unittest.cc
index 6fbddd0..07fbdd2 100644
--- a/base/metrics/field_trial_unittest.cc
+++ b/base/metrics/field_trial_unittest.cc
@@ -1275,8 +1275,7 @@
 
   // Check that we fetch the param from shared memory properly.
   std::map<std::string, std::string> new_params;
-  FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams(trial_name,
-                                                                &new_params);
+  GetFieldTrialParams(trial_name, &new_params);
   EXPECT_EQ("value1", new_params["key1"]);
   EXPECT_EQ("value2", new_params["key2"]);
   EXPECT_EQ(2U, new_params.size());
@@ -1315,8 +1314,7 @@
 
     // Check that there are no params associated with the field trial anymore.
     std::map<std::string, std::string> new_params;
-    FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams(trial_name,
-                                                                  &new_params);
+    GetFieldTrialParams(trial_name, &new_params);
     EXPECT_EQ(0U, new_params.size());
 
     // Now duplicate the handle so we can easily check that the trial is still
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index 01534350..c6b87de 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -1097,10 +1097,11 @@
     int top,
     std::string name,
     const WebVitalMetrics::MetricsInfo& info,
+    bool has_value,
     double value) const {
   std::string value_str = "-";
   SkColor metrics_color = DebugColors::HUDTitleColor();
-  if (value >= 0.f) {
+  if (has_value) {
     value_str = ToStringTwoDecimalPrecision(value) + info.UnitToString();
     if (value < info.green_threshold)
       metrics_color = SK_ColorGREEN;
@@ -1132,25 +1133,27 @@
   DrawGraphBackground(canvas, &flags, area);
 
   int current_top = top + metrics_sizes.kTopPadding + metrics_sizes.kFontHeight;
-  double lcp_value = -1;
-  if (web_vital_metrics_ &&
-      web_vital_metrics_->largest_contentful_paint.has_value())
-    lcp_value = web_vital_metrics_->largest_contentful_paint->InSecondsF();
-  current_top = DrawSingleMetric(canvas, left, left + width, current_top,
-                                 "Largest Contentful Paint",
-                                 WebVitalMetrics::lcp_info, lcp_value);
+  double metric_value = 0.f;
+  bool has_lcp = web_vital_metrics_ && web_vital_metrics_->has_lcp;
+  if (has_lcp)
+    metric_value = web_vital_metrics_->largest_contentful_paint.InSecondsF();
+  current_top = DrawSingleMetric(
+      canvas, left, left + width, current_top, "Largest Contentful Paint",
+      WebVitalMetrics::lcp_info, has_lcp, metric_value);
 
-  double fid_value = -1;
-  if (web_vital_metrics_ && web_vital_metrics_->first_input_delay.has_value())
-    fid_value = web_vital_metrics_->first_input_delay->InMillisecondsF();
+  bool has_fid = web_vital_metrics_ && web_vital_metrics_->has_fid;
+  if (has_fid)
+    metric_value = web_vital_metrics_->first_input_delay.InMillisecondsF();
   current_top = DrawSingleMetric(canvas, left, left + width, current_top,
                                  "First Input Delay", WebVitalMetrics::fid_info,
-                                 fid_value);
+                                 has_fid, metric_value);
 
+  bool has_layout_shift = web_vital_metrics_ && web_vital_metrics_->has_cls;
+  if (has_layout_shift)
+    metric_value = web_vital_metrics_->layout_shift;
   current_top = DrawSingleMetric(
       canvas, left, left + width, current_top, "Cumulative Layout Shift",
-      WebVitalMetrics::cls_info,
-      web_vital_metrics_ ? web_vital_metrics_->layout_shift : -1);
+      WebVitalMetrics::cls_info, has_layout_shift, metric_value);
 
   return area;
 }
diff --git a/cc/layers/heads_up_display_layer_impl.h b/cc/layers/heads_up_display_layer_impl.h
index 6e6a08e..6a7e83a5 100644
--- a/cc/layers/heads_up_display_layer_impl.h
+++ b/cc/layers/heads_up_display_layer_impl.h
@@ -143,6 +143,7 @@
                        int top,
                        std::string name,
                        const WebVitalMetrics::MetricsInfo& info,
+                       bool has_value,
                        double value) const;
   SkRect DrawWebVitalMetrics(PaintCanvas* canvas,
                              int left,
diff --git a/cc/metrics/web_vital_metrics.cc b/cc/metrics/web_vital_metrics.cc
index cbc86a7..1bb822d 100644
--- a/cc/metrics/web_vital_metrics.cc
+++ b/cc/metrics/web_vital_metrics.cc
@@ -10,21 +10,4 @@
 constexpr WebVitalMetrics::MetricsInfo WebVitalMetrics::fid_info;
 constexpr WebVitalMetrics::MetricsInfo WebVitalMetrics::cls_info;
 
-WebVitalMetrics::WebVitalMetrics() = default;
-
-WebVitalMetrics::WebVitalMetrics(const WebVitalMetrics& other) = default;
-
-bool WebVitalMetrics::HasValue() const {
-  if (largest_contentful_paint.has_value())
-    return true;
-
-  if (first_input_delay.has_value())
-    return true;
-
-  if (layout_shift > 0.f)
-    return true;
-
-  return false;
-}
-
 }  // namespace cc
diff --git a/cc/metrics/web_vital_metrics.h b/cc/metrics/web_vital_metrics.h
index d61143b..35b46b4 100644
--- a/cc/metrics/web_vital_metrics.h
+++ b/cc/metrics/web_vital_metrics.h
@@ -14,14 +14,17 @@
 
 // Web Vital metrics reported from blink to be displayed with cc's HUD display.
 struct CC_EXPORT WebVitalMetrics {
-  base::Optional<base::TimeDelta> largest_contentful_paint;
-  base::Optional<base::TimeDelta> first_input_delay;
+  bool has_lcp = false;
+  base::TimeDelta largest_contentful_paint;
+  bool has_fid = false;
+  base::TimeDelta first_input_delay;
+  bool has_cls = false;
   double layout_shift = 0.f;
 
-  WebVitalMetrics();
-  WebVitalMetrics(const WebVitalMetrics& other);
+  WebVitalMetrics() = default;
+  WebVitalMetrics(const WebVitalMetrics& other) = default;
 
-  bool HasValue() const;
+  bool HasValue() const { return has_lcp || has_fid || has_cls; }
 
   struct MetricsInfo {
     double green_threshold;
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 7b11dac..8ee6279 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2772,6 +2772,9 @@
   frame_trackers_.NotifyBeginImplFrame(args);
   total_frame_counter_.OnBeginFrame(args);
 
+  UMA_HISTOGRAM_CUSTOM_COUNTS("GPU.AcceleratedSurfaceRefreshRate",
+                              1 / args.interval.InSecondsF(), 0, 121, 122);
+
   if (is_likely_to_require_a_draw_) {
     // Optimistically schedule a draw. This will let us expect the tile manager
     // to complete its work so that we can draw new tiles within the impl frame
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 0827f3d..6c7a2402 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -199,7 +199,6 @@
     "//chrome/browser/signin/services/android:java_resources",
     "//chrome/browser/signin/ui/android:java_resources",
     "//chrome/browser/ui/android/appmenu:java_resources",
-    "//chrome/browser/ui/android/default_browser_promo:java_resources",
     "//chrome/browser/ui/android/favicon:java_resources",
     "//chrome/browser/ui/android/strings:ui_strings_grd",
     "//chrome/browser/ui/android/theme:java_resources",
@@ -1110,8 +1109,6 @@
     "//chrome/browser/thumbnail:javatests",
     "//chrome/browser/ui/android/appmenu:java",
     "//chrome/browser/ui/android/appmenu/test:test_support_java",
-    "//chrome/browser/ui/android/default_browser_promo:java",
-    "//chrome/browser/ui/android/default_browser_promo:javatests",
     "//chrome/browser/ui/android/favicon:java",
     "//chrome/browser/ui/android/layouts:java",
     "//chrome/browser/ui/android/layouts/third_party/float_property:java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index 742ba33..6d313d23 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -347,6 +347,7 @@
   "javatests/src/org/chromium/chrome/browser/omnibox/suggestions/tiles/TileSuggestionProcessorUnitTest.java",
   "javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiRenderTest.java",
   "javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchConsentUiTest.java",
+  "javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceRenderTest.java",
   "javatests/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandlerTest.java",
   "javatests/src/org/chromium/chrome/browser/page_info/ConnectionInfoViewTest.java",
   "javatests/src/org/chromium/chrome/browser/page_info/CookieControlsViewTest.java",
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
index 0482f84..cb43959 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
@@ -382,12 +382,6 @@
         return ChromeAccessibilityUtil.get().isAccessibilityEnabled();
     }
 
-    /** Returns whether the user has seen a trigger script before or not. */
-    @CalledByNative
-    private static boolean isFirstTimeTriggerScriptUser() {
-        return AutofillAssistantPreferencesUtil.isAutofillAssistantFirstTimeLiteScriptUser();
-    }
-
     /** Adds a dynamic action to the given reporter. */
     @CalledByNative
     private void onFetchWebsiteActions(Callback<Boolean> callback, boolean success) {
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java
index 12d5981..9f0c648 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java
@@ -128,6 +128,12 @@
         return mContext;
     }
 
+    /** Returns whether the user has seen a trigger script before or not. */
+    @CalledByNative
+    private static boolean isFirstTimeTriggerScriptUser() {
+        return AutofillAssistantPreferencesUtil.isAutofillAssistantFirstTimeLiteScriptUser();
+    }
+
     /**
      * Used by native to update and show the UI. The header should be created and updated using
      * {@code createHeaderAndGetModel} prior to calling this function.
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
index 8477890..8111ca3 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
@@ -52,7 +52,7 @@
     }
 
     /** Returns whether the user has seen a lite script before or not. */
-    static boolean isAutofillAssistantFirstTimeLiteScriptUser() {
+    public static boolean isAutofillAssistantFirstTimeLiteScriptUser() {
         return SharedPreferencesManager.getInstance().readBoolean(
                 ChromePreferenceKeys.AUTOFILL_ASSISTANT_FIRST_TIME_LITE_SCRIPT_USER, true);
     }
diff --git a/chrome/android/feed/merging.md b/chrome/android/feed/merging.md
index a7306bf..d6ce70a 100644
--- a/chrome/android/feed/merging.md
+++ b/chrome/android/feed/merging.md
@@ -8,4 +8,4 @@
 The hash below represents the last commit from that repo that was reviewed for
 the potential need to merge here.
 
-Last checked commit ID: 77405b1370937094ae69af4933f3e06109dd53ba
+Last checked commit ID: c6eb65cc4e080d96c453c677df9bf58b3abcb9b8
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index e32113a..0330c79 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -151,7 +151,6 @@
 import org.chromium.chrome.browser.ui.RootUiCoordinator;
 import org.chromium.chrome.browser.ui.TabObscuringHandler;
 import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
-import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils;
 import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController;
 import org.chromium.chrome.browser.usage_stats.UsageStatsService;
 import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
@@ -1704,8 +1703,6 @@
 
             ChromeSurveyController.initialize(mTabModelSelectorImpl);
 
-            DefaultBrowserPromoUtils.maybeRecordOutcomeOnStart();
-
             if (mStartSurfaceSupplier.get() != null && mOverviewShownOnStart) {
                 mStartSurfaceSupplier.get().onOverviewShownAtLaunch(getOnCreateTimestampMs());
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
index 55f7f88..9ccdb8e7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -135,7 +135,6 @@
 import org.chromium.chrome.browser.share.ShareDelegate;
 import org.chromium.chrome.browser.share.ShareDelegateImpl;
 import org.chromium.chrome.browser.sync.ProfileSyncService;
-import org.chromium.chrome.browser.sync.SyncController;
 import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabHidingType;
@@ -897,11 +896,9 @@
         if (!mStarted) return; // Sync state reporting should work only in started state.
         if (mContextReporter != null || getActivityTab() == null) return;
 
-        final SyncController syncController = SyncController.get();
         final ProfileSyncService syncService = ProfileSyncService.get();
 
-        if (syncController != null && syncController.isSyncingUrlsWithKeystorePassphrase()) {
-            assert syncService != null;
+        if (syncService != null && syncService.isSyncingUrlsWithKeystorePassphrase()) {
             mContextReporter = AppHooks.get().createGsaHelper().getContextReporter(this);
 
             if (mSyncStateChangedListener != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAState.java b/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAState.java
index 3d3df8890..3bfa3860 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAState.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAState.java
@@ -21,6 +21,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Log;
+import org.chromium.base.ObserverList;
 import org.chromium.base.PackageManagerUtils;
 import org.chromium.base.PackageUtils;
 import org.chromium.base.ThreadUtils;
@@ -35,9 +36,15 @@
 import java.util.List;
 
 /**
- * A class responsible fore representing the current state of Chrome's integration with GSA.
+ * A class responsible for representing the current state of Chrome's integration with GSA.
  */
 public class GSAState {
+    /** Used to observe state changes in the class. */
+    public interface Observer {
+        /** Called when the GSA account name is set. */
+        void onSetGsaAccount();
+    }
+
     private static final String TAG = "GSAState";
 
     private static final int GSA_VERSION_FOR_DOCUMENT = 300401021;
@@ -67,6 +74,7 @@
      * The application context to use.
      */
     private final Context mContext;
+    private final ObserverList<Observer> mObserverList = new ObserverList<>();
 
     /**
      * Caches the result of a computation on whether GSA is available.
@@ -74,10 +82,10 @@
     private Boolean mGsaAvailable;
 
     /**
-     * The Google account being used by GSA according to the latest update we have received.
-     * This may be null.
+     * The Google account email address being used by GSA according to the latest update we have
+     * received.
      */
-    private String mGsaAccount;
+    private @Nullable String mGsaAccount;
 
     /**
      * Returns the singleton instance of GSAState and creates one if necessary.
@@ -110,6 +118,10 @@
      */
     public void setGsaAccount(String gsaAccount) {
         mGsaAccount = gsaAccount;
+
+        for (Observer observer : mObserverList) {
+            observer.onSetGsaAccount();
+        }
     }
 
     /**
@@ -276,4 +288,28 @@
 
         return Boolean.parseBoolean(cursor.getString(0));
     }
+
+    /**
+     * Adds an observer.
+     * @param observer The observer to add.
+     */
+    public void addObserver(@NonNull Observer observer) {
+        mObserverList.addObserver(observer);
+    }
+
+    /**
+     * Removes an observer.
+     * @param observer The observer to remove.
+     */
+    public void removeObserver(@NonNull Observer observer) {
+        mObserverList.removeObserver(observer);
+    }
+
+    /**
+     * Sets an instance for testing.
+     * @param gsaState The instance to set for testing.
+     */
+    public static void setInstanceForTesting(GSAState gsaState) {
+        sGSAState = gsaState;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index 6a218a2..8c5b659 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -5,8 +5,6 @@
 package org.chromium.chrome.browser.omnibox;
 
 import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -169,6 +167,8 @@
         mLocationBarDataProvider = locationBarDataProvider;
         mVoiceRecognitionHandler = voiceRecognitionHandler;
         mAssistantVoiceSearchServiceSupplier = assistantVoiceSearchSupplier;
+        mAssistantVoiceSearchServiceSupplier.onAvailable(
+                (assistantVoiceSearchService) -> onAssistantVoiceSearchServiceChanged());
 
         updateButtonVisibility();
         updateShouldAnimateIconChanges();
@@ -315,7 +315,7 @@
     /** Updates visuals after the primary color has changed. */
     @CallSuper
     public void onPrimaryColorChanged() {
-        updateAssistantVoiceSearchColors();
+        updateAssistantVoiceSearchDrawableAndColors();
         updateUseDarkColors();
     }
 
@@ -369,27 +369,18 @@
     }
 
     /* package */ void onAssistantVoiceSearchServiceChanged() {
-        AssistantVoiceSearchService assistantVoiceSearchService =
-                mAssistantVoiceSearchServiceSupplier.get();
-        assert assistantVoiceSearchService != null;
-        Drawable drawable = assistantVoiceSearchService.getCurrentMicDrawable();
-        mMicButton.setImageDrawable(drawable);
-        updateAssistantVoiceSearchColors();
+        updateAssistantVoiceSearchDrawableAndColors();
     }
 
-    private void updateAssistantVoiceSearchColors() {
+    private void updateAssistantVoiceSearchDrawableAndColors() {
         AssistantVoiceSearchService assistantVoiceSearchService =
                 mAssistantVoiceSearchServiceSupplier.get();
-        ColorStateList colorStateList;
-        // This will be called between inflation and initialization. For those calls, using a null
-        // ColorStateList should have no visible impact to the user.
-        if (assistantVoiceSearchService == null) {
-            colorStateList = null;
-        } else {
-            colorStateList = assistantVoiceSearchService.getMicButtonColorStateList(
-                    getPrimaryBackgroundColor(), getContext());
-        }
-        ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList);
+        if (assistantVoiceSearchService == null) return;
+
+        ApiCompatibilityUtils.setImageTintList(mMicButton,
+                assistantVoiceSearchService.getMicButtonColorStateList(
+                        getPrimaryBackgroundColor(), getContext()));
+        mMicButton.setImageDrawable(assistantVoiceSearchService.getCurrentMicDrawable());
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java
index ff02cb1..7a6bd8e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java
@@ -30,6 +30,8 @@
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.gsa.GSAState;
 import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.profiles.ProfileManager;
 import org.chromium.components.browser_ui.styles.ChromeColors;
 import org.chromium.components.externalauth.ExternalAuthUtils;
 import org.chromium.components.search_engines.TemplateUrlService;
@@ -42,7 +44,8 @@
  * Service for state tracking and event delivery to classes that need to observe the state
  * of Assistant Voice Search.
  **/
-public class AssistantVoiceSearchService implements TemplateUrlService.TemplateUrlServiceObserver {
+public class AssistantVoiceSearchService implements TemplateUrlService.TemplateUrlServiceObserver,
+                                                    GSAState.Observer, ProfileManager.Observer {
     private static final String USER_ELIGIBILITY_HISTOGRAM =
             "Assistant.VoiceSearch.UserEligibility";
     @VisibleForTesting
@@ -114,22 +117,16 @@
         mSharedPrefsManager = sharedPrefsManager;
         mObserver = observer;
 
+        ProfileManager.addObserver(this);
+        mGsaState.addObserver(this);
         mTemplateUrlService.addObserver(this);
         initializeAssistantVoiceSearchState();
     }
 
     public void destroy() {
         mTemplateUrlService.removeObserver(this);
-    }
-
-    @Override
-    public void onTemplateURLServiceChanged() {
-        boolean searchEngineGoogle = mTemplateUrlService.isDefaultSearchEngineGoogle();
-        if (mIsDefaultSearchEngineGoogle == searchEngineGoogle) return;
-
-        mIsDefaultSearchEngineGoogle = searchEngineGoogle;
-        mShouldShowColorfulMic = isColorfulMicEnabled();
-        notifyObserver();
+        mGsaState.removeObserver(this);
+        ProfileManager.removeObserver(this);
     }
 
     private void notifyObserver() {
@@ -202,6 +199,11 @@
         return AppCompatResources.getColorStateList(context, id);
     }
 
+    /** Called from {@link VoiceRecognitionHandler} after the consent flow has completed. */
+    public void onAssistantConsentDialogComplete(boolean useAssistant) {
+        if (useAssistant) updateColorfulMicState();
+    }
+
     /**
      * @return Whether the user has enabled the feature, ensure {@link needsEnabledCheck} is
      *         called first.
@@ -222,6 +224,7 @@
             sAgsaSupportsAssistantVoiceSearch =
                     mSharedPrefsManager.readBoolean(ASSISTANT_VOICE_SEARCH_SUPPORTED,
                             /* default= */ false);
+            updateColorfulMicState();
         } else {
             DeferredStartupHandler.getInstance().addDeferredTask(() -> {
                 // Only do this once per browser start.
@@ -240,6 +243,7 @@
                                 sAgsaSupportsAssistantVoiceSearch);
                         mSharedPrefsManager.writeString(
                                 ASSISTANT_LAST_VERSION, currentAgsaVersion);
+                        updateColorfulMicState();
                     }
                 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
             });
@@ -326,14 +330,61 @@
                 USER_ELIGIBILITY_HISTOGRAM, canRequestAssistantVoiceSearch());
     }
 
+    private void updateColorfulMicState() {
+        final boolean shouldShowColorfulMic = isColorfulMicEnabled();
+        // Execute the update/notification in an AsyncTask to prevent re-entrant calls.
+        new AsyncTask<Boolean>() {
+            @Override
+            protected Boolean doInBackground() {
+                return mShouldShowColorfulMic != shouldShowColorfulMic;
+            }
+            @Override
+            protected void onPostExecute(Boolean notify) {
+                mShouldShowColorfulMic = shouldShowColorfulMic;
+                if (notify) notifyObserver();
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    // TemplateUrlService.TemplateUrlServiceObserver implementation
+
+    @Override
+    public void onTemplateURLServiceChanged() {
+        boolean searchEngineGoogle = mTemplateUrlService.isDefaultSearchEngineGoogle();
+        if (mIsDefaultSearchEngineGoogle == searchEngineGoogle) return;
+
+        mIsDefaultSearchEngineGoogle = searchEngineGoogle;
+        mShouldShowColorfulMic = isColorfulMicEnabled();
+        notifyObserver();
+    }
+
+    // GSAState.Observer implementation
+
+    @Override
+    public void onSetGsaAccount() {
+        updateColorfulMicState();
+    }
+
+    // ProfileManager.Observer implementation
+
+    @Override
+    public void onProfileAdded(Profile profile) {
+        updateColorfulMicState();
+    }
+
+    @Override
+    public void onProfileDestroyed(Profile profile) {}
+
+    // Test-only methods
+
     /** Enable the colorful mic for testing purposes. */
     void setColorfulMicEnabledForTesting(boolean enabled) {
         mIsColorfulMicEnabled = enabled;
         mShouldShowColorfulMic = enabled;
     }
 
-    // Allows testing the NULL case for Boolean.
-    static void setAgsaSupportsAssistantVoiceSearchForTesting(Boolean value) {
+    /** Allows skipping the cross-app check for testing. */
+    public static void setAgsaSupportsAssistantVoiceSearchForTesting(Boolean value) {
         sAgsaSupportsAssistantVoiceSearch = value;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java
index 9658dd3..cabf062 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java
@@ -590,6 +590,9 @@
             AssistantVoiceSearchConsentUi.show(windowAndroid,
                     SharedPreferencesManager.getInstance(), new SettingsLauncherImpl(),
                     (useAssistant) -> {
+                        // Notify the service about the consent completion.
+                        assistantVoiceSearchService.onAssistantConsentDialogComplete(useAssistant);
+
                         if (useAssistant) {
                             if (!startAGSAForAssistantVoiceSearch(
                                         activity, windowAndroid, source)) {
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 8a43c46..26784502 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
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.payments;
 
+import android.app.Activity;
 import android.content.Context;
 import android.text.TextUtils;
 
@@ -11,9 +12,14 @@
 import androidx.collection.ArrayMap;
 
 import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
+import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.payments.ui.PaymentUiService;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.components.autofill.EditableOption;
 import org.chromium.components.payments.AbortReason;
 import org.chromium.components.payments.AndroidPaymentApp;
@@ -123,15 +129,15 @@
         }
 
         /**
-         * Looks up the Chrome activity of the given web contents. This can be null. Should never be
-         * cached, because web contents can change activities, e.g., when user selects "Open in
+         * Looks up the Android Activity of the given web contents. This can be null. Should never
+         * be cached, because web contents can change activities, e.g., when user selects "Open in
          * Chrome" menu item.
          *
-         * @param webContents The web contents for which to lookup the Chrome activity.
-         * @return Possibly null Chrome activity that should never be cached.
+         * @param webContents The web contents for which to lookup the Android activity.
+         * @return Possibly null Android activity that should never be cached.
          */
         @Nullable
-        default ChromeActivity getChromeActivity(WebContents webContents) {
+        default Activity getActivity(WebContents webContents) {
             return ChromeActivity.fromWebContents(webContents);
         }
 
@@ -189,6 +195,50 @@
                 WebContents webContents, PaymentRequestUpdateEventListener listener) {
             return new PaymentHandlerHost(webContents, listener);
         }
+
+        /**
+         * @param webContents Any WebContents.
+         * @return The TabModelSelector of the given WebContents.
+         */
+        @Nullable
+        default TabModelSelector getTabModelSelector(WebContents webContents) {
+            ChromeActivity activity = ChromeActivity.fromWebContents(webContents);
+            return activity == null ? null : activity.getTabModelSelector();
+        }
+
+        /**
+         * @param webContents Any WebContents.
+         * @return The TabModel of the given WebContents.
+         */
+        @Nullable
+        default TabModel getTabModel(WebContents webContents) {
+            ChromeActivity activity = ChromeActivity.fromWebContents(webContents);
+            return activity == null ? null : activity.getCurrentTabModel();
+        }
+
+        /**
+         * @param webContents Any WebContents.
+         * @return The OverviewModeBehavior of the given WebContents.
+         */
+        @Nullable
+        default OverviewModeBehavior getOverviewModeBehavior(WebContents webContents) {
+            ChromeActivity activity = ChromeActivity.fromWebContents(webContents);
+            if (activity == null) return null;
+            if (!(activity instanceof ChromeTabbedActivity)) return null;
+            return ((ChromeTabbedActivity) activity).getOverviewModeBehaviorSupplier().get();
+        }
+
+        /**
+         * @param webContents Any WebContents.
+         * @return The ActivityLifecycleDispatcher of the ChromeActivity that contains the given
+         *         WebContents.
+         */
+        @Nullable
+        default ActivityLifecycleDispatcher getActivityLifecycleDispatcher(
+                WebContents webContents) {
+            ChromeActivity activity = ChromeActivity.fromWebContents(webContents);
+            return activity == null ? null : activity.getLifecycleDispatcher();
+        }
     }
 
     /**
@@ -317,11 +367,15 @@
     @Override
     public String showOrSkipAppSelector(boolean isShowWaitingForUpdatedDetails, PaymentItem total,
             boolean shouldSkipAppSelector) {
-        ChromeActivity chromeActivity = mDelegate.getChromeActivity(mWebContents);
-        if (chromeActivity == null) return ErrorStrings.ACTIVITY_NOT_FOUND;
-        String error = mPaymentUiService.buildPaymentRequestUI(chromeActivity,
-                /*isWebContentsActive=*/mDelegate.isWebContentsActive(mRenderFrameHost),
-                /*isShowWaitingForUpdatedDetails=*/isShowWaitingForUpdatedDetails);
+        Activity activity = mDelegate.getActivity(mWebContents);
+        if (activity == null) return ErrorStrings.ACTIVITY_NOT_FOUND;
+        TabModelSelector tabModelSelector = mDelegate.getTabModelSelector(mWebContents);
+        if (tabModelSelector == null) return ErrorStrings.TAB_NOT_FOUND;
+        TabModel tabModel = mDelegate.getTabModel(mWebContents);
+        if (tabModel == null) return ErrorStrings.TAB_NOT_FOUND;
+        String error = mPaymentUiService.buildPaymentRequestUI(
+                /*isWebContentsActive=*/mDelegate.isWebContentsActive(mRenderFrameHost), activity,
+                tabModelSelector, tabModel, mDelegate.getOverviewModeBehavior(mWebContents));
         if (error != null) return error;
         // Calculate skip ui and build ui only after all payment apps are ready and
         // request.show() is called.
@@ -771,4 +825,11 @@
     public Context getContext() {
         return mDelegate.getContext(mRenderFrameHost);
     }
+
+    // Implement PaymentUiService.Delegate:
+    @Override
+    @Nullable
+    public ActivityLifecycleDispatcher getActivityLifecycleDispatcher() {
+        return mDelegate.getActivityLifecycleDispatcher(mWebContents);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
index f06c24c..97f3911 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.payments.ui;
 
+import android.app.Activity;
 import android.content.Context;
 import android.os.Handler;
 import android.text.TextUtils;
@@ -14,8 +15,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
@@ -23,6 +22,7 @@
 import org.chromium.chrome.browser.compositor.layouts.EmptyOverviewModeObserver;
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver;
+import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.payments.AddressEditor;
 import org.chromium.chrome.browser.payments.AutofillAddress;
 import org.chromium.chrome.browser.payments.AutofillContact;
@@ -221,6 +221,10 @@
          */
         @Nullable
         Context getContext();
+
+        /** @return The ActivityLifecycleDispatcher of the current ChromeActivity. */
+        @Nullable
+        ActivityLifecycleDispatcher getActivityLifecycleDispatcher();
     }
 
     /**
@@ -1196,15 +1200,17 @@
 
     /**
      * Build the PaymentRequest UI.
-     * @param activity The ChromeActivity for the payment request, cannot be null.
      * @param isWebContentsActive Whether the merchant's WebContents is active.
-     * @param isShowWaitingForUpdatedDetails Whether showing payment app or the app selector is
-     *         blocked on the updated payment details.
+     * @param activity The activity of the current tab.
+     * @param tabModelSelector The tab model selector of the current tab.
+     * @param tabModel The tab model of the current tab.
+     * @param overviewModeBehavior The overview model behaviour of the current tab, can be null.
      * @return The error message if built unsuccessfully; null otherwise.
      */
     @Nullable
-    public String buildPaymentRequestUI(ChromeActivity activity, boolean isWebContentsActive,
-            boolean isShowWaitingForUpdatedDetails) {
+    public String buildPaymentRequestUI(boolean isWebContentsActive, Activity activity,
+            TabModelSelector tabModelSelector, TabModel tabModel,
+            @Nullable OverviewModeBehavior overviewModeBehavior) {
         // Payment methods section must be ready before building the rest of the UI. This is because
         // shipping and contact sections (when requested by merchant) are populated depending on
         // whether or not the selected payment app (if such exists) can provide the required
@@ -1212,6 +1218,9 @@
         assert mPaymentMethodsSection != null;
 
         assert activity != null;
+        assert tabModelSelector != null;
+        assert tabModel != null;
+        assert overviewModeBehavior != null;
 
         // Only the currently selected tab is allowed to show the payment UI.
         if (!isWebContentsActive) return ErrorStrings.CANNOT_SHOW_IN_BACKGROUND_TAB;
@@ -1223,21 +1232,20 @@
         if (mObservedTabModelSelector != null) {
             mObservedTabModelSelector.removeObserver(mSelectorObserver);
         }
-        mObservedTabModelSelector = activity.getTabModelSelector();
+        mObservedTabModelSelector = tabModelSelector;
         mObservedTabModelSelector.addObserver(mSelectorObserver);
         if (mObservedTabModel != null) {
             mObservedTabModel.removeObserver(mTabModelObserver);
         }
-        mObservedTabModel = activity.getCurrentTabModel();
+        mObservedTabModel = tabModel;
         mObservedTabModel.addObserver(mTabModelObserver);
 
         // Catch any time the user enters the overview mode and dismiss the payment UI.
-        if (activity instanceof ChromeTabbedActivity) {
+        if (overviewModeBehavior != null) {
             if (mOverviewModeBehavior != null) {
                 mOverviewModeBehavior.removeOverviewModeObserver(mOverviewModeObserver);
             }
-            mOverviewModeBehavior =
-                    ((ChromeTabbedActivity) activity).getOverviewModeBehaviorSupplier().get();
+            mOverviewModeBehavior = overviewModeBehavior;
 
             assert mOverviewModeBehavior != null;
             if (mOverviewModeBehavior.overviewVisible()) return ErrorStrings.TAB_OVERVIEW_MODE;
@@ -1255,8 +1263,10 @@
                 SecurityStateModel.getSecurityLevelForWebContents(mWebContents),
                 new ShippingStrings(mParams.getPaymentOptions().shippingType),
                 mPaymentUisShowStateReconciler, Profile.fromWebContents(mWebContents));
-        activity.getLifecycleDispatcher().register(
-                mPaymentRequestUI); // registered as a PauseResumeWithNativeObserver
+        ActivityLifecycleDispatcher dispatcher = mDelegate.getActivityLifecycleDispatcher();
+        if (dispatcher != null) {
+            dispatcher.register(mPaymentRequestUI); // registered as a PauseResumeWithNativeObserver
+        }
 
         final FaviconHelper faviconHelper = new FaviconHelper();
         faviconHelper.getLocalFaviconImageForURL(Profile.fromWebContents(mWebContents),
@@ -1688,9 +1698,9 @@
 
         if (mPaymentRequestUI != null) {
             mPaymentRequestUI.close();
-            ChromeActivity activity = ChromeActivity.fromWebContents(mWebContents);
-            if (activity != null) {
-                activity.getLifecycleDispatcher().unregister(mPaymentRequestUI);
+            ActivityLifecycleDispatcher dispatcher = mDelegate.getActivityLifecycleDispatcher();
+            if (dispatcher != null) {
+                dispatcher.unregister(mPaymentRequestUI);
             }
             mPaymentRequestUI = null;
             mPaymentUisShowStateReconciler.onPaymentRequestUiClosed();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java
index e194e0d..a672af6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java
@@ -13,6 +13,7 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 import org.chromium.components.sync.KeyRetrievalTriggerForUMA;
 import org.chromium.components.sync.ModelType;
@@ -567,6 +568,20 @@
                 mNativeProfileSyncServiceAndroid, ProfileSyncService.this, keyRetrievalTrigger);
     }
 
+    /**
+     * @return Whether sync is enabled to sync urls or open tabs with a non custom passphrase.
+     */
+    public boolean isSyncingUrlsWithKeystorePassphrase() {
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) {
+            return isEngineInitialized() && getActiveDataTypes().contains(ModelType.TYPED_URLS)
+                    && (getPassphraseType() == PassphraseType.KEYSTORE_PASSPHRASE
+                            || getPassphraseType() == PassphraseType.TRUSTED_VAULT_PASSPHRASE);
+        }
+        return isEngineInitialized() && getPreferredDataTypes().contains(ModelType.TYPED_URLS)
+                && (getPassphraseType() == PassphraseType.KEYSTORE_PASSPHRASE
+                        || getPassphraseType() == PassphraseType.TRUSTED_VAULT_PASSPHRASE);
+    }
+
     @VisibleForTesting
     public long getNativeProfileSyncServiceForTest() {
         return ProfileSyncServiceJni.get().getProfileSyncServiceForTest(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java
index 1684438..9db80c9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java
@@ -12,12 +12,9 @@
 import org.chromium.base.Log;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.uid.UniqueIdentificationGenerator;
 import org.chromium.chrome.browser.uid.UniqueIdentificationGeneratorFactory;
-import org.chromium.components.sync.ModelType;
-import org.chromium.components.sync.PassphraseType;
 import org.chromium.components.sync.StopSource;
 
 /**
@@ -165,19 +162,7 @@
      * @return Whether sync is enabled to sync urls or open tabs with a non custom passphrase.
      */
     public boolean isSyncingUrlsWithKeystorePassphrase() {
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) {
-            return mProfileSyncService.isEngineInitialized()
-                    && mProfileSyncService.getActiveDataTypes().contains(ModelType.TYPED_URLS)
-                    && (mProfileSyncService.getPassphraseType()
-                                    == PassphraseType.KEYSTORE_PASSPHRASE
-                            || mProfileSyncService.getPassphraseType()
-                                    == PassphraseType.TRUSTED_VAULT_PASSPHRASE);
-        }
-        return mProfileSyncService.isEngineInitialized()
-                && mProfileSyncService.getPreferredDataTypes().contains(ModelType.TYPED_URLS)
-                && (mProfileSyncService.getPassphraseType() == PassphraseType.KEYSTORE_PASSPHRASE
-                        || mProfileSyncService.getPassphraseType()
-                                == PassphraseType.TRUSTED_VAULT_PASSPHRASE);
+        return mProfileSyncService.isSyncingUrlsWithKeystorePassphrase();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
index f8e5b80..e0f2d91 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeExperimentsUtil.java
@@ -147,16 +147,16 @@
      */
     public static boolean willHandleLoadUrlFromStartSurface(String url,
             @PageTransition int transition, @Nullable Boolean incognito, @Nullable Tab parentTab) {
+        LoadUrlParams params = new LoadUrlParams(url, transition);
         return willHandleLoadUrlWithPostDataFromStartSurface(
-                url, transition, null, null, incognito, parentTab);
+                params, null, null, incognito, parentTab);
     }
 
     /**
      * Check if we should handle the navigation. If so, create a new tab and load the URL with POST
      * data.
      *
-     * @param url The URL to load.
-     * @param transition The page transition type.
+     * @param params The LoadUrlParams to load.
      * @param postDataType   postData type.
      * @param postData       POST data to include in the tab URL's request body, ex. bitmap when
      *         image search.
@@ -165,9 +165,10 @@
      * @param parentTab  The parent tab used to create a new tab if needed.
      * @return true if we have handled the navigation, false otherwise.
      */
-    public static boolean willHandleLoadUrlWithPostDataFromStartSurface(String url,
-            @PageTransition int transition, @Nullable String postDataType,
-            @Nullable byte[] postData, @Nullable Boolean incognito, @Nullable Tab parentTab) {
+    public static boolean willHandleLoadUrlWithPostDataFromStartSurface(LoadUrlParams params,
+            @Nullable String postDataType, @Nullable byte[] postData, @Nullable Boolean incognito,
+            @Nullable Tab parentTab) {
+        String url = params.getUrl();
         ChromeActivity chromeActivity = getActivityPresentingOverviewWithOmnibox(url);
         if (chromeActivity == null) return false;
 
@@ -179,9 +180,6 @@
             incognitoParam = incognito;
         }
 
-        LoadUrlParams params = new LoadUrlParams(url);
-        // TODO(https://crbug.com/1134187): This may no longer accurate.
-        params.setTransitionType(transition | PageTransition.FROM_ADDRESS_BAR);
         if (!TextUtils.isEmpty(postDataType) && postData != null && postData.length != 0) {
             params.setVerbatimHeaders("Content-Type: " + postDataType);
             params.setPostData(ResourceRequestBody.createFromBytes(postData));
@@ -190,14 +188,15 @@
         chromeActivity.getTabCreator(incognitoParam)
                 .createNewTab(params, TabLaunchType.FROM_START_SURFACE, parentTab);
 
-        if (transition == PageTransition.AUTO_BOOKMARK) {
+        if (params.getTransitionType() == PageTransition.AUTO_BOOKMARK) {
             RecordUserAction.record("Suggestions.Tile.Tapped.GridTabSwitcher");
         } else {
             RecordUserAction.record("MobileOmniboxUse.GridTabSwitcher");
 
             // These are duplicated here but would have been recorded by LocationBarLayout#loadUrl.
             RecordUserAction.record("MobileOmniboxUse");
-            LocaleManager.getInstance().recordLocaleBasedSearchMetrics(false, url, transition);
+            LocaleManager.getInstance().recordLocaleBasedSearchMetrics(
+                    false, url, params.getTransitionType());
         }
 
         return true;
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 e6e43e2..012e3a7 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
@@ -137,6 +137,7 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.net.NetError;
 import org.chromium.ui.base.DeviceFormFactor;
+import org.chromium.ui.base.PageTransition;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.util.TokenHolder;
@@ -463,8 +464,8 @@
             OverrideUrlLoadingDelegate overrideUrlLoadingDelegate =
                     (url, transition, postDataType, postData, incognito)
                     -> ReturnToChromeExperimentsUtil.willHandleLoadUrlWithPostDataFromStartSurface(
-                            url, transition, postDataType, postData, incognito,
-                            startSurfaceParentTabSupplier.get());
+                            new LoadUrlParams(url, transition | PageTransition.FROM_ADDRESS_BAR),
+                            postDataType, postData, incognito, startSurfaceParentTabSupplier.get());
             LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator(
                     mActivity.findViewById(R.id.location_bar), toolbarLayout, profileSupplier,
                     mLocationBarModel, mActionModeController.getActionModeCallback(),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
index f485b3c..2b05aa3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
@@ -12,6 +12,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.banners.AppBannerManager;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -33,6 +34,7 @@
  * The {@link #showForAppMenu} method is used to show the add-to-homescreen UI when the user
  * chooses the "Add to Home screen" option from the app menu.
  */
+@JNINamespace("webapps")
 public class AddToHomescreenCoordinator {
     @VisibleForTesting
     Context mActivityContext;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenMediator.java
index b2d77c8e..c13faf3d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenMediator.java
@@ -10,6 +10,7 @@
 import androidx.annotation.StringRes;
 
 import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.chrome.browser.banners.AppData;
 import org.chromium.chrome.browser.webapps.AddToHomescreenProperties;
@@ -28,6 +29,7 @@
  * information about the app is available. These methods modify the model that lives on the Java
  * side.
  */
+@JNINamespace("webapps")
 class AddToHomescreenMediator implements AddToHomescreenViewDelegate {
     private long mNativeAddToHomescreenMediator;
     private PropertyModel mModel;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
index a5918444..13a5326 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
@@ -564,8 +564,11 @@
     @Test
     @LargeTest
     @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE})
+    @DisableIf.Build(message = "Flaky on Android P, see https://crbug.com/1164443",
+            sdk_is_greater_than = VERSION_CODES.O_MR1, sdk_is_less_than = VERSION_CODES.Q)
     @Feature({"Android-TabSwitcher"})
-    public void testTabSwitcherLandscapeCloseButton() {
+    public void
+    testTabSwitcherLandscapeCloseButton() {
         mActivityTestRule.getActivity().setRequestedOrientation(
                 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
         // Hard-coded coordinates of the close button on the bottom left of the screen.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java
index 7862798..44745dd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/RunningInChromeTest.java
@@ -34,6 +34,7 @@
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.CriteriaHelper;
+import org.chromium.base.test.util.FlakyTest;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeApplication;
 import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
@@ -127,6 +128,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1164424")
     public void showsNewRunningInChrome() throws TimeoutException {
         launch(createTrustedWebActivityIntent(mTestPage));
 
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 8d04f49..60791fa 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
@@ -433,6 +433,7 @@
 
     @Test
     @SmallTest
+    @DisabledTest(message = "https://crbug.com/1164414")
     public void testRedirectionFromIntentCold() throws Exception {
         Context context = ContextUtils.getApplicationContext();
         Intent intent = new Intent(Intent.ACTION_VIEW,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceRenderTest.java
new file mode 100644
index 0000000..49f1988cde
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceRenderTest.java
@@ -0,0 +1,110 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.omnibox.voice;
+
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+
+import static org.mockito.ArgumentMatchers.anyObject;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+
+import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.ASSISTANT_VOICE_SEARCH_ENABLED;
+import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.ASSISTANT_VOICE_SEARCH_SUPPORTED;
+
+import android.support.test.filters.MediumTest;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.gsa.GSAState;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
+import org.chromium.chrome.test.util.ChromeRenderTestRule;
+import org.chromium.components.embedder_support.util.UrlConstants;
+import org.chromium.components.externalauth.ExternalAuthUtils;
+
+import java.io.IOException;
+
+/** Tests for AssistantVoiceSearchService */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
+        "enable-features=" + ChromeFeatureList.OMNIBOX_ASSISTANT_VOICE_SEARCH + "<Study",
+        "force-fieldtrials=Study/Group"})
+public class AssistantVoiceSearchServiceRenderTest {
+    @Rule
+    public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
+    @Rule
+    public ChromeRenderTestRule mRenderTestRule =
+            ChromeRenderTestRule.Builder.withPublicCorpus().build();
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    GSAState mGsaState;
+
+    @Before
+    public void setUp() {
+        AssistantVoiceSearchService.setAgsaSupportsAssistantVoiceSearchForTesting(true);
+        SharedPreferencesManager.getInstance().writeBoolean(ASSISTANT_VOICE_SEARCH_ENABLED, true);
+        SharedPreferencesManager.getInstance().writeBoolean(ASSISTANT_VOICE_SEARCH_SUPPORTED, true);
+
+        GSAState gsaState = Mockito.mock(GSAState.class);
+        doReturn(false).when(gsaState).isAgsaVersionBelowMinimum(anyString(), anyString());
+        doReturn(true).when(gsaState).doesGsaAccountMatchChrome();
+        doReturn(true).when(gsaState).canAgsaHandleIntent(anyObject());
+        GSAState.setInstanceForTesting(gsaState);
+
+        ExternalAuthUtils externalAuthUtils = Mockito.mock(ExternalAuthUtils.class);
+        doReturn(true).when(externalAuthUtils).isGoogleSigned(anyString());
+        doReturn(true).when(externalAuthUtils).isChromeGoogleSigned();
+        ExternalAuthUtils.setInstanceForTesting(externalAuthUtils);
+
+        mActivityTestRule.startMainActivityOnBlankPage();
+    }
+
+    @Test
+    @MediumTest
+    @CommandLineFlags.Add({"force-fieldtrial-params=Study.Group:colorful_mic/true"})
+    @Feature({"RenderTest"})
+    public void testAssistantColorfulMic() throws IOException {
+        mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_URL, /* incognito= */ false);
+
+        mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.ntp_content),
+                "avs_colorful_mic_unfocused_ntp");
+
+        onView(withId(R.id.search_box)).perform(click());
+        mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.toolbar),
+                "avs_colorful_mic_focused");
+    }
+
+    @Test
+    @MediumTest
+    @CommandLineFlags.Add({"force-fieldtrial-params=Study.Group:colorful_mic/false"})
+    @Feature({"RenderTest"})
+    public void testAssistantMic() throws IOException {
+        mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_URL, /* incognito= */ false);
+
+        mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(R.id.ntp_content),
+                "avs__mic_unfocused_ntp");
+
+        onView(withId(R.id.search_box)).perform(click());
+        mRenderTestRule.render(
+                mActivityTestRule.getActivity().findViewById(R.id.toolbar), "avs_mic_focused");
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceUnitTest.java
index 4fd4222..fc85aa4 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchServiceUnitTest.java
@@ -189,6 +189,25 @@
 
     @Test
     @Feature("OmniboxAssistantVoiceSearch")
+    public void testStartVoiceRecognition_StartsAssistantVoiceSearch_TemporaryAccountMismatch() {
+        doReturn(false).when(mGsaState).doesGsaAccountMatchChrome();
+
+        Assert.assertFalse(mAssistantVoiceSearchService.shouldRequestAssistantVoiceSearch());
+        Assert.assertEquals(1,
+                ShadowRecordHistogram.getHistogramValueCountForTesting(
+                        AssistantVoiceSearchService.USER_ELIGIBILITY_FAILURE_REASON_HISTOGRAM,
+                        AssistantVoiceSearchService.EligibilityFailureReason.ACCOUNT_MISMATCH));
+
+        doReturn(true).when(mGsaState).doesGsaAccountMatchChrome();
+        Assert.assertTrue(mAssistantVoiceSearchService.shouldRequestAssistantVoiceSearch());
+        Assert.assertEquals(1,
+                ShadowRecordHistogram.getHistogramValueCountForTesting(
+                        AssistantVoiceSearchService.USER_ELIGIBILITY_FAILURE_REASON_HISTOGRAM,
+                        AssistantVoiceSearchService.EligibilityFailureReason.ACCOUNT_MISMATCH));
+    }
+
+    @Test
+    @Feature("OmniboxAssistantVoiceSearch")
     public void testAssistantEligibility_VersionTooLow() {
         doReturn(true).when(mGsaState).isAgsaVersionBelowMinimum(any(), any());
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/MockPaymentUiServiceBuilder.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/MockPaymentUiServiceBuilder.java
index d8c87f5..6cb45a2 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/payments/MockPaymentUiServiceBuilder.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/MockPaymentUiServiceBuilder.java
@@ -24,7 +24,8 @@
         mPaymentUiService = Mockito.mock(PaymentUiService.class);
         Mockito.doReturn(null)
                 .when(mPaymentUiService)
-                .buildPaymentRequestUI(Mockito.any(), Mockito.anyBoolean(), Mockito.anyBoolean());
+                .buildPaymentRequestUI(Mockito.anyBoolean(), Mockito.any(), Mockito.any(),
+                        Mockito.any(), Mockito.any());
         Mockito.doReturn(true).when(mPaymentUiService).hasAvailableApps();
         List<PaymentApp> apps = new ArrayList<>();
         apps.add(app);
@@ -35,7 +36,8 @@
     /* package */ MockPaymentUiServiceBuilder setBuildPaymentRequestUIResult(String result) {
         Mockito.doReturn(result)
                 .when(mPaymentUiService)
-                .buildPaymentRequestUI(Mockito.any(), Mockito.anyBoolean(), Mockito.anyBoolean());
+                .buildPaymentRequestUI(Mockito.anyBoolean(), Mockito.any(), Mockito.any(),
+                        Mockito.any(), Mockito.any());
         return this;
     }
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentRequestParamsBuilder.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentRequestParamsBuilder.java
index 85edd280..a0a87f7 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentRequestParamsBuilder.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentRequestParamsBuilder.java
@@ -4,14 +4,19 @@
 
 package org.chromium.chrome.browser.payments;
 
+import android.app.Activity;
 import android.content.Context;
+import android.content.res.Resources;
 
 import androidx.annotation.Nullable;
 
 import org.mockito.Mockito;
 
-import org.chromium.chrome.browser.app.ChromeActivity;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
+import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.payments.ui.PaymentUiService;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.components.payments.BrowserPaymentRequest;
 import org.chromium.components.payments.JourneyLogger;
 import org.chromium.components.payments.MojoPaymentRequestGateKeeper;
@@ -48,7 +53,6 @@
     private final WebContents mWebContents;
     private final JourneyLogger mJourneyLogger;
     private final PaymentRequestSpec mSpec;
-    private final ChromeActivity mActivity;
     private final PaymentUiService mPaymentUiService;
     private final boolean mGoogleBridgeEligible;
     private final PaymentOptions mOptions;
@@ -63,7 +67,6 @@
         mClient = client;
         mDelegate = this;
         mPaymentUiService = paymentUiService;
-        mActivity = Mockito.mock(ChromeActivity.class);
         mJourneyLogger = Mockito.mock(JourneyLogger.class);
         mWebContents = Mockito.mock(WebContents.class);
         Mockito.doReturn("https://top.level.origin").when(mWebContents).getLastCommittedUrl();
@@ -184,8 +187,35 @@
     }
 
     @Override
-    public ChromeActivity getChromeActivity(WebContents webContents) {
-        return mActivity;
+    public Activity getActivity(WebContents webContents) {
+        Activity activity = Mockito.mock(Activity.class);
+        Resources resources = Mockito.mock(Resources.class);
+        Mockito.doReturn(resources).when(activity).getResources();
+        return activity;
+    }
+
+    @Nullable
+    @Override
+    public TabModelSelector getTabModelSelector(WebContents webContents) {
+        return Mockito.mock(TabModelSelector.class);
+    }
+
+    @Nullable
+    @Override
+    public TabModel getTabModel(WebContents webContents) {
+        return Mockito.mock(TabModel.class);
+    }
+
+    @Nullable
+    @Override
+    public OverviewModeBehavior getOverviewModeBehavior(WebContents webContents) {
+        return Mockito.mock(OverviewModeBehavior.class);
+    }
+
+    @Nullable
+    @Override
+    public ActivityLifecycleDispatcher getActivityLifecycleDispatcher(WebContents webContents) {
+        return Mockito.mock(ActivityLifecycleDispatcher.class);
     }
 
     @Override
diff --git a/chrome/android/modules/buildflags.gni b/chrome/android/modules/buildflags.gni
index b578193..bf9325c3 100644
--- a/chrome/android/modules/buildflags.gni
+++ b/chrome/android/modules/buildflags.gni
@@ -13,8 +13,7 @@
   # other DFMs.
   # TODO(crbug.com/1126301): The binary size tools need to be updated to include
   # DFM code before this can be enabled on stable.
-  enable_chrome_module = android_channel == "default" ||
-                         android_channel == "canary" || android_channel == "dev"
+  enable_chrome_module = false
 
   # Whether to enable DFMs which depend on the chrome DFM. These will be split
   # out of the chrome DFM using DexSplitter.
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 7b663f10..8717e22 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -5859,12 +5859,18 @@
     <message name="IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON" desc="The restore button label of the notification for the user to select restore apps and pages on startup.">
       Restore
     </message>
+    <message name="IDS_SET_RESTORE_NOTIFICATION_BUTTON" desc="The button label of the notification for the user to set restore by default.">
+      Settings
+    </message>
     <message name="IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON" desc="The cancel button label of the notification for the user to select not restore on startup.">
       Cancel
     </message>
     <message name="IDS_RESTORE_NOTIFICATION_TITLE" desc="This is the title of the notification for the user to select restore or not on startup.">
       Restore apps &amp; pages?
     </message>
+    <message name="IDS_SET_RESTORE_NOTIFICATION_TITLE" desc="This is the title of the notification for the user to set restore by default.">
+      Restore apps &amp; pages by default?
+    </message>
     <message name="IDS_RESTORE_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to select restore or not on startup if the 'restore_apps_and_pages' setting is 'Ask every time', and the system is not crashed before reboot.">
       Continue where you left off.
     </message>
diff --git a/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_BUTTON.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_BUTTON.png.sha1
new file mode 100644
index 0000000..921f727
--- /dev/null
+++ b/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_BUTTON.png.sha1
@@ -0,0 +1 @@
+857fd7008ecb96b8ff900f229cb53803df36fcc2
\ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_TITLE.png.sha1
new file mode 100644
index 0000000..921f727
--- /dev/null
+++ b/chrome/app/chromeos_strings_grdp/IDS_SET_RESTORE_NOTIFICATION_TITLE.png.sha1
@@ -0,0 +1 @@
+857fd7008ecb96b8ff900f229cb53803df36fcc2
\ No newline at end of file
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd
index 2ba5ec3..57c66276 100644
--- a/chrome/app/chromium_strings.grd
+++ b/chrome/app/chromium_strings.grd
@@ -1227,6 +1227,9 @@
         <message name="IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to select restore or not on startup after crash.">
           Chromium OS didn't shut down correctly.
         </message>
+        <message name="IDS_SET_RESTORE_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to set restore by default.">
+          Chromium OS can always restore your apps &amp; pages after reboot without asking every time.
+        </message>
       </if>
     </messages>
   </release>
diff --git a/chrome/app/chromium_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1 b/chrome/app/chromium_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1
new file mode 100644
index 0000000..b22c33b3
--- /dev/null
+++ b/chrome/app/chromium_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1
@@ -0,0 +1 @@
+b0d1616fde28e22e3e6a58bcc3249e4d60135ba2
\ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd
index a5a69f8..e9da47f7 100644
--- a/chrome/app/google_chrome_strings.grd
+++ b/chrome/app/google_chrome_strings.grd
@@ -1243,6 +1243,9 @@
         <message name="IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to select restore or not on startup after crash.">
           Chrome OS didn't shut down correctly.
         </message>
+        <message name="IDS_SET_RESTORE_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to set restore by default.">
+          Chrome OS can always restore your apps &amp; pages after reboot without asking every time.
+        </message>
       </if>
     </messages>
   </release>
diff --git a/chrome/app/google_chrome_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1
new file mode 100644
index 0000000..921f727
--- /dev/null
+++ b/chrome/app/google_chrome_strings_grd/IDS_SET_RESTORE_NOTIFICATION_MESSAGE.png.sha1
@@ -0,0 +1 @@
+857fd7008ecb96b8ff900f229cb53803df36fcc2
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb
index 0777be34..8773cd2f 100644
--- a/chrome/app/resources/chromium_strings_am.xtb
+++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">የሆነው ሆኖ ከChromium ይወጣ?</translation>
 <translation id="4415566066719264597">Chromium በበስተጀርባ ላይ ያሂድ</translation>
 <translation id="4423735387467980091">Chromiumን ያብጁ እና ይቆጣጠሩ</translation>
+<translation id="452711251841752011">እንኳን ወደ Chromium በደህና መጡ፤ አዲስ የአሳሽ መስኮት ተከፍቷል</translation>
 <translation id="4544142686420020088">Chromium አልተዘመነም፣ የሆነ ችግር ተፈጥሯል። <ph name="BEGIN_LINK" />የChrome ዝማኔ ችግሮችን እና ያልተሳኩ ዝማኔዎችን ያስተካክሉ።<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">እንደ <ph name="USER_EMAIL_ADDRESS" /> ሆነው ገብተዋል። አሁን የእርስዎን ዕልባቶች፣ ታሪክ እና ሌሎች ቅንብሮች በመለያ በገቡ ሁሉም መሣሪያዎችዎ ላይ መድረስ ይችላሉ።</translation>
 <translation id="459535195905078186">የChromium መተግበሪያዎች</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Chromium ነባሪውን አሳሽ ያድርጉ።</translation>
 <translation id="6266342355635466082">Chromium ዝማኔዎችን መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="6268381023930128611">ከChromium ተዘግቶ ይውጣ?</translation>
+<translation id="6281746429495226318">የChromium መገለጫዎን ያብጁ</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> አደገኛ ሊሆን ስለሚችል Chromium አግዶታል።</translation>
 <translation id="6309712487085796862">Chromium ካሜራዎን እየተጠቀመ ነው።</translation>
 <translation id="6333502561965082103">ሌላ ሥርዓተ ክወና በChromium ላይ በሂደት ላይ ነው። እባክዎ ቆይተው እንደገና ይሞክሩ።</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb
index a8a2156..10de440 100644
--- a/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -263,7 +263,7 @@
 <translation id="9019929317751753759">‏لجعل Chromium أكثر أمنًا، أوقفنا الإضافة التالية التي لم تُدرج في <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> وربما تكون قد أضيفت بدون علمك.</translation>
 <translation id="9089354809943900324">‏إصدار Chromium قديم</translation>
 <translation id="9093206154853821181">{0,plural, =1{‏ستتم إعادة تشغيل Chromium في غضون ساعة واحدة}zero{‏ستتم إعادة تشغيل Chromium في غضون # ساعة}two{‏ستتم إعادة تشغيل Chromium في غضون ساعتين}few{‏ستتم إعادة تشغيل Chromium في غضون # ساعات}many{‏ستتم إعادة تشغيل Chromium في غضون # ساعةً}other{‏ستتم إعادة تشغيل Chromium في غضون # ساعة}}</translation>
-<translation id="9107750757953039239">‏إذا كانت لديك حسابات متعددة في Google، يمكنك إضافتها على جهاز <ph name="DEVICE_TYPE" />. وستكون حساباتك متوفّرة في متصفِّح Chromium و"متجر Play"، بالإضافة إلى خدمات مثل Gmail وDrive وYouTube. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
+<translation id="9107750757953039239">‏إذا كانت لديك حسابات متعددة على Google، يمكنك إضافتها إلى جهاز <ph name="DEVICE_TYPE" />. وستكون حساباتك متوفّرة في متصفِّح Chromium و"متجر Play"، بالإضافة إلى خدمات مثل Gmail وDrive وYouTube. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="91086099826398415">‏فتح الرابط في علامة تبويب جديدة في Chromium</translation>
 <translation id="911206726377975832">هل تريد أيضًا حذف بيانات التصفح؟</translation>
 <translation id="9158494823179993217">‏ضَبَط مشرف النظام Chromium لفتح متصفِّح بديل للوصول إلى <ph name="TARGET_URL_HOSTNAME" />.</translation>
diff --git a/chrome/app/resources/chromium_strings_be.xtb b/chrome/app/resources/chromium_strings_be.xtb
index 4edc2510..e349dc4 100644
--- a/chrome/app/resources/chromium_strings_be.xtb
+++ b/chrome/app/resources/chromium_strings_be.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Усё роўна выйсці з Chromium?</translation>
 <translation id="4415566066719264597">Дазволіць браўзеру Chromium працаваць у фоне</translation>
 <translation id="4423735387467980091">Наладка і кіраванне Chromium</translation>
+<translation id="452711251841752011">Вітаем у Chromium! Адкрыта новае акно браўзера</translation>
 <translation id="4544142686420020088">Chromium не абнавіўся. Нешта пайшло не так. <ph name="BEGIN_LINK" />Выправіце праблемы з абнаўленнем Chromium і памылкі абнаўлення.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Вы ўвайшлі як <ph name="USER_EMAIL_ADDRESS" /> і цяпер маеце доступ да закладак, гісторыі і іншых налад на ўсіх прыладах, дзе выкананы ўваход.</translation>
 <translation id="459535195905078186">Праграмы Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Зрабіць Chromium стандартным браўзерам</translation>
 <translation id="6266342355635466082">Браўзеру Chromium не ўдаецца праверыць наяўнасць абнаўленняў. Паспрабуйце праверыць падключэнне да інтэрнэту.</translation>
 <translation id="6268381023930128611">Выйсці з уліковага запісу ў браўзеры Chromium?</translation>
+<translation id="6281746429495226318">Наладзьце свой профіль Chromium</translation>
 <translation id="6295779123002464101">Файл "<ph name="FILE_NAME" />" можа быць небяспечным, таму Chromium заблакіраваў яго.</translation>
 <translation id="6309712487085796862">Chromium выкарыстоўвае камеру.</translation>
 <translation id="6333502561965082103">У Chromium выконваецца іншая аперацыя. Паўтарыце спробу пазней.</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb
index 3f85448..bd2ebc3 100644
--- a/chrome/app/resources/chromium_strings_bn.xtb
+++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -99,6 +99,7 @@
 <translation id="4407044323746248786">তা স্বত্তেও Chromium ছেড়ে যাবেন?</translation>
 <translation id="4415566066719264597">Chromium-কে ব্যাকগ্রাউন্ডে চলতে দিন</translation>
 <translation id="4423735387467980091">Chromium কাস্টমাইজ ও নিয়ন্ত্রণ করুন</translation>
+<translation id="452711251841752011">Chromium-এ স্বাগতম; নতুন ব্রাউজার উইন্ডো খোলা হয়েছে</translation>
 <translation id="4544142686420020088">Chromium আপডেট করা যায়নি, কোনও সমস্যা হয়েছে। <ph name="BEGIN_LINK" />Chromium আপডেট করতে না পারার সমস্যা ও আপডেট করা যায়নি এমন সমস্যার সমাধান করুন।<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">আপনি <ph name="USER_EMAIL_ADDRESS" /> হিসেবে সাইন-ইন করেছেন৷ এখন আপনি আপনার সমস্ত সাইন-ইন করা ডিভাইসে আপনার বুকমার্ক, ইতিহাস এবং অন্যান্য সেটিংস অ্যাক্সেস করতে পারেন৷</translation>
 <translation id="459535195905078186">Chromium অ্যাপ্লিকেশানগুলি</translation>
@@ -158,6 +159,7 @@
 <translation id="6248213926982192922">Chromium-কে ডিফল্ট ব্রাউজার করুন</translation>
 <translation id="6266342355635466082">কোনও আপডেট আছে কিনা, Chromium তা চেক করে দেখতে পারছে না। আপনার ইন্টারনেট কানেকশন চেক করে দেখে নিন।</translation>
 <translation id="6268381023930128611">Chromium থেকে সাইন-আউট করবেন?</translation>
+<translation id="6281746429495226318">আপনার Chromium প্রোফাইল কাস্টমাইজ করুন</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> বিপজ্জনক হতে পারে, তাই Chromium এটিকে অবরুদ্ধ করেছে।</translation>
 <translation id="6309712487085796862">Chromium আপনার ক্যামেরা ব্যবহার করছে৷</translation>
 <translation id="6333502561965082103">Chromium এ আরেকটি ক্রিয়াকলাপ প্রক্রিয়ায় আছে। অনুগ্রহ করে পরে আবার চেষ্টা করুন।</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb
index 2571259..de8ef1e 100644
--- a/chrome/app/resources/chromium_strings_ca.xtb
+++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -99,6 +99,7 @@
 <translation id="4407044323746248786">Vols sortir de Chromium igualment?</translation>
 <translation id="4415566066719264597">Permet que Chromium s'executi en segon pla</translation>
 <translation id="4423735387467980091">Personalitza i controla Chromium</translation>
+<translation id="452711251841752011">Et donem la benvinguda a Chromium; s'ha obert una altra finestra del navegador</translation>
 <translation id="4544142686420020088">No s'ha actualitzat Chromium. S'ha produït un error. <ph name="BEGIN_LINK" />Soluciona els problemes i errors d'actualització de Chromium<ph name="END_LINK" />.</translation>
 <translation id="4567424176335768812">Heu iniciat la sessió com a <ph name="USER_EMAIL_ADDRESS" />. Ja podeu accedir a les vostres adreces d'interès, al vostre historial i a altres paràmetres en tots els dispositius en què teniu la sessió iniciada.</translation>
 <translation id="459535195905078186">Aplicacions de Chromium</translation>
@@ -158,6 +159,7 @@
 <translation id="6248213926982192922">Estableix Chromium com a navegador predeterminat</translation>
 <translation id="6266342355635466082">Chromium no pot cercar actualitzacions. Comprova la connexió a Internet.</translation>
 <translation id="6268381023930128611">Voleu tancar la sessió de Chromium?</translation>
+<translation id="6281746429495226318">Personalitza el teu perfil de Chromium</translation>
 <translation id="6295779123002464101">Chromium ha bloquejat <ph name="FILE_NAME" /> perquè pot ser perillós.</translation>
 <translation id="6309712487085796862">Chromium està utilitzant la càmera.</translation>
 <translation id="6333502561965082103">Hi ha una altra operació en curs a Chromium. Torna-ho a provar més tard.</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index 2611f41..a4d8ce4 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Přesto Chromium ukončit?</translation>
 <translation id="4415566066719264597">Nechat Chromium běžet na pozadí</translation>
 <translation id="4423735387467980091">Přizpůsobit a ovládat Chromium</translation>
+<translation id="452711251841752011">Vítá vás Chromium; bylo otevřeno nové okno prohlížeče</translation>
 <translation id="4544142686420020088">Prohlížeč Chromium se neaktualizoval, něco se pokazilo. <ph name="BEGIN_LINK" />Vyřešte problémy se stahováním aktualizací prohlížeče Chromium a neúspěšnými aktualizacemi.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Jste přihlášeni pomocí účtu <ph name="USER_EMAIL_ADDRESS" />. Nyní můžete přistupovat ke všem svým záložkám, historii a dalším nastavením ve všech přihlášených zařízeních.</translation>
 <translation id="459535195905078186">Aplikace Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Nastavit Chromium jako výchozí prohlížeč</translation>
 <translation id="6266342355635466082">Chromium nemůže vyhledat dostupné aktualizace. Zkuste zkontrolovat připojení k internetu.</translation>
 <translation id="6268381023930128611">Odhlásit se z prohlížeče Chromium?</translation>
+<translation id="6281746429495226318">Upravit profil Chromium</translation>
 <translation id="6295779123002464101">Soubor <ph name="FILE_NAME" /> může být nebezpečný, proto jej prohlížeč Chromium zablokoval.</translation>
 <translation id="6309712487085796862">Chromium používá vaši kameru.</translation>
 <translation id="6333502561965082103">V prohlížeči Chromium právě probíhá jiná operace. Zkuste to znovu později.</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index fea4f4f..29d983a 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Chromium-etik irten nahi duzu hala ere?</translation>
 <translation id="4415566066719264597">Onartu Chromium atzeko planoan abiaraztea</translation>
 <translation id="4423735387467980091">Pertsonalizatu eta kontrolatu Chromium</translation>
+<translation id="452711251841752011">Ongi etorri Chromium-era; beste leiho bat ireki da arakatzailean</translation>
 <translation id="4544142686420020088">Chromium ez da eguneratu arazoren bat izan delako. <ph name="BEGIN_LINK" />Konpondu Chromium eguneratzeko arazoak eta huts egindako eguneratzeak.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> gisa hasi duzu saioa. Laster-markak, historia eta bestelako ezarpenak atzi ditzakezu saioa hasita daukaten gailu guztien bidez.</translation>
 <translation id="459535195905078186">Chromium aplikazioak</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Ezarri Chromium arakatzaile lehenetsi gisa</translation>
 <translation id="6266342355635466082">Chromium-ek ezin du egiaztatu eguneratzerik dagoen. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="6268381023930128611">Chromium-eko saioa amaitu?</translation>
+<translation id="6281746429495226318">Pertsonalizatu Chromium-eko profila</translation>
 <translation id="6295779123002464101">Baliteke <ph name="FILE_NAME" /> arriskutsua izatea; horregatik, blokeatu egin du Chromium-ek.</translation>
 <translation id="6309712487085796862">Chromium zure kamera erabiltzen ari da.</translation>
 <translation id="6333502561965082103">Beste eragiketa bat egiten ari da Chromium. Saiatu berriro geroago.</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb
index 1ed42d8..b9af03e 100644
--- a/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -98,6 +98,7 @@
 <translation id="4407044323746248786">‏درهرصورت از Chromium خارج می‌شوید؟</translation>
 <translation id="4415566066719264597">‏اجازه به Chromium برای اجرا در پس‌زمینه</translation>
 <translation id="4423735387467980091">‏سفارشی کردن و کنترل Chromium</translation>
+<translation id="452711251841752011">‏به Chromium خوش‌آمدید؛ پنجره مرورگر جدید راه‌اندازی شد</translation>
 <translation id="4544142686420020088">‏Chromium به‌روزرسانی نشد؛ مشکلی پیش آمد. <ph name="BEGIN_LINK" />مشکلات به‌روزرسانی Chromium و به‌روزرسانی‌های ناموفق را برطرف کنید.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">با حساب <ph name="USER_EMAIL_ADDRESS" /> وارد سیستم شده‌اید. اکنون در همه دستگاه‌هایی که با آنها به سیستم وارد شده‌اید می‌توانید به نشانک‌ها، سابقه و دیگر تنظیماتتان دسترسی داشته باشید.</translation>
 <translation id="459535195905078186">‏برنامه‌های Chromium</translation>
@@ -157,6 +158,7 @@
 <translation id="6248213926982192922">‏Chromium  مرورگر پیش‌فرض شود</translation>
 <translation id="6266342355635466082">‏Chromium نمی‌تواند به‌روزرسانی‌ها را بررسی کند. اتصال اینترنت را بررسی کنید.</translation>
 <translation id="6268381023930128611">‏از Chromium خارج می‌شوید؟</translation>
+<translation id="6281746429495226318">‏سفارشی کردن نمایه Chromium</translation>
 <translation id="6295779123002464101">‏<ph name="FILE_NAME" /> ممکن است خطرناک باشد، بنابراین Chromium آن را مسدود کرده است.</translation>
 <translation id="6309712487085796862">‏Chromium درحال استفاده از دوربین شما است.</translation>
 <translation id="6333502561965082103">‏عملیات دیگری در Chromium درحال انجام است. لطفاً بعداً دوباره امتحان کنید.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index 4dd01e6..c7d9a99df 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -99,6 +99,7 @@
 <translation id="4407044323746248786">Suljetaanko Chromium silti?</translation>
 <translation id="4415566066719264597">Jätä Chromium käyntiin taustalle</translation>
 <translation id="4423735387467980091">Chromiumin muokkaus ja hallinta</translation>
+<translation id="452711251841752011">Tervetuloa Chromiumiin, uusi selainikkuna avattu</translation>
 <translation id="4544142686420020088">Chromiumia ei päivitetty, vaan jotain meni pieleen. <ph name="BEGIN_LINK" />Korjaa Chromiumin päivitysongelmat ja epäonnistuneet päivitykset<ph name="END_LINK" />.</translation>
 <translation id="4567424176335768812">Olet kirjautunut Chromeen tilillä <ph name="USER_EMAIL_ADDRESS" />. Nyt voit käyttää kirjanmerkkejäsi, historiaa ja muita asetuksia kaikilla laitteilla, joihin olet kirjautunut.</translation>
 <translation id="459535195905078186">Chromium-sovellukset</translation>
@@ -158,6 +159,7 @@
 <translation id="6248213926982192922">Tee Chromiumista oletusselain</translation>
 <translation id="6266342355635466082">Chromium ei voi tarkistaa päivityksiä. Tarkista internetyhteytesi.</translation>
 <translation id="6268381023930128611">Kirjaudutaanko ulos?</translation>
+<translation id="6281746429495226318">Muokkaa Chromium-profiiliasi</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> voi olla vaarallinen, joten Chromium on estänyt sen.</translation>
 <translation id="6309712487085796862">Chromium käyttää kameraasi.</translation>
 <translation id="6333502561965082103">Toinen Chromium-prosessi on jo käynnissä. Yritä myöhemmin uudelleen.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb
index 2940e4f..c6920b0 100644
--- a/chrome/app/resources/chromium_strings_fr-CA.xtb
+++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Quitter Chromium quand même?</translation>
 <translation id="4415566066719264597">Laisser Chromium s'exécuter en arrière-plan</translation>
 <translation id="4423735387467980091">Personnaliser et commander Chrome</translation>
+<translation id="452711251841752011">Bienvenue à Chromium, une nouvelle fenêtre de navigateur a été ouverte</translation>
 <translation id="4544142686420020088">La mise à jour de Chromium n'a pas été installée. Une erreur s'est produite. <ph name="BEGIN_LINK" />Découvrez comment résoudre les problèmes de mise à jour de Chromium.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Vous êtes connecté avec l'adresse de courriel <ph name="USER_EMAIL_ADDRESS" />. Vous pouvez maintenant accéder à vos favoris, à votre historique et à vos paramètres sur tous les appareils sur lesquels vous êtes connecté.</translation>
 <translation id="459535195905078186">Applications de Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Faire de Chromium le navigateur par défaut</translation>
 <translation id="6266342355635466082">Chromium ne peut pas vérifier la présence de mises à jour. Essayez de vérifier votre connexion Internet.</translation>
 <translation id="6268381023930128611">Se déconnecter de Chromium?</translation>
+<translation id="6281746429495226318">Personnaliser votre profil Chromium</translation>
 <translation id="6295779123002464101">Chromium a bloqué le fichier <ph name="FILE_NAME" />, car il peut être dangereux.</translation>
 <translation id="6309712487085796862">Chromium utilise votre caméra.</translation>
 <translation id="6333502561965082103">Une autre opération est en cours sur Chromium. Veuillez réessayer plus tard.</translation>
diff --git a/chrome/app/resources/chromium_strings_gl.xtb b/chrome/app/resources/chromium_strings_gl.xtb
index 12ac4ae..f326598 100644
--- a/chrome/app/resources/chromium_strings_gl.xtb
+++ b/chrome/app/resources/chromium_strings_gl.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Queres saír de Chromium de todas formas?</translation>
 <translation id="4415566066719264597">Deixar que Chromium se execute en segundo plano</translation>
 <translation id="4423735387467980091">Personaliza e controla Chromium</translation>
+<translation id="452711251841752011">Dámosche a benvida a Chromium. Abriuse unha nova ventá do navegador</translation>
 <translation id="4544142686420020088">Chromium non se actualizou, xa que se produciu un erro. <ph name="BEGIN_LINK" />Soluciona os problemas de actualización de Chromium e as actualizacións que non se puidesen realizar<ph name="END_LINK" />.</translation>
 <translation id="4567424176335768812">Iniciaches sesión como <ph name="USER_EMAIL_ADDRESS" />. Agora podes acceder aos teus marcadores, historial e outras configuracións en todos os dispositivos en que iniciaches sesión.</translation>
 <translation id="459535195905078186">Aplicacións de Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Establecer Chromium como navegador predeterminado</translation>
 <translation id="6266342355635466082">Chromium non puido buscar actualizacións. Verifica a conexión a Internet.</translation>
 <translation id="6268381023930128611">Pechar sesión en Chromium?</translation>
+<translation id="6281746429495226318">Personalizar o teu perfil de Chromium</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> pode ser perigoso, así que Chromium bloqueouno.</translation>
 <translation id="6309712487085796862">Chromium está utilizando a túa cámara.</translation>
 <translation id="6333502561965082103">Hai outra operación en Chromium que está en progreso. Téntao de novo máis tarde.</translation>
diff --git a/chrome/app/resources/chromium_strings_hy.xtb b/chrome/app/resources/chromium_strings_hy.xtb
index 7b4577c..67e4bec4 100644
--- a/chrome/app/resources/chromium_strings_hy.xtb
+++ b/chrome/app/resources/chromium_strings_hy.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Փակե՞լ Chromium-ը։</translation>
 <translation id="4415566066719264597">Թույլատրել Chromium-ին աշխատել ֆոնային ռեժիմում</translation>
 <translation id="4423735387467980091">Հարմարեցնել և վերահսկել Chromium-ը</translation>
+<translation id="452711251841752011">Բարի գալուստ Chromium․ բացված է դիտարկիչի նոր պատուհան</translation>
 <translation id="4544142686420020088">Անհայտ սխալի պատճառով չհաջողվեց թարմացնել Chromium-ը։ <ph name="BEGIN_LINK" />Շտկել Chromium-ի թարմացման հետ կապված խնդիրները<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Դուք մուտք եք գործել որպես <ph name="USER_EMAIL_ADDRESS" />: Այժմ կարող եք օգտագործել ձեր էջանիշները, պատմությունը և այլ կարգավորումները ձեր բոլոր մուտք գործած սարքերում:</translation>
 <translation id="459535195905078186">Chromium հավելվածներ</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Դարձնել Chromium-ը կանխադրված դիտարկիչ</translation>
 <translation id="6266342355635466082">Chromium-ը չի կարող ստուգել թարմացումների առկայությունը։ Ստուգեք ինտերնետ կապը։</translation>
 <translation id="6268381023930128611">Դուրս գա՞լ Chromium-ից:</translation>
+<translation id="6281746429495226318">Անհատականացնել Chromium-ի պրոֆիլը</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> ֆայլը կարող է վտանգավոր լինել, և Chromium-ն արգելափակել է այն։</translation>
 <translation id="6309712487085796862">Chromium-ն օգտագործում է ձեր տեսախցիկը:</translation>
 <translation id="6333502561965082103">Chromium-ում տեղադրման մեկ այլ գործողություն ընթացքի մեջ է: Փորձեք ավելի ուշ:</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb
index b05b3ddc..5831470 100644
--- a/chrome/app/resources/chromium_strings_lt.xtb
+++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Vis tiek išeiti iš „Chromium“?</translation>
 <translation id="4415566066719264597">„Chromium“ leidimas fone</translation>
 <translation id="4423735387467980091">Tinkinkite ir valdykite „Chromium“</translation>
+<translation id="452711251841752011">Sveiki, tai – „Chromium“; atidarytas naujas naršyklės langas</translation>
 <translation id="4544142686420020088">Nepavyko atnaujinti „Chromium“, įvyko klaida. <ph name="BEGIN_LINK" />Pašalinkite „Chromium“ naujinimo problemas ir naujinių klaidas.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Esate prisijungę kaip <ph name="USER_EMAIL_ADDRESS" />. Dabar galite pasiekti savo žymes, istoriją ir kitus nustatymus visuose įrenginiuose, kuriuose esate prisijungę.</translation>
 <translation id="459535195905078186">„Chromium“ programos</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Padaryti „Chromium“ numatytąja naršykle</translation>
 <translation id="6266342355635466082">„Chromium“ negali tikrinti naujinių. Pabandykite patikrinti interneto ryšį.</translation>
 <translation id="6268381023930128611">Atsijungti nuo „Chromium“?</translation>
+<translation id="6281746429495226318">Tinkinti „Chromium“ profilį</translation>
 <translation id="6295779123002464101">Failas „<ph name="FILE_NAME" />“ gali būti pavojingas, todėl „Chromium“ jį užblokavo.</translation>
 <translation id="6309712487085796862">„Chromium“ naudoja jūsų fotoaparatą.</translation>
 <translation id="6333502561965082103">Vykdoma kita „Chromium“ operacija. Vėliau bandykite dar kartą.</translation>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb
index 74f64588..71a3544 100644
--- a/chrome/app/resources/chromium_strings_mk.xtb
+++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Сепак да се излезе од Chromium?</translation>
 <translation id="4415566066719264597">Остави го Chromium да работи во заднина</translation>
 <translation id="4423735387467980091">Приспособи го и контролирај го Chromium</translation>
+<translation id="452711251841752011">Добре дојдовте на Chromium; отворен е нов прозорец во прелистувачот</translation>
 <translation id="4544142686420020088">Chromium не се ажурираше, нешто тргна наопаку. <ph name="BEGIN_LINK" />Поправете ги проблемите со ажурирањето на Chromium и со неуспешните ажурирања.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Најавени сте како <ph name="USER_EMAIL_ADDRESS" />. Сега може да пристапувате кон вашите обележувачи, историја и други поставки на сите најавени уреди.</translation>
 <translation id="459535195905078186">Апликации на Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Постави го Chromium за стандарден прелистувач</translation>
 <translation id="6266342355635466082">Chromium не може да провери дали се достапни ажурирања. Проверете ја интернет-врската.</translation>
 <translation id="6268381023930128611">Ќе се одјавите од Chromium?</translation>
+<translation id="6281746429495226318">Приспособете го вашиот профил на Chromium</translation>
 <translation id="6295779123002464101">Датотеката <ph name="FILE_NAME" /> може да биде опасна, па затоа Chromium ја блокираше.</translation>
 <translation id="6309712487085796862">Chromium ја користи камерата.</translation>
 <translation id="6333502561965082103">Во тек е друга операција на Chromium. Обидете се повторно подоцна.</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb
index e2c78dad..ed11ac8 100644
--- a/chrome/app/resources/chromium_strings_ml.xtb
+++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">എന്തായാലും Chromium-ത്തിൽ നിന്ന് പുറത്തുകടക്കണോ?</translation>
 <translation id="4415566066719264597">Chromium-ത്തെ പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കാൻ അനുവദിക്കുക</translation>
 <translation id="4423735387467980091">Chromium ഇഷ്‌ടാനുസൃതമാക്കുക, നിയന്ത്രിക്കുക</translation>
+<translation id="452711251841752011">Chromium-ലേക്ക് സ്വാഗതം; പുതിയ ബ്രൗസർ വിൻഡോ തുറന്നു</translation>
 <translation id="4544142686420020088">Chromium അപ്‌ഡേറ്റ് ചെയ്തില്ല, എന്തോ കുഴപ്പമുണ്ടായി. <ph name="BEGIN_LINK" />Chromium അപ്‌ഡേറ്റ് സംബന്ധിച്ച പ്രശ്നങ്ങളും പരാജയപ്പെട്ട അപ്ഡേറ്റുകളും പരിഹരിക്കുക.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">നിങ്ങൾ <ph name="USER_EMAIL_ADDRESS" /> ആയി സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നു. സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്‌മാർക്കുകളും ചരിത്രവും മറ്റ് ക്രമീകരണങ്ങളും ആക്‌സസ് ചെയ്യാൻ ഇപ്പോൾ നിങ്ങൾക്കാകും.</translation>
 <translation id="459535195905078186">Chromium അപ്ലിക്കേഷനുകൾ</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Chromium ഡിഫോൾട്ട് ബ്രൗസറാക്കൂ</translation>
 <translation id="6266342355635466082">Chromium-ന് അപ്‌ഡേറ്റുകൾക്കായി പരിശോധിക്കാനാവില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="6268381023930128611">Chromium-ത്തിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യണോ?</translation>
+<translation id="6281746429495226318">നിങ്ങളുടെ Chromium പ്രൊഫൈൽ ഇഷ്‌ടാനുസൃതമാക്കുക</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> അപകടകരമാകാൻ ഇടയുള്ളതിനാൽ, Chromium ഇതിനെ ബ്ലോക്കുചെയ്‌തു.</translation>
 <translation id="6309712487085796862">Chromium നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കുന്നു.</translation>
 <translation id="6333502561965082103">Chromium-ത്തിൽ മറ്റൊരു പ്രവർത്തനം പുരോഗമിക്കുകയാണ്. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb
index c9a9362..c97561b 100644
--- a/chrome/app/resources/chromium_strings_ro.xtb
+++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -99,6 +99,7 @@
 <translation id="4407044323746248786">Ieși din Chromium oricum?</translation>
 <translation id="4415566066719264597">Permite Chromium să ruleze în fundal</translation>
 <translation id="4423735387467980091">Personalizați și controlați Chromium</translation>
+<translation id="452711251841752011">Bun venit la Chromium; fereastră de browser nouă deschisă</translation>
 <translation id="4544142686420020088">Chromium nu s-a actualizat. A apărut o eroare. <ph name="BEGIN_LINK" />Remediază problemele de actualizare și actualizările nereușite în Chromium.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">V-ați conectat ca <ph name="USER_EMAIL_ADDRESS" />. Acum vă puteți accesa marcajele, istoricul și alte setări de pe toate dispozitivele pe care v-ați conectat.</translation>
 <translation id="459535195905078186">Aplicații Chromium</translation>
@@ -158,6 +159,7 @@
 <translation id="6248213926982192922">Setați Chromium ca browser prestabilit</translation>
 <translation id="6266342355635466082">Chromium nu poate căuta actualizări. Verifică-ți conexiunea la internet.</translation>
 <translation id="6268381023930128611">Te deconectezi de la Chromium?</translation>
+<translation id="6281746429495226318">Personalizează-ți profilul Chromium</translation>
 <translation id="6295779123002464101">Este posibil ca <ph name="FILE_NAME" /> să fie periculos, așadar Chromium l-a blocat.</translation>
 <translation id="6309712487085796862">Chromium utilizează camera foto.</translation>
 <translation id="6333502561965082103">O altă operație din Chromium este în curs de desfășurare. Încearcă din nou mai târziu.</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb
index ef36786f..d5ddc00 100644
--- a/chrome/app/resources/chromium_strings_si.xtb
+++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">කෙසේ වුවත් Chromium වෙතින් ඉවත් වන්න ද?</translation>
 <translation id="4415566066719264597">Chromium හට පසුබිම ධාවනය වීමට ඉඩ දෙන්න</translation>
 <translation id="4423735387467980091">Chromium පාලනය හා රුචිකරණය</translation>
+<translation id="452711251841752011">Chromium වෙත සාදරයෙන් පිළිගනිමු; නව බ්‍රවුසර කවුළුවක් විවෘත කරන ලදි</translation>
 <translation id="4544142686420020088">Chromium යාවත්කාලීන නොවිය, යම් දෙයක් වැරදිණි. <ph name="BEGIN_LINK" />Chromium යාවත්කාලීන ගැටලු සහ අසමත් වූ යාවත්කාලීන නිරාකරණ කරන්න.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">ඔබ <ph name="USER_EMAIL_ADDRESS" /> ලෙස සයින් ඉන් වී තිබේ. ඔබට දැන් ඔබේ පිටු සලකුණු, ඉතිහාසය, සහ අනෙක් පසුතල වෙත ඔබේ අත්සන් කළ උපාංගයෙන් පිවිසිය හැකිය.</translation>
 <translation id="459535195905078186">Chromium යෙදුම්</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Chromium පෙරනිමි බ්‍රව්සරය බවට පත් කරන්න</translation>
 <translation id="6266342355635466082">Chromium හට යාවත්කාලීන පරීක්‍ෂා කළ නොහැක. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="6268381023930128611">Chromium වෙතින් වරන්නද?</translation>
+<translation id="6281746429495226318">ඔබගේ Chromium පැතිකඩ අභිරුචිකරණය කරන්න</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> අනතුරුදායක විය හැකිය, එම නිසා Chromium එය අවහිර කර ඇත.</translation>
 <translation id="6309712487085796862">Chromium ඔබේ කැමරාව භාවිතා කරයි.</translation>
 <translation id="6333502561965082103">Chromium මත තවත් මෙහෙයුමක් ක්‍රියාත්මක වෙමින් පවතී. පසුව නැවත උත්සාහ කරන්න.</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb
index f65d71f5..c26503e 100644
--- a/chrome/app/resources/chromium_strings_sk.xtb
+++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Chcete Chromium napriek tomu ukončiť?</translation>
 <translation id="4415566066719264597">Povoliť prehliadaču Chromium spustenie na pozadí</translation>
 <translation id="4423735387467980091">Prispôsobiť a spravovať Chromium</translation>
+<translation id="452711251841752011">Vitajte v prehliadači Chromium, otvorilo sa nové okno prehliadača</translation>
 <translation id="4544142686420020088">Chromium sa neaktualizoval. Vyskytol sa problém. <ph name="BEGIN_LINK" />Vyriešiť problémy so sťahovaním aktualizácií prehliadača Chromium a neúspešnými aktualizáciami<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Ste prihlásený/-á ako <ph name="USER_EMAIL_ADDRESS" />. Teraz môžete na všetkých zariadeniach, kde ste prihlásený/-á, pristupovať k svojim záložkám, histórii a ďalším nastaveniam.</translation>
 <translation id="459535195905078186">Aplikácie Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Nastavte Chromium ako svoj predvolený prehliadač</translation>
 <translation id="6266342355635466082">Chromium nemôže skontrolovať dostupnosť aktualizácií. Skontrolujte internetové pripojenie.</translation>
 <translation id="6268381023930128611">Odhlásiť sa z prehliadača Chromium?</translation>
+<translation id="6281746429495226318">Prispôsobiť profil prehliadača Chromium</translation>
 <translation id="6295779123002464101">Súbor <ph name="FILE_NAME" /> môže byť nebezpečný, a preto ho prehliadač Chromium zablokoval.</translation>
 <translation id="6309712487085796862">Chromium používa vašu kameru.</translation>
 <translation id="6333502561965082103">V prehliadači Chromium práve prebieha iná operácia. Skúste to neskôr.</translation>
diff --git a/chrome/app/resources/chromium_strings_sq.xtb b/chrome/app/resources/chromium_strings_sq.xtb
index e00a465f..5cd5a25 100644
--- a/chrome/app/resources/chromium_strings_sq.xtb
+++ b/chrome/app/resources/chromium_strings_sq.xtb
@@ -101,6 +101,7 @@
 <translation id="4407044323746248786">Dëshiron të dalësh nga Chromium gjithsesi?</translation>
 <translation id="4415566066719264597">Lejo që Chromium të ekzekutohet në sfond</translation>
 <translation id="4423735387467980091">Personalizo dhe kontrollo Chromium</translation>
+<translation id="452711251841752011">Mirë se erdhe në Chromium. U hap një dritare e re e shfletuesit</translation>
 <translation id="4544142686420020088">Chromium nuk u përditësua. Ndodhi një gabim. <ph name="BEGIN_LINK" />Rregullo problemet e përditësimit të Chromium dhe përditësimet e dështuara.<ph name="END_LINK" /></translation>
 <translation id="4567424176335768812">Je identifikuar si <ph name="USER_EMAIL_ADDRESS" />. Tani mund të qasesh te faqeshënuesit, historiku dhe cilësime të tjera në të gjitha pajisjet ku je identifikuar.</translation>
 <translation id="459535195905078186">Aplikacionet Chromium</translation>
@@ -160,6 +161,7 @@
 <translation id="6248213926982192922">Bëje Chromium, shfletuesin tënd të parazgjedhur</translation>
 <translation id="6266342355635466082">Chromium nuk mund të kontrollojë për përditësime. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="6268381023930128611">Dëshiron të dalësh nga Chromium?</translation>
+<translation id="6281746429495226318">Personalizo profilin tënd të Chromium</translation>
 <translation id="6295779123002464101"><ph name="FILE_NAME" /> mund të jetë i rrezikshëm, prandaj Chromium e ka bllokuar.</translation>
 <translation id="6309712487085796862">Chromium po përdor kamerën tënde.</translation>
 <translation id="6333502561965082103">Një veprim tjetër në Chromium është në vazhdim. Provo përsëri më vonë.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 293f57e..2597b2e 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM-kaart is gesluit</translation>
 <translation id="2618797463720777311">Stel Nabydeling op</translation>
 <translation id="2619761439309613843">Herlaai daagliks</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> kan nie veilig afgelaai word nie.</translation>
 <translation id="2620436844016719705">Stelsel</translation>
 <translation id="262154978979441594">Lei Google Assistent-stemmodel op</translation>
 <translation id="2621713457727696555">Beveilig</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Soek tans na muis …</translation>
 <translation id="7052237160939977163">Stuur prestasienasporingdata</translation>
 <translation id="7053983685419859001">Blokkeer</translation>
-<translation id="705508001219706572">Installeer <ph name="APP_NAME" /> om vinnig hierheen terug te kom</translation>
 <translation id="7055152154916055070">Herleiding is geblokkeer:</translation>
 <translation id="7055451306017383754">Kon nie ontdeel nie want 'n program gebruik tans hierdie vouer. Die vouer sal ontdeel word wanneer Parallels Dekstop weer afgeskakel word.</translation>
 <translation id="7056526158851679338">Ondersoek toestelle</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Gaan tans die Linux-houer se opstelling na</translation>
 <translation id="9209689095351280025">Werwe kan nie webkoekies gebruik wat jou oral op die web naspoor nie</translation>
 <translation id="9211177926627870898">Opdatering vereis</translation>
+<translation id="9211490828691860325">Alle lessenaars</translation>
 <translation id="9214520840402538427">Oeps! Die inwyding van die installeringtydeienskappe het uitgetel. Kontak asseblief jou steundiensverteenwoordiger.</translation>
 <translation id="9214695392875603905">Kolwyntjie</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" is bygevoeg</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 073fd19..9883cc0 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -802,6 +802,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ጭነትዎን ለማጠናቀቅ ዝግጁ ነው</translation>
 <translation id="1868193363684582383">«Ok Google»</translation>
 <translation id="1868553836791672080">የይለፍ ቃል ፍተሻ በChromium ውስጥ አይገኝም</translation>
+<translation id="1869433484041798909">የዕልባት አዝራር</translation>
 <translation id="187145082678092583">ያነሱ መተግበሪያዎች</translation>
 <translation id="1871534214638631766">ቀኝ ጠቅ ሲያደርጉ ወይም በይዘት ላይ ለረዥም ጊዜ ሲጫኑ ተዛማጅ መረጃን አሳይ</translation>
 <translation id="1871615898038944731">የእርስዎ <ph name="DEVICE_TYPE" /> የተዘመነ ነው</translation>
@@ -833,6 +834,7 @@
 <translation id="1900305421498694955">ከGoogle Play የመጡ መተግበሪያዎች በውጫዊ የማከማቻ መሣሪያዎች ላይ ፋይሎችን ለማንበብ እና ለመጻፍ ሙሉ የፋይል ሥርዓት መዳረሻ ሊያስፈልጋቸው ይችላሉ። በዚህ መሣሪያ ላይ የተፈጠሩ ፋይሎች እና አቃፊዎች ውጫዊውን አንጻፊ ለሚጠቀሙ ለማናቸውም ሰዎች የሚታዩ ናቸው። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;ሁሉንም ምረጥ</translation>
 <translation id="1901396183631570154">Chrome እነዚህን የይለፍ ቃላት በእርስዎ የGoogle መለያ ውስጥ ሊያስቀምጣቸው አልቻለም። አሁንም በዚህ መሣሪያ ላይ እነሱን ማስቀመጥ ይችላሉ።</translation>
+<translation id="1903995858055162096">የእርስዎ መሣሪያ አይደለም? <ph name="BEGIN_LINK" />የእንግዳ ሁነታ<ph name="END_LINK" />ን ይጠቀሙ።</translation>
 <translation id="1905375423839394163">የChromebook መሣሪያ ስም</translation>
 <translation id="1906181697255754968">ጣቢያዎች እንደ ስራዎን በራስ-ሰር ማስቀመጥ ያሉ ባህሪያትን ለማግኘት አብዛኛውን ጊዜ በመሣሪያዎ ላይ ያሉትን ፋይሎች እና አቃፊዎች ይደርሳሉ።</translation>
 <translation id="1906828677882361942">ማናቸውም ጣቢያዎች ተከታታይ ወደቦችን እንዲደርሱ አይፍቀዱ</translation>
@@ -1449,6 +1451,7 @@
 <translation id="2617342710774726426">ሲም ካርድ ተዘግቷል</translation>
 <translation id="2618797463720777311">የአቅራቢያ ማጋሪያን ያቀናብሩ</translation>
 <translation id="2619761439309613843">ዕለታዊ ዕድሳት</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ደህንነቱ በተጠበቀ ሁኔታ ሊወርድ አይችልም።</translation>
 <translation id="2620436844016719705">ስርዓት</translation>
 <translation id="262154978979441594">የGoogle ረዳት የድምፅ ሞዴልን ያሠለጥኑ</translation>
 <translation id="2621713457727696555">ደህንነቱ ተጠብቋል</translation>
@@ -5261,7 +5264,6 @@
 <translation id="7051943809462976355">መዳፊትን በመፈለግ ላይ...</translation>
 <translation id="7052237160939977163">አፈጻጸም መከታተያ ውሂብ ይላኩ</translation>
 <translation id="7053983685419859001">አግድ</translation>
-<translation id="705508001219706572">በፍጥነት ወደዚህ ለመመለስ <ph name="APP_NAME" />ን ይጫኑ</translation>
 <translation id="7055152154916055070">አቅጣጫ ማዞር ታግዷል፦</translation>
 <translation id="7055451306017383754">አንድ መተግበሪያ ይህን አቃፊ እየተጠቀመበት ስለሆነ አለማጋራት አልተቻለም። ትይዩዎች ዴስክቶፕ በሚዘጋበት ቀጣዩ ጊዜ ላይ አቃፊው እንዳይጋራ ይደረጋል።</translation>
 <translation id="7056526158851679338">&amp;መሣሪያዎችን መርምር</translation>
@@ -5434,6 +5436,7 @@
 <translation id="7251346854160851420">ነባሪ ልጣፍ</translation>
 <translation id="7253521419891527137">&amp;ተጨማሪ ይወቁ</translation>
 <translation id="7254951428499890870">እርግጠኛ ነዎት «<ph name="APP_NAME" />»ን በምርመራ ሁነታ ማስጀመር ይፈልጋሉ?</translation>
+<translation id="725497546968438223">የዕልባት አቃፊ አዝራር</translation>
 <translation id="7255002516883565667">አሁን ላይ በዚህ መሣሪያ ላይ ጥቅም ላይ ሊውል የሚችል አንድ መሣሪያ ብቻ አልዎት</translation>
 <translation id="7255935316994522020">ተግብር</translation>
 <translation id="7256069762010468647">ጣቢያ የእርስዎን ካሜራ እየተጠቀመ ነው</translation>
@@ -5695,6 +5698,7 @@
 <translation id="7564847347806291057">ሂደቱን ግታ</translation>
 <translation id="7566118625369982896">የPlay መተግበሪያ አገናኞችን ያቀናብሩ</translation>
 <translation id="756809126120519699">የChrome ውሂብ ጸድቷል</translation>
+<translation id="756876171895853918">አምሳያን አብጅ</translation>
 <translation id="7568790562536448087">በማዘመን ላይ</translation>
 <translation id="7569983096843329377">ጥቁር</translation>
 <translation id="7571643774869182231">ለዝማኔ የሚሆን በቂ ቦታ የለውም</translation>
@@ -7166,6 +7170,7 @@
 <translation id="9209563766569767417">የLinux መያዣ ቅንብሩን በመፈተሽ ላይ</translation>
 <translation id="9209689095351280025">ጣቢያዎች እርስዎን በመላ ድር ላይ የሚከታተሉ ኩኪዎችን መጠቀም አይችሉም</translation>
 <translation id="9211177926627870898">ዝማኔ ያስፈልጋል</translation>
+<translation id="9211490828691860325">ሁሉም ዴስኮች</translation>
 <translation id="9214520840402538427">ውይ!  የጭነት ጊዜ መገለጫ ባህሪያት ጊዜ አልፎባቸዋል።  እባክዎ የድጋፍ ተወካይዎን ያግኙ።</translation>
 <translation id="9214695392875603905">ዘቢብ ኬክ</translation>
 <translation id="9215293857209265904">«<ph name="EXTENSION_NAME" />» ታክሏል</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index fdc4084..4b106b3 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1455,6 +1455,7 @@
 <translation id="2617342710774726426">‏تم قفل شريحة SIM</translation>
 <translation id="2618797463720777311">إعداد ميزة "المشاركة عن قرب"</translation>
 <translation id="2619761439309613843">إعادة التحميل يوميًا</translation>
+<translation id="2620215283731032047">لا يمكن تنزيل <ph name="FILE_NAME" /> بشكل آمن.</translation>
 <translation id="2620436844016719705">النظام</translation>
 <translation id="262154978979441594">‏تمرين النموذج الصوتي الخاص بـ "مساعد Google"</translation>
 <translation id="2621713457727696555">مؤمّنة</translation>
@@ -5270,7 +5271,6 @@
 <translation id="7051943809462976355">جارٍ البحث عن الماوس...</translation>
 <translation id="7052237160939977163">إرسال بيانات تتبع مستوى الأداء</translation>
 <translation id="7053983685419859001">حظر</translation>
-<translation id="705508001219706572">للرجوع إلى هذا الموقع الإلكتروني بشكل أسرع، يُرجى تثبيت تطبيق <ph name="APP_NAME" />.</translation>
 <translation id="7055152154916055070">تم حظر إعادة توجيه:</translation>
 <translation id="7055451306017383754">‏تعذّر إلغاء المشاركة بسبب استخدام تطبيق لهذا المجلد. سيتم إلغاء مشاركة المجلد عند إيقاف تشغيل نظام Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;فحص الأجهزة</translation>
@@ -7176,6 +7176,7 @@
 <translation id="9209563766569767417">‏جارٍ التحقُّق من إعداد حاوية نظام التشغيل Linux</translation>
 <translation id="9209689095351280025">لا يمكن للمواقع الإلكترونية استخدام ملفات تعريف الارتباط لتتبّع نشاط تصفحّك على الإنترنت.</translation>
 <translation id="9211177926627870898">التحديث مطلوب</translation>
+<translation id="9211490828691860325">جميع أجهزة سطح المكتب</translation>
 <translation id="9214520840402538427">عفوًا!  لقد انتهت مهلة بدء تشغيل سمات وقت التثبيت. يُرجى الاتصال بممثل الدعم.</translation>
 <translation id="9214695392875603905">كب كيك</translation>
 <translation id="9215293857209265904">تمت إضافة "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index f5cfa68..9a789f05 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">ছিম কাৰ্ড লক কৰা হৈছে</translation>
 <translation id="2618797463720777311">নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো ছেট আপ কৰক</translation>
 <translation id="2619761439309613843">দৈনিক নতুন ৱালপেপাৰ</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" />ক সুৰক্ষিতভাৱে ডাউনল’ড কৰিব নোৱাৰি।</translation>
 <translation id="2620436844016719705">ছিষ্টেম</translation>
 <translation id="262154978979441594">Google Assistant ভইচ মডেলক প্ৰশিক্ষণ দিয়ক</translation>
 <translation id="2621713457727696555">সুৰক্ষিত</translation>
@@ -5254,7 +5255,6 @@
 <translation id="7051943809462976355">মাউছৰ সন্ধান কৰি থকা হৈছে…</translation>
 <translation id="7052237160939977163">কাৰ্যদক্ষতাৰ ট্রে'চ ডেটা পঠিয়াওক</translation>
 <translation id="7053983685419859001">অৱৰোধ কৰক</translation>
-<translation id="705508001219706572">ইয়ালৈ দ্ৰুতভাৱে উভতি আহিবলৈ <ph name="APP_NAME" /> ইনষ্টল কৰক</translation>
 <translation id="7055152154916055070">পুনৰ নির্দেশ কৰাটো অৱৰোধ কৰা হৈছে</translation>
 <translation id="7055451306017383754">এটা এপ্লিকেশ্বনে এই ফ’ল্ডাৰটো ব্যৱহাৰ কৰি থকা কাৰণে শ্বেয়াৰ কৰাটো বাতিল কৰিব পৰা নগ’ল। পাছৰবাৰ Parallels Desktop বন্ধ হ’লে ফ’ল্ডাৰটো শ্বেয়াৰ কৰাটো বাতিল কৰা হ’ব।</translation>
 <translation id="7056526158851679338">ডিভাইচ &amp;নিৰীক্ষণ কৰক</translation>
@@ -7152,6 +7152,7 @@
 <translation id="9209563766569767417">Linux কণ্টেইনাৰৰ ছেটআপ পৰীক্ষা কৰি থকা হৈছে</translation>
 <translation id="9209689095351280025">ছাইটসমূহে আপোনাক সমগ্ৰ ৱেবত ট্ৰেক কৰা কুকিসমূহ ব্যৱহাৰ কৰিব নোৱাৰে</translation>
 <translation id="9211177926627870898">আপডে'টৰ প্ৰয়োজন</translation>
+<translation id="9211490828691860325">আটাইবোৰ ডেস্ক</translation>
 <translation id="9214520840402538427">আমি দুঃখিত!  ইনষ্টল কৰা সময়ৰ এট্রিবিউট আৰম্ভ কৰাৰ সময় সমাপ্ত হ’ল।  আপোনাৰ সহায়ক প্ৰতিনিধিৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="9214695392875603905">কাপকে’ক</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" যোগ কৰা হ’ল</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 5246039..ad5f72d 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1446,6 +1446,7 @@
 <translation id="2617342710774726426">SIM kart kilidlənib</translation>
 <translation id="2618797463720777311">Yaxınlıqda Paylaşımı ayarlayın</translation>
 <translation id="2619761439309613843">Gündəlik Yenilənmə</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> faylını təhlükəsiz şəkildə endirmək mümkün deyil.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Google Assistentə səs modelini tanımağı öyrədin</translation>
 <translation id="2621713457727696555">Güvənli</translation>
@@ -5256,7 +5257,6 @@
 <translation id="7051943809462976355">Maus axtarılır...</translation>
 <translation id="7052237160939977163">Performans izləmə datasını göndərin</translation>
 <translation id="7053983685419859001">Bloklayın</translation>
-<translation id="705508001219706572">Buraya yenidən daxil olmağı tezləşdirmək üçün <ph name="APP_NAME" /> quraşdırın</translation>
 <translation id="7055152154916055070">Yönləndirmə blok edildi:</translation>
 <translation id="7055451306017383754">Tətbiq bu qovluqdan istifadə etdiyi üçün paylaşımı silmək mümkün olmadı. Parallels Desktop növbəti dəfə bağlandıqda qovluğun paylaşımı silinəcək.</translation>
 <translation id="7056526158851679338">&amp;Cihazları yoxlayın</translation>
@@ -7154,6 +7154,7 @@
 <translation id="9209563766569767417">Linux konteynerinin quraşdırılması yoxlanılır</translation>
 <translation id="9209689095351280025">Saytlar vebdə sizi izləyən kukilərdən istifadə edə bilmir</translation>
 <translation id="9211177926627870898">Güncəlləmə tələb olunur</translation>
+<translation id="9211490828691860325">Bütün masalar</translation>
 <translation id="9214520840402538427">Heheey! Quraşdırma vaxtı atributlarının işəsalınma vaxtı keçdi. Dəstək təmsilçinizlə əlaqə saxlayın.</translation>
 <translation id="9214695392875603905">Kapkeyk</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" əlavə edildi</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index b6741e8..b0d7f5b 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -804,6 +804,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> гатовы завяршыць усталяванне</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">Праверка пароляў у браўзеры Chromium недаступная</translation>
+<translation id="1869433484041798909">Кнопка закладкі</translation>
 <translation id="187145082678092583">Менш праграм</translation>
 <translation id="1871534214638631766">Паказваць інфармацыю пра змесціва пры доўгім націсканні на яго або націсканні правай кнопкай мышы</translation>
 <translation id="1871615898038944731">Абнаўленне прылады <ph name="DEVICE_TYPE" /> не патрабуецца</translation>
@@ -835,6 +836,7 @@
 <translation id="1900305421498694955">Праграмы з Google Play могуць патрабаваць поўнага доступу да файлавай сістэмы – каб чытаць і запісваць файлы на знешніх прыладах сховішча. Створаныя на прыладзе файлы і папкі бачныя ўсім, хто выкарыстоўвае знешні дыск. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Выбраць &amp;усё</translation>
 <translation id="1901396183631570154">Браўзеру Chrome не ўдалося захаваць гэтыя паролі ва Уліковым запісе Google. Можна захаваць іх на гэтай прыладзе.</translation>
+<translation id="1903995858055162096">Не ваша прылада? Выкарыстайце <ph name="BEGIN_LINK" />Гасцявы рэжым<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Назва прылады Chromebook</translation>
 <translation id="1906181697255754968">Сайты звычайна атрымліваюць доступ да файлаў і папак на прыладзе для работы такіх функцый, як аўтаматычнае захаванне зробленага</translation>
 <translation id="1906828677882361942">Не дазваляць сайтам доступ да паслядоўных партоў</translation>
@@ -1452,6 +1454,7 @@
 <translation id="2617342710774726426">SIM-карта заблакіравана</translation>
 <translation id="2618797463720777311">Наладжванне функцыі "Абагульванне паблізу"</translation>
 <translation id="2619761439309613843">Штодзённае абнаўленне</translation>
+<translation id="2620215283731032047">Бяспечна спампаваць файл "<ph name="FILE_NAME" />" нельга.</translation>
 <translation id="2620436844016719705">Сістэма</translation>
 <translation id="262154978979441594">Навучыце Памочніка Google распазнаваць узор голасу</translation>
 <translation id="2621713457727696555">Абаронена</translation>
@@ -5266,7 +5269,6 @@
 <translation id="7051943809462976355">Ідзе пошук мышы...</translation>
 <translation id="7052237160939977163">Адпраўляць даныя трасіроўкі прадукцыйнасці</translation>
 <translation id="7053983685419859001">Заблакіраваць</translation>
-<translation id="705508001219706572">Каб хутка вяртацца сюды, усталюйце праграму "<ph name="APP_NAME" />"</translation>
 <translation id="7055152154916055070">Перанакіраванне заблакіравана:</translation>
 <translation id="7055451306017383754">Не ўдалося скасаваць абагульванне, бо гэту папку выкарыстоўвае праграма. Абагульванне папкі будзе скасавана пасля наступнага завяршэння працы Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Праверыць прылады</translation>
@@ -5439,6 +5441,7 @@
 <translation id="7251346854160851420">Стандартныя шпалеры</translation>
 <translation id="7253521419891527137">&amp;Даведацца больш</translation>
 <translation id="7254951428499890870">Сапраўды запусціць у рэжыме дыягностыкі праграму "<ph name="APP_NAME" />"?</translation>
+<translation id="725497546968438223">Кнопка папкі з закладкамі</translation>
 <translation id="7255002516883565667">Зараз у вас ёсць адна картка, якая можа выкарыстоўвацца толькі на гэтай прыладзе</translation>
 <translation id="7255935316994522020">Ужыць</translation>
 <translation id="7256069762010468647">Сайт выкарыстоўвае камеру</translation>
@@ -5700,6 +5703,7 @@
 <translation id="7564847347806291057">Завяршыць працэс</translation>
 <translation id="7566118625369982896">Кіраванне спасылкамі праграмы Play</translation>
 <translation id="756809126120519699">Даныя Chrome выдалены</translation>
+<translation id="756876171895853918">Наладзіць аватар</translation>
 <translation id="7568790562536448087">Ідзе абнаўленне</translation>
 <translation id="7569983096843329377">Чорны</translation>
 <translation id="7571643774869182231">Недастаткова памяці для абнаўлення</translation>
@@ -7168,6 +7172,7 @@
 <translation id="9209563766569767417">Ідзе праверка налад кантэйнера Linux</translation>
 <translation id="9209689095351280025">Сайты не могуць выкарыстоўваць файлы cookie для адсочвання вас у інтэрнэце</translation>
 <translation id="9211177926627870898">Патрабуецца абнаўленне</translation>
+<translation id="9211490828691860325">Усе працоўныя сталы</translation>
 <translation id="9214520840402538427">Памылка!  Была пратэрмінавана ініцыялізацыя атрыбутаў installation-time ("усталяванне-час").  Звярніцеся ў службу падтрымкі.</translation>
 <translation id="9214695392875603905">Кекс</translation>
 <translation id="9215293857209265904">Дададзена пашырэнне "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 8f96609..acaadb8 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">SIM картата е заключена</translation>
 <translation id="2618797463720777311">Настройване на функцията „Споделяне наблизо“</translation>
 <translation id="2619761439309613843">Ежедневно опресняване</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> не може да се изтегли по сигурен начин.</translation>
 <translation id="2620436844016719705">Система</translation>
 <translation id="262154978979441594">Обучаване на гласовия модел на Google Асистент</translation>
 <translation id="2621713457727696555">защитена</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">Търси се мишка...</translation>
 <translation id="7052237160939977163">Да се изпратят данните от проследяването на ефективността</translation>
 <translation id="7053983685419859001">Блокиране</translation>
-<translation id="705508001219706572">За да можете да се връщате тук бързо, инсталирайте <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Блокирано бе пренасочване:</translation>
 <translation id="7055451306017383754">Прекратяването на споделянето не бе успешно, защото тази папка се използва от приложение. Споделянето ѝ ще бъде прекратено при следващото изключване на Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Инспектиране на устройствата</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Настройките на контейнера за Linux се проверяват</translation>
 <translation id="9209689095351280025">Сайтовете не могат да използват „бисквитки“, които ви следят в мрежата</translation>
 <translation id="9211177926627870898">Изисква се актуализация</translation>
+<translation id="9211490828691860325">Всички работни кътове</translation>
 <translation id="9214520840402538427">Ами сега!  Времето за изчакване на инициализирането на атрибутите за времето за инсталиране изтече.  Моля, свържете се с представител на екипа си за поддръжка.</translation>
 <translation id="9214695392875603905">Кексче</translation>
 <translation id="9215293857209265904"><ph name="EXTENSION_NAME" /> се добави</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index a1feda6..68df1965 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -802,6 +802,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> আপনার ইনস্টেলশন সম্পূর্ণ করার জন্য প্রস্তুত</translation>
 <translation id="1868193363684582383">"হ্যালো Google"</translation>
 <translation id="1868553836791672080">Chromium-এ পাসওয়ার্ড পরীক্ষা করার ফিচারটি উপলভ্য নয়</translation>
+<translation id="1869433484041798909">'বুকমার্ক' বোতাম</translation>
 <translation id="187145082678092583">কয়েকটি অ্যাপ</translation>
 <translation id="1871534214638631766">কন্টেন্টের উপর মাউস রেখে ডানদিকে ক্লিক করলে বা দীর্ঘক্ষণ প্রেস করে ধরে রাখলে এর সংশ্লিষ্ট তথ্য দেখানো হয়</translation>
 <translation id="1871615898038944731">আপনার <ph name="DEVICE_TYPE" /> আপ-টু-ডেট আছে</translation>
@@ -833,6 +834,7 @@
 <translation id="1900305421498694955">এক্সটার্নাল স্টোরেজ ডিভাইসে ফাইল পড়তে এবং সেভ করতে Google Play থেকে ডাউনলোড করা অ্যাপের সম্পূর্ণ ফাইল সিস্টেমে অ্যাক্সেসের প্রয়োজন হতে পারে। ডিভাইসে তৈরি করা ফাইল এবং ফোল্ডার এক্সটার্নাল ড্রাইভ ব্যবহারকারীরা দেখতে পারবেন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;সকল বেছে নিন</translation>
 <translation id="1901396183631570154">আপনার Google অ্যাকাউন্টে Chrome এই পাসওয়ার্ডগুলি সেভ করতে পারেনি। যদিও আপনি এখনও এগুলিকে এই ডিভাইসে সেভ করে রাখতে পারেন।</translation>
+<translation id="1903995858055162096">এটি আপনার ডিভাইস নয়? <ph name="BEGIN_LINK" />গেস্ট মোড<ph name="END_LINK" /> ব্যবহার করুন।</translation>
 <translation id="1905375423839394163">Chromebook ডিভাইসের নাম</translation>
 <translation id="1906181697255754968">আপনার কাজ অটোমেটিক সেভ করার মতো ফিচারের জন্য সাইট সাধারণত আপনার ডিভাইসের ফাইল ও ফোল্ডারগুলি অ্যাক্সেস করে</translation>
 <translation id="1906828677882361942">কোনও সাইটকে সিরিয়াল পোর্ট অ্যাক্সেস করার অনুমতি দেবেন না</translation>
@@ -1449,6 +1451,7 @@
 <translation id="2617342710774726426">সিম কার্ড লক করা আছে</translation>
 <translation id="2618797463720777311">'নিয়ারবাই শেয়ার' ফিচার সেট আপ করুন</translation>
 <translation id="2619761439309613843">প্রতিদিন রিফ্রেশ করা হবে</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ফাইলটি নিরাপদে ডাউনলোড করা যাচ্ছে না।</translation>
 <translation id="2620436844016719705">সিস্টেম</translation>
 <translation id="262154978979441594">Google Assistant-এর ভয়েস মডেলকে প্রশিক্ষণ দিন</translation>
 <translation id="2621713457727696555">সুরক্ষিত</translation>
@@ -5264,7 +5267,6 @@
 <translation id="7051943809462976355">মাউসের জন্য সার্চ করা হচ্ছে...</translation>
 <translation id="7052237160939977163">কার্য-সম্পাদনা ট্রেস ডেটা পাঠান</translation>
 <translation id="7053983685419859001">ব্লক করুন</translation>
-<translation id="705508001219706572">এখানে তাড়াতাড়ি ফিরে আসতে <ph name="APP_NAME" /> ইনস্টল করুন</translation>
 <translation id="7055152154916055070">রিডাইরেক্ট ব্লক করা হয়েছে:</translation>
 <translation id="7055451306017383754">ফোল্ডারটির শেয়ারিং বন্ধ করা যাচ্ছে না, কারণ এখন একটি অ্যাপ্লিকেশন এটি ব্যবহার করছে। পরবর্তী সময়ে Parallels Desktop বন্ধ করা হলে, তবেই ফোল্ডারটির শেয়ারিং বন্ধ করা যাবে।</translation>
 <translation id="7056526158851679338">এবং ডিভাইসগুলি পরিদর্শন</translation>
@@ -5437,6 +5439,7 @@
 <translation id="7251346854160851420">ডিফল্ট ওয়ালপেপার</translation>
 <translation id="7253521419891527137">এবং আরও জানুন</translation>
 <translation id="7254951428499890870">আপনি কি ডায়গনিস্টিক মোডে "<ph name="APP_NAME" />" লঞ্চ করার বিষয়ে নিশ্চিত?</translation>
+<translation id="725497546968438223">'বুকমার্ক ফোল্ডার' বোতাম</translation>
 <translation id="7255002516883565667">এই মুহূর্তে, আপনার কাছে একটি কার্ড রয়েছে যা শুধুমাত্র এই ডিভাইসে ব্যবহার করা যেতে পারে</translation>
 <translation id="7255935316994522020">প্রয়োগ করুন</translation>
 <translation id="7256069762010468647">সাইটটি আপনার ক্যামেরা ব্যবহার করছে</translation>
@@ -5698,6 +5701,7 @@
 <translation id="7564847347806291057">সমাপ্তি প্রক্রিয়া</translation>
 <translation id="7566118625369982896">Play অ্যাপের লিঙ্ক পরিচালনা করুন</translation>
 <translation id="756809126120519699">Chrome ডেটা সাফ হয়েছে</translation>
+<translation id="756876171895853918">অবতার কাস্টমাইজ করুন</translation>
 <translation id="7568790562536448087">আপডেট হচ্ছে</translation>
 <translation id="7569983096843329377">কালো</translation>
 <translation id="7571643774869182231">আপডেটের জন্য যথেষ্ট জায়গা নেই</translation>
@@ -7163,6 +7167,7 @@
 <translation id="9209563766569767417">Linux কন্টেনারের সেট-আপ চেক করে দেখা হচ্ছে</translation>
 <translation id="9209689095351280025">যেসব কুকি ওয়েব জুড়ে আপনার অ্যাক্টিভিটি ট্র্যাক করে, সাইট সেগুলি ব্যবহার করতে পারবে না</translation>
 <translation id="9211177926627870898">আপডেট করা প্রয়োজন</translation>
+<translation id="9211490828691860325">সব ডেক্স</translation>
 <translation id="9214520840402538427">ওহো! প্রারম্ভিক ইনস্টলেশন-সময়ের বৈশিষ্ট্যাবলীর সময় ফুরিয়েছে৷ দয়া করে আপনার সহায়ক প্রতিনিধির সঙ্গে যোগাযোগ করুন৷</translation>
 <translation id="9214695392875603905">কাপ কেক</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" জোড়া হয়েছে</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 8929373..fd431b6 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1453,6 +1453,7 @@
 <translation id="2617342710774726426">SIM kartica je zaključana</translation>
 <translation id="2618797463720777311">Postavite Dijeljenje u blizini</translation>
 <translation id="2619761439309613843">Dnevno osvježavanje</translation>
+<translation id="2620215283731032047">Nije moguće sigurno preuzeti fajl <ph name="FILE_NAME" />.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Naučite Google Asistenta model glasa</translation>
 <translation id="2621713457727696555">Osigurano</translation>
@@ -5267,7 +5268,6 @@
 <translation id="7051943809462976355">Traženje miša...</translation>
 <translation id="7052237160939977163">Pošalji podatke o praćenju performansi</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
-<translation id="705508001219706572">Da se brzo vratite ovdje, instalirajte aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Preusmjeravanje je blokirano:</translation>
 <translation id="7055451306017383754">Poništavanje dijeljenja nije uspjelo jer neka aplikacija koristi ovaj folder. Dijeljenje foldera će se poništiti nakon sljedećeg isključivanja Parallels Desktopa.</translation>
 <translation id="7056526158851679338">&amp;Pregledaj uređaje</translation>
@@ -7171,6 +7171,7 @@
 <translation id="9209563766569767417">Provjeravanje postavljanja Linux spremnika</translation>
 <translation id="9209689095351280025">Web lokacije ne mogu koristiti kolačiće koji vas prate na webu</translation>
 <translation id="9211177926627870898">Potrebno je ažuriranje</translation>
+<translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9214520840402538427">Ups!  Pokretanje atributa za vrijeme instalacije je isteklo.  Obratite se predstavniku za podršku.</translation>
 <translation id="9214695392875603905">Kolačić</translation>
 <translation id="9215293857209265904">Dodana je ekstenzija "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 12e27a86..0cdaf0d 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -801,6 +801,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> està llest per completar la instal·lació</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">La comprovació de contrasenyes no està disponible a Chromium</translation>
+<translation id="1869433484041798909">Botó d'adreça d'interès</translation>
 <translation id="187145082678092583">Menys aplicacions</translation>
 <translation id="1871534214638631766">Mostra informació relacionada amb el contingut en mantenir-lo premut o fer-hi clic amb el botó dret</translation>
 <translation id="1871615898038944731">El dispositiu <ph name="DEVICE_TYPE" /> està actualitzat</translation>
@@ -832,6 +833,7 @@
 <translation id="1900305421498694955">Pot ser que les aplicacions de Google Play requereixin accés complet al sistema de fitxers per llegir i escriure fitxers en dispositius d'emmagatzematge externs. Qualsevol persona que faci servir la unitat externa podrà veure les carpetes i els fitxers creats al dispositiu. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Selecciona-ho &amp;tot</translation>
 <translation id="1901396183631570154">Chrome no ha pogut desar aquestes contrasenyes al teu Compte de Google. Pots continuar desant-les en aquest dispositiu.</translation>
+<translation id="1903995858055162096">No és el teu dispositiu? Fes servir el <ph name="BEGIN_LINK" />mode de convidat<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Nom del dispositiu Chromebook</translation>
 <translation id="1906181697255754968">Els llocs web solen accedir als fitxers i a les carpetes del dispositiu per a funcions com ara desar automàticament la teva feina</translation>
 <translation id="1906828677882361942">No permetis que cap lloc web accedeixi als ports en sèrie</translation>
@@ -1448,6 +1450,7 @@
 <translation id="2617342710774726426">La targeta SIM està bloquejada</translation>
 <translation id="2618797463720777311">Configura la funció Compartició Nearby</translation>
 <translation id="2619761439309613843">Actualització diària</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> no es pot baixar de manera segura.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Entrena el model de veu de l'Assistent de Google</translation>
 <translation id="2621713457727696555">Segura</translation>
@@ -5263,7 +5266,6 @@
 <translation id="7051943809462976355">S'està cercant el ratolí...</translation>
 <translation id="7052237160939977163">Envia dades de traça del rendiment</translation>
 <translation id="7053983685419859001">Bloqueja</translation>
-<translation id="705508001219706572">Per tornar aquí ràpidament, instal·la <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">S'ha bloquejat la redirecció:</translation>
 <translation id="7055451306017383754">No s'ha pogut deixar de compartir aquesta carpeta perquè una aplicació l'està utilitzant. Es deixarà de compartir la propera vegada que Parallels Desktop s'apagui.</translation>
 <translation id="7056526158851679338">&amp;Inspecciona els dispositius</translation>
@@ -5436,6 +5438,7 @@
 <translation id="7251346854160851420">Fons de pantalla predeterminat</translation>
 <translation id="7253521419891527137">&amp;Més informació</translation>
 <translation id="7254951428499890870">Confirmes que vols iniciar "<ph name="APP_NAME" />" en mode de diagnòstic?</translation>
+<translation id="725497546968438223">Botó de carpetes d'adreces d'interès</translation>
 <translation id="7255002516883565667">En aquest moment tens una targeta que només es pot utilitzar en aquest dispositiu</translation>
 <translation id="7255935316994522020">Aplica</translation>
 <translation id="7256069762010468647">El lloc web està utilitzant la càmera</translation>
@@ -5697,6 +5700,7 @@
 <translation id="7564847347806291057">Finalitza el procés</translation>
 <translation id="7566118625369982896">Gestiona els enllaços d'aplicacions de Play</translation>
 <translation id="756809126120519699">S'han esborrat les dades de Chrome</translation>
+<translation id="756876171895853918">Personalitza l'avatar</translation>
 <translation id="7568790562536448087">Actualització</translation>
 <translation id="7569983096843329377">Negre</translation>
 <translation id="7571643774869182231">No hi ha prou espai d'emmagatzematge per fer l'actualització</translation>
@@ -7163,6 +7167,7 @@
 <translation id="9209563766569767417">S'està comprovant la configuració del contenidor de Linux</translation>
 <translation id="9209689095351280025">Els llocs web no poden utilitzar galetes que facin un seguiment de la teva activitat al web</translation>
 <translation id="9211177926627870898">Es necessita una actualització</translation>
+<translation id="9211490828691860325">Tots els escriptoris</translation>
 <translation id="9214520840402538427">La inicialització dels atributs en temps d'instal·lació ha esgotat el temps d'espera. Contacteu amb el representant d'assistència.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">S'ha afegit "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index fdc19b959..6be3225 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -803,6 +803,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> je připraven dokončit instalaci.</translation>
 <translation id="1868193363684582383">„Ok Google“</translation>
 <translation id="1868553836791672080">V prohlížeči Chromium není kontrola hesel k dispozici</translation>
+<translation id="1869433484041798909">Tlačítko záložky</translation>
 <translation id="187145082678092583">Méně aplikací</translation>
 <translation id="1871534214638631766">Zobrazovat související informace, když na obsah kliknete pravým tlačítkem nebo ho dlouze stisknete</translation>
 <translation id="1871615898038944731">Vaše zařízení <ph name="DEVICE_TYPE" /> je aktuální</translation>
@@ -834,6 +835,7 @@
 <translation id="1900305421498694955">Aplikace z Google Play mohou vyžadovat úplný přístup k systému souborů, aby mohly číst a zapisovat soubory na externích úložných zařízeních. Soubory a složky vytvořené na zařízení jsou viditelné pro každého, kdo daný externí disk používá. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Vybrat vše</translation>
 <translation id="1901396183631570154">Chrome tato hesla nemohl uložit do vašeho účtu Google. Můžete si je však uložit na tomto zařízení.</translation>
+<translation id="1903995858055162096">Není to vaše zařízení? Použijte <ph name="BEGIN_LINK" />režim hosta<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Název Chromebooku</translation>
 <translation id="1906181697255754968">Weby obvykle využívají přístup k souborům a složkám v zařízení k funkcím, jako je automatické ukládání práce</translation>
 <translation id="1906828677882361942">Nepovolovat žádným webům přístup k sériovým portům</translation>
@@ -1450,6 +1452,7 @@
 <translation id="2617342710774726426">SIM karta je uzamčena</translation>
 <translation id="2618797463720777311">Nastavení sdílení nablízko</translation>
 <translation id="2619761439309613843">Denní obnovení</translation>
+<translation id="2620215283731032047">Soubor <ph name="FILE_NAME" /> nelze bezpečně stáhnout.</translation>
 <translation id="2620436844016719705">Systém</translation>
 <translation id="262154978979441594">Nastavit hlasový model Asistenta Google</translation>
 <translation id="2621713457727696555">Zabezpečeno</translation>
@@ -5263,7 +5266,6 @@
 <translation id="7051943809462976355">Vyhledávání myši...</translation>
 <translation id="7052237160939977163">Odesílat údaje sledování výkonu</translation>
 <translation id="7053983685419859001">Blokovat</translation>
-<translation id="705508001219706572">Chcete-li se sem rychle vrátit, nainstalujte si aplikaci <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Bylo zablokováno přesměrování:</translation>
 <translation id="7055451306017383754">Sdílení se nepodařilo zrušit, protože tuto složku používá nějaká aplikace. Sdílení složky bude zrušeno při příštím vypnutí systému Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Zkontrolovat zařízení</translation>
@@ -5436,6 +5438,7 @@
 <translation id="7251346854160851420">Výchozí tapeta</translation>
 <translation id="7253521419891527137">&amp;Další informace</translation>
 <translation id="7254951428499890870">Opravdu chcete aplikaci <ph name="APP_NAME" /> spustit v diagnostickém režimu?</translation>
+<translation id="725497546968438223">Tlačítko složky záložek</translation>
 <translation id="7255002516883565667">V současné době máte jednu kartu, kterou lze používat jen na tomto zařízení.</translation>
 <translation id="7255935316994522020">Použít</translation>
 <translation id="7256069762010468647">Web používá kameru</translation>
@@ -5697,6 +5700,7 @@
 <translation id="7564847347806291057">Ukončit proces</translation>
 <translation id="7566118625369982896">Spravovat odkazy na aplikace ve službě Play</translation>
 <translation id="756809126120519699">Vymazání údajů Chromu</translation>
+<translation id="756876171895853918">Upravit avatar</translation>
 <translation id="7568790562536448087">Aktualizace</translation>
 <translation id="7569983096843329377">Černá</translation>
 <translation id="7571643774869182231">Na aktualizaci nemáte dostatek místa</translation>
@@ -7164,6 +7168,7 @@
 <translation id="9209563766569767417">Kontrola nastavení kontejneru systému Linux</translation>
 <translation id="9209689095351280025">Weby vás nemohou na internetu sledovat pomocí souborů cookie</translation>
 <translation id="9211177926627870898">Je nutná aktualizace</translation>
+<translation id="9211490828691860325">Všechny plochy</translation>
 <translation id="9214520840402538427">Jejda! Vypršel časový limit inicializace atributů doby instalace. Kontaktujte zástupce podpory.</translation>
 <translation id="9214695392875603905">Sladký košíček</translation>
 <translation id="9215293857209265904">Bylo přidáno rozšíření <ph name="EXTENSION_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index e2d6325..e72744d9 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">SIM-kortet er låst</translation>
 <translation id="2618797463720777311">Konfigurer "Deling tæt på"</translation>
 <translation id="2619761439309613843">Nyt hver dag</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> kan ikke downloades sikkert.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Anvend en stemmemodel i Google Assistent</translation>
 <translation id="2621713457727696555">Beskyttet</translation>
@@ -5267,7 +5268,6 @@
 <translation id="7051943809462976355">Søger efter mus...</translation>
 <translation id="7052237160939977163">Send data om ydeevne</translation>
 <translation id="7053983685419859001">Bloker</translation>
-<translation id="705508001219706572">Installer <ph name="APP_NAME" /> for hurtigt at vende tilbage hertil</translation>
 <translation id="7055152154916055070">Omdirigeringen blev blokeret:</translation>
 <translation id="7055451306017383754">Delingen kunne ikke ophæves, fordi mappen stadig anvendes af en app. Delingen af mappen ophæves, næste gang Parallels Desktop lukkes.</translation>
 <translation id="7056526158851679338">&amp;Inspicer enheder</translation>
@@ -7170,6 +7170,7 @@
 <translation id="9209563766569767417">Tjekker konfigurationen af Linux-containeren</translation>
 <translation id="9209689095351280025">Websites kan ikke bruge cookies, der sporer din aktivitet på nettet</translation>
 <translation id="9211177926627870898">Opdatering er påkrævet</translation>
+<translation id="9211490828691860325">Alle skriveborde</translation>
 <translation id="9214520840402538427">Ups! Initialiseringen af ​​installationstidens attributter har fået timeout. Kontakt en supportmedarbejder.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" er tilføjet</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 441362f..a420fea6 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1445,6 +1445,7 @@
 <translation id="2617342710774726426">SIM-Karte ist gesperrt</translation>
 <translation id="2618797463720777311">Nearby Share einrichten</translation>
 <translation id="2619761439309613843">Tägliche Aktualisierung</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> kann nicht sicher heruntergeladen werden.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Sprachmodell von Google Assistant trainieren</translation>
 <translation id="2621713457727696555">Gesichert</translation>
@@ -5259,7 +5260,6 @@
 <translation id="7051943809462976355">Suche nach Maus läuft...</translation>
 <translation id="7052237160939977163">Daten der Leistungsnachverfolgung senden</translation>
 <translation id="7053983685419859001">Blockieren</translation>
-<translation id="705508001219706572">Installieren Sie <ph name="APP_NAME" />, um schnell hierher zurückzukehren</translation>
 <translation id="7055152154916055070">Weiterleitung blockiert:</translation>
 <translation id="7055451306017383754">Die Aufhebung der Freigabe ist nicht möglich, weil eine Anwendung diesen Ordner verwendet. Die Freigabe des Ordners wird beim nächsten Herunterfahren von Parallels Desktop aufgehoben.</translation>
 <translation id="7056526158851679338">&amp;Geräte untersuchen</translation>
@@ -7158,6 +7158,7 @@
 <translation id="9209563766569767417">Einrichtung des Linux-Containers wird geprüft</translation>
 <translation id="9209689095351280025">Websites können keine Cookies nutzen, die Sie durch das Web verfolgen</translation>
 <translation id="9211177926627870898">Aktualisierung erforderlich</translation>
+<translation id="9211490828691860325">Alle Desktops</translation>
 <translation id="9214520840402538427">Hoppla! Bei der Initialisierung der Installationszeit-Attribute ist eine Zeitüberschreitung aufgetreten. Bitte wenden Sie sich an Ihren Support-Mitarbeiter.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" hinzugefügt</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 2525cfa..ee088d6 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">Η κάρτα SIM είναι κλειδωμένη</translation>
 <translation id="2618797463720777311">Ρύθμιση λειτουργίας Κοινοποίηση κοντά</translation>
 <translation id="2619761439309613843">Ημερήσια ανανέωση</translation>
+<translation id="2620215283731032047">Δεν είναι δυνατή η λήψη του αρχείου <ph name="FILE_NAME" /> με ασφάλεια.</translation>
 <translation id="2620436844016719705">Σύστημα</translation>
 <translation id="262154978979441594">Εκπαίδευση φωνητικού μοντέλου Βοηθού Google</translation>
 <translation id="2621713457727696555">Unsecured</translation>
@@ -5266,7 +5267,6 @@
 <translation id="7051943809462976355">Αναζήτηση για το ποντίκι…</translation>
 <translation id="7052237160939977163">Αποστολή δεδομένων εντοπισμού απόδοσης</translation>
 <translation id="7053983685419859001">Αποκλεισμός</translation>
-<translation id="705508001219706572">Για να επιστρέψετε εδώ γρήγορα, εγκαταστήστε την εφαρμογή <ph name="APP_NAME" />.</translation>
 <translation id="7055152154916055070">Αποκλεισμένη ανακατεύθυνση:</translation>
 <translation id="7055451306017383754">Η κατάργηση κοινοποίησης δεν ήταν δυνατή, επειδή μια εφαρμογή χρησιμοποιεί αυτόν τον φάκελο. Η κοινοποίηση του φακέλου θα καταργηθεί κατά τον επόμενο τερματισμό λειτουργίας του Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Επιθεώρηση συσκευών</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Έλεγχος της ρύθμισης του κοντέινερ Linux</translation>
 <translation id="9209689095351280025">Οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν cookie που σας παρακολουθούν στον ιστό.</translation>
 <translation id="9211177926627870898">Απαιτείται ενημέρωση</translation>
+<translation id="9211490828691860325">Όλα τα γραφεία</translation>
 <translation id="9214520840402538427">Ωχ!  Η περίοδος προετοιμασίας των ιδιοτήτων χρόνου εγκατάστασης έχει λήξει.  Επικοινωνήστε με τον αντιπρόσωπό σας υποστήριξης.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">Προστέθηκε η επέκταση "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index b9430e32..9009102b 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -50,7 +50,7 @@
 <translation id="1049743911850919806">Incognito</translation>
 <translation id="1049795001945932310">&amp;Language settings</translation>
 <translation id="1054048317165655285">Complete setup on your phone</translation>
-<translation id="1054153489933238809">Open Original Image in New Tab</translation>
+<translation id="1054153489933238809">Open original image in new tab</translation>
 <translation id="1055274863771110134">{NUM_WEEKS,plural, =1{Update <ph name="DEVICE_TYPE" /> within 1 week}other{Update <ph name="DEVICE_TYPE" /> within {NUM_WEEKS} weeks}}</translation>
 <translation id="1055806300943943258">Searching for Bluetooth and USB devices...</translation>
 <translation id="1056466516655540509">Updated <ph name="MINUTES" /> min ago</translation>
@@ -477,7 +477,7 @@
 <translation id="1520689915144573455">{COUNT,plural, =1{1 app}other{# apps}}</translation>
 <translation id="1521442365706402292">Manage certificates</translation>
 <translation id="1521774566618522728">Active today</translation>
-<translation id="152234381334907219">Never Saved</translation>
+<translation id="152234381334907219">Never saved</translation>
 <translation id="1523978563989812243">Text-to-speech engines</translation>
 <translation id="1524430321211440688">Keyboard</translation>
 <translation id="1524563461097350801">No, thanks</translation>
@@ -718,7 +718,7 @@
 <translation id="1779468444204342338">Minimum</translation>
 <translation id="1779652936965200207">Please enter this passkey on "<ph name="DEVICE_NAME" />":</translation>
 <translation id="177989070088644880"><ph name="ANDROID_PACKAGE_NAME" />, app</translation>
-<translation id="1780152987505130652">Close Group</translation>
+<translation id="1780152987505130652">Close group</translation>
 <translation id="1781291988450150470">Current PIN</translation>
 <translation id="1781398670452016618"><ph name="DOMAIN" /> requires you to connect to Wi-Fi now and download an update.</translation>
 <translation id="1781502536226964113">Open the New Tab page</translation>
@@ -943,7 +943,7 @@
 You can manage this account’s settings by installing the Family Link app on your device.  We sent you instructions in an email.</translation>
 <translation id="2040460856718599782">Oops!  Something went wrong when trying to authenticate you. Please double-check your sign-in credentials and try again.</translation>
 <translation id="2040859730880153754">{COUNT,plural, =1{You have 1 compromised password}other{You have # compromised passwords}}</translation>
-<translation id="204497730941176055">Microsoft Certificate Template Name</translation>
+<translation id="204497730941176055">Microsoft certificate template name</translation>
 <translation id="2045117674524495717">Keyboard Shortcut Helper</translation>
 <translation id="2045969484888636535">Continue blocking cookies</translation>
 <translation id="204622017488417136">Your device will be returned to the previously installed version of Chrome. All user accounts and local data will be removed. This cannot be undone.</translation>
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM card is locked</translation>
 <translation id="2618797463720777311">Set up Nearby Share</translation>
 <translation id="2619761439309613843">Daily Refresh</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> can't be downloaded securely.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Train Google Assistant voice model</translation>
 <translation id="2621713457727696555">Secured</translation>
@@ -2556,7 +2557,7 @@
 <translation id="3854967233147778866">Offer to translate websites in other languages</translation>
 <translation id="3854976556788175030">Output tray is full</translation>
 <translation id="3855441664322950881">Pack extension</translation>
-<translation id="3855676282923585394">Import Bookmarks and Settings...</translation>
+<translation id="3855676282923585394">Import bookmarks and settings...</translation>
 <translation id="3856096718352044181">Please verify that this is a valid provider or try again later</translation>
 <translation id="3856800405688283469">Select Time Zone</translation>
 <translation id="3857807444929313943">Lift, then touch again</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Searching for mouse...</translation>
 <translation id="7052237160939977163">Send performance trace data</translation>
 <translation id="7053983685419859001">Block</translation>
-<translation id="705508001219706572">To get back here quickly, install <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirect blocked:</translation>
 <translation id="7055451306017383754">Couldn't unshare because an application is using this folder. The folder will be unshared when Parallels Desktop is next shut down.</translation>
 <translation id="7056526158851679338">&amp;Inspect Devices</translation>
@@ -6871,7 +6871,7 @@
 <translation id="8870413625673593573">Recently Closed</translation>
 <translation id="8871551568777368300">Pinned by administrator</translation>
 <translation id="8871696467337989339">You are using an unsupported command-line flag: <ph name="BAD_FLAG" />. Stability and security will suffer.</translation>
-<translation id="8871974300055371298">Content Settings ...</translation>
+<translation id="8871974300055371298">Content settings</translation>
 <translation id="8872155268274985541">Invalid Kiosk external update manifest file found. Failed to update Kiosk app. Please remove the USB stick.</translation>
 <translation id="8872777911145321141">Ask when a site wants to use your virtual reality devices and data (recommended)</translation>
 <translation id="8874184842967597500">Not connected</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Checking the Linux container setup</translation>
 <translation id="9209689095351280025">Sites can't use cookies that track you across the web</translation>
 <translation id="9211177926627870898">Update required</translation>
+<translation id="9211490828691860325">All desks</translation>
 <translation id="9214520840402538427">Oops!  The initialisation of the installation-time attributes has timed out.  Please contact your support representative.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" added</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index d97b1a0..9f8beb5 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1446,6 +1446,7 @@
 <translation id="2617342710774726426">La tarjeta SIM está bloqueada</translation>
 <translation id="2618797463720777311">Configura Compartir con Nearby</translation>
 <translation id="2619761439309613843">Cambiar diario</translation>
+<translation id="2620215283731032047">No se puede descargar el archivo <ph name="FILE_NAME" /> de forma segura.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Entrenar el modelo de voz del Asistente de Google</translation>
 <translation id="2621713457727696555">Segura</translation>
@@ -5260,7 +5261,6 @@
 <translation id="7051943809462976355">Buscando mouse…</translation>
 <translation id="7052237160939977163">Enviar datos de seguimiento de rendimiento</translation>
 <translation id="7053983685419859001">Bloquear</translation>
-<translation id="705508001219706572">Para volver a acceder a este sitio rápidamente, instala <ph name="APP_NAME" />.</translation>
 <translation id="7055152154916055070">Se bloqueó el redireccionamiento:</translation>
 <translation id="7055451306017383754">No se puede dejar de compartir esta carpeta porque una app la está usando. Dejará de compartirse la próxima vez que se cierre Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspeccionar dispositivos</translation>
@@ -7160,6 +7160,7 @@
 <translation id="9209563766569767417">Revisando la configuración del contenedor de Linux</translation>
 <translation id="9209689095351280025">Los sitios no pueden usar cookies para rastrearte en la Web</translation>
 <translation id="9211177926627870898">Actualización necesaria</translation>
+<translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="9214520840402538427">¡Vaya! Se ha agotado el tiempo de la inicialización de los atributos de tiempo de instalación. Comunícate con el representante de asistencia.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" agregada</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 5b25a19..ec539e09 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">La tarjeta SIM está bloqueada</translation>
 <translation id="2618797463720777311">Configurar Compartir con Nearby</translation>
 <translation id="2619761439309613843">Actualiz. diaria</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> no se puede descargar de forma segura.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Preparar modelo de voz del Asistente de Google</translation>
 <translation id="2621713457727696555">Segura</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">Buscando el ratón...</translation>
 <translation id="7052237160939977163">Enviar datos de seguimiento de rendimiento</translation>
 <translation id="7053983685419859001">Bloquear</translation>
-<translation id="705508001219706572">Para volver aquí rápidamente, instala <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirección bloqueada:</translation>
 <translation id="7055451306017383754">No se ha podido dejar de compartir esta carpeta porque una aplicación está usándola. La carpeta dejará de compartirse la próxima vez que se apague Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspeccionar dispositivos</translation>
@@ -7162,6 +7162,7 @@
 <translation id="9209563766569767417">Comprobando la configuración del contenedor de Linux</translation>
 <translation id="9209689095351280025">Los sitios web no pueden usar cookies para hacer un seguimiento de tu actividad en la Web.</translation>
 <translation id="9211177926627870898">Actualización necesaria</translation>
+<translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="9214520840402538427">¡Vaya! Se ha agotado el tiempo de la inicialización de los atributos de tiempo de instalación. Ponte en contacto con el representante del servicio de asistencia.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" añadida</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 12d535a..1aff417 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM-kaart on lukustatud</translation>
 <translation id="2618797463720777311">Funktsiooni Läheduses jagamine seadistamine</translation>
 <translation id="2619761439309613843">Igapäevane värskendamine</translation>
+<translation id="2620215283731032047">Faili <ph name="FILE_NAME" /> ei saa turvaliselt alla laadida.</translation>
 <translation id="2620436844016719705">Süsteem</translation>
 <translation id="262154978979441594">Google'i assistendi häälemudeli treenimine</translation>
 <translation id="2621713457727696555">Kaitstud</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Hiire otsimine ...</translation>
 <translation id="7052237160939977163">Saada toimivuse jälgimise andmeid</translation>
 <translation id="7053983685419859001">Blokeeri</translation>
-<translation id="705508001219706572">Kiirelt siia naasmiseks installige <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Ümbersuunamine blokeeriti:</translation>
 <translation id="7055451306017383754">Jagamist ei saanud lõpetada, kuna rakendus kasutab seda kausta. Kui Parallels Desktop välja lülitatakse, siis kausta jagamine lõpetatakse.</translation>
 <translation id="7056526158851679338">&amp;Seadmete kontrollimine</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Linuxi konteineri seadistuse kontrollimine</translation>
 <translation id="9209689095351280025">Saidid ei saa veebis teie jälgimiseks kasutada küpsisefaile</translation>
 <translation id="9211177926627870898">Värskendamine on nõutav</translation>
+<translation id="9211490828691860325">Kõik töölauad</translation>
 <translation id="9214520840402538427">Installimisaja atribuutide lähtestamisel ilmnes ajalõpp. Võtke ühendust tugiteenuse esindajaga.</translation>
 <translation id="9214695392875603905">Keeks</translation>
 <translation id="9215293857209265904">Lisati „<ph name="EXTENSION_NAME" />”</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 01c8fb2..5367051 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -801,6 +801,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> prest dago instalazioa osatzeko</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">Pasahitzak egiaztatzeko eginbidea ez dago erabilgarri Chromium-en</translation>
+<translation id="1869433484041798909">Laster-marka egiteko botoia</translation>
 <translation id="187145082678092583">Aplikazio gutxiago</translation>
 <translation id="1871534214638631766">Erakutsi erlazionatutako informazioa edukia eskuineko botoiarekin edo luze sakatzean</translation>
 <translation id="1871615898038944731">Eguneratuta dago <ph name="DEVICE_TYPE" /> gailua</translation>
@@ -832,6 +833,7 @@
 <translation id="1900305421498694955">Google Play-ko aplikazioek sistemako fitxategi guztiak atzitzeko baimena beharko dute agian kanpoko memoriako fitxategiak irakurri eta haietan idazteko. Kanpoko unitatea darabilen edonork ikusi ahalko ditu gailuan sortutako fitxategi eta karpetak. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Hautatu &amp;guztiak</translation>
 <translation id="1901396183631570154">Chrome-k ezin izan ditu gorde pasahitz horiek zure Google-ko kontuan. Gailu honetan gorde ditzakezu, bestela.</translation>
+<translation id="1903995858055162096">Ez al da zure gailua? Erabili <ph name="BEGIN_LINK" />gonbidatu modua<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Chromebook gailuaren izena</translation>
 <translation id="1906181697255754968">Webguneek gailuko fitxategi eta karpetak atzitu ohi dituzte lana automatikoki gordetzeko eta antzeko funtzioak gauzatzeko</translation>
 <translation id="1906828677882361942">Ez eman serie-atakak atzitzeko baimena webguneei</translation>
@@ -1449,6 +1451,7 @@
 <translation id="2617342710774726426">Blokeatuta dago SIM txartela</translation>
 <translation id="2618797463720777311">Konfiguratu Nearby Share</translation>
 <translation id="2619761439309613843">Freskatu egunero</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ezin da segurtasunez deskargatu.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Trebatu Google-ren Laguntzailea eginbidearen ahots-eredua</translation>
 <translation id="2621713457727696555">Babestuta</translation>
@@ -2377,7 +2380,7 @@
 <translation id="3677911431265050325">Eskatu mugikorretarako webgunea</translation>
 <translation id="3677959414150797585">Aplikazioak, web-orriak eta beste gauza batzuk sartzen dira. Iradokizunak hobetzeko balio duten estatistikak bidaltzen dira erabilera-datuak partekatzea aukeratu baduzu soilik.</translation>
 <translation id="3678156199662914018">Luzapena: <ph name="EXTENSION_NAME" /></translation>
-<translation id="3679608942832457508">Kontu honekin saioa hasten duzunean, aplikazioen eta Chrome OS-ren ezarpenak sinkronizatu egingo dira Chromebook batetik bestera. <ph name="LINK_BEGIN" />Sinkronizazio-ezarpenak<ph name="LINK_END" /></translation>
+<translation id="3679608942832457508">Kontu honekin saioa hasten duzunean, aplikazioen eta Chrome OS-en ezarpenak sinkronizatu egingo dira Chromebook batetik bestera. <ph name="LINK_BEGIN" />Sinkronizazio-ezarpenak<ph name="LINK_END" /></translation>
 <translation id="3680683624079082902">Testua ahots bihurtzeko eginbidearen ahotsa</translation>
 <translation id="3681311097828166361">Eskerrik asko oharrak bidaltzeagatik. Konektatuta ez zaudenez, geroago bidaliko da txostena.</translation>
 <translation id="3682824389861648626">Mugimenduen atalasea</translation>
@@ -5262,7 +5265,6 @@
 <translation id="7051943809462976355">Sagua bilatzen…</translation>
 <translation id="7052237160939977163">Bidali errendimenduaren jarraipena egiteko datuak</translation>
 <translation id="7053983685419859001">Blokeatu</translation>
-<translation id="705508001219706572">Hona bizkor itzultzeko, instalatu <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Birbideratze hau blokeatu da:</translation>
 <translation id="7055451306017383754">Ezin izan da kendu partekatzeko aukera, aplikazio bat ari delako karpeta hau erabiltzen. Parallels Desktop ixten den hurrengoan utziko zaio karpeta partekatzeari.</translation>
 <translation id="7056526158851679338">&amp;Aztertu gailuak</translation>
@@ -5435,6 +5437,7 @@
 <translation id="7251346854160851420">Horma-paper lehenetsia</translation>
 <translation id="7253521419891527137">&amp;Lortu informazio gehiago</translation>
 <translation id="7254951428499890870">Ziur "<ph name="APP_NAME" />" diagnostiko moduan abiarazi nahi duzula?</translation>
+<translation id="725497546968438223">Karpetaren laster-marka egiteko botoia</translation>
 <translation id="7255002516883565667">Une honetan, gailu honetan soilik erabil daitekeen txartel bat duzu</translation>
 <translation id="7255935316994522020">Aplikatu</translation>
 <translation id="7256069762010468647">Webgunea zure kamera erabiltzen ari da</translation>
@@ -5696,6 +5699,7 @@
 <translation id="7564847347806291057">Amaitu prozesua</translation>
 <translation id="7566118625369982896">Kudeatu Play-ko aplikazioen estekak</translation>
 <translation id="756809126120519699">Garbitu dira Chrome-ko datuak</translation>
+<translation id="756876171895853918">Pertsonalizatu abatarra</translation>
 <translation id="7568790562536448087">Eguneratzen</translation>
 <translation id="7569983096843329377">Beltza</translation>
 <translation id="7571643774869182231">Ez dago eguneratzeko behar adina toki</translation>
@@ -6287,7 +6291,7 @@
 <translation id="8211551284753798479">PUK kodeak ez du balio. <ph name="RETRIES" /> saiakera gelditzen zaizkizu.</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Deskarga abian da}other{Deskargak abian dira}}</translation>
 <translation id="8213449224684199188">Argazki moduan sartu zara</translation>
-<translation id="8213866992824776555"><ph name="DOMAIN" /> domeinuak gailua identifikatu nahi du kalitate oneneko video eta audio babestuak erreproduzitzeko.</translation>
+<translation id="8213866992824776555"><ph name="DOMAIN" /> domeinuak gailua identifikatu nahi du kalitate oneneko bideo eta audio babestuak erreproduzitzeko.</translation>
 <translation id="8214489666383623925">Ireki fitxategia…</translation>
 <translation id="8214962590150211830">Kendu pertsona hau</translation>
 <translation id="8216351761227087153">Ikusi</translation>
@@ -7161,6 +7165,7 @@
 <translation id="9209563766569767417">Linux-en edukiontziaren konfigurazioa egiaztatzen</translation>
 <translation id="9209689095351280025">Webguneek ezin dituzte erabili sarean jarraipena egiten dizuten cookieak</translation>
 <translation id="9211177926627870898">Eguneratu egin behar da</translation>
+<translation id="9211490828691860325">Lan-eremu guztiak</translation>
 <translation id="9214520840402538427">Instalazioko atributuak abiarazteko denbora-muga gainditu da. Jarri harremanetan laguntza emateko ordezkariarekin.</translation>
 <translation id="9214695392875603905">Pasteltxoa</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" gehitu da</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 0dfd7d0..68f01e7 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -799,6 +799,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> آماده تکمیل نصب است</translation>
 <translation id="1868193363684582383">«Ok Google»</translation>
 <translation id="1868553836791672080">‏بررسی گذرواژه در Chromium دردسترس نیست</translation>
+<translation id="1869433484041798909">دکمه نشانک‌گذاری</translation>
 <translation id="187145082678092583">برنامه‌های کمتر</translation>
 <translation id="1871534214638631766">با فشار طولانی یا کلیک راست روی محتوا، اطلاعات مرتبط را نمایش می‌دهد</translation>
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> شما به‌ روز است</translation>
@@ -830,6 +831,7 @@
 <translation id="1900305421498694955">‏ممکن است برنامه‌های Google Play برای خواندن فایل‌های موجود در دستگاه‌های ذخیره‌سازی خارجی و نوشتن در آن‌ها، نیازمند دسترسی کامل به سیستم فایل باشند. فایل‌ها و پوشه‌های ایجادشده در دستگاه برای هر فردی که از درایو خارجی استفاده می‌کند، نمایان است. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">انتخاب &amp;همه</translation>
 <translation id="1901396183631570154">‏Chrome نتوانست این گذرواژه‌ها را در «حساب Google» شما ذخیره کند. همچنان می‌توانید آن‌ها را در این دستگاه ذخیره کنید.</translation>
+<translation id="1903995858055162096">این دستگاه شما نیست؟ استفاده از <ph name="BEGIN_LINK" />حالت مهمان<ph name="END_LINK" /></translation>
 <translation id="1905375423839394163">‏نام دستگاه Chromebook</translation>
 <translation id="1906181697255754968">سایت‌ها معمولاً برای ارائه ویژگی‌هایی مانند ذخیره خودکار به فایل‌ها و پوشه‌های دستگاه دسترسی می‌یابند</translation>
 <translation id="1906828677882361942">عدم‌امکان دسترسی به درگاه‌های سریال به هیچ سایتی</translation>
@@ -1447,6 +1449,7 @@
 <translation id="2617342710774726426">سیم‌کارت قفل است</translation>
 <translation id="2618797463720777311">راه‌اندازی «هم‌رسانی با اطراف»</translation>
 <translation id="2619761439309613843">بازخوانی روزانه</translation>
+<translation id="2620215283731032047">نمی‌توان <ph name="FILE_NAME" /> را به‌طور ایمن بارگیری کرد.</translation>
 <translation id="2620436844016719705">سیستم</translation>
 <translation id="262154978979441594">‏آموزش مدل صوتی «دستیار Google»</translation>
 <translation id="2621713457727696555">ایمن شد</translation>
@@ -5261,7 +5264,6 @@
 <translation id="7051943809462976355">در حال جستجو برای موشواره...</translation>
 <translation id="7052237160939977163">ارسال داده‌های ردیابی عملکرد</translation>
 <translation id="7053983685419859001">مسدود کردن</translation>
-<translation id="705508001219706572">برای اینکه سریع به اینجا برگردید، <ph name="APP_NAME" /> را نصب کنید</translation>
 <translation id="7055152154916055070">هدایت کردن مسدود شده است:</translation>
 <translation id="7055451306017383754">‏لغو هم‌رسانی امکان‌پذیر نیست زیرا برنامه‌ای از این پوشه استفاده می‌کند. دفعه بعد که Parallels Desktop خاموش شود، پوشه لغو هم‌رسانی می‌شود.</translation>
 <translation id="7056526158851679338">&amp;بازرسی دستگاه‌ها</translation>
@@ -5434,6 +5436,7 @@
 <translation id="7251346854160851420">کاغذدیواری پیش‌فرض</translation>
 <translation id="7253521419891527137">&amp;بیشتر بیاموزید</translation>
 <translation id="7254951428499890870">مطمئنید می‌خواهید «<ph name="APP_NAME" />» را در حالت تشخیص راه‌اندازی کنید؟</translation>
+<translation id="725497546968438223">دکمه نشانک‌گذاری پوشه</translation>
 <translation id="7255002516883565667">درحال‌حاضر، یک کارت دارید که فقط در این دستگاه قابل استفاده است</translation>
 <translation id="7255935316994522020">اعمال</translation>
 <translation id="7256069762010468647">سایت درحال استفاده از دوربین شما است</translation>
@@ -5695,6 +5698,7 @@
 <translation id="7564847347806291057">پایان دادن به فرایند</translation>
 <translation id="7566118625369982896">‏مدیریت پیوندهای برنامه Play</translation>
 <translation id="756809126120519699">‏داده‌های Chrome پاک شد</translation>
+<translation id="756876171895853918">سفارشی کردن چهره‌نما</translation>
 <translation id="7568790562536448087">در حال به‌روزرسانی</translation>
 <translation id="7569983096843329377">سیاه</translation>
 <translation id="7571643774869182231">فضای ذخیره‌سازی برای به‌روزرسانی کافی نیست</translation>
@@ -7162,6 +7166,7 @@
 <translation id="9209563766569767417">‏درحال بررسی تنظیم محتوی Linux</translation>
 <translation id="9209689095351280025">سایت‌ها نمی‌توانند از کوکی‌هایی که شما را در وب ردیابی می‌کند استفاده کنند</translation>
 <translation id="9211177926627870898">به‌روزرسانی لازم است</translation>
+<translation id="9211490828691860325">همه میزکارها</translation>
 <translation id="9214520840402538427">متأسفیم! مهلت مقداردهی اولیه از ویژگی‌های زمان نصب به پایان رسیده است. لطفاً با نماینده پشتیبانی خود تماس بگیرید.</translation>
 <translation id="9214695392875603905">کیک فنجانی</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" اضافه شد</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 3de401b..228d500 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -801,6 +801,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> on valmis suorittamaan asennuksen loppuun.</translation>
 <translation id="1868193363684582383">Ok Google</translation>
 <translation id="1868553836791672080">Salasanojen tarkistus ei ole saatavilla Chromiumissa</translation>
+<translation id="1869433484041798909">Kirjanmerkkipainike</translation>
 <translation id="187145082678092583">Vähemmän sovelluksia</translation>
 <translation id="1871534214638631766">Näytä aiheeseen liittyviä tietoja klikkaamalla sisältöä hiiren kakkospainikkeella tai painamalla sitä pitkään</translation>
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> on ajan tasalla.</translation>
@@ -832,6 +833,7 @@
 <translation id="1900305421498694955">Google Playn sovellukset voivat edellyttää täysiä tiedostojärjestelmän käyttöoikeuksia, jotta ne voivat kirjoittaa ja lukea ulkoisten tallennustilalaitteiden tiedostoja. Kaikki ulkoisen aseman käyttäjät voivat nähdä laitteella luodut tiedostot ja kansiot. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Valitse &amp;kaikki</translation>
 <translation id="1901396183631570154">Chrome ei voinut tallentaa näitä salasanoja Google-tilillesi. Voit kuitenkin tallentaa ne laitteellesi.</translation>
+<translation id="1903995858055162096">Eikö tämä ole laitteesi? Käytä <ph name="BEGIN_LINK" />vierastilaa<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Chromebook-laitteen nimi</translation>
 <translation id="1906181697255754968">Sivustot käyttävät yleensä laitteesi tiedostoja ja kansioita tallentaakseen muutoksia automaattisesti ja tehdäkseen muuta vastaavaa</translation>
 <translation id="1906828677882361942">Älä anna minkään sivuston käyttää sarjaportteja</translation>
@@ -1449,6 +1451,7 @@
 <translation id="2617342710774726426">SIM-kortti on lukittu.</translation>
 <translation id="2618797463720777311">Lähijakamisen käyttöönotto</translation>
 <translation id="2619761439309613843">Uusi päivittäin</translation>
+<translation id="2620215283731032047">Tiedostoa (<ph name="FILE_NAME" />) ei voi ladata turvallisesti.</translation>
 <translation id="2620436844016719705">Järjestelmä</translation>
 <translation id="262154978979441594">Kouluta Google Assistantin äänimalli</translation>
 <translation id="2621713457727696555">Suojattu</translation>
@@ -5262,7 +5265,6 @@
 <translation id="7051943809462976355">Hiirtä etsitään…</translation>
 <translation id="7052237160939977163">Lähetä tehokkuuden tarkkailutietoja</translation>
 <translation id="7053983685419859001">Estä</translation>
-<translation id="705508001219706572">Asenna <ph name="APP_NAME" />, niin pääset takaisin tähän nopeasti</translation>
 <translation id="7055152154916055070">Uudelleenohjaus estetty:</translation>
 <translation id="7055451306017383754">Jakamista ei voitu peruuttaa, koska sovellus käyttää tätä kansiota. Kansion jakaminen perutaan seuraavan kerran, kun Parallels Desktop sammutetaan.</translation>
 <translation id="7056526158851679338">Tark&amp;ista laitteet</translation>
@@ -5435,6 +5437,7 @@
 <translation id="7251346854160851420">Oletustausta</translation>
 <translation id="7253521419891527137">&amp;Lisätietoja</translation>
 <translation id="7254951428499890870">Haluatko varmasti käynnistää sovelluksen <ph name="APP_NAME" /> diagnostiikkatilassa?</translation>
+<translation id="725497546968438223">Kirjanmerkkikansion painike</translation>
 <translation id="7255002516883565667">Yhtä korteistasi voi juuri nyt käyttää vain tällä laitteella</translation>
 <translation id="7255935316994522020">Ota käyttöön</translation>
 <translation id="7256069762010468647">Sivusto käyttää kameraasi</translation>
@@ -5696,6 +5699,7 @@
 <translation id="7564847347806291057">Lopeta prosessi</translation>
 <translation id="7566118625369982896">Hallinnoi Play-sovelluksen linkkejä</translation>
 <translation id="756809126120519699">Chrome-tiedot tyhjennetty</translation>
+<translation id="756876171895853918">Muokkaa avataria</translation>
 <translation id="7568790562536448087">Päivitetään</translation>
 <translation id="7569983096843329377">Musta</translation>
 <translation id="7571643774869182231">Tallennustila ei riitä päivitykseen.</translation>
@@ -7161,6 +7165,7 @@
 <translation id="9209563766569767417">Tarkistetaan Linux-säilön asetuksia</translation>
 <translation id="9209689095351280025">Sivustot eivät voi seurata sinua verkossa evästeiden avulla</translation>
 <translation id="9211177926627870898">Päivitys vaaditaan</translation>
+<translation id="9211490828691860325">Kaikki työpöydät</translation>
 <translation id="9214520840402538427">Hups! Asennus-aika-attribuuttien alustaminen on aikakatkaistu. Ota yhteyttä tukipalveluun.</translation>
 <translation id="9214695392875603905">Kuppikakku</translation>
 <translation id="9215293857209265904"><ph name="EXTENSION_NAME" /> lisätty</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 3af6537..822ddada 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">Naka-lock ang SIM card</translation>
 <translation id="2618797463720777311">I-set up ang Nearby Share</translation>
 <translation id="2619761439309613843">Araw-araw na Pag-refresh</translation>
+<translation id="2620215283731032047">Hindi ligtas na mada-download ang file na<ph name="FILE_NAME" />.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Sanayin ang voice model ng Google Assistant</translation>
 <translation id="2621713457727696555">Secured</translation>
@@ -5266,7 +5267,6 @@
 <translation id="7051943809462976355">Naghahanap ng mouse...</translation>
 <translation id="7052237160939977163">Ipadala ang data ng pagte-trace sa pagganap</translation>
 <translation id="7053983685419859001">I-block</translation>
-<translation id="705508001219706572">Para mabilis na makabalik dito, i-install ang <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Na-block ang pag-redirect:</translation>
 <translation id="7055451306017383754">Hindi ma-unshare dahil ginagamit ng isang application ang folder na ito. Maa-unshare ang folder kapag na-shutdown ang Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspeksyunin ang Mga Device</translation>
@@ -7171,6 +7171,7 @@
 <translation id="9209563766569767417">Sinusuri ang pag-set up ng Linux container</translation>
 <translation id="9209689095351280025">Ang mga site ay hindi makakagamit ng cookies na sumusubaybay sa iyo sa buong web</translation>
 <translation id="9211177926627870898">Kailangang i-update</translation>
+<translation id="9211490828691860325">Lahat ng desk</translation>
 <translation id="9214520840402538427">Oops!  Nag-time out ang pagpapasimula sa mga katangian ng pag-install at panahon.  Mangyaring makipag-ugnay sa iyong kinatawan ng suporta.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">Idinagdag ang "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 90fbf752..4042887 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -802,6 +802,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> est prêt à terminer l'installation.</translation>
 <translation id="1868193363684582383">« Ok Google »</translation>
 <translation id="1868553836791672080">La vérification des mots de passe n'est pas offerte dans Chromium</translation>
+<translation id="1869433484041798909">Bouton de favori</translation>
 <translation id="187145082678092583">Moins d'applications</translation>
 <translation id="1871534214638631766">Afficher de l'information connexe lorsque vous faites un clic droit ou un appui prolongé sur un élément</translation>
 <translation id="1871615898038944731">Votre <ph name="DEVICE_TYPE" /> est à jour</translation>
@@ -833,6 +834,7 @@
 <translation id="1900305421498694955">Les applications de Google Play peuvent exiger un accès complet au système de fichiers pour lire et écrire des fichiers sur des périphériques de stockage externe. Les fichiers et les dossiers créés sur le périphérique sont visibles par tout utilisateur du disque externe. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Tout sélectionner</translation>
 <translation id="1901396183631570154">Chrome n'a pas pu enregistrer ces mots de passe dans votre compte Google. Vous pouvez quand même les enregistrer sur cet appareil.</translation>
+<translation id="1903995858055162096">Ce n'est pas votre appareil? Utilisez le <ph name="BEGIN_LINK" />mode Invité<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Nom du Chromebook</translation>
 <translation id="1906181697255754968">Les sites accèdent généralement aux fichiers et aux dossiers sur votre appareil pour proposer des fonctionnalités, comme la sauvegarde automatique de votre travail</translation>
 <translation id="1906828677882361942">Ne pas autoriser les sites à accéder aux ports série</translation>
@@ -1451,6 +1453,7 @@
 <translation id="2617342710774726426">La carte SIM est verrouillée</translation>
 <translation id="2618797463720777311">Configurer le partage à proximité</translation>
 <translation id="2619761439309613843">Actualiser tous les jours</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ne peut pas être téléchargé de manière sécuritaire.</translation>
 <translation id="2620436844016719705">Système</translation>
 <translation id="262154978979441594">Former le modèle vocal pour l'Assistant Google</translation>
 <translation id="2621713457727696555">Sécurisé</translation>
@@ -5264,7 +5267,6 @@
 <translation id="7051943809462976355">Recherche de la souris en cours…</translation>
 <translation id="7052237160939977163">Envoyer des données de suivi des performances</translation>
 <translation id="7053983685419859001">Bloquer</translation>
-<translation id="705508001219706572">Pour revenir ici rapidement, installez <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirection bloquée :</translation>
 <translation id="7055451306017383754">Impossible d'annuler le partage parce qu'une application utilise ce dossier. Le partage sera annulé au prochain arrêt de Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspecter les appareils</translation>
@@ -5437,6 +5439,7 @@
 <translation id="7251346854160851420">Fond d'écran par défaut</translation>
 <translation id="7253521419891527137">En savoir p&amp;lus</translation>
 <translation id="7254951428499890870">Voulez-vous vraiment lancer l'application « <ph name="APP_NAME" /> » en mode diagnostic?</translation>
+<translation id="725497546968438223">Bouton du dossier de favoris</translation>
 <translation id="7255002516883565667">Pour le moment, vous n'avez qu'une carte et elle ne peut être utilisée que sur cet appareil</translation>
 <translation id="7255935316994522020">Appliquer</translation>
 <translation id="7256069762010468647">Le site utilise votre appareil photo</translation>
@@ -5698,6 +5701,7 @@
 <translation id="7564847347806291057">Supprimer le processus</translation>
 <translation id="7566118625369982896">Gérer les liens de l'application Play</translation>
 <translation id="756809126120519699">Données de Chrome effacées</translation>
+<translation id="756876171895853918">Personnaliser l'avatar</translation>
 <translation id="7568790562536448087">Mise à jour</translation>
 <translation id="7569983096843329377">Noir</translation>
 <translation id="7571643774869182231">Espace insuffisant pour la mise à jour</translation>
@@ -7164,6 +7168,7 @@
 <translation id="9209563766569767417">Vérification de la configuration du conteneur Linux en cours…</translation>
 <translation id="9209689095351280025">Les sites ne peuvent pas utiliser de témoins qui font le suivi de votre activité sur le Web</translation>
 <translation id="9211177926627870898">Mise à jour requise</translation>
+<translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="9214520840402538427">Oups… Le délai alloué à l'initialisation des attributs de temps d'installation a expiré. Veuillez communiquer avec le service d'assistance.</translation>
 <translation id="9214695392875603905">Petit gâteau</translation>
 <translation id="9215293857209265904">« <ph name="EXTENSION_NAME" /> » a été ajouté</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index bdb2b7f000..c3a549b8 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">La carte SIM est verrouillée</translation>
 <translation id="2618797463720777311">Configurer la fonctionnalité Partage à proximité</translation>
 <translation id="2619761439309613843">Actualisation quotidienne</translation>
+<translation id="2620215283731032047">Impossible de télécharger <ph name="FILE_NAME" /> de manière sécurisée.</translation>
 <translation id="2620436844016719705">Système</translation>
 <translation id="262154978979441594">Entraîner l'empreinte vocale de l'Assistant Google</translation>
 <translation id="2621713457727696555">Sécurisé</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Recherche de la souris en cours…</translation>
 <translation id="7052237160939977163">Envoyer des informations relatives au suivi des performances</translation>
 <translation id="7053983685419859001">Bloquer</translation>
-<translation id="705508001219706572">Pour revenir ici rapidement, installez <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirection bloquée :</translation>
 <translation id="7055451306017383754">Impossible d'annuler le partage, car une application utilise ce dossier. Le partage sera annulé au prochain arrêt de Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspecter les appareils</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Vérification de la configuration du conteneur Linux…</translation>
 <translation id="9209689095351280025">Les sites ne peuvent pas utiliser de cookies pour suivre votre activité sur le Web</translation>
 <translation id="9211177926627870898">Mise à jour requise</translation>
+<translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="9214520840402538427">Petit problème… Le délai alloué à l'initialisation des attributs de temps d'installation a expiré. Veuillez contacter le service d'assistance.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ajoutée</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 662bc365..68fc3a21 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -800,6 +800,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> está preparado para completar a instalación</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">A comprobación de contrasinais non está dispoñible en Chromium.</translation>
+<translation id="1869433484041798909">Botón de marcador</translation>
 <translation id="187145082678092583">Menos aplicacións</translation>
 <translation id="1871534214638631766">Mostra información relacionada cando manteñas premido o contido ou fagas clic co botón dereito nel</translation>
 <translation id="1871615898038944731">O dispositivo <ph name="DEVICE_TYPE" /> está actualizado</translation>
@@ -831,6 +832,7 @@
 <translation id="1900305421498694955">As aplicacións de Google Play poden necesitar acceso total ao sistema de ficheiros para ler e editar ficheiros no almacenamento externo. Os ficheiros e os cartafoles creados no dispositivo son visibles para todos os usuarios da unidade externa. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Seleccion&amp;ar todo</translation>
 <translation id="1901396183631570154">Chrome non puido gardar estes contrasinais na túa Conta de Google. Así e todo, podes gardalos neste dispositivo.</translation>
+<translation id="1903995858055162096">Non é o teu dispositivo? Utiliza o <ph name="BEGIN_LINK" />modo de invitado<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Nome do dispositivo Chromebook</translation>
 <translation id="1906181697255754968">Os sitios adoitan acceder aos ficheiros e aos cartafoles do dispositivo para ofrecerche determinadas funcións (por exemplo, gardar automaticamente o teu traballo)</translation>
 <translation id="1906828677882361942">Non permitir que ningún sitio acceda aos portos de serie</translation>
@@ -1448,6 +1450,7 @@
 <translation id="2617342710774726426">A tarxeta SIM está bloqueada</translation>
 <translation id="2618797463720777311">Configurar a función Compartir por Nearby</translation>
 <translation id="2619761439309613843">Actualización diaria</translation>
+<translation id="2620215283731032047">O ficheiro <ph name="FILE_NAME" /> non se pode descargar de forma segura.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Crear modelo de voz do Asistente de Google</translation>
 <translation id="2621713457727696555">Protexida</translation>
@@ -5261,7 +5264,6 @@
 <translation id="7051943809462976355">Buscando o rato...</translation>
 <translation id="7052237160939977163">Enviar datos de seguimento de rendemento</translation>
 <translation id="7053983685419859001">Bloquear</translation>
-<translation id="705508001219706572">Para volver aquí rapidamente, instala <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Bloqueouse unha redirección:</translation>
 <translation id="7055451306017383754">Non se puido deixar de compartir este cartafol porque había unha aplicación usándoo. O cartafol deixará de compartirse cando Parallels Desktop se apague.</translation>
 <translation id="7056526158851679338">&amp;Inspeccionar dispositivos</translation>
@@ -5434,6 +5436,7 @@
 <translation id="7251346854160851420">Fondo de pantalla predeterminado</translation>
 <translation id="7253521419891527137">&amp;Máis información</translation>
 <translation id="7254951428499890870">Estás seguro de que queres iniciar "<ph name="APP_NAME" />" no modo de diagnóstico?</translation>
+<translation id="725497546968438223">Botón de cartafol de marcadores</translation>
 <translation id="7255002516883565667">Neste momento, tes unha tarxeta que só se pode utilizar neste dispositivo</translation>
 <translation id="7255935316994522020">Aplicar</translation>
 <translation id="7256069762010468647">O sitio está usando a túa cámara</translation>
@@ -5695,6 +5698,7 @@
 <translation id="7564847347806291057">Finalizar proceso</translation>
 <translation id="7566118625369982896">Xestionar ligazóns da aplicación Play</translation>
 <translation id="756809126120519699">Borráronse os datos de Chrome</translation>
+<translation id="756876171895853918">Personalizar avatar</translation>
 <translation id="7568790562536448087">Actualizando</translation>
 <translation id="7569983096843329377">Negro</translation>
 <translation id="7571643774869182231">Non hai almacenamento suficiente para realizar a actualización</translation>
@@ -7160,6 +7164,7 @@
 <translation id="9209563766569767417">Comprobando configuración do contedor de Linux</translation>
 <translation id="9209689095351280025">Os sitios non poden usar cookies para seguirte pola Web</translation>
 <translation id="9211177926627870898">Actualización obrigatoria</translation>
+<translation id="9211490828691860325">Todos os ordenadores</translation>
 <translation id="9214520840402538427">Esgotouse o tempo de inicio dos atributos de tempo de instalación. Ponte en contacto co representante do servizo de asistencia.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">Engadiuse "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 88a5922..e9a17bf 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1446,6 +1446,7 @@
 <translation id="2617342710774726426">SIM કાર્ડ લૉક કરેલ છે</translation>
 <translation id="2618797463720777311">'નજીકના શેર'નું સેટઅપ કરો</translation>
 <translation id="2619761439309613843">દરરોજ રિફ્રેશ કરો</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> સુરક્ષિતપણે ડાઉનલોડ કરી શકાતી નથી.</translation>
 <translation id="2620436844016719705">સિસ્ટમ</translation>
 <translation id="262154978979441594">Google Assistant વૉઇસ મૉડલને તાલિમ આપો</translation>
 <translation id="2621713457727696555">સુરક્ષિત</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">માઉસ માટે શોધી રહ્યું છે...</translation>
 <translation id="7052237160939977163">પ્રદર્શન ટ્રેસ ડેટા મોકલો</translation>
 <translation id="7053983685419859001">અવરોધિત કરો</translation>
-<translation id="705508001219706572">અહીં ઝડપથી પરત ફરવા માટે, <ph name="APP_NAME" /> ઇન્સ્ટૉલ કરો</translation>
 <translation id="7055152154916055070">રીડાયરેક્ટ કરવાનું બ્લૉક કરવામાં આવ્યું છે:</translation>
 <translation id="7055451306017383754">કોઈ ઍપ્લિકેશન આ ફોલ્ડરનો ઉપયોગ કરી રહી હોવાને કારણે આને અનશેર કરી શકાતું નથી. જ્યારે આગલી વારે Parallels Desktop શટ ડાઉન થશે, ત્યારે ફોલ્ડરને અનશેર કરવામાં આવશે.</translation>
 <translation id="7056526158851679338">&amp;ઉપકરણોની તપાસ કરો</translation>
@@ -7157,6 +7157,7 @@
 <translation id="9209563766569767417">Linux કન્ટેનરનું સેટઅપ ચેક કરી રહ્યાં છીએ</translation>
 <translation id="9209689095351280025">સાઇટ તમને વેબ પર બધે ટ્રૅક કરતી કુકીનો ઉપયોગ કરી શકશે નહીં</translation>
 <translation id="9211177926627870898">અપડેટ જરૂરી છે</translation>
+<translation id="9211490828691860325">તમામ ડેસ્ક</translation>
 <translation id="9214520840402538427">અરે! ઇન્સ્ટૉલેશન-સમયનો ચાલુ એટ્રિબ્યૂટનો સમય સમાપ્ત થયો. કૃપા કરીને તમારા સપોર્ટ પ્રતિનિધિનો સંપર્ક કરો.</translation>
 <translation id="9214695392875603905">કપકૅક</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ઉમેરાયું</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index bf2bb60a..deb3c49 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">सिम कार्ड लॉक है</translation>
 <translation id="2618797463720777311">आस-पास शेयर करने की सुविधा सेट अप करें</translation>
 <translation id="2619761439309613843">हर दिन रीफ़्रेश करें</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> को सुरक्षित रूप से डाउनलोड नहीं किया जा सकता.</translation>
 <translation id="2620436844016719705">सिस्टम</translation>
 <translation id="262154978979441594">Google Assistant की आवाज़ के नमूने को ट्रेनिंग दें</translation>
 <translation id="2621713457727696555">सुरक्षित</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">माउस खोजा जा रहा है...</translation>
 <translation id="7052237160939977163">निष्पादन ट्रेस डेटा भेजें</translation>
 <translation id="7053983685419859001">ब्लॉक करें</translation>
-<translation id="705508001219706572">इसे और जल्दी ऐक्सेस करने के लिए, <ph name="APP_NAME" /> इंस्टॉल करें</translation>
 <translation id="7055152154916055070">रीडायरेक्ट ब्लॉक किया गया:</translation>
 <translation id="7055451306017383754">शेयर करना बंद नहीं किया जा सका, क्योंकि एक ऐप्लिकेशन इस फ़ोल्डर का इस्तेमाल कर रहा है. जब Parallels Desktop अगली बार बंद होगा, तब इस फ़ोल्डर को शेयर करना बंद कर दिया जाएगा.</translation>
 <translation id="7056526158851679338">&amp;उपकरणों की जाँच करें</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Linux कंटेनर सेट अप की जांच हो रही है</translation>
 <translation id="9209689095351280025">साइटें उन कुकी का इस्तेमाल नहीं कर सकतीं जो आपको वेब पर ट्रैक करती हैं</translation>
 <translation id="9211177926627870898">अपडेट ज़रूरी है</translation>
+<translation id="9211490828691860325">सभी डेस्क</translation>
 <translation id="9214520840402538427">ओह!  इंस्टॉलेशन-समय विशेषताएं शुरू करने की समय सीमा खत्म हो गई है. कृपया अपने सहायता प्रतिनिधि से संपर्क करें.</translation>
 <translation id="9214695392875603905">कपकेक</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" जोड़ा गया</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 8be45187..ab169c0 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">SIM kartica je zaključana</translation>
 <translation id="2618797463720777311">Postavljanje Dijeljenja s Android uređajima</translation>
 <translation id="2619761439309613843">Dnevno osvježavanje</translation>
+<translation id="2620215283731032047">Datoteka <ph name="FILE_NAME" /> ne može se sigurno preuzeti.</translation>
 <translation id="2620436844016719705">Sustav</translation>
 <translation id="262154978979441594">Uvježbavanje glasovnog modela Google asistenta</translation>
 <translation id="2621713457727696555">Zaštićeno</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Traženje miša...</translation>
 <translation id="7052237160939977163">Šalji podatke o praćenju izvedbe</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
-<translation id="705508001219706572">Da biste se brzo vratili ovdje, instalirajte aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Preusmjeravanje je blokirano:</translation>
 <translation id="7055451306017383754">Prestanak dijeljenja nije bio moguć jer jedna aplikacija koristi tu mapu. Dijeljenje mape prestat će kad se Parallels Desktop isključi.</translation>
 <translation id="7056526158851679338">&amp;Provjeri uređaje</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Provjera postavljanja Linuxovog spremnika</translation>
 <translation id="9209689095351280025">Web-lokacije ne mogu upotrebljavati kolačiće koji vas prate na webu</translation>
 <translation id="9211177926627870898">Potrebno je ažuriranje</translation>
+<translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9214520840402538427">Ups! Inicijalizacija atributa vremena instalacije istekla je. Obratite se predstavniku podrške.</translation>
 <translation id="9214695392875603905">Kolač</translation>
 <translation id="9215293857209265904">Dodano je proširenje "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index ae0d39b..24884df 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">A SIM-kártya zárolva van</translation>
 <translation id="2618797463720777311">Közeli megosztás beállítása</translation>
 <translation id="2619761439309613843">Napi frissítés</translation>
+<translation id="2620215283731032047">A következő fájlt nem lehet biztonságosan letölteni: <ph name="FILE_NAME" />.</translation>
 <translation id="2620436844016719705">Rendszer</translation>
 <translation id="262154978979441594">Google Segéd-hangminta megtanítása</translation>
 <translation id="2621713457727696555">Biztonságos</translation>
@@ -4184,7 +4185,7 @@
 <translation id="5794476117027678724">A webhelyek nem láthatják a vágólapon szereplő szöveget és képeket</translation>
 <translation id="5794700615121138172">Megosztott Linux-mappák</translation>
 <translation id="5794786537412027208">Összes Chrome-alkalmazás bezárása</translation>
-<translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására</translation>
+<translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Kereső, a hirdetések és más Google-szolgáltatások személyre szabására</translation>
 <translation id="5798301976526354562">Szöveg mérete (az Élő feliratozás funkcióra is érvényes)</translation>
 <translation id="579915268381781820">Eltávolította a biztonsági hardverkulcsot.</translation>
 <translation id="5799508265798272974">Linuxos virtuális gép: <ph name="LINUX_VM_NAME" /></translation>
@@ -5266,7 +5267,6 @@
 <translation id="7051943809462976355">Egér keresése…</translation>
 <translation id="7052237160939977163">Teljesítménykövetési adatok elküldése</translation>
 <translation id="7053983685419859001">Letiltás</translation>
-<translation id="705508001219706572">Telepítse a(z) <ph name="APP_NAME" /> alkalmazást, hogy gyorsabban visszatérhessen ide</translation>
 <translation id="7055152154916055070">Átirányítás letiltva:</translation>
 <translation id="7055451306017383754">Nem sikerült a megosztás visszavonása, mivel valamelyik alkalmazás használja ezt a mappát. A mappa megosztásának visszavonása a Parallels Desktop következő leállításakor történik majd meg.</translation>
 <translation id="7056526158851679338">&amp;Eszközök vizsgálata</translation>
@@ -6577,7 +6577,7 @@
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
 <translation id="8565650234829130278">Megpróbálta alacsonyabb verzióra váltani az alkalmazást.</translation>
 <translation id="8569682776816196752">Nem található célhely</translation>
-<translation id="8571213806525832805">Az elmúlt négy hétből</translation>
+<translation id="8571213806525832805">Az elmúlt 4 hétből</translation>
 <translation id="8571687764447439720">Kerberos-jegy hozzáadása</translation>
 <translation id="8571814292654854151">Nevezze el a profilját</translation>
 <translation id="8574990355410201600">Hangok folyamatos engedélyezése a következőn: <ph name="HOST" /></translation>
@@ -7168,6 +7168,7 @@
 <translation id="9209563766569767417">Linux-tároló beállításainak ellenőrzése</translation>
 <translation id="9209689095351280025">A webhelyek nem tudnak olyan cookie-kat használni, amelyek nyomon követik tevékenységeit az interneten.</translation>
 <translation id="9211177926627870898">Frissítés szükséges</translation>
+<translation id="9211490828691860325">Az összes asztal</translation>
 <translation id="9214520840402538427">Hoppá! A telepítés alatti attribútumok inicializálásakor időtúllépés történt. Kérjük, lépjen kapcsolatba az ügyfélszolgálattal.</translation>
 <translation id="9214695392875603905">Muffin</translation>
 <translation id="9215293857209265904">„<ph name="EXTENSION_NAME" />” hozzáadva</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 0688b309..2be3e9c1 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -803,6 +803,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" />-ը պատրաստ է ավարտել տեղադրումը</translation>
 <translation id="1868193363684582383">«Ok Google»</translation>
 <translation id="1868553836791672080">Գաղտնաբառերի ստուգումը հասանելի չէ Chromium-ում</translation>
+<translation id="1869433484041798909">Էջանշման կոճակ</translation>
 <translation id="187145082678092583">Ավելի քիչ հավելվածներ</translation>
 <translation id="1871534214638631766">Ցույց տալ առնչվող տեղեկություններ՝ բովանդակության վրա երկար սեղմելու կամ մկնիկի աջ կոճակը սեղմելու դեպքում</translation>
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> սարքը թարմացված է</translation>
@@ -834,6 +835,7 @@
 <translation id="1900305421498694955">Google Play Խանութի հավելավածներին կարող է պահանջվել ֆայլային համակարգի լրիվ հասանելիություն՝ ֆայլերը կարդալու և արտաքին հիշասարքերում պահելու համար: Սարքում ստեղծված ֆայլերն ու պանակները տեսանելի կլինեն բոլորին, ով օգտագործում է արտաքին դրայվը: <ph name="LINK_BEGIN" />Իմանալ ավելին<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Ընտրել &amp;բոլորը</translation>
 <translation id="1901396183631570154">Chrome-ին չհաջողվեց պահել այս գաղտնաբառերը ձեր Google հաշվում։ Դրանք կարող եք պահել այս սարքում։</translation>
+<translation id="1903995858055162096">Սա ձեր սա՞րքը չէ։ Օգտագործեք <ph name="BEGIN_LINK" />հյուրի ռեժիմը<ph name="END_LINK" />։</translation>
 <translation id="1905375423839394163">Chromebook սարքի անունը</translation>
 <translation id="1906181697255754968">Կայքերը սովորաբար օգտագործում են սարքի ֆայլերն ու պանակները՝ ձեր աշխատանքն ավտոմատ կերպով պահպանելու և նման այլ գործառույթների համար</translation>
 <translation id="1906828677882361942">Արգելափակել հաջորդական միացքների հասանելիությունը բոլոր կայքերի համար</translation>
@@ -1451,6 +1453,7 @@
 <translation id="2617342710774726426">SIM քարտը կողպված է</translation>
 <translation id="2618797463720777311">Կարգավորեք «Փոխանակում մոտակա սարքերի հետ» գործառույթը</translation>
 <translation id="2619761439309613843">Ամենօրյա թարմացում</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ֆայլը հնարավոր չէ ներբեռնել անվտանգ եղանակով։</translation>
 <translation id="2620436844016719705">Համակարգ</translation>
 <translation id="262154978979441594">Ձայնագրել ձայնի մոդել Google Օգնականի համար</translation>
 <translation id="2621713457727696555">Պաշտպանված է</translation>
@@ -5267,7 +5270,6 @@
 <translation id="7051943809462976355">Մկնիկի որոնում է…</translation>
 <translation id="7052237160939977163">Ուղարկել կատարողականության հետագծման տվյալները</translation>
 <translation id="7053983685419859001">Արգելափակել</translation>
-<translation id="705508001219706572">Այս էջն արագ բացելու համար տեղադրեք <ph name="APP_NAME" /> հավելվածը</translation>
 <translation id="7055152154916055070">Վերահասցեավորումն արգելափակված է՝</translation>
 <translation id="7055451306017383754">Չհաջողվեց չեղարկել պանակի հասանելիությունը, քանի որ այն օգտագործվում է հավելվածի կողմից։ Պանակն անհասանելի կդառնա, երբ Parallels Desktop-ը հաջորդ անգամ անջատվի։</translation>
 <translation id="7056526158851679338">&amp;Հետազոտել սարքերը</translation>
@@ -5440,6 +5442,7 @@
 <translation id="7251346854160851420">Կանխադրված պաստառ</translation>
 <translation id="7253521419891527137">&amp;Իմանալ ավելին</translation>
 <translation id="7254951428499890870">Գործարկե՞լ «<ph name="APP_NAME" />» հավելվածն ախտորոշման ռեժիմում:</translation>
+<translation id="725497546968438223">Պանակն էջանշելու կոճակ</translation>
 <translation id="7255002516883565667">Տվյալ պահին դուք ունեք մի քարտ, որը կարող է օգտագործվել միայն այս սարքում</translation>
 <translation id="7255935316994522020">Կիրառել</translation>
 <translation id="7256069762010468647">Կայքն օգտագործում է ձեր տեսախցիկը</translation>
@@ -5701,6 +5704,7 @@
 <translation id="7564847347806291057">Ավարտել գործընթացը</translation>
 <translation id="7566118625369982896">Կառավարել Google Play հավելվածի հղումները</translation>
 <translation id="756809126120519699">Chrome-ի տվյալները ջնջվեցին</translation>
+<translation id="756876171895853918">Անհատականացնել ավատարը</translation>
 <translation id="7568790562536448087">Թարմացում</translation>
 <translation id="7569983096843329377">Սև</translation>
 <translation id="7571643774869182231">Թարմացման համար հիշողությունը բավարար չէ</translation>
@@ -7166,6 +7170,7 @@
 <translation id="9209563766569767417">Լինուքսի կոնտեյների կարգավորումները ստուգվում են</translation>
 <translation id="9209689095351280025">Կայքերը չեն կարող օգտագործել քուքիները, որոնց միջոցով հետագծվում են ձեր գործողությունները համացանցում։</translation>
 <translation id="9211177926627870898">Պահանջվում է թարմացում</translation>
+<translation id="9211490828691860325">Բոլոր աշխատասեղանները</translation>
 <translation id="9214520840402538427">Ցավոք, եղադրման ժամանակի հատկանիշների սկզբնավորումը ժամասպառվեց: Կապվեք ձեր աջակցման կենտրոնի ներկայացուցչի հետ:</translation>
 <translation id="9214695392875603905">Կեքս</translation>
 <translation id="9215293857209265904">«<ph name="EXTENSION_NAME" />» ընդլայնումն ավելացվել է</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 887e298..4965f9c 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">Kartu SIM terkunci</translation>
 <translation id="2618797463720777311">Menyiapkan Berbagi Langsung</translation>
 <translation id="2619761439309613843">Muat Ulang Harian</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> tidak dapat didownload dengan aman.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Latih model suara Asisten Google</translation>
 <translation id="2621713457727696555">Aman</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">Mencari mouse...</translation>
 <translation id="7052237160939977163">Mengirim data pelacakan kinerja</translation>
 <translation id="7053983685419859001">Blokir</translation>
-<translation id="705508001219706572">Instal <ph name="APP_NAME" /> agar dapat kembali ke sini dengan cepat</translation>
 <translation id="7055152154916055070">Pengalihan diblokir:</translation>
 <translation id="7055451306017383754">Tidak dapat membatalkan berbagi karena ada aplikasi yang menggunakan folder ini. Berbagi folder akan dibatalkan saat berikutnya Parallels Desktop dimatikan.</translation>
 <translation id="7056526158851679338">&amp;Periksa Perangkat</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Memeriksa penyiapan container Linux</translation>
 <translation id="9209689095351280025">Situs tidak dapat menggunakan cookie yang melacak Anda di seluruh web</translation>
 <translation id="9211177926627870898">Perlu update</translation>
+<translation id="9211490828691860325">Semua desktop</translation>
 <translation id="9214520840402538427">Uups!  Waktu pemulaian atribut waktu pemasangan telah habis.  Hubungi perwakilan dukungan Anda.</translation>
 <translation id="9214695392875603905">Kue mangkok</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ditambahkan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 5714a20..4bd9355a 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">SIM-kortið er læst</translation>
 <translation id="2618797463720777311">Setja upp nærdeilingu</translation>
 <translation id="2619761439309613843">Uppfæra daglega</translation>
+<translation id="2620215283731032047">Ekki er hægt að sækja <ph name="FILE_NAME" /> á öruggan hátt.</translation>
 <translation id="2620436844016719705">Kerfi</translation>
 <translation id="262154978979441594">Þjálfa raddlíkan Google hjálpara</translation>
 <translation id="2621713457727696555">Læst</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Leitar að mús...</translation>
 <translation id="7052237160939977163">Senda rakningargögn um afköst</translation>
 <translation id="7053983685419859001">Setja á bannlista</translation>
-<translation id="705508001219706572">Til að komast hratt hingað aftur skaltu setja upp <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Lokað á framsendingu:</translation>
 <translation id="7055451306017383754">Ekki var hægt að hætta að deila vegna þess að forrit er að nota þessa möppu. Hætt verður að deila möppunni næst þegar slökkt er á Parallels Desktop.</translation>
 <translation id="7056526158851679338">Kanna tæk&amp;i</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Athugar uppsetningu Linux-geymis</translation>
 <translation id="9209689095351280025">Vefsvæði geta ekki notað fótspor sem rekja virkni þína á vefnum</translation>
 <translation id="9211177926627870898">Uppfærslu er krafist</translation>
+<translation id="9211490828691860325">Öll skrifborð</translation>
 <translation id="9214520840402538427">Úbbs! Frumstilling uppsetningareiginda rann út á tíma. Hafðu samband við þjónustufulltrúann þinn.</translation>
 <translation id="9214695392875603905">Kaka</translation>
 <translation id="9215293857209265904">„<ph name="EXTENSION_NAME" />“ bætt við</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 5226f0f..56d8d1d9 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">La scheda SIM è bloccata</translation>
 <translation id="2618797463720777311">Configura Condivisione nelle vicinanze</translation>
 <translation id="2619761439309613843">Aggiornam. quotidiano</translation>
+<translation id="2620215283731032047">Impossibile scaricare <ph name="FILE_NAME" /> in modo sicuro.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Imposta il modello vocale dell'Assistente Google</translation>
 <translation id="2621713457727696555">Protetta</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">Ricerca mouse in corso...</translation>
 <translation id="7052237160939977163">Invia dati di rilevamento del rendimento</translation>
 <translation id="7053983685419859001">Blocca</translation>
-<translation id="705508001219706572">Per tornare qui rapidamente, installa <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Reindirizzamento bloccato:</translation>
 <translation id="7055451306017383754">Impossibile annullare la condivisione perché questa cartella è in uso in un'applicazione. La condivisione della cartella verrà annullata quando verrà arrestato Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Ispeziona dispositivi</translation>
@@ -7161,6 +7161,7 @@
 <translation id="9209563766569767417">Controllo della configurazione del container Linux</translation>
 <translation id="9209689095351280025">I siti non possono utilizzare i cookie per monitorare la tua attività sul Web.</translation>
 <translation id="9211177926627870898">Aggiornamento richiesto</translation>
+<translation id="9211490828691860325">Tutte le scrivanie</translation>
 <translation id="9214520840402538427">Spiacenti. L'inizializzazione degli attributi installation-time è scaduta. Contatta il tuo rappresentante dell'assistenza.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" aggiunta</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index fa3526ab..c7c996e 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">‏כרטיס ה-SIM נעול</translation>
 <translation id="2618797463720777311">הגדרת 'שיתוף בקרבת מקום'</translation>
 <translation id="2619761439309613843">רענון יומי</translation>
+<translation id="2620215283731032047">לא ניתן להוריד את <ph name="FILE_NAME" /> בצורה מאובטחת.</translation>
 <translation id="2620436844016719705">מערכת</translation>
 <translation id="262154978979441594">‏אימון תבנית הקול של Google Assistant</translation>
 <translation id="2621713457727696555">מאובטחת</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">המערכת מחפשת עכבר...</translation>
 <translation id="7052237160939977163">שליחת נתוני מעקב אחר ביצועים</translation>
 <translation id="7053983685419859001">חסימה</translation>
-<translation id="705508001219706572">כדי לחזור לכאן במהירות, מומלץ להתקין את <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">הפניה אוטומטית נחסמה:</translation>
 <translation id="7055451306017383754">‏לא ניתן לבטל את השיתוף כי אפליקציה משתמשת בתיקייה הזו. שיתוף התיקייה הזו יבוטל בכיבוי הבא של Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;בדיקת מכשירים</translation>
@@ -7170,6 +7170,7 @@
 <translation id="9209563766569767417">‏המערכת בודקת את הגדרות הקונטיינר של Linux</translation>
 <translation id="9209689095351280025">‏אתרים לא יכולים להשתמש בקובצי cookie שעוקבים אחריך באינטרנט</translation>
 <translation id="9211177926627870898">נדרש עדכון</translation>
+<translation id="9211490828691860325">כל שולחנות העבודה הווירטואליים</translation>
 <translation id="9214520840402538427">אופס! תם הזמן הקצוב לאתחול של מאפייני זמן ההתקנה. יש לפנות אל נציג התמיכה שלך.</translation>
 <translation id="9214695392875603905">קאפקייק</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" נוסף</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 3ba0902..10d8a6f7 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">SIM カードはロックされています</translation>
 <translation id="2618797463720777311">ニアバイシェアの設定</translation>
 <translation id="2619761439309613843">毎日更新する</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> は安全にダウンロードできません。</translation>
 <translation id="2620436844016719705">システム</translation>
 <translation id="262154978979441594">Google アシスタントの音声モデルのトレーニング</translation>
 <translation id="2621713457727696555">保護あり</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">マウスを探しています...</translation>
 <translation id="7052237160939977163">パフォーマンス追跡データを送信する</translation>
 <translation id="7053983685419859001">ブロック</translation>
-<translation id="705508001219706572">このページにすぐにアクセスできるようにするには、<ph name="APP_NAME" /> をインストールしてください</translation>
 <translation id="7055152154916055070">リダイレクトがブロックされました</translation>
 <translation id="7055451306017383754">このフォルダを使用しているアプリケーションがあるため、共有を停止できませんでした。次回 Parallels Desktop をシャットダウンするときに、フォルダの共有を停止します。</translation>
 <translation id="7056526158851679338">デバイスを検証(&amp;I)</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Linux コンテナの設定を確認しています</translation>
 <translation id="9209689095351280025">サイトは Cookie を使用してあなたをウェブ上でトラッキングできません</translation>
 <translation id="9211177926627870898">更新が必要です</translation>
+<translation id="9211490828691860325">すべてのデスク</translation>
 <translation id="9214520840402538427">installation-time 属性の初期化がタイムアウトしました。サポート担当者にお問い合わせください。</translation>
 <translation id="9214695392875603905">カップケーキ</translation>
 <translation id="9215293857209265904">「<ph name="EXTENSION_NAME" />」が追加されました</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index a359a271..76c65909 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">SIM ბარათი დაბლოკილია</translation>
 <translation id="2618797463720777311">მახლობლად გაზიარების დაყენეა</translation>
 <translation id="2619761439309613843">ყოველდღიური განახლება</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" />-ის უსაფრთხოდ ჩამოტვირთვა ვერ მოხერხდება.</translation>
 <translation id="2620436844016719705">სისტემა</translation>
 <translation id="262154978979441594">Google ასისენტის ხმის მოდელის მომზადება</translation>
 <translation id="2621713457727696555">დაცული</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">მაუსის ძებნა…</translation>
 <translation id="7052237160939977163">ეფექტურობის ტრასირების მონაცემების გაგზავნა</translation>
 <translation id="7053983685419859001">დაბლოკვა</translation>
-<translation id="705508001219706572">აქ უფრო სწრაფად რომ დაბრუნდეთ ხოლმე, დააინსტალირეთ <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">გადამისამართება დაიბლოკა:</translation>
 <translation id="7055451306017383754">გაზიარების გაუქმება ვერ მოხერხდა, ვინაიდან ამ საქაღალდეს ერთ-ერთი აპლიკაცია იყენებს. ამ საქაღალდის გაზიარება გაუქმდება Parallels Desktop-ის მომდევნო გათიშვისას.</translation>
 <translation id="7056526158851679338">მოწყობილობების შ&amp;ემოწმება</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">მიმდინარეობს Linux-ის კონტეინერის დაყენება</translation>
 <translation id="9209689095351280025">საიტები ვერ გამოიყენებს ქუქი-ჩანაწერებს ვებში თქვენთვის თვალის მისადევნებლად</translation>
 <translation id="9211177926627870898">საჭიროა განახლება</translation>
+<translation id="9211490828691860325">ყველა სამუშაო მაგიდა</translation>
 <translation id="9214520840402538427">უპს! დაინსტალირების დროის ატრიბუტების ინიციალიზაცია ამოიწურა. დაუკავშირდით მხარდაჭერის თქვენს წარმომადგენელს.</translation>
 <translation id="9214695392875603905">კექსი</translation>
 <translation id="9215293857209265904">„<ph name="EXTENSION_NAME" />“ დამატებულია</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 7d617d98..a2bd17ae 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">SIM картасы құлыпталған</translation>
 <translation id="2618797463720777311">Nearby Share функциясын реттеу</translation>
 <translation id="2619761439309613843">Күн сайын жаңарту</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> файлын қауіпсіз жүктеп алу мүмкін емес.</translation>
 <translation id="2620436844016719705">Жүйе</translation>
 <translation id="262154978979441594">Google Assistant-ке дауыс үлгісін үйрету</translation>
 <translation id="2621713457727696555">Қорғалған</translation>
@@ -5261,7 +5262,6 @@
 <translation id="7051943809462976355">Тінтуірді іздеуде…</translation>
 <translation id="7052237160939977163">Өнімділікті бақылау деректерін жіберу</translation>
 <translation id="7053983685419859001">Бөгеу</translation>
-<translation id="705508001219706572">Осы жерге жылдам оралу үшін <ph name="APP_NAME" /> қолданбасын орнатыңыз.</translation>
 <translation id="7055152154916055070">Бағыттау функциясына тыйым салынды.</translation>
 <translation id="7055451306017383754">Бөлісуден бас тарту мүмкін емес, себебі бұл қалтаны қолданба пайдаланып жатыр. Parallels Desktop өшкен соң ғана, қалтаны бөлісуден бас тартылады.</translation>
 <translation id="7056526158851679338">&amp;Құрылғыларды тексеру</translation>
@@ -7162,6 +7162,7 @@
 <translation id="9209563766569767417">Linux контейнерінің реттелуі тексерілуде</translation>
 <translation id="9209689095351280025">Сайттар сізді интернетте қадағалайтын cookie файлдарын пайдалана алмайды.</translation>
 <translation id="9211177926627870898">Жаңарту қажет</translation>
+<translation id="9211490828691860325">Барлық жұмыс үстелдері</translation>
 <translation id="9214520840402538427">Орнату уақыты атрибуттарын жұмысқа дайындау мерзімі бітті. Қолдау көрсету өкіліне хабарласыңыз.</translation>
 <translation id="9214695392875603905">Маффин</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" қосылды</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index be40ffc..63fad17 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">ស៊ីមកាតជាប់សោ</translation>
 <translation id="2618797463720777311">រៀបចំការ​ចែករំលែកនៅ​ជិត</translation>
 <translation id="2619761439309613843">ការផ្ទុក​ឡើងវិញ​ប្រចាំថ្ងៃ</translation>
+<translation id="2620215283731032047">មិនអាច​ទាញយក <ph name="FILE_NAME" /> ដោយសុវត្ថិភាពបានទេ។</translation>
 <translation id="2620436844016719705">ប្រព័ន្ធ</translation>
 <translation id="262154978979441594">បង្ហាត់គំរូ​សំឡេង Google ជំនួយការ</translation>
 <translation id="2621713457727696555">មាន​សុវត្ថិភាព</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">កំពុងស្វែងរកកណ្តុរ...</translation>
 <translation id="7052237160939977163">ផ្ញើទិន្នន័យតាមដានប្រតិបត្តិការ</translation>
 <translation id="7053983685419859001">ទប់ស្កាត់</translation>
-<translation id="705508001219706572">ដើម្បីត្រឡប់មក​ទីនេះវិញឱ្យបានរហ័ស សូមដំឡើង <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">​បាន​ទប់ស្កាត់​ការបញ្ជូន​បន្ត៖</translation>
 <translation id="7055451306017383754">មិនអាច​ឈប់ចែករំលែក​បានទេ ដោយសារ​កម្មវិធីកំពុង​ប្រើថតនេះ។ ថតនេះនឹង​ឈប់ចែករំលែក នៅពេល Parallels Desktop បិទ​លើកក្រោយ។</translation>
 <translation id="7056526158851679338">តាមដានឧបករណ៍</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">កំពុងពិនិត្យមើល​ការរៀបចំ​ទម្រង់ផ្ទុក Linux</translation>
 <translation id="9209689095351280025">គេហទំព័រ​មិន​អាចប្រើ​ខូគី ដែលតាមដាន​អ្នក​នៅលើអ៊ីនធឺណិតបានទេ</translation>
 <translation id="9211177926627870898">តម្រូវឱ្យ​ដំឡើង​កំណែ</translation>
+<translation id="9211490828691860325">តុនិម្មិត​ទាំងអស់</translation>
 <translation id="9214520840402538427">អូ! ការចាប់ផ្តើម installation-time attributes បានអស់ពេល។ សូមទំនាក់ទំនងជំនួយការរបស់អ្នក។</translation>
 <translation id="9214695392875603905">នំខេកតូច</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" បានបន្ថែម</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 6763296..1f6dc2b2 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="2618797463720777311">Nearby ಶೇರ್ ಸೆಟಪ್ ಮಾಡಿ</translation>
 <translation id="2619761439309613843">ಪ್ರತಿದಿನವು ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="2620436844016719705">ಸಿಸ್ಟಂ</translation>
 <translation id="262154978979441594">Google Assistant ಗೆ ವಾಯ್ಸ್ ಮಾಡೆಲ್‌ನ ತರಬೇತಿ ನೀಡಿ</translation>
 <translation id="2621713457727696555">ಸುರಕ್ಷಿತವಾಗಿದೆ</translation>
@@ -5269,7 +5270,6 @@
 <translation id="7051943809462976355">ಮೌಸ್‍ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="7052237160939977163">ಕಾರ್ಯಕ್ಷಮತೆ ಟ್ರೇಸ್‌ ಡೇಟಾ ಕಳುಹಿಸಿ</translation>
 <translation id="7053983685419859001">ನಿರ್ಬಂಧಿಸು</translation>
-<translation id="705508001219706572">ಇಲ್ಲಿಗೆ ತ್ವರಿತವಾಗಿ ಮರಳಲು, <ph name="APP_NAME" /> ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ</translation>
 <translation id="7055152154916055070">ಮರುನಿರ್ದೇಶಿಸುವಿಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation>
 <translation id="7055451306017383754">ಒಂದು ಅಪ್ಲಿಕೇಶನ್, ಈ ಫೋಲ್ಡರ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವ ಕಾರಣ, ಅದರ ಹಂಚಿಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಲಿಲ್ಲ. ಮುಂದಿನ ಸಲ Parallels Desktop ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಿದಾಗ, ಈ ಫೋಲ್ಡರ್ ಹಂಚಿಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="7056526158851679338">&amp;ಸಾಧನಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
@@ -7169,6 +7169,7 @@
 <translation id="9209563766569767417">Linux ಕಂಟೇನರ್ ಸೆಟಪ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="9209689095351280025">ವೆಬ್‌ನಾದ್ಯಂತ ನಿಮ್ಮನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಕುಕೀಗಳನ್ನು ವೆಬ್‌ಸೈಟ್‌ಗಳು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="9211177926627870898">ಅಪ್‌ಡೇಟ್ ಅಗತ್ಯವಿದೆ</translation>
+<translation id="9211490828691860325">ಎಲ್ಲಾ ಡೆಸ್ಕ್‌ಗಳು</translation>
 <translation id="9214520840402538427">ಓಹ್! ಇನ್‌ಸ್ಟಾಲೇಶನ್-ಟೈಮ್-ಆ್ಯಟ್ರಿಬ್ಯೂಷನ್ ಅವಧಿ ಮುಗಿದಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಬೆಂಬಲ ಪ್ರತಿನಿಧಿಯನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ಸೇರಿಸಲಾಗಿದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index badba7d..5eb37272 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">SIM 카드가 잠겨 있습니다.</translation>
 <translation id="2618797463720777311">Nearby Share 설정</translation>
 <translation id="2619761439309613843">매일 새로고침</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> 파일은 안전하게 다운로드할 수 없습니다.</translation>
 <translation id="2620436844016719705">시스템</translation>
 <translation id="262154978979441594">Google 어시스턴트 음성 모델 학습시키기</translation>
 <translation id="2621713457727696555">보안</translation>
@@ -5261,7 +5262,6 @@
 <translation id="7051943809462976355">마우스 검색 중...</translation>
 <translation id="7052237160939977163">성능 추적 데이터 전송</translation>
 <translation id="7053983685419859001">차단</translation>
-<translation id="705508001219706572">이곳으로 빠르게 이동하려면 <ph name="APP_NAME" /> 앱을 설치하세요.</translation>
 <translation id="7055152154916055070">다음 주소로의 리디렉션이 차단됨:</translation>
 <translation id="7055451306017383754">다른 애플리케이션에서 폴더를 사용 중이므로 공유를 취소할 수 없습니다. 다음번에 Parallels Desktop이 종료되면 폴더 공유가 취소됩니다.</translation>
 <translation id="7056526158851679338">기기 검사(&amp;I)</translation>
@@ -7161,6 +7161,7 @@
 <translation id="9209563766569767417">Linux 컨테이너 설정 확인 중</translation>
 <translation id="9209689095351280025">사이트가 웹 전반에서 사용자를 추적하는 쿠키를 사용할 수 없습니다.</translation>
 <translation id="9211177926627870898">업데이트 필요</translation>
+<translation id="9211490828691860325">모든 데스크</translation>
 <translation id="9214520840402538427">설치 시간 속성의 시작 시간이 초과되었습니다. 지원 담당자에게 문의하시기 바랍니다.</translation>
 <translation id="9214695392875603905">컵케이크</translation>
 <translation id="9215293857209265904">'<ph name="EXTENSION_NAME" />'이(가) 추가됨</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index fe40b1d..b75f635f 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM-карта кулпуланган</translation>
 <translation id="2618797463720777311">Nearby Share функциясын жөндөө</translation>
 <translation id="2619761439309613843">Күн сайын жаңыртуу</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> файлын коопсуз жүктөп алууга болбойт.</translation>
 <translation id="2620436844016719705">Тутум</translation>
 <translation id="262154978979441594">Google Жардамчыга үнүңүздүн үлгүсүн үйрөтүңүз</translation>
 <translation id="2621713457727696555">Корголгон</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">Чычкан изделүүдө…</translation>
 <translation id="7052237160939977163">Иштин майнаптуулугун жогорулатуу дайындарын жөнөтүү</translation>
 <translation id="7053983685419859001">Бөгөттөө</translation>
-<translation id="705508001219706572">Бул баракты тезирээк ачуу үчүн <ph name="APP_NAME" /> колдонмосун орнотуңуз</translation>
 <translation id="7055152154916055070">Багыттоо бөгөттөлгөн:</translation>
 <translation id="7055451306017383754">Колдонмо бул папканы пайдаланып жаткандыктан, бөлүшүү токтотулган жок. Parallels Desktop эмки жолу өчүрүлгөндө, бул папканы бөлүшүү токтотулат.</translation>
 <translation id="7056526158851679338">Түзмөктөрдү &amp;текшерүү</translation>
@@ -7165,6 +7165,7 @@
 <translation id="9209563766569767417">Linux контейнеринин жөндөөсү текшерилүүдө</translation>
 <translation id="9209689095351280025">Сайттар Интернеттеги аракеттериңизге көз салган cookie файлдарын колдонушпайт</translation>
 <translation id="9211177926627870898">Жаңыртуу талап кылынат</translation>
+<translation id="9211490828691860325">Бардык иш такталар</translation>
 <translation id="9214520840402538427">Ой! Орнотуу убакыт аттрибуттарынын демилгеленишин күтүү убакыты аяктады. Кардарларды тейлеген өкүлүңүзгө кайрылыңыз.</translation>
 <translation id="9214695392875603905">Кекс</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" кошулду</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 1cad49b..9d5fc41 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">ແຜ່ນ SIM ລັອກແລ້ວ</translation>
 <translation id="2618797463720777311">ຕັ້ງຄ່າການແບ່ງປັນໃກ້ຄຽງ</translation>
 <translation id="2619761439309613843">ການໂຫຼດຂໍ້ມູນໃໝ່ປະຈຳວັນ</translation>
+<translation id="2620215283731032047">ບໍ່ສາມາດດາວໂຫຼດ <ph name="FILE_NAME" /> ໄດ້ຢ່າງປອດໄພ.</translation>
 <translation id="2620436844016719705">ລະ​ບົບ</translation>
 <translation id="262154978979441594">ຝຶກຮູບແບບສຽງໃຫ້ຜູ້ຊ່ວຍ Google</translation>
 <translation id="2621713457727696555">ຮັກສາຄວາມປອດໄພແລ້ວ</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">ການ​ຄົ້ນ​ຫາ​ເມົາສ໌...</translation>
 <translation id="7052237160939977163">ສົ່ງ​ຂໍ້​ມູນຕິດຕາມການ​ປະ​ຕິ​ບັດ</translation>
 <translation id="7053983685419859001">ບລັອກ</translation>
-<translation id="705508001219706572">ເພື່ອກັບຄືນບ່ອນນີ້ໄດ້ຢ່າງວ່ອງໄວ, ກະລຸນາຕິດຕັ້ງ <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">ບລັອກການປ່ຽນເສັ້ນທາງແລ້ວ:</translation>
 <translation id="7055451306017383754">ບໍ່ສາມາດເຊົາແບ່ງປັນໄດ້ເພາະວ່າແອັບພລິເຄຊັນກຳລັງໃຊ້ໂຟນເດີນີ້ຢູ່. ລະບົບຈະເຊົາແບ່ງປັນໂຟນເດີເມື່ອປິດ Parallels Desktop ໃນຄັ້ງຕໍ່ໄປ.</translation>
 <translation id="7056526158851679338">​ກວດ​ກາ​ອຸ​ປະ​ກອນ</translation>
@@ -7162,6 +7162,7 @@
 <translation id="9209563766569767417">ກຳລັງກວດການຕັ້ງຄ່າກ່ອງບັນຈຸ Linux</translation>
 <translation id="9209689095351280025">ເວັບໄຊບໍ່ສາມາດໃຊ້ຄຸກກີ້ທີ່ຕິດຕາມທ່ານໃນທົ່ວເວັບໄຊໄດ້</translation>
 <translation id="9211177926627870898">ຈຳເປັນຕ້ອງອັບເດດ</translation>
+<translation id="9211490828691860325">ໂຕະທັງໝົດ</translation>
 <translation id="9214520840402538427">ອຸ້ຍ! ການລິເລີ່ມຄຸນລັກສະນະເວລາການຕິດຕັ້ງໝົດເວລາແລ້ວ. ກະລຸນາຕິດຕໍ່ຕົວແທນຊ່ວຍເຫຼືອຂອງທ່ານ.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">ເພີ່ມ "<ph name="EXTENSION_NAME" />" ແລ້ວ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 0dc72a4..4f4a1ac 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -804,6 +804,7 @@
 <translation id="1867780286110144690">„<ph name="PRODUCT_NAME" />“ pasirengusi baigti diegimą</translation>
 <translation id="1868193363684582383">„Ok Google“</translation>
 <translation id="1868553836791672080">Naudojant „Chromium“ slaptažodžio patikra nepasiekiama</translation>
+<translation id="1869433484041798909">Žymės mygtukas</translation>
 <translation id="187145082678092583">Mažiau programų</translation>
 <translation id="1871534214638631766">Rodyti susijusią informaciją, kai turinys spustelėjamas dešiniuoju klavišu arba ilgai paspaudžiamas</translation>
 <translation id="1871615898038944731">„<ph name="DEVICE_TYPE" />“ atnaujintas</translation>
@@ -835,6 +836,7 @@
 <translation id="1900305421498694955">Programose iš „Google Play“ gali būti prašoma leidimo pasiekti visas failų sistemos funkcijas, kad būtų galima nuskaityti ir įrašyti failus išoriniuose saugyklos įrenginiuose. Įrenginyje sukurtus failus ir aplankus gali matyti visi, naudojantys išorinį diską. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Pasirinkti &amp;viską</translation>
 <translation id="1901396183631570154">„Chrome“ nepavyko išsaugoti šių slaptažodžių „Google“ paskyroje. Vis tiek galite juos išsaugoti šiame įrenginyje.</translation>
+<translation id="1903995858055162096">Ne jūsų įrenginys? Naudokite <ph name="BEGIN_LINK" />svečio režimą<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">„Chromebook“ įrenginio pavadinimas</translation>
 <translation id="1906181697255754968">Paprastai svetainės pasiekia failus ir aplankus jūsų įrenginyje vykdydamos tokias funkcijas kaip automatinis darbo išsaugojimas</translation>
 <translation id="1906828677882361942">Neleisti svetainėms pasiekti nuosekliųjų prievadų</translation>
@@ -1452,6 +1454,7 @@
 <translation id="2617342710774726426">SIM kortelė užrakinta</translation>
 <translation id="2618797463720777311">Bendrinimo netoliese nustatymas</translation>
 <translation id="2619761439309613843">Atnaujinimas per dieną</translation>
+<translation id="2620215283731032047">Negalima saugiai atsisiųsti failo „<ph name="FILE_NAME" />“.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Išmokyti „Google“ padėjėjo balso modelį</translation>
 <translation id="2621713457727696555">Apsaugota</translation>
@@ -5267,7 +5270,6 @@
 <translation id="7051943809462976355">Ieškoma pelės...</translation>
 <translation id="7052237160939977163">Siųsti našumo stebėjimo duomenis</translation>
 <translation id="7053983685419859001">Blokuoti</translation>
-<translation id="705508001219706572">Jei norite sparčiai čia grįžti, įdiekite „<ph name="APP_NAME" />“</translation>
 <translation id="7055152154916055070">Peradresavimas užblokuotas:</translation>
 <translation id="7055451306017383754">Nepavyko panaikinti bendrinimo, nes programa naudoja šį aplanką. Aplankas bus nebebendrinamas, kai kitą kartą išjungsite „Parallels Desktop“.</translation>
 <translation id="7056526158851679338">&amp;Tikrinti įrenginius</translation>
@@ -5440,6 +5442,7 @@
 <translation id="7251346854160851420">Numatytasis ekrano fonas</translation>
 <translation id="7253521419891527137">&amp;Sužinokite daugiau</translation>
 <translation id="7254951428499890870">Ar tikrai norite paleisti „<ph name="APP_NAME" />“ diagnostikos režimu?</translation>
+<translation id="725497546968438223">Žymių aplanko mygtukas</translation>
 <translation id="7255002516883565667">Šiuo metu turite vieną kortelę, kurią galima naudoti tik šiuo įrenginiu</translation>
 <translation id="7255935316994522020">Taikyti</translation>
 <translation id="7256069762010468647">Svetainė naudoja jūsų fotoaparatą</translation>
@@ -5701,6 +5704,7 @@
 <translation id="7564847347806291057">Baigti procesą</translation>
 <translation id="7566118625369982896">„Play“ programų nuorodų tvarkymas</translation>
 <translation id="756809126120519699">Išvalyti „Chrome“ duomenys</translation>
+<translation id="756876171895853918">Tinkinti pseudoportretą</translation>
 <translation id="7568790562536448087">Atnaujinama</translation>
 <translation id="7569983096843329377">Juoda</translation>
 <translation id="7571643774869182231">Saugykloje nepakanka vietos, kad būtų galima atnaujinti</translation>
@@ -7170,6 +7174,7 @@
 <translation id="9209563766569767417">Tikrinama „Linux“ sudėtinio rodinio sąranka</translation>
 <translation id="9209689095351280025">Svetainės negali naudoti slapukų, stebinčių jus žiniatinklyje</translation>
 <translation id="9211177926627870898">Būtina atnaujinti</translation>
+<translation id="9211490828691860325">Visi darbalaukiai</translation>
 <translation id="9214520840402538427">Oi! Diegimo trukmės atributų iniciacijos laikas baigėsi. Susisiekite su palaikymo komandos atstovu.</translation>
 <translation id="9214695392875603905">Keksinis pyragaitis</translation>
 <translation id="9215293857209265904">Pridėtas „<ph name="EXTENSION_NAME" />“</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 6686e3a..986a2be 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1453,6 +1453,7 @@
 <translation id="2617342710774726426">SIM karte ir bloķēta.</translation>
 <translation id="2618797463720777311">Kopīgošanas tuvumā iestatīšana</translation>
 <translation id="2619761439309613843">Nomainīt katru dienu</translation>
+<translation id="2620215283731032047">Failu “<ph name="FILE_NAME" />” nevar droši lejupielādēt.</translation>
 <translation id="2620436844016719705">Sistēma</translation>
 <translation id="262154978979441594">Google asistenta balss modeļa izveide</translation>
 <translation id="2621713457727696555">Aizsargāts</translation>
@@ -5267,7 +5268,6 @@
 <translation id="7051943809462976355">Notiek peles meklēšana...</translation>
 <translation id="7052237160939977163">Sūtīt veiktspējas izsekošanas datus</translation>
 <translation id="7053983685419859001">Bloķēt</translation>
-<translation id="705508001219706572">Lai varētu ātri atgriezties šeit, instalējiet lietotni <ph name="APP_NAME" />.</translation>
 <translation id="7055152154916055070">Novirzīšana ir bloķēta:</translation>
 <translation id="7055451306017383754">Nevarēja atsaukt kopīgošanu, jo šo mapi izmanto lietojumprogramma. Mapes kopīgošana tiks atsaukta nākamajā reizē, kad tiks pārtraukta Parallels Desktop darbība.</translation>
 <translation id="7056526158851679338">&amp;Pārbaudīt ierīces</translation>
@@ -7170,6 +7170,7 @@
 <translation id="9209563766569767417">Linux konteinera iestatījumu pārbaude</translation>
 <translation id="9209689095351280025">Vietnēs nevar izmantot sīkfailus, kas izseko jūsu darbības tīmeklī</translation>
 <translation id="9211177926627870898">Jāveic atjaunināšana</translation>
+<translation id="9211490828691860325">Visas darbvietas</translation>
 <translation id="9214520840402538427">Instalācijas laika atribūtu inicializēšanā diemžēl iestājās noildze. Lūdzu, sazinieties ar savu atbalsta pārstāvi.</translation>
 <translation id="9214695392875603905">Glazūrkēkss</translation>
 <translation id="9215293857209265904">Ir pievienots paplašinājums <ph name="EXTENSION_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 60acb1b..acdc3d5 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -802,6 +802,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> е подготвен да ја комплетира инсталацијата</translation>
 <translation id="1868193363684582383">„Ok Google“</translation>
 <translation id="1868553836791672080">Проверката на лозинки не е достапна во Chromium</translation>
+<translation id="1869433484041798909">Копче за обележувач</translation>
 <translation id="187145082678092583">Помалку апликации</translation>
 <translation id="1871534214638631766">Прикажувај поврзани информации кога ќе кликнам со десно копче или кога долго ќе притиснам на содржини</translation>
 <translation id="1871615898038944731">Вашиот <ph name="DEVICE_TYPE" /> е ажуриран</translation>
@@ -833,6 +834,7 @@
 <translation id="1900305421498694955">Апликациите од Google Play може да бараат целосен пристап до системот на датотеки за да читаат и да запишуваат датотеки на надворешни уреди за складирање. Датотеките и папките создадени на уредот се видливи за сите што го користат надворешниот диск. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Избери ги &amp;сите</translation>
 <translation id="1901396183631570154">Chrome не може да ги зачува лозинкиве во сметката на Google. Сѐ уште може да ги зачувате на уредов.</translation>
+<translation id="1903995858055162096">Ова не е вашиот уред? Користете <ph name="BEGIN_LINK" />режим на гостин<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Име на уредот Chromebook</translation>
 <translation id="1906181697255754968">Сајтовите обично пристапуваат до датотеките и папките на вашиот уред за функции како што е автоматското зачувување на вашата работа</translation>
 <translation id="1906828677882361942">Не дозволувај ниту еден сајт да пристапува до сериските порти</translation>
@@ -1450,6 +1452,7 @@
 <translation id="2617342710774726426">SIM-картичката е заклучена</translation>
 <translation id="2618797463720777311">Поставување „Споделување во близина“</translation>
 <translation id="2619761439309613843">Дневно освежување</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> не може да се преземе безбедно.</translation>
 <translation id="2620436844016719705">Систем</translation>
 <translation id="262154978979441594">Вежбајте го гласовниот модел на „Помошникот на Google“</translation>
 <translation id="2621713457727696555">Заштитена</translation>
@@ -5263,7 +5266,6 @@
 <translation id="7051943809462976355">Се бара глушец…</translation>
 <translation id="7052237160939977163">Испрати податоци во траги за учинок</translation>
 <translation id="7053983685419859001">Блокирај</translation>
-<translation id="705508001219706572">За брз пристап дотука, инсталирајте <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Пренасочувањето е блокирано:</translation>
 <translation id="7055451306017383754">Не може да се откаже споделувањето бидејќи некоја апликација ја користи папкава. Споделувањето на папкава ќе се откаже следниот пат кога ќе се исклучи Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Провери уреди</translation>
@@ -5436,6 +5438,7 @@
 <translation id="7251346854160851420">Стандарден тапет</translation>
 <translation id="7253521419891527137">&amp;Дознај повеќе</translation>
 <translation id="7254951428499890870">Дали сте сигурни дека сакате да стартувате „<ph name="APP_NAME" />“ во дијагностички режим?</translation>
+<translation id="725497546968438223">Копче за папка со обележувачи</translation>
 <translation id="7255002516883565667">Во моментов имате една картичка што може да се користи само на овој уред</translation>
 <translation id="7255935316994522020">Примени</translation>
 <translation id="7256069762010468647">Сајтот ја користи камерата</translation>
@@ -5697,6 +5700,7 @@
 <translation id="7564847347806291057">Заврши процес</translation>
 <translation id="7566118625369982896">Управувајте со линкови до апликации на Play</translation>
 <translation id="756809126120519699">Податоците на Chrome се исчистени</translation>
+<translation id="756876171895853918">Приспособете го аватарот</translation>
 <translation id="7568790562536448087">Се ажурира</translation>
 <translation id="7569983096843329377">Црна</translation>
 <translation id="7571643774869182231">Нема доволно простор за ажурирање</translation>
@@ -7166,6 +7170,7 @@
 <translation id="9209563766569767417">Се проверува поставувањето на контејнерот за Linux</translation>
 <translation id="9209689095351280025">Сајтовите не можe да користат колачиња што ве следат на интернет</translation>
 <translation id="9211177926627870898">Потребно е ажурирање</translation>
+<translation id="9211490828691860325">Сите работни површини</translation>
 <translation id="9214520840402538427">Упс! Иницијализацијата на атрибутите за време на инсталација истече. Контактирајте со вашиот претставник за поддршка.</translation>
 <translation id="9214695392875603905">Тортичка</translation>
 <translation id="9215293857209265904">Додадена е „<ph name="EXTENSION_NAME" />“</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index fe3d803e..9d783051f 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -798,6 +798,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> നിങ്ങളുടെ ഇന്‍‌സ്റ്റാളേഷന്‍ പൂര്‍ത്തിയാക്കുന്നതിന് തയ്യാറാണ്</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">പാസ്‌വേഡ് പരിശോധന Chromium-ൽ ലഭ്യമല്ല</translation>
+<translation id="1869433484041798909">ബുക്ക്‌മാർക്ക് ബട്ടൺ</translation>
 <translation id="187145082678092583">കുറച്ച് ആപ്പുകൾ</translation>
 <translation id="1871534214638631766">ഉള്ളടക്കത്തിൽ വലത്-ക്ലിക്ക് ചെയ്യുമ്പോഴോ ദീർഘനേരം അമർത്തുമ്പോഴോ അതിന്റെ അനുബന്ധ വിവരങ്ങൾ കാണിക്കുക</translation>
 <translation id="1871615898038944731">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അപ്‌‌ടു‌ഡേറ്റാണ്</translation>
@@ -829,6 +830,7 @@
 <translation id="1900305421498694955">ബാഹ്യ സ്‌റ്റോറേജ് ഉപകരണങ്ങളിലെ ഫയലുകൾ വായിക്കാനും എഴുതാനും Google Play-ൽ നിന്നുള്ള ആപ്പുകൾക്ക് പൂർണ്ണ ഫയൽ സിസ്‌റ്റം ആക്‌സസ് ആവശ്യമായേക്കാം. ഉപകരണത്തിൽ സൃഷ്‌ടിച്ച ഫയലുകളും ഫോൾഡറുകളും ബാഹ്യ ഡ്രൈവ് ഉപയോഗിക്കുന്ന ആർക്കും ദൃശ്യമാകും. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">എല്ലാം &amp;തിരഞ്ഞെടുക്കൂ</translation>
 <translation id="1901396183631570154">Chrome-ന് ഈ പാസ്‌വേഡുകൾ നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കാനായില്ല. എങ്കിലും അവ നിങ്ങൾക്ക് ഈ ഉപകരണത്തിൽ തുടർന്നും സൂക്ഷിക്കാനാകും.</translation>
+<translation id="1903995858055162096">നിങ്ങളുടെ ഉപകരണമല്ലേ? <ph name="BEGIN_LINK" />അതിഥി മോഡ്<ph name="END_LINK" /> ഉപയോഗിക്കുക.</translation>
 <translation id="1905375423839394163">Chromebook ഉപകരണ നാമം</translation>
 <translation id="1906181697255754968">നിങ്ങളുടെ വർക്ക് സ്വയമേവ സംരക്ഷിക്കുന്നത് പോലുള്ള ഫീച്ചറുകൾക്ക്, സൈറ്റുകൾ സാധാരണയായി നിങ്ങളുടെ ഉപകരണത്തിലെ ഫയലുകളും ഫോൾഡറുകളും ആക്‌സസ് ചെയ്യാറുണ്ട്</translation>
 <translation id="1906828677882361942">സീരിയൽ പോർട്ടുകൾ ആക്‌സസ് ചെയ്യാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
@@ -1446,6 +1448,7 @@
 <translation id="2617342710774726426">സിം കാർഡ് ലോക്കുചെയ്‌തു</translation>
 <translation id="2618797463720777311">സമീപമുള്ള പങ്കിടൽ സജ്ജീകരിക്കുക</translation>
 <translation id="2619761439309613843">ദിവസവുമുള്ള പുതുക്കൽ</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> സുരക്ഷിതമായി ഡൗൺലോഡ് ചെയ്യാനാവില്ല.</translation>
 <translation id="2620436844016719705">സിസ്റ്റം</translation>
 <translation id="262154978979441594">Google Assistant ശബ്‌ദ മോഡലിനെ പരിശീലിപ്പിക്കുക</translation>
 <translation id="2621713457727696555">സുരക്ഷിതമാക്കി</translation>
@@ -5261,7 +5264,6 @@
 <translation id="7051943809462976355">മൗസിനായി തിരയുന്നു...</translation>
 <translation id="7052237160939977163">പ്രകടന ട്രെയിസ് ഡാറ്റ അയയ്‌ക്കുക</translation>
 <translation id="7053983685419859001">തടയുക</translation>
-<translation id="705508001219706572">ഇവിടേക്ക് വേഗത്തിൽ മടങ്ങിയെത്താൻ, <ph name="APP_NAME" /> ഇൻസ്‌റ്റാൾ ചെയ്യുക</translation>
 <translation id="7055152154916055070">റീഡയറക്‌റ്റ് ചെയ്യുന്നത് ബ്ലോക്ക് ചെയ്തു</translation>
 <translation id="7055451306017383754">ഒരു ആപ്പ് ഈ ഫോൾഡർ ഉപയോഗിക്കുന്നതിനാൽ പങ്കിടൽ മാറ്റാനായില്ല. Parallels Desktop അടുത്ത തവണ ഷട്ട് ഡൗൺ ചെയ്യുമ്പോൾ ഫോൾഡർ പങ്കിടൽ മാറ്റും.</translation>
 <translation id="7056526158851679338">&amp;ഉപകരണങ്ങൾ പരിശോധിക്കുക</translation>
@@ -5434,6 +5436,7 @@
 <translation id="7251346854160851420">ഡിഫോള്‍‌ട്ട് വാള്‍‌പേപ്പര്‍</translation>
 <translation id="7253521419891527137">&amp;കൂടുതലറിയുക</translation>
 <translation id="7254951428499890870">നിങ്ങൾക്ക് "<ph name="APP_NAME" />" ഡയഗണോസ്റ്റിക്‌ മോഡിൽ ലോഞ്ച് ചെയ്യണമെന്ന് തീർച്ചയാണോ?</translation>
+<translation id="725497546968438223">ബുക്ക്‌മാർക്ക് ഫോൾഡർ ബട്ടൺ</translation>
 <translation id="7255002516883565667">ഇപ്പോൾ, ഈ ഉപകരണത്തിൽ മാത്രം ഉപയോഗിക്കാനാവുന്ന കാർഡ് നിങ്ങൾക്കുണ്ട്</translation>
 <translation id="7255935316994522020">ബാധകമാക്കുക</translation>
 <translation id="7256069762010468647">സൈറ്റ് നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കുന്നു</translation>
@@ -5695,6 +5698,7 @@
 <translation id="7564847347806291057">പ്രക്രിയയുടെ അവസാനം</translation>
 <translation id="7566118625369982896">Play ആപ്പ് ലിങ്കുകൾ നിയന്ത്രിക്കുക</translation>
 <translation id="756809126120519699">Chrome ഡാറ്റ മായ്‌ച്ചു</translation>
+<translation id="756876171895853918">അവതാർ ഇഷ്‌ടാനുസൃതമാക്കുക</translation>
 <translation id="7568790562536448087">അപ്‌ഡേറ്റുചെയ്യുന്നു</translation>
 <translation id="7569983096843329377">കറുപ്പ്</translation>
 <translation id="7571643774869182231">അപ്‌ഡേറ്റിന് ആവശ്യമായ സ്‌റ്റോറേജില്ല</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index aca22c9b..5bfd664 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1446,6 +1446,7 @@
 <translation id="2617342710774726426">SIM карт түгжигдсэн</translation>
 <translation id="2618797463720777311">Ойролцоо хуваалцах онцлогийг тохируулах</translation>
 <translation id="2619761439309613843">Өдөр тутам сэргээх</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" />-г аюулгүй татах боломжгүй.</translation>
 <translation id="2620436844016719705">Систем</translation>
 <translation id="262154978979441594">Google Туслахын дуу хоолойн загварыг сургах</translation>
 <translation id="2621713457727696555">Хамгаалалттай</translation>
@@ -5258,7 +5259,6 @@
 <translation id="7051943809462976355">Компьютерийн хулганыг хайж байна ...</translation>
 <translation id="7052237160939977163">Үйлдлийн явцын өгөгдлийг илгээх</translation>
 <translation id="7053983685419859001">Блоклох</translation>
-<translation id="705508001219706572">Энд шуурхай буцаж ирэхийн тулд <ph name="APP_NAME" />-г суулгана уу</translation>
 <translation id="7055152154916055070">Дахин чиглүүлэлтийг блоклосон:</translation>
 <translation id="7055451306017383754">Энэ фолдерыг аппликэйшн ашиглаж байгаа тул хуваалцсаныг болиулж чадсангүй. Parallels дэлгэцийг дараагийн удаа унтраах үед фолдерын хуваалцсаныг болиулна.</translation>
 <translation id="7056526158851679338">&amp; Төхөөрөмжүүдийг шалгах</translation>
@@ -7154,6 +7154,7 @@
 <translation id="9209563766569767417">Linux контейнерын тохируулгыг шалгаж байна</translation>
 <translation id="9209689095351280025">Сайтууд нь таныг веб дээр хянадаг күүкиг ашиглах боломжгүй байна</translation>
 <translation id="9211177926627870898">Шинэчлэх шаардлагатай</translation>
+<translation id="9211490828691860325">Бүх дэлгэц</translation>
 <translation id="9214520840402538427">Програм суурьлуулах атрибут эхлэх цаг хэтэрхий удаан байна. Тусламжийн төлөөлөгчдөө хандана уу.</translation>
 <translation id="9214695392875603905">Жижиг кекс</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" нэмэгдсэн</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 37ebfd6..e5ca1ec7 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">सिम कार्ड लॉक केले आहे</translation>
 <translation id="2618797463720777311">Nearby सह शेअरिंग सेट करा</translation>
 <translation id="2619761439309613843">दैनिक रिफ्रेश</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> सुरक्षितपणे डाउनलोड केली जाऊ शकत नाही.</translation>
 <translation id="2620436844016719705">सिस्टम</translation>
 <translation id="262154978979441594">Google Assistant व्हॉइस मॉडेलला प्रशिक्षण द्या</translation>
 <translation id="2621713457727696555">सुरक्षित</translation>
@@ -5261,7 +5262,6 @@
 <translation id="7051943809462976355">माउसचा शोध घेत आहे...</translation>
 <translation id="7052237160939977163">कार्यप्रदर्शन ट्रेस डेटा पाठवा</translation>
 <translation id="7053983685419859001">अवरोधित करा</translation>
-<translation id="705508001219706572">येथे झटपट परत येण्यासाठी, <ph name="APP_NAME" />इंस्टॉल करा</translation>
 <translation id="7055152154916055070">रीडिरेक्ट ब्लॉक केले:</translation>
 <translation id="7055451306017383754">एक अ‍ॅप्लिकेशन हे फोल्डर वापरत असल्यामुळे ते अनशेअर करता आले नाही. पुढे Parallels Desktop बंद केल्यावर फोल्डर अनशेअर केले जाईल.</translation>
 <translation id="7056526158851679338">&amp;निरीक्षण डिव्हाइसेस</translation>
@@ -7160,6 +7160,7 @@
 <translation id="9209563766569767417">Linux कंटेनर सेटअप तपासत आहे</translation>
 <translation id="9209689095351280025">साइट संपूर्ण वेबवर तुमचा माग ठेवणाऱ्या कुकी वापरू शकत नाहीत</translation>
 <translation id="9211177926627870898">अपडेट आवश्‍यक</translation>
+<translation id="9211490828691860325">सर्व डेस्क</translation>
 <translation id="9214520840402538427">अरेरे! स्थापना-वेळ विशेषतांचे इंस्टॉलेशन कालबाह्य झाले. कृपया तुमच्या सपोर्ट प्रतिनिधीशी संपर्क साधा.</translation>
 <translation id="9214695392875603905">कपकेक</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" जोडले</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 4d64236..380e44d3 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">Kad SIM dikunci</translation>
 <translation id="2618797463720777311">Sediakan Kongsi Berdekatan</translation>
 <translation id="2619761439309613843">Muat Semula Harian</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> tidak dapat dimuat turun dengan selamat.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Latih model suara Google Assistant</translation>
 <translation id="2621713457727696555">Selamat</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Mencari tetikus...</translation>
 <translation id="7052237160939977163">Hantar data surih prestasi</translation>
 <translation id="7053983685419859001">Sekat</translation>
-<translation id="705508001219706572">Untuk kembali ke sini dengan cepat, pasang <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Ubah hala disekat:</translation>
 <translation id="7055451306017383754">Tidak dapat menyahkongsi kerana terdapat aplikasi yang menggunakan folder ini. Folder ini akan dinyahkongsi apabila Parallels Desktop ditutup selepas ini.</translation>
 <translation id="7056526158851679338">&amp;Periksa Peranti</translation>
@@ -7168,6 +7168,7 @@
 <translation id="9209563766569767417">Menyemak persediaan bekas Linux</translation>
 <translation id="9209689095351280025">Tapak tidak dapat menggunakan kuki untuk menjejaki anda merentas web</translation>
 <translation id="9211177926627870898">Kemas kini diperlukan</translation>
+<translation id="9211490828691860325">Semua meja</translation>
 <translation id="9214520840402538427">Alamak! Pemulaan sifat masa pemasangan telah tamat masa. Sila hubungi wakil sokongan anda.</translation>
 <translation id="9214695392875603905">Kek cawan</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ditambah</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index c61e0e9b..66d5f25b 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">ဆင်းမ်ကဒ် လော့ခ်ကျနေပါသည်</translation>
 <translation id="2618797463720777311">'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကို စနစ်ထည့်သွင်းခြင်း</translation>
 <translation id="2619761439309613843">နေ့စဉ် ပြန်လည်စတင်ရန်</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ကို လုံခြုံစွာ ဒေါင်းလုဒ်လုပ်၍မရပါ။</translation>
 <translation id="2620436844016719705">စနစ်</translation>
 <translation id="262154978979441594">Google Assistant အသံ နမူနာ လေ့ကျင့်ရန်</translation>
 <translation id="2621713457727696555">လုံခြုံပြီ</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">မောက်စ်ရှာနေ...</translation>
 <translation id="7052237160939977163">စွမ်းဆောင်ရည် လမ်းကြောင်းလိုက်ခြင်း အချက်လက် ပို့</translation>
 <translation id="7053983685419859001">ပိတ်ဆို့ရန်</translation>
-<translation id="705508001219706572">ဤနေရာသို့ အမြန်ပြန်လာရန် <ph name="APP_NAME" /> ကို ထည့်သွင်းပါ</translation>
 <translation id="7055152154916055070">တစ်ဆင့်ပြန်ညွှန်ခြင်းကို ပိတ်ထားသည်−</translation>
 <translation id="7055451306017383754">အပလီကေးရှင်းက ဤဖိုင်တွဲကို အသုံးပြုနေသဖြင့် မျှဝေမှု မလုပ်၍မရပါ။ နောင်တွင် Parallels Desktop ပိတ်လိုက်သည့်အခါ ဖိုင်တွဲကို မျှဝေမှု မလုပ်တော့ပါ။</translation>
 <translation id="7056526158851679338">&amp;ကိရိယာများကို စုံစမ်းရန်</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Linux ကွန်တိန်နာ စနစ်ထည့်သွင်းမှု စစ်ဆေးနေသည်</translation>
 <translation id="9209689095351280025">ဝဘ်တစ်လျှောက် သင့်အားခြေရာခံသည့် ကွတ်ကီးများကို ဝဘ်ဆိုက်များက အသုံးမပြုနိုင်ပါ</translation>
 <translation id="9211177926627870898">အပ်ဒိတ်လုပ်ရန် လိုပါသည်</translation>
+<translation id="9211490828691860325">မျက်နှာပြင်နေရာအားလုံး</translation>
 <translation id="9214520840402538427">အူးပ်စ်!  တပ်ဆင်ရေး-အချိန် အချင်းလက္ခဏာများ အတွက် သတ်မှတ်ချိန် ကုန်သွားပါပြီ။ ကျေးဇူးပြုပြီး သင့်ကို ကူညီပေးသည့် ကိုယ်စားလှယ်ကို ဆက်သွယ်ပါ။</translation>
 <translation id="9214695392875603905">ကြက်ဥမုန့်</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ကို ထည့်ပြီး</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 86cc126..1c2f05d 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1445,6 +1445,7 @@
 <translation id="2617342710774726426">SIM कार्ड लक गरिएको छ</translation>
 <translation id="2618797463720777311">नजिकैका यन्त्रसँग सेयर गर्ने सुविधा सेटअप गर्नुहोस्</translation>
 <translation id="2619761439309613843">दैनिक पुनः ताजा गर्नुहोस्</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> सुरक्षित रूपमा डाउनलोड गर्न सकिएन।</translation>
 <translation id="2620436844016719705">सिस्टम</translation>
 <translation id="262154978979441594">Google सहायकको आवाजको मोडेललाई आफ्नो आवाज चिन्न सिकाउनुहोस्</translation>
 <translation id="2621713457727696555">सुरक्षित पारियो</translation>
@@ -5257,7 +5258,6 @@
 <translation id="7051943809462976355">माउस खोज्दै...</translation>
 <translation id="7052237160939977163">प्रदर्शन ट्रेस लगत पठाउनुहोस्</translation>
 <translation id="7053983685419859001">रोक्नुहोस्</translation>
-<translation id="705508001219706572">यही पेजमा छिटोछरितो रूपमा फर्कन <ph name="APP_NAME" /> इन्स्टल गर्नुहोस्</translation>
 <translation id="7055152154916055070">रिडिरेक्ट नामक सुविधामाथि रोक लगाइयो:</translation>
 <translation id="7055451306017383754">कुनै एप्लिकेसनले यो फोल्डर प्रयोग गरिरहेका कारण यसलाई अनसेयर गर्न सकिएन। अर्को पटक Parallels Desktop सट डाउन हुँदा यो फोल्डर अनसेयर गरिने छ।</translation>
 <translation id="7056526158851679338">यन्त्रहरूको &amp;निरीक्षण गर्नुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 01d293a..cadfe1c 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">Simkaart is vergrendeld</translation>
 <translation id="2618797463720777311">'Dichtbij delen' instellen</translation>
 <translation id="2619761439309613843">Dagelijks vernieuwen</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> kan niet beveiligd worden gedownload.</translation>
 <translation id="2620436844016719705">Systeem</translation>
 <translation id="262154978979441594">Spraakmodel van de Google Assistent trainen</translation>
 <translation id="2621713457727696555">Beveiligd</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">Muis zoeken...</translation>
 <translation id="7052237160939977163">Gegevens over het bijhouden van prestaties verzenden</translation>
 <translation id="7053983685419859001">Blokkeren</translation>
-<translation id="705508001219706572">Installeer <ph name="APP_NAME" /> om hier snel terug te keren</translation>
 <translation id="7055152154916055070">Omleiding geblokkeerd:</translation>
 <translation id="7055451306017383754">Kan het delen niet opheffen omdat een app deze map gebruikt. Het delen van de map wordt opgeheven als Parallels Desktop weer wordt uitgeschakeld.</translation>
 <translation id="7056526158851679338">Apparaten &amp;inspecteren</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">De installatie van de Linux-container wordt gecontroleerd</translation>
 <translation id="9209689095351280025">Sites kunnen geen cookies gebruiken die je volgen op internet</translation>
 <translation id="9211177926627870898">Update vereist</translation>
+<translation id="9211490828691860325">Alle bureaus</translation>
 <translation id="9214520840402538427">De initialisatie van de kenmerken van de installatietijd is verlopen. Neem contact op met je ondersteuningsmedewerker.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">'<ph name="EXTENSION_NAME" />' toegevoegd</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 029fbdf..91e9aa2 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">SIM-kortet er låst</translation>
 <translation id="2618797463720777311">Konfigurer nærdeling</translation>
 <translation id="2619761439309613843">Daglig oppdatering</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> kan ikke lastes ned sikkert.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Tren stemmemodellen for Google-assistenten</translation>
 <translation id="2621713457727696555">Sikret</translation>
@@ -5260,7 +5261,6 @@
 <translation id="7051943809462976355">Søker etter musen …</translation>
 <translation id="7052237160939977163">Send ytelsessporingsdata</translation>
 <translation id="7053983685419859001">Blokkér</translation>
-<translation id="705508001219706572">For å komme raskt tilbake hit, installer <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Viderekoblingen er blokkert:</translation>
 <translation id="7055451306017383754">Kunne ikke avvise delingen, fordi et program bruker denne mappen. Mappedelingen blir avvist neste gang Parallels Desktop avsluttes.</translation>
 <translation id="7056526158851679338">&amp;Inspiser enheter</translation>
@@ -7162,6 +7162,7 @@
 <translation id="9209563766569767417">Sjekker konfigurasjonen av Linux-beholderen</translation>
 <translation id="9209689095351280025">Nettsteder kan ikke bruke informasjonskapsler som sporer deg på nettet</translation>
 <translation id="9211177926627870898">Oppdatering kreves</translation>
+<translation id="9211490828691860325">Alle skrivebord</translation>
 <translation id="9214520840402538427">Beklager. Oppstarten av attributtene for installasjonstid er tidsavbrutt. Ta kontakt med brukerstøtterepresentanten din.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">«<ph name="EXTENSION_NAME" />» ble lagt til</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index f9dad404..46e225b4 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1442,6 +1442,7 @@
 <translation id="2617342710774726426">SIM କାର୍ଡ ଲକ୍‍ ହୋଇଯାଇଛି।</translation>
 <translation id="2618797463720777311">Nearby Share ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation>
 <translation id="2619761439309613843">ଦୈନିକ ରିଫ୍ରେଶ୍</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ସୁରକ୍ଷିତ ରୂପେ ଡାଉନ୍ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ।</translation>
 <translation id="2620436844016719705">ସିଷ୍ଟମ୍‌</translation>
 <translation id="262154978979441594">Google Assistant ଭଏସ୍ ମୋଡେଲକୁ ତାଲିମ ଦିଅନ୍ତୁ</translation>
 <translation id="2621713457727696555">ସୁରକ୍ଷିତ</translation>
@@ -5257,7 +5258,6 @@
 <translation id="7051943809462976355">ମାଉସ୍ ପାଇଁ ଖୋଜୁଛି...</translation>
 <translation id="7052237160939977163">କାର୍ଯ୍ୟଦକ୍ଷତା ଟ୍ରେସ୍ ଡାଟା ପଠାନ୍ତୁ</translation>
 <translation id="7053983685419859001">ଅବରୋଧ କରନ୍ତୁ</translation>
-<translation id="705508001219706572">ଏଠାକୁ ଶୀଘ୍ର ଫେରିବା ପାଇଁ, <ph name="APP_NAME" /> ଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation>
 <translation id="7055152154916055070">ରିଡାଇରେକ୍ଟକୁ ଅବରୋଧ କରାଯାଇଛି:</translation>
 <translation id="7055451306017383754">ଏକ ଆପ୍ଲିକେସନ୍ ଏହି ଫୋଲ୍ଡରକୁ ବ୍ୟବହାର କରୁଥିବା ଯୋଗୁଁ ଏହାକୁ ସେୟାର୍ କରିବା ବନ୍ଦ କରାଯାଇପାରିଲା ନାହିଁ। ପରବର୍ତ୍ତୀ ସମୟରେ Parallels Desktop ବନ୍ଦ ହେଲେ ଫୋଲ୍ଡରକୁ ସେୟାର୍ କରିବା ବନ୍ଦ ହୋଇଯିବ।</translation>
 <translation id="7056526158851679338">ଡିଭାଇସ୍‌ଗୁଡ଼ିକ &amp;ନିରୀକ୍ଷଣ କରନ୍ତୁ</translation>
@@ -7154,6 +7154,7 @@
 <translation id="9209563766569767417">Linux କଣ୍ଟେନର୍ ସେଟଅପ୍ ଯାଞ୍ଚ କରାଯାଉଛି</translation>
 <translation id="9209689095351280025">ସାଇଟଗୁଡ଼ିକ ସମଗ୍ର ୱେବରେ ଆପଣଙ୍କୁ ଟ୍ରାକ୍ କରୁଥିବା କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ</translation>
 <translation id="9211177926627870898">ଅପଡେଟ୍ କରିବା ଦରକାର</translation>
+<translation id="9211490828691860325">ସମସ୍ତ ଡେସ୍କ</translation>
 <translation id="9214520840402538427">ଓହୋ!  ଇନ୍‌ଷ୍ଟଲେସନ୍ ସମୟ ବୈଶିଷ୍ଟ୍ୟର ଇନ୍‌ଷ୍ଟାଲାଇଜେସନ୍ ସମୟ ଅବଧି ଶେଷ।  ଦୟାକରି ଆପଣଙ୍କ ସମର୍ଥକ ପ୍ରତିନିଧିଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="9214695392875603905">କପ୍‌କେକ୍‌</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ଯୋଗ କରାଗଲା</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 7d6aa01..183d0978 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">ਸਿਮ ਕਾਰਡ ਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ</translation>
 <translation id="2618797463720777311">'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ</translation>
 <translation id="2619761439309613843">ਰੋਜ਼ਾਨਾ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।</translation>
 <translation id="2620436844016719705">ਸਿਸਟਮ</translation>
 <translation id="262154978979441594">Google Assistant ਅਵਾਜ਼ੀ ਮਾਡਲ ਨੂੰ ਸਿਖਲਾਈ ਦਿਓ</translation>
 <translation id="2621713457727696555">ਸੁਰੱਖਿਅਤ</translation>
@@ -5261,7 +5262,6 @@
 <translation id="7051943809462976355">ਮਾਊਸ ਖੋਜ ਰਿਹਾ ਹੈ...</translation>
 <translation id="7052237160939977163">ਪ੍ਰਦਰਸ਼ਨ ਟ੍ਰੇਸ ਡਾਟਾ ਭੇਜੋ</translation>
 <translation id="7053983685419859001">ਬਲੌਕ ਕਰੋ</translation>
-<translation id="705508001219706572">ਤੇਜ਼ੀ ਨਾਲ ਇੱਥੇ ਵਾਪਸ ਆਉਣ ਲਈ, <ph name="APP_NAME" /> ਨੂੰ ਸਥਾਪਤ ਕਰੋ</translation>
 <translation id="7055152154916055070">ਇਸ ਰੀਡਾਇਰੈਕਟ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ:</translation>
 <translation id="7055451306017383754">ਸਾਂਝਾਕਰਨ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਕਿਉਂਕਿ ਐਪਲੀਕੇਸ਼ਨ ਇਸ ਫੋਲਡਰ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਅਗਲੀ ਵਾਰ Parallels Desktop ਬੰਦ ਹੋਣ 'ਤੇ ਫੋਲਡਰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="7056526158851679338">&amp;ਡਿਵਾਈਸਾਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index e64fc1b..853edbb 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">Karta SIM jest zablokowana</translation>
 <translation id="2618797463720777311">Konfigurowanie Udostępniania w pobliżu</translation>
 <translation id="2619761439309613843">Codziennie nowa</translation>
+<translation id="2620215283731032047">Nie można pobrać pliku <ph name="FILE_NAME" /> w bezpieczny sposób.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Naucz Asystenta Google rozpoznawania Twojego modelu głosu</translation>
 <translation id="2621713457727696555">Zabezpieczona</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">Szukam myszy...</translation>
 <translation id="7052237160939977163">Wyślij dane śledzenia wydajności</translation>
 <translation id="7053983685419859001">Blokuj</translation>
-<translation id="705508001219706572">Aby szybko tu wrócić, zainstaluj aplikację <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Zablokowano przekierowanie:</translation>
 <translation id="7055451306017383754">Nie udało się cofnąć udostępniania, ponieważ tego folderu używa aplikacja. Folder przestanie być udostępniany po zamknięciu Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Sprawdź urządzenia</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Sprawdzam konfigurację kontenera Linuksa</translation>
 <translation id="9209689095351280025">Strony nie mogą używać plików cookie śledzących, co robisz w sieci</translation>
 <translation id="9211177926627870898">Wymagana aktualizacja</translation>
+<translation id="9211490828691860325">Wszystkie biurka</translation>
 <translation id="9214520840402538427">Upłynął limit czasu inicjowania atrybutów instalacyjnych. Skontaktuj się z przedstawicielem obsługi klienta.</translation>
 <translation id="9214695392875603905">Babeczka</translation>
 <translation id="9215293857209265904">Dodano „<ph name="EXTENSION_NAME" />”</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index cbe3bf4..4ff4db3 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">O chip está bloqueado</translation>
 <translation id="2618797463720777311">Configurar o "Compartilhar por proximidade"</translation>
 <translation id="2619761439309613843">Atualização diária</translation>
+<translation id="2620215283731032047">Não foi possível fazer o download de <ph name="FILE_NAME" /> por motivo de segurança.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Treinar modelo de voz do Google Assistente</translation>
 <translation id="2621713457727696555">Protegida</translation>
@@ -5267,7 +5268,6 @@
 <translation id="7051943809462976355">Procurando mouse...</translation>
 <translation id="7052237160939977163">Enviar dados de rastreamento de desempenho</translation>
 <translation id="7053983685419859001">Bloquear</translation>
-<translation id="705508001219706572">Para acessar este conteúdo rapidamente, instale o app <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirecionamento bloqueado:</translation>
 <translation id="7055451306017383754">Não foi possível cancelar o compartilhamento porque um aplicativo está usando a pasta. O compartilhamento da pasta será cancelado na próxima vez que o Parallels Desktop for encerrado.</translation>
 <translation id="7056526158851679338">&amp;Inspecionar dispositivos</translation>
@@ -7168,6 +7168,7 @@
 <translation id="9209563766569767417">Verificando a configuração do contêiner Linux</translation>
 <translation id="9209689095351280025">Os sites não podem usar cookies que rastreiem você pela Web</translation>
 <translation id="9211177926627870898">Atualização necessária</translation>
+<translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="9214520840402538427">Ops! A inicialização dos atributos de tempo de instalação ultrapassou o tempo limite. Entre em contato com o representante de suporte.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" adicionada</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 0171aa0..f22e178 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">O cartão SIM está bloqueado</translation>
 <translation id="2618797463720777311">Configure a funcionalidade Partilhar na proximidade</translation>
 <translation id="2619761439309613843">Atualização diária</translation>
+<translation id="2620215283731032047">Não é possível transferir o ficheiro <ph name="FILE_NAME" /> em segurança.</translation>
 <translation id="2620436844016719705">Sistema</translation>
 <translation id="262154978979441594">Treinar o modelo de voz do Assistente Google</translation>
 <translation id="2621713457727696555">Protegida</translation>
@@ -5266,7 +5267,6 @@
 <translation id="7051943809462976355">A pesquisar rato...</translation>
 <translation id="7052237160939977163">Enviar dados de rastreio do desempenho</translation>
 <translation id="7053983685419859001">Bloquear</translation>
-<translation id="705508001219706572">Para voltar aqui rapidamente, instale a app <ph name="APP_NAME" />.</translation>
 <translation id="7055152154916055070">Redirecionamento bloqueado:</translation>
 <translation id="7055451306017383754">Não foi possível cancelar a partilha porque uma aplicação está a utilizar esta pasta. Será cancelada a partilha da pasta quando o Parallels Desktop for encerrado.</translation>
 <translation id="7056526158851679338">&amp;Inspecionar dispositivos</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">A verificar a configuração do contentor do Linux…</translation>
 <translation id="9209689095351280025">Os sites não podem utilizar cookies que monitorizem a sua navegação na Web.</translation>
 <translation id="9211177926627870898">Atualização necessária</translation>
+<translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="9214520840402538427">Ups! A inicialização dos atributos de tempo de instalação expirou. Contacte o seu representante de suporte.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" adicionada</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index f444cb46..95dad782 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -802,6 +802,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> este pregătit pentru a finaliza instalarea</translation>
 <translation id="1868193363684582383">„Ok Google”</translation>
 <translation id="1868553836791672080">Verificarea parolei nu este disponibilă în Chromium</translation>
+<translation id="1869433484041798909">Butonul Marcaj</translation>
 <translation id="187145082678092583">Mai puține aplicații</translation>
 <translation id="1871534214638631766">Afișează informații conexe atunci când dai clic dreapta sau apeși lung conținutul</translation>
 <translation id="1871615898038944731">Dispozitivul <ph name="DEVICE_TYPE" /> este actualizat</translation>
@@ -833,6 +834,7 @@
 <translation id="1900305421498694955">Aplicațiile din Google Play pot necesita acces deplin la sistemul de fișiere pentru a citi și a scrie fișiere pe dispozitive de stocare externe. Fișierele și dosarele create pe dispozitiv sunt vizibile oricărei persoane care folosește unitatea externă. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Select&amp;ează tot</translation>
 <translation id="1901396183631570154">Chrome nu a putut salva parolele în Contul Google. Însă le poți salva pe acest dispozitiv.</translation>
+<translation id="1903995858055162096">Nu este dispozitivul tău? Folosește <ph name="BEGIN_LINK" />modul pentru invitați<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Numele dispozitivului Chromebook</translation>
 <translation id="1906181697255754968">Site-urile accesează de obicei fișiere și dosare de pe dispozitiv pentru funcții cum ar fi salvarea automată a ceea ce ai lucrat</translation>
 <translation id="1906828677882361942">Nu permite niciunui site să acceseze porturi seriale</translation>
@@ -1450,6 +1452,7 @@
 <translation id="2617342710774726426">Cardul SIM este blocat</translation>
 <translation id="2618797463720777311">Configurează Nearby Share</translation>
 <translation id="2619761439309613843">Actualizare zilnică</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> nu se poate descărca în siguranță.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Creează un model vocal pentru Asistentul Google</translation>
 <translation id="2621713457727696555">Securizată</translation>
@@ -5264,7 +5267,6 @@
 <translation id="7051943809462976355">Se caută mouse-ul...</translation>
 <translation id="7052237160939977163">Trimiteți datele privind urmărirea performanței</translation>
 <translation id="7053983685419859001">Blochează</translation>
-<translation id="705508001219706572">Ca să revii rapid aici, instalează <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Redirecționarea a fost blocată:</translation>
 <translation id="7055451306017383754">Distribuirea nu s-a putut anula, deoarece o aplicație folosește acest dosar. Distribuirea dosarului va fi anulată la următoarea închidere a aplicației Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Inspectați dispozitivele</translation>
@@ -5437,6 +5439,7 @@
 <translation id="7251346854160851420">Imagine de fundal prestabilită</translation>
 <translation id="7253521419891527137">&amp;Aflați mai multe</translation>
 <translation id="7254951428499890870">Sigur doriți să lansați „<ph name="APP_NAME" />” în modul de diagnosticare?</translation>
+<translation id="725497546968438223">Butonul Dosar de marcaje</translation>
 <translation id="7255002516883565667">În acest moment ai un card care poate fi folosit doar pe acest dispozitiv</translation>
 <translation id="7255935316994522020">Aplicați</translation>
 <translation id="7256069762010468647">Site-ul folosește camera foto</translation>
@@ -5698,6 +5701,7 @@
 <translation id="7564847347806291057">Oprește procesul</translation>
 <translation id="7566118625369982896">Gestionează linkurile aplicației Play</translation>
 <translation id="756809126120519699">Datele Chrome au fost șterse</translation>
+<translation id="756876171895853918">Personalizează avatarul</translation>
 <translation id="7568790562536448087">Se actualizează</translation>
 <translation id="7569983096843329377">Negru</translation>
 <translation id="7571643774869182231">Nu există suficient spațiu de stocare pentru actualizare</translation>
@@ -7165,6 +7169,7 @@
 <translation id="9209563766569767417">Verificarea configurației containerului Linux este în curs</translation>
 <translation id="9209689095351280025">Site-urile nu pot folosi cookie-uri care te urmăresc pe web.</translation>
 <translation id="9211177926627870898">Actualizare necesară</translation>
+<translation id="9211490828691860325">Toate desktopurile</translation>
 <translation id="9214520840402538427">Hopa! Inițializarea atributelor necesare în momentul instalării a expirat. Contactați reprezentantul dvs. de asistență.</translation>
 <translation id="9214695392875603905">Brioșă</translation>
 <translation id="9215293857209265904">S-a adăugat „<ph name="EXTENSION_NAME" />”</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index baba655..db857f0 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">SIM-карта заблокирована</translation>
 <translation id="2618797463720777311">Настройка функции "Обмен с окружением"</translation>
 <translation id="2619761439309613843">Обновлять ежедневно</translation>
+<translation id="2620215283731032047">Невозможно скачать безопасно файл "<ph name="FILE_NAME" />".</translation>
 <translation id="2620436844016719705">Система</translation>
 <translation id="262154978979441594">Записать образец голоса для Ассистента</translation>
 <translation id="2621713457727696555">Защищена</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">Поиск мыши…</translation>
 <translation id="7052237160939977163">Отправлять данные отслеживания производительности</translation>
 <translation id="7053983685419859001">Блокировать</translation>
-<translation id="705508001219706572">Чтобы быстро возвращаться к этой странице, установите приложение "<ph name="APP_NAME" />"</translation>
 <translation id="7055152154916055070">Заблокирована попытка переадресации:</translation>
 <translation id="7055451306017383754">Папка используется приложением. Доступ к ней будет закрыт при следующем выключении Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Проверка устройств</translation>
@@ -7166,6 +7166,7 @@
 <translation id="9209563766569767417">Проверка настроек контейнера Linux</translation>
 <translation id="9209689095351280025">Сайты не могут использовать файлы cookie, которые отслеживают ваши действия в Интернете.</translation>
 <translation id="9211177926627870898">Требуется обновление</translation>
+<translation id="9211490828691860325">Все рабочие столы</translation>
 <translation id="9214520840402538427">К сожалению, срок инициализации для атрибутов времени установки истек. Обратитесь в службу поддержки.</translation>
 <translation id="9214695392875603905">Кекс</translation>
 <translation id="9215293857209265904">Добавлено расширение или приложение: <ph name="EXTENSION_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 50cc634..d2915cb 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -799,6 +799,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ඔබේ ස්ථාපනය සම්පූර්ණ කිරීමට සූදානම්</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">Chromium හි මුරපද පිරික්සුම ලබා ගත නොහැක</translation>
+<translation id="1869433484041798909">පිටුසන් බොත්තම</translation>
 <translation id="187145082678092583">යෙදුම් අඩුවෙන්</translation>
 <translation id="1871534214638631766">ඔබ අන්තර්ගතය දකුණු ක්ලික් කළ විට හෝ දිගු කාලයක් එබූ විට අදාළ තතු පෙන්වන්න</translation>
 <translation id="1871615898038944731">ඔබගේ <ph name="DEVICE_TYPE" /> යාවත්කාලීනයි</translation>
@@ -830,6 +831,7 @@
 <translation id="1900305421498694955">Google Play වෙතින් ලැබෙන යෙදුම්වලට බාහිර ආචයන උපාංග මත ගොනු කියවීමටත් ලිවීමටත් පූර්ණ ගොනු පද්ධති ප්‍රවේශය අවශ්‍ය විය හැක. උපාංගය මත සාදනු ලබන ගොනු සහ ෆෝල්ඩර බාහිර ධාවකය භාවිත කරන ඕනෑම කෙනෙකුට දෘශ්‍යමාන වෙති. <ph name="LINK_BEGIN" />තවත් දැන ගන්න<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">සියල්ල තෝරන්න</translation>
 <translation id="1901396183631570154">Chrome හට මෙම මුරපද ඔබේ Google ගිණුමට සුරැකීමට නොහැකි විය. ඔබට තවමත් ඒවා මෙම උපාංගයේ සුරැකිය හැකිය.</translation>
+<translation id="1903995858055162096">ඔබගේ උපාංගය නොවේද? <ph name="BEGIN_LINK" />ආගන්තුක ප්‍රකාරය<ph name="END_LINK" /> භාවිත කරන්න.</translation>
 <translation id="1905375423839394163">Chromebook උපාංග නාමය</translation>
 <translation id="1906181697255754968">අඩවි සාමාන්‍යයෙන් ඔබේ වැඩ ස්වයංක්‍රියව සුරැකීම වැනි විශේෂාංග සඳහා ඔබගේ උපාංගයේ ගොනු සහ ෆෝල්ඩරවලට ප්‍රවේශ වේ</translation>
 <translation id="1906828677882361942">කිසිම වෙබ් අඩවියකට අනුක්‍රමික තොටවලට ප්‍රවේශයට අවසර නොදෙන්න</translation>
@@ -1447,6 +1449,7 @@
 <translation id="2617342710774726426">SIM පත අගුළු වැටී ඇත</translation>
 <translation id="2618797463720777311">ළඟ බෙදා ගැනීම පිහිටුවන්න</translation>
 <translation id="2619761439309613843">දිනපතා නැවුම් කිරීම</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> සුරක්‍ෂිතව බාගත නොහැක.</translation>
 <translation id="2620436844016719705">පද්ධතිය</translation>
 <translation id="262154978979441594">Google සහකරු හඬ මාදිලිය පුහුණු කරන්න</translation>
 <translation id="2621713457727696555">ආරක්ෂිතයි</translation>
@@ -5260,7 +5263,6 @@
 <translation id="7051943809462976355">මුසිකය සඳහා සොයමින්...</translation>
 <translation id="7052237160939977163">ක්‍රියාකාරීත්ව අනුරේඛන දත්ත යවන්න</translation>
 <translation id="7053983685419859001">අවහිර කරන්න</translation>
-<translation id="705508001219706572">ඉක්මනින් ආපසු මෙහි පැමිණීමට, <ph name="APP_NAME" /> ස්ථාපනය කරන්න</translation>
 <translation id="7055152154916055070">හරවා යැවීම අවහිරයි:</translation>
 <translation id="7055451306017383754">යෙදුමක් මෙම ෆෝල්ඩරය භාවිත කරන බැවින් බෙදා ගැනීම ඉවත් කළ නොහැකි විය. ෆෝල්ඩරය Parallels Desktop වසන ඊළඟ අවස්ථාවේ බෙදා ගැනීම ඉවත් කරනු ඇත.</translation>
 <translation id="7056526158851679338">&amp;උපාංග පරීක්ෂා කරන්න</translation>
@@ -5433,6 +5435,7 @@
 <translation id="7251346854160851420">පෙරනිමි බිතුපත</translation>
 <translation id="7253521419891527137">&amp;වැඩිදුර හදාරන්න</translation>
 <translation id="7254951428499890870">ඔබට විනිශ්චය මාදිලියෙන්"<ph name="APP_NAME" />"දියත් කිරීමට අවශ්‍ය බව පැහැදිලිද?</translation>
+<translation id="725497546968438223">ෆෝල්ඩර බොත්තම පිටුසන් කරන්න</translation>
 <translation id="7255002516883565667">මේ දැන්, ඔබට මෙම උපාංගය මත පමණක් භාවිත කළ හැකි එක කාඩ්පතක් තිබේ</translation>
 <translation id="7255935316994522020">යොදා ගන්න</translation>
 <translation id="7256069762010468647">අඩවිය ඔබගේ කැමරාව භාවිත කරමින්</translation>
@@ -5694,6 +5697,7 @@
 <translation id="7564847347806291057">ක්‍රියාවලිය අවසන් කරන්න</translation>
 <translation id="7566118625369982896">Play යෙදුම් සබැඳි කළමනාකරණය</translation>
 <translation id="756809126120519699">Chrome දත්ත හිස් කෙරිණි</translation>
+<translation id="756876171895853918">නියුරුව අභිරුචිකරණය කරන්න</translation>
 <translation id="7568790562536448087">යාවත්කරමින්</translation>
 <translation id="7569983096843329377">කළු</translation>
 <translation id="7571643774869182231">යාවත්කාලීනය සඳහා ප්‍රමාණවත් ගබඩාවක් නොමැත</translation>
@@ -7159,6 +7163,7 @@
 <translation id="9209563766569767417">ලිනක්ස් භාජන සැකසීම පරීක්ෂා කිරීම</translation>
 <translation id="9209689095351280025">වෙබ් අඩවිවලට වෙබය අතරින් ඔබව හඹා යන කුකී භාවිත කළ නොහැක</translation>
 <translation id="9211177926627870898">යාවත්කාලීනය අවශ්‍යයි</translation>
+<translation id="9211490828691860325">සියලු වැඩතල</translation>
 <translation id="9214520840402538427">අහෝ!  ස්ථාපන-කාල අනුලකුණු ආරම්භය කල් ඉකුත්විය. කරුණාකර ඔබේ සහාය නියෝජිතයා සබඳ කරගන්න.</translation>
 <translation id="9214695392875603905">කප් කේක්</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" එක්කරන ලදී</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 5e4ea2e..911d2f8 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -535,7 +535,7 @@
 <translation id="1585717515139318619">Iný program v počítači pridal motív, ktorý môže zmeniť spôsob fungovania prehliadača Chrome.
 
 <ph name="EXTENSION_NAME" /></translation>
-<translation id="1587129667417059148">Týmto vymažete všetky dáta a súbory cookie uložené zdrojom <ph name="ORIGIN_NAME" />.</translation>
+<translation id="1587129667417059148">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="ORIGIN_NAME" /></translation>
 <translation id="1587275751631642843">&amp;Konzola jazyka JavaScript</translation>
 <translation id="1587907146729660231">Dotknite sa prstom vypínača</translation>
 <translation id="1588438908519853928">Normálny</translation>
@@ -642,7 +642,7 @@
 <translation id="1689945336726856614">Kopírovať &amp;webovú adresu</translation>
 <translation id="1690248886740053041">Nedá sa pripojiť k mobilnej sieti. Technickú podporu vám poskytne operátor.</translation>
 <translation id="1692115862433274081">Použiť iný účet</translation>
-<translation id="1692118695553449118">Synchronizácia je zapnutá.</translation>
+<translation id="1692118695553449118">Synchronizácia je zapnutá</translation>
 <translation id="1692210323591458290">Tmavofialová</translation>
 <translation id="169279809881363536">Neboli vyhľadané žiadne profily. Ak chcete nastaviť novú sieť, naskenujte QR kód fotoaparátom zariadenia alebo zadajte aktivačný kód poskytnutý vaším operátorom.</translation>
 <translation id="1697150536837697295">Umenie</translation>
@@ -659,7 +659,7 @@
 <translation id="1709106626015023981"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (natívne)</translation>
 <translation id="1709217939274742847">Vyberte tiket, ktorý sa má použiť na overenie. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="1709972045049031556">Nedá sa zdieľať</translation>
-<translation id="1711935594505774770">Týmto vymažete všetky dáta a súbory cookie uložené doménou <ph name="SITE_GROUP_NAME" />, všetkými jej podradenými webmi a jej nainštalovanými aplikáciami</translation>
+<translation id="1711935594505774770">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="SITE_GROUP_NAME" />, jeho podradenými webmi a jeho nainštalovanými aplikáciami</translation>
 <translation id="1714644264617423774">Povoliť funkcie dostupnosti zjednodušujúce používanie zariadenia. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="1717218214683051432">Senzory pohybu</translation>
 <translation id="1718835860248848330">Posledná hodina</translation>
@@ -803,6 +803,7 @@
 <translation id="1867780286110144690">Aplikácia <ph name="PRODUCT_NAME" /> je pripravená dokončiť inštaláciu</translation>
 <translation id="1868193363684582383">„Ok Google“</translation>
 <translation id="1868553836791672080">Kontrola hesla nie je v prehliadači Chromium k dispozícii</translation>
+<translation id="1869433484041798909">Tlačidlo Záložka</translation>
 <translation id="187145082678092583">Menej aplikácií</translation>
 <translation id="1871534214638631766">Zobrazovať súvisiace informácie, keď na obsah kliknete pravým tlačidlom alebo ho dlho stlačíte</translation>
 <translation id="1871615898038944731">Vaše zariadenie <ph name="DEVICE_TYPE" /> je aktuálne</translation>
@@ -834,6 +835,7 @@
 <translation id="1900305421498694955">Aplikácie na Google Play môžu vyžadovať úplný prístup k systému súborov a povolenie zapisovať súbory v externých úložiskách. Súbory a priečinky vytvorené v zariadení sú viditeľné pre všetkých používateľov príslušného externého disku. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Vybrať &amp;všetko</translation>
 <translation id="1901396183631570154">Chromu sa nepodarilo uložiť tieto heslá vo vašom účte Google. Môžete si ich stále uložiť v tomto zariadení.</translation>
+<translation id="1903995858055162096">Zariadenie nie je vaše? Použite <ph name="BEGIN_LINK" />hosťovský režim<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Názov zariadenia Chromebook</translation>
 <translation id="1906181697255754968">Weby zvyčajne získavajú prístup k súborom a priečinkom vo vašom zariadení, aby mohli poskytovať funkcie, ako je automatické ukladanie vašej práce</translation>
 <translation id="1906828677882361942">Zakázať všetkým webom používať sériové porty</translation>
@@ -1450,6 +1452,7 @@
 <translation id="2617342710774726426">SIM karta je uzamknutá</translation>
 <translation id="2618797463720777311">Nastavenie zdieľania nablízku</translation>
 <translation id="2619761439309613843">Obnovovať denne</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> nie je možné bezpečne stiahnuť.</translation>
 <translation id="2620436844016719705">Systém</translation>
 <translation id="262154978979441594">Natrénovať hlasový model Asistenta Google</translation>
 <translation id="2621713457727696555">Zabezpečená</translation>
@@ -3598,7 +3601,7 @@
 <translation id="5125751979347152379">Neplatná webová adresa.</translation>
 <translation id="5126611267288187364">Zobraziť zmeny</translation>
 <translation id="5127620150973591153">Bezpečný spojovací kód: <ph name="TOKEN" /></translation>
-<translation id="5127805178023152808">Synchronizácia je vypnutá.</translation>
+<translation id="5127805178023152808">Synchronizácia je vypnutá</translation>
 <translation id="5127881134400491887">Spravovať sieťové pripojenia</translation>
 <translation id="512903556749061217">pripojené</translation>
 <translation id="5131591206283983824">Presun klepnutím na touchpade</translation>
@@ -4119,7 +4122,7 @@
 <translation id="572155275267014074">Nastavenia Androidu</translation>
 <translation id="5722086096420375088">Zelená a biela</translation>
 <translation id="5722930212736070253">Aj, chyba! Program Zip Archiver narazil na chybu.</translation>
-<translation id="5723034813131030312">Blokovať weby, aby sa nemohli pripájať k sériovým zariadeniam</translation>
+<translation id="5723034813131030312">Brániť webom pripájať sa k sériovým zariadeniam</translation>
 <translation id="572328651809341494">Nedávne karty</translation>
 <translation id="5723508132121499792">Na pozadí nie sú spustené žiadne aplikácie</translation>
 <translation id="5723967018671998714">Súbory cookie tretích strán sú v anonymnom režime blokované</translation>
@@ -4471,7 +4474,7 @@
 <translation id="6122600716821516697">Chcete zdieľať obsah s týmto zariadením?</translation>
 <translation id="6122831415929794347">Chcete vypnúť Bezpečné prehliadanie?</translation>
 <translation id="6122875415561139701">Operácia zápisu je na zariadení <ph name="DEVICE_NAME" /> zakázaná.</translation>
-<translation id="6124213551517593835">Týmto vymažete všetky dáta a súbory cookie uložené doménou <ph name="SITE_GROUP_NAME" /> a všetkými jej podradenými webmi.</translation>
+<translation id="6124213551517593835">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="SITE_GROUP_NAME" /> a jeho podradenými webmi</translation>
 <translation id="6124650939968185064">Od tohto rozšírenia závisia nasledujúce rozšírenia:</translation>
 <translation id="6124698108608891449">Tento web potrebuje ďalšie povolenia.</translation>
 <translation id="6125479973208104919">Do tohto zariadenia <ph name="DEVICE_TYPE" /> si žiaľ budete musieť znova pridať účet.</translation>
@@ -5093,7 +5096,7 @@
 <translation id="6857699260879628349">Získať informácie o konfigurácii</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6860097299815761905">Nastavenia servera proxy...</translation>
-<translation id="686022878923628150">Blokovať weby, aby sa nemohli pripájať k zariadeniam MIDI</translation>
+<translation id="686022878923628150">Brániť webom pripájať sa k zariadeniam MIDI</translation>
 <translation id="6860427144121307915">Otvoriť na karte</translation>
 <translation id="686366188661646310">Chcete heslo odstrániť?</translation>
 <translation id="6865313869410766144">Dáta automatického dopĺňania formulárov</translation>
@@ -5131,7 +5134,7 @@
 <translation id="6909422577741440844">Chcete dostávať obsah z tohto zariadenia?</translation>
 <translation id="6910211073230771657">Odstránené</translation>
 <translation id="691024665142758461">Stiahnuť viacero súborov</translation>
-<translation id="691106080621596509">Týmto vymažete všetky dáta a súbory cookie uložené doménou <ph name="SITE_GROUP_NAME" />, všetkými jej podradenými webmi a jej nainštalovanou aplikáciou</translation>
+<translation id="691106080621596509">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="SITE_GROUP_NAME" />, jeho podradenými webmi a jeho nainštalovanou aplikáciou</translation>
 <translation id="6911324888870229398">Sieťové pripojenie bolo prerušené. Skontrolujte pripojenie alebo skúste inú sieť Wi-Fi.</translation>
 <translation id="6911734910326569517">Množstvo využívanej pamäte</translation>
 <translation id="6912007319859991306">Kód PIN mobilnej SIM karty</translation>
@@ -5264,7 +5267,6 @@
 <translation id="7051943809462976355">Prebieha hľadanie myši...</translation>
 <translation id="7052237160939977163">Odosielať údaje sledovania výkonnosti</translation>
 <translation id="7053983685419859001">Blokovať</translation>
-<translation id="705508001219706572">Ak sa sem chcete rýchlo vrátiť, nainštalujte si aplikáciu <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Presmerovanie bolo zablokované:</translation>
 <translation id="7055451306017383754">Zdieľanie sa nepodarilo zrušiť, pretože tento priečinok používa nejaká aplikácia. Jeho zdieľanie bude zrušené po ďalšom vypnutí aplikácie Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Preskúmať zariadenia</translation>
@@ -5437,6 +5439,7 @@
 <translation id="7251346854160851420">Predvolená tapeta</translation>
 <translation id="7253521419891527137">Ďalšie &amp;informácie</translation>
 <translation id="7254951428499890870">Naozaj chcete aplikáciu <ph name="APP_NAME" /> spustiť v diagnostickom režime?</translation>
+<translation id="725497546968438223">Tlačidlo Priečinok so záložkami</translation>
 <translation id="7255002516883565667">Momentálne máte jednu kartu, ktorú je možné použiť iba v tomto zariadení</translation>
 <translation id="7255935316994522020">Použiť</translation>
 <translation id="7256069762010468647">Web používa vašu kameru</translation>
@@ -5506,7 +5509,7 @@
 <translation id="7343372807593926528">Opíšte problém a až potom odošlite spätnú väzbu.</translation>
 <translation id="7345706641791090287">Potvrdenie hesla</translation>
 <translation id="7346909386216857016">Dobre</translation>
-<translation id="7347452120014970266">Týmto vymažete všetky dáta a súbory cookie uložené zdrojom <ph name="ORIGIN_NAME" /> a jeho nainštalovanými aplikáciami.</translation>
+<translation id="7347452120014970266">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="ORIGIN_NAME" /> a jeho nainštalovanými aplikáciami</translation>
 <translation id="7347751611463936647">Ak chcete použiť toto rozšírenie, zadajte text „<ph name="EXTENSION_KEYWORD" />“, stlačte kláves Tab a začnite písať svoj príkaz alebo vyhľadávaný výraz.</translation>
 <translation id="7347943691222276892">Kliknutím odídete zo stránky <ph name="SUBPAGE_TITLE" />.</translation>
 <translation id="7348093485538360975">Klávesnica na obrazovke</translation>
@@ -5698,6 +5701,7 @@
 <translation id="7564847347806291057">Ukončiť proces</translation>
 <translation id="7566118625369982896">Správa skratiek aplikácie Play</translation>
 <translation id="756809126120519699">Údaje Chromu boli vymazané</translation>
+<translation id="756876171895853918">Prispôsobiť avatar</translation>
 <translation id="7568790562536448087">Prebieha aktualizácia</translation>
 <translation id="7569983096843329377">Čierna</translation>
 <translation id="7571643774869182231">V úložisku nie je dostatok miesta na aktualizáciu</translation>
@@ -5797,7 +5801,7 @@
 <translation id="7678280409648629969">Po ukončení režimu inkognito sa všetky prihlasovacie údaje uložia v Chrome. Umožní vám to neskôr opäť používať Touch ID na tomto webe.</translation>
 <translation id="7680416688940118410">Kalibrácia dotykovej obrazovky</translation>
 <translation id="7681095912841365527">Web môže používať Bluetooth</translation>
-<translation id="7682634383739326341">Blokovať weby, aby sa nemohli pripájať k zariadeniam USB</translation>
+<translation id="7682634383739326341">Brániť webom pripájať sa k zariadeniam USB</translation>
 <translation id="7683373461016844951">Ak chcete pokračovať, kliknite na OK a potom kliknutím na možnosť Pridať osobu vytvorte nový profil pre svoju e-mailovú adresu v doméne <ph name="DOMAIN" />.</translation>
 <translation id="7683593009096723900">{COUNT,plural, =0{Otvoriť všetky v okne inkognito}=1{Otvoriť v okne inkognito}few{Otvoriť všetky ({COUNT}) v okne inkognito}many{Otvoriť všetky ({COUNT}) v okne inkognito}other{Otvoriť všetky ({COUNT}) v okne inkognito}}</translation>
 <translation id="7684212569183643648">Nainštalované vaším správcom</translation>
@@ -7155,7 +7159,7 @@
 <translation id="9188732951356337132">Odosielať údaje o využití a diagnostiky. Toto zariadenie momentálne automaticky odosiela Googlu diagnostiky a údaje o používaní zariadenia a aplikácií. Nebudú slúžiť na zistenie totožnosti vášho dieťaťa. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie vylepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom Androidu. Ak pre dieťa aktivujete nastavenie dodatočnej aktivity na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google. <ph name="BEGIN_LINK2" />Ďalšie informácie<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">Používanie telefónu s Androidom ako bezpečnostného kľúča</translation>
 <translation id="920045321358709304">Hľadať vyhľadávačom <ph name="SEARCH_ENGINE" /></translation>
-<translation id="9201023452444595544">Budú vymazané všetky offline údaje</translation>
+<translation id="9201023452444595544">Všetky offline dáta budú vymazané</translation>
 <translation id="9201220332032049474">Možnosti zámky obrazovky</translation>
 <translation id="9201842707396338580">Vyskytol sa problém. Kontaktujte vlastníka či správcu zariadenia. Kód chyby: <ph name="ERROR_CODE" />.</translation>
 <translation id="9203398526606335860">&amp;Profilovanie povolené</translation>
@@ -7165,6 +7169,7 @@
 <translation id="9209563766569767417">Kontroluje sa nastavenie kontajnera Linux</translation>
 <translation id="9209689095351280025">Weby nemôžu používať súbory cookie, ktoré vás sledujú na internete</translation>
 <translation id="9211177926627870898">Vyžaduje sa aktualizácia</translation>
+<translation id="9211490828691860325">Všetky plochy</translation>
 <translation id="9214520840402538427">Ojoj! Časový limit pre inicializáciu atribútov času inštalácie uplynul. Kontaktujte zástupcu podpory.</translation>
 <translation id="9214695392875603905">Koláčik</translation>
 <translation id="9215293857209265904">Položka „<ph name="EXTENSION_NAME" />“ bola pridaná</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index c55a07f..37738d7 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1454,6 +1454,7 @@
 <translation id="2617342710774726426">Kartica SIM je zaklenjena</translation>
 <translation id="2618797463720777311">Nastavitev funkcije Deljenje v bližini</translation>
 <translation id="2619761439309613843">Dnevno osveževanje</translation>
+<translation id="2620215283731032047">Datoteke <ph name="FILE_NAME" /> ni mogoče varno prenesti.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Usposabljanje glasovnega modela za Pomočnika Google</translation>
 <translation id="2621713457727696555">Varno</translation>
@@ -5270,7 +5271,6 @@
 <translation id="7051943809462976355">Iskanje miške ...</translation>
 <translation id="7052237160939977163">Pošlji podatke za sledenje učinkovitosti delovanja</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
-<translation id="705508001219706572">Če se želite hitro vrniti sem, namestite aplikacijo <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Preusmeritev je preprečena:</translation>
 <translation id="7055451306017383754">Skupne rabe mape ni bilo mogoče preklicati, ker jo uporablja določena aplikacija. Skupna raba mape bo preklicana ob naslednji zaustavitvi programa Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Pregled naprav</translation>
@@ -7175,6 +7175,7 @@
 <translation id="9209563766569767417">Preverjanje nastavitve vsebnika za Linux</translation>
 <translation id="9209689095351280025">Spletna mesta vam ne morejo slediti po spletu na podlagi piškotkov</translation>
 <translation id="9211177926627870898">Potrebna je posodobitev</translation>
+<translation id="9211490828691860325">Vsa namizja</translation>
 <translation id="9214520840402538427">Ojoj! Potekla je časovna omejitev inicializacije atributov časa namestitve. Obrnite se na predstavnika podpore.</translation>
 <translation id="9214695392875603905">Tortica</translation>
 <translation id="9215293857209265904">Razširitev »<ph name="EXTENSION_NAME" />« je dodana</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index b7ea844..bd67afa 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -798,6 +798,7 @@
 <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> është gati për të përfunduar instalimin tënd</translation>
 <translation id="1868193363684582383">"Ok Google"</translation>
 <translation id="1868553836791672080">Kontrolli i fjalëkalimit nuk ofrohet në Chromium</translation>
+<translation id="1869433484041798909">Butoni i faqeshënuesit</translation>
 <translation id="187145082678092583">Më pak aplikacione</translation>
 <translation id="1871534214638631766">Shfaq informacionet e lidhura kur klikon me butonin djathtas ose shtyp gjatë mbi përmbajtje</translation>
 <translation id="1871615898038944731">Pajisja jote <ph name="DEVICE_TYPE" /> është e përditësuar</translation>
@@ -829,6 +830,7 @@
 <translation id="1900305421498694955">Aplikacionet nga Google Play mund të kërkojnë qasje të plotë të sistemit të skedarëve për të lexuar dhe për të shkruar te skedarët në pajisjet e jashtme të hapësirës ruajtëse. Skedarët dhe dosjet e krijuara në pajisje janë të dukshme për këdo që përdor diskun e jashtëm. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Zgjidhi &amp;të gjitha</translation>
 <translation id="1901396183631570154">Chrome nuk mund t'i ruante këto fjalëkalime në "Llogarinë tënde të Google". Mund t'i ruash ato ende në këtë pajisje.</translation>
+<translation id="1903995858055162096">Nuk është pajisja jote? Përdor <ph name="BEGIN_LINK" />Modalitetin "vizitor"<ph name="END_LINK" />.</translation>
 <translation id="1905375423839394163">Emri i pajisjes Chromebook</translation>
 <translation id="1906181697255754968">Sajtet qasen zakonisht te skedarët dhe dosjet në pajisjen tënde për veçoritë si ruajtja automatike e punës</translation>
 <translation id="1906828677882361942">Mos lejo asnjë sajt të ketë qasje në portat seriale</translation>
@@ -1446,6 +1448,7 @@
 <translation id="2617342710774726426">Karta SIM është e kyçur</translation>
 <translation id="2618797463720777311">Konfiguro "Ndarjen në afërsi"</translation>
 <translation id="2619761439309613843">Rifreskimi i përditshëm</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> nuk mund të shkarkohet në mënyrë të sigurt.</translation>
 <translation id="2620436844016719705">Sistemi</translation>
 <translation id="262154978979441594">Trajno modelin e zërit të "Asistentit të Google"</translation>
 <translation id="2621713457727696555">I siguruar</translation>
@@ -5259,7 +5262,6 @@
 <translation id="7051943809462976355">Po kërkon për miun...</translation>
 <translation id="7052237160939977163">Dërgo të dhënat e gjurmimit të performancës</translation>
 <translation id="7053983685419859001">Bllokoje</translation>
-<translation id="705508001219706572">Për t'u kthyer shpejt këtu, instalo <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Ridrejtimi u bllokua:</translation>
 <translation id="7055451306017383754">Ndarja nuk mund të anulohej sepse kjo dosje po përdoret nga një aplikacion. Ndarja e dosjes do të anulohet kur Parallels Desktop të ndalojë punën më pas.</translation>
 <translation id="7056526158851679338">&amp;Inspekto pajisjet</translation>
@@ -5432,6 +5434,7 @@
 <translation id="7251346854160851420">Imazhi i parazgjedhur i sfondit</translation>
 <translation id="7253521419891527137">&amp;Mëso më shumë</translation>
 <translation id="7254951428499890870">Je i sigurt që dëshiron ta nisësh "<ph name="APP_NAME" />" në modalitetin "diagnostikues"?</translation>
+<translation id="725497546968438223">Butoni i dosjes së faqeshënuesve</translation>
 <translation id="7255002516883565667">Në këtë moment, ke një kartë që mund të përdoret vetëm në këtë pajisje</translation>
 <translation id="7255935316994522020">Zbato</translation>
 <translation id="7256069762010468647">Sajti po përdor kamerën tënde</translation>
@@ -5693,6 +5696,7 @@
 <translation id="7564847347806291057">Përfundo procesin</translation>
 <translation id="7566118625369982896">Menaxho lidhjet për aplikacionet në Play</translation>
 <translation id="756809126120519699">Të dhënat e Chrome u pastruan</translation>
+<translation id="756876171895853918">Personalizo simbolin</translation>
 <translation id="7568790562536448087">Po përditësohet</translation>
 <translation id="7569983096843329377">E zezë</translation>
 <translation id="7571643774869182231">Nuk ka hapësirë ruajtëse të mjaftueshme për përditësimin</translation>
@@ -7157,6 +7161,7 @@
 <translation id="9209563766569767417">Po kontrollon konfigurimin e kontejnerit të Linux</translation>
 <translation id="9209689095351280025">Sajtet nuk mund të përdorin kuki që të monitorojnë nëpër ueb</translation>
 <translation id="9211177926627870898">Kërkohet përditësimi</translation>
+<translation id="9211490828691860325">Të gjitha tavolinat e punës</translation>
 <translation id="9214520840402538427">Mos! Nisjes së atributeve të kohës së instalimit i ka përfunduar afati. Kontakto me përfaqësuesin e mbështetjes.</translation>
 <translation id="9214695392875603905">Kek në kupë</translation>
 <translation id="9215293857209265904">U shtua "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index d2aeb63f..28c4b54 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">SIM kartica je zaključana</translation>
 <translation id="2618797463720777311">Podesite Deljenje u blizini</translation>
 <translation id="2619761439309613843">Dnevno osvežavanje</translation>
+<translation id="2620215283731032047">Bezbedno preuzimanje datoteke <ph name="FILE_NAME" /> nije uspelo.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Obučavajte glasovni model Google pomoćnika</translation>
 <translation id="2621713457727696555">Zaštićeno</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Traži se miš...</translation>
 <translation id="7052237160939977163">Šalji podatke o praćenju učinka</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
-<translation id="705508001219706572">Da biste se ovde brzo vraćali, instalirajte aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Blokirano je preusmeravanje:</translation>
 <translation id="7055451306017383754">Opozivanje deljenja nije uspelo jer neka aplikacija koristi ovaj folder. Deljenje foldera će biti opozvano kada se Parallels Desktop sledeći put zatvori.</translation>
 <translation id="7056526158851679338">&amp;Ispitaj uređaje</translation>
@@ -7169,6 +7169,7 @@
 <translation id="9209563766569767417">Proverava se podešavanje Linux kontejnera</translation>
 <translation id="9209689095351280025">Sajtovi ne mogu da koriste kolačiće koji vas prate na vebu</translation>
 <translation id="9211177926627870898">Ažuriranje je obavezno</translation>
+<translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9214520840402538427">Ups! Vreme pokretanja atributa za vreme instalacije je isteklo. Kontaktirajte predstavnika podrške.</translation>
 <translation id="9214695392875603905">Mafin</translation>
 <translation id="9215293857209265904">Dodat je „<ph name="EXTENSION_NAME" />“</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 3d208d8..ab33619 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">SIM картица је закључана</translation>
 <translation id="2618797463720777311">Подесите Дељење у близини</translation>
 <translation id="2619761439309613843">Дневно освежавање</translation>
+<translation id="2620215283731032047">Безбедно преузимање датотеке <ph name="FILE_NAME" /> није успело.</translation>
 <translation id="2620436844016719705">Систем</translation>
 <translation id="262154978979441594">Обучавајте гласовни модел Google помоћника</translation>
 <translation id="2621713457727696555">Заштићено</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Тражи се миш...</translation>
 <translation id="7052237160939977163">Шаљи податке о праћењу учинка</translation>
 <translation id="7053983685419859001">Блокирај</translation>
-<translation id="705508001219706572">Да бисте се овде брзо враћали, инсталирајте апликацију <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Блокирано је преусмеравање:</translation>
 <translation id="7055451306017383754">Опозивање дељења није успело јер нека апликација користи овај фолдер. Дељење фолдера ће бити опозвано када се Parallels Desktop следећи пут затвори.</translation>
 <translation id="7056526158851679338">&amp;Испитај уређаје</translation>
@@ -7169,6 +7169,7 @@
 <translation id="9209563766569767417">Проверава се подешавање Linux контејнера</translation>
 <translation id="9209689095351280025">Сајтови не могу да користе колачиће који вас прате на вебу</translation>
 <translation id="9211177926627870898">Ажурирање је обавезно</translation>
+<translation id="9211490828691860325">Све радне површине</translation>
 <translation id="9214520840402538427">Упс! Време покретања атрибута за време инсталације је истекло. Контактирајте представника подршке.</translation>
 <translation id="9214695392875603905">Мафин</translation>
 <translation id="9215293857209265904">Додат је „<ph name="EXTENSION_NAME" />“</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 06b3da3..19679e90 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM-kortet är låst</translation>
 <translation id="2618797463720777311">Konfigurera Närdelning</translation>
 <translation id="2619761439309613843">Daglig uppdatering</translation>
+<translation id="2620215283731032047">Det går inte att ladda ned <ph name="FILE_NAME" /> på ett säkert sätt.</translation>
 <translation id="2620436844016719705">System</translation>
 <translation id="262154978979441594">Träna Google-assistentens röstmodell</translation>
 <translation id="2621713457727696555">Skyddat</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Söker efter mus …</translation>
 <translation id="7052237160939977163">Skicka data från resultatspårning</translation>
 <translation id="7053983685419859001">Blockera</translation>
-<translation id="705508001219706572">Installera <ph name="APP_NAME" /> så att du kan komma tillbaka hit snabbt</translation>
 <translation id="7055152154916055070">Omdirigeringen blockerades:</translation>
 <translation id="7055451306017383754">Det gick inte att sluta dela eftersom ett program använder den här mappen. Mappen slutar delas nästa gång Parallels Desktop stängs av.</translation>
 <translation id="7056526158851679338">&amp;Inspektera enheter</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Linux-behållarens konfiguration kontrolleras</translation>
 <translation id="9209689095351280025">Webbplatser kan inte använda cookies som spårar dig på webben</translation>
 <translation id="9211177926627870898">Uppdatering krävs</translation>
+<translation id="9211490828691860325">Alla skrivbord</translation>
 <translation id="9214520840402538427">Hoppsan! Initieringen av attributen för installationstiden har gått ut. Kontakta din representant för kundsupport.</translation>
 <translation id="9214695392875603905">Muffin</translation>
 <translation id="9215293857209265904"><ph name="EXTENSION_NAME" /> har lagts till</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 4d8cb0e..64d48b3 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">SIM kadi imefungwa</translation>
 <translation id="2618797463720777311">Weka mipangilio ya kipengele cha Uhamishaji wa Karibu</translation>
 <translation id="2619761439309613843">Onyesha Upya Kila Siku</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> haiwezi kupakuliwa kwa usalama.</translation>
 <translation id="2620436844016719705">Mfumo</translation>
 <translation id="262154978979441594">Ifunze programu ya Mratibu wa Google muundo wa sauti</translation>
 <translation id="2621713457727696555">Unalindwa</translation>
@@ -5260,7 +5261,6 @@
 <translation id="7051943809462976355">Inatafuta kipanya...</translation>
 <translation id="7052237160939977163">Tuma data ya ufuatiliaji wa utendaji</translation>
 <translation id="7053983685419859001">Zuia</translation>
-<translation id="705508001219706572">Ili uweze kurudi hapa kwa haraka, sakinisha <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Imezuiwa kuelekeza kwingine:</translation>
 <translation id="7055451306017383754">Imeshindwa kughairi kushiriki kwa sababu kuna programu inayotumia folda hii. Itaghairi kushiriki folda wakati programu ya Parallels Desktop itafungwa tena.</translation>
 <translation id="7056526158851679338">Na Ukague Vifaa</translation>
@@ -7164,6 +7164,7 @@
 <translation id="9209563766569767417">Inakagua mipangilio ya metadata ya Linux</translation>
 <translation id="9209689095351280025">Tovuti haziwezi kutumia vidakuzi vinavyokufuatilia kwenye wavuti</translation>
 <translation id="9211177926627870898">Sasisho linahitajika</translation>
+<translation id="9211490828691860325">Maeneokazi yote</translation>
 <translation id="9214520840402538427">Lo! Uanzishaji wa muda wa usakinishaji sifa umechina. Tafadhali wasiliana na mwakilishi wako wa kutoa msaada.</translation>
 <translation id="9214695392875603905">Keki dogo</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" limeongezwa</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index c6bc9bb..510e766 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">சிம் கார்டு பூட்டப்பட்டுள்ளது</translation>
 <translation id="2618797463720777311">‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சத்தை அமைத்திடுங்கள்</translation>
 <translation id="2619761439309613843">தினசரிப் புதுப்பிப்பு</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> என்ற கோப்பைப் பாதுகாப்பாகப் பதிவிறக்க முடியாது.</translation>
 <translation id="2620436844016719705">அமைப்பு</translation>
 <translation id="262154978979441594">Google Assistant குரல் பதிவிற்குப் பயிற்சி அளி</translation>
 <translation id="2621713457727696555">பாதுகாக்கப்பட்ட வைஃபை நெட்வொர்க்</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">மவுஸைத் தேடுகிறது...</translation>
 <translation id="7052237160939977163">செயல்திறன் தடமறிதல் தரவை அனுப்பு</translation>
 <translation id="7053983685419859001">தடு</translation>
-<translation id="705508001219706572">இந்தப் பக்கத்தை விரைவாக அணுக, <ph name="APP_NAME" /> ஆப்ஸை நிறுவுங்கள்</translation>
 <translation id="7055152154916055070">திசைதிருப்புதல் தடுக்கப்பட்டது:</translation>
 <translation id="7055451306017383754">ஓர் ஆப்ஸ் இந்தக் கோப்புறையைப் பயன்படுத்திக் கொண்டிருப்பதால் பகிர்வை நீக்க முடியவில்லை. அடுத்த முறை Parallels Desktop ஷட் டவுன் செய்யப்படும் போது இந்தக் கோப்புறை பகிர்வு நீக்கப்படும்.</translation>
 <translation id="7056526158851679338">&amp;சாதனங்களை ஆய்வுசெய்</translation>
@@ -7164,6 +7164,7 @@
 <translation id="9209563766569767417">Linux கண்டெய்னர் அமைவைச் சரிபார்க்கிறது</translation>
 <translation id="9209689095351280025">உங்கள் இணைய நடவடிக்கைகளைக் கண்காணிக்கும் குக்கீகளைத் தளங்களால் பயன்படுத்த முடியாது</translation>
 <translation id="9211177926627870898">புதுப்பிப்பு தேவை</translation>
+<translation id="9211490828691860325">அனைத்து டெஸ்குகளும்</translation>
 <translation id="9214520840402538427">அச்சச்சோ! நிறுவல் நேர பண்புக்கூறுகளின் தொடக்க நேரம் முடிந்தது. உங்கள் ஆதரவு பிரதிநிதியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="9214695392875603905">கப்கேக்</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" சேர்க்கப்பட்டது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 15047066..17e75ec 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1451,6 +1451,7 @@
 <translation id="2617342710774726426">SIM కార్డ్ లాక్ అయింది</translation>
 <translation id="2618797463720777311">సమీప షేరింగ్‌ను సెటప్ చేయండి</translation>
 <translation id="2619761439309613843">రోజూ రిఫ్రెష్ అవుతుంది</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" />ను సురక్షితంగా డౌన్‌లోడ్ చేయడం సాధ్యం కాదు.</translation>
 <translation id="2620436844016719705">సిస్టమ్</translation>
 <translation id="262154978979441594">Google Assistant వాయిస్ మోడల్‌కు శిక్షణనివ్వండి</translation>
 <translation id="2621713457727696555">సురక్షితమైంది</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">మౌస్ కోసం వెతుకుతోంది...</translation>
 <translation id="7052237160939977163">పనితీరు గుర్తింపు డేటాను పంపు</translation>
 <translation id="7053983685419859001">నిరోధించు</translation>
-<translation id="705508001219706572">ఇక్కడికి త్వరగా తిరిగి రావడానికి, <ph name="APP_NAME" />ను ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="7055152154916055070">మళ్లింపు బ్లాక్ చేయబడింది:</translation>
 <translation id="7055451306017383754">ఒక యాప్ ఈ ఫోల్డర్‌ను ఉపయోగిస్తుంది కాబట్టి షేరింగ్‌ను తీసివేయడం సాధ్యపడలేదు. Parallels Desktop మళ్లీ షట్ డౌన్ అయినప్పుడు ఫోల్డర్ షేరింగ్ తీసివేయబడుతుంది.</translation>
 <translation id="7056526158851679338">&amp;పరికరాలను పర్యవేక్షించు</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Linux కంటెయినర్ సెటప్‌ను తనిఖీ చేస్తోంది</translation>
 <translation id="9209689095351280025">వెబ్ అంతటా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే కుక్కీలను సైట్‌లు ఉపయోగించడం సాధ్యం కాదు</translation>
 <translation id="9211177926627870898">అప్‌డేట్ అవసరం</translation>
+<translation id="9211490828691860325">అన్ని డెస్క్‌లు</translation>
 <translation id="9214520840402538427">అయ్యో!  ఇన‌స్ట‌లేష‌న్-సమయ లక్షణాల ప్రారంభ సమయం ముగిసింది.  దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation>
 <translation id="9214695392875603905">కప్ కేక్</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" జోడించబడింది</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index c70d6fb..15c427a 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">ซิมการ์ดถูกล็อก</translation>
 <translation id="2618797463720777311">ตั้งค่าการแชร์ใกล้เคียง</translation>
 <translation id="2619761439309613843">รีเฟรชทุกวัน</translation>
+<translation id="2620215283731032047">ดาวน์โหลด <ph name="FILE_NAME" /> อย่างปลอดภัยไม่ได้</translation>
 <translation id="2620436844016719705">ระบบ</translation>
 <translation id="262154978979441594">ฝึกรูปแบบเสียงของ Google Assistant</translation>
 <translation id="2621713457727696555">ปลอดภัย</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">กำลังค้นหาเมาส์...</translation>
 <translation id="7052237160939977163">ส่งข้อมูลการติดตามผลการปฏิบัติงาน</translation>
 <translation id="7053983685419859001">บล็อก</translation>
-<translation id="705508001219706572">หากต้องการกลับมาที่นี่อย่างรวดเร็ว ให้ติดตั้ง <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">การเปลี่ยนเส้นทางถูกบล็อก</translation>
 <translation id="7055451306017383754">เลิกแชร์ไม่ได้เนื่องจากมีแอปพลิเคชันใช้โฟลเดอร์นี้อยู่ โฟลเดอร์นี้จะเลิกแชร์เมื่อมีการปิด Parallels Desktop ครั้งต่อไป</translation>
 <translation id="7056526158851679338">&amp;ตรวจสอบอุปกรณ์</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">กำลังตรวจสอบการตั้งค่าคอนเทนเนอร์ Linux</translation>
 <translation id="9209689095351280025">เว็บไซต์ต่างๆ จะใช้คุกกี้ที่ติดตามคุณในอินเทอร์เน็ตไม่ได้</translation>
 <translation id="9211177926627870898">ต้องอัปเดต</translation>
+<translation id="9211490828691860325">เดสก์ทั้งหมด</translation>
 <translation id="9214520840402538427">อ๊ะ! การเริ่มแอตทริบิวต์เวลาการติดตั้งได้หมดเวลาแล้ว โปรดติดต่อตัวแทนการสนับสนุึนของคุณ</translation>
 <translation id="9214695392875603905">คัปเค้ก</translation>
 <translation id="9215293857209265904">เพิ่ม "<ph name="EXTENSION_NAME" />" แล้ว</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 301c206d..277f7d5 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -461,7 +461,7 @@
 <translation id="1508491105858779599">Cihazın kilidini açmak için parmağınızı parmak izi sensörünün üzerine yerleştirin.</translation>
 <translation id="1508575541972276599">Geçerli sürüm: Debian 9 (Stretch)</translation>
 <translation id="1509281256533087115">USB üzerinden herhangi bir <ph name="DEVICE_NAME_AND_VENDOR" /> cihazına erişme</translation>
-<translation id="1509960214886564027">Birçok sitedeki özellikler bozulabilir</translation>
+<translation id="1509960214886564027">Birçok sitedeki özellikler çalışmayabilir</translation>
 <translation id="1510238584712386396">Başlatıcı</translation>
 <translation id="151070646350206700">Siteler bildirim gönderme isteğinde bulunarak işinizi bölemez</translation>
 <translation id="1510785804673676069">Bir proxy sunucusu kullanıyorsanız, proxy ayarlarınızı kontrol edin veya
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">SIM kart kilitli</translation>
 <translation id="2618797463720777311">Yakındakilerle Paylaş kurulumu</translation>
 <translation id="2619761439309613843">Günlük Yenileme</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> güvenli bir şekilde indirilemiyor.</translation>
 <translation id="2620436844016719705">Sistem</translation>
 <translation id="262154978979441594">Google Asistan ses modelini eğitin</translation>
 <translation id="2621713457727696555">Güvenlik sağlandı</translation>
@@ -2902,7 +2903,7 @@
 <translation id="4275830172053184480">Cihazınızı yeniden başlatın</translation>
 <translation id="4276288850178085042">Sitelerin kameramı kullanmasını engelle</translation>
 <translation id="4278101229438943600">Asistanınız hazır</translation>
-<translation id="4278390842282768270">İzin verilen</translation>
+<translation id="4278390842282768270">İzin veriliyor</translation>
 <translation id="4281844954008187215">Hizmet Şartları</translation>
 <translation id="4282196459431406533">Smart Lock açık</translation>
 <translation id="4285418559658561636">Şifreyi Güncelle</translation>
@@ -3044,14 +3045,14 @@
 <translation id="4450274068924249931">Ekranınız boştayken fotoğrafları, saati, hava durumunu ve medya bilgileri gösterilsin. Ekran koruyucuyu etkinleştirirseniz cihazınız şarj olurken ekranı açık kalır.</translation>
 <translation id="4450974146388585462">Teşhis Et</translation>
 <translation id="4451479197788154834">Şifreniz bu cihazda ve Google Hesabınızda kayıtlı</translation>
-<translation id="4451757071857432900">Araya giren veya yanıltıcı reklamlar gösteren sitelerde engellendi (önerilen)</translation>
+<translation id="4451757071857432900">Araya giren veya yanıltıcı reklamlar gösteren sitelerde engellenir (önerilir)</translation>
 <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" /> üzerinde arayın veya bir URL yazın</translation>
 <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> gün önce etkindi</translation>
 <translation id="4460014764210899310">Grubu çöz</translation>
 <translation id="4462159676511157176">Özel ad sunucuları</translation>
 <translation id="4465236939126352372"><ph name="APP_NAME" /> için <ph name="TIME" /> süreli zaman sınırı ayarla</translation>
 <translation id="4465725236958772856">Ağ <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Yöneticiniz tarafından yönetiliyor, Bağlan</translation>
-<translation id="4469477701382819144">Araya giren veya yanıltıcı reklamlar gösteren sitelerde engellendi</translation>
+<translation id="4469477701382819144">Araya giren veya yanıltıcı reklamlar gösteren sitelerde engellenir</translation>
 <translation id="4469762931504673593"><ph name="ORIGIN" /> sitesi <ph name="FOLDERNAME" /> klasöründeki dosyaları düzenleyebilir</translation>
 <translation id="4470957202018033307">Harici depolama tercihleri</translation>
 <translation id="4471354919263203780">Konuşma tanıma dosyaları indiriliyor... %<ph name="PERCENT" /></translation>
@@ -4080,7 +4081,7 @@
 <translation id="567587836466137939">Bu cihaz, <ph name="MONTH_AND_YEAR" /> tarihine kadar otomatik yazılım ve güvenlik güncellemelerini alacak. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="567643736130151854">Tüm cihazlarda yer işaretlerinizi, şifrelerinizi ve daha pek çok şeyi almak için oturum açın ve senkronizasyonu etkinleştirin</translation>
 <translation id="5677503058916217575">Sayfanın dili:</translation>
-<translation id="5677928146339483299">Engellendi</translation>
+<translation id="5677928146339483299">Engelleniyor</translation>
 <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> birimine okuma ve yazma erişimi izni verildi.</translation>
 <translation id="5678955352098267522"><ph name="WEBSITE_1" /> sitesindeki verilerinizi okuma</translation>
 <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" kaldırılsın mı?</translation>
@@ -4136,7 +4137,7 @@
 <translation id="5739235828260127894">Doğrulama bekleniyor. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Çok büyük</translation>
 <translation id="5740328398383587084">Yakındakilerle Paylaş</translation>
-<translation id="5740820643029013514">Sessiz mesajlaşmayı kullan (önerilir)</translation>
+<translation id="5740820643029013514">İletişim daha sessiz kurulsun (önerilir)</translation>
 <translation id="574104302965107104">Ekran yansıtma</translation>
 <translation id="574209121243317957">Ses Kalınlığı</translation>
 <translation id="5742505912938664543">Buraya ikincil hesap eklediğinizde bu hesabı kullanarak web'e göz atabilir, uygulama indirebilir, Gmail'inizi ve diğer Google hizmetlerini kontrol edebilirsiniz.</translation>
@@ -4382,7 +4383,7 @@
 <translation id="6032715498678347852">Bir uzantının bu siteye erişmesine izin vermek için uzantıyı tıklayın.</translation>
 <translation id="6032912588568283682">Dosya sistemi</translation>
 <translation id="603539183851330738">Otomatik düzeltmeyi geri alma düğmesi. Yazımı <ph name="TYPED_WORD" /> biçimine geri döndürün.  Etkinleştirmek için enter, kapatmak için escape tuşuna basın.</translation>
-<translation id="6038929619733116134">Site, araya giren veya yanıltıcı reklamlar gösteriyorsa engelleyin</translation>
+<translation id="6038929619733116134">Sitede araya giren veya yanıltıcı reklamlar engellensin</translation>
 <translation id="6039651071822577588">Ağ mülkü sözlüğü bozuk</translation>
 <translation id="6040143037577758943">Kapat</translation>
 <translation id="6040852767465482106">Anonim Kimlik</translation>
@@ -4594,7 +4595,7 @@
 <translation id="6267166720438879315"><ph name="HOST_NAME" /> sunucusunda kimliğinizi doğrulamak için bir sertifika seçin</translation>
 <translation id="6267547857941397424">Ağ <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="PHONE_NAME" />, %<ph name="SIGNAL_STRENGTH" /> Sinyal Gücü, %<ph name="BATTERY_STATUS" /> Telefon Pili, Bağlan</translation>
 <translation id="6268252012308737255"><ph name="APP" /> ile aç</translation>
-<translation id="6270391203985052864">Siteler bildirim göndermek isteyebilir</translation>
+<translation id="6270391203985052864">Siteler bildirim gönderme izni isteyebilir</translation>
 <translation id="6270770586500173387"><ph name="BEGIN_LINK1" />Sistem ve uygulama bilgilerini<ph name="END_LINK1" /> ve <ph name="BEGIN_LINK2" />metrikleri<ph name="END_LINK2" /> gönder</translation>
 <translation id="6271348838875430303">düzeltme geri alındı</translation>
 <translation id="6272643420381259437">Eklenti indirilirken bir hata (<ph name="ERROR" />) oluştu</translation>
@@ -4847,7 +4848,7 @@
 <translation id="6556903358015358733">Tema ve Duvar Kağıdı</translation>
 <translation id="6557290421156335491">Kısayollarım</translation>
 <translation id="6560151649238390891">Öneri eklendi</translation>
-<translation id="6561560012278703671">Bilgiyi daha az rahatsız edici bir şekilde alın (bildirim istemlerinin sizi rahatsız etmesini engelleyin)</translation>
+<translation id="6561560012278703671">İletişim daha sessiz kurulsun (bildirim istemlerinin sizi rahatsız etmesini engeller)</translation>
 <translation id="6561726789132298588">enter</translation>
 <translation id="6562117348069327379">Sistem günlüklerini İndirilenler konumunda saklayın.</translation>
 <translation id="656293578423618167">Dosya yolu veya adı çok uzun. Lütfen daha kısa bir adla veya başka bir konuma  kaydedin.</translation>
@@ -4982,7 +4983,7 @@
 <translation id="6731877319426971768">Konuşma tanıma dosyaları indirildi</translation>
 <translation id="6732801395666424405">Sertifikalar yüklenmedi</translation>
 <translation id="6732900235521116609">Kısayol kaldırılamıyor</translation>
-<translation id="6734468588183300211">Gizli moddayken siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler bozulabilir.</translation>
+<translation id="6734468588183300211">Gizli moddayken siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler çalışmayabilir.</translation>
 <translation id="6735304988756581115">Çerezleri ve diğer site verilerini göster...</translation>
 <translation id="6736243959894955139">Adres</translation>
 <translation id="6736329909263487977"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />]</translation>
@@ -4995,7 +4996,7 @@
 <translation id="6746124502594467657">Aşağı taşı</translation>
 <translation id="674632704103926902">Hafifçe vurarak sürüklemeyi etkinleştir</translation>
 <translation id="6748465660675848252">Devam edebilirsiniz, ancak yalnızca senkronize edilen verileriniz ve ayarlarınız geri yüklenecek. Tüm yerel verileri kaybedeceksiniz.</translation>
-<translation id="6749006854028927059">Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler bozulabilir.</translation>
+<translation id="6749006854028927059">Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler çalışmayabilir.</translation>
 <translation id="6750757184909117990">Hücresel bağlantıyı devre dışı bırak</translation>
 <translation id="6750946710563435348">Başka kullanıcı adı kullan</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Gizli mod)</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">Fare aranıyor...</translation>
 <translation id="7052237160939977163">Performans izleme verilerini gönder</translation>
 <translation id="7053983685419859001">Engelle</translation>
-<translation id="705508001219706572">Buraya kolayca geri dönmek için <ph name="APP_NAME" /> uygulamasını yükleyin</translation>
 <translation id="7055152154916055070">Yönlendirme engellendi:</translation>
 <translation id="7055451306017383754">Bir uygulama bu klasörü kullandığından paylaşım kaldırılamadı. Parallels Desktop kapatıldığında klasörün paylaşımı kaldırılacak.</translation>
 <translation id="7056526158851679338">&amp;Cihazları Denetle</translation>
@@ -6814,7 +6814,7 @@
 <translation id="881799181680267069">Diğerlerini Gizle</translation>
 <translation id="8818152010000655963">Duvar kağıdı</translation>
 <translation id="8818958672113348984">Telefonumu kullanarak doğrula</translation>
-<translation id="8820817407110198400">Favoriler</translation>
+<translation id="8820817407110198400">Yer işaretleri</translation>
 <translation id="8821045908425223359">IP adresini otomatik olarak yapılandır</translation>
 <translation id="8821268776955756404"><ph name="APP_NAME" /> kullanıma hazır.</translation>
 <translation id="882204272221080310">Daha fazla güvenlik için donanım yazılımını güncelle.</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Linux kapsayıcı kurulumu kontrol ediliyor</translation>
 <translation id="9209689095351280025">Siteler sizi web'de takip eden çerezler kullanamaz</translation>
 <translation id="9211177926627870898">Güncelleme gerekli</translation>
+<translation id="9211490828691860325">Tüm masalar</translation>
 <translation id="9214520840402538427">Hata! Yükleme zamanı özniteliklerini başlatma işlemi zaman aşımına uğradı. Lütfen destek temsilcinizle görüşün.</translation>
 <translation id="9214695392875603905">Küçük kek</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" eklendi</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 3a869bd..1b91881c 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1452,6 +1452,7 @@
 <translation id="2617342710774726426">SIM-карту заблоковано</translation>
 <translation id="2618797463720777311">Налаштуйте функцію "Передавання поблизу"</translation>
 <translation id="2619761439309613843">Щоденне оновлення</translation>
+<translation id="2620215283731032047">Не вдається безпечно завантажити файл "<ph name="FILE_NAME" />".</translation>
 <translation id="2620436844016719705">Система</translation>
 <translation id="262154978979441594">Навчити Google Асистента розпізнавати зразок голосу</translation>
 <translation id="2621713457727696555">Захищено</translation>
@@ -5266,7 +5267,6 @@
 <translation id="7051943809462976355">Пошук миші…</translation>
 <translation id="7052237160939977163">Надсилати дані відстеження ефективності</translation>
 <translation id="7053983685419859001">Блокувати</translation>
-<translation id="705508001219706572">Щоб швидко повертатися сюди, установіть додаток <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Переадресацію заблоковано:</translation>
 <translation id="7055451306017383754">Не вдалося закрити доступ, оскільки цю папку використовує додаток. Доступ до неї буде закрито після завершення роботи Parallels Desktop.</translation>
 <translation id="7056526158851679338">&amp;Перевірити пристрої</translation>
@@ -7169,6 +7169,7 @@
 <translation id="9209563766569767417">Перевірка налаштувань контейнера Linux</translation>
 <translation id="9209689095351280025">Сайти не можуть використовувати файли cookie, щоб відстежувати ваші дії в Інтернеті</translation>
 <translation id="9211177926627870898">Потрібне оновлення</translation>
+<translation id="9211490828691860325">Усі робочі столи</translation>
 <translation id="9214520840402538427">На жаль, ініціалізація атрибутів часу встановлення минула. Зв’яжіться з представником служби підтримки.</translation>
 <translation id="9214695392875603905">Кекс</translation>
 <translation id="9215293857209265904">Додано розширення "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 2f2ff314..ef5e1fd 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">‏SIM کارڈ مقفل ہے</translation>
 <translation id="2618797463720777311">قریبی آلات کے ساتھ اشتراک کو سیٹ اپ کریں</translation>
 <translation id="2619761439309613843">روزانہ ریفریش کریں</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> فائل کو محفوظ طریقے سے ڈاؤن لوڈ نہیں کیا جا سکتا ہے۔</translation>
 <translation id="2620436844016719705">سسٹم</translation>
 <translation id="262154978979441594">‏Google اسسٹنٹ صوتی ماڈل کی تربیت کریں</translation>
 <translation id="2621713457727696555">محفوظ ہے</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">ماؤس کی تلاش ہو رہی ہے…</translation>
 <translation id="7052237160939977163">کارکردگی کا پتا لگانے کا ڈیٹا بھیجیں</translation>
 <translation id="7053983685419859001">مسدود کریں</translation>
-<translation id="705508001219706572">فوری طور پر یہاں واپس آنے کے لیے <ph name="APP_NAME" /> انسٹال کریں</translation>
 <translation id="7055152154916055070">ری ڈائریکٹ مسدود کیا گیا:</translation>
 <translation id="7055451306017383754">‏اشتراک ختم نہیں ہوسکا کیونکہ ایک ایپلیکیشن اس فولڈر کو استعمال کر رہی ہے۔ اگلی بار Parallels Desktop بند ہونے پر فولڈر کا اشتراک ختم کر دیا جائے گا۔</translation>
 <translation id="7056526158851679338">آلات کا &amp;معائنہ کریں</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">‏Linux کنٹینر کا سیٹ اپ چیک کیا جا رہا ہے</translation>
 <translation id="9209689095351280025">سائٹس ان کوکیز کا استعمال نہیں کر سکتی ہیں جو آپ کو پورے ویب پر ٹریک کرتی ہیں</translation>
 <translation id="9211177926627870898">اپ ڈیٹ درکار ہے</translation>
+<translation id="9211490828691860325">تمام ڈیسکس</translation>
 <translation id="9214520840402538427">افوہ!  انسٹالیشن کے وقت کے انتسابات کے آغاز کا وقت ختم ہوگیا ہے۔ براہ کرم اپنے امدادی نمائندہ سے رابطہ کریں۔</translation>
 <translation id="9214695392875603905">کپ کیک</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" شامل کر دیا گیا</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 37ec376..2fd6403 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">SIM karta qulflangan</translation>
 <translation id="2618797463720777311">Yaqin-atrofga yuborish funksiyasini sozlash</translation>
 <translation id="2619761439309613843">Kundalik yangilash</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" /> faylini xavfsiz yuklab olish imkonsiz.</translation>
 <translation id="2620436844016719705">Tizim</translation>
 <translation id="262154978979441594">Google Assistent ovoz modelini oʻqiting</translation>
 <translation id="2621713457727696555">Himoyalangan</translation>
@@ -5262,7 +5263,6 @@
 <translation id="7051943809462976355">Sichqoncha qidirilmoqda...</translation>
 <translation id="7052237160939977163">Unumdorlik kuzatuvi ma’lumotlarini jo‘natish</translation>
 <translation id="7053983685419859001">Taqiqlash</translation>
-<translation id="705508001219706572">Bunga tez qaytish uchun <ph name="APP_NAME" /> ilovasini oʻrnating</translation>
 <translation id="7055152154916055070">Yo‘naltirish bloklandi:</translation>
 <translation id="7055451306017383754">Bu jild bandligi sababli umumiy ruxsat bekor qilinmadi. Jildga umumiy ruxsat Parallels Desktop qayta ishga tushganda bekor qilinadi.</translation>
 <translation id="7056526158851679338">&amp;Qurilmalarni tekshirish</translation>
@@ -7162,6 +7162,7 @@
 <translation id="9209563766569767417">Linux konteyneri sozlamalari tekshirilmoqda</translation>
 <translation id="9209689095351280025">Saytlar sizni internet boʻylab kuzatadigan cookie fayllardan foydalana olmaydi.</translation>
 <translation id="9211177926627870898">Yangilash zarur</translation>
+<translation id="9211490828691860325">Barcha ish stollari</translation>
 <translation id="9214520840402538427">Afsuski, vaqt sozlamalarini o‘rnatishga tayyorlash vaqti tugadi. Xizmat ko‘rsatish markazi bilan bog‘laning.</translation>
 <translation id="9214695392875603905">Keks</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" qo‘shildi</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 628b085..17b90c0 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1449,6 +1449,7 @@
 <translation id="2617342710774726426">Thẻ SIM bị khóa</translation>
 <translation id="2618797463720777311">Thiết lập tính năng Chia sẻ lân cận</translation>
 <translation id="2619761439309613843">Làm mới hàng ngày</translation>
+<translation id="2620215283731032047">Không thể tải <ph name="FILE_NAME" /> xuống một cách an toàn.</translation>
 <translation id="2620436844016719705">Hệ thống</translation>
 <translation id="262154978979441594">Đào tạo mẫu giọng nói cho Trợ lý Google</translation>
 <translation id="2621713457727696555">Đã bảo mật</translation>
@@ -5263,7 +5264,6 @@
 <translation id="7051943809462976355">Đang tìm kiếm chuột...</translation>
 <translation id="7052237160939977163">Gửi dữ liệu theo dõi hoạt động</translation>
 <translation id="7053983685419859001">Chặn</translation>
-<translation id="705508001219706572">Để quay lại đây nhanh hơn, hãy cài đặt <ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Liên kết chuyển hướng đã chặn:</translation>
 <translation id="7055451306017383754">Không thể ngừng chia sẻ vì một ứng dụng đang dùng thư mục này. Hệ thống sẽ ngừng chia sẻ thư mục này khi bạn tắt Parallels Desktop vào lần tới.</translation>
 <translation id="7056526158851679338">&amp;Kiểm tra thiết bị</translation>
@@ -7163,6 +7163,7 @@
 <translation id="9209563766569767417">Đang kiểm tra quá trình thiết lập vùng chứa Linux</translation>
 <translation id="9209689095351280025">Các trang web không thể dùng cookie theo dõi bạn trên web</translation>
 <translation id="9211177926627870898">Yêu cầu cập nhật</translation>
+<translation id="9211490828691860325">Tất cả các không gian làm việc</translation>
 <translation id="9214520840402538427">Rất tiếc! Việc chạy thuộc tính thời gian cài đặt đã hết thời gian. Vui lòng liên hệ với người đại diện hỗ trợ của bạn.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
 <translation id="9215293857209265904">Đã thêm "<ph name="EXTENSION_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 6b4c1664..6b55c00 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -914,7 +914,7 @@
 <translation id="2007404777272201486">报告问题...</translation>
 <translation id="2010501376126504057">兼容的设备</translation>
 <translation id="2017334798163366053">停用性能数据收集</translation>
-<translation id="2017836877785168846">清除历史记录和地址栏中的自动填充项。</translation>
+<translation id="2017836877785168846">清除历史记录和地址栏中的自动补全项。</translation>
 <translation id="2018352199541442911">抱歉,系统目前不支持您的外部存储设备。</translation>
 <translation id="2019718679933488176">在新标签页中打开音频(&amp;O)</translation>
 <translation id="2020183425253392403">显示网络地址设置</translation>
@@ -1445,6 +1445,7 @@
 <translation id="2617342710774726426">SIM 卡已被锁定</translation>
 <translation id="2618797463720777311">设置“附近分享”功能</translation>
 <translation id="2619761439309613843">每日刷新</translation>
+<translation id="2620215283731032047">无法安全地下载“<ph name="FILE_NAME" />”。</translation>
 <translation id="2620436844016719705">系统</translation>
 <translation id="262154978979441594">训练 Google 助理语音模型</translation>
 <translation id="2621713457727696555">受保护</translation>
@@ -2415,7 +2416,7 @@
 <translation id="3713047097299026954">此安全密钥不含任何登录数据</translation>
 <translation id="3714195043138862580">此演示设备目前处于“已取消配置”状态。</translation>
 <translation id="3714633008798122362">网络日历</translation>
-<translation id="3719826155360621982">首页</translation>
+<translation id="3719826155360621982">主页</translation>
 <translation id="372062398998492895">CUPS</translation>
 <translation id="3721119614952978349">您与 Google</translation>
 <translation id="3722108462506185496">启动虚拟机服务时出错。请重试。</translation>
@@ -3540,7 +3541,7 @@
 <translation id="5060332552815861872">有 1 台可保存的打印机。</translation>
 <translation id="5061347216700970798">{NUM_BOOKMARKS,plural, =1{此文件夹包含 1 个书签。确定要删除此文件夹吗?}other{此文件夹包含 # 个书签。确定要删除此文件夹吗?}}</translation>
 <translation id="5062930723426326933">登录失败,请连接到互联网,然后重试。</translation>
-<translation id="5063480226653192405">使用情况</translation>
+<translation id="5063480226653192405">空间占用量</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5067399438976153555">始终启用</translation>
 <translation id="5067867186035333991">当 <ph name="HOST" /> 想要使用麦克风时询问我</translation>
@@ -4130,7 +4131,7 @@
 <translation id="5739235828260127894">正在等待验证。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">特大</translation>
 <translation id="5740328398383587084">附近分享</translation>
-<translation id="5740820643029013514">使用静态消息通知(推荐)</translation>
+<translation id="5740820643029013514">使用干扰性更低的提示方式(推荐)</translation>
 <translation id="574104302965107104">显示屏镜像</translation>
 <translation id="574209121243317957">音高</translation>
 <translation id="5742505912938664543">在此处添加辅助帐号后,您便可使用该帐号浏览网页、下载应用、查看 Gmail 及其他 Google 服务。</translation>
@@ -4841,7 +4842,7 @@
 <translation id="6556903358015358733">主题背景和壁纸</translation>
 <translation id="6557290421156335491">我的快捷方式</translation>
 <translation id="6560151649238390891">已插入建议</translation>
-<translation id="6561560012278703671">改用静态指示方式(禁止网站发送通知,以免干扰)</translation>
+<translation id="6561560012278703671">改用干扰性更低的提示方式(禁止网站发送通知,以免干扰)</translation>
 <translation id="6561726789132298588">Enter</translation>
 <translation id="6562117348069327379">将系统日志存储到“下载内容”目录中。</translation>
 <translation id="656293578423618167">该文件的路径或名称过长。请以较短的名称保存或保存到其他位置。</translation>
@@ -5258,7 +5259,6 @@
 <translation id="7051943809462976355">正在搜索鼠标…</translation>
 <translation id="7052237160939977163">发送性能跟踪数据</translation>
 <translation id="7053983685419859001">禁止</translation>
-<translation id="705508001219706572">若要快速返回到这里,请安装“<ph name="APP_NAME" />”</translation>
 <translation id="7055152154916055070">已禁止重定向:</translation>
 <translation id="7055451306017383754">无法停止共享,因为有一个应用正在使用此文件夹。系统将会在下次关闭 Parallels Desktop 时停止共享此文件夹。</translation>
 <translation id="7056526158851679338">检查设备(&amp;I)</translation>
@@ -5322,7 +5322,7 @@
 <translation id="711840821796638741">显示托管书签</translation>
 <translation id="711902386174337313">读取您登录过的设备的列表</translation>
 <translation id="7120865473764644444">无法连接到同步服务器。正在重试…</translation>
-<translation id="7121362699166175603">清除历史记录和地址栏中的自动填充项。您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation>
+<translation id="7121362699166175603">清除历史记录和地址栏中的自动补全项。您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation>
 <translation id="7121438501124788993">开发者模式</translation>
 <translation id="7121728544325372695">智能破折号</translation>
 <translation id="7122353087820324370">应用和 Chrome 操作系统设置不会同步到辅助帐号。</translation>
@@ -5559,7 +5559,7 @@
 <translation id="7409549334477097887">特大</translation>
 <translation id="7409735910987429903">网站可能会发送弹出式窗口以展示广告,或者使用重定向将您引导至您可能不想访问的网站</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> 想要使用摄像头和麦克风时询问我是否同意</translation>
-<translation id="741204030948306876">立即启用</translation>
+<translation id="741204030948306876">立即开启</translation>
 <translation id="7412226954991670867">GPU 内存</translation>
 <translation id="7414464185801331860">18 倍</translation>
 <translation id="7415454883318062233">设置已完成</translation>
@@ -5817,7 +5817,7 @@
 <translation id="7702574632857388784">从列表中移除 <ph name="FILE_NAME" /></translation>
 <translation id="7702907602086592255">域名</translation>
 <translation id="7704305437604973648">任务</translation>
-<translation id="7704317875155739195">自动填充搜索字词和网址</translation>
+<translation id="7704317875155739195">自动补全搜索字词和网址</translation>
 <translation id="7704521324619958564">打开 Play 商店</translation>
 <translation id="7705276765467986571">无法加载书签模型。</translation>
 <translation id="7705524343798198388">VPN</translation>
@@ -6566,7 +6566,7 @@
 <translation id="8561853412914299728">“<ph name="TAB_TITLE" />”<ph name="EMOJI_PLAYING" /></translation>
 <translation id="8565650234829130278">已尝试降低应用版本。</translation>
 <translation id="8569682776816196752">未找到任何目标</translation>
-<translation id="8571213806525832805">近 4 周</translation>
+<translation id="8571213806525832805">过去 4 周</translation>
 <translation id="8571687764447439720">添加 Kerberos 票据</translation>
 <translation id="8571814292654854151">为您的个人资料命名</translation>
 <translation id="8574990355410201600">始终允许 <ph name="HOST" /> 播放声音</translation>
@@ -6653,7 +6653,7 @@
 <translation id="8661290697478713397">在隐身窗口中打开链接(&amp;G)</translation>
 <translation id="8662671328352114214">加入<ph name="TYPE" />网络</translation>
 <translation id="8662795692588422978">用户</translation>
-<translation id="8662811608048051533">您会从大多数网站退出。</translation>
+<translation id="8662811608048051533">会致使您从大多数网站退出。</translation>
 <translation id="8662911384982557515">将您的主页更改为:<ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome 无法设置壁纸。</translation>
 <translation id="8663099077749055505">始终禁止在 <ph name="HOST" /> 上自动下载多个文件</translation>
@@ -7157,6 +7157,7 @@
 <translation id="9209563766569767417">正在检查 Linux 容器设置</translation>
 <translation id="9209689095351280025">网站无法使用 Cookie 来跟踪您在网上的活动</translation>
 <translation id="9211177926627870898">需要更新</translation>
+<translation id="9211490828691860325">所有桌面</translation>
 <translation id="9214520840402538427">糟糕!安装时间属性的初始化已过期,请与您的支持代表联系。</translation>
 <translation id="9214695392875603905">纸杯蛋糕</translation>
 <translation id="9215293857209265904">已添加“<ph name="EXTENSION_NAME" />”</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index e12e2eb..8b4f34f 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">SIM 卡已鎖定</translation>
 <translation id="2618797463720777311">設定「咫尺共享」</translation>
 <translation id="2619761439309613843">每日重新整理</translation>
+<translation id="2620215283731032047">無法安全下載「<ph name="FILE_NAME" />」。</translation>
 <translation id="2620436844016719705">系統</translation>
 <translation id="262154978979441594">訓練「Google 助理」語音模型</translation>
 <translation id="2621713457727696555">已受保護</translation>
@@ -5264,7 +5265,6 @@
 <translation id="7051943809462976355">正在搜尋滑鼠…</translation>
 <translation id="7052237160939977163">傳送效能追蹤數據</translation>
 <translation id="7053983685419859001">封鎖</translation>
-<translation id="705508001219706572">如要快速返回此處,請安裝「<ph name="APP_NAME" />」</translation>
 <translation id="7055152154916055070">已禁止重新導向:</translation>
 <translation id="7055451306017383754">某個應用程式正在使用此資料夾,因此無法取消分享。系統會在下次關閉 Parallels Desktop 時取消分享此資料夾。</translation>
 <translation id="7056526158851679338">檢查裝置(&amp;I)</translation>
@@ -7164,6 +7164,7 @@
 <translation id="9209563766569767417">正在檢查 Linux 容器設定</translation>
 <translation id="9209689095351280025">網站不能使用 Cookie 追蹤您的網絡活動</translation>
 <translation id="9211177926627870898">必須更新</translation>
+<translation id="9211490828691860325">所有桌面</translation>
 <translation id="9214520840402538427">糟糕!系統嘗試初始設定安裝時間 (installation-time) 屬性,但是動作已逾時。請與您的支援代表聯絡。</translation>
 <translation id="9214695392875603905">紙杯蛋糕</translation>
 <translation id="9215293857209265904">已新增「<ph name="EXTENSION_NAME" />」</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index de854ad..fb9c2589 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1448,6 +1448,7 @@
 <translation id="2617342710774726426">SIM 卡已鎖定</translation>
 <translation id="2618797463720777311">設定鄰近分享功能</translation>
 <translation id="2619761439309613843">每日變換新桌布</translation>
+<translation id="2620215283731032047">無法安全下載「<ph name="FILE_NAME" />」。</translation>
 <translation id="2620436844016719705">系統</translation>
 <translation id="262154978979441594">訓練 Google 助理的語音模型</translation>
 <translation id="2621713457727696555">已受到安全保護</translation>
@@ -5261,7 +5262,6 @@
 <translation id="7051943809462976355">正在搜尋滑鼠...</translation>
 <translation id="7052237160939977163">傳送效能追蹤資料</translation>
 <translation id="7053983685419859001">封鎖</translation>
-<translation id="705508001219706572">如要快速返回此處,請安裝「<ph name="APP_NAME" />」</translation>
 <translation id="7055152154916055070">已禁止重新導向:</translation>
 <translation id="7055451306017383754">某個應用程式正在使用這個資料夾,因此無法取消分享。系統會在下次關閉 Parallels Desktop 時取消分享這個資料夾。</translation>
 <translation id="7056526158851679338">檢查裝置 (&amp;I)</translation>
@@ -7160,6 +7160,7 @@
 <translation id="9209563766569767417">正在檢查 Linux 容器設定</translation>
 <translation id="9209689095351280025">網站無法使用 Cookie 來追蹤你在網路上的活動</translation>
 <translation id="9211177926627870898">必須更新</translation>
+<translation id="9211490828691860325">所有桌面</translation>
 <translation id="9214520840402538427">糟糕!系統嘗試初始設定安裝時間 (installation-time) 屬性,但是動作已逾時。請洽詢你的支援代表。</translation>
 <translation id="9214695392875603905">杯子蛋糕</translation>
 <translation id="9215293857209265904">已新增「<ph name="EXTENSION_NAME" />」</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 0b4c98cc..d0ca68c 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1450,6 +1450,7 @@
 <translation id="2617342710774726426">I-SIM card ikhiyiwe</translation>
 <translation id="2618797463720777311">Sesha Ukuthumela Eduze</translation>
 <translation id="2619761439309613843">Ukuvuselela kwansuku zonke</translation>
+<translation id="2620215283731032047"><ph name="FILE_NAME" />ayikwazi ukulandwa ngokuvikelekile.</translation>
 <translation id="2620436844016719705">Isistimu</translation>
 <translation id="262154978979441594">Qeqesha Umsizi we-Google ngemodeli yezwi</translation>
 <translation id="2621713457727696555">Kuvikelwe</translation>
@@ -5265,7 +5266,6 @@
 <translation id="7051943809462976355">Iseshela igundane...</translation>
 <translation id="7052237160939977163">Thumela idatha yokulandelela ukusebenza</translation>
 <translation id="7053983685419859001">Vimba</translation>
-<translation id="705508001219706572">Ukuze ubuye lapha ngokushesha, faka i-<ph name="APP_NAME" /></translation>
 <translation id="7055152154916055070">Ukuqondiswa kabusha kuvinjiwe:</translation>
 <translation id="7055451306017383754">Akukwazanga ukuyeka ukwabelana ngoba uhlelo lokusebenza lusebenzisa le folda. Ifolda izoyeka ukwabiwa uma i-Parallels Desktop ilandela ukucishwa.</translation>
 <translation id="7056526158851679338">&amp;Hlola amadivayisi</translation>
@@ -7167,6 +7167,7 @@
 <translation id="9209563766569767417">Kuhlola isiqukathi sokusetha se-Linux</translation>
 <translation id="9209689095351280025">Amasayithi awakwazi ukusebenzisa amakhukhi akulandelayo kuwebhu yonkana</translation>
 <translation id="9211177926627870898">Isibuyekezo siyadingeka</translation>
+<translation id="9211490828691860325">Wonke amatafula</translation>
 <translation id="9214520840402538427">Eshu! Ukuqaliswa kwezichasiso zesikhathi sokufakwa kuphelelwe yisikhathi. Sicela uxhumane nabaqokelwe ukumela abanye bakho bosekelo.</translation>
 <translation id="9214695392875603905">I-Cupcake</translation>
 <translation id="9215293857209265904">I-"<ph name="EXTENSION_NAME" />" ingeziwe</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb
index 92e8507..b6e7ab6 100644
--- a/chrome/app/resources/google_chrome_strings_am.xtb
+++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Chrome OSን ዳግም አስጀምር</translation>
 <translation id="5132929315877954718">ለGoogle Chrome ምርጥ መተግበሪያዎችን፣ ጨዋታዎችን፣ ቅጥያዎችን እና ገጽታዎችን ያግኙ።</translation>
+<translation id="5139423532931106058">የChrome መገለጫዎን ያብጁ</translation>
+<translation id="5163087008893166964">እንኳን ወደ Chrome በደህና መጡ፤ አዲስ የአሳሽ መስኮት ተከፍቷል።</translation>
 <translation id="5170938038195470297">መገለጫዎ የአዲስ Google Chrome ስሪት አካል ስለሆነ መጠቀም አይቻልም።
 
 አንዳንድ ባሕሪያት ላይገኙ ይችላሉ። እባክዎ የተለየ የመገለጫ አቃፊ ይግለጹ ወይም አዲሱን የChrome ስሪት ይጠቀሙ።</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb
index 06b13eb..82824e0 100644
--- a/chrome/app/resources/google_chrome_strings_ar.xtb
+++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -286,6 +286,6 @@
 <translation id="911206726377975832">هل تريد أيضًا حذف بيانات التصفح؟</translation>
 <translation id="9138603949443464873">‏لتطبيق التغييرات، يُرجى إعادة تشغيل Chrome</translation>
 <translation id="919706545465235479">‏تحديث Chrome لبدء المزامنة</translation>
-<translation id="94743460404517794">‏إذا كانت لديك حسابات متعددة في Google، يمكنك إضافتها على جهاز <ph name="DEVICE_TYPE" />. وستكون حساباتك متوفّرة في متصفِّح Chrome و"متجر Play"، بالإضافة إلى خدمات مثل Gmail وDrive وYouTube. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
+<translation id="94743460404517794">‏إذا كانت لديك حسابات متعددة على Google، يمكنك إضافتها إلى جهاز <ph name="DEVICE_TYPE" />. وستكون حساباتك متوفّرة في متصفِّح Chrome و"متجر Play"، بالإضافة إلى خدمات مثل Gmail وDrive وYouTube. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="989369509083708165">‏Google Chrome هو متصفحك التلقائي</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb
index 9a8f52f..614d706 100644
--- a/chrome/app/resources/google_chrome_strings_be.xtb
+++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Перазапусціце Chrome OS</translation>
 <translation id="5132929315877954718">Адкрывайце для сябе выдатныя праграмы, гульні, пашырэнні і тэмы для Google Chrome.</translation>
+<translation id="5139423532931106058">Наладзьце свой профіль Chrome</translation>
+<translation id="5163087008893166964">Вітаем у Chrome! Адкрыта новае акно браўзера</translation>
 <translation id="5170938038195470297">Ваш профіль нельга выкарыстоўваць, бо ён з навейшай версіі Google Chrome.
 
 Некаторыя функцыі могуць быць недаступныя. Укажыце іншы каталог профілю або выкарыстайце навейшую версію Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb
index 7334865f..8c6462ecc 100644
--- a/chrome/app/resources/google_chrome_strings_bn.xtb
+++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -154,6 +154,8 @@
 <translation id="4990567037958725628">Google Chrome  ক্যানারি</translation>
 <translation id="5062123544085870375">Chrome OS রিস্টার্ট করুন</translation>
 <translation id="5132929315877954718">Google Chrome-এর দুর্দান্ত অ্যাপ্লিকেশান, গেম, এক্সটেনশান এবং থিম আবিষ্কার করুন৷</translation>
+<translation id="5139423532931106058">আপনার Chrome প্রোফাইল কাস্টমাইজ করুন</translation>
+<translation id="5163087008893166964">Chrome-এ স্বাগতম; নতুন ব্রাউজার উইন্ডো খোলা হয়েছে</translation>
 <translation id="5170938038195470297">আপনার প্রোফাইল ব্যবহার করা যাবে কারণ এটি Google Chrome-এর একটি নতুন ভার্সনে গঠিত৷ 
 
 কিছু বৈশিষ্ট্য অনুপলভ্য হতে পারে৷ একটি ভিন্ন প্রোফাইল নির্দেশিকা সুনির্দিষ্টভাবে উল্লেখ করুন অথবা Chrome এর নতুন ভার্সন ব্যবহার করুন৷</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb
index eb4baec..95a4b6d 100644
--- a/chrome/app/resources/google_chrome_strings_ca.xtb
+++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -152,6 +152,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Reinicia Chrome OS</translation>
 <translation id="5132929315877954718">Descobriu aplicacions, jocs, extensions i temes genials per a Google Chrome.</translation>
+<translation id="5139423532931106058">Personalitza el teu perfil de Chrome</translation>
+<translation id="5163087008893166964">Et donem la benvinguda a Chrome; s'ha obert una altra finestra del navegador</translation>
 <translation id="5170938038195470297">El vostre perfil no es pot utilitzar perquè prové d'una versió més nova de Google Chrome. Pot ser que algunes funcions no estiguin disponibles. Especifiqueu un directori de perfil diferent o utilitzeu una versió més nova de Chrome.</translation>
 <translation id="5193136243808726294">Google Chrome OS no pot obrir aquesta pàgina.</translation>
 <translation id="5251420635869119124">Els convidats poden utilitzar Chrome sense deixar-hi rastre.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index e24620b..3c0f52a 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Restartujte systém Chrome OS</translation>
 <translation id="5132929315877954718">Objevte skvělé aplikace, hry, rozšíření a motivy prohlížeče Google Chrome.</translation>
+<translation id="5139423532931106058">Upravit profil Chrome</translation>
+<translation id="5163087008893166964">Vítá vás Chrome; bylo otevřeno nové okno prohlížeče</translation>
 <translation id="5170938038195470297">Nelze použít váš profil, protože byl vytvořen v novější verzi aplikace Google Chrome.
 
 Některé funkce mohou být nedostupné. Zadejte prosím jiný adresář profilu, nebo používejte novější verzi aplikace Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index 00eeea9..f6f5978fb 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Berrabiarazi Chrome OS</translation>
 <translation id="5132929315877954718">Ezagutu Google Chrome-rako aplikazio, joko, luzapen eta gai bikainak.</translation>
+<translation id="5139423532931106058">Pertsonalizatu Chrome-ko profila</translation>
+<translation id="5163087008893166964">Ongi etorri Chrome-ra; beste leiho bat ireki da arakatzailean</translation>
 <translation id="5170938038195470297">Ezin da profila erabili Google Chrome-ren bertsio berriago batekoa delako.
 
 Agian eginbide batzuk ez dira erabilgarri egongo. Zehaztu profilaren beste direktorio bat edo erabili Chrome-ren bertsio berriagoa.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb
index ec275d03..1a8376c2 100644
--- a/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -152,6 +152,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">‏بازراه‌اندازی سیستم‌عامل Chrome</translation>
 <translation id="5132929315877954718">‏برنامه‌های کاربردی، بازی‌ها، افزونه‌ها و طرح‌های زمینه فوق‌العاده را برای Google Chrome کاوش کنید.</translation>
+<translation id="5139423532931106058">‏سفارشی کردن نمایه Chrome</translation>
+<translation id="5163087008893166964">‏به Chrome خوش‌آمدید؛ پنجره مرورگر جدید راه‌اندازی شد</translation>
 <translation id="5170938038195470297">‏نمایهٔ شما نمی‌تواند استفاده شود زیرا مربوط به یک نسخه جدیدتر از Google Chrome است. بعضی از ویژگی‌ها ممکن است موجود نباشند. لطفاً یک مسیر دیگر برای نمایه تعیین کنید یا از نسخه جدیدتر Chrome استفاده کنید.</translation>
 <translation id="5193136243808726294">‏Google Chrome OS نمی‌‎تواند این صفحه را باز کند.</translation>
 <translation id="5251420635869119124">‏مهمان‌‌ها می‌توانند از Chrome استفاده کنند بدون اینکه اثری از خود به جا بگذارند.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 4d14b16..b6ca61c 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -152,6 +152,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Käynnistä Chrome OS uudelleen</translation>
 <translation id="5132929315877954718">Löydät hienoja sovelluksia, pelejä ja teemoja Google Chromelle.</translation>
+<translation id="5139423532931106058">Muokkaa Chrome-profiiliasi</translation>
+<translation id="5163087008893166964">Tervetuloa Chromeen, uusi selainikkuna avattu</translation>
 <translation id="5170938038195470297">Profiiliasi ei voi käyttää, koska se on peräisin uudemmasta Google Chromen versiosta. Kaikkia toimintoja ei välttämättä voi käyttää. Määritä toinen profiilihakemisto tai käytä uudempaa Chromen versiota.</translation>
 <translation id="5193136243808726294">Google Chrome ‑käyttöjärjestelmä ei voi avata tätä sivua.</translation>
 <translation id="5251420635869119124">Vierailijat voivat käyttää Chromea jälkiä jättämättä.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
index 1182ff9..61a28f4 100644
--- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Redémarrer Chrome OS</translation>
 <translation id="5132929315877954718">Découvrez des applications, des jeux, des extensions et des thèmes exceptionnels conçus pour Google Chrome.</translation>
+<translation id="5139423532931106058">Personnaliser votre profil Chrome</translation>
+<translation id="5163087008893166964">Bienvenue à Chrome, une nouvelle fenêtre de navigateur a été ouverte</translation>
 <translation id="5170938038195470297">Votre profil ne peut pas être utilisé parce qu'il provient d'une version plus récente de Google Chrome.
 
 Certaines fonctionnalités peuvent être inaccessibles. Veuillez spécifier un répertoire de profil différent ou utiliser une version plus récente de Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb
index eb15d54..c4705c0 100644
--- a/chrome/app/resources/google_chrome_strings_gl.xtb
+++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Reinicia Chrome OS</translation>
 <translation id="5132929315877954718">Descubre aplicacións, xogos, extensións e temas fantásticos para Google Chrome.</translation>
+<translation id="5139423532931106058">Personalizar o teu perfil de Chrome</translation>
+<translation id="5163087008893166964">Dámosche a benvida a Chrome. Abriuse unha nova ventá do navegador</translation>
 <translation id="5170938038195470297">Non se pode utilizar o teu perfil porque pertence a unha versión máis recente de Google Chrome.
 
 É posible que algunhas funcións non estean dispoñibles. Especifica un directorio de perfil diferente ou utiliza unha versión máis recente de Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb
index 184e1ad..a9a8c99 100644
--- a/chrome/app/resources/google_chrome_strings_hy.xtb
+++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -154,6 +154,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Chrome OS-ի վերագործարկում</translation>
 <translation id="5132929315877954718">Հավելվածների, խաղերի, ընդլայնումների և թեմաների լայն ընտրանի Google Chrome-ի համար:</translation>
+<translation id="5139423532931106058">Անհատականացնել Chrome-ի պրոֆիլը</translation>
+<translation id="5163087008893166964">Բարի գալուստ Chrome․ բացված է դիտարկիչի նոր պատուհան</translation>
 <translation id="5170938038195470297">Դուք չեք կարող օգտագործել ձեր պրոֆիլը, քանի որ այն Google Chrome-ի նոր տարբերակով է:
 
 Որոշ գործառույթներ մատչելի չեն լինի: Նշեք պրոֆիլի այլ գրացուցակ կամ օգտագործեք Chrome-ի նոր տարբերակը:</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb
index 826eb1b9..2bb5fc6 100644
--- a/chrome/app/resources/google_chrome_strings_lt.xtb
+++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">„Chrome“ OS paleidimas iš naujo</translation>
 <translation id="5132929315877954718">Suraskite puikių „Google Chrome“ programų, žaidimų, plėtinių ir temų.</translation>
+<translation id="5139423532931106058">Tinkinti „Chrome“ profilį</translation>
+<translation id="5163087008893166964">Sveiki, tai – „Chrome“; atidarytas naujas naršyklės langas</translation>
 <translation id="5170938038195470297">Jūsų profilio negalima naudoti, nes jis iš naujesnės „Google Chrome“ versijos.
 
 Kai kurios funkcijos gali būti nepasiekiamos. Nurodykite kitą profilio katalogą arba naudokite naujesnės versijos „Chrome“.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb
index e9a8c4d..c5ef306 100644
--- a/chrome/app/resources/google_chrome_strings_mk.xtb
+++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Канари</translation>
 <translation id="5062123544085870375">Рестартирајте го Chrome OS</translation>
 <translation id="5132929315877954718">Открива одлични апликации, игри, наставки и теми за Google Chrome.</translation>
+<translation id="5139423532931106058">Приспособете го вашиот профил на Chrome</translation>
+<translation id="5163087008893166964">Добре дојдовте на Chrome; отворен е нов прозорец во прелистувачот</translation>
 <translation id="5170938038195470297">Вашиот профил на може да се користи бидејќи е од поновата верзија на Google Chrome.
 
 Некои карактеристики можеби се недостапни. Наведете друг директориум на профили или користете понова верзија на Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb
index 8883e60..d4ec6e6 100644
--- a/chrome/app/resources/google_chrome_strings_ml.xtb
+++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Chrome OS പുനഃരാരംഭിക്കുക</translation>
 <translation id="5132929315877954718">Google Chrome-നായി മികച്ച അപ്ലിക്കേഷനുകളും വിപുലീകരണങ്ങളും തീമുകളും കണ്ടെത്തുക.</translation>
+<translation id="5139423532931106058">നിങ്ങളുടെ Chrome പ്രൊഫൈൽ ഇഷ്‌ടാനുസൃതമാക്കുക</translation>
+<translation id="5163087008893166964">Chrome-ലേക്ക് സ്വാഗതം; പുതിയ ബ്രൗസർ വിൻഡോ തുറന്നു</translation>
 <translation id="5170938038195470297">നിങ്ങളുടെ പ്രൊഫൈൽ Google Chrome-ന്റെ ഒരു പുതിയ പതിപ്പിൽ നിന്നായതിനാൽ ഉപയോഗിക്കാൻ കഴിയില്ല.
 
 ചില സവിശേഷതകൾ ലഭ്യമല്ലാതായിരിക്കാം. ദയവായി ഒരു വ്യത്യസ്തമായ പ്രൊഫൈൽ ഡയറക്ടറി വ്യക്തമാക്കുക അല്ലെങ്കിൽ Chrome-ന്റെ ഒരു പുതിയ പതിപ്പ് ഉപയോഗിക്കുക.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb
index 55230e5..011285d 100644
--- a/chrome/app/resources/google_chrome_strings_ro.xtb
+++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -152,6 +152,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Repornește sistemul de operare Chrome</translation>
 <translation id="5132929315877954718">Descoperă aplicații, jocuri, extensii și teme extraordinare pentru Google Chrome.</translation>
+<translation id="5139423532931106058">Personalizează-ți profilul Chrome</translation>
+<translation id="5163087008893166964">Bun venit la Chrome; fereastră de browser nouă deschisă</translation>
 <translation id="5170938038195470297">Profilul dvs. nu poate fi utilizat, deoarece provine de la o versiune Google Chrome mai recentă. Este posibil ca unele funcții să nu fie disponibile. Specificați un director de profil diferit sau utilizați o versiune Chrome mai nouă.</translation>
 <translation id="5193136243808726294">Sistemul de operare Google Chrome nu poate deschide pagina.</translation>
 <translation id="5251420635869119124">Invitații pot folosi Chrome fără a lăsa nicio urmă.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb
index b1604f14..58574c0 100644
--- a/chrome/app/resources/google_chrome_strings_si.xtb
+++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Chrome OS යළි අරඹන්න</translation>
 <translation id="5132929315877954718">Google Chrome සඳහා විශිෂ්ට යෙදුම්, ක්‍රීඩා, දිගු සහ තේමා සොයා ගන්න.</translation>
+<translation id="5139423532931106058">ඔබගේ Chrome පැතිකඩ අභිරුචිකරණය කරන්න</translation>
+<translation id="5163087008893166964">Chrome වෙත සාදරයෙන් පිළිගනිමු; නව බ්‍රවුසර කවුළුවක් විවෘත කරන ලදි</translation>
 <translation id="5170938038195470297">ඔබේ පැතිකඩ Google Chrome නව සංස්කරණයකින් එන බැවින් භාවිත කළ නොහැක.
 
 ඇතැම් විශේෂාංග නොපවතිනු ඇත. කරුණාකර Chrome නි නව සංස්කරණය භාවිතයට වෙනස් පැතිකඩ නාමාවලියක් භාවිත කරන්න.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb
index 92412859..c281ef80 100644
--- a/chrome/app/resources/google_chrome_strings_sk.xtb
+++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -154,6 +154,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Reštartovanie Chrome OS</translation>
 <translation id="5132929315877954718">Objavte skvelé aplikácie, hry, rozšírenia a motívy pre prehliadač Google Chrome.</translation>
+<translation id="5139423532931106058">Prispôsobiť profil Chromu</translation>
+<translation id="5163087008893166964">Vitajte v Chrome, otvorilo sa nové okno prehliadača</translation>
 <translation id="5170938038195470297">Váš profil sa nedá použiť, pretože pochádza z novšej verzie prehliadača Google Chrome.
 
 Niektoré funkcie môžu byť nedostupné. Zadajte iný adresár profilu alebo použite novšiu verziu prehliadača Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb
index e38243e6..77d50d7 100644
--- a/chrome/app/resources/google_chrome_strings_sq.xtb
+++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -156,6 +156,8 @@
 <translation id="4990567037958725628">Google Chrome Canary</translation>
 <translation id="5062123544085870375">Rinis Chrome OS</translation>
 <translation id="5132929315877954718">Zbulo aplikacione, lojëra, shtesa dhe tema të mrekullueshme për Google Chrome.</translation>
+<translation id="5139423532931106058">Personalizo profilin tënd të Chrome</translation>
+<translation id="5163087008893166964">Mirë se erdhe në Chrome. U hap një dritare e re e shfletuesit</translation>
 <translation id="5170938038195470297">Profili yt nuk mund të përdoret sepse është nga një version më i ri i Google Chrome.
 
 Disa funksione mund të mos ofrohen. Specifiko një direktori tjetër të profilit ose përdor një version më të ri të Chrome.</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 4a9c970..e28c69c 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1659,6 +1659,25 @@
       kResamplingInputEventsLinearResamplingEnabled,
       base::size(kResamplingInputEventsLinearResamplingEnabled), nullptr}};
 
+const FeatureEntry::FeatureParam
+    kResamplingScrollEventsPredictionTimeBasedEnabled[] = {
+        {"mode", features::kPredictionTypeTimeBased},
+        {"latency", features::kPredictionTypeDefaultTime}};
+const FeatureEntry::FeatureParam
+    kResamplingScrollEventsPredictionFramesBasedEnabled[] = {
+        {"mode", features::kPredictionTypeFramesBased},
+        {"latency", features::kPredictionTypeDefaultFramesRatio}};
+const FeatureEntry::FeatureVariation
+    kResamplingScrollEventsExperimentalPredictionVariations[] = {
+        {features::kPredictionTypeTimeBased,
+         kResamplingScrollEventsPredictionTimeBasedEnabled,
+         base::size(kResamplingScrollEventsPredictionTimeBasedEnabled),
+         nullptr},
+        {features::kPredictionTypeFramesBased,
+         kResamplingScrollEventsPredictionFramesBasedEnabled,
+         base::size(kResamplingScrollEventsPredictionFramesBasedEnabled),
+         nullptr}};
+
 const FeatureEntry::FeatureParam kFilteringPredictionEmptyFilterEnabled[] = {
     {"filter", features::kFilterNameEmpty}};
 const FeatureEntry::FeatureParam kFilteringPredictionOneEuroFilterEnabled[] = {
@@ -2469,6 +2488,15 @@
 };
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
+constexpr FeatureEntry::FeatureParam kPlatformProvidedTrustTokenIssuance[] = {
+    {"PlatformProvidedTrustTokenIssuance", "true"}};
+
+constexpr FeatureEntry::FeatureVariation
+    kPlatformProvidedTrustTokensVariations[] = {
+        {"with platform-provided trust token issuance",
+         kPlatformProvidedTrustTokenIssuance,
+         base::size(kPlatformProvidedTrustTokenIssuance), nullptr}};
+
 // RECORDING USER METRICS FOR FLAGS:
 // -----------------------------------------------------------------------------
 // The first line of the entry is the internal name.
@@ -4967,6 +4995,18 @@
                                     kResamplingInputEventsFeatureVariations,
                                     "ResamplingScrollEvents")},
 
+    // Should only be available if kResamplingScrollEvents is on, and using
+    // linear resampling.
+    {"enable-resampling-scroll-events-experimental-prediction",
+     flag_descriptions::kEnableResamplingScrollEventsExperimentalPredictionName,
+     flag_descriptions::
+         kEnableResamplingScrollEventsExperimentalPredictionDescription,
+     kOsAll,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         ::features::kResamplingScrollEventsExperimentalPrediction,
+         kResamplingScrollEventsExperimentalPredictionVariations,
+         "ResamplingScrollEventsExperimentalLatency")},
+
     {"enable-filtering-scroll-events",
      flag_descriptions::kFilteringScrollPredictionName,
      flag_descriptions::kFilteringScrollPredictionDescription, kOsAll,
@@ -5356,10 +5396,6 @@
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 #if defined(TOOLKIT_VIEWS)
-    {"enable-md-rounded-corners-on-dialogs",
-     flag_descriptions::kEnableMDRoundedCornersOnDialogsName,
-     flag_descriptions::kEnableMDRoundedCornersOnDialogsDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(views::features::kEnableMDRoundedCornersOnDialogs)},
 
     {"enable-new-badge-on-menu-items",
      flag_descriptions::kEnableNewBadgeOnMenuItemsName,
@@ -6308,7 +6344,9 @@
 
     {"trust-tokens", flag_descriptions::kTrustTokensName,
      flag_descriptions::kTrustTokensDescription, kOsAll,
-     FEATURE_VALUE_TYPE(network::features::kTrustTokens)},
+     FEATURE_WITH_PARAMS_VALUE_TYPE(network::features::kTrustTokens,
+                                    kPlatformProvidedTrustTokensVariations,
+                                    "TrustTokenOriginTrial")},
 
 #if defined(OS_ANDROID)
     {"android-partner-customization-phenotype",
@@ -6627,7 +6665,7 @@
 
 #if BUILDFLAG(ENABLE_AV1_DECODER)
     {"enable-avif", flag_descriptions::kEnableAVIFName,
-     flag_descriptions::kEnableAVIFDescription, kOsDesktop,
+     flag_descriptions::kEnableAVIFDescription, kOsAll,
      FEATURE_VALUE_TYPE(blink::features::kAVIF)},
 #endif  // BUILDFLAG(ENABLE_AV1_DECODER)
 
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc
index dd979e1..88fa318c 100644
--- a/chrome/browser/android/autofill_assistant/client_android.cc
+++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -181,7 +181,7 @@
     const base::android::JavaParamRef<jobjectArray>& jparameter_values,
     jlong jservice_request_sender) {
   trigger_script_bridge_.StartTriggerScript(
-      this, jdelegate,
+      web_contents_, jdelegate,
       GURL(base::android::ConvertJavaStringToUTF8(env, jinitial_url)),
       CreateTriggerContext(env, jexperiment_ids, jparameter_names,
                            jparameter_values),
@@ -531,11 +531,6 @@
   return has_had_ui_;
 }
 
-bool ClientAndroid::IsFirstTimeTriggerScriptUser() const {
-  return Java_AutofillAssistantClient_isFirstTimeTriggerScriptUser(
-      AttachCurrentThread());
-}
-
 void ClientAndroid::Shutdown(Metrics::DropOutReason reason) {
   if (!controller_)
     return;
diff --git a/chrome/browser/android/autofill_assistant/client_android.h b/chrome/browser/android/autofill_assistant/client_android.h
index 16725e6..11de1d8 100644
--- a/chrome/browser/android/autofill_assistant/client_android.h
+++ b/chrome/browser/android/autofill_assistant/client_android.h
@@ -124,7 +124,6 @@
   void Shutdown(Metrics::DropOutReason reason) override;
   void RecordDropOut(Metrics::DropOutReason reason) override;
   bool HasHadUI() const override;
-  bool IsFirstTimeTriggerScriptUser() const override;
 
   // Overrides AccessTokenFetcher
   void FetchAccessToken(
diff --git a/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.cc b/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.cc
index 6d16171..a6230d4 100644
--- a/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.cc
+++ b/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.cc
@@ -10,6 +10,7 @@
 #include "chrome/android/features/autofill_assistant/jni_headers/AssistantTriggerScriptBridge_jni.h"
 #include "chrome/browser/android/autofill_assistant/assistant_header_model.h"
 #include "chrome/browser/android/autofill_assistant/ui_controller_android_utils.h"
+#include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/common/channel_info.h"
 #include "components/autofill_assistant/browser/service/api_key_fetcher.h"
 #include "components/autofill_assistant/browser/service/server_url_fetcher.h"
@@ -20,6 +21,7 @@
 #include "components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.h"
 #include "components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h"
 #include "components/autofill_assistant/browser/web/web_controller.h"
+#include "components/autofill_assistant/browser/website_login_manager_impl.h"
 #include "content/public/browser/web_contents.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 
@@ -29,13 +31,21 @@
 using base::android::ToJavaArrayOfStrings;
 using base::android::ToJavaIntArray;
 
+namespace {
+bool IsFirstTimeTriggerScriptUser() {
+  return autofill_assistant::
+      Java_AssistantTriggerScriptBridge_isFirstTimeTriggerScriptUser(
+          AttachCurrentThread());
+}
+}  // namespace
+
 namespace autofill_assistant {
 
 TriggerScriptBridgeAndroid::TriggerScriptBridgeAndroid() = default;
 TriggerScriptBridgeAndroid::~TriggerScriptBridgeAndroid() = default;
 
 void TriggerScriptBridgeAndroid::StartTriggerScript(
-    Client* client,
+    content::WebContents* web_contents,
     const JavaParamRef<jobject>& jdelegate,
     const GURL& initial_url,
     std::unique_ptr<TriggerContext> trigger_context,
@@ -59,7 +69,7 @@
             base::Base64UrlDecodePolicy::IGNORE_PADDING, &response)) {
       LOG(ERROR) << "Failed to base64-decode trigger scripts response";
       Metrics::RecordLiteScriptFinished(
-          ukm::UkmRecorder::Get(), client->GetWebContents(),
+          ukm::UkmRecorder::Get(), web_contents,
           Metrics::LiteScriptFinishedState::LITE_SCRIPT_BASE64_DECODING_ERROR);
       return;
     }
@@ -67,7 +77,7 @@
         std::make_unique<ServiceRequestSenderLocalImpl>(response);
   } else {
     service_request_sender = std::make_unique<ServiceRequestSenderImpl>(
-        client->GetWebContents()->GetBrowserContext(),
+        web_contents->GetBrowserContext(),
         /* access_token_fetcher = */ nullptr,
         std::make_unique<NativeURLLoaderFactory>(),
         ApiKeyFetcher().GetAPIKey(chrome::GetChannel()),
@@ -76,8 +86,15 @@
   }
 
   ServerUrlFetcher url_fetcher{ServerUrlFetcher::GetDefaultServerUrl()};
+  if (!website_login_manager_) {
+    website_login_manager_ = std::make_unique<WebsiteLoginManagerImpl>(
+        ChromePasswordManagerClient::FromWebContents(web_contents),
+        web_contents);
+  }
   trigger_script_coordinator_ = std::make_unique<TriggerScriptCoordinator>(
-      client, WebController::CreateForWebContents(client->GetWebContents()),
+      web_contents, website_login_manager_.get(),
+      base::BindRepeating(&IsFirstTimeTriggerScriptUser),
+      WebController::CreateForWebContents(web_contents),
       std::move(service_request_sender),
       url_fetcher.GetTriggerScriptsEndpoint(),
       std::make_unique<StaticTriggerConditions>(),
diff --git a/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h b/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h
index a7d7926..a7b2c1b 100644
--- a/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h
+++ b/chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h
@@ -11,7 +11,6 @@
 
 #include "base/android/jni_android.h"
 #include "base/optional.h"
-#include "components/autofill_assistant/browser/client.h"
 #include "components/autofill_assistant/browser/metrics.h"
 #include "components/autofill_assistant/browser/service.pb.h"
 #include "components/autofill_assistant/browser/trigger_context.h"
@@ -31,7 +30,7 @@
 
   // Attempts to start a trigger script on |initial_url|. Will communicate with
   // |jdelegate| to show/hide UI as necessary.
-  void StartTriggerScript(Client* client,
+  void StartTriggerScript(content::WebContents* web_contents,
                           const base::android::JavaParamRef<jobject>& jdelegate,
                           const GURL& initial_url,
                           std::unique_ptr<TriggerContext> trigger_context,
@@ -82,6 +81,10 @@
   void OnTriggerScriptFinished(Metrics::LiteScriptFinishedState state) override;
   void OnVisibilityChanged(bool visible) override;
 
+  // The login manager for fetching login credentials.
+  // TODO(arbesser) move this to the owner of trigger_script_bridge_android.
+  std::unique_ptr<WebsiteLoginManager> website_login_manager_;
+
   // Reference to the Java counterpart to this class.
   base::android::ScopedJavaGlobalRef<jobject> java_object_;
   bool disable_header_animations_for_testing_ = false;
diff --git a/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc b/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
index bb0ff16..7f57350 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
@@ -15,9 +15,11 @@
 #include "chrome/browser/android/webapps/add_to_homescreen_params.h"
 #include "chrome/browser/banners/app_banner_manager.h"
 
+namespace webapps {
+
 // static
 bool AddToHomescreenCoordinator::ShowForAppBanner(
-    base::WeakPtr<webapps::AppBannerManager> weak_manager,
+    base::WeakPtr<AppBannerManager> weak_manager,
     std::unique_ptr<AddToHomescreenParams> params,
     base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
                                  const AddToHomescreenParams&)>
@@ -36,3 +38,5 @@
                               std::move(event_callback));
   return true;
 }
+
+}  // namespace webapps
diff --git a/chrome/browser/android/webapps/add_to_homescreen_coordinator.h b/chrome/browser/android/webapps/add_to_homescreen_coordinator.h
index 7965ebc5..81a2f40 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_coordinator.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_coordinator.h
@@ -11,11 +11,10 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/android/webapps/add_to_homescreen_installer.h"
 
-struct AddToHomescreenParams;
-
 namespace webapps {
+
+struct AddToHomescreenParams;
 class AppBannerManager;
-}
 
 // AddToHomescreenCoordinator is the C++ counterpart of org.chromium.chrome.
 // browser.webapps.addtohomescreen.AddToHomescreenCoordinator in Java.
@@ -23,7 +22,7 @@
  public:
   // Called for showing the add-to-homescreen UI for AppBannerManager.
   static bool ShowForAppBanner(
-      base::WeakPtr<webapps::AppBannerManager> weak_manager,
+      base::WeakPtr<AppBannerManager> weak_manager,
       std::unique_ptr<AddToHomescreenParams> params,
       base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
                                    const AddToHomescreenParams&)>
@@ -35,4 +34,6 @@
       delete;
 };
 
+}  // namespace webapps
+
 #endif  // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_COORDINATOR_H_
diff --git a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
index 9c0e145..e8619b6 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
@@ -39,6 +39,8 @@
 #include "ui/gfx/favicon_size.h"
 #include "url/gurl.h"
 
+namespace webapps {
+
 namespace {
 
 // Looks up the original, online, visible URL of |web_contents|. The current
@@ -49,23 +51,23 @@
       web_contents->GetVisibleURL());
 }
 
-webapps::InstallableParams ParamsToPerformManifestAndIconFetch() {
-  webapps::InstallableParams params;
+InstallableParams ParamsToPerformManifestAndIconFetch() {
+  InstallableParams params;
   params.valid_primary_icon = true;
   params.prefer_maskable_icon =
-      webapps::WebappsIconUtils::DoesAndroidSupportMaskableIcons();
+      WebappsIconUtils::DoesAndroidSupportMaskableIcons();
   params.wait_for_worker = true;
   return params;
 }
 
-webapps::InstallableParams ParamsToPerformInstallableCheck() {
-  webapps::InstallableParams params;
+InstallableParams ParamsToPerformInstallableCheck() {
+  InstallableParams params;
   params.check_eligibility = true;
   params.valid_manifest = true;
   params.has_worker = true;
   params.valid_primary_icon = true;
   params.prefer_maskable_icon =
-      webapps::WebappsIconUtils::DoesAndroidSupportMaskableIcons();
+      WebappsIconUtils::DoesAndroidSupportMaskableIcons();
   params.wait_for_worker = true;
   return params;
 }
@@ -82,9 +84,8 @@
     scoped_refptr<base::SequencedTaskRunner> ui_thread_task_runner,
     base::OnceCallback<void(const SkBitmap&, bool)> callback) {
   bool is_generated = false;
-  SkBitmap primary_icon =
-      webapps::WebappsIconUtils::FinalizeLauncherIconInBackground(
-          icon, maskable, start_url, &is_generated);
+  SkBitmap primary_icon = WebappsIconUtils::FinalizeLauncherIconInBackground(
+      icon, maskable, start_url, &is_generated);
   ui_thread_task_runner->PostTask(
       FROM_HERE,
       base::BindOnce(std::move(callback), primary_icon, is_generated));
@@ -120,8 +121,7 @@
     int data_timeout_ms,
     Observer* observer)
     : content::WebContentsObserver(web_contents),
-      installable_manager_(
-          webapps::InstallableManager::FromWebContents(web_contents)),
+      installable_manager_(InstallableManager::FromWebContents(web_contents)),
       observer_(observer),
       shortcut_info_(GetShortcutUrl(web_contents)),
       has_maskable_primary_icon_(false),
@@ -172,7 +172,7 @@
           chrome::mojom::WebPageMobileCapable::ENABLED_APPLE) {
     shortcut_info_.display = blink::mojom::DisplayMode::kStandalone;
     shortcut_info_.UpdateSource(
-        webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_STANDALONE);
+        ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_STANDALONE);
   }
 
   // Record what type of shortcut was added by the user.
@@ -225,7 +225,7 @@
 }
 
 void AddToHomescreenDataFetcher::OnDidGetManifestAndIcons(
-    const webapps::InstallableData& data) {
+    const InstallableData& data) {
   if (!web_contents())
     return;
 
@@ -254,9 +254,9 @@
 
   // Save the splash screen URL for the later download.
   shortcut_info_.ideal_splash_image_size_in_px =
-      webapps::WebappsIconUtils::GetIdealSplashImageSizeInPx();
+      WebappsIconUtils::GetIdealSplashImageSizeInPx();
   shortcut_info_.minimum_splash_image_size_in_px =
-      webapps::WebappsIconUtils::GetMinimumSplashImageSizeInPx();
+      WebappsIconUtils::GetMinimumSplashImageSizeInPx();
   shortcut_info_.splash_image_url =
       blink::ManifestIconSelector::FindBestMatchingSquareIcon(
           data.manifest->icons, shortcut_info_.ideal_splash_image_size_in_px,
@@ -270,7 +270,7 @@
 }
 
 void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
-    const webapps::InstallableData& data) {
+    const InstallableData& data) {
   StopTimer();
 
   if (!web_contents())
@@ -278,8 +278,7 @@
 
   bool webapk_compatible =
       (data.NoBlockingErrors() && data.valid_manifest && data.has_worker &&
-       webapps::WebappsUtils::AreWebManifestUrlsWebApkCompatible(
-           *data.manifest));
+       WebappsUtils::AreWebManifestUrlsWebApkCompatible(*data.manifest));
   observer_->OnUserTitleAvailable(
       webapk_compatible ? shortcut_info_.name : shortcut_info_.user_title,
       shortcut_info_.url, webapk_compatible);
@@ -290,8 +289,7 @@
     // that icon is maskable.
     should_use_created_icon_for_launcher = false;
     primary_icon_ = raw_primary_icon_;
-    shortcut_info_.UpdateSource(
-        webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
+    shortcut_info_.UpdateSource(ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
     if (!has_maskable_primary_icon_) {
       // We can skip creating an icon for the view because the raw icon is
       // sufficient when WebAPK-compatible and the icon is non-maskable.
@@ -323,7 +321,7 @@
   // Using favicon if its size is not smaller than platform required size,
   // otherwise using the largest icon among all available icons.
   int threshold_to_get_any_largest_icon =
-      webapps::WebappsIconUtils::GetIdealHomescreenIconSizeInPx() - 1;
+      WebappsIconUtils::GetIdealHomescreenIconSizeInPx() - 1;
   favicon_service->GetLargestRawFaviconForPageURL(
       shortcut_info_.url, icon_types, threshold_to_get_any_largest_icon,
       base::BindOnce(&AddToHomescreenDataFetcher::OnFaviconFetched,
@@ -387,3 +385,5 @@
 
   observer_->OnDataAvailable(shortcut_info_, icon_for_view);
 }
+
+}  // namespace webapps
diff --git a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h
index b08ab17..a0c8d8a 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h
@@ -21,9 +21,9 @@
 }
 
 namespace webapps {
+
 class InstallableManager;
 struct InstallableData;
-}  // namespace webapps
 
 // Aysnchronously fetches and processes data needed to create a shortcut for an
 // Android Home screen launcher.
@@ -39,7 +39,7 @@
 
     // Called when all the data needed to prompt the user to add to home screen
     // is available.
-    virtual void OnDataAvailable(const webapps::ShortcutInfo& info,
+    virtual void OnDataAvailable(const ShortcutInfo& info,
                                  const SkBitmap& primary_icon) = 0;
 
    protected:
@@ -64,7 +64,7 @@
 
   // Accessors, etc.
   const SkBitmap& primary_icon() const { return primary_icon_; }
-  webapps::ShortcutInfo& shortcut_info() { return shortcut_info_; }
+  ShortcutInfo& shortcut_info() { return shortcut_info_; }
   bool has_maskable_primary_icon() const { return has_maskable_primary_icon_; }
 
  private:
@@ -75,10 +75,10 @@
   void OnDataTimedout();
 
   // Called when InstallableManager finishes looking for a manifest and icon.
-  void OnDidGetManifestAndIcons(const webapps::InstallableData& data);
+  void OnDidGetManifestAndIcons(const InstallableData& data);
 
   // Called when InstallableManager finishes checking for installability.
-  void OnDidPerformInstallableCheck(const webapps::InstallableData& data);
+  void OnDidPerformInstallableCheck(const InstallableData& data);
 
   // Grabs the favicon for the current URL.
   void FetchFavicon();
@@ -95,13 +95,13 @@
                      const SkBitmap& icon_for_view,
                      bool is_icon_generated);
 
-  webapps::InstallableManager* installable_manager_;
+  InstallableManager* installable_manager_;
   Observer* observer_;
 
   // The icons must only be set on the UI thread for thread safety.
   SkBitmap raw_primary_icon_;
   SkBitmap primary_icon_;
-  webapps::ShortcutInfo shortcut_info_;
+  ShortcutInfo shortcut_info_;
   bool has_maskable_primary_icon_;
 
   base::CancelableTaskTracker favicon_task_tracker_;
@@ -119,4 +119,6 @@
       delete;
 };
 
+}  // namespace webapps
+
 #endif  // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_DATA_FETCHER_H_
diff --git a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher_unittest.cc b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher_unittest.cc
index db5bc7a..3e73052b 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher_unittest.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher_unittest.cc
@@ -78,7 +78,7 @@
     is_webapk_compatible_ = is_webapk_compatible;
   }
 
-  void OnDataAvailable(const webapps::ShortcutInfo& info,
+  void OnDataAvailable(const ShortcutInfo& info,
                        const SkBitmap& primary_icon) override {
     // This should only be called once.
     EXPECT_FALSE(data_available_);
diff --git a/chrome/browser/android/webapps/add_to_homescreen_installer.cc b/chrome/browser/android/webapps/add_to_homescreen_installer.cc
index 6d547f1..dc0afa5 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_installer.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_installer.cc
@@ -13,6 +13,8 @@
 #include "chrome/browser/android/webapk/webapk_install_service.h"
 #include "content/public/browser/web_contents.h"
 
+namespace webapps {
+
 // static
 void AddToHomescreenInstaller::Install(
     content::WebContents* web_contents,
@@ -77,3 +79,5 @@
       web_contents, *(params.shortcut_info), params.primary_icon,
       params.has_maskable_primary_icon);
 }
+
+}  // namespace webapps
diff --git a/chrome/browser/android/webapps/add_to_homescreen_installer.h b/chrome/browser/android/webapps/add_to_homescreen_installer.h
index 8038c90..43bbef7 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_installer.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_installer.h
@@ -12,6 +12,8 @@
 class WebContents;
 }
 
+namespace webapps {
+
 // Helper class for installing a web app or an Android native app and recording
 // related UMA.
 class AddToHomescreenInstaller {
@@ -53,4 +55,6 @@
   AddToHomescreenInstaller& operator=(const AddToHomescreenInstaller&) = delete;
 };
 
+}  // namespace webapps
+
 #endif  // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_INSTALLER_H_
diff --git a/chrome/browser/android/webapps/add_to_homescreen_mediator.cc b/chrome/browser/android/webapps/add_to_homescreen_mediator.cc
index 7f063e6..1114b21 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_mediator.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_mediator.cc
@@ -25,6 +25,8 @@
 using base::android::JavaParamRef;
 using base::android::ScopedJavaLocalRef;
 
+namespace webapps {
+
 namespace {
 
 // The length of time to allow the add to homescreen data fetcher to run before
@@ -57,7 +59,7 @@
 }
 
 void AddToHomescreenMediator::StartForAppBanner(
-    base::WeakPtr<webapps::AppBannerManager> weak_manager,
+    base::WeakPtr<AppBannerManager> weak_manager,
     std::unique_ptr<AddToHomescreenParams> params,
     base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
                                  const AddToHomescreenParams&)>
@@ -169,19 +171,18 @@
   SetWebAppInfo(user_title, url, is_webapk_compatible);
 }
 
-void AddToHomescreenMediator::OnDataAvailable(const webapps::ShortcutInfo& info,
+void AddToHomescreenMediator::OnDataAvailable(const ShortcutInfo& info,
                                               const SkBitmap& display_icon) {
   params_ = std::make_unique<AddToHomescreenParams>();
-  params_->app_type =
-      info.source == webapps::ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA
-          ? AddToHomescreenParams::AppType::WEBAPK
-          : AddToHomescreenParams::AppType::SHORTCUT;
-  params_->shortcut_info = std::make_unique<webapps::ShortcutInfo>(info);
+  params_->app_type = info.source == ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA
+                          ? AddToHomescreenParams::AppType::WEBAPK
+                          : AddToHomescreenParams::AppType::SHORTCUT;
+  params_->shortcut_info = std::make_unique<ShortcutInfo>(info);
   params_->primary_icon = data_fetcher_->primary_icon();
   params_->has_maskable_primary_icon =
       data_fetcher_->has_maskable_primary_icon();
-  params_->install_source = webapps::InstallableMetrics::GetInstallSource(
-      data_fetcher_->web_contents(), webapps::InstallTrigger::MENU);
+  params_->install_source = InstallableMetrics::GetInstallSource(
+      data_fetcher_->web_contents(), InstallTrigger::MENU);
 
   // AddToHomescreenMediator::OnDataAvailable() is called in the code path
   // to show A2HS dialog from app menu. In this code path, display_icon is
@@ -194,17 +195,17 @@
 
   DCHECK_NE(-1, title_id_);
   switch (title_id_) {
-    case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_UNKNOWN: {
+    case AppBannerSettingsHelper::APP_MENU_OPTION_UNKNOWN: {
       entry = is_webapk ? AppTypeToMenuEntry::kUnknownMenuEntryForWebApp
                         : AppTypeToMenuEntry::kUnknownMenuEntryForShortcut;
       break;
     }
-    case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_ADD_TO_HOMESCREEN: {
+    case AppBannerSettingsHelper::APP_MENU_OPTION_ADD_TO_HOMESCREEN: {
       entry = is_webapk ? AppTypeToMenuEntry::kAddToHomeScreenShownForWebApp
                         : AppTypeToMenuEntry::kAddToHomeScreenShownForShortcut;
       break;
     }
-    case webapps::AppBannerSettingsHelper::APP_MENU_OPTION_INSTALL: {
+    case AppBannerSettingsHelper::APP_MENU_OPTION_INSTALL: {
       entry = is_webapk ? AppTypeToMenuEntry::kInstallShownForWebApp
                         : AppTypeToMenuEntry::kInstallShownForShortcut;
       break;
@@ -229,16 +230,15 @@
   DCHECK_NE(a2hs_params.app_type, AddToHomescreenParams::AppType::NATIVE);
   switch (event) {
     case AddToHomescreenInstaller::Event::INSTALL_STARTED:
-      webapps::AppBannerSettingsHelper::RecordBannerEvent(
+      AppBannerSettingsHelper::RecordBannerEvent(
           web_contents, web_contents->GetVisibleURL(),
           a2hs_params.shortcut_info->url.spec(),
-          webapps::AppBannerSettingsHelper::
-              APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
+          AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
           base::Time::Now());
       break;
     case AddToHomescreenInstaller::Event::INSTALL_REQUEST_FINISHED: {
-      webapps::AppBannerManagerAndroid* app_banner_manager =
-          webapps::AppBannerManagerAndroid::FromWebContents(web_contents);
+      AppBannerManagerAndroid* app_banner_manager =
+          AppBannerManagerAndroid::FromWebContents(web_contents);
       // Fire the appinstalled event and do install time logging.
       if (app_banner_manager)
         app_banner_manager->OnInstall(a2hs_params.shortcut_info->display);
@@ -258,3 +258,5 @@
 
   return nullptr;
 }
+
+}  // namespace webapps
diff --git a/chrome/browser/android/webapps/add_to_homescreen_mediator.h b/chrome/browser/android/webapps/add_to_homescreen_mediator.h
index 9098e240..f69a2cc7 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_mediator.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_mediator.h
@@ -23,9 +23,8 @@
 }
 
 namespace webapps {
-struct ShortcutInfo;
-}
 
+struct ShortcutInfo;
 class AddToHomescreenInstaller;
 
 // AddToHomescreenMediator is the C++ counterpart of
@@ -41,7 +40,7 @@
       const base::android::JavaParamRef<jobject>& java_ref);
 
   void StartForAppBanner(
-      base::WeakPtr<webapps::AppBannerManager> weak_manager,
+      base::WeakPtr<AppBannerManager> weak_manager,
       std::unique_ptr<AddToHomescreenParams> params,
       base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
                                    const AddToHomescreenParams&)>
@@ -84,7 +83,7 @@
                             const GURL& url,
                             bool is_webapk_compatible) override;
 
-  void OnDataAvailable(const webapps::ShortcutInfo& info,
+  void OnDataAvailable(const ShortcutInfo& info,
                        const SkBitmap& display_icon) override;
 
   void RecordEventForAppMenu(AddToHomescreenInstaller::Event event,
@@ -95,7 +94,7 @@
   // Points to the Java reference.
   base::android::ScopedJavaGlobalRef<jobject> java_ref_;
 
-  base::WeakPtr<webapps::AppBannerManager> weak_app_banner_manager_;
+  base::WeakPtr<AppBannerManager> weak_app_banner_manager_;
 
   // Fetches data required to add a shortcut.
   std::unique_ptr<AddToHomescreenDataFetcher> data_fetcher_;
@@ -112,4 +111,6 @@
   AddToHomescreenMediator& operator=(const AddToHomescreenMediator&) = delete;
 };
 
+}  // namespace webapps
+
 #endif  // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_MEDIATOR_H_
diff --git a/chrome/browser/android/webapps/add_to_homescreen_params.cc b/chrome/browser/android/webapps/add_to_homescreen_params.cc
index 96431cd..5265762 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_params.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_params.cc
@@ -6,5 +6,9 @@
 
 #include "components/webapps/android/shortcut_info.h"
 
+namespace webapps {
+
 AddToHomescreenParams::AddToHomescreenParams() = default;
 AddToHomescreenParams::~AddToHomescreenParams() = default;
+
+}  // namespace webapps
diff --git a/chrome/browser/android/webapps/add_to_homescreen_params.h b/chrome/browser/android/webapps/add_to_homescreen_params.h
index 0c217dd..4a5a44c 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_params.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_params.h
@@ -13,8 +13,8 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace webapps {
+
 struct ShortcutInfo;
-}
 
 struct AddToHomescreenParams {
   // A Java counterpart will be generated for this enum.
@@ -29,8 +29,8 @@
   AppType app_type;
   SkBitmap primary_icon;
   bool has_maskable_primary_icon = false;
-  std::unique_ptr<webapps::ShortcutInfo> shortcut_info;
-  webapps::WebappInstallSource install_source;
+  std::unique_ptr<ShortcutInfo> shortcut_info;
+  WebappInstallSource install_source;
   std::string native_app_package_name;
   base::android::ScopedJavaGlobalRef<jobject> native_app_data;
 
@@ -38,4 +38,6 @@
   ~AddToHomescreenParams();
 };
 
+}  // namespace webapps
+
 #endif  // CHROME_BROWSER_ANDROID_WEBAPPS_ADD_TO_HOMESCREEN_PARAMS_H_
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index e00c58a..18acb13 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -1282,9 +1282,14 @@
         (!doneOnce && base::mac::WasLaunchedAsHiddenLoginItem());
     doneOnce = YES;
     if (attemptRestore) {
+      Profile* lastProfile = [self lastProfile];
+      if (!lastProfile) {
+        // There is no session to be restored without a valid profile. Return NO
+        // to do nothing.
+        return NO;
+      }
       SessionService* sessionService =
-          SessionServiceFactory::GetForProfileForSessionRestore(
-              [self lastProfile]);
+          SessionServiceFactory::GetForProfileForSessionRestore(lastProfile);
       if (sessionService &&
           sessionService->RestoreIfNecessary(std::vector<GURL>()))
         return NO;
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index 1d9e478..549c7bf 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -2015,7 +2015,8 @@
 
 // This tests that in-memory storage partitions are reset on browser restart,
 // but persistent ones maintain state for cookies and HTML5 storage.
-IN_PROC_BROWSER_TEST_F(WebViewTest, PRE_StoragePersistence) {
+// TODO(1144228): Flaky.
+IN_PROC_BROWSER_TEST_F(WebViewTest, DISABLED_PRE_StoragePersistence) {
   ASSERT_TRUE(StartEmbeddedTestServer());
   // We don't care where the main browser is on this test.
   ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
@@ -2029,7 +2030,8 @@
 
 // This is the post-reset portion of the StoragePersistence test.  See
 // PRE_StoragePersistence for main comment.
-IN_PROC_BROWSER_TEST_F(WebViewTest, StoragePersistence) {
+// TODO(1144228): Flaky.
+IN_PROC_BROWSER_TEST_F(WebViewTest, DISABLED_StoragePersistence) {
   ASSERT_TRUE(StartEmbeddedTestServer());
   // We don't care where the main browser is on this test.
   ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index f0d4bf1..3523ee4 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1460,6 +1460,8 @@
     "first_run/first_run.h",
     "full_restore/app_launch_handler.cc",
     "full_restore/app_launch_handler.h",
+    "full_restore/full_restore_data_handler.cc",
+    "full_restore/full_restore_data_handler.h",
     "full_restore/full_restore_prefs.cc",
     "full_restore/full_restore_prefs.h",
     "full_restore/full_restore_service.cc",
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
index 421b7fe..42f291e 100644
--- a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
+++ b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
@@ -227,8 +227,7 @@
     ArcSessionManager::Get()->SetArcSessionRunnerForTesting(
         std::make_unique<ArcSessionRunner>(
             base::BindRepeating(FakeArcSession::Create)));
-    EXPECT_TRUE(ExpandPropertyFilesForTesting(ArcSessionManager::Get(),
-                                              temp_dir_.GetPath()));
+    ExpandPropertyFilesForTesting(ArcSessionManager::Get());
 
     chromeos::ProfileHelper::SetAlwaysReturnPrimaryUserForTesting(true);
   }
diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc
index a6948f1a..51a7e50 100644
--- a/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc
+++ b/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc
@@ -131,8 +131,7 @@
             base::BindRepeating(FakeArcSession::Create)));
 
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    EXPECT_TRUE(ExpandPropertyFilesForTesting(ArcSessionManager::Get(),
-                                              temp_dir_.GetPath()));
+    ExpandPropertyFilesForTesting(ArcSessionManager::Get());
 
     chromeos::ProfileHelper::SetAlwaysReturnPrimaryUserForTesting(true);
 
diff --git a/chrome/browser/chromeos/arc/test/test_arc_session_manager.cc b/chrome/browser/chromeos/arc/test/test_arc_session_manager.cc
index c8a0e08..d1593813 100644
--- a/chrome/browser/chromeos/arc/test/test_arc_session_manager.cc
+++ b/chrome/browser/chromeos/arc/test/test_arc_session_manager.cc
@@ -46,10 +46,8 @@
   return manager;
 }
 
-bool ExpandPropertyFilesForTesting(ArcSessionManager* arc_session_manager,
-                                   const base::FilePath& temp_dir) {
+void ExpandPropertyFilesForTesting(ArcSessionManager* arc_session_manager) {
   arc_session_manager->OnExpandPropertyFilesAndReadSaltForTesting(true);
-  return true;
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/test/test_arc_session_manager.h b/chrome/browser/chromeos/arc/test/test_arc_session_manager.h
index 508dcee6..fd86adab 100644
--- a/chrome/browser/chromeos/arc/test/test_arc_session_manager.h
+++ b/chrome/browser/chromeos/arc/test/test_arc_session_manager.h
@@ -7,10 +7,6 @@
 
 #include <memory>
 
-namespace base {
-class FilePath;
-}  // namespace base
-
 namespace arc {
 
 class ArcSessionManager;
@@ -25,9 +21,7 @@
 // Does something similar to CreateTestArcSessionManager(), but for an existing
 // object. This function is useful for ARC browser_tests where ArcSessionManager
 // object is (re)created with ArcServiceLauncher::ResetForTesting().
-// TODO(yusukes): Remove |temp_dir| argument which is unused.
-bool ExpandPropertyFilesForTesting(ArcSessionManager* arc_session_manager,
-                                   const base::FilePath& temp_dir);
+void ExpandPropertyFilesForTesting(ArcSessionManager* arc_session_manager);
 
 }  // namespace arc
 
diff --git a/chrome/browser/chromeos/crosapi/browser_loader.cc b/chrome/browser/chromeos/crosapi/browser_loader.cc
index f586d832..123f130 100644
--- a/chrome/browser/chromeos/crosapi/browser_loader.cc
+++ b/chrome/browser/chromeos/crosapi/browser_loader.cc
@@ -33,7 +33,7 @@
 // At that point, this feature can only be removed from the code and we can
 // switch unconditionally to the dogfood deployment..
 const base::Feature kLacrosPreferDogfoodOverFishfood{
-    "LacrosPreferDogfoodOverFishfood", base::FEATURE_DISABLED_BY_DEFAULT};
+    "LacrosPreferDogfoodOverFishfood", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Emergency kill switch in case the notification code doesn't work properly.
 const base::Feature kLacrosShowUpdateNotifications{
diff --git a/chrome/browser/chromeos/crosapi/browser_loader_unittest.cc b/chrome/browser/chromeos/crosapi/browser_loader_unittest.cc
index ea66094..30824b9 100644
--- a/chrome/browser/chromeos/crosapi/browser_loader_unittest.cc
+++ b/chrome/browser/chromeos/crosapi/browser_loader_unittest.cc
@@ -78,7 +78,7 @@
   EXPECT_EQ(0, delegate->set_lacros_update_available_);
 
   // Update check does not trigger an update notification.
-  constexpr char kLacrosFishfoodId[] = "hkifppleldbgkdlijbdfkdpedggaopda";
+  constexpr char kLacrosFishfoodId[] = "ldobopbhiamakmncndpkeelenhdmgfhk";
   browser_loader.OnEvent(
       UpdateClient::Observer::Events::COMPONENT_CHECKING_FOR_UPDATES,
       kLacrosFishfoodId);
diff --git a/chrome/browser/chromeos/crosapi/browser_manager.cc b/chrome/browser/chromeos/crosapi/browser_manager.cc
index 33278e02..3a710b3 100644
--- a/chrome/browser/chromeos/crosapi/browser_manager.cc
+++ b/chrome/browser/chromeos/crosapi/browser_manager.cc
@@ -307,6 +307,9 @@
   options.environment["GOOGLE_DEFAULT_CLIENT_SECRET"] =
       google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN);
 
+  // This sets the channel for Lacros.
+  options.environment["CHROME_VERSION_EXTRA"] = "dev";
+
   options.kill_on_parent_death = true;
 
   // Paths are UTF-8 safe on Chrome OS.
diff --git a/chrome/browser/chromeos/full_restore/full_restore_data_handler.cc b/chrome/browser/chromeos/full_restore/full_restore_data_handler.cc
new file mode 100644
index 0000000..946b2a29
--- /dev/null
+++ b/chrome/browser/chromeos/full_restore/full_restore_data_handler.cc
@@ -0,0 +1,49 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/full_restore/full_restore_data_handler.h"
+
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/full_restore/full_restore_read_handler.h"
+#include "components/full_restore/full_restore_save_handler.h"
+#include "components/services/app_service/public/cpp/app_update.h"
+
+namespace chromeos {
+namespace full_restore {
+
+FullRestoreDataHandler::FullRestoreDataHandler(Profile* profile)
+    : profile_(profile) {
+  DCHECK(
+      apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile_));
+  Observe(&apps::AppServiceProxyFactory::GetForProfile(profile_)
+               ->AppRegistryCache());
+}
+
+FullRestoreDataHandler::~FullRestoreDataHandler() = default;
+
+void FullRestoreDataHandler::OnAppUpdate(const apps::AppUpdate& update) {
+  if (!update.ReadinessChanged() ||
+      update.Readiness() != apps::mojom::Readiness::kUninstalledByUser) {
+    return;
+  }
+
+  // If the user uninstalls an app, then installs it again at the system
+  // startup phase, its restore data will be removed if the app isn't reopened.
+  ::full_restore::FullRestoreReadHandler* read_handler =
+      ::full_restore::FullRestoreReadHandler::GetInstance();
+  read_handler->RemoveApp(profile_->GetPath(), update.AppId());
+
+  ::full_restore::FullRestoreSaveHandler::GetInstance()->RemoveApp(
+      profile_->GetPath(), update.AppId());
+}
+
+void FullRestoreDataHandler::OnAppRegistryCacheWillBeDestroyed(
+    apps::AppRegistryCache* cache) {
+  apps::AppRegistryCache::Observer::Observe(nullptr);
+}
+
+}  // namespace full_restore
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/full_restore/full_restore_data_handler.h b/chrome/browser/chromeos/full_restore/full_restore_data_handler.h
new file mode 100644
index 0000000..29267d6
--- /dev/null
+++ b/chrome/browser/chromeos/full_restore/full_restore_data_handler.h
@@ -0,0 +1,39 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FULL_RESTORE_FULL_RESTORE_DATA_HANDLER_H_
+#define CHROME_BROWSER_CHROMEOS_FULL_RESTORE_FULL_RESTORE_DATA_HANDLER_H_
+
+#include "components/services/app_service/public/cpp/app_registry_cache.h"
+
+class Profile;
+
+namespace chromeos {
+namespace full_restore {
+
+// The FullRestoreDataHandler class observes AppRegistryCache to remove the app
+// launching and app windows when the app is removed.
+class FullRestoreDataHandler : public apps::AppRegistryCache::Observer {
+ public:
+  explicit FullRestoreDataHandler(Profile* profile);
+  ~FullRestoreDataHandler() override;
+
+  FullRestoreDataHandler(const FullRestoreDataHandler&) = delete;
+  FullRestoreDataHandler& operator=(const FullRestoreDataHandler&) = delete;
+
+  // apps::AppRegistryCache::Observer:
+  void OnAppUpdate(const apps::AppUpdate& update) override;
+  void OnAppRegistryCacheWillBeDestroyed(
+      apps::AppRegistryCache* cache) override;
+
+ private:
+  Profile* profile_ = nullptr;
+
+  base::WeakPtrFactory<FullRestoreDataHandler> weak_ptr_factory_{this};
+};
+
+}  // namespace full_restore
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FULL_RESTORE_FULL_RESTORE_DATA_HANDLER_H_
diff --git a/chrome/browser/chromeos/full_restore/full_restore_prefs.cc b/chrome/browser/chromeos/full_restore/full_restore_prefs.cc
index b57667d..ba666d0 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_prefs.cc
+++ b/chrome/browser/chromeos/full_restore/full_restore_prefs.cc
@@ -19,12 +19,20 @@
 // Refer to |RestoreOption|.
 const char kRestoreAppsAndPagesPrefName[] = "settings.restore_apps_and_pages";
 
+// An integer pref to count how many times the user selected the 'Restore'
+// button from the restore notification dialog.
+const char kRestoreSelectedCountPrefName[] =
+    "full_restore.restore_selected_count";
+
 void RegisterProfilePrefs(PrefRegistrySimple* registry) {
-  if (ash::features::IsFullRestoreEnabled()) {
-    registry->RegisterIntegerPref(
-        kRestoreAppsAndPagesPrefName, static_cast<int>(RestoreOption::kAlways),
-        user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
-  }
+  if (!ash::features::IsFullRestoreEnabled())
+    return;
+
+  registry->RegisterIntegerPref(
+      kRestoreAppsAndPagesPrefName, static_cast<int>(RestoreOption::kAlways),
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
+
+  registry->RegisterIntegerPref(kRestoreSelectedCountPrefName, 0);
 }
 
 bool HasRestorePref(PrefService* prefs) {
@@ -67,5 +75,13 @@
   }
 }
 
+int GetRestoreSelectedCountPref(PrefService* prefs) {
+  return prefs->GetInteger(kRestoreSelectedCountPrefName);
+}
+
+void SetRestoreSelectedCountPref(PrefService* prefs, int count) {
+  prefs->SetInteger(kRestoreSelectedCountPrefName, count);
+}
+
 }  // namespace full_restore
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/full_restore/full_restore_prefs.h b/chrome/browser/chromeos/full_restore/full_restore_prefs.h
index 239d01b7..7849a4d 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_prefs.h
+++ b/chrome/browser/chromeos/full_restore/full_restore_prefs.h
@@ -20,8 +20,10 @@
 };
 
 extern const char kRestoreAppsAndPagesPrefName[];
+extern const char kRestoreSelectedCountPrefName[];
 
-// Registers the restore pref |kRestoreAppsAndPagesPrefName|.
+// Registers the restore pref |kRestoreAppsAndPagesPrefName| and
+// |kRestoreSelectedCountPrefName|.
 void RegisterProfilePrefs(PrefRegistrySimple* registry);
 
 // Returns true if the pref has |kRestoreAppsAndPagesPrefName|. Otherwise,
@@ -41,6 +43,12 @@
 // restore settings is synced.
 void UpdateRestorePrefIfNecessary(PrefService* prefs);
 
+// Returns the value of the pref |kRestoreSelectedCountPrefName|.
+int GetRestoreSelectedCountPref(PrefService* prefs);
+
+// Sets the pref |kRestoreSelectedCountPrefName| as |count|.
+void SetRestoreSelectedCountPref(PrefService* prefs, int count);
+
 }  // namespace full_restore
 }  // namespace chromeos
 
diff --git a/chrome/browser/chromeos/full_restore/full_restore_prefs_unittest.cc b/chrome/browser/chromeos/full_restore/full_restore_prefs_unittest.cc
index 2776a81a..0bcf8d2 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_prefs_unittest.cc
+++ b/chrome/browser/chromeos/full_restore/full_restore_prefs_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/chromeos/full_restore/full_restore_prefs.h"
+
 #include "ash/public/cpp/ash_features.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
@@ -82,7 +83,7 @@
   EXPECT_EQ(RestoreOption::kDoNotRestore, GetRestoreOption());
 }
 
-// When a new Chrome OS user, set 'always restore' as the default value if the
+// For a new Chrome OS user, set 'always restore' as the default value if the
 // browser setting is 'continue where you left off'.
 TEST_F(FullRestorePrefsTest, NewChromeOSUserFromRestore) {
   GetFakeUserManager()->set_current_user_new(true);
@@ -100,7 +101,7 @@
   EXPECT_EQ(RestoreOption::kAlways, GetRestoreOption());
 }
 
-// When a new Chrome OS user, set 'ask every time' as the default value if the
+// For a new Chrome OS user, set 'ask every time' as the default value if the
 // browser setting is 'new tab'.
 TEST_F(FullRestorePrefsTest, NewChromeOSUserFromNotRestore) {
   GetFakeUserManager()->set_current_user_new(true);
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service.cc b/chrome/browser/chromeos/full_restore/full_restore_service.cc
index 8e86c53..04c01e38 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_service.cc
+++ b/chrome/browser/chromeos/full_restore/full_restore_service.cc
@@ -8,12 +8,15 @@
 #include "base/strings/string_util.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/chromeos/full_restore/app_launch_handler.h"
+#include "chrome/browser/chromeos/full_restore/full_restore_data_handler.h"
 #include "chrome/browser/chromeos/full_restore/full_restore_prefs.h"
 #include "chrome/browser/chromeos/full_restore/full_restore_service_factory.h"
 #include "chrome/browser/chromeos/full_restore/new_user_restore_pref_handler.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/notifications/notification_display_service.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/settings_window_manager_chromeos.h"
+#include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
 #include "chromeos/constants/chromeos_features.h"
@@ -29,10 +32,18 @@
 
 const char kRestoreForCrashNotificationId[] = "restore_for_crash_notification";
 const char kRestoreNotificationId[] = "restore_notification";
+const char kSetRestorePrefNotificationId[] = "set_restore_pref_notification";
+
+// If the user selected the 'Restore' button from the restore notification
+// dialog for more than |kMaxConsecutiveRestoreSelectionCount| times, show the
+// set restore pref notification.
+const int kMaxConsecutiveRestoreSelectionCount = 3;
 
 FullRestoreService::FullRestoreService(Profile* profile)
     : profile_(profile),
-      app_launch_handler_(std::make_unique<AppLaunchHandler>(profile_)) {
+      app_launch_handler_(std::make_unique<AppLaunchHandler>(profile_)),
+      restore_data_handler_(
+          std::make_unique<FullRestoreDataHandler>(profile_)) {
   // If the system crashed before reboot, show the restore notification.
   if (profile->GetLastSessionExitType() == Profile::EXIT_CRASHED) {
     ShowRestoreNotification(kRestoreForCrashNotificationId);
@@ -79,33 +90,43 @@
 
 void FullRestoreService::ShowRestoreNotification(const std::string& id) {
   message_center::RichNotificationData notification_data;
+
   message_center::ButtonInfo restore_button(l10n_util::GetStringUTF16(
-      base::ToUpperASCII(IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON)));
+      base::ToUpperASCII(id == kSetRestorePrefNotificationId
+                             ? IDS_SET_RESTORE_NOTIFICATION_BUTTON
+                             : IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON)));
   notification_data.buttons.push_back(restore_button);
+
   message_center::ButtonInfo cancel_button(l10n_util::GetStringUTF16(
       base::ToUpperASCII(IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON)));
   notification_data.buttons.push_back(cancel_button);
 
-  int message_id = id == kRestoreForCrashNotificationId
-                       ? IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE
-                       : IDS_RESTORE_NOTIFICATION_MESSAGE;
+  int title_id = id == kSetRestorePrefNotificationId
+                     ? IDS_SET_RESTORE_NOTIFICATION_TITLE
+                     : IDS_RESTORE_NOTIFICATION_TITLE;
+
+  int message_id;
+  if (id == kRestoreForCrashNotificationId)
+    message_id = IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE;
+  else if (id == kRestoreNotificationId)
+    message_id = IDS_RESTORE_NOTIFICATION_MESSAGE;
+  else
+    message_id = IDS_SET_RESTORE_NOTIFICATION_MESSAGE;
 
   std::unique_ptr<message_center::Notification> notification =
       ash::CreateSystemNotification(
           message_center::NOTIFICATION_TYPE_SIMPLE, id,
-          l10n_util::GetStringUTF16(IDS_RESTORE_NOTIFICATION_TITLE),
+          l10n_util::GetStringUTF16(title_id),
           l10n_util::GetStringUTF16(message_id),
           l10n_util::GetStringUTF16(IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE),
           GURL(),
           message_center::NotifierId(
-              message_center::NotifierType::SYSTEM_COMPONENT,
-              kRestoreForCrashNotificationId),
+              message_center::NotifierType::SYSTEM_COMPONENT, id),
           notification_data,
           base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
               base::BindRepeating(
                   &FullRestoreService::HandleRestoreNotificationClicked,
-                  weak_ptr_factory_.GetWeakPtr(),
-                  kRestoreForCrashNotificationId)),
+                  weak_ptr_factory_.GetWeakPtr(), id)),
           kFullRestoreNotificationIcon,
           message_center::SystemNotificationWarningLevel::NORMAL);
   notification->set_priority(message_center::SYSTEM_PRIORITY);
@@ -132,6 +153,23 @@
     return;
   }
 
+  if (id == kSetRestorePrefNotificationId) {
+    // Show the 'On Startup' OS setting page.
+    chrome::SettingsWindowManager::GetInstance()->ShowOSSettings(
+        profile_, chromeos::settings::mojom::kOnStartupSectionPath);
+    return;
+  }
+
+  int count = GetRestoreSelectedCountPref(profile_->GetPrefs());
+
+  if (count < kMaxConsecutiveRestoreSelectionCount)
+    SetRestoreSelectedCountPref(profile_->GetPrefs(), ++count);
+
+  // If the user selects the 'restore' button for more than 3 times, show the
+  // set restore pref notification.
+  if (count >= kMaxConsecutiveRestoreSelectionCount)
+    ShowRestoreNotification(kSetRestorePrefNotificationId);
+
   Restore();
 }
 
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service.h b/chrome/browser/chromeos/full_restore/full_restore_service.h
index fcbec4f..eed24e4 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_service.h
+++ b/chrome/browser/chromeos/full_restore/full_restore_service.h
@@ -18,10 +18,12 @@
 namespace full_restore {
 
 class AppLaunchHandler;
+class FullRestoreDataHandler;
 class NewUserRestorePrefHandler;
 
 extern const char kRestoreForCrashNotificationId[];
 extern const char kRestoreNotificationId[];
+extern const char kSetRestorePrefNotificationId[];
 
 // The restore notification button index.
 enum class RestoreNotificationButtonIndex {
@@ -70,6 +72,8 @@
   // restore data.
   std::unique_ptr<AppLaunchHandler> app_launch_handler_;
 
+  std::unique_ptr<FullRestoreDataHandler> restore_data_handler_;
+
   base::WeakPtrFactory<FullRestoreService> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service_unittest.cc b/chrome/browser/chromeos/full_restore/full_restore_service_unittest.cc
index 7d78a91f..e155a43 100644
--- a/chrome/browser/chromeos/full_restore/full_restore_service_unittest.cc
+++ b/chrome/browser/chromeos/full_restore/full_restore_service_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/chromeos/full_restore/full_restore_service_factory.h"
+#include "chrome/browser/chromeos/full_restore/full_restore_service.h"
 
 #include "ash/public/cpp/ash_features.h"
 #include "base/files/scoped_temp_dir.h"
@@ -10,6 +10,7 @@
 #include "base/optional.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/chromeos/full_restore/full_restore_prefs.h"
+#include "chrome/browser/chromeos/full_restore/full_restore_service_factory.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
@@ -115,6 +116,25 @@
     return message_center_notification.has_value();
   }
 
+  void VerifyNotification(bool has_crash_notification,
+                          bool has_restore_notification,
+                          bool has_set_restore_notification) {
+    if (has_crash_notification)
+      EXPECT_TRUE(HasNotificationFor(kRestoreForCrashNotificationId));
+    else
+      EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
+
+    if (has_restore_notification)
+      EXPECT_TRUE(HasNotificationFor(kRestoreNotificationId));
+    else
+      EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+    if (has_set_restore_notification)
+      EXPECT_TRUE(HasNotificationFor(kSetRestorePrefNotificationId));
+    else
+      EXPECT_FALSE(HasNotificationFor(kSetRestorePrefNotificationId));
+  }
+
   void SimulateClick(const std::string& notification_id,
                      RestoreNotificationButtonIndex action_index) {
     display_service()->SimulateClick(
@@ -142,6 +162,10 @@
         profile()->GetPrefs()->GetInteger(kRestoreAppsAndPagesPrefName));
   }
 
+  int GetRestoreSelectedCount() const {
+    return profile()->GetPrefs()->GetInteger(kRestoreSelectedCountPrefName);
+  }
+
   TestingProfile* profile() const { return profile_.get(); }
 
   const AccountId& account_id() const { return account_id_; }
@@ -169,8 +193,9 @@
   profile()->set_last_session_exited_cleanly(false);
   CreateFullRestoreServiceForTesting();
 
-  EXPECT_TRUE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+  VerifyNotification(true /* has_crash_notification */,
+                     false /* has_restore_notification */,
+                     false /* has_set_restore_notification */);
 
   SimulateClick(kRestoreForCrashNotificationId,
                 RestoreNotificationButtonIndex::kRestore);
@@ -184,8 +209,9 @@
   profile()->set_last_session_exited_cleanly(false);
   CreateFullRestoreServiceForTesting();
 
-  EXPECT_TRUE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+  VerifyNotification(true /* has_crash_notification */,
+                     false /* has_restore_notification */,
+                     false /* has_set_restore_notification */);
 
   SimulateClick(kRestoreForCrashNotificationId,
                 RestoreNotificationButtonIndex::kCancel);
@@ -200,8 +226,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 }
 
@@ -213,8 +240,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Set the Chrome restore setting to simulate sync for the first time.
@@ -226,8 +254,9 @@
   content::RunAllTasksUntilIdle();
 
   EXPECT_EQ(RestoreOption::kAlways, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Update the global values to simulate sync from other device.
@@ -257,8 +286,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Set the Chrome restore setting to simulate sync for the first time.
@@ -270,8 +300,9 @@
   content::RunAllTasksUntilIdle();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Update the global values to simulate sync from other device.
@@ -300,8 +331,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Set the restore pref setting to simulate sync for the first time.
@@ -316,8 +348,9 @@
   content::RunAllTasksUntilIdle();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Update the global values to simulate sync from other device.
@@ -349,8 +382,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kDoNotRestore, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 
   // Simulate the Chrome restore setting is changed.
@@ -372,14 +406,18 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_TRUE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false /* has_crash_notification */,
+                     true /* has_restore_notification */,
+                     false /* has_set_restore_notification */);
 
   SimulateClick(kRestoreNotificationId,
                 RestoreNotificationButtonIndex::kRestore);
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
+
+  VerifyNotification(false, false, false);
 }
 
 // If the OS restore setting is 'Ask every time', after reboot, show the restore
@@ -391,14 +429,18 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_TRUE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false /* has_crash_notification */,
+                     true /* has_restore_notification */,
+                     false /* has_set_restore_notification */);
 
   SimulateClick(kRestoreNotificationId,
                 RestoreNotificationButtonIndex::kCancel);
 
   EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
+
+  VerifyNotification(false, false, false);
 }
 
 // If the OS restore setting is 'Always', after reboot, don't show any
@@ -409,8 +451,9 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kAlways, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
 }
 
@@ -423,10 +466,75 @@
   CreateFullRestoreServiceForTesting();
 
   EXPECT_EQ(RestoreOption::kDoNotRestore, GetRestoreOption());
-  EXPECT_FALSE(HasNotificationFor(kRestoreForCrashNotificationId));
-  EXPECT_FALSE(HasNotificationFor(kRestoreNotificationId));
+
+  VerifyNotification(false, false, false);
+
   EXPECT_FALSE(::full_restore::ShouldRestore(account_id()));
 }
 
+// If the restore option has been selected 3 times, show the set restore
+// notification.
+TEST_F(FullRestoreServiceTest, SetRestorePrefNotification) {
+  profile()->GetPrefs()->SetInteger(
+      kRestoreAppsAndPagesPrefName,
+      static_cast<int>(RestoreOption::kAskEveryTime));
+
+  // Set |kRestoreSelectedCountPrefName| = 2 to simulate the restore option has
+  // been selected twice.
+  profile()->GetPrefs()->SetInteger(kRestoreSelectedCountPrefName, 2);
+
+  CreateFullRestoreServiceForTesting();
+
+  EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
+
+  VerifyNotification(false /* has_crash_notification */,
+                     true /* has_restore_notification */,
+                     false /* has_set_restore_notification */);
+
+  // The restore option has been selected the 3rd times.
+  SimulateClick(kRestoreNotificationId,
+                RestoreNotificationButtonIndex::kRestore);
+
+  EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
+  EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
+
+  // Verify the set restore notification is shown.
+  VerifyNotification(false /* has_crash_notification */,
+                     false /* has_restore_notification */,
+                     true /* has_set_restore_notification */);
+
+  EXPECT_EQ(3, GetRestoreSelectedCount());
+}
+
+// When |kRestoreSelectedCountPrefName| = 3, if the restore option is selected
+// again, |kRestoreSelectedCountPrefName| should not change.
+TEST_F(FullRestoreServiceTest, RestoreSelectedCount) {
+  profile()->GetPrefs()->SetInteger(
+      kRestoreAppsAndPagesPrefName,
+      static_cast<int>(RestoreOption::kAskEveryTime));
+
+  // Set |kRestoreSelectedCountPrefName| = 3 to simulate the restore option has
+  // been selected 3 times locally.
+  profile()->GetPrefs()->SetInteger(kRestoreSelectedCountPrefName, 3);
+
+  CreateFullRestoreServiceForTesting();
+
+  EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
+
+  // The restore option is selected.
+  SimulateClick(kRestoreNotificationId,
+                RestoreNotificationButtonIndex::kRestore);
+
+  EXPECT_EQ(RestoreOption::kAskEveryTime, GetRestoreOption());
+  EXPECT_TRUE(::full_restore::ShouldRestore(account_id()));
+
+  // Verify the set restore notification is shown.
+  VerifyNotification(false /* has_crash_notification */,
+                     false /* has_restore_notification */,
+                     true /* has_set_restore_notification */);
+
+  EXPECT_EQ(3, GetRestoreSelectedCount());
+}
+
 }  // namespace full_restore
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
index a95560e..44c3ad65 100644
--- a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
+++ b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
@@ -11,7 +11,6 @@
 #include "ash/public/cpp/test/shell_test_api.h"
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/test/scoped_feature_list.h"
@@ -593,8 +592,6 @@
   }
 
   void SetUpOnMainThread() override {
-    ASSERT_TRUE(arc_temp_dir_.CreateUniqueTempDir());
-
     if (params_.is_tablet)
       ash::ShellTestApi().SetTabletModeEnabledForTest(true);
 
@@ -604,8 +601,7 @@
       arc::ArcSessionManager::Get()->SetArcSessionRunnerForTesting(
           std::make_unique<arc::ArcSessionRunner>(
               base::BindRepeating(arc::FakeArcSession::Create)));
-      EXPECT_TRUE(arc::ExpandPropertyFilesForTesting(
-          arc::ArcSessionManager::Get(), arc_temp_dir_.GetPath()));
+      arc::ExpandPropertyFilesForTesting(arc::ArcSessionManager::Get());
     }
   }
   void TearDownInProcessBrowserTestFixture() override {
@@ -645,7 +641,6 @@
   std::unique_ptr<ScopedTestRecommendAppsFetcherFactory>
       recommend_apps_fetcher_factory_;
   net::EmbeddedTestServer* arc_tos_server_;
-  base::ScopedTempDir arc_temp_dir_;
 
   DISALLOW_COPY_AND_ASSIGN(OobeEndToEndTestSetupMixin);
 };
diff --git a/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc
index bb8d44d..0570012 100644
--- a/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc
@@ -6,7 +6,6 @@
 #include <string>
 
 #include "ash/public/cpp/login_screen_test_api.h"
-#include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/arc/arc_util.h"
@@ -62,14 +61,11 @@
   }
 
   void SetUpOnMainThread() override {
-    ASSERT_TRUE(arc_temp_dir_.CreateUniqueTempDir());
-
     arc::ArcServiceLauncher::Get()->ResetForTesting();
     arc::ArcSessionManager::Get()->SetArcSessionRunnerForTesting(
         std::make_unique<arc::ArcSessionRunner>(
             base::BindRepeating(arc::FakeArcSession::Create)));
-    EXPECT_TRUE(arc::ExpandPropertyFilesForTesting(
-        arc::ArcSessionManager::Get(), arc_temp_dir_.GetPath()));
+    arc::ExpandPropertyFilesForTesting(arc::ArcSessionManager::Get());
 
     MixinBasedInProcessBrowserTest::SetUpOnMainThread();
     // For this test class, the PRE tests just happen to always wait for active
@@ -98,7 +94,6 @@
   LoggedInUserMixin logged_in_user_mixin_{
       &mixin_host_, content::IsPreTest() ? GetParam() : GetTargetUserType(),
       embedded_test_server(), this, false /*should_launch_browser*/};
-  base::ScopedTempDir arc_temp_dir_;
 };
 
 IN_PROC_BROWSER_TEST_P(SupervisionTransitionScreenTest,
diff --git a/chrome/browser/chromeos/phonehub/browser_tabs_model_provider_impl.cc b/chrome/browser/chromeos/phonehub/browser_tabs_model_provider_impl.cc
index 2897b2dd..d82d04d 100644
--- a/chrome/browser/chromeos/phonehub/browser_tabs_model_provider_impl.cc
+++ b/chrome/browser/chromeos/phonehub/browser_tabs_model_provider_impl.cc
@@ -55,6 +55,12 @@
 }
 
 void BrowserTabsModelProviderImpl::TriggerRefresh() {
+  // crbug/1158480: Currently (January 2021), updates to synced sessions
+  // sometimes take a long time to arrive. As a workaround,
+  // SyncService::TriggerRefresh() is used, which bypasses some of the potential
+  // sources of latency (e.g. for delivering an invalidation), but not others
+  // (e.g. backend replication delay). I.e SyncService::TriggerRefresh() will
+  // not guarantee an immediate update.
   sync_service_->TriggerRefresh({syncer::SESSIONS});
 }
 
diff --git a/chrome/browser/chromeos/scanning/scan_service.cc b/chrome/browser/chromeos/scanning/scan_service.cc
index 62d98b2..aa3627b 100644
--- a/chrome/browser/chromeos/scanning/scan_service.cc
+++ b/chrome/browser/chromeos/scanning/scan_service.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_util.h"
 #include "base/location.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/optional.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
@@ -22,6 +23,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/scanning/lorgnette_scanner_manager.h"
 #include "chrome/browser/chromeos/scanning/scanning_type_converters.h"
+#include "chromeos/components/scanning/scanning_uma.h"
 #include "third_party/skia/include/codec/SkCodec.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkData.h"
@@ -221,11 +223,21 @@
   return scan_to_path.Append(filename);
 }
 
-// Records the histograms for scan job success and number of pages scanned.
-void RecordScanJobResult(bool success, int num_pages_scanned) {
+// Records the histograms based on the scan job result.
+void RecordScanJobResult(
+    bool success,
+    const base::Optional<scanning::ScanJobFailureReason>& failure_reason,
+    int num_pages_scanned) {
   base::UmaHistogramBoolean("Scanning.ScanJobSuccessful", success);
-  if (success)
+  if (success) {
     base::UmaHistogramCounts100("Scanning.NumPagesScanned", num_pages_scanned);
+    return;
+  }
+
+  if (failure_reason.has_value()) {
+    base::UmaHistogramEnumeration("Scanning.ScanJobFailureReason",
+                                  failure_reason.value());
+  }
 }
 
 }  // namespace
@@ -272,9 +284,18 @@
     mojo::PendingRemote<mojo_ipc::ScanJobObserver> observer,
     StartScanCallback callback) {
   const std::string scanner_name = GetScannerName(scanner_id);
-  if (scanner_name.empty() || !FilePathSupported(settings->scan_to_path)) {
+  if (scanner_name.empty()) {
     std::move(callback).Run(false);
-    RecordScanJobResult(false, /*not used*/ 0);
+    RecordScanJobResult(false, scanning::ScanJobFailureReason::kScannerNotFound,
+                        /*not used*/ 0);
+    return;
+  }
+
+  if (!FilePathSupported(settings->scan_to_path)) {
+    std::move(callback).Run(false);
+    RecordScanJobResult(false,
+                        scanning::ScanJobFailureReason::kUnsupportedScanToPath,
+                        /*not used*/ 0);
     return;
   }
 
@@ -431,25 +452,33 @@
 }
 
 void ScanService::OnPdfSaved(const bool success) {
-  save_failed_ = !success;
+  page_save_failed_ = !success;
 }
 
 void ScanService::OnPageSaved(const base::FilePath& saved_file_path) {
-  save_failed_ = save_failed_ || saved_file_path.empty();
-  last_scanned_file_path_ = save_failed_ ? base::FilePath() : saved_file_path;
+  page_save_failed_ = page_save_failed_ || saved_file_path.empty();
+  last_scanned_file_path_ =
+      page_save_failed_ ? base::FilePath() : saved_file_path;
 }
 
 void ScanService::OnAllPagesSaved(bool success) {
-  save_failed_ = !success || save_failed_;
-  if (save_failed_)
+  base::Optional<scanning::ScanJobFailureReason> failure_reason = base::nullopt;
+  if (!success) {
+    failure_reason = scanning::ScanJobFailureReason::kUnknownScannerError;
     last_scanned_file_path_.clear();
+  } else if (page_save_failed_) {
+    failure_reason = scanning::ScanJobFailureReason::kSaveToDiskFailed;
+    last_scanned_file_path_.clear();
+  }
 
-  scan_job_observer_->OnScanComplete(!save_failed_, last_scanned_file_path_);
-  RecordScanJobResult(!save_failed_, num_pages_scanned_);
+  scan_job_observer_->OnScanComplete(success && !page_save_failed_,
+                                     last_scanned_file_path_);
+  RecordScanJobResult(success && !page_save_failed_, failure_reason,
+                      num_pages_scanned_);
 }
 
 void ScanService::ClearScanState() {
-  save_failed_ = false;
+  page_save_failed_ = false;
   last_scanned_file_path_.clear();
   scanned_images_.clear();
   num_pages_scanned_ = 0;
diff --git a/chrome/browser/chromeos/scanning/scan_service.h b/chrome/browser/chromeos/scanning/scan_service.h
index c561e7a..aac5425 100644
--- a/chrome/browser/chromeos/scanning/scan_service.h
+++ b/chrome/browser/chromeos/scanning/scan_service.h
@@ -143,7 +143,7 @@
   base::FilePath google_drive_path_;
 
   // Indicates whether there was a failure to save scanned images.
-  bool save_failed_;
+  bool page_save_failed_;
 
   // The scanned images used to create a multipage PDF.
   std::vector<std::string> scanned_images_;
diff --git a/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.cc b/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.cc
index 230dbc0..b6c6361b 100644
--- a/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.cc
+++ b/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.cc
@@ -142,7 +142,15 @@
           weak_ptr_factory_.GetWeakPtr()));
 }
 
-void NearbyConnectionBrokerImpl::Disconnect() {
+void NearbyConnectionBrokerImpl::Disconnect(
+    util::NearbyDisconnectionReason reason) {
+  // Only log a single disconnection reason per connection attempt. Edge cases
+  // can cause this function to be invoked multiple times.
+  if (!has_disconnect_reason_been_logged_) {
+    has_disconnect_reason_been_logged_ = true;
+    util::RecordNearbyDisconnection(reason);
+  }
+
   if (!need_to_disconnect_endpoint_) {
     TransitionToDisconnectedAndInvokeCallback();
     return;
@@ -190,7 +198,7 @@
 
 void NearbyConnectionBrokerImpl::OnDiscoveryFailure() {
   DCHECK_EQ(ConnectionStatus::kDiscoveringEndpoint, connection_status_);
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kFailedDiscovery);
 }
 
 void NearbyConnectionBrokerImpl::OnRequestConnectionResult(Status status) {
@@ -200,7 +208,7 @@
     return;
 
   PA_LOG(WARNING) << "RequestConnection() failed: " << status;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kFailedRequestingConnection);
 }
 
 void NearbyConnectionBrokerImpl::OnAcceptConnectionResult(Status status) {
@@ -212,7 +220,7 @@
   }
 
   PA_LOG(WARNING) << "AcceptConnection() failed: " << status;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kFailedAcceptingConnection);
 }
 
 void NearbyConnectionBrokerImpl::OnSendPayloadResult(
@@ -228,7 +236,7 @@
     return;
 
   PA_LOG(WARNING) << "OnSendPayloadResult() failed: " << status;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kSendMessageFailed);
 }
 
 void NearbyConnectionBrokerImpl::OnDisconnectFromEndpointResult(Status status) {
@@ -240,7 +248,7 @@
   PA_LOG(WARNING) << "Failed to disconnect from endpoint with ID "
                   << remote_endpoint_id_ << ": " << status;
   need_to_disconnect_endpoint_ = false;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kDisconnectionRequestedByClient);
 }
 
 void NearbyConnectionBrokerImpl::OnConnectionStatusChangeTimeout() {
@@ -257,11 +265,32 @@
     need_to_disconnect_endpoint_ = true;
 
   PA_LOG(WARNING) << "Timeout changing connection status";
-  Disconnect();
+  util::NearbyDisconnectionReason reason;
+  switch (connection_status_) {
+    case ConnectionStatus::kDiscoveringEndpoint:
+      reason = util::NearbyDisconnectionReason::kTimeoutDuringDiscovery;
+      break;
+    case ConnectionStatus::kRequestingConnection:
+      reason = util::NearbyDisconnectionReason::kTimeoutDuringRequestConnection;
+      break;
+    case ConnectionStatus::kAcceptingConnection:
+      reason = util::NearbyDisconnectionReason::kTimeoutDuringAcceptConnection;
+      break;
+    case ConnectionStatus::kWaitingForConnectionToBeAcceptedByRemoteDevice:
+      reason =
+          util::NearbyDisconnectionReason::kTimeoutWaitingForConnectionAccepted;
+      break;
+    default:
+      NOTREACHED() << "Unexpected timeout with connection status "
+                   << connection_status_;
+      reason = util::NearbyDisconnectionReason::kConnectionLost;
+      break;
+  }
+  Disconnect(reason);
 }
 
 void NearbyConnectionBrokerImpl::OnMojoDisconnection() {
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kDisconnectionRequestedByClient);
 }
 
 void NearbyConnectionBrokerImpl::SendMessage(const std::string& message,
@@ -339,7 +368,7 @@
   }
 
   PA_LOG(WARNING) << "Connection rejected: " << status;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kConnectionRejected);
 }
 
 void NearbyConnectionBrokerImpl::OnDisconnected(
@@ -354,7 +383,7 @@
     PA_LOG(WARNING) << "Connection disconnected unexpectedly";
   }
   need_to_disconnect_endpoint_ = false;
-  Disconnect();
+  Disconnect(util::NearbyDisconnectionReason::kConnectionLost);
 }
 
 void NearbyConnectionBrokerImpl::OnBandwidthChanged(
@@ -390,7 +419,7 @@
   if (!payload->content->is_bytes()) {
     PA_LOG(WARNING) << "OnPayloadReceived(): Received unexpected payload type "
                     << "(was expecting bytes type). Disconnecting.";
-    Disconnect();
+    Disconnect(util::NearbyDisconnectionReason::kReceivedUnexpectedPayloadType);
     return;
   }
 
diff --git a/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.h b/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.h
index 8b9bbc37..313225d2 100644
--- a/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.h
+++ b/chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.h
@@ -13,6 +13,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/secure_channel/nearby_connection_broker.h"
+#include "chrome/browser/chromeos/secure_channel/util/histogram_util.h"
 #include "chromeos/services/nearby/public/mojom/nearby_connections.mojom.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
 
@@ -102,7 +103,7 @@
       std::unique_ptr<base::OneShotTimer> timer);
 
   void TransitionToStatus(ConnectionStatus connection_status);
-  void Disconnect();
+  void Disconnect(util::NearbyDisconnectionReason reason);
   void TransitionToDisconnectedAndInvokeCallback();
 
   void OnEndpointDiscovered(
@@ -174,6 +175,8 @@
   // Starts as null; set in OnConnectionAccepted().
   base::Time time_when_connection_accepted_;
 
+  bool has_disconnect_reason_been_logged_ = false;
+
   base::WeakPtrFactory<NearbyConnectionBrokerImpl> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/chromeos/secure_channel/nearby_connector_impl.cc b/chrome/browser/chromeos/secure_channel/nearby_connector_impl.cc
index 66b2ecd..7d4be51 100644
--- a/chrome/browser/chromeos/secure_channel/nearby_connector_impl.cc
+++ b/chrome/browser/chromeos/secure_channel/nearby_connector_impl.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "chrome/browser/chromeos/secure_channel/nearby_connection_broker_impl.h"
 #include "chrome/browser/chromeos/secure_channel/nearby_endpoint_finder_impl.h"
+#include "chrome/browser/chromeos/secure_channel/util/histogram_util.h"
 #include "chromeos/components/multidevice/logging/logging.h"
 #include "chromeos/services/nearby/public/cpp/nearby_process_manager.h"
 #include "chromeos/services/secure_channel/public/cpp/client/nearby_connector.h"
@@ -132,6 +133,12 @@
   PA_LOG(WARNING) << "Nearby process stopped unexpectedly. Destroying active "
                   << "connections.";
 
+  // Record the disconnection reason for each of the active brokers.
+  for (size_t i = 0; i < id_to_brokers_map_.size(); ++i) {
+    util::RecordNearbyDisconnection(
+        util::NearbyDisconnectionReason::kNearbyProcessCrash);
+  }
+
   ClearActiveAndPendingConnections();
   ProcessQueuedConnectionRequests();
 }
diff --git a/chrome/browser/chromeos/secure_channel/util/histogram_util.cc b/chrome/browser/chromeos/secure_channel/util/histogram_util.cc
index 74f0db9f..861c57a 100644
--- a/chrome/browser/chromeos/secure_channel/util/histogram_util.cc
+++ b/chrome/browser/chromeos/secure_channel/util/histogram_util.cc
@@ -15,6 +15,11 @@
       "MultiDevice.SecureChannel.Nearby.MessageAction", message_action);
 }
 
+void RecordNearbyDisconnection(NearbyDisconnectionReason reason) {
+  base::UmaHistogramEnumeration(
+      "MultiDevice.SecureChannel.Nearby.DisconnectionReason", reason);
+}
+
 }  // namespace util
 }  // namespace secure_channel
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/secure_channel/util/histogram_util.h b/chrome/browser/chromeos/secure_channel/util/histogram_util.h
index 559c513..97615e8 100644
--- a/chrome/browser/chromeos/secure_channel/util/histogram_util.h
+++ b/chrome/browser/chromeos/secure_channel/util/histogram_util.h
@@ -22,6 +22,28 @@
 // Logs a given message transfer action.
 void LogMessageAction(MessageAction message_action);
 
+// Reasons why a Nearby Connection may become disconnected. These values are
+// persisted to logs. Entries should not be renumbered and numeric values should
+// never be reused.
+enum class NearbyDisconnectionReason {
+  kDisconnectionRequestedByClient = 0,
+  kFailedDiscovery = 1,
+  kTimeoutDuringDiscovery = 2,
+  kFailedRequestingConnection = 3,
+  kTimeoutDuringRequestConnection = 4,
+  kFailedAcceptingConnection = 5,
+  kTimeoutDuringAcceptConnection = 6,
+  kConnectionRejected = 7,
+  kTimeoutWaitingForConnectionAccepted = 8,
+  kSendMessageFailed = 9,
+  kReceivedUnexpectedPayloadType = 10,
+  kConnectionLost = 11,
+  kNearbyProcessCrash = 12,
+  kMaxValue = kNearbyProcessCrash
+};
+
+void RecordNearbyDisconnection(NearbyDisconnectionReason reason);
+
 }  // namespace util
 }  // namespace secure_channel
 }  // namespace chromeos
diff --git a/chrome/browser/component_updater/registration.cc b/chrome/browser/component_updater/registration.cc
index cf3b88c..4ef2087 100644
--- a/chrome/browser/component_updater/registration.cc
+++ b/chrome/browser/component_updater/registration.cc
@@ -105,9 +105,12 @@
   // PNaCl on Chrome OS is on rootfs and there is no need to download it. But
   // Chrome4ChromeOS on Linux doesn't contain PNaCl so enable component
   // installer when running on Linux. See crbug.com/422121 for more details.
-  if (!base::SysInfo::IsRunningOnChromeOS())
+  if (!base::SysInfo::IsRunningOnChromeOS()) {
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
     RegisterPnaclComponent(cus);
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 #endif  // BUILDFLAG(ENABLE_NACL) && !defined(OS_ANDROID)
 
   RegisterSubresourceFilterComponent(cus);
diff --git a/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc b/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
index e7b0af9..52a9e666 100644
--- a/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
+++ b/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
@@ -65,7 +65,7 @@
 
   template <typename H, typename... As>
   void Apply(const H& handler, As... args) {
-    handler.Run(args...);
+    handler.Run(std::forward<As>(args)...);
   }
 };
 
@@ -78,16 +78,16 @@
 
   template <typename H, typename... As>
   void Apply(const H& handler, As... args) {
-    tail.template Apply<H, As..., T>(handler, args..., head);
+    tail.template Apply<H, As..., T>(handler, std::forward<As>(args)..., head);
   }
 
   typename StorageTraits<T>::StorageType head;
   ParamTuple<Ts...> tail;
 };
 
-template<typename... As>
-bool ParseAndHandle(const base::Callback<void(As...)>& handler,
-                    const DispatchCallback& callback,
+template <typename... As>
+bool ParseAndHandle(const base::RepeatingCallback<void(As...)>& handler,
+                    DispatchCallback callback,
                     const base::ListValue& list) {
   ParamTuple<As...> tuple;
   if (!tuple.Parse(list, list.begin()))
@@ -96,15 +96,15 @@
   return true;
 }
 
-template<typename... As>
+template <typename... As>
 bool ParseAndHandleWithCallback(
-    const base::Callback<void(const DispatchCallback&, As...)>& handler,
-    const DispatchCallback& callback,
+    const base::RepeatingCallback<void(DispatchCallback, As...)>& handler,
+    DispatchCallback callback,
     const base::ListValue& list) {
   ParamTuple<As...> tuple;
   if (!tuple.Parse(list, list.begin()))
     return false;
-  tuple.Apply(handler, callback);
+  tuple.Apply(handler, std::move(callback));
   return true;
 }
 
@@ -120,38 +120,38 @@
  */
 class DispatcherImpl : public DevToolsEmbedderMessageDispatcher {
  public:
-  ~DispatcherImpl() override {}
+  ~DispatcherImpl() override = default;
 
-  bool Dispatch(const DispatchCallback& callback,
+  bool Dispatch(DispatchCallback callback,
                 const std::string& method,
                 const base::ListValue* params) override {
     auto it = handlers_.find(method);
-    return it != handlers_.end() && it->second.Run(callback, *params);
+    return it != handlers_.end() &&
+           it->second.Run(std::move(callback), *params);
   }
 
   template<typename... As>
   void RegisterHandler(const std::string& method,
                        void (Delegate::*handler)(As...),
                        Delegate* delegate) {
-    handlers_[method] = base::Bind(&ParseAndHandle<As...>,
-                                   base::Bind(handler,
-                                              base::Unretained(delegate)));
+    handlers_[method] = base::BindRepeating(
+        &ParseAndHandle<As...>,
+        base::BindRepeating(handler, base::Unretained(delegate)));
   }
 
-  template<typename... As>
-  void RegisterHandlerWithCallback(
-      const std::string& method,
-      void (Delegate::*handler)(const DispatchCallback&, As...),
-      Delegate* delegate) {
-    handlers_[method] = base::Bind(&ParseAndHandleWithCallback<As...>,
-                                   base::Bind(handler,
-                                              base::Unretained(delegate)));
+  template <typename... As>
+  void RegisterHandlerWithCallback(const std::string& method,
+                                   void (Delegate::*handler)(DispatchCallback,
+                                                             As...),
+                                   Delegate* delegate) {
+    handlers_[method] = base::BindRepeating(
+        &ParseAndHandleWithCallback<As...>,
+        base::BindRepeating(handler, base::Unretained(delegate)));
   }
 
-
  private:
-  using Handler = base::Callback<bool(const DispatchCallback&,
-                                      const base::ListValue&)>;
+  using Handler =
+      base::RepeatingCallback<bool(DispatchCallback, const base::ListValue&)>;
   using HandlerMap = std::map<std::string, Handler>;
   HandlerMap handlers_;
 };
diff --git a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
index d874468..9b36edc 100644
--- a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
+++ b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
@@ -29,9 +29,9 @@
  public:
   class Delegate {
    public:
-    using DispatchCallback = base::Callback<void(const base::Value*)>;
+    using DispatchCallback = base::OnceCallback<void(const base::Value*)>;
 
-    virtual ~Delegate() {}
+    virtual ~Delegate() = default;
 
     virtual void ActivateWindow() = 0;
     virtual void CloseWindow() = 0;
@@ -39,8 +39,7 @@
     virtual void SetInspectedPageBounds(const gfx::Rect& rect) = 0;
     virtual void InspectElementCompleted() = 0;
     virtual void InspectedURLChanged(const std::string& url) = 0;
-    virtual void SetIsDocked(const DispatchCallback& callback,
-                             bool is_docked) = 0;
+    virtual void SetIsDocked(DispatchCallback callback, bool is_docked) = 0;
     virtual void OpenInNewTab(const std::string& url) = 0;
     virtual void ShowItemInFolder(const std::string& file_system_path) = 0;
     virtual void SaveToFile(const std::string& url,
@@ -57,7 +56,7 @@
                            const std::string& file_system_path,
                            const std::string& excluded_folders) = 0;
     virtual void StopIndexing(int index_request_id) = 0;
-    virtual void LoadNetworkResource(const DispatchCallback& callback,
+    virtual void LoadNetworkResource(DispatchCallback callback,
                                      const std::string& url,
                                      const std::string& headers,
                                      int stream_id) = 0;
@@ -82,7 +81,7 @@
     virtual void OpenRemotePage(const std::string& browser_id,
                                 const std::string& url) = 0;
     virtual void OpenNodeFrontend() = 0;
-    virtual void GetPreferences(const DispatchCallback& callback) = 0;
+    virtual void GetPreferences(DispatchCallback callback) = 0;
     virtual void SetPreference(const std::string& name,
                                const std::string& value) = 0;
     virtual void RemovePreference(const std::string& name) = 0;
@@ -95,25 +94,25 @@
     virtual void RecordPerformanceHistogram(const std::string& name,
                                             double duration) = 0;
     virtual void RecordUserMetricsAction(const std::string& name) = 0;
-    virtual void SendJsonRequest(const DispatchCallback& callback,
+    virtual void SendJsonRequest(DispatchCallback callback,
                                  const std::string& browser_id,
                                  const std::string& url) = 0;
-    virtual void Reattach(const DispatchCallback& callback) = 0;
+    virtual void Reattach(DispatchCallback callback) = 0;
     virtual void ReadyForTest() = 0;
     virtual void ConnectionReady() = 0;
     virtual void SetOpenNewWindowForPopups(bool value) = 0;
     virtual void RegisterExtensionsAPI(const std::string& origin,
                                        const std::string& script) = 0;
-    virtual void ShowSurvey(const DispatchCallback& callback,
+    virtual void ShowSurvey(DispatchCallback callback,
                             const std::string& trigger) = 0;
-    virtual void CanShowSurvey(const DispatchCallback& callback,
+    virtual void CanShowSurvey(DispatchCallback callback,
                                const std::string& trigger) = 0;
   };
 
   using DispatchCallback = Delegate::DispatchCallback;
 
-  virtual ~DevToolsEmbedderMessageDispatcher() {}
-  virtual bool Dispatch(const DispatchCallback& callback,
+  virtual ~DevToolsEmbedderMessageDispatcher() = default;
+  virtual bool Dispatch(DispatchCallback callback,
                         const std::string& method,
                         const base::ListValue* params) = 0;
 
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc
index 745b7cc..dbb6472c 100644
--- a/chrome/browser/devtools/devtools_ui_bindings.cc
+++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -456,12 +456,12 @@
                      const network::ResourceRequest& resource_request,
                      const net::NetworkTrafficAnnotationTag& traffic_annotation,
                      URLLoaderFactoryHolder url_loader_factory,
-                     const DevToolsUIBindings::DispatchCallback& callback,
+                     DevToolsUIBindings::DispatchCallback callback,
                      base::TimeDelta retry_delay = base::TimeDelta()) {
     auto resource_loader =
         std::make_unique<DevToolsUIBindings::NetworkResourceLoader>(
             stream_id, bindings, resource_request, traffic_annotation,
-            std::move(url_loader_factory), callback, retry_delay);
+            std::move(url_loader_factory), std::move(callback), retry_delay);
     bindings->loaders_.insert(std::move(resource_loader));
   }
 
@@ -471,7 +471,7 @@
       const network::ResourceRequest& resource_request,
       const net::NetworkTrafficAnnotationTag& traffic_annotation,
       URLLoaderFactoryHolder url_loader_factory,
-      const DispatchCallback& callback,
+      DispatchCallback callback,
       base::TimeDelta delay)
       : stream_id_(stream_id),
         bindings_(bindings),
@@ -481,7 +481,7 @@
             std::make_unique<network::ResourceRequest>(resource_request),
             traffic_annotation)),
         url_loader_factory_(std::move(url_loader_factory)),
-        callback_(callback),
+        callback_(std::move(callback)),
         retry_delay_(delay) {
     loader_->SetOnResponseStartedCallback(base::BindOnce(
         &NetworkResourceLoader::OnResponseStarted, base::Unretained(this)));
@@ -538,11 +538,11 @@
                    << delay << "." << std::endl;
       NetworkResourceLoader::Create(
           stream_id_, bindings_, resource_request_, traffic_annotation_,
-          std::move(url_loader_factory_), callback_, delay);
+          std::move(url_loader_factory_), std::move(callback_), delay);
     } else {
       auto response = BuildObjectForResponse(response_headers_.get(), success,
                                              loader_->NetError());
-      callback_.Run(response.get());
+      std::move(callback_).Run(response.get());
     }
     bindings_->loaders_.erase(bindings_->loaders_.find(this));
   }
@@ -823,10 +823,10 @@
   delegate_->SetInspectedPageBounds(rect);
 }
 
-void DevToolsUIBindings::SetIsDocked(const DispatchCallback& callback,
+void DevToolsUIBindings::SetIsDocked(DispatchCallback callback,
                                      bool dock_requested) {
   delegate_->SetIsDocked(dock_requested);
-  callback.Run(nullptr);
+  std::move(callback).Run(nullptr);
 }
 
 void DevToolsUIBindings::InspectElementCompleted() {
@@ -851,7 +851,7 @@
                  base::StringPrintf(kTitleFormat, simplified_url.c_str())));
 }
 
-void DevToolsUIBindings::LoadNetworkResource(const DispatchCallback& callback,
+void DevToolsUIBindings::LoadNetworkResource(DispatchCallback callback,
                                              const std::string& url,
                                              const std::string& headers,
                                              int stream_id) {
@@ -860,7 +860,7 @@
     base::DictionaryValue response;
     response.SetInteger("statusCode", 404);
     response.SetBoolean("urlValid", false);
-    callback.Run(&response);
+    std::move(callback).Run(&response);
     return;
   }
   // Create traffic annotation tag.
@@ -941,7 +941,7 @@
       base::DictionaryValue response;
       response.SetBoolean("schemeSupported", false);
       response.SetInteger("statusCode", 403);
-      callback.Run(&response);
+      std::move(callback).Run(&response);
       return;
     }
   } else {
@@ -950,9 +950,9 @@
     url_loader_factory = partition->GetURLLoaderFactoryForBrowserProcess();
   }
 
-  NetworkResourceLoader::Create(stream_id, this, resource_request,
-                                traffic_annotation,
-                                std::move(url_loader_factory), callback);
+  NetworkResourceLoader::Create(
+      stream_id, this, resource_request, traffic_annotation,
+      std::move(url_loader_factory), std::move(callback));
 }
 
 void DevToolsUIBindings::OpenInNewTab(const std::string& url) {
@@ -1230,10 +1230,10 @@
   delegate_->OpenNodeFrontend();
 }
 
-void DevToolsUIBindings::GetPreferences(const DispatchCallback& callback) {
+void DevToolsUIBindings::GetPreferences(DispatchCallback callback) {
   const DictionaryValue* prefs =
       profile_->GetPrefs()->GetDictionary(prefs::kDevToolsPreferences);
-  callback.Run(prefs);
+  std::move(callback).Run(prefs);
 }
 
 void DevToolsUIBindings::SetPreference(const std::string& name,
@@ -1255,12 +1255,12 @@
   update.Get()->Clear();
 }
 
-void DevToolsUIBindings::Reattach(const DispatchCallback& callback) {
+void DevToolsUIBindings::Reattach(DispatchCallback callback) {
   if (agent_host_.get()) {
     agent_host_->DetachClient(this);
     InnerAttach();
   }
-  callback.Run(nullptr);
+  std::move(callback).Run(nullptr);
 }
 
 void DevToolsUIBindings::ReadyForTest() {
@@ -1342,28 +1342,28 @@
   base::RecordComputedAction(name);
 }
 
-void DevToolsUIBindings::SendJsonRequest(const DispatchCallback& callback,
+void DevToolsUIBindings::SendJsonRequest(DispatchCallback callback,
                                          const std::string& browser_id,
                                          const std::string& url) {
   if (!android_bridge_) {
-    callback.Run(nullptr);
+    std::move(callback).Run(nullptr);
     return;
   }
-  android_bridge_->SendJsonRequest(browser_id, url,
-      base::Bind(&DevToolsUIBindings::JsonReceived,
-                 weak_factory_.GetWeakPtr(),
-                 callback));
+  android_bridge_->SendJsonRequest(
+      browser_id, url,
+      base::BindOnce(&DevToolsUIBindings::JsonReceived,
+                     weak_factory_.GetWeakPtr(), std::move(callback)));
 }
 
-void DevToolsUIBindings::JsonReceived(const DispatchCallback& callback,
+void DevToolsUIBindings::JsonReceived(DispatchCallback callback,
                                       int result,
                                       const std::string& message) {
   if (result != net::OK) {
-    callback.Run(nullptr);
+    std::move(callback).Run(nullptr);
     return;
   }
   base::Value message_value(message);
-  callback.Run(&message_value);
+  std::move(callback).Run(&message_value);
 }
 
 void DevToolsUIBindings::DeviceCountChanged(int count) {
@@ -1533,32 +1533,34 @@
 
 namespace {
 
-void ShowSurveyCallback(const DevToolsUIBindings::DispatchCallback& callback,
+void ShowSurveyCallback(DevToolsUIBindings::DispatchCallback callback,
                         bool survey_shown) {
   base::DictionaryValue response;
   response.SetBoolean("surveyShown", survey_shown);
-  callback.Run(&response);
+  std::move(callback).Run(&response);
 }
 
 }  // namespace
 
-void DevToolsUIBindings::ShowSurvey(const DispatchCallback& callback,
+void DevToolsUIBindings::ShowSurvey(DispatchCallback callback,
                                     const std::string& trigger) {
   HatsService* hats_service =
       HatsServiceFactory::GetForProfile(profile_->GetOriginalProfile(), true);
+  base::RepeatingCallback<void(const base::Value*)> on_survey =
+      base::AdaptCallbackForRepeating(std::move(callback));
   hats_service->LaunchSurvey(
-      trigger, base::BindOnce(ShowSurveyCallback, callback, true),
-      base::BindOnce(ShowSurveyCallback, callback, false));
+      trigger, base::BindOnce(ShowSurveyCallback, on_survey, true),
+      base::BindOnce(ShowSurveyCallback, on_survey, false));
 }
 
-void DevToolsUIBindings::CanShowSurvey(const DispatchCallback& callback,
+void DevToolsUIBindings::CanShowSurvey(DispatchCallback callback,
                                        const std::string& trigger) {
   HatsService* hats_service =
       HatsServiceFactory::GetForProfile(profile_->GetOriginalProfile(), true);
   bool can_show = hats_service->CanShowSurvey(trigger);
   base::DictionaryValue response;
   response.SetBoolean("canShowSurvey", can_show);
-  callback.Run(&response);
+  std::move(callback).Run(&response);
 }
 
 void DevToolsUIBindings::SetDelegate(Delegate* delegate) {
diff --git a/chrome/browser/devtools/devtools_ui_bindings.h b/chrome/browser/devtools/devtools_ui_bindings.h
index 4e88b807..ddd17d1 100644
--- a/chrome/browser/devtools/devtools_ui_bindings.h
+++ b/chrome/browser/devtools/devtools_ui_bindings.h
@@ -107,11 +107,11 @@
   void SetInspectedPageBounds(const gfx::Rect& rect) override;
   void InspectElementCompleted() override;
   void InspectedURLChanged(const std::string& url) override;
-  void LoadNetworkResource(const DispatchCallback& callback,
+  void LoadNetworkResource(DispatchCallback callback,
                            const std::string& url,
                            const std::string& headers,
                            int stream_id) override;
-  void SetIsDocked(const DispatchCallback& callback, bool is_docked) override;
+  void SetIsDocked(DispatchCallback callback, bool is_docked) override;
   void OpenInNewTab(const std::string& url) override;
   void ShowItemInFolder(const std::string& file_system_path) override;
   void SaveToFile(const std::string& url,
@@ -157,23 +157,23 @@
   void RecordPerformanceHistogram(const std::string& name,
                                   double duration) override;
   void RecordUserMetricsAction(const std::string& name) override;
-  void SendJsonRequest(const DispatchCallback& callback,
+  void SendJsonRequest(DispatchCallback callback,
                        const std::string& browser_id,
                        const std::string& url) override;
-  void GetPreferences(const DispatchCallback& callback) override;
+  void GetPreferences(DispatchCallback callback) override;
   void SetPreference(const std::string& name,
                      const std::string& value) override;
   void RemovePreference(const std::string& name) override;
   void ClearPreferences() override;
-  void Reattach(const DispatchCallback& callback) override;
+  void Reattach(DispatchCallback callback) override;
   void ReadyForTest() override;
   void ConnectionReady() override;
   void SetOpenNewWindowForPopups(bool value) override;
   void RegisterExtensionsAPI(const std::string& origin,
                              const std::string& script) override;
-  void ShowSurvey(const DispatchCallback& callback,
+  void ShowSurvey(DispatchCallback callback,
                   const std::string& trigger) override;
-  void CanShowSurvey(const DispatchCallback& callback,
+  void CanShowSurvey(DispatchCallback callback,
                      const std::string& trigger) override;
 
   void EnableRemoteDeviceCounter(bool enable);
@@ -194,7 +194,7 @@
   void DidNavigateMainFrame();
   void FrontendLoaded();
 
-  void JsonReceived(const DispatchCallback& callback,
+  void JsonReceived(DispatchCallback callback,
                     int result,
                     const std::string& message);
   void DevicesDiscoveryConfigUpdated();
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 84cee16..ab694912 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -92,7 +92,7 @@
   {
     "name": "allow-sync-xhr-in-page-dismissal",
     "owners": [ "kdillon@chromium.org" ],
-    "expiry_milestone": 88
+    "expiry_milestone": 93
   },
   {
     "name": "android-default-browser-promo",
@@ -2152,6 +2152,11 @@
     "expiry_milestone": 85
   },
   {
+    "name": "enable-resampling-scroll-events-experimental-prediction",
+    "owners": [ "input-dev" ],
+    "expiry_milestone": 90
+  },
+  {
     "name": "enable-resource-loading-hints",
     "owners": [ "//components/data_reduction_proxy/OWNERS" ],
     // This flag is used for frequent manual testing and should not be removed.
@@ -3977,12 +3982,12 @@
   {
     "name": "printer-status",
     "owners": [ "gavinwill", "cros-peripherals@google.com" ],
-    "expiry_milestone": 88
+    "expiry_milestone": 91
   },
   {
     "name": "printer-status-dialog",
     "owners": [ "gavinwill", "cros-peripherals@google.com" ],
-    "expiry_milestone": 90
+    "expiry_milestone": 91
   },
   {
     "name": "privacy-advisor",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 86fdd59..bc9c8b6d 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -988,6 +988,11 @@
     "Enable resampling scroll events";
 const char kEnableResamplingScrollEventsDescription[] =
     "Predicts the scroll amount at vsync time based on previous input";
+const char kEnableResamplingScrollEventsExperimentalPredictionName[] =
+    "Enable experimental prediction for scroll events";
+const char kEnableResamplingScrollEventsExperimentalPredictionDescription[] =
+    "Predicts the scroll amount after the vsync time to more closely match "
+    "when the frame is visible.";
 
 const char kEnableTabSearchFlagId[] = "enable-tab-search";
 const char kEnableTabSearchName[] = "Enable Tab Search";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 0e09cfe..70ad6e65 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -579,6 +579,9 @@
 extern const char kEnableResamplingInputEventsDescription[];
 extern const char kEnableResamplingScrollEventsName[];
 extern const char kEnableResamplingScrollEventsDescription[];
+extern const char kEnableResamplingScrollEventsExperimentalPredictionName[];
+extern const char
+    kEnableResamplingScrollEventsExperimentalPredictionDescription[];
 
 extern const char kEnableSubresourceRedirectName[];
 extern const char kEnableSubresourceRedirectDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 2aee130..a072dac 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -182,6 +182,7 @@
     &kEphemeralTabUsingBottomSheet,
     &kExploreSites,
     &kFocusOmniboxInIncognitoTabIntents,
+    &kGPayAppDynamicUpdate,
     &kHandleMediaIntents,
     &kHomepagePromoCard,
     &kHorizontalTabSwitcherAndroid,
@@ -508,6 +509,9 @@
 const base::Feature kExploreSites{"ExploreSites",
                                   base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kGPayAppDynamicUpdate{"GPayAppDynamicUpdate",
+                                          base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kHandleMediaIntents{"HandleMediaIntents",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index ba566d4..740781d9 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -79,6 +79,7 @@
 extern const base::Feature kEphemeralTabUsingBottomSheet;
 extern const base::Feature kExploreSites;
 extern const base::Feature kFocusOmniboxInIncognitoTabIntents;
+extern const base::Feature kGPayAppDynamicUpdate;
 extern const base::Feature kHandleMediaIntents;
 extern const base::Feature kHomepagePromoCard;
 extern const base::Feature kHorizontalTabSwitcherAndroid;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 11a15702..42fbe65 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -316,6 +316,7 @@
     public static final String FILLING_PASSWORDS_FROM_ANY_ORIGIN = "FillingPasswordsFromAnyOrigin";
     public static final String FOCUS_OMNIBOX_IN_INCOGNITO_TAB_INTENTS =
             "FocusOmniboxInIncognitoTabIntents";
+    public static final String GPAY_APP_DYNAMIC_UPDATE = "GPayAppDynamicUpdate";
     public static final String GRANT_NOTIFICATIONS_TO_DSE = "GrantNotificationsToDSE";
     public static final String HANDLE_MEDIA_INTENTS = "HandleMediaIntents";
     public static final String HIDE_FROM_API_3_TRANSITIONS_FROM_HISTORY =
diff --git a/chrome/browser/metrics/tab_stats_tracker.cc b/chrome/browser/metrics/tab_stats_tracker.cc
index 3dcdb667..c16e545 100644
--- a/chrome/browser/metrics/tab_stats_tracker.cc
+++ b/chrome/browser/metrics/tab_stats_tracker.cc
@@ -182,6 +182,7 @@
 TabStatsTracker::~TabStatsTracker() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   BrowserList::GetInstance()->RemoveObserver(this);
+  base::PowerMonitor::RemoveObserver(this);
 }
 
 // static
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc
index d22a81fa..556a4da1 100644
--- a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc
+++ b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc
@@ -79,13 +79,11 @@
   if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) {
     NS_LOG(VERBOSE)
         << __func__
-        << ": Nearby Sharing service is skipping non-primary profile: "
-        << profile->GetProfileUserName();
+        << ": Nearby Sharing service is skipping non-primary profile";
     return nullptr;
   }
   NS_LOG(VERBOSE) << __func__
-                  << "Nearby Sharing service is forcing active profile: "
-                  << profile->GetProfileUserName();
+                  << "Nearby Sharing service is forcing primary profile";
   // Force active profile for ChromeOS for now.
   process_manager.SetActiveProfile(profile);
 #endif
@@ -97,8 +95,8 @@
   auto nearby_connections_manager =
       std::make_unique<NearbyConnectionsManagerImpl>(&process_manager, profile);
 
-  NS_LOG(VERBOSE) << __func__ << ": creating NearbySharingService for profile: "
-                  << profile->GetProfileUserName();
+  NS_LOG(VERBOSE) << __func__
+                  << ": creating NearbySharingService for primary profile";
 
   return new NearbySharingServiceImpl(
       pref_service, notification_display_service, profile,
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc b/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc
index 0d6834b..fabea20 100644
--- a/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc
+++ b/chrome/browser/nearby_sharing/nearby_sharing_service_impl.cc
@@ -889,8 +889,7 @@
 void NearbySharingServiceImpl::OnNearbyProfileChanged(Profile* profile) {
   // TODO(crbug.com/1084576): Notify UI about the new active profile.
   if (profile) {
-    NS_LOG(VERBOSE) << __func__ << ": Active Nearby profile changed to: "
-                    << profile->GetProfileUserName();
+    NS_LOG(VERBOSE) << __func__ << ": Active Nearby profile changed";
   } else {
     NS_LOG(VERBOSE) << __func__ << ": Active Nearby profile cleared";
   }
@@ -900,8 +899,8 @@
 void NearbySharingServiceImpl::OnNearbyProcessStarted() {
   DCHECK(profile_);
   if (process_manager_->IsActiveProfile(profile_)) {
-    NS_LOG(VERBOSE) << __func__ << ": Nearby process started for profile: "
-                    << profile_->GetProfileUserName();
+    NS_LOG(VERBOSE) << __func__
+                    << ": Nearby process started for active profile";
   }
 }
 
@@ -909,8 +908,8 @@
   DCHECK(profile_);
   InvalidateSurfaceState();
   if (process_manager_->IsActiveProfile(profile_)) {
-    NS_LOG(VERBOSE) << __func__ << ": Nearby process stopped for profile: "
-                    << profile_->GetProfileUserName();
+    NS_LOG(VERBOSE) << __func__
+                    << ": Nearby process stopped for active profile";
   }
 }
 
@@ -1414,8 +1413,7 @@
 
   if (!process_manager_->IsActiveProfile(profile_)) {
     NS_LOG(VERBOSE) << __func__
-                    << ": Stopping discovery because profile was not active: "
-                    << profile_->GetProfileUserName();
+                    << ": Stopping discovery because profile was not active";
     StopScanning();
     return;
   }
@@ -1487,8 +1485,7 @@
     StopFastInitiationAdvertising();
     NS_LOG(VERBOSE)
         << __func__
-        << ": Stopping fast init advertising because profile was not active: "
-        << profile_->GetProfileUserName();
+        << ": Stopping fast init advertising because profile was not active";
     return;
   }
 
@@ -1557,8 +1554,7 @@
 
   if (!process_manager_->IsActiveProfile(profile_)) {
     NS_LOG(VERBOSE) << __func__
-                    << ": Stopping advertising because profile was not active: "
-                    << profile_->GetProfileUserName();
+                    << ": Stopping advertising because profile was not active";
     StopAdvertising();
     return;
   }
diff --git a/chrome/browser/net/trust_token_usecounter_browsertest.cc b/chrome/browser/net/trust_token_usecounter_browsertest.cc
index 7761755..c17c637 100644
--- a/chrome/browser/net/trust_token_usecounter_browsertest.cc
+++ b/chrome/browser/net/trust_token_usecounter_browsertest.cc
@@ -137,4 +137,34 @@
                                blink::mojom::WebFeature::kTrustTokenIframe, 1);
 }
 
+IN_PROC_BROWSER_TEST_F(TrustTokenUseCountersBrowsertest, CountsIframeUseViaSetattribute) {
+  base::HistogramTester histograms;
+
+  GURL start_url(server_.GetURL("/iframe.html"));
+  EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), start_url));
+
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  // It's important to set the trust token arguments before updating src, as
+  // the latter triggers a load. It's also important to JsReplace the trustToken
+  // argument here, because iframe.trustToken expects a (properly escaped)
+  // JSON-encoded string as its value, not a JS object.
+  EXPECT_TRUE(ExecJs(web_contents,
+                     JsReplace(
+                         R"( const myFrame = document.getElementById("test");
+                         myFrame.setAttribute('trustToken', $1);
+                         myFrame.src = $2;)",
+                         R"({"type": "token-request"})", "/page404.html")));
+  TestNavigationObserver load_observer(web_contents);
+  load_observer.Wait();
+
+  // Navigate away in order to flush use counters.
+  EXPECT_TRUE(
+      ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)));
+
+  histograms.ExpectBucketCount("Blink.UseCounter.Features",
+                               blink::mojom::WebFeature::kTrustTokenIframe, 1);
+}
+
 }  // namespace content
diff --git a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
index ea4c253..1a78cd6e 100644
--- a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
+++ b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
@@ -34,7 +34,11 @@
       status_labels.message_type == sync_ui_util::SYNC_ERROR ||
       status_labels.message_type == sync_ui_util::PASSWORDS_ONLY_SYNC_ERROR;
 
-  return identity_manager->HasPrimaryAccount() && !sync_error;
+  // Password leak detection only requires a signed in account and a functioning
+  // sync service, it does not require sync consent.
+  return identity_manager->HasPrimaryAccount(
+             signin::ConsentLevel::kNotRequired) &&
+         !sync_error;
 }
 
 // Returns whether the effective value of the Safe Browsing preferences for
diff --git a/chrome/browser/password_manager/generated_password_leak_detection_pref_unittest.cc b/chrome/browser/password_manager/generated_password_leak_detection_pref_unittest.cc
index 1dd0598..79df1ce 100644
--- a/chrome/browser/password_manager/generated_password_leak_detection_pref_unittest.cc
+++ b/chrome/browser/password_manager/generated_password_leak_detection_pref_unittest.cc
@@ -6,6 +6,8 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/api/settings_private/generated_pref_test_base.h"
 #include "chrome/browser/extensions/api/settings_private/generated_prefs_factory.h"
+#include "chrome/browser/signin/chrome_signin_client_factory.h"
+#include "chrome/browser/signin/chrome_signin_client_test_util.h"
 #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/test/base/testing_profile.h"
@@ -15,15 +17,30 @@
 #include "components/sync/driver/test_sync_service.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/test/browser_task_environment.h"
+#include "services/network/test/test_url_loader_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
+constexpr char kTestProfileName[] = "test@test.com";
+
 std::unique_ptr<KeyedService> BuildTestSyncService(
     content::BrowserContext* context) {
   return std::make_unique<syncer::TestSyncService>();
 }
 
+std::unique_ptr<TestingProfile> BuildTestProfile(
+    network::TestURLLoaderFactory& url_loader_factory) {
+  TestingProfile::Builder profile_builder;
+  profile_builder.SetProfileName(kTestProfileName);
+  profile_builder.AddTestingFactory(
+      ChromeSigninClientFactory::GetInstance(),
+      base::BindRepeating(&BuildChromeSigninClientWithURLLoader,
+                          &url_loader_factory));
+  return IdentityTestEnvironmentProfileAdaptor::
+      CreateProfileForIdentityTestEnvironment(profile_builder);
+}
+
 }  // namespace
 
 namespace settings_api = extensions::api::settings_private;
@@ -31,8 +48,12 @@
 
 class GeneratedPasswordLeakDetectionPrefTest : public testing::Test {
  public:
+  GeneratedPasswordLeakDetectionPrefTest() {
+    identity_test_env()->SetTestURLLoaderFactory(&test_url_loader_factory_);
+  }
+
   signin::IdentityTestEnvironment* identity_test_env() {
-    return identity_test_env_adaptor_->identity_test_env();
+    return identity_test_env_adaptor_.identity_test_env();
   }
 
   sync_preferences::TestingPrefServiceSyncable* prefs() {
@@ -46,18 +67,16 @@
   content::BrowserTaskEnvironment task_environment_;
 
  private:
+  network::TestURLLoaderFactory test_url_loader_factory_;
   std::unique_ptr<TestingProfile> profile_ =
-      IdentityTestEnvironmentProfileAdaptor::
-          CreateProfileForIdentityTestEnvironment({});
+      BuildTestProfile(test_url_loader_factory_);
   syncer::TestSyncService* sync_service_ =
       static_cast<syncer::TestSyncService*>(
           ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
               profile(),
               base::BindRepeating(&BuildTestSyncService)));
-  std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
-      identity_test_env_adaptor_ =
-          std::make_unique<IdentityTestEnvironmentProfileAdaptor>(
-              profile_.get());
+  IdentityTestEnvironmentProfileAdaptor identity_test_env_adaptor_{
+      profile_.get()};
 };
 
 TEST_F(GeneratedPasswordLeakDetectionPrefTest, NotifyPrefUpdates) {
@@ -68,7 +87,10 @@
 
   // Check that the observer fires for identity updates.
   identity_test_env()->EnableRemovalOfExtendedAccountInfo();
-  identity_test_env()->MakePrimaryAccountAvailable("test@test.com");
+
+  // Create a sync consented account so revoking the refresh token also triggers
+  // the preference updated observer.
+  identity_test_env()->MakePrimaryAccountAvailable(kTestProfileName);
   EXPECT_EQ(test_observer.GetUpdatedPrefName(),
             kGeneratedPasswordLeakDetectionPref);
 
@@ -120,7 +142,7 @@
   prefs()->SetDefaultPrefValue(
       password_manager::prefs::kPasswordLeakDetectionEnabled,
       base::Value(false));
-  identity_test_env()->MakePrimaryAccountAvailable("test@test.com");
+  identity_test_env()->MakeUnconsentedPrimaryAccountAvailable(kTestProfileName);
 
   // Check setting the generated pref updates the underlying preference.
   EXPECT_EQ(pref.SetPref(std::make_unique<base::Value>(true).get()),
@@ -161,7 +183,7 @@
 
   // Check when signed in and Safe Browsing set to standard, both user control
   // and the pref are enabled.
-  identity_test_env()->MakePrimaryAccountAvailable("test@test.com");
+  identity_test_env()->MakeUnconsentedPrimaryAccountAvailable(kTestProfileName);
   prefs()->SetUserPref(prefs::kSafeBrowsingEnabled,
                        std::make_unique<base::Value>(true));
   prefs()->SetUserPref(prefs::kSafeBrowsingEnhanced,
@@ -215,7 +237,7 @@
 
   // Check that the preference cannot be changed when the backing preference is
   // managed, but the preference could otherwise be changed.
-  identity_test_env()->MakePrimaryAccountAvailable("test@test.com");
+  identity_test_env()->MakeUnconsentedPrimaryAccountAvailable(kTestProfileName);
   prefs()->SetUserPref(prefs::kSafeBrowsingEnabled,
                        std::make_unique<base::Value>(true));
   prefs()->SetUserPref(prefs::kSafeBrowsingEnhanced,
diff --git a/chrome/browser/policy/messaging_layer/public/report_client.cc b/chrome/browser/policy/messaging_layer/public/report_client.cc
index 70d7589..9a955938 100644
--- a/chrome/browser/policy/messaging_layer/public/report_client.cc
+++ b/chrome/browser/policy/messaging_layer/public/report_client.cc
@@ -44,7 +44,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/users/chrome_user_manager.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
@@ -66,7 +66,7 @@
 void GetCloudPolicyClient(
     base::OnceCallback<void(StatusOr<policy::CloudPolicyClient*>)>
         get_client_cb) {
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
   policy::CloudPolicyManager* cloud_policy_manager =
       g_browser_process->platform_part()
           ->browser_policy_connector_chromeos()
diff --git a/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc b/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc
index e68fca6..ff1a5af 100644
--- a/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/public/report_client_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/task/post_task.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
+#include "build/build_config.h"
 #include "chrome/browser/policy/messaging_layer/public/report_queue.h"
 #include "chrome/browser/policy/messaging_layer/public/report_queue_configuration.h"
 #include "chrome/browser/policy/messaging_layer/util/status.h"
@@ -22,7 +23,7 @@
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/user_manager/scoped_user_manager.h"
@@ -73,7 +74,7 @@
 class ReportClientTest : public testing::Test {
  public:
   void SetUp() override {
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
     // Set up fake primary profile.
     auto mock_user_manager =
         std::make_unique<testing::NiceMock<chromeos::FakeChromeUserManager>>();
@@ -101,7 +102,7 @@
   }
 
   void TearDown() override {
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
     user_manager_.reset();
     profile_.reset();
 #endif  // OS_CHROMEOS
@@ -110,7 +111,7 @@
  protected:
   content::BrowserTaskEnvironment task_envrionment_;
   std::unique_ptr<ReportingClient::TestEnvironment> test_reporting_;
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
   std::unique_ptr<TestingProfile> profile_;
   std::unique_ptr<user_manager::ScopedUserManager> user_manager_;
 #endif  // OS_CHROMEOS
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
index d9d0ffbf..b12f5c2 100644
--- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
+++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
@@ -11,6 +11,7 @@
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
 #include "base/task_runner.h"
+#include "build/build_config.h"
 #include "chrome/browser/policy/messaging_layer/util/status.h"
 #include "chrome/browser/policy/messaging_layer/util/status_macros.h"
 #include "chrome/browser/policy/messaging_layer/util/statusor.h"
@@ -20,7 +21,7 @@
 #include "components/policy/proto/record_constants.pb.h"
 #include "net/base/backoff_entry.h"
 
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
 #include "chrome/browser/profiles/profile.h"
 #endif  // OS_CHROMEOS
 
diff --git a/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc b/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
index 11bae9c0..befb6e0 100644
--- a/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/upload_client_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "chrome/browser/policy/messaging_layer/upload/record_handler_impl.h"
 #include "components/account_id/account_id.h"
 #include "components/policy/core/common/cloud/dm_token.h"
@@ -22,7 +23,7 @@
 #include "content/public/test/browser_task_environment.h"
 #include "services/network/test/test_network_connection_tracker.h"
 
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/user_manager/scoped_user_manager.h"
@@ -174,7 +175,7 @@
 
  protected:
   void SetUp() override {
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
     // Set up fake primary profile.
     auto mock_user_manager =
         std::make_unique<testing::NiceMock<chromeos::FakeChromeUserManager>>();
@@ -193,7 +194,7 @@
   }
 
   void TearDown() override {
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
     user_manager_.reset();
     profile_.reset();
 #endif  // OS_CHROMEOS
@@ -202,7 +203,7 @@
   bool need_encryption_key() const { return GetParam(); }
 
   content::BrowserTaskEnvironment task_envrionment_;
-#ifdef OS_CHROMEOS
+#if defined(OS_CHROMEOS)
   std::unique_ptr<TestingProfile> profile_;
   std::unique_ptr<user_manager::ScopedUserManager> user_manager_;
 #endif  // OS_CHROMEOS
diff --git a/chrome/browser/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc b/chrome/browser/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
index d54b871..3cccbe0e 100644
--- a/chrome/browser/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
+++ b/chrome/browser/prefetch/search_prefetch/streaming_search_prefetch_url_loader.cc
@@ -270,8 +270,8 @@
     return;
   }
 
-  if (!forwarding_client_) {
-    DCHECK(streaming_prefetch_request_);
+  if (streaming_prefetch_request_) {
+    DCHECK(!forwarding_client_);
     if (status.error_code == net::OK) {
       streaming_prefetch_request_->MarkPrefetchAsComplete();
     } else {
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index b8eb9ecd..381c6b3 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -363,6 +363,11 @@
 }
 #endif
 
+bool IsEphemeral(Profile* profile) {
+  return profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles) ||
+         profile->IsEphemeralGuestProfile();
+}
+
 }  // namespace
 
 ProfileManager::ProfileManager(const base::FilePath& user_data_dir)
@@ -1560,8 +1565,7 @@
   DCHECK(base::Contains(profiles_info_, profile_dir));
 
   Profile* profile = GetProfileByPath(profile_dir);
-  bool ephemeral =
-      profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles);
+  bool ephemeral = IsEphemeral(profile);
 
   // Remove from |profiles_info_|, eventually causing the Profile object's
   // destruction.
@@ -1910,12 +1914,10 @@
       storage.GetProfileAttributesWithPath(profile->GetPath(), &entry);
   DCHECK(has_entry);
 
-  if (profile->IsEphemeralGuestProfile()) {
-    profile->GetPrefs()->SetBoolean(prefs::kForceEphemeralProfiles, true);
+  if (profile->IsEphemeralGuestProfile())
     entry->SetIsGuest(true);
-  }
 
-  if (profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles))
+  if (IsEphemeral(profile))
     entry->SetIsEphemeral(true);
 
   entry->SetSignedInWithCredentialProvider(
@@ -1972,7 +1974,7 @@
     // Some profiles might become ephemeral after they are created.
     // Don't persist the System Profile as one of the last actives, it should
     // never get a browser.
-    if (!(*it)->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles) &&
+    if (!IsEphemeral(*it) &&
         profile_paths.find(profile_path) == profile_paths.end() &&
         profile_path !=
             base::FilePath(chrome::kSystemProfileDir).AsUTF8Unsafe()) {
@@ -1987,10 +1989,8 @@
   DCHECK(browser);
   Profile* profile = browser->profile();
   DCHECK(profile);
-  bool is_ephemeral =
-      profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles);
-  if (!profile->IsOffTheRecord() && !is_ephemeral && !browser->is_type_app() &&
-      ++browser_counts_[profile] == 1) {
+  if (!profile->IsOffTheRecord() && !IsEphemeral(profile) &&
+      !browser->is_type_app() && ++browser_counts_[profile] == 1) {
     active_profiles_.push_back(profile);
     SaveActiveProfiles();
   }
@@ -2037,7 +2037,7 @@
   base::FilePath path = profile->GetPath();
   if (IsProfileDirectoryMarkedForDeletion(path)) {
     // Do nothing if the profile is already being deleted.
-  } else if (profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles)) {
+  } else if (IsEphemeral(profile)) {
     // Avoid scheduling deletion if it's a testing profile that is not
     // registered with profile manager.
     if (profile->AsTestingProfile() &&
@@ -2117,7 +2117,7 @@
 
   // Don't remember ephemeral profiles as last because they are not going to
   // persist after restart.
-  if (last_active->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles))
+  if (IsEphemeral(last_active))
     return;
 
   profile_manager_->UpdateLastUser(last_active);
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc
index 0f309041..ca5acac7 100644
--- a/chrome/browser/profiles/profile_manager_browsertest.cc
+++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -17,6 +17,7 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/platform_apps/shortcut_manager.h"
 #include "chrome/browser/password_manager/password_store_factory.h"
+#include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
@@ -25,6 +26,7 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -33,6 +35,8 @@
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
+#include "components/policy/core/common/policy_map.h"
+#include "components/policy/policy_constants.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/browsing_data_remover.h"
 #include "content/public/test/browser_test.h"
@@ -748,3 +752,54 @@
                    ->GetFilePath(prefs::kSaveFileDefaultDirectory)
                    .empty());
 }
+
+#if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
+class EphemeralGuestProfilePolicyTest
+    : public policy::PolicyTest,
+      public ::testing::WithParamInterface<bool> {
+ public:
+  EphemeralGuestProfilePolicyTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kEnableEphemeralGuestProfilesOnDesktop);
+  }
+
+ protected:
+  void SetUp() override {
+    // Shortcut deletion delays tests shutdown on Win-7 and results in time out.
+    // See crbug.com/1073451.
+#if defined(OS_WIN)
+    AppShortcutManager::SuppressShortcutsForTesting();
+#endif
+    InProcessBrowserTest::SetUp();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+// TODO(https://crbug.com/1125474): Remove this comment!
+// If this test times out on Windows7 (or flaky on Windows 10), please disable
+// it and assign the bug to rhalavati@.
+IN_PROC_BROWSER_TEST_P(EphemeralGuestProfilePolicyTest,
+                       TestsForceEphemeralProfilesPolicy) {
+  policy::PolicyMap policies;
+  SetPolicy(&policies, policy::key::kForceEphemeralProfiles,
+            base::Value(GetParam()));
+  UpdateProviderPolicy(policies);
+
+  Profile* guest = CreateGuestBrowser()->profile();
+  EXPECT_TRUE(guest->IsEphemeralGuestProfile());
+
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+  ProfileAttributesEntry* entry;
+  EXPECT_TRUE(profile_manager->GetProfileAttributesStorage()
+                  .GetProfileAttributesWithPath(guest->GetPath(), &entry));
+  EXPECT_TRUE(entry->IsGuest());
+  EXPECT_TRUE(entry->IsEphemeral());
+}
+
+INSTANTIATE_TEST_SUITE_P(AllGuestProfileTypes,
+                         EphemeralGuestProfilePolicyTest,
+                         /*policy_is_enforced=*/testing::Bool());
+
+#endif  // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
index 77e8483..a7aa1de 100644
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -82,6 +82,7 @@
     deps = [
       "accessibility:closure_compile",
       "components:closure_compile",
+      "domain_reliability_internals:closure_compile",
       "engagement:closure_compile",
       "interventions_internals:closure_compile",
       "media:closure_compile",
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb
index 3ba3d8fc..af65a0f 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb
@@ -371,7 +371,7 @@
 <translation id="3587482841069643663">All</translation>
 <translation id="3589661172894441357">Glossary</translation>
 <translation id="3591784666823501596">Royal Blue</translation>
-<translation id="3594207934078151302">Medium Sea Green</translation>
+<translation id="3594207934078151302">Medium sea green</translation>
 <translation id="3599054940393788245">Not inside math</translation>
 <translation id="360241989769010433">Acknowledgements</translation>
 <translation id="3616016838842055984">If you reach an item that you want to click, press Search + Space. Try it now to continue.</translation>
@@ -561,7 +561,7 @@
 <translation id="5045870649377683106">Now, find the left shift key, which is directly above the control key. To continue, press the left shift key.</translation>
 <translation id="5050015258024679800">Previous level 4 heading</translation>
 <translation id="5054047268577924192">Previous list item</translation>
-<translation id="5085453135206054947">Pale Violet Red</translation>
+<translation id="5085453135206054947">Pale violet red</translation>
 <translation id="5087864757604726239">back</translation>
 <translation id="5102981729317424850">Tool bar</translation>
 <translation id="5105050547967751155">rq</translation>
@@ -1019,7 +1019,7 @@
 <translation id="8625173877182443267">No next level 6 heading</translation>
 <translation id="8628186274519446680">Tomato</translation>
 <translation id="8638532244051952400">Announce current cell co-ordinates</translation>
-<translation id="8640369214276455272">White Smoke</translation>
+<translation id="8640369214276455272">White smoke</translation>
 <translation id="8651481478098336970">volume mute</translation>
 <translation id="8653646212587894517">Show links list</translation>
 <translation id="8656888282555543604">Enable braille logging</translation>
@@ -1084,7 +1084,7 @@
 <translation id="9192904702577636854">Marquee</translation>
 <translation id="9205282956404529648">Type to auto complete</translation>
 <translation id="9208241857935108694">Antique White</translation>
-<translation id="9220679313820249046">Orange Red</translation>
+<translation id="9220679313820249046">Orange red</translation>
 <translation id="9223032053830369045">Dark Red</translation>
 <translation id="923331726185079994">ChromeVox Updated</translation>
 <translation id="93384979447910801">Dark Sea Green</translation>
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome.js b/chrome/browser/resources/chromeos/login/oobe_welcome.js
index 084f1f6..b324a27 100644
--- a/chrome/browser/resources/chromeos/login/oobe_welcome.js
+++ b/chrome/browser/resources/chromeos/login/oobe_welcome.js
@@ -129,7 +129,13 @@
      * @private {number}
      * @const
      */
-    DEFAULT_CHROMEVOX_HINT_TIMEOUT_MS_: {type: Number, value: 40 * 1000}
+    DEFAULT_CHROMEVOX_HINT_TIMEOUT_MS_: {type: Number, value: 40 * 1000},
+
+    /**
+     * Tracks if we've given the ChromeVox hint yet.
+     * @private
+     */
+    chromeVoxHintGiven_: {type: Boolean, value: false}
   },
 
   /** Overridden from LoginScreenBehavior. */
@@ -668,7 +674,7 @@
    * @private
    */
   onVoiceNotLoaded_() {
-    if (!this.voicesChangedListenerMaybeGiveChromeVoxHint_) {
+    if (this.voicesChangedListenerMaybeGiveChromeVoxHint_ === undefined) {
       // Add voiceschanged listener that tries to give the hint when new voices
       // are loaded.
       this.voicesChangedListenerMaybeGiveChromeVoxHint_ =
@@ -700,6 +706,14 @@
    * @private
    */
   giveChromeVoxHint_(locale, options, isDefaultHint) {
+    if (this.chromeVoxHintGiven_) {
+      // Only give the hint once.
+      // Due to event listeners/timeouts, there is the chance that this gets
+      // called multiple times.
+      return;
+    }
+
+    this.chromeVoxHintGiven_ = true;
     if (isDefaultHint) {
       console.warn(
           'No voice available for ' + loadTimeData.getString('language') +
diff --git a/chrome/browser/resources/domain_reliability_internals/BUILD.gn b/chrome/browser/resources/domain_reliability_internals/BUILD.gn
new file mode 100644
index 0000000..fede7099
--- /dev/null
+++ b/chrome/browser/resources/domain_reliability_internals/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/closure_compiler/compile_js.gni")
+
+js_type_check("closure_compile") {
+  deps = [ ":domain_reliability_internals" ]
+}
+
+js_library("domain_reliability_internals") {
+  deps = [
+    "//third_party/jstemplate:jstemplate",
+    "//ui/webui/resources/js:cr",
+    "//ui/webui/resources/js:util",
+  ]
+}
diff --git a/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.html b/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.html
index 16ef608..bacb13f2 100644
--- a/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.html
+++ b/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.html
@@ -4,8 +4,9 @@
   <meta charset="utf-8">
   <link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
   <link rel="stylesheet" href="domain_reliability_internals.css">
-  <script src="chrome://resources/js/cr.js"></script>
   <script src="chrome://resources/js/assert.js"></script>
+  <script src="chrome://resources/js/promise_resolver.js"></script>
+  <script src="chrome://resources/js/cr.js"></script>
   <script src="chrome://resources/js/util.js"></script>
   <script src="chrome://resources/js/jstemplate_compiled.js"></script>
   <script src="domain_reliability_internals.js"></script>
diff --git a/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.js b/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.js
index 8d475fb4..b9fa8e2 100644
--- a/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.js
+++ b/chrome/browser/resources/domain_reliability_internals/domain_reliability_internals.js
@@ -6,17 +6,14 @@
   'use strict';
 
   function initialize() {
-    chrome.send('updateData');
-  }
-
-  function onDataUpdated(data) {
-    jstProcess(new JsEvalContext(data), $('template'));
+    cr.sendWithPromise('updateData').then(data => {
+      jstProcess(new JsEvalContext(data), $('template'));
+    });
   }
 
   // Return an object with all of the exports.
   return {
     initialize: initialize,
-    onDataUpdated: onDataUpdated,
   };
 });
 
diff --git a/chrome/browser/resources/settings/chromeos/device_page/power.html b/chrome/browser/resources/settings/chromeos/device_page/power.html
index 53919601..d4e3df7 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/power.html
+++ b/chrome/browser/resources/settings/chromeos/device_page/power.html
@@ -53,35 +53,55 @@
       </div>
     </div>
 
-    <div id="powerIdleLabel"
-        class$="cr-row [[getFirst_(batteryStatus_.present)]]"
-        aria-label="true">
-      $i18n{powerIdleLabel}
-    </div>
-    <div class="cr-row indented first">
-      <div class="flex" aria-hidden="true">
-        $i18n{powerIdleWhileChargingLabel}
+    <div class$="cr-row [[getFirst_(batteryStatus_.present)]]">
+      <div id="powerIdleLabel" class="flex" aria-label="true">
+        $i18n{powerIdleLabel}
       </div>
-      <template is="dom-if" if="[[acIdleManaged_]]" restamp>
-        <cr-policy-indicator id="acIdleManagedIndicator"
-            indicator-type="devicePolicy"
-            icon-aria-label="$i18n{powerIdleWhileChargingAriaLabel}">
-        </cr-policy-indicator>
-      </template>
-      <select id="acIdleSelect" class="md-select"
-          on-change="onAcIdleSelectChange_"
-          disabled="[[shouldAcIdleSelectBeDisabled_]]"
-          aria-label="$i18n{powerIdleWhileChargingAriaLabel}"
-          deep-link-focus-id$="[[Setting.kPowerIdleBehaviorWhileCharging]]">
-        <template is="dom-repeat" items="[[acIdleOptions_]]">
-          <option value="[[item.value]]" selected="[[item.selected]]">
-            [[item.name]]
-          </option>
+      <template is="dom-if" if="[[!batteryStatus_.present]]" restamp>
+        <template is="dom-if" if="[[acIdleManaged_]]" restamp>
+          <cr-policy-indicator id="noBatteryAcIdleManagedIndicator"
+              indicator-type="devicePolicy"
+              icon-aria-label="$i18n{powerIdleWhileChargingAriaLabel}">
+          </cr-policy-indicator>
         </template>
-      </select>
+        <select id="noBatteryAcIdleSelect" class="md-select"
+            on-change="onAcIdleSelectChange_"
+            disabled="[[shouldAcIdleSelectBeDisabled_]]"
+            aria-label="$i18n{powerIdleWhileChargingAriaLabel}"
+            deep-link-focus-id$="[[Setting.kPowerIdleBehaviorWhileCharging]]">
+          <template is="dom-repeat" items="[[acIdleOptions_]]">
+            <option value="[[item.value]]" selected="[[item.selected]]">
+              [[item.name]]
+            </option>
+          </template>
+        </select>
+      </template>
     </div>
 
     <template is="dom-if" if="[[batteryStatus_.present]]" restamp>
+      <div id="acIdleSettingBox" class="cr-row indented first">
+        <div class="flex" aria-hidden="true">
+          $i18n{powerIdleWhileChargingLabel}
+        </div>
+        <template is="dom-if" if="[[acIdleManaged_]]" restamp>
+          <cr-policy-indicator id="acIdleManagedIndicator"
+              indicator-type="devicePolicy"
+              icon-aria-label="$i18n{powerIdleWhileChargingAriaLabel}">
+          </cr-policy-indicator>
+        </template>
+        <select id="acIdleSelect" class="md-select"
+            on-change="onAcIdleSelectChange_"
+            disabled="[[shouldAcIdleSelectBeDisabled_]]"
+            aria-label="$i18n{powerIdleWhileChargingAriaLabel}"
+            deep-link-focus-id$="[[Setting.kPowerIdleBehaviorWhileCharging]]">
+          <template is="dom-repeat" items="[[acIdleOptions_]]">
+            <option value="[[item.value]]" selected="[[item.selected]]">
+              [[item.name]]
+            </option>
+          </template>
+        </select>
+      </div>
+
       <div id="batteryIdleSettingBox" class="cr-row indented">
         <div class="flex" aria-hidden="true">
           $i18n{powerIdleWhileOnBatteryLabel}
diff --git a/chrome/browser/resources/settings/privacy_page/BUILD.gn b/chrome/browser/resources/settings/privacy_page/BUILD.gn
index 2b2f09e..b671664 100644
--- a/chrome/browser/resources/settings/privacy_page/BUILD.gn
+++ b/chrome/browser/resources/settings/privacy_page/BUILD.gn
@@ -146,7 +146,6 @@
     "..:route",
     "..:router.m",
     "../controls:settings_toggle_button.m",
-    "../people_page:sync_browser_proxy.m",
     "../prefs:prefs_behavior.m",
     "../site_settings:constants",
     "../site_settings:site_data_details_subpage",
@@ -235,7 +234,6 @@
     "..:metrics_browser_proxy",
     "..:route",
     "..:router.m",
-    "../people_page:sync_browser_proxy.m",
     "../prefs:prefs_behavior.m",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/js:assert.m",
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 73d18d0..8dbac3f 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -95,8 +95,7 @@
             associated-control="[[$$('#securityLinkRow')]]"
             learn-more-url="$i18n{safeBrowsingHelpCenterURL}">
           <settings-security-page prefs="{{prefs}}"
-              focus-config="[[focusConfig_]]"
-              sync-status="[[syncStatus]]">
+              focus-config="[[focusConfig_]]">
           </settings-security-page>
         </settings-subpage>
       </template>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js
index 1a31634..4d48941 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.js
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -28,7 +28,6 @@
 import {HatsBrowserProxyImpl} from '../hats_browser_proxy.js';
 import {loadTimeData} from '../i18n_setup.js';
 import {MetricsBrowserProxy, MetricsBrowserProxyImpl, PrivacyElementInteractions} from '../metrics_browser_proxy.js';
-import {SyncBrowserProxyImpl, SyncStatus} from '../people_page/sync_browser_proxy.m.js';
 import {PrefsBehavior} from '../prefs/prefs_behavior.m.js';
 import {routes} from '../route.js';
 import {RouteObserverBehavior, Router} from '../router.m.js';
@@ -66,12 +65,6 @@
       notify: true,
     },
 
-    /**
-     * The current sync status, supplied by SyncBrowserProxy.
-     * @type {?SyncStatus}
-     */
-    syncStatus: Object,
-
     /** @private */
     isGuest_: {
       type: Boolean,
@@ -236,11 +229,6 @@
         'onBlockAutoplayStatusChanged',
         this.onBlockAutoplayStatusChanged_.bind(this));
 
-    SyncBrowserProxyImpl.getInstance().getSyncStatus().then(
-        this.handleSyncStatus_.bind(this));
-    this.addWebUIListener(
-        'sync-status-changed', this.handleSyncStatus_.bind(this));
-
     SiteSettingsPrefsBrowserProxyImpl.getInstance()
         .getCookieSettingDescription()
         .then(description => this.cookieSettingDescription_ = description);
@@ -249,15 +237,6 @@
         description => this.cookieSettingDescription_ = description);
   },
 
-  /**
-   * Handler for when the sync state is pushed from the browser.
-   * @param {?SyncStatus} syncStatus
-   * @private
-   */
-  handleSyncStatus_(syncStatus) {
-    this.syncStatus = syncStatus;
-  },
-
   /** @protected */
   currentRouteChanged() {
     this.showClearBrowsingDataDialog_ =
diff --git a/chrome/browser/resources/settings/privacy_page/security_page.html b/chrome/browser/resources/settings/privacy_page/security_page.html
index 83a1b7c..b3fd1b8a 100644
--- a/chrome/browser/resources/settings/privacy_page/security_page.html
+++ b/chrome/browser/resources/settings/privacy_page/security_page.html
@@ -132,7 +132,7 @@
                 pref="{{prefs.generated.password_leak_detection}}"
                 sub-label="[[getPasswordsLeakToggleSubLabel_(
                               prefs.profile.password_manager_leak_detection.*,
-                              syncStatus.*)]]">
+                              prefs.generated.password_leak_detection.*)]]">
             </settings-toggle-button>
           </div>
         </settings-collapse-radio-button>
diff --git a/chrome/browser/resources/settings/privacy_page/security_page.js b/chrome/browser/resources/settings/privacy_page/security_page.js
index 33be8331..aa875ca 100644
--- a/chrome/browser/resources/settings/privacy_page/security_page.js
+++ b/chrome/browser/resources/settings/privacy_page/security_page.js
@@ -21,7 +21,6 @@
 
 import {loadTimeData} from '../i18n_setup.js';
 import {MetricsBrowserProxy, MetricsBrowserProxyImpl, PrivacyElementInteractions, SafeBrowsingInteractions} from '../metrics_browser_proxy.js';
-import {SyncStatus} from '../people_page/sync_browser_proxy.m.js';
 import {PrefsBehavior} from '../prefs/prefs_behavior.m.js';
 import {routes} from '../route.js';
 import {Route, RouteObserverBehavior, Router} from '../router.m.js';
@@ -52,9 +51,6 @@
   ],
 
   properties: {
-    /** @type {SyncStatus} */
-    syncStatus: Object,
-
     /**
      * Preferences state.
      */
@@ -221,9 +217,11 @@
    */
   getPasswordsLeakToggleSubLabel_() {
     let subLabel = this.i18n('passwordsLeakDetectionGeneralDescription');
+    // If the backing password leak detection preference is enabled, but the
+    // generated preference is disabled, then additional text explaining that
+    // the feature will be enabled if the user signs in is added.
     if (this.getPref('profile.password_manager_leak_detection').value &&
-        (!this.syncStatus.signedIn ||
-         !!this.syncStatus.signedIn && !!this.syncStatus.hasError)) {
+        !this.getPref('generated.password_leak_detection').value) {
       subLabel +=
           ' ' +  // Whitespace is a valid sentence separator w.r.t. i18n.
           this.i18n('passwordsLeakDetectionSignedOutEnabledDescription');
diff --git a/chrome/browser/ui/android/default_browser_promo/BUILD.gn b/chrome/browser/ui/android/default_browser_promo/BUILD.gn
index 186177a..97e4233 100644
--- a/chrome/browser/ui/android/default_browser_promo/BUILD.gn
+++ b/chrome/browser/ui/android/default_browser_promo/BUILD.gn
@@ -7,37 +7,22 @@
 android_library("java") {
   sources = [
     "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoDeps.java",
-    "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoDialog.java",
     "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManager.java",
     "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoMetrics.java",
     "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtils.java",
   ]
   deps = [
-    ":java_resources",
     "//base:base_java",
     "//chrome/browser/android/lifecycle:java",
     "//chrome/browser/flags:java",
     "//chrome/browser/preferences:java",
     "//chrome/browser/profiles/android:java",
-    "//components/browser_ui/widget/android:java",
     "//third_party/android_deps:androidx_annotation_annotation_java",
     "//ui/android:ui_full_java",
   ]
   resources_package = "org.chromium.chrome.browser.ui.default_browser_promo"
 }
 
-android_resources("java_resources") {
-  sources = [
-    "java/res/drawable/default_browser_promo_illustration.xml",
-    "java/res/drawable/ic_illustration_aroundlogo.xml",
-  ]
-  deps = [
-    "//chrome/browser/ui/android/strings:ui_strings_grd",
-    "//components/browser_ui/widget/android:java_resources",
-    "//ui/android:ui_java_resources",
-  ]
-}
-
 java_library("junit") {
   # Skip platform checks since Robolectric depends on requires_android targets.
   bypass_platform_checks = true
@@ -52,30 +37,3 @@
     "//third_party/mockito:mockito_java",
   ]
 }
-
-android_library("javatests") {
-  testonly = true
-
-  sources = [ "java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManagerTest.java" ]
-
-  deps = [
-    ":java",
-    "//base:base_java",
-    "//base:base_java_test_support",
-    "//chrome/browser/android/lifecycle:java",
-    "//chrome/browser/flags:java",
-    "//chrome/test/android:chrome_java_test_support",
-    "//components/browser_ui/widget/android:java",
-    "//content/public/test/android:content_java_test_support",
-    "//third_party/android_deps:android_support_v7_appcompat_java",
-    "//third_party/android_deps:androidx_preference_preference_java",
-    "//third_party/android_deps:androidx_test_runner_java",
-    "//third_party/android_deps:espresso_java",
-    "//third_party/android_support_test_runner:rules_java",
-    "//third_party/android_support_test_runner:runner_java",
-    "//third_party/hamcrest:hamcrest_java",
-    "//third_party/junit:junit",
-    "//ui/android:ui_full_java",
-    "//ui/android:ui_java_test_support",
-  ]
-}
diff --git a/chrome/browser/ui/android/default_browser_promo/java/res/drawable/default_browser_promo_illustration.xml b/chrome/browser/ui/android/default_browser_promo/java/res/drawable/default_browser_promo_illustration.xml
deleted file mode 100644
index 3d97272..0000000
--- a/chrome/browser/ui/android/default_browser_promo/java/res/drawable/default_browser_promo_illustration.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?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. -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:height="122dp"
-        android:width="127dp"
-        android:drawable="@drawable/ic_illustration_aroundlogo" />
-    <item
-        android:top="27dp"
-        android:left="27dp"
-        android:height="65dp"
-        android:width="65dp"
-        android:drawable="@mipmap/app_icon"/>
-</layer-list>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/default_browser_promo/java/res/drawable/ic_illustration_aroundlogo.xml b/chrome/browser/ui/android/default_browser_promo/java/res/drawable/ic_illustration_aroundlogo.xml
deleted file mode 100644
index 96a28f2..0000000
--- a/chrome/browser/ui/android/default_browser_promo/java/res/drawable/ic_illustration_aroundlogo.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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. -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="127dp"
-    android:height="122dp"
-    android:viewportWidth="127"
-    android:viewportHeight="122">
-  <path
-      android:pathData="M2,58.06C2,26.617 27.49,1.128 58.932,1.128C65.829,1.12 72.67,2.368 79.12,4.811"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.73"
-      android:fillColor="#00000000"
-      android:strokeColor="#DB4437"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M93.194,103.533C83.329,110.988 71.297,115.012 58.932,114.992"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.73"
-      android:fillColor="#00000000"
-      android:strokeColor="#DB4437"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M84.192,7.024C102.961,16.332 115.864,35.689 115.864,58.06C115.874,65.775 114.311,73.411 111.27,80.501C108.23,87.592 103.777,93.988 98.182,99.3"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.73"
-      android:fillColor="#00000000"
-      android:strokeColor="#4285F4"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M93.776,103.088C83.81,110.823 71.548,115.012 58.932,114.992C29.707,114.992 5.624,92.971 2.373,64.616"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.73"
-      android:fillColor="#00000000"
-      android:strokeColor="#00A152"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M25.774,22.798C31.793,22.798 36.672,17.918 36.672,11.899C36.672,5.88 31.793,1 25.774,1C19.754,1 14.875,5.88 14.875,11.899C14.875,17.918 19.754,22.798 25.774,22.798Z"
-      android:fillColor="#DB4437"/>
-  <path
-      android:pathData="M31.614,16.335C32.44,15.247 32.947,13.95 33.076,12.59C33.205,11.23 32.951,9.861 32.344,8.638C31.737,7.414 30.8,6.384 29.639,5.664C28.479,4.944 27.14,4.563 25.774,4.563C24.407,4.563 23.069,4.944 21.908,5.664C20.747,6.384 19.81,7.414 19.203,8.638C18.596,9.861 18.342,11.23 18.471,12.59C18.6,13.95 19.107,15.247 19.933,16.335H31.614Z"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.211"
-      android:fillColor="#00000000"
-      android:strokeColor="#ffffff"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M115.869,65.883C121.889,65.883 126.768,61.004 126.768,54.985C126.768,48.965 121.889,44.086 115.869,44.086C109.85,44.086 104.97,48.965 104.97,54.985C104.97,61.004 109.85,65.883 115.869,65.883Z"
-      android:fillColor="#4285F4"/>
-  <path
-      android:pathData="M36.74,121.376C42.759,121.376 47.639,116.497 47.639,110.477C47.639,104.458 42.759,99.579 36.74,99.579C30.721,99.579 25.841,104.458 25.841,110.477C25.841,116.497 30.721,121.376 36.74,121.376Z"
-      android:fillColor="#00A152"/>
-  <path
-      android:pathData="M108.932,55.708L113.537,60.312L123.114,50.735"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.211"
-      android:fillColor="#00000000"
-      android:strokeColor="#ffffff"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M40.923,108.56H31.923V116.06H40.923V108.56Z"
-      android:fillColor="#ffffff"/>
-  <path
-      android:pathData="M33.423,110.06V107.06C33.423,106.265 33.739,105.502 34.301,104.939C34.864,104.376 35.627,104.06 36.423,104.06C37.218,104.06 37.981,104.376 38.544,104.939C39.107,105.502 39.423,106.265 39.423,107.06V110.06"
-      android:strokeLineJoin="round"
-      android:strokeWidth="1.211"
-      android:fillColor="#00000000"
-      android:strokeColor="#ffffff"
-      android:strokeLineCap="round"/>
-  <path
-      android:pathData="M26.966,13.317C26.98,13.297 26.993,13.277 27.006,13.256C27.02,13.236 27.034,13.217 27.046,13.196C27.06,13.176 27.074,13.156 27.086,13.136C27.1,13.116 27.114,13.096 27.127,13.076C27.14,13.056 27.154,13.036 27.167,13.016C27.181,12.996 27.194,12.976 27.207,12.955C27.221,12.935 27.234,12.915 27.247,12.895C27.261,12.875 27.274,12.855 27.287,12.835C27.301,12.815 27.315,12.795 27.327,12.774C27.341,12.755 27.355,12.735 27.367,12.714C27.381,12.694 27.395,12.675 27.407,12.654C27.421,12.634 27.435,12.614 27.448,12.594C27.462,12.574 27.475,12.554 27.488,12.534C27.502,12.514 27.515,12.494 27.528,12.473C27.542,12.454 27.555,12.434 27.568,12.413C27.582,12.393 27.596,12.373 27.608,12.353C27.622,12.333 27.636,12.313 27.648,12.293C27.662,12.273 27.676,12.253 27.688,12.233C27.702,12.213 27.716,12.193 27.729,12.172C27.743,12.153 27.756,12.132 27.769,12.112C27.783,12.092 27.796,12.072 27.809,12.052C27.823,12.032 27.836,12.012 27.849,11.992C27.863,11.972 27.877,11.952 27.889,11.931C27.903,11.912 27.917,11.892 27.929,11.871C27.943,11.851 27.957,11.831 27.969,11.811C27.984,11.791 27.997,11.771 28.01,11.751C28.024,11.731 28.037,11.711 28.05,11.69C28.064,11.671 28.077,11.651 28.09,11.63C28.104,11.611 28.117,11.59 28.13,11.57C28.144,11.55 28.158,11.53 28.17,11.51C28.184,11.49 28.198,11.47 28.21,11.45C28.225,11.43 28.238,11.41 28.25,11.389C28.265,11.37 28.278,11.35 28.291,11.329C28.305,11.309 28.318,11.289 28.331,11.269C28.345,11.249 28.358,11.229 28.371,11.209C28.385,11.189 28.399,11.169 28.411,11.148C28.425,11.129 28.439,11.109 28.451,11.088C28.465,11.069 28.479,11.049 28.491,11.028C28.506,11.008 28.519,10.988 28.531,10.968C28.546,10.948 28.559,10.928 28.572,10.908C28.586,10.888 28.599,10.868 28.612,10.847C28.626,10.828 28.639,10.807 28.652,10.787C28.666,10.767 28.68,10.747 28.692,10.727C28.706,10.707 28.72,10.687 28.732,10.667C28.747,10.647 28.76,10.627 28.772,10.606C28.787,10.587 28.8,10.567 28.812,10.546C28.827,10.526 28.84,10.507 28.852,10.486C28.882,10.442 28.911,10.398 28.939,10.354C28.951,10.337 28.962,10.32 28.972,10.303C28.987,10.283 29,10.263 29.013,10.243C29.027,10.223 29.04,10.203 29.053,10.182C29.067,10.163 29.08,10.143 29.093,10.122C29.107,10.103 29.121,10.083 29.133,10.062C29.147,10.042 29.161,10.022 29.173,10.002C29.188,9.982 29.201,9.962 29.213,9.941C29.228,9.922 29.241,9.902 29.253,9.881C29.268,9.862 29.281,9.842 29.293,9.821C29.308,9.802 29.322,9.782 29.334,9.761C29.348,9.742 29.362,9.721 29.374,9.701C29.388,9.681 29.402,9.661 29.414,9.64C29.429,9.621 29.442,9.601 29.454,9.58C29.469,9.561 29.482,9.541 29.494,9.52C29.509,9.501 29.522,9.481 29.534,9.46C29.549,9.441 29.563,9.42 29.574,9.399C29.589,9.38 29.603,9.36 29.615,9.339C29.629,9.32 29.643,9.3 29.655,9.279C29.67,9.26 29.683,9.24 29.695,9.219C29.71,9.2 29.723,9.18 29.735,9.158C29.75,9.14 29.764,9.12 29.775,9.098C29.79,9.079 29.804,9.059 29.815,9.038C29.83,9.019 29.844,8.999 29.855,8.978C29.871,8.959 29.884,8.939 29.896,8.918C29.911,8.899 29.924,8.879 29.936,8.857C29.951,8.839 29.965,8.819 29.976,8.797C29.991,8.779 30.005,8.758 30.016,8.737C30.032,8.718 30.045,8.698 30.056,8.677C30.072,8.658 30.085,8.638 30.096,8.616C30.112,8.598 30.126,8.578 30.136,8.556C30.152,8.538 30.166,8.518 30.177,8.496C30.193,8.478 30.206,8.458 30.217,8.436C30.233,8.418 30.247,8.398 30.257,8.376C30.273,8.358 30.287,8.337 30.297,8.315C30.334,8.277 30.354,8.225 30.354,8.172C30.354,8.119 30.332,8.068 30.294,8.03C30.257,7.992 30.206,7.971 30.152,7.97C30.099,7.97 30.047,7.99 30.009,8.028C29.987,8.037 29.966,8.051 29.949,8.068C29.927,8.078 29.906,8.091 29.889,8.108C29.867,8.118 29.846,8.132 29.828,8.148C29.806,8.158 29.786,8.172 29.768,8.188C29.746,8.199 29.726,8.212 29.708,8.228C29.686,8.239 29.666,8.252 29.648,8.268C29.626,8.279 29.606,8.293 29.587,8.308C29.566,8.319 29.546,8.333 29.527,8.349C29.506,8.36 29.486,8.373 29.467,8.389C29.446,8.4 29.425,8.413 29.407,8.429C29.385,8.44 29.365,8.454 29.347,8.469C29.325,8.48 29.305,8.494 29.286,8.509C29.265,8.521 29.245,8.534 29.226,8.549C29.205,8.561 29.185,8.574 29.166,8.589C29.145,8.601 29.125,8.614 29.106,8.63C29.084,8.641 29.064,8.655 29.045,8.67C29.024,8.681 29.004,8.695 28.985,8.71C28.964,8.722 28.944,8.735 28.925,8.75C28.904,8.762 28.884,8.775 28.865,8.79C28.824,8.817 28.784,8.844 28.744,8.87C28.723,8.882 28.703,8.896 28.684,8.91C28.663,8.922 28.643,8.936 28.624,8.951C28.603,8.963 28.583,8.976 28.564,8.991C28.543,9.003 28.523,9.016 28.503,9.031C28.463,9.058 28.423,9.084 28.383,9.111C28.362,9.123 28.342,9.137 28.323,9.151C28.283,9.178 28.242,9.205 28.202,9.232C28.181,9.244 28.161,9.257 28.142,9.272C28.102,9.299 28.062,9.325 28.021,9.352C28.004,9.362 27.987,9.373 27.97,9.385C27.945,9.399 27.921,9.415 27.899,9.432C27.878,9.444 27.858,9.457 27.838,9.472C27.818,9.484 27.798,9.498 27.778,9.512C27.758,9.524 27.738,9.538 27.718,9.552C27.697,9.564 27.677,9.578 27.658,9.592C27.637,9.605 27.617,9.618 27.598,9.632C27.577,9.645 27.557,9.658 27.537,9.673C27.517,9.685 27.497,9.698 27.477,9.713C27.457,9.725 27.437,9.739 27.417,9.753C27.396,9.765 27.376,9.779 27.357,9.793C27.336,9.805 27.316,9.819 27.296,9.833C27.276,9.846 27.256,9.859 27.236,9.873C27.216,9.886 27.196,9.899 27.176,9.913C27.156,9.926 27.135,9.939 27.116,9.954C27.095,9.966 27.075,9.979 27.056,9.994C27.035,10.006 27.015,10.019 26.995,10.034C26.975,10.046 26.955,10.06 26.935,10.074C26.914,10.086 26.895,10.1 26.875,10.114C26.854,10.127 26.834,10.14 26.815,10.154C26.794,10.167 26.774,10.18 26.754,10.194C26.734,10.207 26.714,10.22 26.694,10.234C26.674,10.247 26.654,10.26 26.634,10.274C26.614,10.287 26.594,10.301 26.574,10.315C26.553,10.327 26.533,10.341 26.513,10.355C26.493,10.368 26.473,10.381 26.453,10.395C26.433,10.408 26.413,10.421 26.393,10.435C26.372,10.448 26.353,10.461 26.333,10.475C26.312,10.488 26.292,10.501 26.273,10.515C26.252,10.528 26.232,10.541 26.212,10.556C26.192,10.568 26.172,10.582 26.152,10.596C26.132,10.608 26.112,10.622 26.092,10.636C26.071,10.649 26.051,10.662 26.032,10.676C26.011,10.689 25.991,10.702 25.971,10.716C25.951,10.729 25.931,10.742 25.911,10.756C25.891,10.769 25.871,10.782 25.851,10.796C25.83,10.809 25.81,10.823 25.791,10.837C25.77,10.849 25.75,10.863 25.73,10.877C25.71,10.889 25.69,10.903 25.67,10.917C25.65,10.929 25.63,10.943 25.61,10.957C25.59,10.97 25.57,10.983 25.55,10.997C25.529,11.01 25.509,11.023 25.49,11.037C25.469,11.05 25.449,11.063 25.429,11.077C25.409,11.09 25.389,11.104 25.369,11.118C25.349,11.13 25.329,11.144 25.309,11.158C25.288,11.17 25.268,11.184 25.249,11.198C25.228,11.21 25.208,11.224 25.188,11.238C25.168,11.251 25.148,11.264 25.128,11.278C25.108,11.291 25.088,11.304 25.068,11.318C25.048,11.331 25.028,11.344 25.008,11.358C24.826,11.471 24.672,11.624 24.557,11.805C24.442,11.986 24.37,12.191 24.346,12.403C24.321,12.616 24.345,12.832 24.415,13.034C24.486,13.236 24.601,13.42 24.753,13.572C24.904,13.723 25.088,13.839 25.29,13.909C25.493,13.979 25.708,14.003 25.921,13.979C26.134,13.954 26.338,13.882 26.519,13.767C26.7,13.653 26.853,13.498 26.966,13.317H26.966Z"
-      android:fillColor="#ffffff"/>
-</vector>
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoDialog.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoDialog.java
deleted file mode 100644
index 04ccffb..0000000
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoDialog.java
+++ /dev/null
@@ -1,123 +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.chrome.browser.ui.default_browser_promo;
-
-import android.app.Activity;
-import android.content.DialogInterface;
-import android.view.View;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.VisibleForTesting;
-
-import org.chromium.base.BuildInfo;
-import org.chromium.components.browser_ui.widget.PromoDialog;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * The promo dialog guiding how to set Chrome as the default browser.
- */
-public class DefaultBrowserPromoDialog extends PromoDialog {
-    @IntDef({DialogStyle.ROLE_MANAGER, DialogStyle.DISAMBIGUATION_SHEET,
-            DialogStyle.SYSTEM_SETTINGS})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface DialogStyle {
-        int ROLE_MANAGER = 0;
-        int DISAMBIGUATION_SHEET = 1;
-        int SYSTEM_SETTINGS = 2;
-    }
-
-    private final int mDialogStyle;
-    private final Runnable mOnOK;
-    private Runnable mOnCancel;
-
-    /**
-     * Building a {@link DefaultBrowserPromoDialog}.
-     * @param activity The activity to display dialog.
-     * @param dialogStyle The type of dialog.
-     * @param onOK The {@link Runnable} on user's agreeing to change default.
-     * @param onCancel The {@link Runnable} on user's refusing or dismissing the dialog.
-     * @return
-     */
-    public static DefaultBrowserPromoDialog createDialog(
-            Activity activity, @DialogStyle int dialogStyle, Runnable onOK, Runnable onCancel) {
-        return new DefaultBrowserPromoDialog(activity, dialogStyle, onOK, onCancel);
-    }
-
-    private DefaultBrowserPromoDialog(
-            Activity activity, @DialogStyle int style, Runnable onOK, Runnable onCancel) {
-        super(activity);
-        mDialogStyle = style;
-        mOnOK = onOK;
-        mOnCancel = onCancel;
-        setOnDismissListener(this);
-    }
-
-    @Override
-    @VisibleForTesting
-    public DialogParams getDialogParams() {
-        DialogParams params = new DialogParams();
-
-        Activity activity = getOwnerActivity();
-        assert activity != null;
-
-        String appName = BuildInfo.getInstance().hostPackageLabel;
-        params.vectorDrawableResource = R.drawable.default_browser_promo_illustration;
-        params.headerCharSequence =
-                activity.getString(R.string.default_browser_promo_dialog_title, appName);
-        String desc =
-                activity.getString(R.string.default_browser_promo_dialog_desc, appName) + "\n\n";
-        String steps;
-        String primaryButtonText;
-        if (mDialogStyle == DialogStyle.ROLE_MANAGER) {
-            steps = activity.getString(
-                    R.string.default_browser_promo_dialog_role_manager_steps, appName);
-            primaryButtonText = activity.getString(
-                    R.string.default_browser_promo_dialog_choose_chrome_button, appName);
-        } else if (mDialogStyle == DialogStyle.DISAMBIGUATION_SHEET) {
-            steps = activity.getString(
-                    R.string.default_browser_promo_dialog_disambiguation_sheet_steps, appName);
-            primaryButtonText = activity.getString(
-                    R.string.default_browser_promo_dialog_choose_chrome_button, appName);
-        } else {
-            assert mDialogStyle == DialogStyle.SYSTEM_SETTINGS;
-            steps = activity.getString(
-                    R.string.default_browser_promo_dialog_system_settings_steps, appName);
-            primaryButtonText =
-                    activity.getString(R.string.default_browser_promo_dialog_go_to_settings_button);
-        }
-        params.subheaderCharSequence = desc + steps;
-        params.primaryButtonCharSequence = primaryButtonText;
-        params.secondaryButtonStringResource = R.string.no_thanks;
-        return params;
-    }
-
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        // Can be dismissed by pressing the back button.
-        if (mOnCancel != null) mOnCancel.run();
-    }
-
-    @Override
-    public void onClick(View view) {
-        super.onClick(view);
-        int id = view.getId();
-        if (id == R.id.button_primary) {
-            mOnCancel = null;
-            mOnOK.run();
-            dismiss();
-        } else if (id == R.id.button_secondary) {
-            if (mOnCancel != null) mOnCancel.run();
-            mOnCancel = null;
-            dismiss();
-        }
-    }
-
-    @VisibleForTesting
-    public int getDialogStyleForTesting() {
-        return mDialogStyle;
-    }
-}
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManager.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManager.java
index 9deb0e83..4ea00df 100644
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManager.java
+++ b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManager.java
@@ -10,11 +10,6 @@
 import android.content.Context;
 import android.content.Intent;
 
-import androidx.annotation.VisibleForTesting;
-
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
-import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoDialog.DialogStyle;
-import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoMetrics.UIDismissalReason;
 import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils.DefaultBrowserState;
 import org.chromium.ui.base.WindowAndroid;
 
@@ -23,13 +18,9 @@
  * trigger dialogs.
  */
 public class DefaultBrowserPromoManager {
-    private static final String SKIP_PRIMER_PARAM = "skip_primer";
-    static final String P_NO_DEFAULT_PROMO_STRATEGY = "p_no_default_promo";
-
     private final Activity mActivity;
-    private DefaultBrowserPromoDialog mDialog;
-    private @DefaultBrowserState int mCurrentState;
-    private WindowAndroid mWindowAndroid;
+    private final @DefaultBrowserState int mCurrentState;
+    private final WindowAndroid mWindowAndroid;
 
     /**
      * @param activity Activity to show promo dialogs.
@@ -45,43 +36,14 @@
 
     @SuppressLint({"WrongConstant", "NewApi"})
     void promoByRoleManager() {
-        boolean shouldSkipPrimer = ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
-                ChromeFeatureList.ANDROID_DEFAULT_BROWSER_PROMO, SKIP_PRIMER_PARAM, false);
-        Runnable onOK = () -> {
-            RoleManager roleManager =
-                    (RoleManager) mActivity.getSystemService(Context.ROLE_SERVICE);
+        RoleManager roleManager = (RoleManager) mActivity.getSystemService(Context.ROLE_SERVICE);
 
-            DefaultBrowserPromoMetrics.recordRoleManagerShow(mCurrentState);
-            if (!shouldSkipPrimer) {
-                DefaultBrowserPromoMetrics.recordUiDismissalReason(
-                        mCurrentState, UIDismissalReason.CHANGE_DEFAULT);
-            }
+        DefaultBrowserPromoMetrics.recordRoleManagerShow(mCurrentState);
 
-            Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER);
-            mWindowAndroid.showCancelableIntent(intent, (window, resultCode, data) -> {
-                DefaultBrowserPromoMetrics.recordOutcome(mCurrentState,
-                        DefaultBrowserPromoDeps.getInstance().getCurrentDefaultBrowserState());
-            }, null);
-        };
-        if (shouldSkipPrimer) {
-            onOK.run();
-        } else {
-            showDialog(DefaultBrowserPromoDialog.DialogStyle.ROLE_MANAGER, onOK);
-        }
-    }
-
-    private void showDialog(@DialogStyle int style, Runnable okCallback) {
-        mDialog = DefaultBrowserPromoDialog.createDialog(mActivity, style, okCallback, () -> {
-            DefaultBrowserPromoMetrics.recordUiDismissalReason(
-                    mCurrentState, UIDismissalReason.NO_THANKS);
-        });
-
-        DefaultBrowserPromoMetrics.recordDialogShow(mCurrentState);
-        mDialog.show();
-    }
-
-    @VisibleForTesting
-    DefaultBrowserPromoDialog getDialogForTesting() {
-        return mDialog;
+        Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER);
+        mWindowAndroid.showCancelableIntent(intent, (window, resultCode, data) -> {
+            DefaultBrowserPromoMetrics.recordOutcome(mCurrentState,
+                    DefaultBrowserPromoDeps.getInstance().getCurrentDefaultBrowserState());
+        }, null);
     }
 }
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManagerTest.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManagerTest.java
deleted file mode 100644
index 24a29b00..0000000
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoManagerTest.java
+++ /dev/null
@@ -1,102 +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.chrome.browser.ui.default_browser_promo;
-
-import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
-import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static androidx.test.espresso.matcher.ViewMatchers.withId;
-
-import android.app.Activity;
-
-import androidx.test.filters.MediumTest;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.BuildInfo;
-import org.chromium.base.FeatureList;
-import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.flags.ChromeSwitches;
-import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils.DefaultBrowserState;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.components.browser_ui.widget.PromoDialog;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.ui.base.WindowAndroid;
-import org.chromium.ui.test.util.DummyUiActivityTestCase;
-
-import java.util.Collections;
-
-/**
- * Instrument test for {@link DefaultBrowserPromoManager}.
- */
-@RunWith(ChromeJUnit4ClassRunner.class)
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
-public class DefaultBrowserPromoManagerTest extends DummyUiActivityTestCase {
-    private DefaultBrowserPromoManager mManager;
-    private Activity mActivity;
-    private String mAppName;
-    private WindowAndroid mWindowAndroid;
-
-    @Override
-    public void setUpTest() throws Exception {
-        super.setUpTest();
-        mActivity = getActivity();
-        mWindowAndroid = TestThreadUtils.runOnUiThreadBlocking(() -> new WindowAndroid(mActivity));
-        mManager = new DefaultBrowserPromoManager(
-                mActivity, mWindowAndroid, DefaultBrowserState.NO_DEFAULT);
-        mAppName = BuildInfo.getInstance().hostPackageLabel;
-        // Enabling feature can assign a default value to the fieldtrial param.
-        FeatureList.setTestFeatures(Collections.EMPTY_MAP);
-    }
-
-    @Override
-    public void tearDownTest() throws Exception {
-        TestThreadUtils.runOnUiThreadBlocking(mWindowAndroid::destroy);
-        super.tearDownTest();
-    }
-
-    @Test
-    @MediumTest
-    public void testPromoByRoleManager() {
-        TestThreadUtils.runOnUiThreadBlocking(() -> { mManager.promoByRoleManager(); });
-        DefaultBrowserPromoDialog dialog = mManager.getDialogForTesting();
-        Assert.assertEquals("Dialog should be of role manager style on Q+",
-                dialog.getDialogStyleForTesting(),
-                DefaultBrowserPromoDialog.DialogStyle.ROLE_MANAGER);
-
-        // test role manager style
-        PromoDialog.DialogParams params = dialog.getDialogParams();
-        Assert.assertEquals(
-                mActivity.getString(R.string.default_browser_promo_dialog_title, mAppName),
-                params.headerCharSequence);
-
-        Assert.assertEquals(
-                mActivity.getString(R.string.default_browser_promo_dialog_desc, mAppName) + "\n\n"
-                        + mActivity.getString(
-                                R.string.default_browser_promo_dialog_role_manager_steps, mAppName),
-                params.subheaderCharSequence);
-
-        Assert.assertEquals(
-                mActivity.getString(
-                        R.string.default_browser_promo_dialog_choose_chrome_button, mAppName),
-                params.primaryButtonCharSequence);
-
-        checkDialogVisibility();
-    }
-
-    private void checkDialogVisibility() {
-        onView(withId(R.id.promo_dialog_layout)).check(matches(isDisplayed()));
-        // dismiss the dialog
-        onView(withId(R.id.button_secondary)).perform(click());
-        onView(withId(R.id.promo_dialog_layout)).check((v, noMatchingViewException) -> {
-            Assert.assertNotNull("Promo dialog should be dismissed by clicking on secondary button",
-                    noMatchingViewException);
-        });
-    }
-}
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoMetrics.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoMetrics.java
index f1d64216..66f21b9 100644
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoMetrics.java
+++ b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoMetrics.java
@@ -4,55 +4,13 @@
 
 package org.chromium.chrome.browser.ui.default_browser_promo;
 
-import androidx.annotation.IntDef;
-
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils.DefaultBrowserState;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Helper class to record histograms related to the default browser promo.
  */
 class DefaultBrowserPromoMetrics {
-    @IntDef({UIDismissalReason.CHANGE_DEFAULT, UIDismissalReason.NO_THANKS})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface UIDismissalReason {
-        int CHANGE_DEFAULT = 0;
-        int NO_THANKS = 1;
-        int NUM_ENTRIES = 2;
-    }
-
-    /**
-     * Record the reason why the promo dialog is dismissed.
-     * @param currentState The {@link DefaultBrowserState} when the dialog is shown.
-     * @param reason The {@link UIDismissalReason} indicating the dismissal reason.
-     */
-    static void recordUiDismissalReason(
-            @DefaultBrowserState int currentState, @UIDismissalReason int reason) {
-        assert currentState != DefaultBrowserState.CHROME_DEFAULT;
-        if (currentState == DefaultBrowserState.NO_DEFAULT) {
-            RecordHistogram.recordEnumeratedHistogram(
-                    "Android.DefaultBrowserPromo.UIDismissalReason.NoDefault", reason,
-                    UIDismissalReason.NUM_ENTRIES);
-        } else {
-            RecordHistogram.recordEnumeratedHistogram(
-                    "Android.DefaultBrowserPromo.UIDismissalReason.OtherDefault", reason,
-                    UIDismissalReason.NUM_ENTRIES);
-        }
-    }
-
-    /**
-     * Record {@link DefaultBrowserState} when the dialog shown.
-     * @param currentState The {@link DefaultBrowserState} when the dialog is shown.
-     */
-    static void recordDialogShow(@DefaultBrowserState int currentState) {
-        assert currentState != DefaultBrowserState.CHROME_DEFAULT;
-        RecordHistogram.recordEnumeratedHistogram("Android.DefaultBrowserPromo.DialogShown",
-                currentState, DefaultBrowserState.NUM_ENTRIES);
-    }
-
     /**
      * Record {@link DefaultBrowserState} when role manager dialog is shown.
      * @param currentState The {@link DefaultBrowserState} when the dialog is shown.
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtils.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtils.java
index 072e2e0..846a54b1 100644
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtils.java
+++ b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtils.java
@@ -9,7 +9,6 @@
 
 import androidx.annotation.IntDef;
 
-import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
@@ -36,20 +35,6 @@
         int NUM_ENTRIES = 3;
     }
 
-    @IntDef({DefaultBrowserPromoAction.SYSTEM_SETTINGS,
-            DefaultBrowserPromoAction.DISAMBIGUATION_SHEET, DefaultBrowserPromoAction.ROLE_MANAGER,
-            DefaultBrowserPromoAction.NO_ACTION})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface DefaultBrowserPromoAction {
-        int SYSTEM_SETTINGS = 0;
-        int DISAMBIGUATION_SHEET = 1;
-        int ROLE_MANAGER = 2;
-        int NO_ACTION = 3;
-    }
-
-    private static final String DISAMBIGUATION_SHEET_PROMOED_KEY_PREFIX =
-            "disambiguation_sheet_promoed.";
-
     /**
      * Determine whether a promo dialog should be displayed or not. And prepare related logic to
      * launch promo if a promo dialog has been decided to display.
@@ -61,8 +46,7 @@
     public static boolean prepareLaunchPromoIfNeeded(
             Activity activity, WindowAndroid windowAndroid) {
         DefaultBrowserPromoDeps deps = DefaultBrowserPromoDeps.getInstance();
-        int action = decideNextAction(deps, activity);
-        if (action == DefaultBrowserPromoAction.NO_ACTION) return false;
+        if (!shouldShowPromo(deps, activity)) return false;
         deps.incrementPromoCount();
         deps.recordPromoTime();
         DefaultBrowserPromoManager manager = new DefaultBrowserPromoManager(
@@ -72,8 +56,8 @@
     }
 
     /**
-     * This decides in which way and style the dialog should be promoed.
-     * Returns No Action if any of following criteria is met:
+     * This decides whether the dialog should be promoed.
+     * Returns false if any of following criteria is met:
      *      1. A promo dialog has been displayed before.
      *      2. Not enough sessions have been started before.
      *      3. Any chrome, including pre-stable, has been set as default.
@@ -83,53 +67,32 @@
      *      6. A browser other than chrome channel is default and default app setting is not
      *         available in the current system.
      */
-    @DefaultBrowserPromoAction
-    static int decideNextAction(DefaultBrowserPromoDeps deps, Activity activity) {
-        if (!deps.isFeatureEnabled()) {
-            return DefaultBrowserPromoAction.NO_ACTION;
+    static boolean shouldShowPromo(DefaultBrowserPromoDeps deps, Activity activity) {
+        if (!deps.isFeatureEnabled() || !deps.isRoleAvailable(activity)) {
+            return false;
         }
-        if (!deps.isRoleAvailable(activity)) {
-            return DefaultBrowserPromoAction.NO_ACTION;
-        }
-        // Criteria 1
-        if (deps.getPromoCount() >= deps.getMaxPromoCount()) {
-            return DefaultBrowserPromoAction.NO_ACTION;
-        }
-        // Criteria 2
-        if (deps.getSessionCount() < deps.getMinSessionCount()) {
-            return DefaultBrowserPromoAction.NO_ACTION;
-        }
-        // Criteria 5
-        if (deps.getLastPromoInterval() < deps.getMinPromoInterval()) {
-            return DefaultBrowserPromoAction.NO_ACTION;
+        // Criteria 1, 2, 5
+        if (deps.getPromoCount() >= deps.getMaxPromoCount()
+                || deps.getSessionCount() < deps.getMinSessionCount()
+                || deps.getLastPromoInterval() < deps.getMinPromoInterval()) {
+            return false;
         }
 
         ResolveInfo info = deps.getDefaultWebBrowserActivityResolveInfo();
         if (info == null) {
-            return DefaultBrowserPromoAction.NO_ACTION;
+            return false;
         }
 
         int state = deps.getCurrentDefaultBrowserState(info);
-        int action = DefaultBrowserPromoAction.NO_ACTION;
         if (state == DefaultBrowserState.CHROME_DEFAULT) {
-            action = DefaultBrowserPromoAction.NO_ACTION;
+            return false;
         } else if (state == DefaultBrowserState.NO_DEFAULT) {
             // Criteria 4
-            if (deps.isChromeStable() && deps.isChromePreStableInstalled()) {
-                action = DefaultBrowserPromoAction.NO_ACTION;
-            } else {
-                action = DefaultBrowserPromoAction.ROLE_MANAGER;
-            }
+            return !deps.isChromeStable() || !deps.isChromePreStableInstalled();
         } else { // other default
             // Criteria 3
-            if (deps.isCurrentDefaultBrowserChrome(info)) {
-                action = DefaultBrowserPromoAction.NO_ACTION;
-            } else {
-                action = DefaultBrowserPromoAction.ROLE_MANAGER;
-            }
+            return !deps.isCurrentDefaultBrowserChrome(info);
         }
-
-        return action;
     }
 
     /**
@@ -140,28 +103,4 @@
         SharedPreferencesManager.getInstance().incrementInt(
                 ChromePreferenceKeys.DEFAULT_BROWSER_PROMO_SESSION_COUNT);
     }
-
-    /**
-     * Check the result of default browser promo on start up if the default browser promo dialog is
-     * displayed in this session or last session and the result has not been recorded yet.
-     */
-    public static void maybeRecordOutcomeOnStart() {
-        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_DEFAULT_BROWSER_PROMO)) return;
-        if (!SharedPreferencesManager.getInstance().readBoolean(
-                    ChromePreferenceKeys.DEFAULT_BROWSER_PROMO_PROMOED_BY_SYSTEM_SETTINGS, false)) {
-            return;
-        }
-        int previousState = SharedPreferencesManager.getInstance().readInt(
-                ChromePreferenceKeys.DEFAULT_BROWSER_PROMO_LAST_DEFAULT_STATE);
-        DefaultBrowserPromoMetrics.recordOutcome(previousState,
-                DefaultBrowserPromoDeps.getInstance().getCurrentDefaultBrowserState());
-        // reset
-        SharedPreferencesManager.getInstance().writeBoolean(
-                ChromePreferenceKeys.DEFAULT_BROWSER_PROMO_PROMOED_BY_SYSTEM_SETTINGS, false);
-    }
-
-    static String getDisambiguationSheetPromoedKey() {
-        return DISAMBIGUATION_SHEET_PROMOED_KEY_PREFIX
-                + ContextUtils.getApplicationContext().getPackageName();
-    }
 }
diff --git a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtilsTest.java b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtilsTest.java
index 40dd403..ee59d36 100644
--- a/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtilsTest.java
+++ b/chrome/browser/ui/android/default_browser_promo/java/src/org/chromium/chrome/browser/ui/default_browser_promo/DefaultBrowserPromoUtilsTest.java
@@ -25,7 +25,6 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.PackageManagerUtils;
 import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils.DefaultBrowserPromoAction;
 import org.chromium.chrome.browser.ui.default_browser_promo.DefaultBrowserPromoUtils.DefaultBrowserState;
 
 import java.util.ArrayList;
@@ -117,9 +116,8 @@
     @Test
     public void testBasicPromo() {
         setDepsMockWithDefaultValues();
-        Assert.assertEquals("Should promo disambiguation sheet on Q.",
-                DefaultBrowserPromoAction.ROLE_MANAGER,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertTrue("Should promo disambiguation sheet on Q.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     // --- Q above ---
@@ -127,9 +125,8 @@
     public void testPromo_Q_No_Default() {
         setDepsMockWithDefaultValues();
         when(mDeps.isRoleAvailable(any())).thenReturn(true);
-        Assert.assertEquals("Should promo role manager when there is no default browser on Q+.",
-                DefaultBrowserPromoAction.ROLE_MANAGER,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertTrue("Should promo role manager when there is no default browser on Q+.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
@@ -138,10 +135,8 @@
         when(mDeps.isRoleAvailable(any())).thenReturn(true);
         when(mDeps.getDefaultWebBrowserActivityResolveInfo())
                 .thenReturn(createResolveInfo("android", 1));
-        Assert.assertEquals(
-                "Should promo role manager when there is another default browser on Q+.",
-                DefaultBrowserPromoAction.ROLE_MANAGER,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertTrue("Should promo role manager when there is another default browser on Q+.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     // --- P below ---
@@ -150,10 +145,9 @@
         setDepsMockWithDefaultValues();
         when(mDeps.getSDKInt()).thenReturn(Build.VERSION_CODES.P);
         when(mDeps.isRoleAvailable(any())).thenCallRealMethod();
-        Assert.assertEquals(
+        Assert.assertFalse(
                 "Should promo system settings when there is another default browser on P-.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     // --- prerequisites ---
@@ -162,9 +156,8 @@
         setDepsMockWithDefaultValues();
         when(mDeps.getMaxPromoCount()).thenReturn(100);
         when(mDeps.getPromoCount()).thenReturn(99);
-        Assert.assertNotEquals("Should promo when promo count does not reach the upper limit.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertTrue("Should promo when promo count does not reach the upper limit.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
@@ -172,18 +165,16 @@
         setDepsMockWithDefaultValues();
         when(mDeps.getPromoCount()).thenReturn(1);
         when(mDeps.getMaxPromoCount()).thenReturn(1);
-        Assert.assertEquals("Should not promo when promo count reaches the upper limit.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertFalse("Should not promo when promo count reaches the upper limit.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
     public void testNoPromo_featureDisabled() {
         setDepsMockWithDefaultValues();
         when(mDeps.isFeatureEnabled()).thenReturn(false);
-        Assert.assertEquals("Should not promo when the fearure is disabled.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertFalse("Should not promo when the fearure is disabled.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
@@ -191,10 +182,9 @@
         setDepsMockWithDefaultValues();
         when(mDeps.getSessionCount()).thenReturn(1);
         when(mDeps.getMinSessionCount()).thenReturn(3);
-        Assert.assertEquals(
+        Assert.assertFalse(
                 "Should not promo when session count has not reached the required amount.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
@@ -204,10 +194,8 @@
                 .thenReturn(
                         createResolveInfo(DefaultBrowserPromoDeps.CHROME_STABLE_PACKAGE_NAME, 1));
         when(mDeps.isCurrentDefaultBrowserChrome(any())).thenCallRealMethod();
-        Assert.assertEquals(
-                "Should not promo when another chrome channel browser has been default.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertFalse("Should not promo when another chrome channel browser has been default.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
@@ -216,18 +204,16 @@
         when(mDeps.getDefaultWebBrowserActivityResolveInfo())
                 .thenReturn(createResolveInfo(
                         ContextUtils.getApplicationContext().getPackageName(), 1));
-        Assert.assertEquals("Should not promo when chrome has been default.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertFalse("Should not promo when chrome has been default.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     @Test
     public void testNoPromo_webBrowserActivityNotExist() {
         setDepsMockWithDefaultValues();
         when(mDeps.getDefaultWebBrowserActivityResolveInfo()).thenReturn(null);
-        Assert.assertEquals("Should not promo when web browser activity does not exist.",
-                DefaultBrowserPromoAction.NO_ACTION,
-                DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
+        Assert.assertFalse("Should not promo when web browser activity does not exist.",
+                DefaultBrowserPromoUtils.shouldShowPromo(mDeps, null));
     }
 
     private void setDepsMockWithDefaultValues() {
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index 82d307b..c7da0af 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -4286,31 +4286,6 @@
         Viewing live page
       </message>
 
-      <!-- Default Browser Promo Strings-->
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_TITLE" desc="Title of the default browser promo dialog">
-        Set <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph> as your default?
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_DESC" desc="Description in the default browser promo dialog, which is concatenated with one of the following steps strings">
-        <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph> has the smarts and speed you need to safely do, create, and explore online
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_DISAMBIGUATION_SHEET_STEPS" desc="Description of the steps to set the default browser throught disambiguation sheet. 'Always' should match TC ID 5575222334666843269.">
-        1. Choose <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph>\n2. Tap “Always”
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_SYSTEM_SETTINGS_STEPS"
-        desc="Description of the steps to set the default browser throught system settings.
-        'Go to Settings' should match TC ID 4431460803004659888. 'Browser App' should match TC ID 6222206565850006894.">
-        1. Go to Settings\n2. Tap “Browser App”\n3. Choose <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph>
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_ROLE_MANAGER_STEPS" desc="Description of the steps to set the default browser throught role manager. 'Set as default' should match TC ID 5706081295230541240.">
-        1. Choose <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph>\n2. Tap “Set as default”
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_CHOOSE_CHROME_BUTTON" desc="A button in the default browser promo dialog to choose chrome as default">
-        Choose <ph name="APP_NAME">%1$s<ex>Chrome</ex></ph>
-      </message>
-      <message name="IDS_DEFAULT_BROWSER_PROMO_DIALOG_GO_TO_SETTINGS_BUTTON" desc="A button in the default browser promo to navigate users to systen settings. 'Go to Settings' should match TC ID 4431460803004659888.">
-        Go to Settings
-      </message>
-
       <!-- HTTPS image compression InfoBar -->
       <message name="IDS_LITE_MODE_HTTPS_IMAGE_COMPRESSION_MESSAGE" desc="The text of the infobar notifying the user that Chrome's Lite mode will now also compresses HTTPS images.">
         Lite mode now saves you more data by optimizing images on HTTPS pages.
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_CHOOSE_CHROME_BUTTON.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_CHOOSE_CHROME_BUTTON.png.sha1
deleted file mode 100644
index a53a43b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_CHOOSE_CHROME_BUTTON.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bb6d6d6f68515ff14ec7342be489930390f042e9
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DESC.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DESC.png.sha1
deleted file mode 100644
index a53a43b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DESC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bb6d6d6f68515ff14ec7342be489930390f042e9
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DISAMBIGUATION_SHEET_STEPS.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DISAMBIGUATION_SHEET_STEPS.png.sha1
deleted file mode 100644
index 54e5c6a..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_DISAMBIGUATION_SHEET_STEPS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9eacef949b483b14f39203a91cf344fc1b411308
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_GO_TO_SETTINGS_BUTTON.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_GO_TO_SETTINGS_BUTTON.png.sha1
deleted file mode 100644
index f0b353b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_GO_TO_SETTINGS_BUTTON.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-16654f05aa1fd22112a0a2fe8acc19c9e7a90e25
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_ROLE_MANAGER_STEPS.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_ROLE_MANAGER_STEPS.png.sha1
deleted file mode 100644
index a53a43b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_ROLE_MANAGER_STEPS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bb6d6d6f68515ff14ec7342be489930390f042e9
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_SYSTEM_SETTINGS_STEPS.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_SYSTEM_SETTINGS_STEPS.png.sha1
deleted file mode 100644
index f0b353b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_SYSTEM_SETTINGS_STEPS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-16654f05aa1fd22112a0a2fe8acc19c9e7a90e25
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_TITLE.png.sha1
deleted file mode 100644
index a53a43b..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_DEFAULT_BROWSER_PROMO_DIALOG_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bb6d6d6f68515ff14ec7342be489930390f042e9
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index fee60a3..147a44ff 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Skakel sinkronisering aan om oor toestelle heen te sinkroniseer en personaliseer</translation>
 <translation id="1209206284964581585">Versteek vir eers</translation>
 <translation id="1227058898775614466">Navigasiegeskiedenis</translation>
-<translation id="1229399675748764149">Maak hierdie bladsy jou tuisblad</translation>
 <translation id="1231733316453485619">Skakel sinkronisering aan?</translation>
 <translation id="123724288017357924">Herlaai die huidige bladsy en ignoreer kasinhoud</translation>
 <translation id="124678866338384709">Maak huidige oortjie toe</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Vee wagwoord uit</translation>
 <translation id="1521774566618522728">Aktief vandag</translation>
 <translation id="1538801903729528855">Kry 'n beter stemervaring op die web</translation>
-<translation id="1543538514740974167">Kom vinniger hier</translation>
 <translation id="1544826120773021464">Tik op die "Bestuur rekening"-knoppie om jou Google-rekening te bestuur</translation>
 <translation id="1549000191223877751">Beweeg na 'n ander venster</translation>
 <translation id="1553358976309200471">Dateer Chrome op</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Werwe</translation>
 <translation id="4594952190837476234">Hierdie vanlyn bladsy is van <ph name="CREATION_TIME" /> af en kan van die aanlyn weergawe verskil.</translation>
 <translation id="4605958867780575332">Item is verwyder: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Stoor bladsye vir later en kry 'n onthounota</translation>
 <translation id="4616150815774728855">Maak <ph name="WEBAPK_NAME" /> oop</translation>
 <translation id="4634124774493850572">Gebruik wagwoord</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 gekompromitteerde wagwoord}other{# gekompromitteerde wagwoorde}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Teruggestel op <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Wagwoorde</translation>
 <translation id="7030675613184250187">Jy kan bladsye op jou leeslys stoor om hulle weer te kry of vanlyn te lees</translation>
-<translation id="703523980599857277">Verander tuisblad</translation>
 <translation id="7054588988317389591">Kry prentbeskrywings?</translation>
 <translation id="7055152154916055070">Herleiding is geblokkeer:</translation>
 <translation id="7063006564040364415">Kon nie aan die sinkroniseringbediener koppel nie.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome is op datum</translation>
 <translation id="7106762743910369165">Jou organisasie bestuur jou blaaier</translation>
 <translation id="7121362699166175603">Vee geskiedenis en outovoltooide items in die adresbalk uit. Jou Google-rekening kan dalk ander vorme van blaaigeskiedenis hê by <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Sien jou topwerwe en onlangse berigte wanneer jy op die Tuisknoppie tik</translation>
 <translation id="7138678301420049075">Ander</translation>
 <translation id="7146622961999026732">Dit lyk of hierdie werwe en programme vir jou belangrik is:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Laai oorspronklike bladsy<ph name="END_LINK" /> van <ph name="DOMAIN_NAME" /> af</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Kies <ph name="APP_NAME" />\n2. Tik op "Altyd"</translation>
 <translation id="8410695015584479363">Spoor pryse na</translation>
 <translation id="8413126021676339697">Wys volle geskiedenis</translation>
-<translation id="8425213833346101688">Verander</translation>
 <translation id="8427875596167638501">Voorskou-oortjie is half oopgemaak</translation>
 <translation id="8428213095426709021">Instellings</translation>
 <translation id="8438566539970814960">Maak soektogte en blaai-ervaring beter</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Verwyder jou Chrome-aktiwiteit van Digitale Welstand</translation>
 <translation id="927968626442779827">Gebruik Ligte Modus op Google Chrome</translation>
 <translation id="932327136139879170">Tuis</translation>
-<translation id="93753284658583800">Tuisblad is verander</translation>
 <translation id="938850635132480979">Fout: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Tik wagfrase in</translation>
 <translation id="948039501338975565">Lys boekmerkvouers</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index 56d0bec8..c3b8e97 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">በመላ መሣሪያዎች ላይ ስምረትን ማብራት ለማስመር እና ግላዊነትን ለማላበስ</translation>
 <translation id="1209206284964581585">ለአሁን ደብቅ</translation>
 <translation id="1227058898775614466">የዳሰሳ ታሪክ</translation>
-<translation id="1229399675748764149">ይህን ገጽ መነሻ ገጽዎ ያድርጉት</translation>
 <translation id="1231733316453485619">አስምር ይብራ?</translation>
 <translation id="123724288017357924">የተሸጎጠ ይዘትን ችላ በማለት የአሁኑን ገጽ ዳግም ጫን</translation>
 <translation id="124678866338384709">የአሁኑን ትር ዝጋ</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">የይለፍ ቃል ሰርዝ</translation>
 <translation id="1521774566618522728">ገባሪ ዛሬ</translation>
 <translation id="1538801903729528855">በድር ላይ የተሻለ የድምፅ ተሞክሮ ያግኙ</translation>
-<translation id="1543538514740974167">እዚህ በበለጠ ፍጥነት ያግኙ</translation>
 <translation id="1544826120773021464">የGoogle መለያዎን ለማቀናበር የ«መለያን አቀናብር» አዝራሩን መታ ያድርጉት</translation>
 <translation id="1549000191223877751">ወደ ሌላ መስኮት ውሰድ</translation>
 <translation id="1553358976309200471">Chromeን አዘምን</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">ጣቢያዎች</translation>
 <translation id="4594952190837476234">ይህ የ<ph name="CREATION_TIME" />  የመስመር ውጭ ገጽ ከመስመር ላይ ስሪቱ የተለየ ሊሆን ይችላል።</translation>
 <translation id="4605958867780575332">ንጥል ተወግዷል፦ <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ለበኋላ ገጾችን ያስቀምጡ እና አስታዋሽ ያግኙ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ን ይክፈቱ</translation>
 <translation id="4634124774493850572">የይለፍ ቃል ይጠቀሙ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 የተጠለፈ የይለፍ ቃል}one{# የተጠለፉ የይለፍ ቃላት}other{# የተጠለፉ የይለፍ ቃላት}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">ወደነበረበት የተመለሰው በ<ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">የይለፍ ቃላት</translation>
 <translation id="7030675613184250187">የእርስዎን ገጾች እንደገና ማግኘት ወይም ከመስመር ውጭ ማንበብ እንዲችሉ በንባብ ዝርዝርዎ ውስጥ ሊያስቀምጧቸው ይችላሉ</translation>
-<translation id="703523980599857277">መነሻ ገጹን ይቀይሩ</translation>
 <translation id="7054588988317389591">የምስል መግለጫዎችን ያግኙ?</translation>
 <translation id="7055152154916055070">አቅጣጫ ማዞር ታግዷል፦</translation>
 <translation id="7063006564040364415">ከማመሳሰያ አገልጋዩ ጋር መገናኘት አልተቻለም።</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome የተዘመነ ነው</translation>
 <translation id="7106762743910369165">የእርስዎ አሳሽ በእርስዎ ድርጅት የሚተዳደር ነው</translation>
 <translation id="7121362699166175603">በአድራሻ አሞሌው ላይ ታሪክን እና ራስ-ማጠናቀቆችን ያጸዳል። የእርስዎ Google መለያ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ ሌሎች የአሰሳ ታሪክ አይነቶች ሊኖሩት ይችላል።</translation>
-<translation id="7128355412245153445">የመነሻ አዝራሩን መታ ባደረጉ ቁጥር የእርስዎን ከፍተኛ ጣቢያዎች እና የቅርብ ጊዜ ታሪኮች ይመልከቱ</translation>
 <translation id="7138678301420049075">ሌላ</translation>
 <translation id="7146622961999026732">እነዚህ ጣቢያዎች እና መተግበሪያዎች ለእርስዎ አስፈላጊ ይመስላሉ፦</translation>
 <translation id="7149158118503947153">ከ<ph name="DOMAIN_NAME" /> <ph name="BEGIN_LINK" />የመጀመሪያውን ገጽ ጫን<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" />\n2ን ይምረጡ። «ዘወትር»ን መታ ያድርጉ</translation>
 <translation id="8410695015584479363">ዋጋዎችን ተከታተል</translation>
 <translation id="8413126021676339697">ሙሉ ታሪክ አሳይ</translation>
-<translation id="8425213833346101688">ለውጥ</translation>
 <translation id="8427875596167638501">የቅድመ-እይታ ትር ግማሽ ተከፍቷል</translation>
 <translation id="8428213095426709021">ቅንብሮች</translation>
 <translation id="8438566539970814960">ፍለጋዎችን እና አሰሳን የተሻለ አድርግ</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">የChrome እንቅስቃሴዎን ከዲጂታል ብቁ መሆን ያስወግዱ</translation>
 <translation id="927968626442779827">በGoogle Chrome ላይ ቀላል ሁነታን ይጠቀሙ</translation>
 <translation id="932327136139879170">መነሻ</translation>
-<translation id="93753284658583800">መነሻ ገጽ ተቀይሯል</translation>
 <translation id="938850635132480979">ስህተት፦ <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">የይለፍ ሐረግ ያስገቡ</translation>
 <translation id="948039501338975565">የዕልባት አቃፊዎች ዝርዝር</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index ce600ef..f7b01e8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">للمزامنة والتخصيص على جميع الأجهزة، يمكنك تفعيل المزامنة.</translation>
 <translation id="1209206284964581585">إخفاء الآن</translation>
 <translation id="1227058898775614466">سجلّ التنقُّل</translation>
-<translation id="1229399675748764149">جعل هذه الصفحة صفحتك الرئيسية</translation>
 <translation id="1231733316453485619">هل تريد تفعيل المزامنة؟</translation>
 <translation id="123724288017357924">إعادة تحميل الصفحة الحالية مع تجاهل المحتوى المُخزَّن مؤقتًا</translation>
 <translation id="124678866338384709">إغلاق علامة التبويب الحالية</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">حذف كلمة المرور</translation>
 <translation id="1521774566618522728">نشط اليوم</translation>
 <translation id="1538801903729528855">الحصول على تجربة صوت أفضل على الإنترنت</translation>
-<translation id="1543538514740974167">الانتقال إلى هنا بشكل أسرع</translation>
 <translation id="1544826120773021464">‏لإدارة إعدادات حسابك على Google، يُرجى النقر على الزر "إدارة الحساب".</translation>
 <translation id="1549000191223877751">الانتقال إلى نافذة أخرى</translation>
 <translation id="1553358976309200471">‏تحديث Chrome‏</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">المواقع</translation>
 <translation id="4594952190837476234">تم إنشاء هذه الصفحة المتوفّرة بلا اتصال بالإنترنت في <ph name="CREATION_TIME" />، وقد تختلف عن النسخة المتوفِّرة على الإنترنت.</translation>
 <translation id="4605958867780575332">تمت إزالة العنصر: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">حفظ الصفحات لوقتٍ لاحق والحصول على تذكير</translation>
 <translation id="4616150815774728855">فتح <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استخدام كلمة المرور</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{كلمة مرورٍ واحدة محتمَل تعرّضها للاختراق}zero{# كلمة مرور محتمَل تعرّضها للاختراق}two{كلمتا مرورٍ محتمَل تعرّضهما للاختراق}few{# كلمات مرورٍ محتمَل تعرّضها للاختراق}many{# كلمة مرورٍ محتمَل تعرّضها للاختراق}other{# كلمة مرورٍ محتمَل تعرّضها للاختراق}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">تمّت استعادة <ph name="ITEM_TITLE" />.</translation>
 <translation id="7029809446516969842">كلمات المرور</translation>
 <translation id="7030675613184250187">يمكنك حفظ صفحات في "قائمة القراءة" للوصول إليها مرة أخرى أو قراءتها بلا إنترنت.</translation>
-<translation id="703523980599857277">تغيير الصفحة الرئيسية</translation>
 <translation id="7054588988317389591">هل تريد عرض أوصاف الصور؟</translation>
 <translation id="7055152154916055070">تم حظر إعادة توجيه:</translation>
 <translation id="7063006564040364415">تعذر الاتصال بخادم المزامنة.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">‏Chrome محدّث.</translation>
 <translation id="7106762743910369165">تتولّى مؤسستك إدارة متصفِّحك.</translation>
 <translation id="7121362699166175603">‏يتم محو السجلّ وعمليات الإكمال التلقائي في شريط العناوين. وقد يتضمّن حسابك على Google نماذج أخرى من سجلّ التصفّح في <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">يمكنك الاطّلاع على أهم المواقع الإلكترونية وأحدث الأخبار عند النقر على زر "الشاشة الرئيسية".</translation>
 <translation id="7138678301420049075">أخرى</translation>
 <translation id="7146622961999026732">يبدو أن المواقع الإلكترونية والتطبيقات التالية مهمة بالنسبة إليك:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />تحميل الصفحة الأصلية<ph name="END_LINK" /> من <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">‏1- اختَر <ph name="APP_NAME" />\n2. انقر على "دائمًا".</translation>
 <translation id="8410695015584479363">تتبُّع الأسعار</translation>
 <translation id="8413126021676339697">عرض السجلّ بكامله</translation>
-<translation id="8425213833346101688">تغيير</translation>
 <translation id="8427875596167638501">علامة تبويب المعاينة مفتوحة جزئيًا</translation>
 <translation id="8428213095426709021">الإعدادات</translation>
 <translation id="8438566539970814960">تحسين عمليات البحث والتصفُّح</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">‏إزالة نشاط Chrome من الرفاهية الرقمية</translation>
 <translation id="927968626442779827">‏استخدِم "الوضع البسيط" على Google Chrome.</translation>
 <translation id="932327136139879170">الصفحة الرئيسية</translation>
-<translation id="93753284658583800">تم تغيير الصفحة الرئيسية.</translation>
 <translation id="938850635132480979">الخطأ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">إدخال عبارة المرور</translation>
 <translation id="948039501338975565">قائمة مجلدات الإشارات المرجعية</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index ce57a76..05667168 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">সকলো ডিভাইচতে ছিংক আৰু ব্যক্তিগতকৰণ কৰিবলৈ ছিংক কৰা সুবিধাটো অন কৰক</translation>
 <translation id="1209206284964581585">এতিয়াৰ বাবে লুকুৱাওক</translation>
 <translation id="1227058898775614466">নেভিগেশ্বন ইতিহাস</translation>
-<translation id="1229399675748764149">এই পৃষ্ঠাখন আপোনাৰ গৃহপৃষ্ঠা কৰক</translation>
 <translation id="1231733316453485619">ছিংক অন কৰিবনে?</translation>
 <translation id="123724288017357924">কেশ্ব কৰা সমল অৱজ্ঞা কৰি বর্তমানৰ পৃষ্ঠাটো পুনৰ ল'ড কৰক</translation>
 <translation id="124678866338384709">বর্তমানৰ টেবটো বন্ধ কৰক</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">পাছৱৰ্ড মচক</translation>
 <translation id="1521774566618522728">আজি সক্ৰিয় হৈছে</translation>
 <translation id="1538801903729528855">ৱেবত এটা উন্নত কণ্ঠধ্বনিৰ অভিজ্ঞতা লাভ কৰক</translation>
-<translation id="1543538514740974167">ইয়ালৈ খৰতকীয়াকৈ আহি পাওক</translation>
 <translation id="1544826120773021464">আপোনাৰ Google একাউণ্টটো পৰিচালনা কৰিবলৈ "একাউণ্ট পৰিচালনা কৰক" বুটামটোত টিপক</translation>
 <translation id="1549000191223877751">অন্য ৱিণ্ড’লৈ নিয়ক</translation>
 <translation id="1553358976309200471">Chrome আপডে’ট কৰক</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">এই অফলাইন পৃষ্ঠাটো <ph name="CREATION_TIME" />ৰ আৰু এই পৃষ্ঠাটো অনলাইন সংস্কৰণতকৈ বেলেগ হ’ব পাৰে।</translation>
 <translation id="4605958867780575332">আঁতৰোৱা বস্তু: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">পৰৱৰ্তী সময়ৰ কাৰণে পৃষ্ঠাসমূহ ছেভ কৰি ৰাখক আৰু এটা ৰিমাইণ্ডাৰ পাওক</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> খোলক</translation>
 <translation id="4634124774493850572">পাছৱৰ্ড দিয়ক</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{১ টা হেক হোৱা পাছৱৰ্ড}one{# টা হেক হোৱা পাছৱৰ্ড}other{# টা হেক হোৱা পাছৱৰ্ড}}</translation>
@@ -876,7 +873,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> পুনঃস্থাপন কৰা হৈছে</translation>
 <translation id="7029809446516969842">পাছৱৰ্ডসমূহ</translation>
 <translation id="7030675613184250187">পৃষ্ঠাসমূহ পুনৰ বিচাৰি পাবলৈ অথবা অফলাইনত পঢ়িবলৈ আপুনি সেইসমূহ নিজৰ পঢ়াৰ সূচীখনত ছেভ কৰিব পাৰে</translation>
-<translation id="703523980599857277">গৃহপৃষ্ঠাখন সলনি কৰক</translation>
 <translation id="7054588988317389591">প্ৰতিচ্ছবিৰ বিৱৰণ লাভ কৰিবনে?</translation>
 <translation id="7055152154916055070">পুনৰ নির্দেশ কৰাটো অৱৰোধ কৰা হৈছে</translation>
 <translation id="7063006564040364415">ছিংক ছাৰ্ভাৰৰ সৈতে সংযোগ কৰিব পৰা নগ'ল।</translation>
@@ -887,7 +883,6 @@
 <translation id="7088681679121566888">Chrome আপ টু ডে’ট আছে</translation>
 <translation id="7106762743910369165">আপোনাৰ প্ৰতিষ্ঠানে আপোনাৰ ব্ৰাউজাৰটো পৰিচালনা কৰে</translation>
 <translation id="7121362699166175603">ঠিকনাৰ বাৰত ইতিহাস আৰু স্বয়ংক্ৰিয়ভাৱে পুৰ হোৱা তথ্য মচে। <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />ত আপোনাৰ Google একাউণ্টৰ অন্য প্ৰকাৰৰ ব্ৰাউজিং ইতিহাস থাকিব পাৰে।</translation>
-<translation id="7128355412245153445">আপুনি গৃহপৃষ্ঠাৰ বুটামটো টিপিলে আপোনাৰ শীর্ষ ছাইটসমূহ আৰু শেহতীয়া কাহিনীবোৰ দেখা পাওক</translation>
 <translation id="7138678301420049075">অন্য</translation>
 <translation id="7146622961999026732">এই ছাইট আৰু এপ্‌সমূহ আপোনাৰ বাবে গুৰুত্বপূৰ্ণ যেন লাগিছে:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" />ৰ পৰা <ph name="BEGIN_LINK" />প্ৰকৃত পৃষ্ঠাটো ল'ড কৰক<ph name="END_LINK" /></translation>
@@ -1076,7 +1071,6 @@
 <translation id="8407396331882458341">১) <ph name="APP_NAME" /> বাছনি কৰক\n২) “সদায়”ত টিপক</translation>
 <translation id="8410695015584479363">মূল্য ট্ৰেক কৰক</translation>
 <translation id="8413126021676339697">সম্পূৰ্ণ ইতিহাস দেখুৱাওক</translation>
-<translation id="8425213833346101688">সলনি কৰক</translation>
 <translation id="8427875596167638501">পূৰ্বদৰ্শন টেবটো আধা খোলা আছে</translation>
 <translation id="8428213095426709021">ছেটিংসমূহ</translation>
 <translation id="8438566539970814960">সন্ধান আৰু ব্ৰাউজিং উন্নত কৰক</translation>
@@ -1194,7 +1188,6 @@
 <translation id="926205370408745186">আপুনি Chromeত কৰা কাৰ্যকলাপ ডিজিটেল ৱেলবিইঙ-ৰ পৰা আঁতৰাওক</translation>
 <translation id="927968626442779827">Google Chromeত লাইট ম’ড ব্যৱহাৰ কৰক</translation>
 <translation id="932327136139879170">গৃহ</translation>
-<translation id="93753284658583800">গৃহপৃষ্ঠাখন সলনি কৰা হ'ল</translation>
 <translation id="938850635132480979">আসোঁৱাহ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">পাছফ্ৰেজ দিয়ক</translation>
 <translation id="948039501338975565">বুকমাৰ্ক ফ'ল্ডাৰসমূহৰ সূচী</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index 6c0df659..be0735b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Cihazlar üzrə sinxronizasiya etmək və fərdiləşdirmək üçün sinxronizasiyanı aktiv edin</translation>
 <translation id="1209206284964581585">Hələlik gizlədin</translation>
 <translation id="1227058898775614466">Naviqasiya tarixçəsi</translation>
-<translation id="1229399675748764149">Bu səhifəni əsas səhifəyə çevirin</translation>
 <translation id="1231733316453485619">Sinxronizasiya ktiv edilsin?</translation>
 <translation id="123724288017357924">Keş məzmununu iqnor edərək cari səhifəni yenidən yükləyin</translation>
 <translation id="124678866338384709">Cari paneli bağlayın</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Parolu silin</translation>
 <translation id="1521774566618522728">Bu gün aktivdir</translation>
 <translation id="1538801903729528855">Vebdə daha yaxşı səs təcrübəsi əldə edin</translation>
-<translation id="1543538514740974167">Bura daha tez keçin</translation>
 <translation id="1544826120773021464">Google hesabınızı idarə etmək üçün "Hesabı idarə edin" düyməsinə toxunun</translation>
 <translation id="1549000191223877751">Başqa pəncərəyə keçin</translation>
 <translation id="1553358976309200471">Chrome'u güncəlləşdirin</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Saytlar</translation>
 <translation id="4594952190837476234">Bu səhifə <ph name="CREATION_TIME" /> tarixində yaradılıb və onlayn versiyadan fərqli ola bilər.</translation>
 <translation id="4605958867780575332">Element silindi: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Səhifələri daha sonra baxmaq üçün yadda saxlayın və xatırladıcı qəbul edin</translation>
 <translation id="4616150815774728855">Açın: <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Parol istifadə edin</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 oğurlanmış parol}other{# oğurlanmış parol}}</translation>
@@ -875,7 +872,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> bərpa olunub</translation>
 <translation id="7029809446516969842">Parollar</translation>
 <translation id="7030675613184250187">Yenidən tapmaq və ya oflayn oxumaq üçün səhifələri oxu siyahısında saxlaya bilərsiniz</translation>
-<translation id="703523980599857277">Əsas səhifəni dəyişin</translation>
 <translation id="7054588988317389591">Şəkil təsvirləri əldə edilsin?</translation>
 <translation id="7055152154916055070">Yönləndirmə blok edildi:</translation>
 <translation id="7063006564040364415">Sinxronizasiya serverinə qoşula bilmədi.</translation>
@@ -886,7 +882,6 @@
 <translation id="7088681679121566888">Chrome güncəldir</translation>
 <translation id="7106762743910369165">Təşkilatınız brauzerinizi idarə edir</translation>
 <translation id="7121362699166175603">Ünvan penelindəki tarixçə və avtomatik tamamlamanı silir. <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> linkində Google Hesabına məxsus axtarış tarixçəsinin başqa formaları ola bilər.</translation>
-<translation id="7128355412245153445">Əsas səhifə düyməsinə basdıqda populyar saytlar və ən son hekayələr göstərilsin</translation>
 <translation id="7138678301420049075">Digər</translation>
 <translation id="7146622961999026732">Bu saytlar və tətbiqlər sizə vacib görünür:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> domenindən <ph name="BEGIN_LINK" />orijinal səhifəni yükləyin<ph name="END_LINK" /></translation>
@@ -1076,7 +1071,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> seçin\n2. “Həmişə” seçiminə toxunun</translation>
 <translation id="8410695015584479363">Qiymətləri izləyin</translation>
 <translation id="8413126021676339697">Tam tarixçəni göstərin</translation>
-<translation id="8425213833346101688">Dəyişin</translation>
 <translation id="8427875596167638501">Önbaxış tabının yarısı açılıb</translation>
 <translation id="8428213095426709021">Ayarlar</translation>
 <translation id="8438566539970814960">Axtarış və brauzer fəaliyyətini təkmilləşdirin</translation>
@@ -1194,7 +1188,6 @@
 <translation id="926205370408745186">Digital Sağlamlıqdan Chrome fəaliyyətini silin</translation>
 <translation id="927968626442779827">Google Chrome'da Lite rejimindən istifadə edin</translation>
 <translation id="932327136139879170">Ev</translation>
-<translation id="93753284658583800">Əsas səhifə dəyişdirilib</translation>
 <translation id="938850635132480979">Xəta: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Parol daxil edin</translation>
 <translation id="948039501338975565">Əlfəcin qovluqlarının siyahısı</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index 03f115d..9bdf6fa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Каб сінхранізаваць і персаналізаваць даныя на ўсіх прыладах, уключыце сінхранізацыю</translation>
 <translation id="1209206284964581585">Схаваць гэты раз</translation>
 <translation id="1227058898775614466">Гісторыя навігацыі</translation>
-<translation id="1229399675748764149">Зрабіце гэту старонку галоўнай</translation>
 <translation id="1231733316453485619">Уключыць сінхранізацыю?</translation>
 <translation id="123724288017357924">Перазагрузіць бягучую старонку, ігнаруючы змесціва кэша</translation>
 <translation id="124678866338384709">Закрыць бягучую ўкладку</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Выдаліць пароль</translation>
 <translation id="1521774566618522728">Апошнія дзеянні адбываліся сёння</translation>
 <translation id="1538801903729528855">Зрабіце галасавы пошук у інтэрнэце яшчэ зручнейшым</translation>
-<translation id="1543538514740974167">Хуткае адкрыццё старонак</translation>
 <translation id="1544826120773021464">Каб змяніць налады вашага ўліковага запісу Google, націсніце кнопку "Кіраваць уліковым запісам"</translation>
 <translation id="1549000191223877751">Перамясціць у іншае акно</translation>
 <translation id="1553358976309200471">Абнавіць Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайты</translation>
 <translation id="4594952190837476234">Гэта пазасеткавая старонка створана <ph name="CREATION_TIME" /> і можа адрознівацца ад сваёй інтэрнэт-версіі.</translation>
 <translation id="4605958867780575332">Элемент "<ph name="ITEM_TITLE" />" выдалены</translation>
-<translation id="4614535611158687827">Захоўвайце старонкі, каб праглядаць іх пазней. Вы атрымаеце напамін</translation>
 <translation id="4616150815774728855">Адкрыць <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Выкарыстаць пароль</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Адзін раскрыты пароль}one{# раскрыты пароль}few{# раскрытыя паролі}many{# раскрытых пароляў}other{# раскрытага пароля}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Адноўлена: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Паролі</translation>
 <translation id="7030675613184250187">Захоўвайце старонкі ў спісе чытання, каб вярнуцца да іх пазней або чытаць без падключэння да інтэрнэту</translation>
-<translation id="703523980599857277">Змяніць галоўную старонку</translation>
 <translation id="7054588988317389591">Атрымліваць апісанні відарысаў?</translation>
 <translation id="7055152154916055070">Перанакіраванне заблакіравана:</translation>
 <translation id="7063006564040364415">Не ўдалося падключыцца да сервера сінхранізацыі.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome не патрабуе абнаўлення</translation>
 <translation id="7106762743910369165">Вашым браўзерам кіруе арганізацыя</translation>
 <translation id="7121362699166175603">Ачышчае гісторыю і гісторыю аўтазапаўнення ў адрасным радку. На сайце <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> размешчаны іншыя формы запісу гісторыі прагляду сайтаў для вашага Уліковага запісу Google.</translation>
-<translation id="7128355412245153445">Пры націсканні кнопкі "Галоўная старонка" будуць паказаны папулярныя сайты і свежыя артыкулы</translation>
 <translation id="7138678301420049075">Іншыя</translation>
 <translation id="7146622961999026732">Гэтыя сайты і праграмы могуць быць важнымі для вас:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Загрузіць зыходную старонку<ph name="END_LINK" /> з дамена <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Выберыце праграму "<ph name="APP_NAME" />".\n2. Націсніце "Заўсёды".</translation>
 <translation id="8410695015584479363">Адсочваць цэны</translation>
 <translation id="8413126021676339697">Паказаць усю гісторыю</translation>
-<translation id="8425213833346101688">Змяніць</translation>
 <translation id="8427875596167638501">Укладка перадпрагляду адкрыта напалову</translation>
 <translation id="8428213095426709021">Налады</translation>
 <translation id="8438566539970814960">Паскорыць пошук і прагляд</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Выдаліць дзеянні ў Chrome са службы лічбавага камфорту</translation>
 <translation id="927968626442779827">Выкарыстоўвайце Google Chrome, уключыўшы спрошчаны рэжым</translation>
 <translation id="932327136139879170">Галоўная старонка</translation>
-<translation id="93753284658583800">Галоўная старонка зменена</translation>
 <translation id="938850635132480979">Памылка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Увядзіце фразу-пароль</translation>
 <translation id="948039501338975565">Спіс папак з закладкамі</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 7381c08..d6d97c2f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Включете синхронизирането, за да се възползвате от синхронизиране и персонализиране на всички устройства</translation>
 <translation id="1209206284964581585">Скриване засега</translation>
 <translation id="1227058898775614466">История на навигацията</translation>
-<translation id="1229399675748764149">Задайте тази страница като начална</translation>
 <translation id="1231733316453485619">Да се включи ли синхронизирането?</translation>
 <translation id="123724288017357924">Презареждане на страницата (кешът се пренебрегва)</translation>
 <translation id="124678866338384709">Затваряне на текущия раздел</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Изтриване на паролата</translation>
 <translation id="1521774566618522728">Активно днес</translation>
 <translation id="1538801903729528855">Подобряване на работата с глас в мрежата</translation>
-<translation id="1543538514740974167">Стигайте дотук по-бързо</translation>
 <translation id="1544826120773021464">За да управлявате профила си в Google, докоснете бутона „Управление на профила“</translation>
 <translation id="1549000191223877751">Преместв. в другия прозорец</translation>
 <translation id="1553358976309200471">Актуализиране на Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайтове</translation>
 <translation id="4594952190837476234">Тази офлайн страница е от <ph name="CREATION_TIME" /> и може да се различава от онлайн версията.</translation>
 <translation id="4605958867780575332">Елементът бе премахнат: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Запазване на страниците за по-късно и получаване на напомняне</translation>
 <translation id="4616150815774728855">Отваряне на <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Използване на паролата</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 компрометирана парола}other{# компрометирани пароли}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Файлът „<ph name="ITEM_TITLE" />“ бе възстановен</translation>
 <translation id="7029809446516969842">Пароли</translation>
 <translation id="7030675613184250187">Можете да запазвате страници в списъка си за четене, за да ги намирате отново или да ги четете офлайн</translation>
-<translation id="703523980599857277">Промяна на началната страница</translation>
 <translation id="7054588988317389591">Искате ли да получавате описания на изображенията?</translation>
 <translation id="7055152154916055070">Блокирано бе пренасочване:</translation>
 <translation id="7063006564040364415">Не можа да се установи връзка със синхронизиращия сървър.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome е актуален</translation>
 <translation id="7106762743910369165">Браузърът се управлява от организацията ви</translation>
 <translation id="7121362699166175603">Изчиства историята и автоматичните довършвания в адресната лента. В профила ви в Google може да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Преглеждайте водещите сайтове и скорошните материали с едно докосване на бутона „Начална страница“</translation>
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7146622961999026732">Тези сайтове и приложения изглеждат важни за вас:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Зареждане на оригиналната страница<ph name="END_LINK" /> от <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Изберете <ph name="APP_NAME" />\n2. Докоснете „Винаги“</translation>
 <translation id="8410695015584479363">Следене на цени</translation>
 <translation id="8413126021676339697">Цялата история</translation>
-<translation id="8425213833346101688">Промяна</translation>
 <translation id="8427875596167638501">Разделът за визуализация е наполовина отворен</translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8438566539970814960">Подобряване на търсенията и сърфирането</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Премахване на активността ви в Chrome от „Дигитално благополучие“</translation>
 <translation id="927968626442779827">Използване на олекотения режим в Google Chrome</translation>
 <translation id="932327136139879170">Начална страница</translation>
-<translation id="93753284658583800">Началната страница е променена</translation>
 <translation id="938850635132480979">Грешка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Въведете пропуск</translation>
 <translation id="948039501338975565">Списък с папките с отметки</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index 4ba0a5d..3f1b926 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">সমগ্র ডিভাইস জুড়ে সিঙ্ক এবং ব্যক্তিগতকৃত করতে সিঙ্ক বিকল্প চালু করুন</translation>
 <translation id="1209206284964581585">এখনকার মতো লুকান</translation>
 <translation id="1227058898775614466">নেভিগেশনের ইতিহাস</translation>
-<translation id="1229399675748764149">এই পৃষ্ঠাকে আপনার হোমপেজ হিসেবে সেট করুন</translation>
 <translation id="1231733316453485619">সিঙ্ক চালু করবেন?</translation>
 <translation id="123724288017357924">ক্যাশে করা কন্টেন্ট এড়িয়ে বর্তমান পৃষ্ঠা আবার লোড করুন</translation>
 <translation id="124678866338384709">বর্তমান ট্যাব বন্ধ করুন</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">পাসওয়ার্ড মুছুন</translation>
 <translation id="1521774566618522728">আজ ব্যবহার করা হয়েছে</translation>
 <translation id="1538801903729528855">ওয়েবে আরও ভাল ভয়েস সার্চ করার অভিজ্ঞতা পান</translation>
-<translation id="1543538514740974167">এখান থেকে দ্রুত অ্যাক্সেস করুন</translation>
 <translation id="1544826120773021464">আপনার Google অ্যাকাউন্ট ম্যানেজ করতে, "অ্যাকাউন্ট ম্যানেজ করুন" বোতামে ট্যাপ করুন</translation>
 <translation id="1549000191223877751">অন্য উইন্ডোতে সরান</translation>
 <translation id="1553358976309200471">Chrome আপডেট করুন</translation>
@@ -500,7 +498,6 @@
 <translation id="4587589328781138893">সাইট</translation>
 <translation id="4594952190837476234">এই অফলাইন পৃষ্ঠাটি <ph name="CREATION_TIME" />-এ তৈরি করা হয়েছিল এবং এটি অনলাইন ভার্সনের থেকে আলাদা হতে পারে।</translation>
 <translation id="4605958867780575332">আইটেম সরানো হয়েছে: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">পরে দেখার জন্য পৃষ্ঠাগুলি সেভ করে রাখুন ও রিমাইন্ডার পান</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> খুলুন</translation>
 <translation id="4634124774493850572">পাসওয়ার্ড ব্যবহার করুন</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{১টি চুরি হয়ে যাওয়া পাসওয়ার্ড}one{#টি চুরি হয়ে যাওয়া পাসওয়ার্ড}other{#টি চুরি হয়ে যাওয়া পাসওয়ার্ড}}</translation>
@@ -879,7 +876,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ফিরিয়ে আনা হয়েছে</translation>
 <translation id="7029809446516969842">পাসওয়ার্ড</translation>
 <translation id="7030675613184250187">পৃষ্ঠাগুলি আবার খুঁজে পেতে বা অফলাইনে পড়তে আপনার পড়ার তালিকাতে সেগুলি সেভ করে রাখতে পারবেন</translation>
-<translation id="703523980599857277">হোমপেজ পরিবর্তন করুন</translation>
 <translation id="7054588988317389591">ছবির বিবরণ পেতে চান?</translation>
 <translation id="7055152154916055070">রিডাইরেক্ট ব্লক করা হয়েছে:</translation>
 <translation id="7063006564040364415">সিঙ্ক সার্ভারে সংযোগ করতে পারেনি৷</translation>
@@ -890,7 +886,6 @@
 <translation id="7088681679121566888">Chrome আপ-টু-ডেট আছে</translation>
 <translation id="7106762743910369165">আপনার সংস্থা ব্রাউজার ম্যানেজ করছে</translation>
 <translation id="7121362699166175603">অ্যাড্রেস বারের ইতিহাস এবং অটোকমপ্লিট তথ্য মুছে ফেলে। <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />-এ আপনার Google অ্যাকাউন্টের অন্যান্য ধরনের ব্রাউজিংয়ের ইতিহাস থাকতে পারে।</translation>
-<translation id="7128355412245153445">বেশি ব্যবহার করেন এমন সাইট ও সাম্প্রতিক খবরগুলি যখন খুশি হোম বোতামে ট্যাপ করে দেখে নিন</translation>
 <translation id="7138678301420049075">অন্যান্য</translation>
 <translation id="7146622961999026732">মনে হচ্ছে এই সাইট ও অ্যাপ আপনার জন্য গুরুত্বপূর্ণ:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> থেকে <ph name="BEGIN_LINK" />মূল পৃষ্ঠাটি লোড করুন<ph name="END_LINK" /></translation>
@@ -1080,7 +1075,6 @@
 <translation id="8407396331882458341">১. <ph name="APP_NAME" /> বেছে নিন\n2. “সবসময়” বোতাম ট্যাপ করুন</translation>
 <translation id="8410695015584479363">দাম ট্র্যাক করুন</translation>
 <translation id="8413126021676339697">সম্পূর্ণ ইতিহাস দেখান</translation>
-<translation id="8425213833346101688">পরিবর্তন</translation>
 <translation id="8427875596167638501">প্রিভিউ ট্যাব অর্ধেক খোলা আছে</translation>
 <translation id="8428213095426709021">সেটিংস</translation>
 <translation id="8438566539970814960">সার্চ এবং ব্রাউজিং অভিজ্ঞতা আরও উন্নত করুন</translation>
@@ -1198,7 +1192,6 @@
 <translation id="926205370408745186">ডিজিটাল ওয়েলবিং থেকে আপনার Chrome অ্যাক্টিভিটি সরিয়ে দিন</translation>
 <translation id="927968626442779827">Google Chrome-এ 'লাইট' মোড ব্যবহার করুন</translation>
 <translation id="932327136139879170">হোম</translation>
-<translation id="93753284658583800">হোমপেজ বদলানো হয়েছে</translation>
 <translation id="938850635132480979">ত্রুটি: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">পাসফ্রেজ প্রবেশ করান</translation>
 <translation id="948039501338975565">বুকমার্ক ফোল্ডারের তালিকা</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 2fbff1e..5591067 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Uključite sinhronizaciju da sinhronizirate i personalizirate više uređaja</translation>
 <translation id="1209206284964581585">Sakrij za sada</translation>
 <translation id="1227058898775614466">Historija navigacije</translation>
-<translation id="1229399675748764149">Postavite ovu stranicu kao početnu</translation>
 <translation id="1231733316453485619">Uključiti sinhronizaciju?</translation>
 <translation id="123724288017357924">Ponovo učitajte tren. str. ignorir. sadrž. keš memor.</translation>
 <translation id="124678866338384709">Zatvori trenutnu karticu</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Izbriši lozinku</translation>
 <translation id="1521774566618522728">Aktivan danas</translation>
 <translation id="1538801903729528855">Ostvarite bolje iskustvo u korištenju glasa na webu</translation>
-<translation id="1543538514740974167">Dođite ovdje brže</translation>
 <translation id="1544826120773021464">Za upravljanje Google računom, dodirnite dugme "Upravljaj računom"</translation>
 <translation id="1549000191223877751">Premjesti u drugi prozor</translation>
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Web lokacije</translation>
 <translation id="4594952190837476234">Stranica van mreže je od <ph name="CREATION_TIME" /> i može se razlikovati od verzije koja je na mreži.</translation>
 <translation id="4605958867780575332">Uklonjena je stavka: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Sačuvajte stranice za kasnije i primite podsjetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ugrožena lozinka}one{# ugrožena lozinka}few{# ugrožene lozinke}other{# ugroženih lozinki}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Vraćeno: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Lozinke</translation>
 <translation id="7030675613184250187">Možete sačuvati stranice na listu za čitanje da ih ponovo pronađete kasnije ili čitate van mreže</translation>
-<translation id="703523980599857277">Promijeni početnu stranicu</translation>
 <translation id="7054588988317389591">Preuzeti opise slika?</translation>
 <translation id="7055152154916055070">Preusmjeravanje je blokirano:</translation>
 <translation id="7063006564040364415">Povezivanje na server za sinhronizaciju nije uspjelo.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome je ažuriran</translation>
 <translation id="7106762743910369165">Preglednikom upravlja vaša organizacija</translation>
 <translation id="7121362699166175603">Briše historiju i automatsko dovršavanje na traci za adresu. Vaš Google račun može imati druge oblike historije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Prikažite web lokacije koje najviše posjećujete i nedavne priče kad god dodirnete dugme za početni ekran</translation>
 <translation id="7138678301420049075">Drugo</translation>
 <translation id="7146622961999026732">Čini se da su vam ove web lokacije i aplikacije važne:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Učitajte originalnu stranicu<ph name="END_LINK" /> s domene <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Odaberite aplikaciju <ph name="APP_NAME" />\n2. Dodirnite "Uvijek"</translation>
 <translation id="8410695015584479363">Prati cijene</translation>
 <translation id="8413126021676339697">Pokaži cijelu povijest</translation>
-<translation id="8425213833346101688">Izmijeni</translation>
 <translation id="8427875596167638501">Kartica za pregled je napola otvorena</translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledanje</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Uklonite aktivnosti Chromea iz Digitalnog blagostanja</translation>
 <translation id="927968626442779827">Koristite Jednostavni način rada na Google Chromeu</translation>
 <translation id="932327136139879170">Dom</translation>
-<translation id="93753284658583800">Početna stranica je promijenjena</translation>
 <translation id="938850635132480979">Greška: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Unesite pristupni izraz</translation>
 <translation id="948039501338975565">Lista foldera s oznakama</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index 0d2a63e..5499373d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Per sincronitzar i personalitzar el contingut en tots els dispositius, activa la sincronització</translation>
 <translation id="1209206284964581585">Amaga per ara</translation>
 <translation id="1227058898775614466">Historial de navegació</translation>
-<translation id="1229399675748764149">Fes que aquesta sigui la teva pàgina d'inici</translation>
 <translation id="1231733316453485619">Vols activar la sincronització?</translation>
 <translation id="123724288017357924">Carrega pàgina actual; ignora contingut en memòria</translation>
 <translation id="124678866338384709">Tanca la pestanya actual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Suprimeix la contrasenya</translation>
 <translation id="1521774566618522728">Actiu avui</translation>
 <translation id="1538801903729528855">Gaudeix d'una millor experiència de veu al web</translation>
-<translation id="1543538514740974167">Arriba fins aquí més ràpidament</translation>
 <translation id="1544826120773021464">Per gestionar el teu Compte de Google, toca el botó Gestiona el compte</translation>
 <translation id="1549000191223877751">Mou a l'altra finestra</translation>
 <translation id="1553358976309200471">Actualitza Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Llocs web</translation>
 <translation id="4594952190837476234">Aquesta pàgina sense connexió és del dia <ph name="CREATION_TIME" /> i pot ser diferent de la versió en línia.</translation>
 <translation id="4605958867780575332">S'ha suprimit l'element: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Desa pàgines per a més tard i rep un recordatori</translation>
 <translation id="4616150815774728855">Obre <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Fes servir la contrasenya</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 contrasenya en perill}other{# contrasenyes en perill}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> s'ha restaurat</translation>
 <translation id="7029809446516969842">Contrasenyes</translation>
 <translation id="7030675613184250187">Pots desar pàgines a la llista de lectura per accedir-hi més endavant o llegir-les sense connexió</translation>
-<translation id="703523980599857277">Canvia la pàgina d'inici</translation>
 <translation id="7054588988317389591">Vols obtenir descripcions de les imatges?</translation>
 <translation id="7055152154916055070">S'ha bloquejat la redirecció:</translation>
 <translation id="7063006564040364415">No s'ha pogut connectar amb el servidor de sincronització.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome està actualitzat</translation>
 <translation id="7106762743910369165">La teva organització gestiona el navegador</translation>
 <translation id="7121362699166175603">Esborra l'historial i les complecions automàtiques a la barra d'adreces. A <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> trobaràs altres maneres d'explorar l'historial de navegació del Compte de Google.</translation>
-<translation id="7128355412245153445">Consulta els llocs web que més visites i les històries recents sempre que toquis el botó d'inici</translation>
 <translation id="7138678301420049075">Altres</translation>
 <translation id="7146622961999026732">Aquests llocs web i aquestes aplicacions semblen importants per a tu:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Carrega la pàgina original<ph name="END_LINK" /> del domini <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Tria <ph name="APP_NAME" />\n2. Toca Sempre</translation>
 <translation id="8410695015584479363">Fes un seguiment dels preus</translation>
 <translation id="8413126021676339697">Mostra l'historial complet</translation>
-<translation id="8425213833346101688">Canvia</translation>
 <translation id="8427875596167638501">La pestanya de previsualització està oberta fins a la meitat</translation>
 <translation id="8428213095426709021">Configuració</translation>
 <translation id="8438566539970814960">Millora les cerques i la navegació</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Suprimeix l'activitat de Chrome de l'aplicació Benestar digital</translation>
 <translation id="927968626442779827">Utilitza el mode bàsic a Google Chrome</translation>
 <translation id="932327136139879170">Inici</translation>
-<translation id="93753284658583800">S'ha canviat la pàgina d'inici</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Introduïu la frase de contrasenya</translation>
 <translation id="948039501338975565">Llista de carpetes d'adreces d'interès</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index 444aa5c..5f37fcc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Chcete-li synchronizovat a přizpůsobit různá zařízení, zapněte synchronizaci</translation>
 <translation id="1209206284964581585">Prozatím skrýt</translation>
 <translation id="1227058898775614466">Historie navigace</translation>
-<translation id="1229399675748764149">Nastavte si tuto stránku jako domovskou</translation>
 <translation id="1231733316453485619">Zapnout synchronizaci?</translation>
 <translation id="123724288017357924">Obnovit stránku a ignorovat obsah v mezipaměti</translation>
 <translation id="124678866338384709">Zavřít aktuální kartu</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Vymazat heslo</translation>
 <translation id="1521774566618522728">Aktivní dnes</translation>
 <translation id="1538801903729528855">Využijte vylepšené hlasové služby na webu</translation>
-<translation id="1543538514740974167">Rychlejší přístup</translation>
 <translation id="1544826120773021464">Chcete-li spravovat svůj účet Google, klepněte na tlačítko Spravovat účet</translation>
 <translation id="1549000191223877751">Přejít do jiného okna</translation>
 <translation id="1553358976309200471">Aktualizovat Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Weby</translation>
 <translation id="4594952190837476234">Tato offline stránka je z <ph name="CREATION_TIME" /> a může se od online verze lišit.</translation>
 <translation id="4605958867780575332">Tato položka byla odstraněna: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Uložit stránky na později a odeslat připomenutí</translation>
 <translation id="4616150815774728855">Do aplikace <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použít heslo</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Bylo nalezeno jedno prolomené heslo}few{Byla nalezena # prolomená hesla}many{Bylo nalezeno # prolomeného hesla}other{Bylo nalezeno # prolomených hesel}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Obnoveno: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Hesla</translation>
 <translation id="7030675613184250187">Stránky si můžete uložit do seznamu četby, abyste je znovu našli nebo si je mohli přečíst offline</translation>
-<translation id="703523980599857277">Změnit domovskou stránku</translation>
 <translation id="7054588988317389591">Zobrazovat popisy obrázků?</translation>
 <translation id="7055152154916055070">Bylo zablokováno přesměrování:</translation>
 <translation id="7063006564040364415">K synchronizačnímu serveru se nelze připojit.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome je aktuální</translation>
 <translation id="7106762743910369165">Váš prohlížeč je spravován vaší organizací</translation>
 <translation id="7121362699166175603">Vymaže historii a automatická dokončení v adresním řádku. Na stránce <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google.</translation>
-<translation id="7128355412245153445">Své oblíbené weby a aktuální zprávy můžete mít k dispozici po klepnutí na tlačítko domovské stránky</translation>
 <translation id="7138678301420049075">Ostatní</translation>
 <translation id="7146622961999026732">Tyto weby a aplikace jsou pro vás zřejmě důležité:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Načíst původní stránku<ph name="END_LINK" /> z domény <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Vyberte <ph name="APP_NAME" />\n2. Klepněte na Vždy</translation>
 <translation id="8410695015584479363">Sledovat ceny</translation>
 <translation id="8413126021676339697">Zobrazit celou historii</translation>
-<translation id="8425213833346101688">Změnit</translation>
 <translation id="8427875596167638501">Karta náhledu je otevřená na půlce</translation>
 <translation id="8428213095426709021">Nastavení</translation>
 <translation id="8438566539970814960">Vylepšit vyhledávání a procházení</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Odstranit vaši aktivitu v Chromu z digitální rovnováhy</translation>
 <translation id="927968626442779827">Používejte v prohlížeči Google Chrome zjednodušený režim</translation>
 <translation id="932327136139879170">Domovská stránka</translation>
-<translation id="93753284658583800">Domovská stránka se změnila</translation>
 <translation id="938850635132480979">Chyba: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Zadat heslovou frázi</translation>
 <translation id="948039501338975565">Seznam složek se záložkami</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index 1beac2f4..c01e2153 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Aktivér synkronisering for at synkronisere og tilpasse på alle dine enheder</translation>
 <translation id="1209206284964581585">Skjul indtil videre</translation>
 <translation id="1227058898775614466">Navigationsoversigt</translation>
-<translation id="1229399675748764149">Gør denne side til din startside</translation>
 <translation id="1231733316453485619">Vil du aktivere synkronisering?</translation>
 <translation id="123724288017357924">Genindlæs aktuel side, og ignorer indhold gemt i cache</translation>
 <translation id="124678866338384709">Luk aktuel fane</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Slet adgangskoden</translation>
 <translation id="1521774566618522728">Aktiv i dag</translation>
 <translation id="1538801903729528855">Få en bedre stemmestyret brugeroplevelse på nettet</translation>
-<translation id="1543538514740974167">Få hurtig adgang</translation>
 <translation id="1544826120773021464">Tryk på knappen "Administrer konto" for at administrere din Google-konto</translation>
 <translation id="1549000191223877751">Flyt til et andet vindue</translation>
 <translation id="1553358976309200471">Opdater Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4594952190837476234">Denne offlineside er fra <ph name="CREATION_TIME" /> og kan afvige fra onlineversionen.</translation>
 <translation id="4605958867780575332">Element fjernet: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Gem sider til senere, og få en påmindelse</translation>
 <translation id="4616150815774728855">Åbn <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Brug adgangskode</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 kompromitteret adgangskode}one{# kompromitteret adgangskode}other{# kompromitterede adgangskoder}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Gendannet den <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Adgangskoder</translation>
 <translation id="7030675613184250187">Du kan gemme sider på din læseliste, så du kan finde dem igen eller læse dem, når du er offline</translation>
-<translation id="703523980599857277">Skift startside</translation>
 <translation id="7054588988317389591">Vil du have billedbeskrivelser?</translation>
 <translation id="7055152154916055070">Omdirigeringen blev blokeret:</translation>
 <translation id="7063006564040364415">Der kunne ikke oprettes forbindelse til synkroniseringsserveren.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome er opdateret</translation>
 <translation id="7106762743910369165">Din browser administreres af din organisation</translation>
 <translation id="7121362699166175603">Rydder historikken og autofuldførelser i adresselinjen. Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Se dine mest anvendte websites og seneste historier, når du trykker på knappen Hjem</translation>
 <translation id="7138678301420049075">Andet</translation>
 <translation id="7146622961999026732">Disse websites og apps lader til at være vigtige for dig:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Indlæs den oprindelige side<ph name="END_LINK" /> fra <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Vælg <ph name="APP_NAME" />\n2. Tryk på "Altid"</translation>
 <translation id="8410695015584479363">Følg prisudvikling</translation>
 <translation id="8413126021676339697">Vis hele historikken</translation>
-<translation id="8425213833346101688">Skift</translation>
 <translation id="8427875596167638501">Fanen forhåndsvisning er åbnet halvt</translation>
 <translation id="8428213095426709021">Indstillinger</translation>
 <translation id="8438566539970814960">Gør søgninger og browsing endnu bedre</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Fjern din Chrome-aktivitet fra Digital balance</translation>
 <translation id="927968626442779827">Brug Lite-tilstand i Google Chrome</translation>
 <translation id="932327136139879170">Start</translation>
-<translation id="93753284658583800">Startsiden blev ændret</translation>
 <translation id="938850635132480979">Fejl: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Angiv adgangssætning</translation>
 <translation id="948039501338975565">Liste over bogmærkemapper</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index aa4935a..7b8099cd 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Aktivieren Sie die Synchronisierung, um geräteübergreifend zu synchronisieren und zu personalisieren</translation>
 <translation id="1209206284964581585">Vorerst ausblenden</translation>
 <translation id="1227058898775614466">Navigationsverlauf</translation>
-<translation id="1229399675748764149">Diese Seite als Startseite festlegen</translation>
 <translation id="1231733316453485619">Synchronisierung aktivieren?</translation>
 <translation id="123724288017357924">Aktuelle Seite neu laden, Cache-Inhalte ignorieren</translation>
 <translation id="124678866338384709">Aktuellen Tab schließen</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Passwort löschen</translation>
 <translation id="1521774566618522728">Heute aktiv</translation>
 <translation id="1538801903729528855">Spracheingabe im Web besser nutzen</translation>
-<translation id="1543538514740974167">Schneller hierherkommen</translation>
 <translation id="1544826120773021464">Wenn Sie Ihr Google-Konto verwalten möchten, tippen Sie auf die Schaltfläche "Konto verwalten"</translation>
 <translation id="1549000191223877751">Zu anderem Fenster wechseln</translation>
 <translation id="1553358976309200471">Chrome aktualisieren</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4594952190837476234">Diese Offlineseite ist vom <ph name="CREATION_TIME" /> und unterscheidet sich gegebenenfalls von der Onlineversion.</translation>
 <translation id="4605958867780575332">Element entfernt: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Seiten für später speichern und eine Erinnerung erhalten</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> öffnen</translation>
 <translation id="4634124774493850572">Passwort verwenden</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 gehacktes Passwort}other{# gehackte Passwörter}}</translation>
@@ -853,7 +850,7 @@
 <translation id="6864459304226931083">Bild herunterladen</translation>
 <translation id="6865313869410766144">Formulardaten für automatisches Ausfüllen</translation>
 <translation id="6882836635272038266">Standardschutz vor Websites, Downloads und Erweiterungen, die als schädlich bekannt sind.</translation>
-<translation id="688738109438487280">Vorhandene Daten werden zu <ph name="TO_ACCOUNT" /> hinzugefügt.</translation>
+<translation id="688738109438487280">Vorhandene Daten werden zu <ph name="TO_ACCOUNT" /> hinzugefügt</translation>
 <translation id="6891726759199484455">Entsperren, um Ihr Passwort zu kopieren</translation>
 <translation id="6896758677409633944">Kopieren</translation>
 <translation id="6900532703269623216">Erweitertes Safe Browsing</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Wiederhergestellt: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Passwörter</translation>
 <translation id="7030675613184250187">Sie können Seiten zu Ihrer Leseliste hinzufügen, um sie wiederzufinden oder offline zu lesen</translation>
-<translation id="703523980599857277">Startseite ändern</translation>
 <translation id="7054588988317389591">Bildbeschreibungen abrufen?</translation>
 <translation id="7055152154916055070">Weiterleitung blockiert:</translation>
 <translation id="7063006564040364415">Verbindung zum Synchronisierungsserver konnte nicht hergestellt werden.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ist auf dem neuesten Stand</translation>
 <translation id="7106762743910369165">Ihr Browser wird von Ihrer Organisation verwaltet</translation>
 <translation id="7121362699166175603">Löscht den Verlauf und Autovervollständigungen in der Adressleiste. Unter <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> sind möglicherweise weitere Arten von Browserverlaufsdaten für Ihr Google-Konto gespeichert.</translation>
-<translation id="7128355412245153445">Sie können sich Ihre Top-Websites und aktuelle Meldungen anzeigen lassen, wenn Sie die Schaltfläche "Startbildschirm" antippen</translation>
 <translation id="7138678301420049075">Sonstiges</translation>
 <translation id="7146622961999026732">Diese Websites und Apps scheinen Ihnen wichtig zu sein:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Originalseite<ph name="END_LINK" /> aus <ph name="DOMAIN_NAME" /> laden</translation>
@@ -974,7 +969,7 @@
 <translation id="7698359219371678927">E-Mail in <ph name="APP_NAME" /> erstellen</translation>
 <translation id="7704317875155739195">Suchanfragen und URLs automatisch vervollständigen</translation>
 <translation id="7707922173985738739">Mobile Daten verwenden</translation>
-<translation id="7725024127233776428">Seiten, die Sie als Lesezeichen speichern, werden hier angezeigt</translation>
+<translation id="7725024127233776428">Seiten, die Sie als Lesezeichen speichern, werden hier angezeigt.</translation>
 <translation id="7735637452482172701">Mit Displaysperre entsperren</translation>
 <translation id="7746457520633464754">Chrome sendet die URLs einiger von Ihnen besuchter Seiten, bestimmte Systeminformationen und einige Seiteninhalte an Google, um gefährliche Apps und Websites zu erkennen</translation>
 <translation id="7757787379047923882">Text geteilt von <ph name="DEVICE_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Wählen Sie <ph name="APP_NAME" /> aus\n2. Tippen Sie auf "Immer"</translation>
 <translation id="8410695015584479363">Preise beobachten</translation>
 <translation id="8413126021676339697">Gesamtverlauf anzeigen</translation>
-<translation id="8425213833346101688">Ändern</translation>
 <translation id="8427875596167638501">Vorschau-Tab ist halb geöffnet</translation>
 <translation id="8428213095426709021">Einstellungen</translation>
 <translation id="8438566539970814960">Suchanfragen und das Surfen verbessern</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome-Aktivitäten aus Digital Wellbeing entfernen</translation>
 <translation id="927968626442779827">Verwenden Sie den Lite-Modus in Google Chrome</translation>
 <translation id="932327136139879170">Startseite</translation>
-<translation id="93753284658583800">Startseite geändert</translation>
 <translation id="938850635132480979">Fehler: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Passphrase eingeben</translation>
 <translation id="948039501338975565">Liste der Lesezeichenordner</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
index b1da74f..8481409 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Για συγχρονισμό και εξατομίκευση σε διάφορες συσκευές, ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="1209206284964581585">Προσωρινή απόκρυψη</translation>
 <translation id="1227058898775614466">Ιστορικό περιήγησης</translation>
-<translation id="1229399675748764149">Ορίστε αυτήν τη σελίδα ως αρχική σελίδα</translation>
 <translation id="1231733316453485619">Ενεργοποίηση συγχρονισμού;</translation>
 <translation id="123724288017357924">Επαναφ. τρέχ.σελ. αγνοώντας το περιεχ. κρυφ.μνήμης</translation>
 <translation id="124678866338384709">Κλείσιμο τρέχουσας καρτέλας</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Διαγραφή κωδικού πρόσβασης</translation>
 <translation id="1521774566618522728">Ενεργή σήμερα</translation>
 <translation id="1538801903729528855">Αποκτήστε μια καλύτερη εμπειρία φωνής στον ιστό</translation>
-<translation id="1543538514740974167">Για ταχύτερη μετάβαση</translation>
 <translation id="1544826120773021464">Για να διαχειριστείτε τον Λογαριασμό σας Google, πατήστε το κουμπί Διαχείριση λογαριασμού.</translation>
 <translation id="1549000191223877751">Μεταβείτε σε άλλο παράθυρο</translation>
 <translation id="1553358976309200471">Ενημερώστε το Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Ιστότοποι</translation>
 <translation id="4594952190837476234">Αυτή η σελίδα εκτός σύνδεσης δημιουργήθηκε στις <ph name="CREATION_TIME" /> και μπορεί να διαφέρει από την έκδοση στο διαδίκτυο.</translation>
 <translation id="4605958867780575332">Το στοιχείο καταργήθηκε <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Αποθηκεύστε σελίδες για αργότερα και λάβετε σχετική υπενθύμιση.</translation>
 <translation id="4616150815774728855">Ανοίξτε <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Χρήση κωδικού πρόσβασης</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 παραβιασμένος κωδικός πρόσβασης}other{# παραβιασμένοι κωδικοί πρόσβασης}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Έγινε επαναφορά του στοιχείου <ph name="ITEM_TITLE" />.</translation>
 <translation id="7029809446516969842">Κωδ. πρόσβασης</translation>
 <translation id="7030675613184250187">Μπορείτε να αποθηκεύσετε σελίδες στη λίστα ανάγνωσής σας για να τις βρείτε ξανά ή να τις διαβάσετε εκτός σύνδεσης.</translation>
-<translation id="703523980599857277">Αλλαγή αρχικής σελίδας</translation>
 <translation id="7054588988317389591">Λήψη περιγραφών εικόνων;</translation>
 <translation id="7055152154916055070">Αποκλεισμένη ανακατεύθυνση:</translation>
 <translation id="7063006564040364415">Δεν ήταν δυνατή η σύνδεση στον διακομιστή συγχρονισμού.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Το Chrome έχει ενημερωθεί.</translation>
 <translation id="7106762743910369165">Η διαχείριση του προγράμματος περιήγησής σας πραγματοποιείται από τον οργανισμό σας.</translation>
 <translation id="7121362699166175603">Διαγράφει το ιστορικό και τα στοιχεία αυτόματης συμπλήρωσης στη γραμμή διευθύνσεων. Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Δείτε κορυφαίους ιστοτόπους και τις πιο πρόσφατες ειδήσεις κάθε φορά που πατάτε το κουμπί αρχικής οθόνης.</translation>
 <translation id="7138678301420049075">Άλλο</translation>
 <translation id="7146622961999026732">Αυτοί οι ιστότοποι και οι εφαρμογές φαίνονται σημαντικές για εσάς:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Φόρτωση αρχικής σελίδας<ph name="END_LINK" /> από <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Επιλέξτε την εφαρμογή <ph name="APP_NAME" />.\n2. Πατήστε την επιλογή Πάντα.</translation>
 <translation id="8410695015584479363">Παρακολούθηση τιμών</translation>
 <translation id="8413126021676339697">Εμφάνιση πλήρους ιστορικού</translation>
-<translation id="8425213833346101688">Αλλαγή</translation>
 <translation id="8427875596167638501">Η καρτέλα προεπισκόπησης έχει ανοίξει κατά το ήμισυ</translation>
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
 <translation id="8438566539970814960">Βελτιώστε τις αναζητήσεις και την περιήγηση</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Κατάργηση της δραστηριότητάς σας στο Chrome από το Digital Wellbeing</translation>
 <translation id="927968626442779827">Χρησιμοποιήστε τη λειτουργία Lite στο Google Chrome.</translation>
 <translation id="932327136139879170">Αρχική σελίδα</translation>
-<translation id="93753284658583800">Η αρχική σελίδα άλλαξε.</translation>
 <translation id="938850635132480979">Σφάλμα: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Εισαγωγή φράσης πρόσβασης</translation>
 <translation id="948039501338975565">Λίστα φακέλων σελιδοδεικτών</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index f8bb9b24..5609bb8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">To sync and personalise across devices, turn on sync</translation>
 <translation id="1209206284964581585">Hide for now</translation>
 <translation id="1227058898775614466">Navigation history</translation>
-<translation id="1229399675748764149">Make this page your home page</translation>
 <translation id="1231733316453485619">Turn on sync?</translation>
 <translation id="123724288017357924">Reload the current page, ignoring cached content</translation>
 <translation id="124678866338384709">Close current tab</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Delete password</translation>
 <translation id="1521774566618522728">Active today</translation>
 <translation id="1538801903729528855">Get a better voice experience on the web</translation>
-<translation id="1543538514740974167">Get here quicker</translation>
 <translation id="1544826120773021464">To manage your Google Account, tap the 'Manage account' button</translation>
 <translation id="1549000191223877751">Move to other window</translation>
 <translation id="1553358976309200471">Update Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">This offline page is from <ph name="CREATION_TIME" /> and may differ from the online version.</translation>
 <translation id="4605958867780575332">Item removed: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Save pages for later and get a reminder</translation>
 <translation id="4616150815774728855">Open <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Use password</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 compromised password}other{# compromised passwords}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Restored <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Passwords</translation>
 <translation id="7030675613184250187">You can save pages to your reading list to find them again or read offline</translation>
-<translation id="703523980599857277">Change home page</translation>
 <translation id="7054588988317389591">Get image descriptions?</translation>
 <translation id="7055152154916055070">Redirect blocked:</translation>
 <translation id="7063006564040364415">Could not connect to the sync server.</translation>
@@ -888,12 +884,11 @@
 <translation id="7088681679121566888">Chrome is up to date</translation>
 <translation id="7106762743910369165">Your browser is managed by your organisation</translation>
 <translation id="7121362699166175603">Clears history and auto-completions in the address bar. Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">See your top sites and recent stories whenever you tap the Home button</translation>
 <translation id="7138678301420049075">Other</translation>
 <translation id="7146622961999026732">These sites and apps seem important to you:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Load original page<ph name="END_LINK" /> from <ph name="DOMAIN_NAME" /></translation>
 <translation id="7149893636342594995">Last 24 Hours</translation>
-<translation id="7173114856073700355">Open Settings</translation>
+<translation id="7173114856073700355">Open settings</translation>
 <translation id="7177466738963138057">You can change this later in Settings</translation>
 <translation id="7180611975245234373">Refresh</translation>
 <translation id="7187993566681480880">Keeps you safe on Chrome and may be used to improve your security in other Google apps when you are signed in.</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Choose <ph name="APP_NAME" />\n2. Tap 'Always'</translation>
 <translation id="8410695015584479363">Track prices</translation>
 <translation id="8413126021676339697">Show full history</translation>
-<translation id="8425213833346101688">Change</translation>
 <translation id="8427875596167638501">Preview tab is half-opened</translation>
 <translation id="8428213095426709021">Settings</translation>
 <translation id="8438566539970814960">Make searches and browsing better</translation>
@@ -1121,7 +1115,7 @@
 <translation id="8662811608048051533">Signs you out of most sites.</translation>
 <translation id="8664979001105139458">File name already exists</translation>
 <translation id="8683039184091909753">image</translation>
-<translation id="8687353297350450808">{N_BARS,plural, =1{Signal Strength Level: # bar}other{Signal Strength Level: # bars}}</translation>
+<translation id="8687353297350450808">{N_BARS,plural, =1{Signal strength level: # bar}other{Signal strength level: # bars}}</translation>
 <translation id="869891660844655955">Expiry date</translation>
 <translation id="8699120352855309748">Don’t offer to translate these languages</translation>
 <translation id="8712637175834984815">Got it</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Remove your Chrome activity from Digital Wellbeing</translation>
 <translation id="927968626442779827">Use lite mode on Google Chrome</translation>
 <translation id="932327136139879170">Home</translation>
-<translation id="93753284658583800">Home page changed</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Enter passphrase</translation>
 <translation id="948039501338975565">List of bookmark folders</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index bbadda4..a0f6c9a2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Para sincronizar diferentes dispositivos y personalizar tu experiencia, activa la sincronización</translation>
 <translation id="1209206284964581585">Ocultar por el momento</translation>
 <translation id="1227058898775614466">Historial de navegación</translation>
-<translation id="1229399675748764149">Hacer que esta página sea tu página principal</translation>
 <translation id="1231733316453485619">¿Quieres activar la sincronización?</translation>
 <translation id="123724288017357924">Volver a cargar página actual; ignorar contenido en caché</translation>
 <translation id="124678866338384709">Cerrar la pestaña actual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Borrar contraseña</translation>
 <translation id="1521774566618522728">Activo hoy</translation>
 <translation id="1538801903729528855">Obtén una mejor experiencia de voz en la Web</translation>
-<translation id="1543538514740974167">Accede rápidamente</translation>
 <translation id="1544826120773021464">Para administrar tu Cuenta de Google, presiona el botón "Administrar cuenta"</translation>
 <translation id="1549000191223877751">Mover a otra ventana</translation>
 <translation id="1553358976309200471">Actualizar Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sitios</translation>
 <translation id="4594952190837476234">Esta página sin conexión se creó el <ph name="CREATION_TIME" /> y es posible que sea diferente con respecto a la versión en línea.</translation>
 <translation id="4605958867780575332">Se quitó el siguiente elemento: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Guarda páginas para verlas más tarde y establece un recordatorio.</translation>
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar contraseña</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 contraseña hackeada}other{# contraseñas hackeadas}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Se restableció <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7030675613184250187">Puedes guardar páginas en tu lista de lectura para volver a ellas más tarde y leerlas sin conexión</translation>
-<translation id="703523980599857277">Cambiar la página principal</translation>
 <translation id="7054588988317389591">¿Deseas obtener la descripción de las imágenes?</translation>
 <translation id="7055152154916055070">Se bloqueó el redireccionamiento:</translation>
 <translation id="7063006564040364415">No se pudo establecer conexión con el servidor de sincronización.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome está actualizado</translation>
 <translation id="7106762743910369165">Tu organización administra el navegador.</translation>
 <translation id="7121362699166175603">Borra el historial y las sugerencias de autocompletado en la barra de direcciones. Es posible que tu cuenta de Google tenga otros formularios del historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Mira tus historias recientes y sitios populares cuando presionas el botón de inicio</translation>
 <translation id="7138678301420049075">Otros</translation>
 <translation id="7146622961999026732">Estos sitios y apps parecen importantes para ti:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Cargar página original<ph name="END_LINK" /> de <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Elige <ph name="APP_NAME" />.\n2. Presiona "Siempre".</translation>
 <translation id="8410695015584479363">Seguimiento de precios</translation>
 <translation id="8413126021676339697">Mostrar historial completo</translation>
-<translation id="8425213833346101688">Cambiar</translation>
 <translation id="8427875596167638501">La pestaña de vista previa está abierta a la mitad</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8438566539970814960">Mejorar las búsquedas y la navegación</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Quita tu actividad en Chrome de Bienestar digital</translation>
 <translation id="927968626442779827">Usa el modo lite en Google Chrome</translation>
 <translation id="932327136139879170">Página principal</translation>
-<translation id="93753284658583800">Se cambió la página principal</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ingresar frase de contraseña</translation>
 <translation id="948039501338975565">Lista de carpetas de favoritos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 1bbd9ac6..549be57f3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Activa la sincronización para sincronizar y personalizar todos tus dispositivos</translation>
 <translation id="1209206284964581585">Ocultar por ahora</translation>
 <translation id="1227058898775614466">Historial de navegación</translation>
-<translation id="1229399675748764149">Establecer esta página como principal</translation>
 <translation id="1231733316453485619">¿Activar sincronización?</translation>
 <translation id="123724288017357924">Vuelve a cargar esta página sin contenido en caché</translation>
 <translation id="124678866338384709">Cierra la pestaña actual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Eliminar contraseña</translation>
 <translation id="1521774566618522728">Activo hoy</translation>
 <translation id="1538801903729528855">Consigue una mejor experiencia por voz en la Web</translation>
-<translation id="1543538514740974167">Accede a esta página más rápido</translation>
 <translation id="1544826120773021464">Para gestionar tu cuenta de Google, toca el botón Gestionar cuenta</translation>
 <translation id="1549000191223877751">Mover a otra ventana</translation>
 <translation id="1553358976309200471">Actualizar Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sitios web</translation>
 <translation id="4594952190837476234">Esta página sin conexión se creó el <ph name="CREATION_TIME" /> y puede ser distinta de la versión online.</translation>
 <translation id="4605958867780575332">Elemento retirado: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Guarda páginas para después y recibe un recordatorio</translation>
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar contraseña</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 contraseña vulnerada}other{# contraseñas vulneradas}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Se ha restaurado <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7030675613184250187">Puedes guardar páginas en tu lista de lectura para volver a encontrarlas o leerlas sin conexión</translation>
-<translation id="703523980599857277">Cambiar página principal</translation>
 <translation id="7054588988317389591">¿Generar descripciones de imágenes?</translation>
 <translation id="7055152154916055070">Redirección bloqueada:</translation>
 <translation id="7063006564040364415">No se ha podido conectar con el servidor de sincronización.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome está actualizado</translation>
 <translation id="7106762743910369165">Tu organización es la encargada de gestionar tu navegador</translation>
 <translation id="7121362699166175603">Borra el historial y los autocompletados de la barra de direcciones. Es posible que tu cuenta de Google tenga otros tipos de historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Accede a tus sitios web favoritos y a tus historias recientes al tocar el botón de página principal</translation>
 <translation id="7138678301420049075">Otro</translation>
 <translation id="7146622961999026732">Parece que estos sitios y estas aplicaciones son importantes para ti:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Cargar página original<ph name="END_LINK" /> de <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Elige <ph name="APP_NAME" />\n2. Toca "Siempre"</translation>
 <translation id="8410695015584479363">Seguir precios</translation>
 <translation id="8413126021676339697">Mostrar historial completo</translation>
-<translation id="8425213833346101688">Cambiar</translation>
 <translation id="8427875596167638501">La pestaña de vista previa está medio abierta</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8438566539970814960">Mejorar las búsquedas y la navegación</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Eliminar tu actividad de Chrome de Bienestar digital</translation>
 <translation id="927968626442779827">Usa el modo básico en Google Chrome</translation>
 <translation id="932327136139879170">Página principal</translation>
-<translation id="93753284658583800">Página principal cambiada</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Introducir frase de contraseña</translation>
 <translation id="948039501338975565">Lista de carpetas de marcadores</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index 63a8a90..5170f24 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Seadmete vahel sünkroonimiseks ja isikupärastamiseks lülitage sünkroonimine sisse</translation>
 <translation id="1209206284964581585">Peida praeguseks</translation>
 <translation id="1227058898775614466">Navigeerimise ajalugu</translation>
-<translation id="1229399675748764149">Muutke see leht oma avaleheks</translation>
 <translation id="1231733316453485619">Kas lülitada sünkroonimine sisse?</translation>
 <translation id="123724288017357924">Praeguse lehe uuesti laadimine, eirates vahemälus olevat sisu</translation>
 <translation id="124678866338384709">Aktiivse vahelehe sulgemine</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Kustuta parool</translation>
 <translation id="1521774566618522728">Aktiivne täna</translation>
 <translation id="1538801903729528855">Parem häälotsingu kasutuskogemus veebis</translation>
-<translation id="1543538514740974167">Jõudke siia kiiremini</translation>
 <translation id="1544826120773021464">Oma Google'i konto haldamiseks puudutage nuppu „Konto haldamine”</translation>
 <translation id="1549000191223877751">Teisalda teise aknasse</translation>
 <translation id="1553358976309200471">Värskenda Chrome'i</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Saidid</translation>
 <translation id="4594952190837476234">Võrguühenduseta leht loodi <ph name="CREATION_TIME" /> ja see võib veebiversioonist erineda.</translation>
 <translation id="4605958867780575332">Üksus on eemaldatud: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Salvestage lehed hiljem kasutamiseks ja laske saata meeldetuletus</translation>
 <translation id="4616150815774728855">Ava <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Kasuta parooli</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 parool on ohus}other{# parooli on ohus}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Taastati <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Paroolid</translation>
 <translation id="7030675613184250187">Saate oma lehed salvestada lugemisloendisse, et need hiljem leida või neid võrguühenduseta lugeda</translation>
-<translation id="703523980599857277">Avalehe muutmine</translation>
 <translation id="7054588988317389591">Kas saada piltide kirjeldusi?</translation>
 <translation id="7055152154916055070">Ümbersuunamine blokeeriti:</translation>
 <translation id="7063006564040364415">Sünkroonimisserveriga ei saanud ühendust.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome on ajakohane</translation>
 <translation id="7106762743910369165">Teie brauserit haldab teie organisatsioon</translation>
 <translation id="7121362699166175603">Kustutab aadressiribalt ajaloo ja automaatse täitmise andmed. Aadressil <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu.</translation>
-<translation id="7128355412245153445">Näete avalehe nuppu puudutades oma sageli külastatud saite ja hiljutisi lugusid</translation>
 <translation id="7138678301420049075">Muu</translation>
 <translation id="7146622961999026732">Näib, et need saidid ja rakendused on teile olulised:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Laadi originaalleht<ph name="END_LINK" /> domeenilt <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Valige <ph name="APP_NAME" />\n2. Puudutage valikut „Alati”</translation>
 <translation id="8410695015584479363">Jälgi hindu</translation>
 <translation id="8413126021676339697">Kuva kogu ajalugu</translation>
-<translation id="8425213833346101688">Muuda</translation>
 <translation id="8427875596167638501">Eelvaate vaheleht on pooleldi avatud</translation>
 <translation id="8428213095426709021">Seaded</translation>
 <translation id="8438566539970814960">Otsingute ja sirvimise paremaks muutmine</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome'i tegevuste eemaldamine teenusest Digitaalne heaolu</translation>
 <translation id="927968626442779827">Kasutage Google Chrome'is lihtsustatud režiimi</translation>
 <translation id="932327136139879170">Kodu</translation>
-<translation id="93753284658583800">Avalehte muudeti</translation>
 <translation id="938850635132480979">Viga: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Sisesta parool</translation>
 <translation id="948039501338975565">Järjehoidjakaustade loend</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index 5691b745..f97e9c9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Gailu guztiak sinkronizatu eta pertsonalizatzeko, aktibatu sinkronizazioa</translation>
 <translation id="1209206284964581585">Ezkutatu</translation>
 <translation id="1227058898775614466">Nabigazio-historia</translation>
-<translation id="1229399675748764149">Ezarri orri hau orri nagusi gisa</translation>
 <translation id="1231733316453485619">Sinkronizazioa aktibatu nahi duzu?</translation>
 <translation id="123724288017357924">Kargatu orria, cacheko edukiari ez ikusi eginda</translation>
 <translation id="124678866338384709">Itxi uneko fitxa</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Ezabatu pasahitza</translation>
 <translation id="1521774566618522728">Aktibo gaur</translation>
 <translation id="1538801903729528855">Lortu ahots-esperientzia hobea sarean</translation>
-<translation id="1543538514740974167">Iritsi hona azkarrago</translation>
 <translation id="1544826120773021464">Google-ko kontua kudeatzeko, sakatu "Kudeatu kontua" botoia</translation>
 <translation id="1549000191223877751">Eraman beste leiho batera</translation>
 <translation id="1553358976309200471">Eguneratu Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Webguneak</translation>
 <translation id="4594952190837476234">Konexiorik gabe erabiltzeko orri hau <ph name="CREATION_TIME" /> datan sortu zen. Ondorioz, baliteke sareko bertsioarekin bat ez etortzea.</translation>
 <translation id="4605958867780575332">Kendu da elementua: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Gorde orriak gerorako eta jaso abisu bat</translation>
 <translation id="4616150815774728855">Ireki <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Erabili pasahitza</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 pasahitz dago arriskuan}other{# pasahitz daude arriskuan}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Leheneratu da <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Pasahitzak</translation>
 <translation id="7030675613184250187">Orriak irakurketa-zerrendan gorde ditzakezu, hurrengo batean erraz aurkitzeko edo konexiorik ez duzunean irakurtzeko</translation>
-<translation id="703523980599857277">Aldatu orri nagusia</translation>
 <translation id="7054588988317389591">Irudi-deskribapenak lortu nahi dituzu?</translation>
 <translation id="7055152154916055070">Birbideratze hau blokeatu da:</translation>
 <translation id="7063006564040364415">Ezin izan da sinkronizazio-zerbitzarira konektatu</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Eguneratuta dago Chrome</translation>
 <translation id="7106762743910369165">Zure erakundeak kudeatzen du arakatzailea</translation>
 <translation id="7121362699166175603">Helbide-barrako historia eta osatze automatikoak garbitzen ditu. Google-ko kontuko historia arakatzeko beste modu batzuk aurki zenitzake <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webgunean.</translation>
-<translation id="7128355412245153445">Ikusi webgune nagusiak eta duela gutxiko istorioak Hasiera botoia sakatzen duzunean</translation>
 <translation id="7138678301420049075">Beste bat</translation>
 <translation id="7146622961999026732">Webgune eta aplikazio hauek garrantzitsuak dira zuretzat:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Kargatu jatorrizko orria<ph name="END_LINK" /> <ph name="DOMAIN_NAME" /> domeinutik</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Aukeratu <ph name="APP_NAME" />.\n2. Sakatu "Beti".</translation>
 <translation id="8410695015584479363">Egin prezioen jarraipena</translation>
 <translation id="8413126021676339697">Erakutsi historia osoa</translation>
-<translation id="8425213833346101688">Aldatu</translation>
 <translation id="8427875596167638501">Aurrebista-fitxa erdiirekita dago</translation>
 <translation id="8428213095426709021">Ezarpenak</translation>
 <translation id="8438566539970814960">Hobetu bilaketak eta arakatze-jarduerak</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Kendu Chrome-ko jarduerak Ongizate digitala programatik</translation>
 <translation id="927968626442779827">Erabili oinarrizko modua Google Chrome-n</translation>
 <translation id="932327136139879170">Hasiera</translation>
-<translation id="93753284658583800">Aldatu da orri nagusia</translation>
 <translation id="938850635132480979">Errorea: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Idatzi pasaesaldia</translation>
 <translation id="948039501338975565">Laster-marken karpeten zerrenda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index 4b82ee2..a39bbb1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">برای همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها، همگام‌سازی را روشن کنید</translation>
 <translation id="1209206284964581585">فعلاً پنهان شود</translation>
 <translation id="1227058898775614466">سابقه پیمایش</translation>
-<translation id="1229399675748764149">تنظیم این صفحه به‌عنوان صفحه اصلی</translation>
 <translation id="1231733316453485619">همگام‌سازی روشن شود؟</translation>
 <translation id="123724288017357924">تازه‌سازی صفحه اصلی با نادیده گرفتن محتوای حافظه پنهان</translation>
 <translation id="124678866338384709">بستن برگه کنونی</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">حذف گذرواژه</translation>
 <translation id="1521774566618522728">امروز فعال بود</translation>
 <translation id="1538801903729528855">تجربه گفتاری بهتری در وب داشته باشید</translation>
-<translation id="1543538514740974167">دسترسی سریع‌تر به‌اینجا</translation>
 <translation id="1544826120773021464">‏برای مدیریت تنظیمات حساب Google، روی دکمه «مدیریت حساب» ضربه بزنید</translation>
 <translation id="1549000191223877751">انتقال به پنجره دیگر</translation>
 <translation id="1553358976309200471">‏به‌روزرسانی Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">سایت‌ها</translation>
 <translation id="4594952190837476234">این صفحه آفلاین مربوط به تاریخ <ph name="CREATION_TIME" /> است و ممکن است با نسخه آنلاین متفاوت باشد.</translation>
 <translation id="4605958867780575332">مورد حذف شد: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ذخیره کردن صفحه‌ها برای خواندن در فرصتی دیگر و دریافت یادآوری</translation>
 <translation id="4616150815774728855">باز کردن <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استفاده از گذرواژه</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{۱ گذرواژه لورفته}one{# گذرواژه لورفته}other{# گذرواژه لورفته}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">تاریخ بازیابی <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">گذرواژه‌ها</translation>
 <translation id="7030675613184250187">می‌توانید صفحات را در فهرست خواندن ذخیره کنید تا دوباره آن‌ها را پیدا کنید یا درحالت آفلاین آن‌ها را بخوانید</translation>
-<translation id="703523980599857277">تغییر صفحه اصلی</translation>
 <translation id="7054588988317389591">توضیحات تصویر دریافت شود؟</translation>
 <translation id="7055152154916055070">هدایت کردن مسدود شده است:</translation>
 <translation id="7063006564040364415">اتصال به سرور همگام‌سازی ممکن نیست.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">‏Chrome به‌روز است</translation>
 <translation id="7106762743910369165">سازمانتان مرورگر را مدیریت می‌کند</translation>
 <translation id="7121362699166175603">‏سابقه و تکمیل‌های خودکار را در نوار نشانی پاک می‌کند. ممکن است حساب Google شما اشکال دیگری از سابقه مرور در <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> داشته باشد.</translation>
-<translation id="7128355412245153445">هرزمان روی دکمه صفحه اصلی ضربه بزنید، سایت‌های برتر و داستان‌های اخیر خود را می‌بینید</translation>
 <translation id="7138678301420049075">دیگر</translation>
 <translation id="7146622961999026732">به‌نظر می‌رسد این سایت‌ها و برنامه‌ها برای شما مهم هستند:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />بار کردن صفحه اصلی<ph name="END_LINK" /> از <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">‏۱. ‫<ph name="APP_NAME" /> را انتخاب کنید\n۲. روی «همیشه» ضربه بزنید</translation>
 <translation id="8410695015584479363">پیگیری قیمت</translation>
 <translation id="8413126021676339697">نمایش کل سابقه</translation>
-<translation id="8425213833346101688">تغییر</translation>
 <translation id="8427875596167638501">برگه پیش‌نمایش نیمه‌باز است</translation>
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8438566539970814960">بهبود جستجوها و مرور</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">‏فعالیت Chrome شما از «آسایش دیجیتالی» برداشته شود</translation>
 <translation id="927968626442779827">‏استفاده از «حالت ساده» در Google Chrome</translation>
 <translation id="932327136139879170">منزل</translation>
-<translation id="93753284658583800">صفحه اصلی تغییر کرد</translation>
 <translation id="938850635132480979">خطا: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">عبارت ورود را وارد کنید</translation>
 <translation id="948039501338975565">فهرست پوشه‌های نشانک</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index 7b38df36..47984d8a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Ota synkronointi käyttöön, niin sisältö synkronoidaan ja yksilöidään eri laitteilla</translation>
 <translation id="1209206284964581585">Piilota toistaiseksi</translation>
 <translation id="1227058898775614466">Navigointihistoria</translation>
-<translation id="1229399675748764149">Tee tästä etusivusi</translation>
 <translation id="1231733316453485619">Otetaanko synkronointi käyttöön?</translation>
 <translation id="123724288017357924">Päivitä nykyinen sivu, ohita välimuistin sisältö</translation>
 <translation id="124678866338384709">Sulje nykyinen välilehti</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Poista salasana</translation>
 <translation id="1521774566618522728">Aktiivinen tänään</translation>
 <translation id="1538801903729528855">Käytä verkkoa sujuvammin äänikomennoilla</translation>
-<translation id="1543538514740974167">Tule tänne nopeammin</translation>
 <translation id="1544826120773021464">Voit ylläpitää Google-tiliäsi napauttamalla Ylläpidä tiliä ‑painiketta</translation>
 <translation id="1549000191223877751">Siirrä toiseen ikkunaan</translation>
 <translation id="1553358976309200471">Päivitä Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sivustot</translation>
 <translation id="4594952190837476234">Offline-sivu vastaa tilannetta <ph name="CREATION_TIME" /> ja saattaa poiketa nykyisestä verkkoversiosta.</translation>
 <translation id="4605958867780575332">Kohde poistettiin: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Tallenna sivuja myöhemmin luettavaksi, saat muistutuksen</translation>
 <translation id="4616150815774728855">Avaa <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Käytä salasanaa</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 vaarantunut salasana}other{# vaarantunutta salasanaa}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> palautettu</translation>
 <translation id="7029809446516969842">Salasanat</translation>
 <translation id="7030675613184250187">Voit tallentaa sivuja lukulistallesi myöhempää käyttöä tai offline-tilassa lukemista varten</translation>
-<translation id="703523980599857277">Vaihda etusivua</translation>
 <translation id="7054588988317389591">Muodostetaanko kuvaselitykset?</translation>
 <translation id="7055152154916055070">Uudelleenohjaus estetty:</translation>
 <translation id="7063006564040364415">Synkronointipalvelimeen ei saada yhteyttä.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome on ajan tasalla</translation>
 <translation id="7106762743910369165">Organisaatiosi ylläpitää selainta</translation>
 <translation id="7121362699166175603">Tyhjentää historian ja osoitekentän automaattiset täydennykset. Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Näet suosituimmat sivustosi ja tuoreet jutut napauttaessasi aloitusnäyttöpainiketta</translation>
 <translation id="7138678301420049075">Muu</translation>
 <translation id="7146622961999026732">Nämä sivustot ja sovellukset vaikuttavat olevan tärkeitä sinulle:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Lataa alkuperäinen sivu<ph name="END_LINK" /> osoitteesta <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Valitse <ph name="APP_NAME" />\n2. Valitse Aina</translation>
 <translation id="8410695015584479363">Seuraa hintoja</translation>
 <translation id="8413126021676339697">Näytä koko selaushistoria</translation>
-<translation id="8425213833346101688">Vaihda</translation>
 <translation id="8427875596167638501">Esikatseluvälilehti on puoliksi auki</translation>
 <translation id="8428213095426709021">Asetukset</translation>
 <translation id="8438566539970814960">Paranna hakuja ja selausta</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Poista Chrome-toimintasi Digitaalisesta hyvinvoinnista</translation>
 <translation id="927968626442779827">Käytä Yksinkertaistettua tilaa Google Chromessa</translation>
 <translation id="932327136139879170">Etusivu</translation>
-<translation id="93753284658583800">Etusivu muutettu</translation>
 <translation id="938850635132480979">(Virhe: <ph name="ERROR_CODE" />)</translation>
 <translation id="939598580284253335">Anna tunnuslause</translation>
 <translation id="948039501338975565">Kirjanmerkkikansioiden lista</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index 6aa0b318..d77291f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Para mag-sync at mag-personalize sa mga device, i-on ang pag-sync</translation>
 <translation id="1209206284964581585">Itago sa ngayon</translation>
 <translation id="1227058898775614466">History ng pag-navigate</translation>
-<translation id="1229399675748764149">Gawing homepage mo ang page na ito</translation>
 <translation id="1231733316453485619">I-on ang pag-sync?</translation>
 <translation id="123724288017357924">I-reload ang page, balewalain ang cached content</translation>
 <translation id="124678866338384709">Isara ang kasalukuyang tab</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">I-delete ang password</translation>
 <translation id="1521774566618522728">Aktibo ngayong araw</translation>
 <translation id="1538801903729528855">Makakuha ng mas magandang karanasan sa boses sa web</translation>
-<translation id="1543538514740974167">Mas mabilis na makapunta rito</translation>
 <translation id="1544826120773021464">Para pamahalaan ang iyong Google account, i-tap ang button na "Pamahalaan ang account"</translation>
 <translation id="1549000191223877751">Lumipat sa ibang window</translation>
 <translation id="1553358976309200471">I-update ang Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Mga Site</translation>
 <translation id="4594952190837476234">Naka-offline ang page na ito mula noong <ph name="CREATION_TIME" /> at maaaring iba ito sa online na bersyon.</translation>
 <translation id="4605958867780575332">Naalis na item: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">I-save ang mga page para sa ibang pagkakataon at makatanggap ng paalala</translation>
 <translation id="4616150815774728855">Buksan ang <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gamitin ang password</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 nakompromisong password}one{# nakompromisong password}other{# na nakompromisong password}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Na-restore noong <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Mga Password</translation>
 <translation id="7030675613184250187">Puwede kang mag-save ng mga page sa iyong listahan ng babasahin para mahanap ulit o mabasa nang offline ang mga iyon</translation>
-<translation id="703523980599857277">Baguhin ang homepage</translation>
 <translation id="7054588988317389591">Makakuha ng mga paglalarawan ng larawan?</translation>
 <translation id="7055152154916055070">Na-block ang pag-redirect:</translation>
 <translation id="7063006564040364415">Hindi makakonekta sa server ng pag-sync.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Updated ang Chrome</translation>
 <translation id="7106762743910369165">Pinapamahalaan ng iyong organisasyon ang browser mo</translation>
 <translation id="7121362699166175603">Kini-clear ang history at mga autocompletion sa address bar. Maaaring may iba pang anyo ng history ng pag-browse ang iyong Google Account sa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Makita ang iyong mga nangungunang site at kamakailang kuwento sa tuwing ita-tap mo ang button ng Home</translation>
 <translation id="7138678301420049075">Iba pa</translation>
 <translation id="7146622961999026732">Mukhang mahalaga sa iyo ang mga site at app na ito:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />I-load ang orihinal na page<ph name="END_LINK" /> mula sa <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Piliin ang <ph name="APP_NAME" />\n2. I-tap ang “Palagi”</translation>
 <translation id="8410695015584479363">I-track ang mga presyo</translation>
 <translation id="8413126021676339697">Ipakita ang buong history</translation>
-<translation id="8425213833346101688">Baguhin</translation>
 <translation id="8427875596167638501">Nakabukas nang kalahati ang tab na preview</translation>
 <translation id="8428213095426709021">Mga Setting</translation>
 <translation id="8438566539970814960">Mas pahusayin ang mga paghahanap at pag-browse</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Alisin sa Digital Wellness ang iyong aktibidad sa Chrome</translation>
 <translation id="927968626442779827">Gamitin ang Lite mode sa Google Chrome</translation>
 <translation id="932327136139879170">Home</translation>
-<translation id="93753284658583800">Binago ang homepage</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ilagay ang passphrase</translation>
 <translation id="948039501338975565">Listahan ng mga folder ng bookmark</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index bf090259..2f192ee 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Pour profiter de la synchronisation et d'une expérience personnalisée sur tous vos appareils, activez la synchronisation</translation>
 <translation id="1209206284964581585">Masquer pour l'instant</translation>
 <translation id="1227058898775614466">Historique de navigation</translation>
-<translation id="1229399675748764149">Faire de cette page votre page d'accueil</translation>
 <translation id="1231733316453485619">Activer la synchronisation?</translation>
 <translation id="123724288017357924">Actualiser la page, ignorer le contenu mis en cache</translation>
 <translation id="124678866338384709">Fermer l'onglet actuel</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Supprimer le mot de passe</translation>
 <translation id="1521774566618522728">Actif aujourd'hui</translation>
 <translation id="1538801903729528855">Une meilleure expérience vocale sur le Web</translation>
-<translation id="1543538514740974167">Arrivez ici plus rapidement</translation>
 <translation id="1544826120773021464">Pour gérer votre compte Google, touchez le bouton « Gérer le compte »</translation>
 <translation id="1549000191223877751">Déplacer vers autre fenêtre</translation>
 <translation id="1553358976309200471">Mettre à jour Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Cette page hors connexion a été créée le <ph name="CREATION_TIME" /> et peut différer de la version en ligne.</translation>
 <translation id="4605958867780575332">Élément supprimé : <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Enregistrer des pages pour plus tard et recevoir un rappel</translation>
 <translation id="4616150815774728855">Ouvrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utiliser le mot de passe</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 mot de passe compromis}one{# mot de passe compromis}other{# mots de passe compromis}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Élément restauré : <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Mots de passe</translation>
 <translation id="7030675613184250187">Vous pouvez enregistrer des pages dans votre liste de lecture pour les retrouver plus tard ou pour les lire hors ligne</translation>
-<translation id="703523980599857277">Modifier la page d'accueil</translation>
 <translation id="7054588988317389591">Obtenir les descriptions d'images?</translation>
 <translation id="7055152154916055070">Redirection bloquée :</translation>
 <translation id="7063006564040364415">Échec de connexion au serveur de synchronisation.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome est à jour</translation>
 <translation id="7106762743910369165">Votre navigateur est géré par votre organisation</translation>
 <translation id="7121362699166175603">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse. D'autres formes d'historique de navigation peuvent exister sur votre compte Google à l'adresse <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Consultez vos sites les plus fréquentés et vos histoires récentes lorsque vous appuyez sur la touche d'accueil</translation>
 <translation id="7138678301420049075">Autre</translation>
 <translation id="7146622961999026732">Ces applications et ces sites semblent importants pour vous :</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Charger la page d'origine<ph name="END_LINK" /> à partir de <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Sélectionnez <ph name="APP_NAME" />\n2. Touchez « Toujours »</translation>
 <translation id="8410695015584479363">Suivre les prix</translation>
 <translation id="8413126021676339697">Afficher l'historique complet</translation>
-<translation id="8425213833346101688">Modifier</translation>
 <translation id="8427875596167638501">L'onglet d'aperçu est ouvert à moitié</translation>
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8438566539970814960">Amélioration des recherches et de la navigation</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Supprimer votre activité Chrome de Bien-être numérique</translation>
 <translation id="927968626442779827">Utilisez le mode simplifié dans Google Chrome</translation>
 <translation id="932327136139879170">Accueil</translation>
-<translation id="93753284658583800">La page d'accueil a été modifiée</translation>
 <translation id="938850635132480979">Erreur : <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Entrer la phrase de passe</translation>
 <translation id="948039501338975565">Liste des dossiers de favoris</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 745def1..9957aaf 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Activez la synchronisation pour accéder à vos données et les personnaliser sur tous vos appareils</translation>
 <translation id="1209206284964581585">Masquer pour le moment</translation>
 <translation id="1227058898775614466">Historique de navigation</translation>
-<translation id="1229399675748764149">Définir cette page comme page d'accueil</translation>
 <translation id="1231733316453485619">Activer la synchronisation ?</translation>
 <translation id="123724288017357924">Actualiser page active et ignorer contenu en cache</translation>
 <translation id="124678866338384709">Fermer l'onglet actuel</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Supprimer le mot de passe</translation>
 <translation id="1521774566618522728">Actif aujourd'hui</translation>
 <translation id="1538801903729528855">Une meilleure expérience vocale sur le Web</translation>
-<translation id="1543538514740974167">Accédez plus rapidement à cette page</translation>
 <translation id="1544826120773021464">Pour gérer votre compte Google, appuyez sur le bouton "Gérer le compte"</translation>
 <translation id="1549000191223877751">Déplacer vers autre fenêtre</translation>
 <translation id="1553358976309200471">Mettre à jour Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Cette page hors connexion date du <ph name="CREATION_TIME" /> et peut différer de la version en ligne.</translation>
 <translation id="4605958867780575332">Élément supprimé : <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Enregistrer les pages pour plus tard et recevoir un rappel</translation>
 <translation id="4616150815774728855">Ouvrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utiliser le mot de passe</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 mot de passe compromis}one{# mot de passe compromis}other{# mots de passe compromis}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Téléchargement <ph name="ITEM_TITLE" /> restauré</translation>
 <translation id="7029809446516969842">Mots de passe</translation>
 <translation id="7030675613184250187">Vous pouvez enregistrer des pages dans votre liste de lecture pour les retrouver facilement plus tard ou les consulter hors connexion</translation>
-<translation id="703523980599857277">Changer de page d'accueil</translation>
 <translation id="7054588988317389591">Obtenir les descriptions d'images ?</translation>
 <translation id="7055152154916055070">Redirection bloquée :</translation>
 <translation id="7063006564040364415">Impossible de se connecter au serveur de synchronisation.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome est à jour</translation>
 <translation id="7106762743910369165">Votre navigateur est géré par votre organisation</translation>
 <translation id="7121362699166175603">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse. Votre compte Google conserve peut-être d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Appuyez sur le bouton d'accueil pour retrouver les sites que vous consultez le plus et les articles que vous avez récemment lus</translation>
 <translation id="7138678301420049075">Autre</translation>
 <translation id="7146622961999026732">Ces sites et applications semblent importants pour vous :</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Charger la page originale<ph name="END_LINK" /> de <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Sélectionnez <ph name="APP_NAME" />\n2. Appuyez sur "Toujours"</translation>
 <translation id="8410695015584479363">Suivre les prix</translation>
 <translation id="8413126021676339697">Afficher l'historique complet</translation>
-<translation id="8425213833346101688">Modifier</translation>
 <translation id="8427875596167638501">L'onglet "Aperçu" est ouvert à moitié</translation>
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8438566539970814960">Améliorer les recherches et la navigation</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Supprimer votre activité Chrome de Bien-être numérique</translation>
 <translation id="927968626442779827">Utilisez le mode simplifié dans Google Chrome</translation>
 <translation id="932327136139879170">Accueil</translation>
-<translation id="93753284658583800">Page d'accueil modifiée</translation>
 <translation id="938850635132480979">Erreur <ph name="ERROR_CODE" />.</translation>
 <translation id="939598580284253335">Saisir la phrase secrète</translation>
 <translation id="948039501338975565">Liste des dossiers de favoris</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index f01931f..7a5ac1e9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Activa a sincronización para personalizar todos os teus dispositivos e sincronizalos</translation>
 <translation id="1209206284964581585">Ocultar por agora</translation>
 <translation id="1227058898775614466">Historial de navegación</translation>
-<translation id="1229399675748764149">Fai que esta sexa a túa páxina de inicio</translation>
 <translation id="1231733316453485619">Queres activar a sincronización?</translation>
 <translation id="123724288017357924">Cargar a páxina, ignorando o contido da caché</translation>
 <translation id="124678866338384709">Pechar a pestana actual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Eliminar contrasinal</translation>
 <translation id="1521774566618522728">Dispositivo activo hoxe</translation>
 <translation id="1538801903729528855">Mellora a túa experiencia de busca por voz na Web</translation>
-<translation id="1543538514740974167">Accede aquí máis rápido</translation>
 <translation id="1544826120773021464">Para xestionar a túa conta de Google, toca o botón Xestionar conta</translation>
 <translation id="1549000191223877751">Mover a outra ventá</translation>
 <translation id="1553358976309200471">Actualizar Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sitios</translation>
 <translation id="4594952190837476234">Esta páxina sen conexión creouse o <ph name="CREATION_TIME" /> e pode ser diferente da versión en liña.</translation>
 <translation id="4605958867780575332">Elemento eliminado: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Garda páxinas para acceder a elas máis tarde e recibe un recordatorio</translation>
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar contrasinal</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 contrasinal vulnerado}other{# contrasinais vulnerados}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Restaurouse <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Contrasinais</translation>
 <translation id="7030675613184250187">Podes gardar páxinas na túa lista de lecturas para atopalas de novo ou lelas sen conexión</translation>
-<translation id="703523980599857277">Cambiar páxina de inicio</translation>
 <translation id="7054588988317389591">Queres obter descricións de imaxes?</translation>
 <translation id="7055152154916055070">Bloqueouse unha redirección:</translation>
 <translation id="7063006564040364415">Non se puido conectar co servidor de sincronización.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome está actualizado</translation>
 <translation id="7106762743910369165">A túa organización xestiona o teu navegador</translation>
 <translation id="7121362699166175603">Borra o historial e os completados automáticos na barra de enderezos. É posible que a túa conta de Google teña outras formas do historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Consulta os teus sitios principais e as túas historias recentes sempre que toques o botón de inicio</translation>
 <translation id="7138678301420049075">Outros</translation>
 <translation id="7146622961999026732">Estes sitios e aplicacións parecen importantes para ti:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Cargar páxina orixinal<ph name="END_LINK" /> desde <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Escolle <ph name="APP_NAME" />\n2. Toca Sempre</translation>
 <translation id="8410695015584479363">Facer seguimento de prezos</translation>
 <translation id="8413126021676339697">Mostrar historial completo</translation>
-<translation id="8425213833346101688">Cambiar</translation>
 <translation id="8427875596167638501">A pestana de vista previa abriuse ata a metade</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8438566539970814960">Mellorar as buscas e a navegación</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Quitar a túa actividade de Chrome de Benestar dixital</translation>
 <translation id="927968626442779827">Usa o modo básico en Google Chrome</translation>
 <translation id="932327136139879170">Inicio</translation>
-<translation id="93753284658583800">A páxina de inicio cambiou</translation>
 <translation id="938850635132480979">Erro: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Introducir frase de acceso</translation>
 <translation id="948039501338975565">Lista de cartafoles de marcadores</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index 0a3ab55b..f42ba05 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">સમગ્ર ઉપકરણોમાં સિંક તથા વ્યક્તિગત કરવા માટે સિંક ચાલુ કરો</translation>
 <translation id="1209206284964581585">હમણાં માટે છુપાવો</translation>
 <translation id="1227058898775614466">નૅવિગેશન ઇતિહાસ</translation>
-<translation id="1229399675748764149">આ પેજને તમારું હોમપેજ બનાવો</translation>
 <translation id="1231733316453485619">સિંક કરવાનું ચાલુ કરીએ?</translation>
 <translation id="123724288017357924">કૅશ કરેલ કન્ટેન્ટને અવગણીને વર્તમાન પેજ ફરીથી લોડ કરો</translation>
 <translation id="124678866338384709">વર્તમાન ટૅબ બંધ કરો</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">પાસવર્ડ ડિલીટ કરો</translation>
 <translation id="1521774566618522728">આજે સક્રિય છે</translation>
 <translation id="1538801903729528855">વેબ પર બહેતર વૉઇસ અનુભવ મેળવો</translation>
-<translation id="1543538514740974167">અહીં ઝડપથી મેળવો</translation>
 <translation id="1544826120773021464">તમારું Google એકાઉન્ટ મેનેજ કરવા માટે, "એકાઉન્ટ મેનેજ કરો" બટન પર ટૅપ કરો</translation>
 <translation id="1549000191223877751">અન્ય વિંડો પર ખસેડો</translation>
 <translation id="1553358976309200471">Chrome અપડેટ કરો</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">સાઇટ</translation>
 <translation id="4594952190837476234">આ ઑફલાઇન પેજ <ph name="CREATION_TIME" /> ના રોજનું છે અને તે ઑનલાઇન વર્ઝનથી અલગ હોઈ શકે છે.</translation>
 <translation id="4605958867780575332">આઇટમ દૂર કરી: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">પેજને ભવિષ્ય માટે સાચવો અને રિમાઇન્ડર મેળવો</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ખોલો</translation>
 <translation id="4634124774493850572">પાસવર્ડનો ઉપયોગ કરો</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ચેડાં કરાયેલો 1 પાસવર્ડ}one{ચેડાં કરાયેલો # પાસવર્ડ}other{ચેડાં કરાયેલા # પાસવર્ડ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> રિસ્ટોર કર્યું</translation>
 <translation id="7029809446516969842">પાસવર્ડ</translation>
 <translation id="7030675613184250187">તમે પેજને ફરીથી શોધવા અથવા ઑફલાઇન વાંચવા માટે તેને તમારી વાંચન સૂચિમાં સાચવી શકો છો</translation>
-<translation id="703523980599857277">હોમ પેજ બદલો</translation>
 <translation id="7054588988317389591">છબીના વર્ણનો મેળવીએ?</translation>
 <translation id="7055152154916055070">રીડાયરેક્ટ કરવાનું બ્લૉક કરવામાં આવ્યું છે:</translation>
 <translation id="7063006564040364415">સમન્વયન સર્વર સાથે કનેક્ટ કરી શકાયું નથી</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome અપ ટૂ ડેટ છે</translation>
 <translation id="7106762743910369165">તમારી સંસ્થા દ્વારા તમારું બ્રાઉઝર મેનેજ કરવામાં આવે છે</translation>
 <translation id="7121362699166175603">ઍડ્રેસ બારમાં ઇતિહાસ અને ઑટોમૅટિક રીતે પૂર્ણતા સાફ કરે છે. તમારા Google એકાઉન્ટમાં <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> પર બ્રાઉઝિંગ ઇતિહાસના બીજા સ્વરૂપો હોય શકે.</translation>
-<translation id="7128355412245153445">જ્યારે પણ તમે હોમ બટન પર ટૅપ કરો ત્યારે તમારી શ્રેષ્ઠ અને એકદમ નવી સ્ટોરી જુઓ</translation>
 <translation id="7138678301420049075">અન્ય</translation>
 <translation id="7146622961999026732">આ સાઇટ અને ઍપ તમારા માટે મહત્ત્વના લાગી રહ્યાં છે:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" />માંથી <ph name="BEGIN_LINK" />ઑરિજિનલ પેજ લોડ કરો<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> પસંદ કરો\n2. “હંમેશા” પર ટૅપ કરો</translation>
 <translation id="8410695015584479363">કિંમત ટ્રૅક કરો</translation>
 <translation id="8413126021676339697">પૂર્ણ ઇતિહાસ બતાવો</translation>
-<translation id="8425213833346101688">બદલો</translation>
 <translation id="8427875596167638501">પ્રીવ્યૂ ટૅબ અડધી ઊંચાઈએ ખુલી</translation>
 <translation id="8428213095426709021">સેટિંગ્સ</translation>
 <translation id="8438566539970814960">શોધ અને બ્રાઉઝિંગ વધુ સારું બનાવો</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ડિજિટલ લાઇફસ્ટાઇલમાંથી તમારી Chromeની પ્રવૃત્તિને કેવી રીતે કાઢવી</translation>
 <translation id="927968626442779827">Google Chrome પર લાઇટ મોડનો ઉપયોગ કરો</translation>
 <translation id="932327136139879170">હોમ</translation>
-<translation id="93753284658583800">હોમપેજ બદલ્યું</translation>
 <translation id="938850635132480979">ભૂલ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">પાસફ્રેઝ દાખલ કરો</translation>
 <translation id="948039501338975565">બુકમાર્ક ફોલ્ડરોની સૂચિ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index 3e54db8..2af5fa7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">सभी डिवाइस पर सिंक करने और मनमुताबिक बनाने के लिए, 'सिंक करें' को चालू करें</translation>
 <translation id="1209206284964581585">अभी छिपाएं</translation>
 <translation id="1227058898775614466">नेविगेशन का इतिहास</translation>
-<translation id="1229399675748764149">इस पेज को अपना होम पेज बनाएं</translation>
 <translation id="1231733316453485619">क्या सिंक करना चालू करें?</translation>
 <translation id="123724288017357924">कैश सामग्री को अनदेखा कर, मौजूदा पेज फिर लोड करें</translation>
 <translation id="124678866338384709">वर्तमान टैब को बंद करें</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">पासवर्ड मिटाएं</translation>
 <translation id="1521774566618522728">आज सक्रिय है</translation>
 <translation id="1538801903729528855">वेब पर वॉइस सर्च का बेहतर अनुभव पाएं</translation>
-<translation id="1543538514740974167">यहां तेज़ी से पहुंचें</translation>
 <translation id="1544826120773021464">अपना Google खाता प्रबंधित करने के लिए, "खाता प्रबंधित करें" बटन पर टैप करें</translation>
 <translation id="1549000191223877751">अन्य विंडो में ले जाएं</translation>
 <translation id="1553358976309200471">Chrome अपडेट करें</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">यह पेज <ph name="CREATION_TIME" /> का है और यह ऑनलाइन वर्शन से अलग हो सकता है.</translation>
 <translation id="4605958867780575332">आइटम निकाला गया: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">पेजों को बाद के लिए सेव करें और रिमाइंडर पाएं</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> को खोलें</translation>
 <translation id="4634124774493850572">पासवर्ड का इस्तेमाल करें</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 पासवर्ड या तो हैक हुआ है या चोरी हुआ है}one{# पासवर्ड या तो हैक हुआ है या चोरी हुआ है}other{# पासवर्ड या तो हैक हुए हैं या चोरी हुए हैं}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> को पहले जैसा किया गया</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7030675613184250187">आप पेजों को, पढ़ने की चीज़ों की सूची में सेव कर सकते हैं, ताकि आप उन्हें आसानी से दोबारा खोज सकें या उन्हें ऑफ़लाइन पढ़ सकें</translation>
-<translation id="703523980599857277">होम पेज बदलें</translation>
 <translation id="7054588988317389591">क्या आप इमेज की जानकारी पाना चाहते हैं?</translation>
 <translation id="7055152154916055070">रीडायरेक्ट ब्लॉक किया गया:</translation>
 <translation id="7063006564040364415">समन्‍वयन सर्वर से कनेक्‍ट नहीं किया जा सका.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome अप-टू-डेट है</translation>
 <translation id="7106762743910369165">आपका संगठन आपके ब्राउज़र को प्रबंधित करता है</translation>
 <translation id="7121362699166175603">पता बार मेंअपने-आपपूर्णता और इतिहास को हटाता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकतेे हैं.</translation>
-<translation id="7128355412245153445">होम बटन पर टैप करके, अपनी पसंदीदा साइटें और हाल ही की खबरें देखें</translation>
 <translation id="7138678301420049075">अन्य</translation>
 <translation id="7146622961999026732">शायद ये साइटें और ऐप्लिकेशन आपके लिए अहम हैं:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> से <ph name="BEGIN_LINK" />मूल पेज लोड करें<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> चुनें\n2. “हमेशा” पर टैप करें</translation>
 <translation id="8410695015584479363">कीमतें ट्रैक करें</translation>
 <translation id="8413126021676339697">पूरा इतिहास दिखाएं</translation>
-<translation id="8425213833346101688">बदलें</translation>
 <translation id="8427875596167638501">'झलक' टैब आधी स्क्रीन में खुला हुआ है</translation>
 <translation id="8428213095426709021">सेटिंग</translation>
 <translation id="8438566539970814960">खोजों और ब्राउज़िंग को बेहतर बनाएं</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">'डिजिटल वेलबीइंग' से अपनी Chrome गतिविधि हटाएं</translation>
 <translation id="927968626442779827">Google Chrome पर लाइट मोड का इस्तेमाल करें</translation>
 <translation id="932327136139879170">होम बटन</translation>
-<translation id="93753284658583800">होम पेज बदल गया</translation>
 <translation id="938850635132480979">गड़बड़ी: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">'पासफ़्रेज़' दर्ज करें</translation>
 <translation id="948039501338975565">बुकमार्क फ़ोल्डर वाली सूची</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index e526044..2a4b7c6f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Da biste sinkronizirali i prilagodili više uređaja, uključite sinkronizaciju</translation>
 <translation id="1209206284964581585">Sakrij za sad</translation>
 <translation id="1227058898775614466">Povijest navigacije</translation>
-<translation id="1229399675748764149">Postavite ovu stranicu kao početnu stranicu</translation>
 <translation id="1231733316453485619">Želite li uključiti sinkronizaciju?</translation>
 <translation id="123724288017357924">Ponovno učitavanje trenutačne stranice uz zanemarivanje sadržaja iz predmemorije</translation>
 <translation id="124678866338384709">Zatvaranje trenutačne kartice</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Izbriši zaporku</translation>
 <translation id="1521774566618522728">Aktivan danas</translation>
 <translation id="1538801903729528855">Ostvarite bolji glasovni doživljaj na webu</translation>
-<translation id="1543538514740974167">Brže otvaranje ove stranice</translation>
 <translation id="1544826120773021464">Da biste upravljali svojim Google računom, dodirnite gumb "Upravljanje računom"</translation>
 <translation id="1549000191223877751">Premjesti u drugi prozor</translation>
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
@@ -497,7 +495,6 @@
 <translation id="4587589328781138893">Web-lokacije</translation>
 <translation id="4594952190837476234">Ova offline stranica nastala je <ph name="CREATION_TIME" /> i možda se razlikuje od online verzije.</translation>
 <translation id="4605958867780575332">Stavka je uklonjena: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Spremite stranice za kasnije i postavite podsjetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Upotrijebi zaporku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Jedna ugrožena zaporka}one{# ugrožena zaporka}few{# ugrožene zaporke}other{# ugroženih zaporki}}</translation>
@@ -876,7 +873,6 @@
 <translation id="7027549951530753705">Vraćeno: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Zaporke</translation>
 <translation id="7030675613184250187">Stranice možete spremati na popis za čitanje da biste ih kasnije pronašli ili čitali izvanmrežno</translation>
-<translation id="703523980599857277">Promijeni početnu stranicu</translation>
 <translation id="7054588988317389591">Primati opise slike?</translation>
 <translation id="7055152154916055070">Preusmjeravanje je blokirano:</translation>
 <translation id="7063006564040364415">Nije uspjelo povezivanje s poslužiteljem za sinkronizaciju.</translation>
@@ -887,7 +883,6 @@
 <translation id="7088681679121566888">Chrome je ažuriran</translation>
 <translation id="7106762743910369165">Vašim preglednikom upravlja vaša organizacija</translation>
 <translation id="7121362699166175603">Briše povijest i automatska dovršavanja u adresnoj traci. Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Web-lokacije koje najčešće posjećujete i najnovije vijesti mogu se prikazivati svaki put kad dodirnete gumb početnog zaslona</translation>
 <translation id="7138678301420049075">Ostalo</translation>
 <translation id="7146622961999026732">Čini se da su vam ove web-lokacije i aplikacije važne:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Učitajte izvornu stranicu<ph name="END_LINK" /> s domene <ph name="DOMAIN_NAME" /></translation>
@@ -1077,7 +1072,6 @@
 <translation id="8407396331882458341">1. Odaberite <ph name="APP_NAME" />.\n2. Dodirnite opciju "Uvijek".</translation>
 <translation id="8410695015584479363">Prati cijene</translation>
 <translation id="8413126021676339697">Pokaži cijelu povijest</translation>
-<translation id="8425213833346101688">Promijeni</translation>
 <translation id="8427875596167638501">Kartica pregleda je poluotvorena</translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledavanje</translation>
@@ -1195,7 +1189,6 @@
 <translation id="926205370408745186">Uklanjanje vaše aktivnosti u Chromeu iz Digitalne ravnoteže</translation>
 <translation id="927968626442779827">Koristite Jednostavni način na Google Chromeu</translation>
 <translation id="932327136139879170">Početna stranica</translation>
-<translation id="93753284658583800">Promijenjena je početna stranica</translation>
 <translation id="938850635132480979">Pogreška: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Unesite zaporku</translation>
 <translation id="948039501338975565">Popis mapa s oznakama</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index 54bf370..97a604e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Az eszközök közötti szinkronizáláshoz és személyre szabáshoz kapcsolja be a szinkronizálást</translation>
 <translation id="1209206284964581585">Elrejtés most</translation>
 <translation id="1227058898775614466">Navigációs előzmények</translation>
-<translation id="1229399675748764149">Legyen ez az oldal a kezdőlap?</translation>
 <translation id="1231733316453485619">Bekapcsolja a szinkronizálást?</translation>
 <translation id="123724288017357924">Oldal újratöltése a gyorsítótárat figyelmen kívül hagyva</translation>
 <translation id="124678866338384709">Az aktuális lap bezárása</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Jelszó törlése</translation>
 <translation id="1521774566618522728">Ma volt aktív</translation>
 <translation id="1538801903729528855">Jobb felhasználói élmény a weben hangalapú keresésnél</translation>
-<translation id="1543538514740974167">Gyorsabban idejuthat</translation>
 <translation id="1544826120773021464">Google-fiókjának kezeléséhez koppintson a „Fiók kezelése” gombra</translation>
 <translation id="1549000191223877751">Áthelyezés másik ablakba</translation>
 <translation id="1553358976309200471">A Chrome böngésző frissítése</translation>
@@ -270,7 +268,7 @@
 <translation id="2888126860611144412">A Chrome névjegye</translation>
 <translation id="2891154217021530873">Oldal betöltésének leállítása</translation>
 <translation id="2892647708214602204">Értesítést kap, amikor a fájl elkészült</translation>
-<translation id="2893180576842394309">A Google felhasználhatja az Ön előzményeit a Keresés és más Google-szolgáltatások személyre szabására</translation>
+<translation id="2893180576842394309">A Google felhasználhatja az Ön előzményeit a Kereső és más Google-szolgáltatások személyre szabására</translation>
 <translation id="2900528713135656174">Esemény létrehozása</translation>
 <translation id="2901411048554510387">Javaslatok megjelenítése a következőhöz: <ph name="WEBSITE_TITLE" /></translation>
 <translation id="2904414404539560095">Lap megosztására szolgáló eszközök listája teljes magasságban megnyitva.</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Webhelyek</translation>
 <translation id="4594952190837476234">Az offline oldal létrehozási ideje: <ph name="CREATION_TIME" />. Az oldal eltérhet az online változattól.</translation>
 <translation id="4605958867780575332">A következő elem eltávolítva: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Elmentheti későbbre az oldalakat, és emlékeztetőt kaphat</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> megnyitása</translation>
 <translation id="4634124774493850572">Jelszó használata</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 jelszó, amelyhez illetéktelenül hozzáfértek}other{# jelszó, amelyhez illetéktelenül hozzáfértek}}</translation>
@@ -677,7 +674,7 @@
 <translation id="5776970333778123608">Nem fontos adatok</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" />/<ph name="SPACE_USED" /> használatban</translation>
 <translation id="5795872532621730126">Keresés és böngészés</translation>
-<translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására</translation>
+<translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Kereső, a hirdetések és más Google-szolgáltatások személyre szabására</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# órája}other{# órája}}</translation>
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Minden jog fenntartva.</translation>
 <translation id="5810864297166300463">Webes segítség</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Visszaállítás dátuma: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Jelszavak</translation>
 <translation id="7030675613184250187">Oldalakat menthet az olvasólistájára, hogy később újra megtalálhassa, illetve offline elolvashassa őket.</translation>
-<translation id="703523980599857277">Kezdőlap módosítása</translation>
 <translation id="7054588988317389591">Lekéri a képleírásokat?</translation>
 <translation id="7055152154916055070">Átirányítás letiltva:</translation>
 <translation id="7063006564040364415">Nem sikerült csatlakozni a szinkronizálószerverhez.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">A Chrome naprakész</translation>
 <translation id="7106762743910369165">Böngészőjét a szervezete kezeli.</translation>
 <translation id="7121362699166175603">Törli a címsávban található előzményeket és automatikus kiegészítéseket. Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webhelyen.</translation>
-<translation id="7128355412245153445">A Kezdőképernyő gombra koppintva bármikor a leggyakoribb webhelyeihez és a legfrissebb hírekhez ugorhat.</translation>
 <translation id="7138678301420049075">Egyéb</translation>
 <translation id="7146622961999026732">Úgy tűnik, ezek a webhelyek és alkalmazások fontosak Önnek:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Eredeti oldal betöltése<ph name="END_LINK" /> innen: <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Válassza ki a(z) <ph name="APP_NAME" /> alkalmazást.\n2. Koppintson a „Mindig” lehetőségre.</translation>
 <translation id="8410695015584479363">Árak nyomon követése</translation>
 <translation id="8413126021676339697">Az összes előzmény</translation>
-<translation id="8425213833346101688">Módosítás</translation>
 <translation id="8427875596167638501">Félmagasságban megnyitott előnézeti ablak</translation>
 <translation id="8428213095426709021">Beállítások</translation>
 <translation id="8438566539970814960">Keresések és böngészés javítása</translation>
@@ -1106,7 +1100,7 @@
 <translation id="8561196567344536112">1. Nyissa meg a Beállításokat.\n2. Koppintson a „Böngészőalkalmazás” lehetőségre.\n3. Válassza ki a(z) <ph name="APP_NAME" /> alkalmazást.</translation>
 <translation id="8562452229998620586">A mentett jelszavak itt jelennek meg.</translation>
 <translation id="8569404424186215731"><ph name="DATE" /> óta</translation>
-<translation id="8571213806525832805">Az elmúlt négy hétből</translation>
+<translation id="8571213806525832805">Az elmúlt 4 hétből</translation>
 <translation id="8572344201470131220">Kép vágólapra másolva</translation>
 <translation id="8583805026567836021">Fiókadatok törlése</translation>
 <translation id="8587585930972369234">Lenyomva tartás a kereséshez</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome-beli tevékenység eltávolítása a digitális jóllét funkcióból</translation>
 <translation id="927968626442779827">Használja az Egyszerűsített módot a Google Chrome-ban</translation>
 <translation id="932327136139879170">Főoldal</translation>
-<translation id="93753284658583800">Kezdőlap módosítva</translation>
 <translation id="938850635132480979">Hiba: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Összetett jelszó megadása</translation>
 <translation id="948039501338975565">Könyvjelzőmappák listája</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index 2edcb2f3..ce48920 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Սարքերը համաժամացնելու և անհատականացնելու համար միացրեք համաժամացումը</translation>
 <translation id="1209206284964581585">Առայժմ թաքցնել</translation>
 <translation id="1227058898775614466">Նավարկման պատմություն</translation>
-<translation id="1229399675748764149">Դարձրեք այս էջը գլխավոր</translation>
 <translation id="1231733316453485619">Միացնե՞լ համաժամացումը</translation>
 <translation id="123724288017357924">Վերաբեռնել ընթացիկ էջը` անտեսելով հիշապահեստի բովանդակությունը</translation>
 <translation id="124678866338384709">Փակել ընթացիկ ներդիրը</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Ջնջել գաղտնաբառը</translation>
 <translation id="1521774566618522728">Այսօր ակտիվ է եղել</translation>
 <translation id="1538801903729528855">Օգտագործեք ձայնային ներածումը համացանցում</translation>
-<translation id="1543538514740974167">Արագ հասանելիություն</translation>
 <translation id="1544826120773021464">Google հաշիվը կառավարելու համար հպեք «Կառավարել հաշիվը» կոճակին</translation>
 <translation id="1549000191223877751">Տեղափոխել այլ պատուհան</translation>
 <translation id="1553358976309200471">Թարմացնել Chrome-ը</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Կայքեր</translation>
 <translation id="4594952190837476234">Այս էջը պահվել է <ph name="CREATION_TIME" />-ին, և կարող է տարբերվել առցանց տարբերակից։</translation>
 <translation id="4605958867780575332">Տարրը հեռացվեց՝ <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Պահեք էջերը հետագայի համար և ստացեք հիշեցում</translation>
 <translation id="4616150815774728855">Բացել <ph name="WEBAPK_NAME" /> հավելվածը</translation>
 <translation id="4634124774493850572">Օգտագործել գաղտնաբառը</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 կոտրված գաղտնաբառ}one{# կոտրված գաղտնաբառ}other{# կոտրված գաղտնաբառ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Վերականգնման ամսաթիվը՝ <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Գաղտնաբառեր</translation>
 <translation id="7030675613184250187">Դուք կարող եք ձեր ընթերցանության ցանկում պահել էջեր՝ դրանք նորից գտնելու և անցանց ռեժիմում կարդալու համար։</translation>
-<translation id="703523980599857277">Փոխել գլխավոր էջը</translation>
 <translation id="7054588988317389591">Ուզո՞ւմ եք ստանալ պատկերների նկարագրություններ</translation>
 <translation id="7055152154916055070">Վերահասցեավորումն արգելափակված է՝</translation>
 <translation id="7063006564040364415">Չհաջողվեց կապակցվել համաժամացման սերվերին:</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome-ը թարմացված է</translation>
 <translation id="7106762743910369165">Ձեր դիտարկիչը կառավարվում է ձեր կազմակերպության կողմից</translation>
 <translation id="7121362699166175603">Մաքրում է պատմությունն ու ինքնալրացումները հասցեագոտում: Ձեր Google հաշվում կարող են լինել այցելությունների պատմության այլ ձևեր ևս: Դրանք կարող եք գտնել <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> էջում:</translation>
-<translation id="7128355412245153445">Ձեր թոփ կայքերն ու վերջին հոդվածները տեսնելու համար պարզապես սեղմեք Սկիզբ կոճակը</translation>
 <translation id="7138678301420049075">Այլ</translation>
 <translation id="7146622961999026732">Այս կայքերը և հավելվածները կարող են կարևոր լինել ձեզ համար՝</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Բեռնել էջի բնօրինակը<ph name="END_LINK" /> <ph name="DOMAIN_NAME" /> տիրույթից</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Ընտրեք <ph name="APP_NAME" /> հավելվածը\n2. Հպեք «Միշտ»</translation>
 <translation id="8410695015584479363">Հետևել գներին</translation>
 <translation id="8413126021676339697">Ցույց տալ ամբողջ պատմությունը</translation>
-<translation id="8425213833346101688">Փոխել</translation>
 <translation id="8427875596167638501">Նախադիտման ներդիրը կիսաբաց է</translation>
 <translation id="8428213095426709021">Կարգավորումներ</translation>
 <translation id="8438566539970814960">Լավացնել որոնումն ու էջերի դիտումը</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Հեռացրեք Chrome-ի պատմությունը Թվային բարեկեցությունից</translation>
 <translation id="927968626442779827">Փորձեք Lite ռեժիմը Google Chrome-ում</translation>
 <translation id="932327136139879170">Գլխավոր էջ</translation>
-<translation id="93753284658583800">Գլխավոր էջը փոխվեց</translation>
 <translation id="938850635132480979">Սխալ՝ <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Մուտքագրեք անցաբառը</translation>
 <translation id="948039501338975565">Էջանիշներով պանակների ցանկ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 9ae9f70..2ab3dff 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Untuk menyinkronkan dan mempersonalisasi berbagai perangkat, aktifkan sinkronisasi</translation>
 <translation id="1209206284964581585">Sembunyikan sekarang</translation>
 <translation id="1227058898775614466">Histori navigasi</translation>
-<translation id="1229399675748764149">Jadikan ini halaman beranda Anda</translation>
 <translation id="1231733316453485619">Aktifkan sinkronisasi?</translation>
 <translation id="123724288017357924">Memuat ulang halaman, mengabaikan konten dalam cache</translation>
 <translation id="124678866338384709">Menutup tab aktif</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Hapus sandi</translation>
 <translation id="1521774566618522728">Aktif hari ini</translation>
 <translation id="1538801903729528855">Dapatkan pengalaman penelusuran suara yang lebih baik di web</translation>
-<translation id="1543538514740974167">Buka halaman ini lebih cepat</translation>
 <translation id="1544826120773021464">Untuk mengelola akun Google Anda, ketuk tombol "Kelola akun"</translation>
 <translation id="1549000191223877751">Beralih ke jendela lain</translation>
 <translation id="1553358976309200471">Perbarui browser Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Situs</translation>
 <translation id="4594952190837476234">Halaman offline ini dibuat pada <ph name="CREATION_TIME" /> dan mungkin berbeda dengan versi onlinenya.</translation>
 <translation id="4605958867780575332">Item yang dihapus: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Simpan halaman untuk dilihat nanti dan dapatkan pengingat</translation>
 <translation id="4616150815774728855">Buka <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gunakan sandi</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 sandi telah dibobol}other{# sandi telah dibobol}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Memulihkan <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Sandi</translation>
 <translation id="7030675613184250187">Anda dapat menyimpan halaman ke daftar bacaan untuk menemukannya lagi atau membaca secara offline</translation>
-<translation id="703523980599857277">Ubah halaman beranda</translation>
 <translation id="7054588988317389591">Dapatkan deskripsi gambar?</translation>
 <translation id="7055152154916055070">Pengalihan diblokir:</translation>
 <translation id="7063006564040364415">Tidak dapat menyambung ke server sinkronisasi.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome sudah versi terbaru</translation>
 <translation id="7106762743910369165">Browser dikelola oleh organisasi Anda</translation>
 <translation id="7121362699166175603">Menghapus histori dan pelengkapan otomatis di kolom URL. Akun Google Anda mungkin memiliki bentuk histori penjelajahan lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Lihat situs populer dan artikel terbaru saat Anda mengetuk tombol Beranda</translation>
 <translation id="7138678301420049075">Lainnya</translation>
 <translation id="7146622961999026732">Situs dan aplikasi ini sepertinya penting untuk Anda:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Muat halaman asli<ph name="END_LINK" /> dari <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Pilih <ph name="APP_NAME" />\n2. Ketuk "Selalu"</translation>
 <translation id="8410695015584479363">Pantau harga</translation>
 <translation id="8413126021676339697">Tampilkan histori lengkap</translation>
-<translation id="8425213833346101688">Ubah</translation>
 <translation id="8427875596167638501">Tab pratinjau terbuka setengah</translation>
 <translation id="8428213095426709021">Setelan</translation>
 <translation id="8438566539970814960">Jadikan penelusuran dan penjelajahan lebih baik</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Hapus aktivitas Chrome Anda dari Kesehatan Digital</translation>
 <translation id="927968626442779827">Gunakan Mode Ringan di Google Chrome</translation>
 <translation id="932327136139879170">Beranda</translation>
-<translation id="93753284658583800">Halaman beranda diubah</translation>
 <translation id="938850635132480979">Kesalahan: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Masukkan frasa sandi</translation>
 <translation id="948039501338975565">Daftar folder bookmark</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
index 2aecb01..9db44895 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Kveiktu á samstillingu til að hafa allt samstillt og sérsniðið í tækjunum þínum</translation>
 <translation id="1209206284964581585">Fela í bili</translation>
 <translation id="1227058898775614466">Ferill</translation>
-<translation id="1229399675748764149">Gera þessa síðu að heimasíðu</translation>
 <translation id="1231733316453485619">Kveikja á samstillingu?</translation>
 <translation id="123724288017357924">Endurhlaða núverandi síðu, hunsa efni í skyndiminni</translation>
 <translation id="124678866338384709">Loka núverandi flipa</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Eyða aðgangsorði</translation>
 <translation id="1521774566618522728">Virkt í dag</translation>
 <translation id="1538801903729528855">Láttu röddina þjóna þér betur á vefnum</translation>
-<translation id="1543538514740974167">Fljótari leið hingað</translation>
 <translation id="1544826120773021464">Til að hafa umsjón með Google reikningnum þínum skaltu velja hnappinn „Stjórna reikningi“</translation>
 <translation id="1549000191223877751">Færa í annan glugga</translation>
 <translation id="1553358976309200471">Uppfæra Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Svæði</translation>
 <translation id="4594952190837476234">Þessi síða án nettengingar er frá <ph name="CREATION_TIME" /> og hún gæti verið frábrugðin útgáfunni sem er á netinu.</translation>
 <translation id="4605958867780575332">Atriði fjarlægt: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Vista síður til að skoða seinna og fá áminningu</translation>
 <translation id="4616150815774728855">Opna <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Nota aðgangsorð</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 aðgangsorð í hættu}one{# aðgangsorð í hættu}other{# aðgangsorð í hættu}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Endurheimti <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Aðgangsorð</translation>
 <translation id="7030675613184250187">Þú getur vistað síður á leslistanum til að finna þær aftur síðar eða lesa án nettengingar</translation>
-<translation id="703523980599857277">Breyta heimasíðu</translation>
 <translation id="7054588988317389591">Fá myndlýsingar?</translation>
 <translation id="7055152154916055070">Lokað á framsendingu:</translation>
 <translation id="7063006564040364415">Ekki var hægt að tengjast samstillingarþjóninum.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome er uppfærður</translation>
 <translation id="7106762743910369165">Vafranum er stjórnað af fyrirtækinu þínu</translation>
 <translation id="7121362699166175603">Hreinsar ferilinn og sjálfvirka útfyllingu í veffangastikunni. Google reikningurinn þinn kann að vera með annars konar vefskoðunarferil á <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Sjáðu vefsvæðin sem þú heimsækir oftast og nýlegar sögur þegar þú ýtir á heimahnappinn</translation>
 <translation id="7138678301420049075">Annað</translation>
 <translation id="7146622961999026732">Þessi svæði og forrit virðast vera þér mikilvæg:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Hlaða upprunalegri síðu<ph name="END_LINK" /> frá <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Veldu <ph name="APP_NAME" />\n2. Ýttu á „Alltaf“</translation>
 <translation id="8410695015584479363">Vakta verð</translation>
 <translation id="8413126021676339697">Sýna allan feril</translation>
-<translation id="8425213833346101688">Breyta</translation>
 <translation id="8427875596167638501">Forskoðunarflipinn er hálfopinn</translation>
 <translation id="8428213095426709021">Stillingar</translation>
 <translation id="8438566539970814960">Bæta leit og vafra</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Fjarlægja það sem þú gerir í Chrome úr stafrænni vellíðan</translation>
 <translation id="927968626442779827">Nota Léttútgáfu í Google Chrome</translation>
 <translation id="932327136139879170">Heim</translation>
-<translation id="93753284658583800">Heimasíðu breytt</translation>
 <translation id="938850635132480979">Villa: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Sláðu inn aðgangsorð</translation>
 <translation id="948039501338975565">Listi bókamerkjamappa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index ef23f15..fc519d07 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Attiva la sincronizzazione per sincronizzare e personalizzare tutti i dispositivi</translation>
 <translation id="1209206284964581585">Nascondi per ora</translation>
 <translation id="1227058898775614466">Cronologia di navigazione</translation>
-<translation id="1229399675748764149">Imposta questa pagina come pagina iniziale</translation>
 <translation id="1231733316453485619">Attivare la sincronizzazione?</translation>
 <translation id="123724288017357924">Ricarica pag. corr. Ignora i contenuti nella cache</translation>
 <translation id="124678866338384709">Chiudi scheda corrente</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Elimina la password</translation>
 <translation id="1521774566618522728">Attivo oggi</translation>
 <translation id="1538801903729528855">Vivi un'esperienza vocale migliore sul Web</translation>
-<translation id="1543538514740974167">Arriva qui più velocemente</translation>
 <translation id="1544826120773021464">Per gestire il tuo Account Google, tocca il pulsante "Gestisci account"</translation>
 <translation id="1549000191223877751">Passa a un'altra finestra</translation>
 <translation id="1553358976309200471">Aggiorna Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Siti</translation>
 <translation id="4594952190837476234">Questa pagina offline risale al giorno <ph name="CREATION_TIME" /> e potrebbe essere diversa dalla versione online.</translation>
 <translation id="4605958867780575332">Elemento rimosso: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Salva le pagine per un secondo momento e ricevi un promemoria</translation>
 <translation id="4616150815774728855">Apri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizza password</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 password compromessa}other{# password compromesse}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ripristinato</translation>
 <translation id="7029809446516969842">Password</translation>
 <translation id="7030675613184250187">Puoi salvare pagine nel tuo elenco di lettura per ritrovarle o leggerle offline</translation>
-<translation id="703523980599857277">Cambia pagina iniziale</translation>
 <translation id="7054588988317389591">Vuoi recuperare le descrizioni delle immagini?</translation>
 <translation id="7055152154916055070">Reindirizzamento bloccato:</translation>
 <translation id="7063006564040364415">Impossibile collegarsi al server di sincronizzazione.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome è aggiornato</translation>
 <translation id="7106762743910369165">Il tuo browser è gestito dalla tua organizzazione</translation>
 <translation id="7121362699166175603">Consente di cancellare la cronologia e i completamenti automatici nella barra degli indirizzi. Il tuo Account Google potrebbe avere altri tipi di cronologia di navigazione all'indirizzo <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Accedi ai siti che visiti più spesso e alle notizie recenti quando tocchi il pulsante Pagina iniziale</translation>
 <translation id="7138678301420049075">Altro</translation>
 <translation id="7146622961999026732">Questi siti e app sembrano importanti per te:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Carica la pagina originale<ph name="END_LINK" /> da <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Scegli <ph name="APP_NAME" />\n2. Tocca "Sempre"</translation>
 <translation id="8410695015584479363">Monitora prezzi</translation>
 <translation id="8413126021676339697">Mostra cronologia completa</translation>
-<translation id="8425213833346101688">Cambia</translation>
 <translation id="8427875596167638501">La scheda di anteprima è aperta nella parte inferiore dello schermo</translation>
 <translation id="8428213095426709021">Impostazioni</translation>
 <translation id="8438566539970814960">Migliora le ricerche e le attività di navigazione</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Rimuovi la tua attività di Chrome da Benessere digitale</translation>
 <translation id="927968626442779827">Usa la modalità Lite su Google Chrome</translation>
 <translation id="932327136139879170">Home page</translation>
-<translation id="93753284658583800">Pagina iniziale modificata</translation>
 <translation id="938850635132480979">Errore: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Inserisci passphrase</translation>
 <translation id="948039501338975565">Elenco di cartelle di preferiti</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index fded62d1..c23e4b61 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">כדי לסנכרן ולהתאים אישית את החוויה במכשירים שונים, יש להפעיל את הסנכרון</translation>
 <translation id="1209206284964581585">להסתיר בינתיים</translation>
 <translation id="1227058898775614466">היסטוריית ניווט</translation>
-<translation id="1229399675748764149">הגדרת הדף הזה כדף הבית</translation>
 <translation id="1231733316453485619">להפעיל סנכרון?</translation>
 <translation id="123724288017357924">טעינה מחדש של הדף הנוכחי, תוך התעלמות מתוכן שמאוחסן בקובץ השמור</translation>
 <translation id="124678866338384709">סגירת הכרטיסייה הנוכחית</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">מחיקת סיסמה</translation>
 <translation id="1521774566618522728">סנכרון אחרון: היום</translation>
 <translation id="1538801903729528855">חוויה קולית טובה יותר באינטרנט</translation>
-<translation id="1543538514740974167">רוצה להגיע לכאן מהר יותר?</translation>
 <translation id="1544826120773021464">‏כדי לנהל את חשבון Google, יש להקיש על הלחצן "ניהול החשבון"</translation>
 <translation id="1549000191223877751">העברה לחלון האחר</translation>
 <translation id="1553358976309200471">‏כדאי לעדכן את Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">אתרים</translation>
 <translation id="4594952190837476234">הדף האופליין הזה נוצר ב-<ph name="CREATION_TIME" /> ויכול להיות שהגרסה המקוונת שלו שונה.</translation>
 <translation id="4605958867780575332">פריטים שהוסרו: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">שמירת הדפים לקריאה במועד מאוחר יותר והגדרת תזכורת</translation>
 <translation id="4616150815774728855">פתיחה של <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">שימוש בסיסמה</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{סיסמה אחת שנחשפה}two{# סיסמאות שנחשפו}many{# סיסמאות שנחשפו}other{# סיסמאות שנחשפו}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">בוצע שחזור של <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">סיסמאות</translation>
 <translation id="7030675613184250187">אפשר לשמור דפים ברשימת הקריאה כדי למצוא אותם שוב או כדי לקרוא אותם במצב אופליין</translation>
-<translation id="703523980599857277">שינוי דף הבית</translation>
 <translation id="7054588988317389591">רוצה לקבל תיאורי תמונות?</translation>
 <translation id="7055152154916055070">הפניה אוטומטית נחסמה:</translation>
 <translation id="7063006564040364415">לא ניתן היה להתחבר אל שרת הסנכרון.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">‏Chrome מעודכן</translation>
 <translation id="7106762743910369165">הדפדפן מנוהל על ידי הארגון שלך</translation>
 <translation id="7121362699166175603">‏ניקוי ההיסטוריה וההשלמות האוטומטיות בשורת כתובת האתר. ייתכן שלחשבון Google שלך יהיו צורות אחרות של היסטוריית גלישה בכתובת <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">אתרים מובילים ומאמרים עדכניים יוצגו לאחר הקשה על לחצן דף הבית</translation>
 <translation id="7138678301420049075">אחר</translation>
 <translation id="7146622961999026732">נראה שהאתרים והאפליקציות האלה חשובים לך:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />טעינת הדף המקורי<ph name="END_LINK" /> מ-<ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">‏1. בוחרים את <ph name="APP_NAME" />.\n2. מקישים על 'תמיד'.</translation>
 <translation id="8410695015584479363">מעקב אחר מחירים</translation>
 <translation id="8413126021676339697">להצגת ההיסטוריה המלאה</translation>
-<translation id="8425213833346101688">שינוי</translation>
 <translation id="8427875596167638501">כרטיסיית התצוגה המקדימה פתוחה בחצי גובה המסך</translation>
 <translation id="8428213095426709021">הגדרות</translation>
 <translation id="8438566539970814960">שיפור החיפושים והגלישה</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">‏הסרת הפעילות שלך ב-Chrome מ'שימוש חכם בדיגיטל'.</translation>
 <translation id="927968626442779827">‏כדאי להשתמש במצב הטעינה המהירה ב-Google Chrome</translation>
 <translation id="932327136139879170">בית</translation>
-<translation id="93753284658583800">דף הבית השתנה</translation>
 <translation id="938850635132480979">שגיאה: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">הזנת ביטוי סיסמה</translation>
 <translation id="948039501338975565">רשימת תיקיות של סימניות</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index 99e2516..c4a482c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">複数のデバイスで独自の設定を同期して共有するには、同期を有効にします</translation>
 <translation id="1209206284964581585">今は表示しない</translation>
 <translation id="1227058898775614466">ナビゲーション履歴</translation>
-<translation id="1229399675748764149">このページをホームページに設定する</translation>
 <translation id="1231733316453485619">同期を有効にしますか?</translation>
 <translation id="123724288017357924">キャッシュ コンテンツを無視して現在のページを再読み込みする</translation>
 <translation id="124678866338384709">現在のタブを閉じる</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">パスワードを削除</translation>
 <translation id="1521774566618522728">最終同期: 今日</translation>
 <translation id="1538801903729528855">ウェブにおける音声操作の利便性を向上</translation>
-<translation id="1543538514740974167">このページにすばやくアクセス</translation>
 <translation id="1544826120773021464">Google アカウントを管理するには、[アカウントを管理] をタップします。</translation>
 <translation id="1549000191223877751">他のウィンドウに移動</translation>
 <translation id="1553358976309200471">Chrome を更新</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">サイト</translation>
 <translation id="4594952190837476234">このオフライン ページは <ph name="CREATION_TIME" /> 時点のものであり、オンライン版とは異なる可能性があります。</translation>
 <translation id="4605958867780575332">削除したアイテム: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ページを後で読めるように保存してリマインダーを受け取ります</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> を起動</translation>
 <translation id="4634124774493850572">パスワードを使用</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{不正使用されたパスワード: 1 件}other{不正使用されたパスワード: # 件}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> を復元しました</translation>
 <translation id="7029809446516969842">パスワード</translation>
 <translation id="7030675613184250187">リーディング リストにページを保存すると、後から簡単にアクセスして、オフラインでも読めるようになります</translation>
-<translation id="703523980599857277">ホームページを変更</translation>
 <translation id="7054588988317389591">画像の説明文を取得しますか?</translation>
 <translation id="7055152154916055070">リダイレクトがブロックされました</translation>
 <translation id="7063006564040364415">同期サーバーに接続できませんでした。</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome は最新の状態です</translation>
 <translation id="7106762743910369165">お使いのブラウザは組織によって管理されています</translation>
 <translation id="7121362699166175603">アドレスバーの履歴とオートコンプリートを削除します。お使いの Google アカウントの <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> に、他の形式の閲覧履歴が記録されている場合があります。</translation>
-<translation id="7128355412245153445">ホームボタンをタップして、よく使用するサイトや最新の記事を表示できます</translation>
 <translation id="7138678301420049075">その他</translation>
 <translation id="7146622961999026732">以下のサイトやアプリは重要な可能性があります。</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> から<ph name="BEGIN_LINK" />元のページを読み込む<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> を選択します\n2. [常時] をタップします</translation>
 <translation id="8410695015584479363">料金をチェック</translation>
 <translation id="8413126021676339697">全履歴を表示</translation>
-<translation id="8425213833346101688">変更</translation>
 <translation id="8427875596167638501">[プレビュー] タブが半分開いています</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8438566539970814960">検索とブラウジングを改善する</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome のアクティビティを Digital Wellbeing から削除</translation>
 <translation id="927968626442779827">Google Chrome のライトモードをご活用ください</translation>
 <translation id="932327136139879170">ホーム</translation>
-<translation id="93753284658583800">ホームページを変更しました</translation>
 <translation id="938850635132480979">エラー: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">パスフレーズを入力</translation>
 <translation id="948039501338975565">ブックマーク フォルダのリスト</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
index 10cc0ec..d4584f3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">თქვენი ყველა მოწყობილობის სინქრონიზაციისთვისა და პერსონალიზებისთვის ჩართეთ სინქრონიზაცია</translation>
 <translation id="1209206284964581585">ამჯერად დამალვა</translation>
 <translation id="1227058898775614466">ნავიგაციის ისტორია</translation>
-<translation id="1229399675748764149">აქციეთ ეს გვერდი მთავარ გვერდად</translation>
 <translation id="1231733316453485619">გსურთ სინქრონიზაციის ჩართვა?</translation>
 <translation id="123724288017357924">გვერდის გადატვირთვა ქეშირ. კონტენტის იგნორირებით</translation>
 <translation id="124678866338384709">მიმდინარე ჩანართის დახურვა</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">პაროლის წაშლა</translation>
 <translation id="1521774566618522728">აქტიური იყო დღეს</translation>
 <translation id="1538801903729528855">შეასრულეთ მეტი ხმის მეშვეობით ვებში</translation>
-<translation id="1543538514740974167">გადმოდით აქ უფრო სწრაფად</translation>
 <translation id="1544826120773021464">თქვენი Google ანგარიშის სამართავად შეეხეთ „ანგარიშის მართვის“ ღილაკს</translation>
 <translation id="1549000191223877751">სხვა ფანჯარაში გადატანა</translation>
 <translation id="1553358976309200471">Chrome-ის განახლება</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">საიტები</translation>
 <translation id="4594952190837476234">ეს ხაზგარეშე გვერდი თარიღდება <ph name="CREATION_TIME" />-ით და შეიძლება განსხვავდებოდეს ონლაინ-ვერსიისგან.</translation>
 <translation id="4605958867780575332">ერთეული „<ph name="ITEM_TITLE" />“ ამოიშალა</translation>
-<translation id="4614535611158687827">შეინახეთ გვერდები მოგვიანებით წასაკითხად და მიიღეთ შეხსენება</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />-ის გახსნა</translation>
 <translation id="4634124774493850572">პაროლის გამოყენება</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 გატეხილი პაროლი}other{# გატეხილი პაროლი}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">აღდგენის თარიღი: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">პაროლები</translation>
 <translation id="7030675613184250187">შეგიძლიათ შეინახოთ გვერდები თქვენს საკითხავ სიაში, რომ მოგვიანებით იპოვოთ ან ხაზგარეშე რეჟიმში წაიკითხოთ</translation>
-<translation id="703523980599857277">მთავარი გვერდის შეცვლა</translation>
 <translation id="7054588988317389591">გსურთ სურათების აღწერილობების მიღება?</translation>
 <translation id="7055152154916055070">გადამისამართება დაიბლოკა:</translation>
 <translation id="7063006564040364415">ვერ ვუკავშირდებით სინქრონიზაციის სერვერს.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome განახლებულია</translation>
 <translation id="7106762743910369165">თქვენს ბრაუზერს მართავს თქვენი ორგანიზაცია</translation>
 <translation id="7121362699166175603">მისამართთა ზოლში გაასუფთავებს ისტორიასა და ავტომატურ დასრულებებს. თქვენს Google ანგარიშში შეიძლება ინახებოდეს სხვა ტიპის დათვალიერების ისტორიაც, რომელიც ხელმისაწვდომია მისამართზე: <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">იხილეთ ყველაზე პოპულარული საიტები და ბოლოდროინდელი ამბები მთავარ ეკრანზე გადასვლის ღილაკზე ყოველი შეხებისას.</translation>
 <translation id="7138678301420049075">სხვა</translation>
 <translation id="7146622961999026732">როგორც ჩანს, თქვენთვის მნიშვნელოვანია შემდეგი აპები და საიტები:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />გვერდის ორიგინალის ჩატვირთვა<ph name="END_LINK" /> <ph name="DOMAIN_NAME" />-დან</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. აირჩიეთ <ph name="APP_NAME" />\n2. შეხებით აირჩიეთ „ყოველთვის“</translation>
 <translation id="8410695015584479363">ფასებზე თვალის დევნება</translation>
 <translation id="8413126021676339697">სრული ისტორიის ჩვენება</translation>
-<translation id="8425213833346101688">შეცვლა</translation>
 <translation id="8427875596167638501">გადახედვის ჩანართი ნახევრადგახსნილია</translation>
 <translation id="8428213095426709021">პარამეტრები</translation>
 <translation id="8438566539970814960">გააუმჯობესეთ ძიებები და ვებსაიტების დათვალიერება</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ციფრული კომფორტიდან Chrome-ში თქვენი აქტივობის ამოშლა</translation>
 <translation id="927968626442779827">გამოიყენეთ Lite რეჟიმი Google Chrome-ში</translation>
 <translation id="932327136139879170">საწყისი გვერდი</translation>
-<translation id="93753284658583800">მთავარი გვერდი შეიცვალა</translation>
 <translation id="938850635132480979">შეცდომა: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">შეიყვანეთ საიდუმლო ფრაზა</translation>
 <translation id="948039501338975565">სანიშნეების საქაღალდეების სია</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
index 6fb455aa..08b005b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Барлық құрылғыларда синхрондау және жекелендіру үшін синхрондау функциясын қосыңыз</translation>
 <translation id="1209206284964581585">Әзірге жасыру</translation>
 <translation id="1227058898775614466">Навигация тарихы</translation>
-<translation id="1229399675748764149">Бұл бетті негізгі етіңіз</translation>
 <translation id="1231733316453485619">Синхрондау қосылсын ба?</translation>
 <translation id="123724288017357924">Кэштелген мазмұнды елемей, ағымдағы бетті жаңарту</translation>
 <translation id="124678866338384709">Ағымдағы қойындыны жабу</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Құпия сөзді жою</translation>
 <translation id="1521774566618522728">Бүгін белсенді болды</translation>
 <translation id="1538801903729528855">Интернетті дауыспен тиімдірек қолданыңыз</translation>
-<translation id="1543538514740974167">Жылдам өту</translation>
 <translation id="1544826120773021464">Google есептік жазбасын басқару үшін "Есептік жазбаны басқару" түймесін түртіңіз.</translation>
 <translation id="1549000191223877751">Басқа терезеге өту</translation>
 <translation id="1553358976309200471">Chrome жаңарту</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4594952190837476234">Бұл офлайн бет <ph name="CREATION_TIME" /> күні жасалған, сондықтан онлайн нұсқасынан өзгеше болуы мүмкін.</translation>
 <translation id="4605958867780575332">Өшірілді: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Бұл беттерді кейінірек көруге сақтап, еске салғыш алыңыз.</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> қолданбасын ашу</translation>
 <translation id="4634124774493850572">Құпия сөзді пайдалану</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 құпия сөз ұрланды.}other{# құпия сөз ұрланды.}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Қалпына келтірілген <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Құпия сөздер</translation>
 <translation id="7030675613184250187">Беттерді оқу тізіміне сақтап, кейін оларды сол жерден табуыңызға не офлайн режимде оқуыңызға болады.</translation>
-<translation id="703523980599857277">Негізгі бетті өзгерту</translation>
 <translation id="7054588988317389591">Сурет сипаттамаларын аласыз ба?</translation>
 <translation id="7055152154916055070">Бағыттау функциясына тыйым салынды.</translation>
 <translation id="7063006564040364415">Синхрондау серверіне қосылу мүмкін емес.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome жаңартылған.</translation>
 <translation id="7106762743910369165">Браузеріңізді ұйым басқарады.</translation>
 <translation id="7121362699166175603">Мекенжай жолағында тарих пен автотолтыруларды өшіреді. <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> сайтында Google есептік жазбасымен шолу тарихының басқа да үлгілері болуы мүмкін.</translation>
-<translation id="7128355412245153445">Негізгі экран түймесін түрткен кезде, үздік сайттар мен соңғы жаңалықтарды көру</translation>
 <translation id="7138678301420049075">Басқа</translation>
 <translation id="7146622961999026732">Бұл сайттар мен қолданбалар маңызды болуы мүмкін:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Беттің<ph name="END_LINK" /> түпнұсқасын <ph name="DOMAIN_NAME" /> доменінен жүктеу</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> қолданбасын таңдаңыз.\n2. "Әрқашан" түймесін түртіңіз.</translation>
 <translation id="8410695015584479363">Бағаларды қадағалау</translation>
 <translation id="8413126021676339697">Толық журналды көрсету</translation>
-<translation id="8425213833346101688">Өзгерту</translation>
 <translation id="8427875596167638501">"Алдын ала қарау" қойындысы жартылай ашық.</translation>
 <translation id="8428213095426709021">Параметрлер</translation>
 <translation id="8438566539970814960">Іздеу және сайттарды шолу жұмысын жақсарту</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Digital Wellbeing функциясынан Chrome браузерін пайдалану деректерін өшіру</translation>
 <translation id="927968626442779827">Google Chrome браузерінде Lite режимін пайдаланыңыз.</translation>
 <translation id="932327136139879170">Негізгі бет</translation>
-<translation id="93753284658583800">Негізгі бет өзгертілді.</translation>
 <translation id="938850635132480979">Қате: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Құпия фразаны енгізу</translation>
 <translation id="948039501338975565">Бетбелгі қалталарының тізімі</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index a35d4a2f..1111fe40 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ដើម្បី​ធ្វើ​សមកាលកម្ម និង​កំណត់ផ្ទាល់ខ្លួន​នៅលើ​ឧបករណ៍នានា សូម​បើក​សមកាលកម្ម</translation>
 <translation id="1209206284964581585">លាក់ឥឡូវនេះ</translation>
 <translation id="1227058898775614466">ប្រវត្តិ​រុករក</translation>
-<translation id="1229399675748764149">កំណត់​ទំព័រនេះ​ជា​ទំព័រដើម​របស់អ្នក</translation>
 <translation id="1231733316453485619">បើក​សមកាលកម្ម?</translation>
 <translation id="123724288017357924">ផ្ទុកទំព័របច្ចុប្បន្នឡើងវិញ ដោយមិនអើពីនឹងមាតិកាដែលបានរក្សាទុកក្នុងឃ្លាំងផ្ទុកទិន្នន័យ</translation>
 <translation id="124678866338384709">បិទផ្ទាំងបច្ចុប្បន្ន</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">លុបពាក្យសម្ងាត់</translation>
 <translation id="1521774566618522728">ដំណើរការ​ថ្ងៃនេះ</translation>
 <translation id="1538801903729528855">ទទួលបាន​បទពិសោធន៍ប្រើប្រាស់​សំឡេង​កាន់តែប្រសើរ​នៅលើបណ្ដាញ</translation>
-<translation id="1543538514740974167">មកទីនេះបានរហ័សជាងមុន</translation>
 <translation id="1544826120773021464">ដើម្បី​គ្រប់គ្រង​គណនី Google របស់អ្នក សូមចុចប៊ូតុង "គ្រប់គ្រងគណនី"</translation>
 <translation id="1549000191223877751">ផ្លាស់ទៅផ្ទាំងវិនដូផ្សេងទៀត</translation>
 <translation id="1553358976309200471">ធ្វើបច្ចុប្បន្នភាព Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">ទំព័រ</translation>
 <translation id="4594952190837476234">ទំព័រ​សម្រាប់​ប្រើពេលគ្មានអ៊ីនធឺណិតនេះ​បង្កើតឡើងនៅថ្ងៃទី <ph name="CREATION_TIME" /> ហើយ​វាអាច​ខុស​ពី​កំណែ​សម្រាប់​ប្រើពេលមានអ៊ីនធឺណិត។</translation>
 <translation id="4605958867780575332">បានលុបធាតុ៖ <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">រក្សាទុកទំព័រ​សម្រាប់​ពេលក្រោយ និង​ទទួលការរំលឹក</translation>
 <translation id="4616150815774728855">បើក <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ប្រើពាក្យសម្ងាត់​</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ពាក្យសម្ងាត់​ដែលរង​ការលុកលុយ 1}other{ពាក្យសម្ងាត់​ដែលរង​ការលុកលុយ #}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">បានស្ដារ <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">ពាក្យសម្ងាត់</translation>
 <translation id="7030675613184250187">អ្នក​អាច​រក្សាទុក​ទំព័រ​ទៅក្នុង​បញ្ជីអាន​របស់អ្នក ដើម្បីអាច​រកមើល​ទំព័រទាំងនោះ​ម្ដងទៀត ឬ​អាន​ដោយគ្មានអ៊ីនធឺណិត​</translation>
-<translation id="703523980599857277">ប្ដូរ​ទំព័រដើម</translation>
 <translation id="7054588988317389591">យកការពណ៌នា​អំពីរូបភាពឬ?</translation>
 <translation id="7055152154916055070">​បាន​ទប់ស្កាត់​ការបញ្ជូន​បន្ត៖</translation>
 <translation id="7063006564040364415">មិនអាចភ្ជាប់ទៅម៉ាស៊ីនមេសមកម្មទេ។</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ជា​កំណែថ្មី​ហើយ</translation>
 <translation id="7106762743910369165">កម្មវិធីរុករក​តាមអ៊ីនធឺណិត​របស់អ្នក​ស្ថិតក្រោមការគ្រប់គ្រង​របស់​ស្ថាប័នអ្នក</translation>
 <translation id="7121362699166175603">សម្អាតប្រវត្តិ និងការបំពេញដោយស្វ័យប្រវត្តិនៅក្នុងរបារអាសយដ្ឋាននេះ។ គណនី Google របស់អ្នកអាចនឹងមានទម្រង់ប្រវត្តិរុករកផ្សេងទៀតនៅ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ។</translation>
-<translation id="7128355412245153445">មើលឃើញ​គេហទំព័រ​ពេញនិយម និង​អត្ថបទថ្មីៗ​របស់អ្នក រាល់ពេល​ដែលអ្នក​ចុចប៊ូតុងដើម</translation>
 <translation id="7138678301420049075">ផ្សេងទៀត</translation>
 <translation id="7146622961999026732">គេហទំព័រ និងកម្មវិធី​ទាំងនេះ​ហាក់ដូចជា​សំខាន់​ចំពោះអ្នក៖</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />ផ្ទុក​ទំព័រដើម<ph name="END_LINK" />ពី <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. ជ្រើសរើស <ph name="APP_NAME" />\n2. ចុច "ជានិច្ច"</translation>
 <translation id="8410695015584479363">តាមដាន​តម្លៃ</translation>
 <translation id="8413126021676339697">បង្ហាញប្រវត្តិពេញលេញ</translation>
-<translation id="8425213833346101688">ប្តូរ</translation>
 <translation id="8427875596167638501">ផ្ទាំងមើលសាកល្បងបានបើក​ពាក់កណ្ដាល</translation>
 <translation id="8428213095426709021">ការកំណត់</translation>
 <translation id="8438566539970814960">ធ្វើ​ឱ្យ​ការស្វែងរក និងការរុករក​ប្រសើរ​ជាងមុន</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">លុបស​កម្មភាព Chrome របស់អ្នកពី​សុខុមាលភាព​ឌីជីថល</translation>
 <translation id="927968626442779827">ប្រើមុខងារស្រាល​នៅលើ Google Chrome</translation>
 <translation id="932327136139879170">ទំព័រដើម</translation>
-<translation id="93753284658583800">បានប្ដូរ​ទំព័រដើម</translation>
 <translation id="938850635132480979">កំហុស៖ <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">បញ្ចូលឃ្លាសម្ងាត់</translation>
 <translation id="948039501338975565">បញ្ជី​ថត​ចំណាំ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index 0a26f1d..f6d8c49f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ಸಾಧನಗಳಾದ್ಯಂತ ಸಿಂಕ್ ಮಾಡಲು ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಲು, ಸಿಂಕ್ ಆನ್ ಮಾಡಿ</translation>
 <translation id="1209206284964581585">ಸದ್ಯಕ್ಕೆ ಮರೆಮಾಡಿ</translation>
 <translation id="1227058898775614466">ನ್ಯಾವಿಗೇಶನ್ ಇತಿಹಾಸ</translation>
-<translation id="1229399675748764149">ಈ ಪುಟವನ್ನು ನಿಮ್ಮ ಮುಖಪುಟವಾಗಿ ಮಾಡಿಕೊಳ್ಳಿ</translation>
 <translation id="1231733316453485619">ಸಿಂಕ್ ಆನ್ ಮಾಡುವುದೇ?</translation>
 <translation id="123724288017357924">ಸಂಗ್ರಹ ಮಾಡಿದ ವಿಷಯವನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ, ಪ್ರಸ್ತುತ ಪುಟ ಮರುಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="124678866338384709">ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್ ಮುಚ್ಚಿ</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">ಪಾಸ್‌ವರ್ಡ್ ಅಳಿಸಿ</translation>
 <translation id="1521774566618522728">ಇಂದು ಸಕ್ರಿಯ</translation>
 <translation id="1538801903729528855">ವೆಬ್‌ನಲ್ಲಿ ಉತ್ತಮವಾದ ಧ್ವನಿ ಅನುಭವವನ್ನು ಪಡೆಯಿರಿ</translation>
-<translation id="1543538514740974167">ತ್ವರಿತವಾಗಿ ಇಲ್ಲಿ ಪಡೆಯಿರಿ</translation>
 <translation id="1544826120773021464">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಲು, "ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ" ಬಟನ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="1549000191223877751">ಇತರ ವಿಂಡೋಗೆ ಸರಿಸಿ</translation>
 <translation id="1553358976309200471">Chrome ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">ಈ ಆಫ್‍ಲೈನ್ ಪುಟವನ್ನು <ph name="CREATION_TIME" /> ರಂದು ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಇದು ಆನ್‌ಲೈನ್ ಆವೃತ್ತಿಗಿಂತ ಭಿನ್ನವಾಗಿರಬಹುದು.</translation>
 <translation id="4605958867780575332">ತೆಗೆದುಹಾಕಲಾಗಿರುವ ಐಟಂ: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ನಂತರದ ಬಳಕೆಗಾಗಿ ಪುಟಗಳನ್ನು ಉಳಿಸಿ ಹಾಗೂ ರಿಮೈಂಡರ್ ಪಡೆದುಕೊಳ್ಳಿ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ತೆರೆಯಿರಿ</translation>
 <translation id="4634124774493850572">ಪಾಸ್‌ವರ್ಡ್ ಬಳಸಿ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ಪಾಸ್‌ವರ್ಡ್ ಅಪಾಯಕ್ಕೀಡಾಗಿದೆ}one{# ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಅಪಾಯಕ್ಕೀಡಾಗಿವೆ}other{# ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಅಪಾಯಕ್ಕೀಡಾಗಿವೆ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ</translation>
 <translation id="7029809446516969842">ಪಾಸ್‌ವರ್ಡ್‌ಗಳು</translation>
 <translation id="7030675613184250187">ಪುಟಗಳನ್ನು ಮತ್ತೆ ಹುಡುಕಲು ಅಥವಾ ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಓದಲು ನೀವು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಗೆ ಉಳಿಸಬಹುದು</translation>
-<translation id="703523980599857277">ಮುಖಪುಟವನ್ನು ಬದಲಾಯಿಸಿ</translation>
 <translation id="7054588988317389591">ಚಿತ್ರದ ವಿವರಣೆ ಪಡೆಯಬೇಕೇ?</translation>
 <translation id="7055152154916055070">ಮರುನಿರ್ದೇಶಿಸುವಿಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation>
 <translation id="7063006564040364415">ಸಿಂಕ್ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕ ಹೊಂದಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ಅಪ್ ಟು ಡೇಟ್ ಆಗಿದೆ</translation>
 <translation id="7106762743910369165">ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತಿದೆ</translation>
 <translation id="7121362699166175603">ವಿಳಾಸ ಪಟ್ಟಿಯ ಇತಿಹಾಸ ಮತ್ತು ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸುವಿಕೆಯನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು.</translation>
-<translation id="7128355412245153445">ನೀವು ಮುಖಪುಟ ಬಟನ್ ಟ್ಯಾಪ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ, ನಿಮ್ಮ ಪ್ರಮುಖ ಸೈಟ್‌ಗಳು ಮತ್ತು ಇತ್ತೀಚಿನ ಸುದ್ದಿಗಳನ್ನು ನೋಡಿ</translation>
 <translation id="7138678301420049075">ಇತರೆ</translation>
 <translation id="7146622961999026732">ಈ ಸೈಟ್‌ಗಳು ಮತ್ತು ಆ್ಯಪ್‌ಗಳು ನಿಮಗೆ ಮುಖ್ಯವಾದವು ಎನಿಸುತ್ತಿದೆ:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> ನಿಂದ <ph name="BEGIN_LINK" />ಮೂಲ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಿ<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ\n2. “ಯಾವಾಗಲೂ” ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="8410695015584479363">ದರಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ</translation>
 <translation id="8413126021676339697">ಪೂರ್ತಿ ಇತಿಹಾಸವನ್ನು ತೋರಿಸಿ</translation>
-<translation id="8425213833346101688">ಬದಲಿಸಿ</translation>
 <translation id="8427875596167638501">ಪೂರ್ವವೀಕ್ಷಣೆ ಟ್ಯಾಬ್ ಅರ್ಧ ತೆರೆದಿದೆ</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8438566539970814960">ಹುಡುಕಾಟಗಳನ್ನು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವಂತೆ ಮಾಡಿ</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ಡಿಜಿಟಲ್ ಯೋಗಕ್ಷೇಮದಿಂದ ನಿಮ್ಮ Chrome ಚಟುವಟಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="927968626442779827">Google Chrome ನಲ್ಲಿ ಲೈಟ್ ಮೋಡ್ ಬಳಸಿ</translation>
 <translation id="932327136139879170">ಹೋಮ್</translation>
-<translation id="93753284658583800">ಮುಖಪುಟವನ್ನು ಬದಲಿಸಲಾಗಿದೆ</translation>
 <translation id="938850635132480979">ದೋಷ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">ಪಾಸ್‌ಫ್ರೇಸ್ ಅನ್ನು ನಮೂದಿಸಿ</translation>
 <translation id="948039501338975565">ಬುಕ್‌ಮಾರ್ಕ್ ಫೋಲ್ಡರ್‌ಗಳ ಪಟ್ಟಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index fe7a7d0..1f506af7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">모든 기기에서 동기화 및 맞춤설정하려면 동기화를 사용 설정하세요.</translation>
 <translation id="1209206284964581585">지금 숨기기</translation>
 <translation id="1227058898775614466">탐색 기록</translation>
-<translation id="1229399675748764149">이 페이지를 홈페이지로 지정</translation>
 <translation id="1231733316453485619">동기화를 사용하시겠습니까?</translation>
 <translation id="123724288017357924">캐시된 콘텐츠를 무시하고 현재 페이지 새로고침</translation>
 <translation id="124678866338384709">현재 탭 닫기</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">비밀번호 삭제</translation>
 <translation id="1521774566618522728">오늘 사용</translation>
 <translation id="1538801903729528855">웹에서의 음성 사용 환경 개선하기</translation>
-<translation id="1543538514740974167">여기로 더 빠르게 이동하기</translation>
 <translation id="1544826120773021464">Google 계정을 관리하려면 '계정 관리' 버튼을 탭하세요.</translation>
 <translation id="1549000191223877751">다른 창으로 이동</translation>
 <translation id="1553358976309200471">Chrome 업데이트</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">사이트</translation>
 <translation id="4594952190837476234">이 오프라인 페이지는 <ph name="CREATION_TIME" />에 생성되었으며 온라인 버전과 다를 수 있습니다.</translation>
 <translation id="4605958867780575332"><ph name="ITEM_TITLE" /> 삭제됨</translation>
-<translation id="4614535611158687827">나중에 읽을 수 있게 페이지를 저장하고 알림 받기</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> 열기</translation>
 <translation id="4634124774493850572">비밀번호 사용</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{유출된 비밀번호 1개}other{유출된 비밀번호 #개}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> 복원됨</translation>
 <translation id="7029809446516969842">비밀번호</translation>
 <translation id="7030675613184250187">읽기 목록에 페이지를 저장하여 다시 찾아보거나 오프라인 상태에서 읽을 수 있습니다.</translation>
-<translation id="703523980599857277">홈페이지 변경</translation>
 <translation id="7054588988317389591">이미지 설명을 표시하시겠습니까?</translation>
 <translation id="7055152154916055070">다음 주소로의 리디렉션이 차단됨:</translation>
 <translation id="7063006564040364415">동기화 서버에 연결할 수 없습니다.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome이 최신 버전입니다.</translation>
 <translation id="7106762743910369165">조직에서 관리하는 브라우저입니다.</translation>
 <translation id="7121362699166175603">검색주소창에 저장된 방문 기록과 자동 완성 내역을 지웁니다. Google 계정의 내 활동(<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />)에는 인터넷 사용 기록이 다른 형식으로 남아 있을 수도 있습니다.</translation>
-<translation id="7128355412245153445">홈 버튼을 탭할 때마다 자주 방문하는 사이트 및 최근 스토리가 표시됩니다.</translation>
 <translation id="7138678301420049075">기타</translation>
 <translation id="7146622961999026732">다음 사이트와 앱은 중요할 수도 있습니다.</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" />에서 <ph name="BEGIN_LINK" />원본 페이지 로드<ph name="END_LINK" />하기</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" />을 선택합니다.\n2. '항상'을 탭합니다.</translation>
 <translation id="8410695015584479363">가격 추적</translation>
 <translation id="8413126021676339697">방문 기록 전체 보기</translation>
-<translation id="8425213833346101688">변경</translation>
 <translation id="8427875596167638501">미리보기 탭이 절반 높이로 열림</translation>
 <translation id="8428213095426709021">설정</translation>
 <translation id="8438566539970814960">검색 및 탐색 기능 개선</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">디지털 웰빙에서 Chrome 활동 삭제</translation>
 <translation id="927968626442779827">Chrome에서 라이트 모드를 사용하세요.</translation>
 <translation id="932327136139879170">홈</translation>
-<translation id="93753284658583800">홈페이지 변경됨</translation>
 <translation id="938850635132480979">오류: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">암호 입력</translation>
 <translation id="948039501338975565">북마크 폴더 목록</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
index 642616d..e9c5c98 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Бардык түзмөктөрүңүздө шайкештирүү жана жекечелештирүү үчүн шайкештирүүнү иштетиңиз</translation>
 <translation id="1209206284964581585">Азырынча жашыруу</translation>
 <translation id="1227058898775614466">Чабыттоо таржымалы</translation>
-<translation id="1229399675748764149">Бул баракты башкы бет кылып алыңыз</translation>
 <translation id="1231733316453485619">Шайкештирүү күйгүзүлсүнбү?</translation>
 <translation id="123724288017357924">Кэшти колдонбой, учурдагы баракты кайра жүктөө</translation>
 <translation id="124678866338384709">Учурдагы өтмөктү жабуу</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Сырсөздү жок кылуу</translation>
 <translation id="1521774566618522728">Акыркы аракеттер: бүгүн</translation>
 <translation id="1538801903729528855">Вебде оозеки издегенде жакшыраак натыйжаларды алыңыз</translation>
-<translation id="1543538514740974167">Бул жакка бир заматта кириңиз</translation>
 <translation id="1544826120773021464">Google аккаунтуңузду башкаруу үчүн "Аккаунтту башкаруу" баскычын таптап коюңуз</translation>
 <translation id="1549000191223877751">Башка терезеге жылдыруу</translation>
 <translation id="1553358976309200471">Chrome'ду жаңыртуу</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайттар</translation>
 <translation id="4594952190837476234">Бул оффлайн режиминдеги баракча <ph name="CREATION_TIME" /> сакталган жана онлайн версиясынан айырмаланышы мүмкүн.</translation>
 <translation id="4605958867780575332">Бул нерсе өчүрүлдү: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Баракчаларды кийинчерээк көрүү үчүн сактоо жана эскертме алуу</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> колдонмосун ачуу</translation>
 <translation id="4634124774493850572">Сырсөздү колдонуу</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 уурдалган сырсөз бар}other{# уурдалган сырсөз бар}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> калыбына келтирилди</translation>
 <translation id="7029809446516969842">Сырсөздөр</translation>
 <translation id="7030675613184250187">Барактарды кийин кайра таап же оффлайн режиминде окуу үчүн окула тургандардын тизмесине кошуп койсоңуз болот</translation>
-<translation id="703523980599857277">Башкы бетти өзгөртүү</translation>
 <translation id="7054588988317389591">Сүрөттүн сүрөттөмөлөрүн аласызбы?</translation>
 <translation id="7055152154916055070">Багыттоо бөгөттөлгөн:</translation>
 <translation id="7063006564040364415">Шайкештештирүү серверине туташкан жок.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome жаңыртылды</translation>
 <translation id="7106762743910369165">Серепчиңиз уюмуңуз тарабынан башкарылат</translation>
 <translation id="7121362699166175603">Таржымал жана дарек тилкесиндеги автоматтык түрдө бүтүрүлгөн сөздөр тазаланат. Google аккаунтуңуздун серептөө таржымалынын башка түрлөрү <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> дарегинде болушу мүмкүн.</translation>
-<translation id="7128355412245153445">Башкы бет баскычын таптаган сайын эң көп колдонгон сайттарыңыз жана акыркы окуяларыңыз көрүнөт</translation>
 <translation id="7138678301420049075">Башка</translation>
 <translation id="7146622961999026732">Бул сайттар менен колдонмолор сиз үчүн маанилүү окшойт:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> домениндеги <ph name="BEGIN_LINK" />түпнуска баракты жүктөө<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> колдонмосун тандаңыз\n2. "Ар дайымды" таптаңыз</translation>
 <translation id="8410695015584479363">Бааларга көз салуу</translation>
 <translation id="8413126021676339697">Таржымалды толугу менен көрсөтүү</translation>
-<translation id="8425213833346101688">Өзгөртүү</translation>
 <translation id="8427875596167638501">Алдын ала көрүү өтмөгүнүн жарымы жабык</translation>
 <translation id="8428213095426709021">Жөндөөлөр</translation>
 <translation id="8438566539970814960">Издөө жана серептөө аракеттериңизди жакшыртыңыз</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome'ду колдонуу дайын-даректериңизди Санариптик бакубаттык кызматынан алып салыңыз</translation>
 <translation id="927968626442779827">Google Chrome'до Жөнөкөй режимди колдонуңуз</translation>
 <translation id="932327136139879170">Башкы</translation>
-<translation id="93753284658583800">Башкы бет өзгөртүлдү</translation>
 <translation id="938850635132480979">Ката: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Купуя сөз айкашын киргизиңиз</translation>
 <translation id="948039501338975565">Кыстарма папкаларынын тизмеси</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 880971d..729da49 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ເພື່ອຊິ້ງຂໍ້ມູນ ແລະ ປັບແຕ່ງເປັນແບບສ່ວນຕົວໃນທົ່ວອຸປະກອນ, ກະລຸນາເປີດການຊິ້ງຂໍ້ມູນກ່ອນ</translation>
 <translation id="1209206284964581585">ເຊື່ອງສຳລັບຕອນນີ້</translation>
 <translation id="1227058898775614466">ປະຫວັດການນຳທາງ</translation>
-<translation id="1229399675748764149">ເຮັດໃຫ້ໜ້ານີ້ເປັນໜ້າຫຼັກຂອງທ່ານ</translation>
 <translation id="1231733316453485619">ເປີດການຊິ້ງຂໍ້ມູນບໍ?</translation>
 <translation id="123724288017357924">ໂຫຼດໜ້າປັດຈຸບັນຄືນໃໝ່, ໂດຍລະເລີຍເນື້ອຫາທີ່ຈັດເກັບໄວ້ຖາວອນ</translation>
 <translation id="124678866338384709">ປິດແຖບປັດຈຸບັນ</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">ລຶບລະຫັດຜ່ານ</translation>
 <translation id="1521774566618522728">ເປີດນຳໃຊ້ມື້ນີ້</translation>
 <translation id="1538801903729528855">ມີປະສົບການສຽງທີ່ດີກວ່າໃນເວັບ</translation>
-<translation id="1543538514740974167">ມາທີ່ນີ້ໄດ້ໄວກວ່າ</translation>
 <translation id="1544826120773021464">ເພື່ອຈັດການບັນຊີ Google ຂອງທ່ານ, ກະລຸນາແຕະປຸ່ມ "ຈັດການບັນຊີ"</translation>
 <translation id="1549000191223877751">ຍ້າຍໄປຫາໜ້າຈໍອື່ນ</translation>
 <translation id="1553358976309200471">ອັບ​ເດດ Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">ເວັບໄຊ</translation>
 <translation id="4594952190837476234">ໜ້າອອບລາຍນີ້ມາຈາກ <ph name="CREATION_TIME" /> ແລະ ອາດຈະແຕກຕ່າງຈາກເວີຊັນອອນລາຍ.</translation>
 <translation id="4605958867780575332">ລຶບລາຍການແລ້ວ: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ບັນທຶກໜ້າສຳລັບພາຍຫຼັງ ແລະ ຮັບການແຈ້ງເຕືອນ</translation>
 <translation id="4616150815774728855">ເປີດ <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ໃຊ້ລະຫັດຜ່ານ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ມີລະຫັດຜ່ານທີ່ຖືກລະເມີດ 1 ລາຍການ}other{ມີລະຫັດຜ່ານທີ່ຖືກລະເມີດ # ລາຍການ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">ກູ້ຂໍ້ມູນເມື່ອ <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">ລະ​ຫັດ​ຜ່ານ</translation>
 <translation id="7030675613184250187">ທ່ານສາມາດບັນທຶກໜ້າໃສ່ລາຍຊື່ການອ່ານຂອງທ່ານເພື່ອຊອກເຫັນພວກມັນອີກຄັ້ງ ຫຼື ອ່ານແບບອອບລາຍໄດ້</translation>
-<translation id="703523980599857277">ປ່ຽນໜ້າຫຼັກ</translation>
 <translation id="7054588988317389591">ຮັບຄຳອະທິບາຍຮູບບໍ?</translation>
 <translation id="7055152154916055070">ບລັອກການປ່ຽນເສັ້ນທາງແລ້ວ:</translation>
 <translation id="7063006564040364415">ບໍ່​ສາ​ມາດ​ເຊື່ອມ​ຕໍ່​ກັບ​ເຊີບເວີຊິງຄ໌ໄດ້​.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ໃໝ່ຫຼ້າສຸດແລ້ວ</translation>
 <translation id="7106762743910369165">ໂປຣແກຣມທ່ອງເວັບຂອງທ່ານໄດ້ຮັບການຈັດການໂດຍອົງການຈັດຕັ້ງຂອງທ່ານ</translation>
 <translation id="7121362699166175603">ລຶບລ້າງປະຫວັດ ແລະ ການປະກອບຂໍ້ມູນອັດຕະໂນມັດໃນແຖບທີ່ຢູ່. ບັນຊີ Google ຂອງທ່ານອາດຈະມີຮູບແບບອື່ນຂອງປະຫວັດການທ່ອງເວັບຢູ່ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">ເບິ່ງເວັບໄຊຍອດນິຍົມ ແລະ ເລື່ອງລາວຫຼ້າສຸດໃນທຸກເມື່ອທີ່ທ່ານແຕະປຸ່ມໜ້າທໍາອິດ</translation>
 <translation id="7138678301420049075">ອື່ນໆ</translation>
 <translation id="7146622961999026732">ເວັບໄຊ ແລະ ແອັບເຫຼົ່ານີ້ປາກົດວ່າສຳຄັນຕໍ່ກັບທ່ານ:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />ໂຫຼດໜ້າຕົ້ນສະບັບ<ph name="END_LINK" /> ຈາກ <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. ເລືອກ <ph name="APP_NAME" />\n2. ແຕະ “ທຸກຄັ້ງ”</translation>
 <translation id="8410695015584479363">ຕິດຕາມລາຄາ</translation>
 <translation id="8413126021676339697">ສະ​ແດງ​ປະຫວັດທັງໝົດ</translation>
-<translation id="8425213833346101688">ປ່ຽນ​ແປງ</translation>
 <translation id="8427875596167638501">ແຖບສະແດງຕົວຢ່າງເປີດເຄິ່ງໜຶ່ງ</translation>
 <translation id="8428213095426709021">ການ​ຕັ້ງຄ່າ</translation>
 <translation id="8438566539970814960">ເຮັດໃຫ້ການຊອກຫາ ແລະ ການທ່ອງເວັບດີຂຶ້ນ</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ລຶບການເຄື່ອນໄຫວໃນ Chrome ຂອງທ່ານອອກຈາກ Digital Wellbeing</translation>
 <translation id="927968626442779827">ໃຊ້ໂໝດ Lite ໃນ Google Chrome</translation>
 <translation id="932327136139879170">ບ້ານ</translation>
-<translation id="93753284658583800">ປ່ຽນໜ້າຫຼັກແລ້ວ</translation>
 <translation id="938850635132480979">ຜິດພາດ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">ປ້ອນວະລີຜ່ານໃສ່</translation>
 <translation id="948039501338975565">ລາຍຊື່ໂຟນເດີບຸກມາກ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index 336cd4e3..13ab3a8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Kad turinys būtų sinchronizuojamas visuose įrenginiuose, įjunkite sinchronizavimą</translation>
 <translation id="1209206284964581585">Slėpti dabar</translation>
 <translation id="1227058898775614466">Naršymo istorija</translation>
-<translation id="1229399675748764149">Šio puslapio nustatymas kaip pagrindinio puslapio</translation>
 <translation id="1231733316453485619">Įjungti sinchronizavimą?</translation>
 <translation id="123724288017357924">Įk. šį puslapį iš naujo, nepais. talp. es. turinio</translation>
 <translation id="124678866338384709">Uždaryti dabartinį skirtuką</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Ištrinti slaptažodį</translation>
 <translation id="1521774566618522728">Aktyvus šiandien</translation>
 <translation id="1538801903729528855">Dar geriau išnaudokite veiksmų balsu galimybes žiniatinklyje</translation>
-<translation id="1543538514740974167">Spartesnė prieiga</translation>
 <translation id="1544826120773021464">Jei norite tvarkyti „Google“ paskyrą, palieskite mygtuką „Tvarkyti“</translation>
 <translation id="1549000191223877751">Perkelti į kitą langą</translation>
 <translation id="1553358976309200471">Atnaujinkite „Chrome“</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Svetainės</translation>
 <translation id="4594952190837476234">Šis neprisijungus naudojamas puslapis sukurtas <ph name="CREATION_TIME" />, todėl gali skirtis nuo prisijungus pateiktos versijos.</translation>
 <translation id="4605958867780575332">Pašalintas elementas: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Išsaugokite puslapius, jei norite peržiūrėti vėliau, ir gaukite priminimą</translation>
 <translation id="4616150815774728855">Atidaryti „<ph name="WEBAPK_NAME" />“</translation>
 <translation id="4634124774493850572">Naudoti slaptažodį</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 pažeistas slaptažodis}one{# pažeistas slaptažodis}few{# pažeisti slaptažodžiai}many{# pažeisto slaptažodžio}other{# pažeistų slaptažodžių}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Atkurta „<ph name="ITEM_TITLE" />“</translation>
 <translation id="7029809446516969842">Slaptažodžiai</translation>
 <translation id="7030675613184250187">Skaitymo sąraše galite išsaugoti puslapių, kad galėtumėte rasti juos vėliau ir skaityti neprisijungę</translation>
-<translation id="703523980599857277">Keisti pagrindinį puslapį</translation>
 <translation id="7054588988317389591">Gauti vaizdų aprašus?</translation>
 <translation id="7055152154916055070">Peradresavimas užblokuotas:</translation>
 <translation id="7063006564040364415">Nepavyko prisijungti prie sinchronizavimo serverio.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">„Chrome“ atnaujinta</translation>
 <translation id="7106762743910369165">Jūsų naršyklę tvarko jūsų organizacija</translation>
 <translation id="7121362699166175603">Išvaloma istorija ir automatiniai užbaigimai adreso juostoje. „Google“ paskyroje gali būti kito tipo naršymo istorijos, kuri pasiekiama adresu <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Peržiūrėkite populiariausias svetaines ir naujausius pasakojimus palietę pagrindinio ekrano mygtuką</translation>
 <translation id="7138678301420049075">Kitas</translation>
 <translation id="7146622961999026732">Panašu, kad toliau nurodytos svetainės ir programos jums yra svarbios.</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Įkelti pradinį puslapį<ph name="END_LINK" /> iš <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Pasirinkite „<ph name="APP_NAME" />“\n2. Palieskite „Visada“</translation>
 <translation id="8410695015584479363">Stebėti kainas</translation>
 <translation id="8413126021676339697">Rodyti visą istoriją</translation>
-<translation id="8425213833346101688">Keisti</translation>
 <translation id="8427875596167638501">Peržiūros skirtukas atidarytas iki pusės ekrano</translation>
 <translation id="8428213095426709021">Nustatymai</translation>
 <translation id="8438566539970814960">Tobulinti paieškas ir naršymą</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">„Chrome“ veiklos pašalinimas iš Skaitmeninės gerovės</translation>
 <translation id="927968626442779827">Naudokite supaprastintą režimą naršyklėje „Google Chrome“</translation>
 <translation id="932327136139879170">Kontaktinė namų informacija</translation>
-<translation id="93753284658583800">Pagrindinis puslapis pakeistas</translation>
 <translation id="938850635132480979">Klaida: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Įvesti slaptafrazę</translation>
 <translation id="948039501338975565">Žymių aplankų sąrašas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
index 9effadb..7f6741c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Lai sinhronizētu un personalizētu saturu dažādās ierīcēs, ieslēdziet sinhronizāciju.</translation>
 <translation id="1209206284964581585">Pagaidām slēpt</translation>
 <translation id="1227058898775614466">Navigācijas vēsture</translation>
-<translation id="1229399675748764149">Iestatiet šo lapu kā sākumlapu</translation>
 <translation id="1231733316453485619">Vai ieslēgt sinhronizāciju?</translation>
 <translation id="123724288017357924">Atkārtoti ielādēt lapu, ignorējot saturu kešatmiņā</translation>
 <translation id="124678866338384709">Aizvērt pašreizējo cilni</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Dzēst paroli</translation>
 <translation id="1521774566618522728">Aktīvs šodien</translation>
 <translation id="1538801903729528855">Labākas balss izmantošanas iespējas tīmeklī</translation>
-<translation id="1543538514740974167">Ātrāka piekļuve</translation>
 <translation id="1544826120773021464">Lai pārvaldītu savu Google kontu, pieskarieties pogai “Konta pārvaldība”</translation>
 <translation id="1549000191223877751">Pārvietot uz citu logu</translation>
 <translation id="1553358976309200471">Atjaunināt Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Vietnes</translation>
 <translation id="4594952190837476234">Šī lapas bezsaistes versija (izveidota: <ph name="CREATION_TIME" />) var atšķirties no tiešsaistes versijas.</translation>
 <translation id="4605958867780575332">Vienums noņemts: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Saglabājiet lapas lasīšanai vēlāk un saņemiet atgādinājumu.</translation>
 <translation id="4616150815774728855">Atvērt <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Izmantot paroli</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 uzlauzta parole}zero{# uzlauztu paroļu}one{# uzlauzta parole}other{# uzlauztas paroles}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Atjaunots vienums <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Paroles</translation>
 <translation id="7030675613184250187">Lasīšanas sarakstā varat saglabāt lapas, lai atrastu tās vēlāk vai lasītu bezsaistē</translation>
-<translation id="703523980599857277">Mainīt sākumlapu</translation>
 <translation id="7054588988317389591">Vai vēlaties iespējot attēlu aprakstus?</translation>
 <translation id="7055152154916055070">Novirzīšana ir bloķēta:</translation>
 <translation id="7063006564040364415">Nevarēja izveidot savienojumu ar sinhronizācijas serveri.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome jaunākā versija jau ir instalēta.</translation>
 <translation id="7106762743910369165">Pārlūku pārvalda jūsu organizācija</translation>
 <translation id="7121362699166175603">Notīra vēsturi un automātiskās pabeigšanas datus adreses joslā. Jūsu Google kontam var būt cita veida pārlūkošanas vēstures dati vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Skatiet vietnes, ko apmeklējat visbiežāk, kā arī jaunākos stāstus katru reizi, kad pieskaraties pogai Sākums.</translation>
 <translation id="7138678301420049075">Cits</translation>
 <translation id="7146622961999026732">Šķiet, ka šīs vietnes un lietotnes jums ir svarīgas:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Ielādēt sākotnējo lapu<ph name="END_LINK" /> no <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Atlasiet <ph name="APP_NAME" />.\n2. Pieskarieties vienumam “Vienmēr”.</translation>
 <translation id="8410695015584479363">Izsekot cenām</translation>
 <translation id="8413126021676339697">Rādīt pilnu vēsturi</translation>
-<translation id="8425213833346101688">Mainīt</translation>
 <translation id="8427875596167638501">Priekšskatījuma cilne ir daļēji atvērta</translation>
 <translation id="8428213095426709021">Iestatījumi</translation>
 <translation id="8438566539970814960">Uzlabot meklēšanu un pārlūkošanu</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome darbību noņemšana no Digitālās labjutības</translation>
 <translation id="927968626442779827">Izmantojiet Google Chrome vienkāršoto režīmu.</translation>
 <translation id="932327136139879170">Sākums</translation>
-<translation id="93753284658583800">Sākumlapa nomainīta</translation>
 <translation id="938850635132480979">Kļūda: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ievadiet ieejas frāzi</translation>
 <translation id="948039501338975565">Grāmatzīmju mapju saraksts</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 937feceb..c7e9151 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">За да ги синхронизирате и персонализирате уредите, вклучете синхронизација</translation>
 <translation id="1209206284964581585">Сокриј засега</translation>
 <translation id="1227058898775614466">Историја на навигација</translation>
-<translation id="1229399675748764149">Направете ја страницава ваша почетна страница</translation>
 <translation id="1231733316453485619">Да се вклучи синхронизација?</translation>
 <translation id="123724288017357924">Вчитај тековна страница, без кеширана содржина</translation>
 <translation id="124678866338384709">Затвори ја тековната картичка</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Избриши ја лозинката</translation>
 <translation id="1521774566618522728">Активен денес</translation>
 <translation id="1538801903729528855">Добијте подобро гласовно доживување на интернет</translation>
-<translation id="1543538514740974167">Стигнете тука побрзо</translation>
 <translation id="1544826120773021464">За да управувате со сметката на Google, допрете на копчето „Управувајте со сметката“</translation>
 <translation id="1549000191223877751">Премести во друг прозорец</translation>
 <translation id="1553358976309200471">Ажурирај го Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4594952190837476234">Офлајн страницава е од <ph name="CREATION_TIME" /> и може да се разликува од онлајн верзијата.</translation>
 <translation id="4605958867780575332">Отстранета ставка: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Зачувајте ги страниците за подоцна и добијте потсетник</translation>
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Употреби ја лозинката</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 компромитирана лозинка}one{# компромитирана лозинка}other{# компромитирани лозинки}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Преземањето на <ph name="ITEM_TITLE" /> е вратено</translation>
 <translation id="7029809446516969842">Лозинки</translation>
 <translation id="7030675613184250187">Може да зачувувате страници во списокот за читање за да ги наоѓате повторно или да ги читате офлајн</translation>
-<translation id="703523980599857277">Промени ја почетната страница</translation>
 <translation id="7054588988317389591">Сакате ли да добивате описи на слики?</translation>
 <translation id="7055152154916055070">Пренасочувањето е блокирано:</translation>
 <translation id="7063006564040364415">Не може да се поврзе на серверот за синхронизација.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome е ажуриран</translation>
 <translation id="7106762743910369165">Вашата организација управува со прелистувачот</translation>
 <translation id="7121362699166175603">Ја чисти историјата и автоматските довршувања во лентата за адреси. Вашата сметка на Google можеби има други видови историја на прелистување на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Гледајте ги најдобрите сајтови и неодамнешните приказни секојпат кога ќе го допрете копчето за почетен екран</translation>
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7146622961999026732">Изгледа дека сајтовиве и апликацииве ви се важни:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Вчитај ја оригиналната страница<ph name="END_LINK" /> од <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Изберете <ph name="APP_NAME" />\n2. Допрете „Секогаш“</translation>
 <translation id="8410695015584479363">Следете ги цените</translation>
 <translation id="8413126021676339697">Прикажи ја целата историја</translation>
-<translation id="8425213833346101688">Промени</translation>
 <translation id="8427875596167638501">Картичката за преглед е отворена на половина екран</translation>
 <translation id="8428213095426709021">Поставки</translation>
 <translation id="8438566539970814960">Подобрете ги пребарувањата и прелистувањето</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Отстранете ја вашата активност на Chrome од „Дигитална благосостојба“</translation>
 <translation id="927968626442779827">Користете „Лесен режим“ на Google Chrome</translation>
 <translation id="932327136139879170">Дома</translation>
-<translation id="93753284658583800">Почетната страница се промени</translation>
 <translation id="938850635132480979">Грешка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Внеси пристапна фраза</translation>
 <translation id="948039501338975565">Список со папки за обележувачи</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
index f62d876..50546e34 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ഉപകരണങ്ങളിൽ ഉടനീളം സമന്വയിപ്പിക്കാനും വ്യക്തിപരമാക്കാനും, സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation>
 <translation id="1209206284964581585">ഇപ്പോഴത്തേയ്‌ക്ക് മറയ്‌ക്കുക</translation>
 <translation id="1227058898775614466">നാവിഗേഷന്‍ ചരിത്രം</translation>
-<translation id="1229399675748764149">ഈ പേജ് നിങ്ങളുടെ ഹോം പേജാക്കുക</translation>
 <translation id="1231733316453485619">സമന്വയിപ്പിക്കൽ ഓണാക്കണോ?</translation>
 <translation id="123724288017357924">കാഷെ ചെയ്‌ത ഉള്ളടക്കം ഒഴിവാക്കി കൊണ്ട്, നിലവിലെ പേജ് റീലോഡ് ചെയ്യുക</translation>
 <translation id="124678866338384709">നിലവിലെ ടാബ് അടയ്‌ക്കുക</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">പാസ്‌വേഡ് ഇല്ലാതാക്കുക</translation>
 <translation id="1521774566618522728">ഇന്ന് സജീവമായിരുന്നു</translation>
 <translation id="1538801903729528855">വെബിൽ മികച്ച ശബ്‌ദാനുഭവം നേടൂ</translation>
-<translation id="1543538514740974167">ഇവിടെ വേഗത്തിൽ എത്തുക</translation>
 <translation id="1544826120773021464">നിങ്ങളുടെ Google അക്കൗണ്ട് മാനേജ് ചെയ്യാൻ, "അക്കൗണ്ട് മാനേജ് ചെയ്യുക" ബട്ടണിൽ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="1549000191223877751">മറ്റൊരു വിൻഡോയിലേക്ക് നീക്കുക</translation>
 <translation id="1553358976309200471">Chrome അപ്‌ഡേറ്റുചെയ്യുക</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">ഈ ഓഫ്‌ലൈൻ പേജ് <ph name="CREATION_TIME" /> -ന് സൃഷ്‌ടിച്ചതാണ്, അതിനാൽ ഓൺലൈൻ പതിപ്പിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം.</translation>
 <translation id="4605958867780575332">നീക്കംചെയ്‌ത ഇനം: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">പിന്നീട് വായിക്കുന്നതിന് പേജുകൾ സംരക്ഷിച്ച് റിമൈൻഡർ നേടുക</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> തുറക്കുക</translation>
 <translation id="4634124774493850572">പാസ്‌വേഡ് ഉപയോഗിക്കുക</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{അപഹരിക്കപ്പെട്ട ഒരു പാസ്‌വേഡ്}other{അപഹരിക്കപ്പെട്ട # പാസ്‌വേഡുകൾ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> പുനഃസ്ഥാപിച്ചു</translation>
 <translation id="7029809446516969842">പാസ്‌വേഡുകള്‍</translation>
 <translation id="7030675613184250187">പേജുകൾ വീണ്ടും കണ്ടെത്താനോ ഓഫ്‌ലൈനിൽ വായിക്കാനോ അവ നിങ്ങളുടെ വായനാ ലിസ്‌റ്റിൽ സംരക്ഷിക്കാം</translation>
-<translation id="703523980599857277">ഹോം പേജ് മാറ്റുക</translation>
 <translation id="7054588988317389591">ചിത്ര വിവരണങ്ങൾ നേടണോ?</translation>
 <translation id="7055152154916055070">റീഡയറക്‌റ്റ് ചെയ്യുന്നത് ബ്ലോക്ക് ചെയ്തു</translation>
 <translation id="7063006564040364415">സമന്വയ സെർവറിലേക്ക് കണക്‌റ്റ് ചെയ്യാനായില്ല.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome അപ് റ്റു ഡേറ്റാണ്</translation>
 <translation id="7106762743910369165">നിങ്ങളുടെ സ്ഥാപനമാണ് നിങ്ങളുടെ ബ്രൗസർ മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="7121362699166175603">ചരിത്രവും വിലാസ ബാറിലെ സ്വയം പൂർത്തീകരണങ്ങളും മായ്ക്കുന്നു. നിങ്ങളുടെ Google അക്കൗണ്ടിന് <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> എന്നതിൽ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation>
-<translation id="7128355412245153445">നിങ്ങൾ ഹോം ബട്ടൺ ടാപ്പ് ചെയ്യുമ്പോഴൊക്കെ പ്രധാന സൈറ്റുകളും അടുത്തിടെയുള്ള സ്റ്റോറികളും കാണുക</translation>
 <translation id="7138678301420049075">മറ്റുള്ളവ</translation>
 <translation id="7146622961999026732">ഈ സൈറ്റുകളും ആപ്പുകളും നിങ്ങൾക്ക് പ്രാധാന്യമുള്ളവയാകാം:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" />-ല്‍ നിന്ന് <ph name="BEGIN_LINK" />യഥാര്‍ത്ഥ പേജ് ലോഡ് ചെയ്യുക<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> തിരഞ്ഞെടുക്കുക\n2. “എല്ലായ്‌പ്പോഴും” ടാപ്പ് ചെയ്യുക</translation>
 <translation id="8410695015584479363">നിരക്കുകൾ ട്രാക്ക് ചെയ്യുക</translation>
 <translation id="8413126021676339697">മുഴുവന്‍ ചരിത്രവും കാണിക്കുക</translation>
-<translation id="8425213833346101688">മാറ്റുക</translation>
 <translation id="8427875596167638501">പ്രിവ്യു ടാബ് പാതി തുറന്നിരിക്കുന്നു</translation>
 <translation id="8428213095426709021">ക്രമീകരണങ്ങള്‍</translation>
 <translation id="8438566539970814960">തിരയലുകളും ബ്രൗസിംഗും മികച്ചതാക്കുക</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ഡിജിറ്റൽ ആരോഗ്യത്തിൽ നിന്ന് നിങ്ങളുടെ Chrome ആക്റ്റിവിറ്റി നീക്കം ചെയ്യുക</translation>
 <translation id="927968626442779827">Google Chrome-ൽ ലൈറ്റ് മോഡ് ഉപയോഗിക്കൂ</translation>
 <translation id="932327136139879170">ഹോം</translation>
-<translation id="93753284658583800">ഹോംപേജ് മാറ്റി</translation>
 <translation id="938850635132480979">പിശക്: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">പാസ്ഫ്രെയ്‍സ് നല്‍കുക</translation>
 <translation id="948039501338975565">ബുക്ക്‌മാർക്ക് ഫോൾഡറുകളുടെ ലിസ്റ്റ്</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
index 65b1b28..c4d7f14e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Төхөөрөмжүүдэд синк хийж хувийн болгохын тулд синкийг асаана уу</translation>
 <translation id="1209206284964581585">Одоо нуух</translation>
 <translation id="1227058898775614466">Навигацын түүх</translation>
-<translation id="1229399675748764149">Энэ хуудсыг нүүр хуудсаа болгох</translation>
 <translation id="1231733316453485619">Синк асаах уу?</translation>
 <translation id="123724288017357924">Нөөцөлсөн агуулгыг алгасч одоогийн хуудсыг дахин ачаалах</translation>
 <translation id="124678866338384709">Үндсэн чихтэй хуудсыг хаах</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Нууц үг устгах</translation>
 <translation id="1521774566618522728">Өнөөдөр идэвхтэй</translation>
 <translation id="1538801903729528855">Веб дээр илүү сайн дуут туршлагыг авах</translation>
-<translation id="1543538514740974167">Энд хурдан очих</translation>
 <translation id="1544826120773021464">Google бүртгэлээ удирдахын тулд "Бүртгэлээ удирдах" товчлуур дээр товшино уу</translation>
 <translation id="1549000191223877751">Бусад цонх руу шилжих</translation>
 <translation id="1553358976309200471">Chrome-г шинэчлэх</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайт</translation>
 <translation id="4594952190837476234">Энэ офлайн хуудсыг <ph name="CREATION_TIME" />-с харуулж байгаа бөгөөд онлайн хувилбараас өөр байж болзошгүй.</translation>
 <translation id="4605958867780575332">Зүйл устгасан: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Хуудаснуудыг дараа уншихаар хадгалж, сануулагч аваарай</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />-г нээх</translation>
 <translation id="4634124774493850572">Нууц үг ашиглах</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Алдагдсан 1 нууц үг}other{Алдагдсан # нууц үг}}</translation>
@@ -876,7 +873,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" />-г сэргээсэн</translation>
 <translation id="7029809446516969842">Нууц үг</translation>
 <translation id="7030675613184250187">Та хуудаснуудыг дахин хайж олох эсвэл офлайнаар уншихын тулд тэдгээрийг унших жагсаалтдаа хадгалах боломжтой</translation>
-<translation id="703523980599857277">Нүүр хуудсыг өөрчлөх</translation>
 <translation id="7054588988317389591">Зургийн тайлбар авах уу?</translation>
 <translation id="7055152154916055070">Дахин чиглүүлэлтийг блоклосон:</translation>
 <translation id="7063006564040364415">Синхийн сервер лүү холбогдож чадсангүй.</translation>
@@ -887,7 +883,6 @@
 <translation id="7088681679121566888">Chrome шинэчлэгдсэн байна</translation>
 <translation id="7106762743910369165">Танай байгууллага таны хөтчийг удирддаг</translation>
 <translation id="7121362699166175603">Tүүх болон хаяг оруулах хэсгийн автомат гүйцээлтийг устгана. Таны Google бүртгэл <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />-д хайлтын түүхийн өөр хэлбэртэй байж болзошгүй.</translation>
-<translation id="7128355412245153445">Нүүр хуудасны товчлуур дээр товших бүрдээ шилдэг сайт болон сүүлийн үеийн мэдээ нийтлэлийг хараарай</translation>
 <translation id="7138678301420049075">Бусад</translation>
 <translation id="7146622961999026732">Эдгээр сайт болон апп танд чухал бололтой:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Эх хуудсыг<ph name="END_LINK" /> <ph name="DOMAIN_NAME" />-с ачаалах</translation>
@@ -1077,7 +1072,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" />-г сонгоно уу\n2. “Байнга”-ыг товшино уу</translation>
 <translation id="8410695015584479363">Үнэ хянах</translation>
 <translation id="8413126021676339697">Бүрэн түүхийг харуулах</translation>
-<translation id="8425213833346101688">Өөрчлөлт</translation>
 <translation id="8427875596167638501">Урьдчилан үзэх табыг хагас нээсэн</translation>
 <translation id="8428213095426709021">Тохиргоо</translation>
 <translation id="8438566539970814960">Хайлт болон хөтлөх явцыг сайжруулаарай</translation>
@@ -1195,7 +1189,6 @@
 <translation id="926205370408745186">Chrome-н үйл ажиллагаагаа Дижитал хэрэглээнээс устгах</translation>
 <translation id="927968626442779827">Google Chrome дээр Lite горимыг ашиглаарай</translation>
 <translation id="932327136139879170">Нүүр хуудас</translation>
-<translation id="93753284658583800">Нүүр хуудсыг өөрчилсөн</translation>
 <translation id="938850635132480979">Алдаа: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Нэвтрэх үгүүдийг оруулна уу</translation>
 <translation id="948039501338975565">Хавчуурганы фолдерын жагсаалт</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index ef188afc..8677789 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">सर्व डिव्हाइसवर सिंक आणि पर्सनलाइझ करण्यासाठी, सिंक सुरू करा</translation>
 <translation id="1209206284964581585">आतासाठी लपवा</translation>
 <translation id="1227058898775614466">नेव्हिगेशन इतिहास</translation>
-<translation id="1229399675748764149">या पेजला तुमचे होम पेज बनवा</translation>
 <translation id="1231733316453485619">सिंक सुरू करायचे का?</translation>
 <translation id="123724288017357924">कॅशे केलेला आशय दुर्लक्षित करून, सद्य पेज रीलोड करा</translation>
 <translation id="124678866338384709">वर्तमान टॅब बंद करा</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">पासवर्ड हटवा</translation>
 <translation id="1521774566618522728">आज ॲक्टिव्ह होते</translation>
 <translation id="1538801903729528855">वेबवर आवाजाचा चांगला अनुभव मिळवा</translation>
-<translation id="1543538514740974167">येथे आणखी झटपट जा</translation>
 <translation id="1544826120773021464">तुमचे Google खाते व्यवस्थापित करण्यासाठी, "खाते व्यवस्थापित करा" बटणावर टॅप करा</translation>
 <translation id="1549000191223877751">अन्य विंडोवर हलवा</translation>
 <translation id="1553358976309200471">Chrome अपडेट करा</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">हे <ph name="CREATION_TIME" /> पासूनचे ऑफलाइन पेज आहे आणि ऑनलाइन आवृत्तीपेक्षा वेगळे असू शकते.</translation>
 <translation id="4605958867780575332">आयटम काढला: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">पेज नंतर वाचण्यासाठी सेव्ह करा आणि रिमाइंडर मिळवा</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> उघडा</translation>
 <translation id="4634124774493850572">पासवर्ड वापरा</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{एक धोक्यात असलेला पासवर्ड}other{# धोक्यात असलेले पासवर्ड}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> रिस्टोअर केले</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7030675613184250187">पेज पुन्हा शोधण्यासाठी किंवा ऑफलाइन वाचण्यासाठी तुम्ही ती तुमच्या वाचन सूचीवर सेव्ह करू शकता</translation>
-<translation id="703523980599857277">होम पेज बदला</translation>
 <translation id="7054588988317389591">इमेजची वर्णने मिळवायची का?</translation>
 <translation id="7055152154916055070">रीडिरेक्ट ब्लॉक केले:</translation>
 <translation id="7063006564040364415">संकालित सर्व्हरशी कनेक्ट करू शकलो नाही.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome अप टू डेट आहे</translation>
 <translation id="7106762743910369165">तुमचा ब्राउझर तुमच्या संस्थेद्वारे व्यवस्थापित केला जातो</translation>
 <translation id="7121362699166175603">अ‍ॅड्रेस बारवरील इतिहास आणि आपोआप पूर्ण करण्याचे दाखले साफ करते. तुमच्या Google खात्यामध्ये <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर कदाचित ब्राउझिंगचे इतर फॉर्म असतील.</translation>
-<translation id="7128355412245153445">तुम्ही होम बटण टॅप करता तेव्हा तुमच्या टॉप साइट आणि अलीकडील स्टोरी पहा</translation>
 <translation id="7138678301420049075">इतर</translation>
 <translation id="7146622961999026732">या साइट आणि ही अ‍ॅप्स तुमच्यासाठी महत्त्वाची आहेत असे दिसते:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> वरून <ph name="BEGIN_LINK" />मुळचे पेज लोड करा<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">१. <ph name="APP_NAME" /> निवडा\n2. “नेहमी” वर टॅप करा</translation>
 <translation id="8410695015584479363">किमती ट्रॅक करा</translation>
 <translation id="8413126021676339697">संपूर्ण इतिहास दर्शवा</translation>
-<translation id="8425213833346101688">बदल करा</translation>
 <translation id="8427875596167638501">पूर्वावलोकन टॅब अर्धा उघडा आहे</translation>
 <translation id="8428213095426709021">सेटिंग्ज</translation>
 <translation id="8438566539970814960">शोध आणि ब्राउझ करणे चांगले करा</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Digital wellbeing वरून तुमची Chrome ॲक्टिव्हिटी काढून टाका</translation>
 <translation id="927968626442779827">Google Chrome वर लाइट मोड वापरा</translation>
 <translation id="932327136139879170">होम</translation>
-<translation id="93753284658583800">होम पेज बदलले</translation>
 <translation id="938850635132480979">एरर: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">सांकेतिक पासफ्रेझ एंटर करा</translation>
 <translation id="948039501338975565">बुकमार्क फोल्डरची सूची</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index 0b19045f..e46aaf4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Hidupkan penyegerakan untuk melakukan penyegerakan dan pemperibadian pada semua peranti</translation>
 <translation id="1209206284964581585">Sorok sementara</translation>
 <translation id="1227058898775614466">Sejarah navigasi</translation>
-<translation id="1229399675748764149">Jadikan halaman ini halaman utama anda</translation>
 <translation id="1231733316453485619">Hidupkan penyegerakan?</translation>
 <translation id="123724288017357924">Muat semula laman semasa dan abaikan kdgn dicache</translation>
 <translation id="124678866338384709">Tutup tab semasa</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Padam kata laluan</translation>
 <translation id="1521774566618522728">Aktif hari ini</translation>
 <translation id="1538801903729528855">Dapatkan pengalaman suara yang lebih baik pada web</translation>
-<translation id="1543538514740974167">Akses lebih pantas</translation>
 <translation id="1544826120773021464">Untuk mengurus akaun Google anda, ketik butang "Urus akaun"</translation>
 <translation id="1549000191223877751">Alihkan ke tetingkap lain</translation>
 <translation id="1553358976309200471">Kemas Kini Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Tapak</translation>
 <translation id="4594952190837476234">Halaman luar talian ini dari <ph name="CREATION_TIME" /> dan mungkin berbeza daripada versi dalam talian.</translation>
 <translation id="4605958867780575332">Item dialih keluar: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Simpan halaman untuk kemudian dan dapatkan peringatan</translation>
 <translation id="4616150815774728855">Buka <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gunakan kata laluan</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 kata laluan yang terjejas}other{# kata laluan yang terjejas}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> dipulihkan</translation>
 <translation id="7029809446516969842">Kata laluan</translation>
 <translation id="7030675613184250187">Anda boleh menyimpan halaman ke senarai bacaan anda untuk mencari halaman itu lagi atau membaca halaman itu secara luar talian</translation>
-<translation id="703523980599857277">Tukar halaman utama</translation>
 <translation id="7054588988317389591">Dapatkan perihalan imej?</translation>
 <translation id="7055152154916055070">Ubah hala disekat:</translation>
 <translation id="7063006564040364415">Tidak dapat bersambung ke pelayan yang disegerakkan.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome sudah dikemas kini</translation>
 <translation id="7106762743910369165">Penyemak imbas anda diurus oleh organisasi anda</translation>
 <translation id="7121362699166175603">Mengosongkan sejarah dan autoselesai dalam bar alamat. Akaun Google anda mungkin mempunyai sejarah penyemakan imbas dalam bentuk lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Lihat tapak web paling kerap dilawati dan cerita baru-baru ini setiap kali anda mengetik butang Skrin utama</translation>
 <translation id="7138678301420049075">Lain-lain</translation>
 <translation id="7146622961999026732">Tapak dan apl ini nampaknya penting kepada anda:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Muatkan halaman asal<ph name="END_LINK" /> daripada <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Pilih <ph name="APP_NAME" />\n2. Ketik “Sentiasa”</translation>
 <translation id="8410695015584479363">Jejaki harga</translation>
 <translation id="8413126021676339697">Paparkan sejarah penuh</translation>
-<translation id="8425213833346101688">Tukar</translation>
 <translation id="8427875596167638501">Tab pratonton separa terbuka</translation>
 <translation id="8428213095426709021">Tetapan</translation>
 <translation id="8438566539970814960">Mempertingkatkan carian dan penyemakan imbas</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Alih keluar aktiviti Chrome anda daripada Kesejahteraan Digital</translation>
 <translation id="927968626442779827">Gunakan mod Ringkas pada Google Chrome</translation>
 <translation id="932327136139879170">Laman Utama</translation>
-<translation id="93753284658583800">Halaman utama ditukar</translation>
 <translation id="938850635132480979">Ralat: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Masukkan frasa laluan</translation>
 <translation id="948039501338975565">Senarai folder penanda halaman</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 0743bac..80f7fda8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">စက်ပစ္စည်းများအားလုံးတွင် စင့်ခ်လုပ်ရန်နှင့် ပုဂ္ဂိုလ်ရေးသီးသန့် ပြင်ဆင်ရန် စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ</translation>
 <translation id="1209206284964581585">ယခု ဖျောက်ထားပါ</translation>
 <translation id="1227058898775614466">လမ်းညွှန်မှု မှတ်တမ်း</translation>
-<translation id="1229399675748764149">ဤစာမျက်နှာကို သင့်ပင်မစာမျက်နှာ ပြုလုပ်ခြင်း</translation>
 <translation id="1231733316453485619">စင့်ခ်လုပ်ခြင်းကို ဖွင့်မလား။</translation>
 <translation id="123724288017357924">လက်ရှိစာမျက်နှာကို ပြန်ဖွင့်ပြီး ကက်ရှ်ကို ပယ်ရန်</translation>
 <translation id="124678866338384709">လက်ရှိတဘ်ကို ပိတ်ရန်</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">စကားဝှက်ကို ဖျက်ရန်</translation>
 <translation id="1521774566618522728">ယနေ့ အသုံးပြုထားသည်</translation>
 <translation id="1538801903729528855">ဝဘ်တွင် ပိုမိုကောင်းမွန်သော အသံအသုံးပြုမှုဖြင့် ဆောင်ရွက်လိုက်ပါ</translation>
-<translation id="1543538514740974167">ဤနေရာသို့ အမြန်ရောက်ရှိစေခြင်း</translation>
 <translation id="1544826120773021464">သင့် Google အကောင့်ကို စီမံခန့်ခွဲရန် "အကောင့် စီမံခန့်ခွဲရန်" ခလုတ်ကို တို့ပါ</translation>
 <translation id="1549000191223877751">အခြားဝင်းဒိုးသို့ ရွှေ့ပါ</translation>
 <translation id="1553358976309200471">Update Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">ဝဘ်ဆိုက်များ</translation>
 <translation id="4594952190837476234">ဤအော့ဖ်လိုင်း စာမျက်နှာသည် <ph name="CREATION_TIME" /> က ဖြစ်ပြီး အွန်လိုင်းဗားရှင်းနှင့် ကွဲပြားနိုင်ပါသည်။</translation>
 <translation id="4605958867780575332">ဖယ်ရှားလိုက်သည့် အကြောင်းအရာ − <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">စာမျက်နှာများကို နောင်အတွက်သိမ်းပြီး သတိပေးချက်ရယူပါ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ကို ဖွင့်ပါ</translation>
 <translation id="4634124774493850572">စကားဝှက်ကို အသုံးပြုရန်</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ကျိုးပေါက်ထားသည့် စကားဝှက် 1 ခု}other{ကျိုးပေါက်ထားသည့် စကားဝှက် # ခု}}</translation>
@@ -876,7 +873,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ကို ပြန်ယူပြီးပြီ</translation>
 <translation id="7029809446516969842">စကားဝှက်များ</translation>
 <translation id="7030675613184250187">စာမျက်နှာများကို ပြန်ရှာရန် သို့မဟုတ် အော့ဖ်လိုင်းဖတ်ရန် သင့်ဖတ်ရန်စာရင်းတွင် သိမ်းနိုင်သည်</translation>
-<translation id="703523980599857277">ပင်မစာမျက်နှာ ပြောင်းရန်</translation>
 <translation id="7054588988317389591">ပုံရှင်းလင်းချက်များ ရယူမလား။</translation>
 <translation id="7055152154916055070">တစ်ဆင့်ပြန်ညွှန်ခြင်းကို ပိတ်ထားသည်−</translation>
 <translation id="7063006564040364415">စင့်ခ်ဆာဗာသို့ ချိတ်ဆက်၍ မရပါ။</translation>
@@ -887,7 +883,6 @@
 <translation id="7088681679121566888">Chrome က အပ်ဒိတ်ဖြစ်နေပြီ</translation>
 <translation id="7106762743910369165">သင့်ဘရောင်ဇာကို သင့်အဖွဲ့အစည်းက စီမံခန့်ခွဲသည်</translation>
 <translation id="7121362699166175603">လိပ်စာဘားရှိ မှတ်တမ်းနှင့် အလိုအလျောက်ဖြည့်ပေးခြင်းများကို ဖျက်လိုက်ပါလိမ့်မည်။ သင့်  Google အကောင့်က ဖွင့်ကြည့်ထားသောမှတ်တမ်းသည် <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> တွင် အခြားပုံစံများဖြင့် ရှိနေနိုင်ပါသည်။</translation>
-<translation id="7128355412245153445">'ပင်မခလုတ်' တို့လိုက်တိုင်း သင်၏ ထိပ်တန်းဝဘ်ဆိုက်နှင့် လတ်တလော သတင်းဆောင်းပါးများကို ကြည့်နိုင်သည်</translation>
 <translation id="7138678301420049075">အခြား</translation>
 <translation id="7146622961999026732">ဤဝဘ်ဆိုက်နှင့် အက်ပ်များက သင့်အတွက် အရေးကြီးပုံရသည်-</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> မှ <ph name="BEGIN_LINK" />မူရင်းစာမျက်နှာကို ဖွင့်ပါ<ph name="END_LINK" /></translation>
@@ -1077,7 +1072,6 @@
 <translation id="8407396331882458341">၁။ <ph name="APP_NAME" /> ကို ရွေးပါ\n၂။ “အမြဲတန်း” ကို တို့ပါ</translation>
 <translation id="8410695015584479363">ဈေးနှုန်းများ ခြေရာခံရန်</translation>
 <translation id="8413126021676339697">မှတ်တမ်း အပြည့် ပြရန်</translation>
-<translation id="8425213833346101688">ပြောင်းရန်</translation>
 <translation id="8427875596167638501">အစမ်းကြည့်ရှုမှုတဘ်ကို တစ်ဝက်ဖွင့်ထားသည်</translation>
 <translation id="8428213095426709021">ဆက်တင်များ</translation>
 <translation id="8438566539970814960">ရှာဖွေမှုနှင့် ဖွင့်ကြည့်မှု ပိုမိုကောင်းမွန်လာအောင် လုပ်ခြင်း</translation>
@@ -1195,7 +1189,6 @@
 <translation id="926205370408745186">'ဒစ်ဂျစ်တယ် အာရောဂျံ' မှနေ၍ သင်၏ Chrome လုပ်ဆောင်ချက်ကို ဖယ်ရှားခြင်း</translation>
 <translation id="927968626442779827">Google Chrome တွင် အပေါ့စားမုဒ် သုံးရန်</translation>
 <translation id="932327136139879170">ပင်မ</translation>
-<translation id="93753284658583800">ပင်မစာမျက်နှာ ပြောင်းလိုက်သည်</translation>
 <translation id="938850635132480979">အမှား- <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">စကားစုဝှက်ကို ရိုက်ထည့်ရန်</translation>
 <translation id="948039501338975565">လိပ်စာဖိုင်တွဲများ စာရင်း</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index c3a1bec..c5d01a00 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">यन्त्रहरूभरि सिंक र वैयक्तीकृत गर्न सिंक गर्ने सुविधा सक्रिय गर्नुहोस्</translation>
 <translation id="1209206284964581585">अहिलेका लागि लुकाउनुहोस्</translation>
 <translation id="1227058898775614466">नेभिगेसनको इतिहास</translation>
-<translation id="1229399675748764149">यो पृष्ठलाई आफ्नो गृहपृष्ठ बनाउनुहोस्</translation>
 <translation id="1231733316453485619">सिंक गर्ने सुविधा सक्रिय गर्ने हो?</translation>
 <translation id="123724288017357924">क्यास गरिएको सामग्रीको बेवास्ता गर्दै हालको पृष्ठलाई पुनःलोड गर्नुहोस्</translation>
 <translation id="124678866338384709">हालको ट्याब बन्द गर्नुहोस्</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">पासवर्ड मेट्नुहोस्</translation>
 <translation id="1521774566618522728">आज सक्रिय गरिएको समय</translation>
 <translation id="1538801903729528855">वेबमा भ्वाइस सर्च गर्दा अझ राम्रा सुविधाहरू प्राप्त गर्नुहोस्</translation>
-<translation id="1543538514740974167">यो पृष्ठमा अझ छिटो पुग्नुहोस्</translation>
 <translation id="1544826120773021464">आफ्नो Google खाताको व्यवस्थापन गर्न "खाताको व्यवस्थापन गर्नुहोस्" नामक बटनमा क्लिक गर्नुहोस्</translation>
 <translation id="1549000191223877751">अर्को विन्डोमा सार्नुहोस्</translation>
 <translation id="1553358976309200471">Chrome अपडेट गर्नुहोस्</translation>
@@ -497,7 +495,6 @@
 <translation id="4587589328781138893">साइटहरू</translation>
 <translation id="4594952190837476234">यो पृष्ठ <ph name="CREATION_TIME" /> मा सिर्जना गरिएको हुँदा अनलाइन संस्करणभन्दा भिन्न हुन सक्छ।</translation>
 <translation id="4605958867780575332">हटाइएको वस्तु: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">यी पृष्ठहरू पछि पढ्ने प्रयोजनका लागि सुरक्षित गर्नुहोस् र रिमाइन्डर प्राप्त गर्नुहोस्</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> खोल्नुहोस्</translation>
 <translation id="4634124774493850572">पासवर्ड प्रयोग गर्नुहोस्</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{अरूले देखेको १ पासवर्ड फेला पर्‍यो}other{अरूले देखेका # वटा पासवर्ड फेला परे}}</translation>
@@ -876,7 +873,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> रिस्टोर गरियो</translation>
 <translation id="7029809446516969842">पासवर्डहरू</translation>
 <translation id="7030675613184250187">तपाईं पृष्ठहरूलाई आफ्नो अध्ययन सूचीमा सुरक्षित गरी ती पृष्ठ पछि फेरि फेला पार्न वा इन्टरनेट नभएका बेलामा पढ्न सक्नुहुन्छ</translation>
-<translation id="703523980599857277">गृहपृष्ठ परिवर्तन गर्नुहोस्</translation>
 <translation id="7054588988317389591">फोटोका विवरणहरू प्राप्त गर्न चाहनुहुन्छ?</translation>
 <translation id="7055152154916055070">रिडिरेक्ट नामक सुविधामाथि रोक लगाइयो:</translation>
 <translation id="7063006564040364415">समक्रमण सर्भरमा जडान गर्न सकेन।</translation>
@@ -887,7 +883,6 @@
 <translation id="7088681679121566888">Chrome अपडेट छ</translation>
 <translation id="7106762743910369165">तपाईंको संगठनले तपाईंको ब्राउजर व्यवस्थापन गर्छ</translation>
 <translation id="7121362699166175603">ठेगाना पट्टीका इतिहास र स्वतः पूर्णताहरूलाई खाली गर्छ। तपाईंको Google खाताको <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> मा अन्य किसिमका ब्राउजिङ इतिहास रहेका हुन सक्छन्।</translation>
-<translation id="7128355412245153445">होम बटनमा ट्याप गर्ने बित्तिकै आफ्ना शीर्ष साइट तथा ताजा समाचार देखिने बनाउनुहोस्</translation>
 <translation id="7138678301420049075">अन्य</translation>
 <translation id="7146622961999026732">यी साइट र एपहरू तपाईंका लागि महत्त्वपूर्ण हुन सक्छन्:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> को <ph name="BEGIN_LINK" />मूल पृष्ठ लोड गर्नुहोस्<ph name="END_LINK" /></translation>
@@ -1077,7 +1072,6 @@
 <translation id="8407396331882458341">१. <ph name="APP_NAME" /> छनौट गर्नुहोस्\n2. “सधैँ” मा ट्याप गर्नुहोस्</translation>
 <translation id="8410695015584479363">मूल्यहरू ट्र्याक गर्नुहोस्</translation>
 <translation id="8413126021676339697">पूर्ण इतिहास देखाउनुहोस्</translation>
-<translation id="8425213833346101688">परिवर्तन गर्नुहोस्</translation>
 <translation id="8427875596167638501">पूर्वावलोकन ट्याब आधा खुला छ</translation>
 <translation id="8428213095426709021">सेटिङहरू</translation>
 <translation id="8438566539970814960">खोज तथा ब्राउजिङलाई अझ राम्रो बनाउनुहोस्</translation>
@@ -1195,7 +1189,6 @@
 <translation id="926205370408745186">आफूले Chrome मा गरेका क्रियाकलाप डिजिटल वेलबिइङबाट हटाउनुहोस्</translation>
 <translation id="927968626442779827">Google Chrome को लाइट मोड प्रयोग गर्नुहोस्</translation>
 <translation id="932327136139879170">गृहपृष्ठ</translation>
-<translation id="93753284658583800">गृहपृष्ठ परिवर्तन गरियो</translation>
 <translation id="938850635132480979">त्रुटि: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">पासफ्रेज प्रविष्टि गर्नुहोस्</translation>
 <translation id="948039501338975565">पुस्तक चिन्ह लगाइएका फोल्डरहरूको सूची</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index 70aa583..7eaff4c57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Schakel synchronisatie in om verschillende apparaten te synchroniseren en te personaliseren</translation>
 <translation id="1209206284964581585">Voorlopig verbergen</translation>
 <translation id="1227058898775614466">Navigatiegeschiedenis</translation>
-<translation id="1229399675748764149">Deze pagina instellen als je homepage</translation>
 <translation id="1231733316453485619">Synchronisatie inschakelen?</translation>
 <translation id="123724288017357924">De pagina opnieuw laden, gecachte content negeren</translation>
 <translation id="124678866338384709">Huidig tabblad sluiten</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Wachtwoord verwijderen</translation>
 <translation id="1521774566618522728">Vandaag actief</translation>
 <translation id="1538801903729528855">Betere spraakfunctionaliteit op internet</translation>
-<translation id="1543538514740974167">Sneller terugkeren</translation>
 <translation id="1544826120773021464">Tik op de knop 'Account beheren' om je Google-account te beheren</translation>
 <translation id="1549000191223877751">Naar ander venster</translation>
 <translation id="1553358976309200471">Chrome updaten</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Deze offline pagina is van <ph name="CREATION_TIME" /> en kan afwijken van de online versie.</translation>
 <translation id="4605958867780575332">Item verwijderd: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Pagina's opslaan voor later en een herinnering krijgen</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> openen</translation>
 <translation id="4634124774493850572">Wachtwoord gebruiken</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 gehackt wachtwoord}other{# gehackte wachtwoorden}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> is hersteld</translation>
 <translation id="7029809446516969842">Wachtwoorden</translation>
 <translation id="7030675613184250187">Je kunt pagina's opslaan in je leeslijst zodat je ze later kunt terugvinden of offline kunt lezen</translation>
-<translation id="703523980599857277">Homepage wijzigen</translation>
 <translation id="7054588988317389591">Afbeeldingsbeschrijvingen ophalen?</translation>
 <translation id="7055152154916055070">Omleiding geblokkeerd:</translation>
 <translation id="7063006564040364415">Kan geen verbinding maken met synchronisatieserver.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome is up-to-date</translation>
 <translation id="7106762743910369165">Je browser wordt beheerd door je organisatie</translation>
 <translation id="7121362699166175603">Hiermee worden de geschiedenis en automatische aanvullingen voor de adresbalk gewist. Er kunnen andere vormen van browsegeschiedenis zijn opgeslagen voor je Google-account op <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Zie je topsites en recente artikelen als je op de startknop tikt</translation>
 <translation id="7138678301420049075">Overige</translation>
 <translation id="7146622961999026732">Zo te zien zijn deze sites en apps belangrijk voor jou:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Oorspronkelijke pagina laden <ph name="END_LINK" /> van <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Kies <ph name="APP_NAME" />.\n2. Tik op Altijd.</translation>
 <translation id="8410695015584479363">Prijzen volgen</translation>
 <translation id="8413126021676339697">Hele geschiedenis bekijken</translation>
-<translation id="8425213833346101688">Wijzigen</translation>
 <translation id="8427875596167638501">Voorbeeldtabblad is half geopend</translation>
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8438566539970814960">Zoekopdrachten en browsefunctionaliteit verbeteren</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Je Chrome-activiteit verwijderen uit Digitaal welzijn</translation>
 <translation id="927968626442779827">Lite-versie van Google Chrome gebruiken</translation>
 <translation id="932327136139879170">Homepage</translation>
-<translation id="93753284658583800">Homepage gewijzigd</translation>
 <translation id="938850635132480979">Fout: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Wachtwoordzin opgeven</translation>
 <translation id="948039501338975565">Lijst met bookmarkmappen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 328e47e06..42ee5b6a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">For å synkronisere og gi et personlig preg på alle enhetene, slå på synkronisering</translation>
 <translation id="1209206284964581585">Skjul for øyeblikket</translation>
 <translation id="1227058898775614466">Navigeringslogg</translation>
-<translation id="1229399675748764149">Angi denne siden som startside</translation>
 <translation id="1231733316453485619">Vil du slå på synkronisering?</translation>
 <translation id="123724288017357924">Last inn siden på nytt, men ignorer bufret innhold</translation>
 <translation id="124678866338384709">Lukk den aktive fanen</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Slett passordet</translation>
 <translation id="1521774566618522728">Aktiv i dag</translation>
 <translation id="1538801903729528855">Bruk stemmen til å oppleve nettet på en ny måte</translation>
-<translation id="1543538514740974167">Kom hit raskere</translation>
 <translation id="1544826120773021464">For å administrere Google-kontoen din, trykk på «Administrer kontoen»-knappen</translation>
 <translation id="1549000191223877751">Flytt til det andre vinduet</translation>
 <translation id="1553358976309200471">Oppdater Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Nettsteder</translation>
 <translation id="4594952190837476234">Denne siden uten nett er fra <ph name="CREATION_TIME" /> og kan avvike fra nettversjonen.</translation>
 <translation id="4605958867780575332">Elementet er fjernet: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Lagre sider til senere, og få en påminnelse</translation>
 <translation id="4616150815774728855">Åpne <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Bruk passord</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 passord er utsatt for sikkerhetsbrudd}other{# passord er utsatt for sikkerhetsbrudd}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Gjenopprettet <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Passord</translation>
 <translation id="7030675613184250187">Du kan lagre sider i leselisten for å finne dem igjen senere eller lese dem uten nett</translation>
-<translation id="703523980599857277">Endre startsiden</translation>
 <translation id="7054588988317389591">Vil du ha bildebeskrivelser?</translation>
 <translation id="7055152154916055070">Viderekoblingen er blokkert:</translation>
 <translation id="7063006564040364415">Kunne ikke koble til synkroniseringstjeneren.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome er oppdatert</translation>
 <translation id="7106762743910369165">Nettleseren administreres av organisasjonen din</translation>
 <translation id="7121362699166175603">Tømmer loggen og fjerner autofullføringer i adressefeltet. Det kan hende Google-kontoen din har andre typer nettleserlogger på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Se toppnettsteder og de siste nyhetssakene når du trykker på Hjem-knappen</translation>
 <translation id="7138678301420049075">Annet</translation>
 <translation id="7146622961999026732">Disse nettstedene og appene ser ut til å være viktige for deg:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Last inn original side<ph name="END_LINK" /> fra <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Velg <ph name="APP_NAME" />\n2. Trykk på «Alltid»</translation>
 <translation id="8410695015584479363">Spor priser</translation>
 <translation id="8413126021676339697">Vis fullstendig logg</translation>
-<translation id="8425213833346101688">Endre</translation>
 <translation id="8427875596167638501">Fanen for forhåndsvisning er halvveis åpnet</translation>
 <translation id="8428213095426709021">Innstillinger</translation>
 <translation id="8438566539970814960">Gjør søking og surfing bedre</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Fjerne Chrome-aktiviteten din fra Digital balanse</translation>
 <translation id="927968626442779827">Bruk forenklet modus i Google Chrome</translation>
 <translation id="932327136139879170">Gå til startsiden</translation>
-<translation id="93753284658583800">Startsiden er endret</translation>
 <translation id="938850635132480979">Feil: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Angi en passordfrase</translation>
 <translation id="948039501338975565">Liste over bokmerkemapper</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index 6f6726e..fff69c7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ସମସ୍ତ ଡିଭାଇସ୍‌ଗୁଡ଼ିକରେ ସିଙ୍କ୍ ଏବଂ ବ୍ୟକ୍ତିଗତକୃତ କରିବାକୁ, ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ</translation>
 <translation id="1209206284964581585">ବର୍ତ୍ତମାନ ପାଇଁ ଲୁଚାନ୍ତୁ</translation>
 <translation id="1227058898775614466">ନାଭିଗେସନ୍ ଇତିହାସ</translation>
-<translation id="1229399675748764149">ଏହି ପୃଷ୍ଠାକୁ ଆପଣଙ୍କ ମୂଳପୃଷ୍ଠା କରନ୍ତୁ</translation>
 <translation id="1231733316453485619">ସିଙ୍କ୍ ଚାଲୁ କରିବେ?</translation>
 <translation id="123724288017357924">କ୍ୟାଶ୍ ବିଷୟବସ୍ତୁ ଏଡ଼ାଇ ବର୍ତ୍ତମାନ ପୃଷ୍ଠା ପୁନଃଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="124678866338384709">ସାମ୍ପ୍ରତିକ ଟାବ୍ ବନ୍ଦ କରନ୍ତୁ</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">ପାସ୍‍ୱାର୍ଡକୁ ଡିଲିଟ୍ କରନ୍ତୁ</translation>
 <translation id="1521774566618522728">ଆଜି ସକ୍ରିୟ ଅଛି</translation>
 <translation id="1538801903729528855">ୱେବରେ ଏକ ଉନ୍ନତ ଭଏସ୍ ଅନୁଭୂତି ପାଆନ୍ତୁ</translation>
-<translation id="1543538514740974167">ଏଠାରେ ଶୀଘ୍ର ପହଞ୍ଚନ୍ତୁ</translation>
 <translation id="1544826120773021464">ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ ପରିଚାଳନା କରିବାକୁ, "ଆକାଉଣ୍ଟ ପରିଚାଳନା କରନ୍ତୁ" ବଟନ୍‌ରେ ଟାପ୍ କରନ୍ତୁ</translation>
 <translation id="1549000191223877751">ଅନ୍ୟ ୱିଣ୍ଡୋକୁ ଯାଆନ୍ତୁ</translation>
 <translation id="1553358976309200471">Chrome ଅପ୍‍‍‍‍‍ଡେଟ୍‌</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">ଏହି ପୃଷ୍ଠା <ph name="CREATION_TIME" />ର ଅଟେ ଏବଂ ଅନ୍‌ଲାଇନ୍ ସଂସ୍କରଣ ଠାରୁ ଅଲଗା ହୋଇପାରେ।</translation>
 <translation id="4605958867780575332">କଢ଼ାଯାଇଥିବା ଆଇଟମ୍: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପରବର୍ତ୍ତୀ ସମୟ ପାଇଁ ସେଭ୍ କରନ୍ତୁ ଏବଂ ଏକ ରିମାଇଣ୍ଡର୍ ପାଆନ୍ତୁ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ଖୋଲନ୍ତୁ</translation>
 <translation id="4634124774493850572">ପାସ୍‌ୱର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1ଟି ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ}other{#ଟି ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ରିଷ୍ଟୋର୍ କରାଯାଇଛି</translation>
 <translation id="7029809446516969842">ପାସୱାର୍ଡଗୁଡିକ</translation>
 <translation id="7030675613184250187">ଆପଣ ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକାରେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ସେଭ୍ କରିପାରିବେ ଯାହା ଫଳରେ ଆପଣ ପୁଣି ସେଗୁଡ଼ିକୁ ପାଇପାରିବେ ବା ଅଫଲାଇନରେ ପଢ଼ିପାରିବେ</translation>
-<translation id="703523980599857277">ମୂଳପୃଷ୍ଠା ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
 <translation id="7054588988317389591">ଛବିର ବର୍ଣ୍ଣନା ପାଇବାକୁ ଚାହାଁନ୍ତି କି?</translation>
 <translation id="7055152154916055070">ରିଡାଇରେକ୍ଟକୁ ଅବରୋଧ କରାଯାଇଛି:</translation>
 <translation id="7063006564040364415">ସିଙ୍କ ସର୍ଭର ସହ ସଂଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ।</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ଅପ୍ ଟୁ ଡେଟ୍ ଅଛି</translation>
 <translation id="7106762743910369165">ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ଆପଣଙ୍କର ବ୍ରାଉଜର୍ ପରିଚାଳିତ ହୋଇଥାଏ</translation>
 <translation id="7121362699166175603">ଠିକଣା ବାର୍‍‍ରେ ଥିବା ଇତିବୃତ୍ତି ଓ ସ୍ୱତଃପୂରଣଗୁଡ଼ିକୁ ଖାଲି କରେ। ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟର ବାଉଜିଂ ଇତିବୃତ୍ତି <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />ରେ ଅନ୍ୟ ଫର୍ମରେ ଥାଇପାରେ।</translation>
-<translation id="7128355412245153445">ଯେତେବେଳେ ବି ଆପଣ ହୋମ୍ ବଟନ୍ ଟାପ୍ କରନ୍ତି, ଆପଣଙ୍କ ଶ୍ରେଷ୍ଠ ସାଇଟ୍ ଏବଂ ବର୍ତ୍ତମାନର କାହାଣୀଗୁଡ଼ିକ ଦେଖନ୍ତି</translation>
 <translation id="7138678301420049075">ଅନ୍ୟ</translation>
 <translation id="7146622961999026732">ଏହି ସାଇଟ୍ ଏବଂ ଆପଗୁଡ଼ିକ ଆପଣଙ୍କ ପାଇଁ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ପରି ଜଣାପଡ଼ୁଛି:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" />ରୁ <ph name="BEGIN_LINK" />ମୂଳ ପୃଷ୍ଠା ଲୋଡ୍‌ କରନ୍ତୁ<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> ବାଛନ୍ତୁ\n2. “ସର୍ବଦା”ରେ ଟାପ୍ କରନ୍ତୁ</translation>
 <translation id="8410695015584479363">ମୂଲ୍ୟଗୁଡ଼ିକୁ ଟ୍ରାକ୍ କରନ୍ତୁ</translation>
 <translation id="8413126021676339697">ସମ୍ପୂର୍ଣ୍ଣ ଇତିବୃତ୍ତି ଦେଖାନ୍ତୁ</translation>
-<translation id="8425213833346101688">ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
 <translation id="8427875596167638501">ପ୍ରିଭ୍ୟୁ ଟାବ୍ ଅଧା ଖୋଲା ଅଛି</translation>
 <translation id="8428213095426709021">ସେଟିଂସ୍</translation>
 <translation id="8438566539970814960">ସନ୍ଧାନ ଓ ବ୍ରାଉଜିଂକୁ ଉନ୍ନତ କରନ୍ତୁ</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ଡିଜିଟାଲ୍ ୱେଲ୍‍ବିଂରୁ ଆପଣଙ୍କର Chrome କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ କାଢ଼ନ୍ତୁ</translation>
 <translation id="927968626442779827">Google Chromeରେ ଲାଇଟ୍ ମୋଡ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="932327136139879170">Home</translation>
-<translation id="93753284658583800">ମୂଳପୃଷ୍ଠା ପରିବର୍ତ୍ତନ କରାଯାଇଛି</translation>
 <translation id="938850635132480979">ତ୍ରୁଟି: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">ପାସ୍‌-ଫ୍ରେଜ୍ ଲେଖନ୍ତୁ</translation>
 <translation id="948039501338975565">ବୁକମାର୍କ ଫୋଲ୍ଡରଗୁଡ଼ିକର ତାଲିକା</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index 99d7f23..94bdcc3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ ਸਮਕਾਲੀਕਰਨ ਕਰਨ ਅਤੇ ਵਿਅਕਤੀਗਤ ਬਣਾਉਣ ਲਈ, ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="1209206284964581585">ਫਿਲਹਾਲ ਲੁਕਾਓ</translation>
 <translation id="1227058898775614466">ਨੈਵੀਗੇਸ਼ਨ ਇਤਿਹਾਸ</translation>
-<translation id="1229399675748764149">ਇਸ ਪੰਨੇ ਨੂੰ ਆਪਣਾ ਹੋਮਪੇਜ ਬਣਾਓ</translation>
 <translation id="1231733316453485619">ਕੀ ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰਨਾ ਹੈ?</translation>
 <translation id="123724288017357924">ਕੈਸ਼ੇ ਕੀਤੀ ਸਮੱਗਰੀ ਨੂੰ ਅਣਡਿੱਠ ਕਰਕੇ ਮੌਜੂਦਾ ਪੰਨਾ ਰੀਲੋਡ ਕਰੋ</translation>
 <translation id="124678866338384709">ਮੌਜੂਦਾ ਟੈਬ ਬੰਦ ਕਰੋ</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">ਪਾਸਵਰਡ ਮਿਟਾਓ</translation>
 <translation id="1521774566618522728">ਅੱਜ ਕਿਰਿਆਸ਼ੀਲ</translation>
 <translation id="1538801903729528855">ਵੈੱਬ 'ਤੇ ਬਿਹਤਰ ਅਵਾਜ਼ੀ ਅਨੁਭਵ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
-<translation id="1543538514740974167">ਤੇਜ਼ੀ ਨਾਲ ਇੱਥੇ ਪਹੁੰਚੋ</translation>
 <translation id="1544826120773021464">ਆਪਣੇ Google ਖਾਤੇ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ, "ਖਾਤੇ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ" ਬਟਨ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="1549000191223877751">ਹੋਰ ਵਿੰਡੋ 'ਤੇ ਤਬਦੀਲ ਕਰੋ</translation>
 <translation id="1553358976309200471">Chrome ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">ਸਾਈਟਾਂ</translation>
 <translation id="4594952190837476234">ਇਹ ਆਫ਼ਲਾਈਨ ਪੰਨਾ <ph name="CREATION_TIME" /> ਦਾ ਹੈ ਅਤੇ ਆਨਲਾਈਨ ਵਰਜਨ ਤੋਂ ਵੱਖਰਾ ਹੋ ਸਕਦਾ ਹੈ।</translation>
 <translation id="4605958867780575332">ਆਈਟਮਾਂ ਹਟਾਈਆਂ ਗਈਆਂ: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">ਪੰਨਿਆਂ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਪੜ੍ਹਣ ਲਈ ਰੱਖਿਅਤ ਕਰੋ ਅਤੇ ਇਸ ਲਈ ਇੱਕ ਰਿਮਾਈਂਡਰ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ਖੋਲ੍ਹੋ</translation>
 <translation id="4634124774493850572">ਪਾਸਵਰਡ ਵਰਤੋ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ਪਾਸਵਰਡ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}one{# ਪਾਸਵਰਡ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}other{# ਪਾਸਵਰਡਾਂ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="7029809446516969842">ਪਾਸਵਰਡ</translation>
 <translation id="7030675613184250187">ਪੰਨਿਆਂ ਨੂੰ ਦੁਬਾਰਾ ਲੱਭਣ ਜਾਂ ਆਫ਼ਲਾਈਨ ਪੜ੍ਹਨ ਲਈ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਆਪਣੀ ਪੜ੍ਹਨ-ਸੂਚੀ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰ ਸਕਦੇ ਹੋ</translation>
-<translation id="703523980599857277">ਹੋਮਪੇਜ ਬਦਲੋ</translation>
 <translation id="7054588988317389591">ਕੀ ਚਿੱਤਰ ਵਰਣਨ ਪ੍ਰਾਪਤ ਕਰਨੇ ਹਨ?</translation>
 <translation id="7055152154916055070">ਇਸ ਰੀਡਾਇਰੈਕਟ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ:</translation>
 <translation id="7063006564040364415">ਸਿੰਕ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਿਆ।</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome ਅੱਪ-ਟੂ-ਡੇਟ ਹੈ</translation>
 <translation id="7106762743910369165">ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="7121362699166175603">ਪਤਾ ਬਾਰ ਵਿੱਚ ਇਤਿਹਾਸ ਅਤੇ ਸਵੈ-ਮੁਕੰਮਲ ਚੀਜ਼ਾਂ ਨੂੰ ਕਲੀਅਰ ਕਰੋ। ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 'ਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਇਤਿਹਾਸ ਦੀਆਂ ਹੋਰ ਕਿਸਮਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ।</translation>
-<translation id="7128355412245153445">ਹੋਮ ਬਟਨ 'ਤੇ ਟੈਪ ਕਰਨ 'ਤੇ ਆਪਣੀਆਂ ਪ੍ਰਮੁੱਖ ਸਾਈਟਾਂ ਅਤੇ ਹਾਲੀਆ ਕਹਾਣੀਆਂ ਦੇਖੋ</translation>
 <translation id="7138678301420049075">ਹੋਰ</translation>
 <translation id="7146622961999026732">ਇਹ ਸਾਈਟਾਂ ਅਤੇ ਐਪਾਂ ਤੁਹਾਡੇ ਲਈ ਮਹੱਤਵਪੂਰਨ ਲੱਗ ਰਹੀਆਂ ਹਨ:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> ਤੋਂ <ph name="BEGIN_LINK" />ਮੂਲ ਪੰਨਾ ਲੋਡ ਕਰੋ<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> ਚੁਣੋ\n2. “ਹਮੇਸ਼ਾਂ” 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="8410695015584479363">ਕੀਮਤਾਂ 'ਤੇ ਨਜ਼ਰ ਰੱਖੋ</translation>
 <translation id="8413126021676339697">ਪੂਰਾ ਇਤਿਹਾਸ ਦਿਖਾਓ</translation>
-<translation id="8425213833346101688">ਬਦਲੋ</translation>
 <translation id="8427875596167638501">ਪੂਰਵ-ਝਲਕ ਟੈਬ ਅੱਧੀ ਖੁੱਲ੍ਹੀ ਹੋਈ ਹੈ</translation>
 <translation id="8428213095426709021">ਸੈਟਿੰਗਾਂ</translation>
 <translation id="8438566539970814960">ਖੋਜਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਬਿਹਤਰ ਬਣਾਓ</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ਡਿਜੀਟਲ ਜੀਵਨਸ਼ੈਲੀ ਤੋਂ ਆਪਣੀ Chrome ਸਰਗਰਮੀ ਹਟਾਓ</translation>
 <translation id="927968626442779827">Google Chrome 'ਤੇ ਲਾਈਟ ਮੋਡ ਵਰਤੋ</translation>
 <translation id="932327136139879170">ਹੋਮ</translation>
-<translation id="93753284658583800">ਹੋਮਪੇਜ ਬਦਲ ਦਿੱਤਾ ਗਿਆ</translation>
 <translation id="938850635132480979">ਗੜਬੜ: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">ਪਾਸਫਰੇਜ਼ ਦਾਖਲ ਕਰੋ</translation>
 <translation id="948039501338975565">ਬੁੱਕਮਾਰਕ ਫੋਲਡਰਾਂ ਦੀ ਸੂਚੀ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index a26698b..951fb4d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Aby synchronizować i personalizować wszystkie swoje urządzenia, włącz synchronizację</translation>
 <translation id="1209206284964581585">Na razie ukryj</translation>
 <translation id="1227058898775614466">Historia nawigacji</translation>
-<translation id="1229399675748764149">Ustaw tę stronę jako stronę główną</translation>
 <translation id="1231733316453485619">Włączyć synchronizację?</translation>
 <translation id="123724288017357924">Ponowie załaduj stronę, bez pamięci podręcznej</translation>
 <translation id="124678866338384709">Zamknij bieżącą kartę</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Usuń hasło</translation>
 <translation id="1521774566618522728">Aktywność: dzisiaj</translation>
 <translation id="1538801903729528855">Korzystaj z dodatkowych możliwości funkcji głosowych w internecie</translation>
-<translation id="1543538514740974167">Szybciej do celu</translation>
 <translation id="1544826120773021464">Aby zarządzać kontem Google, kliknij przycisk „Zarządzaj kontem”</translation>
 <translation id="1549000191223877751">Przenieś do innego okna</translation>
 <translation id="1553358976309200471">Zaktualizuj Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Witryny</translation>
 <translation id="4594952190837476234">Ta strona offline jest z <ph name="CREATION_TIME" /> i może różnić się od wersji online.</translation>
 <translation id="4605958867780575332">Usunięto element: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Zapisz strony na później i ustaw przypomnienie</translation>
 <translation id="4616150815774728855">Otwórz <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Użyj hasła</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 przejęte hasło}few{# przejęte hasła}many{# przejętych haseł}other{# przejętego hasła}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Przywrócono: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Hasła</translation>
 <translation id="7030675613184250187">Na liście Do przeczytania możesz zapisywać strony, które chcesz przeczytać ponownie lub do których chcesz mieć dostęp offline</translation>
-<translation id="703523980599857277">Zmień stronę główną</translation>
 <translation id="7054588988317389591">Czy chcesz pobierać opisy obrazów?</translation>
 <translation id="7055152154916055070">Zablokowano przekierowanie:</translation>
 <translation id="7063006564040364415">Nie udało się nawiązać połączenia z serwerem synchronizacji.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Masz aktualną wersję Chrome</translation>
 <translation id="7106762743910369165">Przeglądarka jest zarządzana przez Twoją organizację</translation>
 <translation id="7121362699166175603">Usuwa historię i pamięć autouzupełniania na pasku adresu. Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Zobacz najczęściej odwiedzane strony i ostatnie artykuły po naciśnięciu przycisku strony głównej</translation>
 <translation id="7138678301420049075">Inne</translation>
 <translation id="7146622961999026732">Wygląda na to, że te strony i aplikacje są dla Ciebie ważne:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Załaduj oryginalną stronę<ph name="END_LINK" /> z domeny <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Wybierz aplikację <ph name="APP_NAME" />\n2. Kliknij „Zawsze”</translation>
 <translation id="8410695015584479363">Monitoruj ceny</translation>
 <translation id="8413126021676339697">Wyświetl całą historię</translation>
-<translation id="8425213833346101688">Zmień</translation>
 <translation id="8427875596167638501">Karta podglądu jest otwarta w połowie</translation>
 <translation id="8428213095426709021">Ustawienia</translation>
 <translation id="8438566539970814960">Ulepsz wyszukiwanie i przeglądanie</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Usuwa Twoją aktywność w Chrome z Cyfrowej równowagi</translation>
 <translation id="927968626442779827">Użyj wersji uproszczonej w Google Chrome</translation>
 <translation id="932327136139879170">Strona główna</translation>
-<translation id="93753284658583800">Strona główna została zmieniona</translation>
 <translation id="938850635132480979">Błąd: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Wpisz hasło</translation>
 <translation id="948039501338975565">Lista folderów zakładek</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 1e775661..c9b86b0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Para sincronizar e personalizar vários dispositivos, ative a sincronização</translation>
 <translation id="1209206284964581585">Ocultar por enquanto</translation>
 <translation id="1227058898775614466">Histórico de navegação</translation>
-<translation id="1229399675748764149">Torne esta a sua página inicial</translation>
 <translation id="1231733316453485619">Ativar sincronização?</translation>
 <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation>
 <translation id="124678866338384709">Fechar a guia atual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Excluir senha</translation>
 <translation id="1521774566618522728">Ativado hoje</translation>
 <translation id="1538801903729528855">Tenha uma experiência de voz melhor na Web</translation>
-<translation id="1543538514740974167">Acessar esta página mais rapidamente</translation>
 <translation id="1544826120773021464">Para gerenciar sua Conta do Google, toque no botão "Gerenciar conta".</translation>
 <translation id="1549000191223877751">Mover para outra janela</translation>
 <translation id="1553358976309200471">Atualizar o Google Chrome</translation>
@@ -499,7 +497,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Esta página off-line é de <ph name="CREATION_TIME" /> e pode ser diferente da versão on-line.</translation>
 <translation id="4605958867780575332">Item removido: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Salve páginas e receba uma notificação mais tarde</translation>
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar senha</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 senha comprometida}one{# senha comprometida}other{# senhas comprometidas}}</translation>
@@ -878,7 +875,6 @@
 <translation id="7027549951530753705">Download de <ph name="ITEM_TITLE" /> restaurado</translation>
 <translation id="7029809446516969842">Senhas</translation>
 <translation id="7030675613184250187">É possível salvar páginas na sua lista de leituras para encontrá-las novamente com facilidade ou ler off-line</translation>
-<translation id="703523980599857277">Mudar página inicial</translation>
 <translation id="7054588988317389591">Ver descrições de imagens?</translation>
 <translation id="7055152154916055070">Redirecionamento bloqueado:</translation>
 <translation id="7063006564040364415">Não foi possível conectar ao servidor de sincronização.</translation>
@@ -889,7 +885,6 @@
 <translation id="7088681679121566888">O Chrome está atualizado</translation>
 <translation id="7106762743910369165">O navegador é gerenciado pela sua organização</translation>
 <translation id="7121362699166175603">Limpa o histórico e os preenchimentos automáticos na barra de endereço. Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Veja os principais sites e as matérias recentes sempre que tocar no botão home</translation>
 <translation id="7138678301420049075">Outro</translation>
 <translation id="7146622961999026732">Estes sites e apps parecem importantes para você:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Carregar página original<ph name="END_LINK" /> de <ph name="DOMAIN_NAME" /></translation>
@@ -1079,7 +1074,6 @@
 <translation id="8407396331882458341">1. Selecione o app <ph name="APP_NAME" />.\n2. Toque em "Sempre".</translation>
 <translation id="8410695015584479363">Monitorar preços</translation>
 <translation id="8413126021676339697">Mostrar histórico completo</translation>
-<translation id="8425213833346101688">Alterar</translation>
 <translation id="8427875596167638501">A guia "Visualizar" está parcialmente aberta</translation>
 <translation id="8428213095426709021">Configurações</translation>
 <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
@@ -1197,7 +1191,6 @@
 <translation id="926205370408745186">Remover sua atividade do Chorme do Bem-estar digital</translation>
 <translation id="927968626442779827">Use o Modo Lite no Google Chrome</translation>
 <translation id="932327136139879170">Início</translation>
-<translation id="93753284658583800">Página inicial modificada</translation>
 <translation id="938850635132480979">Erro: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Inserir senha</translation>
 <translation id="948039501338975565">Lista de pastas de favoritos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index 9b4a829..d962e48 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Para sincronizar e personalizar entre dispositivos, ative a sincronização.</translation>
 <translation id="1209206284964581585">Ocultar para já</translation>
 <translation id="1227058898775614466">Histórico de navegação</translation>
-<translation id="1229399675748764149">Tornar esta página a sua página inicial</translation>
 <translation id="1231733316453485619">Pretende ativar a sincronização?</translation>
 <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation>
 <translation id="124678866338384709">Fechar o separador atual</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Eliminar palavra-passe</translation>
 <translation id="1521774566618522728">Ativo hoje</translation>
 <translation id="1538801903729528855">Obtenha uma melhor experiência de voz na Web</translation>
-<translation id="1543538514740974167">Aceda aqui mais rapidamente</translation>
 <translation id="1544826120773021464">Para gerir a sua Conta Google, toque no botão "Gerir conta".</translation>
 <translation id="1549000191223877751">Mover para outra janela</translation>
 <translation id="1553358976309200471">Atualizar o Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Esta página foi criada a <ph name="CREATION_TIME" /> e pode ser diferente da versão online.</translation>
 <translation id="4605958867780575332">Item removido: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Guarde páginas para mais tarde e receba um lembrete</translation>
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar palavra-passe</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 palavra-passe comprometida.}other{# palavras-passe comprometidas.}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> restaurado</translation>
 <translation id="7029809446516969842">Palavras-passe</translation>
 <translation id="7030675613184250187">Pode guardar páginas na sua lista de leitura para as encontrar novamente ou para as ler offline.</translation>
-<translation id="703523980599857277">Alterar página inicial</translation>
 <translation id="7054588988317389591">Pretende obter descrições de imagens?</translation>
 <translation id="7055152154916055070">Redirecionamento bloqueado:</translation>
 <translation id="7063006564040364415">Não foi possível estabelecer ligação ao servidor de sincronização.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">O Chrome está atualizado.</translation>
 <translation id="7106762743910369165">O seu navegador é gerido pela sua entidade</translation>
 <translation id="7121362699166175603">Limpa o histórico e os preenchimentos automáticos na barra de endereço. A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Veja os seus sites principais e notícias recentes sempre que tocar no botão página inicial.</translation>
 <translation id="7138678301420049075">Outros</translation>
 <translation id="7146622961999026732">Estes sites e apps parecem ser importantes para si:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Carregar página original<ph name="END_LINK" /> do domínio <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Escolha o <ph name="APP_NAME" />.\n2. Toque em "Sempre".</translation>
 <translation id="8410695015584479363">Monitorizar preços</translation>
 <translation id="8413126021676339697">Mostrar histórico completo</translation>
-<translation id="8425213833346101688">Alterar</translation>
 <translation id="8427875596167638501">O separador Pré-visualização está aberto até meio.</translation>
 <translation id="8428213095426709021">Definições</translation>
 <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Remova a atividade do Chrome do Bem-estar digital</translation>
 <translation id="927968626442779827">Utilize o Modo Lite no Google Chrome.</translation>
 <translation id="932327136139879170">Página inicial</translation>
-<translation id="93753284658583800">Página inicial alterada.</translation>
 <translation id="938850635132480979">Erro: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Introduzir frase de acesso</translation>
 <translation id="948039501338975565">Lista de pastas de marcadores</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index cd03d64..27d2301c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Pentru a sincroniza și a personaliza pe toate dispozitivele, activează sincronizarea</translation>
 <translation id="1209206284964581585">Ascunde momentan</translation>
 <translation id="1227058898775614466">Istoric de navigare</translation>
-<translation id="1229399675748764149">Setează pagina ca pagină de pornire</translation>
 <translation id="1231733316453485619">Activezi sincronizarea?</translation>
 <translation id="123724288017357924">Reîncarcă pagina, ignorând conținutul din cache</translation>
 <translation id="124678866338384709">Închide fila actuală</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Șterge parola</translation>
 <translation id="1521774566618522728">Activ astăzi</translation>
 <translation id="1538801903729528855">Bucură-te de o experiență vocală mai bună pe web</translation>
-<translation id="1543538514740974167">Accesează mai rapid</translation>
 <translation id="1544826120773021464">Pentru a gestiona contul Google, atinge butonul „Gestionează contul”</translation>
 <translation id="1549000191223877751">Mută în altă fereastră</translation>
 <translation id="1553358976309200471">Actualizează Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Site-uri</translation>
 <translation id="4594952190837476234">Această pagină offline este din data de <ph name="CREATION_TIME" /> și poate fi diferită de versiunea online.</translation>
 <translation id="4605958867780575332">Element eliminat: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Salvează paginile pentru mai târziu și primește un memento</translation>
 <translation id="4616150815774728855">Deschide <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Folosește parola</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{O parolă compromisă}few{# parole compromise}other{# de parole compromise}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">S-a restabilit <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Parole</translation>
 <translation id="7030675613184250187">Poți să salvezi pagini în lista de lectură ca să le regăsești sau să le citești offline</translation>
-<translation id="703523980599857277">Modifică pagina de pornire</translation>
 <translation id="7054588988317389591">Vrei să generezi descrieri ale imaginilor?</translation>
 <translation id="7055152154916055070">Redirecționarea a fost blocată:</translation>
 <translation id="7063006564040364415">Nu s-a putut stabili conexiunea cu serverul de sincronizare.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome este actualizat</translation>
 <translation id="7106762743910369165">Browserul este gestionat de organizația ta</translation>
 <translation id="7121362699166175603">Șterge istoricul și completările automate din bara de adrese. Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Vezi principalele site-uri și subiectele recente când atingi butonul ecran de pornire</translation>
 <translation id="7138678301420049075">Altele</translation>
 <translation id="7146622961999026732">Următoarele site-uri și aplicații par importante pentru tine:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Încarcă pagina originală<ph name="END_LINK" /> de la <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Alege <ph name="APP_NAME" />.\n2. Atinge „Întotdeauna”.</translation>
 <translation id="8410695015584479363">Urmărește prețurile</translation>
 <translation id="8413126021676339697">Afișează întregul istoric</translation>
-<translation id="8425213833346101688">Modificați</translation>
 <translation id="8427875596167638501">Fila de previzualizare este pe jumătate deschisă</translation>
 <translation id="8428213095426709021">Setări</translation>
 <translation id="8438566539970814960">Îmbunătățește căutările și navigarea</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Elimină activitatea în Chrome din Bunăstarea digitală</translation>
 <translation id="927968626442779827">Folosește modul Lite în Google Chrome</translation>
 <translation id="932327136139879170">Pagina de pornire</translation>
-<translation id="93753284658583800">Pagina de pornire a fost schimbată</translation>
 <translation id="938850635132480979">Eroare: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Introdu expresia de acces</translation>
 <translation id="948039501338975565">Lista dosarelor de marcaje</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index 79a0f9b..f970876 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Чтобы синхронизировать и персонализировать данные на всех устройствах, включите синхронизацию.</translation>
 <translation id="1209206284964581585">Скрыть</translation>
 <translation id="1227058898775614466">История переходов</translation>
-<translation id="1229399675748764149">Сделайте эту страницу главной</translation>
 <translation id="1231733316453485619">Включить синхронизацию?</translation>
 <translation id="123724288017357924">Обновить страницу без учета кешированного контента</translation>
 <translation id="124678866338384709">Закрыть вкладку</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Удалить пароль</translation>
 <translation id="1521774566618522728">Последние действия: сегодня</translation>
 <translation id="1538801903729528855">Сделайте голосовой поиск в Интернете удобнее</translation>
-<translation id="1543538514740974167">Быстрый доступ</translation>
 <translation id="1544826120773021464">Чтобы перейти к управлению аккаунтом Google, нажмите кнопку "Настройки аккаунта"</translation>
 <translation id="1549000191223877751">Перейти к другому окну</translation>
 <translation id="1553358976309200471">Обновить Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайты</translation>
 <translation id="4594952190837476234">Офлайн-версия страницы сохранена <ph name="CREATION_TIME" />. Она может отличаться от онлайн-версии.</translation>
 <translation id="4605958867780575332">Удалено: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Сохраняйте страницы офлайн и получайте напоминания</translation>
 <translation id="4616150815774728855">Открыть <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Использовать пароль</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 раскрытый пароль.}one{# раскрытый пароль.}few{# раскрытых пароля.}many{# раскрытых паролей.}other{# раскрытого пароля.}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Восстановлен объект "<ph name="ITEM_TITLE" />"</translation>
 <translation id="7029809446516969842">Пароли</translation>
 <translation id="7030675613184250187">Сохраняйте страницы в список для чтения, чтобы они всегда были у вас под рукой и доступны в офлайн-режиме.</translation>
-<translation id="703523980599857277">Изменить главную страницу</translation>
 <translation id="7054588988317389591">Генерировать описания изображений?</translation>
 <translation id="7055152154916055070">Заблокирована попытка переадресации:</translation>
 <translation id="7063006564040364415">Не удалось связаться с сервером синхронизации</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">У вас установлена последняя версия Chrome.</translation>
 <translation id="7106762743910369165">Этим браузером управляет ваша организация.</translation>
 <translation id="7121362699166175603">Удаление истории и вариантов автозаполнения в адресной строке. Информация о других ваших действиях в Интернете может также храниться на странице <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Нужные сайты и недавние статьи – одним нажатием кнопки.</translation>
 <translation id="7138678301420049075">Другое</translation>
 <translation id="7146622961999026732">Кажется, следующие сайты и приложения важны для вас:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Загрузить исходную версию страницы<ph name="END_LINK" /> из <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Выберите <ph name="APP_NAME" />.\n2. Нажмите "Всегда".</translation>
 <translation id="8410695015584479363">Отслеживать цены</translation>
 <translation id="8413126021676339697">Показать всю историю</translation>
-<translation id="8425213833346101688">Изменить</translation>
 <translation id="8427875596167638501">Вкладка предпросмотра открыта на половину высоты</translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8438566539970814960">Помогать улучшить просмотр страниц и поиск</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Удалить данные о действиях в Chrome из сервиса "Цифровое благополучие"</translation>
 <translation id="927968626442779827">Попробуйте упрощенный режим в Google Chrome.</translation>
 <translation id="932327136139879170">Главная страница</translation>
-<translation id="93753284658583800">Главная страница изменена.</translation>
 <translation id="938850635132480979">Ошибка <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Введите кодовую фразу</translation>
 <translation id="948039501338975565">Список папок с закладками</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index 63972cf..a35c03f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">උපාංග හරහා සමමුහුර්ත කිරීමට සහ පෞද්ගලීකරණය කිරීමට, සමමුහුර්තය ක්‍රියාත්මක කරන්න</translation>
 <translation id="1209206284964581585">දැනට සඟවන්න</translation>
 <translation id="1227058898775614466">සංචලන ඉතිහාසය</translation>
-<translation id="1229399675748764149">මෙය ඔබේ මුල් පිටුව කරන්න</translation>
 <translation id="1231733316453485619">සමමුහුව ක්‍රියාත්මක කරන්න ද?</translation>
 <translation id="123724288017357924">හැඹිලි අන්තර්ගත නොසලකා, වත්මන් පිටුව යළි පූරණය කර.</translation>
 <translation id="124678866338384709">වත්මන් ටැබය වසන්න</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">මුරපදය මකන්න</translation>
 <translation id="1521774566618522728">අද ක්‍රියාත්මකයි</translation>
 <translation id="1538801903729528855">වෙබයෙහි වඩා හොඳ හඬ අත්දැකීමක් ලබා ගන්න</translation>
-<translation id="1543538514740974167">මෙහි වඩා වේගයෙන් පැමිණෙන්න</translation>
 <translation id="1544826120773021464">ඔබේ Google ගිණුම කළමනා කිරීමට, "ගිණුම කළමනා කරන්න" බොත්තමට තට්ටු කරන්න</translation>
 <translation id="1549000191223877751">වෙනත් කවුළුවක් වෙත යන්න</translation>
 <translation id="1553358976309200471">Chrome යාවත් කරන්න</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">අඩවි</translation>
 <translation id="4594952190837476234">මෙම නොබැඳි පිටුව <ph name="CREATION_TIME" /> වෙතින් වන අතර සබැඳි අනුවාදයෙන් වෙනස් විය හැකිය.</translation>
 <translation id="4605958867780575332">අයිතමය ඉවත් කරන ලදී: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">පසුව ලබා ගැනීමට පිටු සුරකින්න සහ සිහිකැඳවීමක් ලබා ගන්න</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> විවෘත කරන්න</translation>
 <translation id="4634124774493850572">මුරපදය භාවිත කරන්න</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{අවදානමට පත් වූ මුරපද 1}one{අවදානමට පත් වූ මුරපද #}other{අවදානමට පත් වූ මුරපද #}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ප්‍රතිසාධනය කරන ලදි</translation>
 <translation id="7029809446516969842">මුරපද</translation>
 <translation id="7030675613184250187">පිටු නැවත සොයා ගැනීමට හෝ නොබැඳිව කියවීමට ඔබට ඔබේ කියවීමේ ලැයිස්තුවට ඒවා සුරැකිය හැකිය</translation>
-<translation id="703523980599857277">Change මුල් පිටුව</translation>
 <translation id="7054588988317389591">රූප විස්තර ලබා ගන්නද?</translation>
 <translation id="7055152154916055070">හරවා යැවීම අවහිරයි:</translation>
 <translation id="7063006564040364415">සමමු සර්වරයට සම්බන්ධ විය නොහැකි විය.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome යාවත්කාලීනයි</translation>
 <translation id="7106762743910369165">ඔබේ බ්‍රවුසරය ඔබේ සංවිධානය විසින් කළමනාකරණය කරයි</translation>
 <translation id="7121362699166175603">ලිපින තීරුව තුළ ඉතිහාසය හා ස්වයං සම්පූර්ණ කිරීම් හිස් කරයි. ඔබේ Google ගිණුමට <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> හිදී බ්‍රවුස් කිරීමේ ඉතිහාසයේ වෙනත් ආකාරයන් තිබිය හැක.</translation>
-<translation id="7128355412245153445">ඔබ මුල් පිටු බොත්තමට තට්ටු කරන සැම විටම ඔබේ ඉහළ ප්‍රවෘත්ති සහ මෑත ප්‍රවෘත්ති දකින්න</translation>
 <translation id="7138678301420049075">වෙනත්</translation>
 <translation id="7146622961999026732">මෙම අඩවි සහ යෙදුම් ඔබට වැදගත් යැයි පෙනේ:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> වෙතින් <ph name="BEGIN_LINK" />මූලික පිටුව පූරණ කරන්න<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> තෝරන්න\n2. “සැම විටම” තට්ටු කරන්න</translation>
 <translation id="8410695015584479363">මිල ගණන් හඹා යන්න</translation>
 <translation id="8413126021676339697">සම්පූර්ණ ඉතිහාසය පෙන්වන්න</translation>
-<translation id="8425213833346101688">වෙනස් කරන්න</translation>
 <translation id="8427875596167638501">පෙරදසුන් පටිත්ත අඩක් විවෘතයි</translation>
 <translation id="8428213095426709021">සැකසුම්</translation>
 <translation id="8438566539970814960">සෙවීම් සහ ගවේෂණය වඩා හොඳ කරන්න</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">ඩිජිටල් සුවතාව වෙතින් ඔබේ Chrome ක්‍රියාකාරකම් ඉවත් කරන්න</translation>
 <translation id="927968626442779827">Google Chrome හි සැහැල්ලු ප්‍රකාරය භාවිත කරන්න</translation>
 <translation id="932327136139879170">මුල් පිටුව</translation>
-<translation id="93753284658583800">මුල් පිටුව වෙනස් විය</translation>
 <translation id="938850635132480979">දෝෂය: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">මුරවදන ඇතුළත් කරන්න</translation>
 <translation id="948039501338975565">පිටුසන් ෆෝල්ඩර ලැයිස්තුව</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index 2f5ae3a8..48c063f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -32,12 +32,11 @@
 <translation id="1177863135347784049">Vlastné</translation>
 <translation id="1197267115302279827">Presunúť záložky</translation>
 <translation id="1201402288615127009">Ďalej</translation>
-<translation id="1204037785786432551">Stiahnuť obsah odkazu</translation>
+<translation id="1204037785786432551">Stiahnuť odkaz</translation>
 <translation id="1206892813135768548">Kopírovať text odkazu</translation>
 <translation id="1208340532756947324">Ak chcete synchronizovať a prispôsobovať viaceré zariadenia, zapnite synchronizáciu</translation>
 <translation id="1209206284964581585">Skryť</translation>
 <translation id="1227058898775614466">História navigácie</translation>
-<translation id="1229399675748764149">Nastavte si túto stránku ako domovskú stránku</translation>
 <translation id="1231733316453485619">Chcete zapnúť synchronizáciu?</translation>
 <translation id="123724288017357924">Opätovné načítanie aktuálnej stránky a ignorovanie obsahu vo vyrovnávacej pamäti</translation>
 <translation id="124678866338384709">Zavretie aktuálnej karty</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Odstrániť heslo</translation>
 <translation id="1521774566618522728">Aktívne dnes</translation>
 <translation id="1538801903729528855">Zlepšite si vyhľadávanie hlasom na internete</translation>
-<translation id="1543538514740974167">Prechádzajte rýchlejšie</translation>
 <translation id="1544826120773021464">Ak chcete spravovať svoj účet Google, klepnite na tlačidlo Spravovať účet</translation>
 <translation id="1549000191223877751">Prejsť do druhého okna</translation>
 <translation id="1553358976309200471">Aktualizovať Chrome</translation>
@@ -96,7 +94,7 @@
 <translation id="1672586136351118594">Nabudúce nezobrazovať</translation>
 <translation id="1680919990519905526">Obr. obch. v Google Lens <ph name="BEGIN_NEW" />Novinka<ph name="END_NEW" /></translation>
 <translation id="1682195225331129001">Vyskúšať</translation>
-<translation id="1692118695553449118">Synchronizácia je zapnutá.</translation>
+<translation id="1692118695553449118">Synchronizácia je zapnutá</translation>
 <translation id="1697284962337958118">Pridať do</translation>
 <translation id="1718835860248848330">Posledná hodina</translation>
 <translation id="1736419249208073774">Preskúmať</translation>
@@ -163,7 +161,7 @@
 <translation id="2122601567107267586">Aplikáciu sa nepodarilo otvoriť</translation>
 <translation id="2126426811489709554">Používa technológiu prehliadača Chrome</translation>
 <translation id="2131665479022868825">Uložené: <ph name="DATA" /></translation>
-<translation id="213279576345780926">Karta <ph name="TAB_TITLE" /> je zavretá</translation>
+<translation id="213279576345780926">Karta „<ph name="TAB_TITLE" />“ je zavretá</translation>
 <translation id="2139186145475833000">Pridať na plochu</translation>
 <translation id="214888715418183969">Vyberte, čo chcete zdieľať s Chromom. Zdieľané metriky pomôžu zlepšovať funkcie, výkonnosť aj stabilitu Chromu.</translation>
 <translation id="2154484045852737596">Úprava karty</translation>
@@ -415,7 +413,7 @@
 <translation id="3943557322767080599">Zobrazovať výzvy na prihlásenie do Chromu, keď sa prihlásite do svojho účtu Google</translation>
 <translation id="395206256282351086">Návrhy vyhľadávania a webov sú deaktivované</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome stránku načíta, keď bude k dispozícii}few{Chrome stránku načíta, keď bude k dispozícii}many{Chrome stránku načíta, keď bude k dispozícii}other{Chrome stránku načíta, keď bude k dispozícii}}</translation>
-<translation id="3963007978381181125">Šifrovanie prístupovej frázy nezahŕňa spôsoby platby a adresy zo služby Google Pay. Šifrované údaje si môže prečítať iba používateľ s prístupovou frázou. Prístupová fráza sa neodosiela do Googlu ani sa v ňom neuchováva. Ak ju zabudnete alebo chcete toto nastavenie zmeniť, budete musieť resetovať synchronizáciu. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
+<translation id="3963007978381181125">Šifrovanie pomocou prístupovej frázy nezahŕňa spôsoby platby a adresy zo služby Google Pay. Šifrované údaje si môže prečítať iba používateľ s prístupovou frázou. Prístupová fráza sa neodosiela do Googlu a nie je na Googli uložená. Ak ju zabudnete alebo toto nastavenie budete chcieť zmeniť, bude nutné synchronizáciu resetovať. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="3967822245660637423">Sťahovanie dokončené</translation>
 <translation id="3969142555815019568">Chrome nemôže skontrolovať heslá</translation>
 <translation id="3974987681202239636"><ph name="APP_NAME" /> sa otvorí v Chrome. Pokračovaním vyjadrujete súhlas so <ph name="BEGIN_LINK1" />zmluvnými podmienkami spoločnosti Google<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />dodatočnými zmluvnými podmienkami prehliadača Google Chrome a systému Chrome OS<ph name="END_LINK2" />. Platí aj <ph name="BEGIN_LINK3" />oznámenie o ochrane súkromia pre účty Google spravované pomocou aplikácie Family Link<ph name="END_LINK3" />.</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Weby</translation>
 <translation id="4594952190837476234">Táto offline stránka je z <ph name="CREATION_TIME" /> a líši sa od online verzie.</translation>
 <translation id="4605958867780575332">Položka bola odstránená: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Uložte si stránky na neskôr a dostávajte pripomenutia</translation>
 <translation id="4616150815774728855">Otvoriť <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použiť heslo</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 prelomené heslo}few{# prelomené heslá}many{# compromised passwords}other{# prelomených hesiel}}</translation>
@@ -581,7 +578,7 @@
 <translation id="509429900233858213">Vyskytla sa chyba.</translation>
 <translation id="510275257476243843">Zostáva: 1 h</translation>
 <translation id="5123685120097942451">Karta inkognito</translation>
-<translation id="5127805178023152808">Synchronizácia je vypnutá.</translation>
+<translation id="5127805178023152808">Synchronizácia je vypnutá</translation>
 <translation id="5132942445612118989">Synchronizujte svoje heslá, históriu a ďalší obsah vo všetkých zariadeniach</translation>
 <translation id="5136035049889637840">Kúpiť podobné výrobky <ph name="BEGIN_NEW" />Novinka<ph name="END_NEW" /></translation>
 <translation id="5139940364318403933">Ako používať Disk Google</translation>
@@ -848,7 +845,7 @@
 <translation id="6845325883481699275">Pomoc so zlepšením zabezpečenia Chromu</translation>
 <translation id="6846298663435243399">Načítava sa…</translation>
 <translation id="6850409657436465440">Sťahovanie stále prebieha</translation>
-<translation id="6850830437481525139">Zatvorené karty: <ph name="TAB_COUNT" /></translation>
+<translation id="6850830437481525139">Všetky karty sú zatvorené (<ph name="TAB_COUNT" />)</translation>
 <translation id="685850645784703949">Kanál Objaviť od Googlu – vypnutý</translation>
 <translation id="6864459304226931083">Stiahnuť obrázok</translation>
 <translation id="6865313869410766144">Dáta automatického dopĺňania formulárov</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Obnovili ste položku <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Heslá</translation>
 <translation id="7030675613184250187">Stránky si môžete uložiť do zoznamu na čítanie, aby ste ich mohli znova nájsť alebo čítať v režime offfline</translation>
-<translation id="703523980599857277">Zmeniť domovskú stránku</translation>
 <translation id="7054588988317389591">Chcete získať popisy obrázkov?</translation>
 <translation id="7055152154916055070">Presmerovanie bolo zablokované:</translation>
 <translation id="7063006564040364415">Nepodarilo sa pripojiť k synchronizačnému serveru.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome je aktuálny</translation>
 <translation id="7106762743910369165">Prehliadač je spravovaný vašou organizáciou</translation>
 <translation id="7121362699166175603">Vymaže históriu a záznamy automatického dopĺňania v paneli s adresou. Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Zobrazujte si najobľúbenejšie weby a aktuálne správy klepnutím na tlačidlo Domov</translation>
 <translation id="7138678301420049075">Ostatné</translation>
 <translation id="7146622961999026732">Tieto weby a aplikácie zrejme považujete za dôležité:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Načítať pôvodnú stránku<ph name="END_LINK" /> z domény <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Vyberte aplikáciu <ph name="APP_NAME" />.\n2. Klepnite na Vždy.</translation>
 <translation id="8410695015584479363">Sledovať ceny</translation>
 <translation id="8413126021676339697">Zobraziť celú históriu</translation>
-<translation id="8425213833346101688">Zmeniť</translation>
 <translation id="8427875596167638501">Karta ukážky je dopoly otvorená</translation>
 <translation id="8428213095426709021">Nastavenia</translation>
 <translation id="8438566539970814960">Zlepšovať vyhľadávanie a prehliadanie</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Odstránenie aktivity v Chrome z digitálnej rovnováhy</translation>
 <translation id="927968626442779827">Používanie zjednodušeného režimu v prehliadači Google Chrome</translation>
 <translation id="932327136139879170">Domov</translation>
-<translation id="93753284658583800">Domovská stránka bola zmenená</translation>
 <translation id="938850635132480979">Chyba: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Zadať prístupovú frázu</translation>
 <translation id="948039501338975565">Zoznam priečinkov so záložkami</translation>
@@ -1204,7 +1197,7 @@
 <translation id="962979164594783469">Inštalovať túto aplikáciu</translation>
 <translation id="968900484120156207">Tu sa zobrazia vami navštívené stránky</translation>
 <translation id="970715775301869095">Zostáva: <ph name="MINUTES" /> min</translation>
-<translation id="974555521953189084">Ak chcete spustiť synchronizáciu, zadajte prístupovú frázu</translation>
+<translation id="974555521953189084">Pre synchronizáciu zadajte prístupovú frázu</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983192555821071799">Zavrieť všetky karty</translation>
 <translation id="987264212798334818">Všeobecné</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index ad18cea..559f36dd 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Če želite sinhronizirati in prilagajati v vseh napravah, vklopite sinhronizacijo</translation>
 <translation id="1209206284964581585">Zaenkrat skrij</translation>
 <translation id="1227058898775614466">Zgodovina krmarjenja</translation>
-<translation id="1229399675748764149">Naj bo ta stran vaša domača stran</translation>
 <translation id="1231733316453485619">Želite vklopiti sinhronizacijo?</translation>
 <translation id="123724288017357924">Vnov. nalag. tren. strani s prezrtjem predp. vseb.</translation>
 <translation id="124678866338384709">Zapiranje trenutnega zavihka</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Izbris gesla</translation>
 <translation id="1521774566618522728">Aktivno danes</translation>
 <translation id="1538801903729528855">Boljša glasovna izkušnja v spletu</translation>
-<translation id="1543538514740974167">Hitrejši pomik sem</translation>
 <translation id="1544826120773021464">Če želite upravljati račun Google, se dotaknite gumba »Upravljanje računa«</translation>
 <translation id="1549000191223877751">Premik v drugo okno</translation>
 <translation id="1553358976309200471">Posodobi Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Spletna mesta</translation>
 <translation id="4594952190837476234">Ta stran brez povezave je bila ustvarjena <ph name="CREATION_TIME" /> in se morda razlikuje od spletne različice.</translation>
 <translation id="4605958867780575332">Odstranjen element: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Shranite strani za pozneje in prejmite opomnik</translation>
 <translation id="4616150815774728855">Odpri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Uporabi geslo</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ogroženo geslo}one{# ogroženo geslo}two{# ogroženi gesli}few{# ogrožena gesla}other{# ogroženih gesel}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Obnovljeno: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Gesla</translation>
 <translation id="7030675613184250187">Strani lahko shranite na seznam za branje, če jih želite poiskati znova ali brati brez povezave.</translation>
-<translation id="703523980599857277">Spremeni domačo stran</translation>
 <translation id="7054588988317389591">Želite pridobiti opise slik?</translation>
 <translation id="7055152154916055070">Preusmeritev je preprečena:</translation>
 <translation id="7063006564040364415">Povezave s strežnikom za sinhronizacijo ni bilo mogoče vzpostaviti.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome je posodobljen</translation>
 <translation id="7106762743910369165">Vaš brskalnik upravlja organizacija</translation>
 <translation id="7121362699166175603">Izbriše zgodovino in samodokončanja v naslovni vrstici. V Google Računu so morda druge vrste zgodovine brskanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Oglejte si najbolj priljubljena spletna mesta in nedavne novice, kadar koli se dotaknete gumba za domačo stran</translation>
 <translation id="7138678301420049075">Drugo</translation>
 <translation id="7146622961999026732">Videti je, da so vam ta spletna mesta in aplikacije pomembni:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Naloži izvirno stran<ph name="END_LINK" /> iz domene <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Izberite aplikacijo <ph name="APP_NAME" />.\n2. Dotaknite se »Vedno«.</translation>
 <translation id="8410695015584479363">Spremljanje cen</translation>
 <translation id="8413126021676339697">Prikaži celotno zgodovino</translation>
-<translation id="8425213833346101688">Spremeni</translation>
 <translation id="8427875596167638501">Zavihek za predogled je napol odprt</translation>
 <translation id="8428213095426709021">Nastavitve</translation>
 <translation id="8438566539970814960">Izboljšanje iskanja in brskanja</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Odstranitev dejavnosti v Chromu iz Digitalne dobrobiti</translation>
 <translation id="927968626442779827">Uporabite lahki način v Google Chromu</translation>
 <translation id="932327136139879170">Domov</translation>
-<translation id="93753284658583800">Domača stran je bila spremenjena</translation>
 <translation id="938850635132480979">Napaka: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Vnesite geslo</translation>
 <translation id="948039501338975565">Seznam map z zaznamki</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index 3714d5b..ff24b1d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Për të sinkronizuar dhe personalizuar mes pajisjeve, aktivizo sinkronizimin</translation>
 <translation id="1209206284964581585">Fshih për momentin</translation>
 <translation id="1227058898775614466">Historiku i navigimit</translation>
-<translation id="1229399675748764149">Bëje këtë faqe faqen tënde bazë</translation>
 <translation id="1231733316453485619">Të aktivizohet sinkronizimi?</translation>
 <translation id="123724288017357924">Ringarko faqen aktuale, duke shpërfillur përmbajtjen në memorien specifike</translation>
 <translation id="124678866338384709">Mbyll skedën aktuale</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Fshi fjalëkalimin</translation>
 <translation id="1521774566618522728">Aktiv sot</translation>
 <translation id="1538801903729528855">Merr një përvojë më të mirë zanore në ueb</translation>
-<translation id="1543538514740974167">Si të mbërrish këtu më shpejt</translation>
 <translation id="1544826120773021464">Për të menaxhuar "Llogarinë tënde të Google", prek butonin "Menaxho llogarinë"</translation>
 <translation id="1549000191223877751">Zhvendose te dritarja tjetër</translation>
 <translation id="1553358976309200471">Përditëso Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sajtet</translation>
 <translation id="4594952190837476234">Kjo faqe jashtë linje është nga <ph name="CREATION_TIME" /> dhe mund të ndryshojë nga versioni në linjë.</translation>
 <translation id="4605958867780575332">Artikulli u hoq: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Ruaji faqet për më vonë dhe merr një rikujtesë</translation>
 <translation id="4616150815774728855">Hap <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Përdor fjalëkalimin</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 fjalëkalim i komprometuar}other{# fjalëkalime të komprometuara}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Restauruar në datën <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Fjalëkalimet</translation>
 <translation id="7030675613184250187">Mund t'i ruash faqet në listën e leximit për t'i gjetur ato përsëri ose për t'i lexuar jashtë linje</translation>
-<translation id="703523980599857277">Ndrysho faqen kryesore</translation>
 <translation id="7054588988317389591">Të merren përshkrimet e imazheve?</translation>
 <translation id="7055152154916055070">Ridrejtimi u bllokua:</translation>
 <translation id="7063006564040364415">Nuk mund të lidhej me serverin e sinkronizimit.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome është i përditësuar</translation>
 <translation id="7106762743910369165">Shfletuesi yt menaxhohet nga organizata jote</translation>
 <translation id="7121362699166175603">Pastron historikun dhe plotësimet automatike në shiritin e adresës. Llogaria jote e Google mund të ketë forma të tjera të historikut të shfletimit në <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Shiko sajtet kryesore dhe historitë e fundit sa herë që troket te butoni "Kreu"</translation>
 <translation id="7138678301420049075">Tjetër</translation>
 <translation id="7146622961999026732">Këto sajte dhe aplikacione duken të rëndësishme për ty:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Ngarko faqen origjinale<ph name="END_LINK" /> nga <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Zgjidh <ph name="APP_NAME" />\n2. Trokit te "Gjithmonë"</translation>
 <translation id="8410695015584479363">Gjurmo çmimet</translation>
 <translation id="8413126021676339697">Shfaq historikun e plotë</translation>
-<translation id="8425213833346101688">Ndrysho</translation>
 <translation id="8427875596167638501">Skeda e shikimit paraprak është gjysmë e hapur</translation>
 <translation id="8428213095426709021">Cilësimet</translation>
 <translation id="8438566539970814960">Përmirëson kërkimet dhe shfletimin</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Hiq aktivitetin tënd të Chrome nga "Mirëqenia dixhitale"</translation>
 <translation id="927968626442779827">Përdor "Modalitetin e lehtë" në Google Chrome</translation>
 <translation id="932327136139879170">Faqja kryesore</translation>
-<translation id="93753284658583800">Faqja kryesore u ndryshua</translation>
 <translation id="938850635132480979">Gabim: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Fut frazën e kalimit</translation>
 <translation id="948039501338975565">Lista e dosjeve të faqeshënuesit</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index 1b31f51..c4f0394 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Da biste sinhronizovali i personalizovali sadržaj na uređajima, uključite sinhronizaciju</translation>
 <translation id="1209206284964581585">Sakrij za sada</translation>
 <translation id="1227058898775614466">Istorija navigacije</translation>
-<translation id="1229399675748764149">Podesite ovu stranicu kao početnu stranicu</translation>
 <translation id="1231733316453485619">Želite li da uključite sinhronizaciju?</translation>
 <translation id="123724288017357924">Ponovno učitavanje aktuelne stranice, zanemarujući keširani sadržaj</translation>
 <translation id="124678866338384709">Zatvaranje aktuelne kartice</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Izbriši lozinku</translation>
 <translation id="1521774566618522728">Aktivan je danas</translation>
 <translation id="1538801903729528855">Ostvarite bolji doživljaj pri glasovnoj pretrazi na vebu</translation>
-<translation id="1543538514740974167">Brže otvarajte ovu stranicu</translation>
 <translation id="1544826120773021464">Da biste upravljali Google nalogom, dodirnite dugme „Upravljajte nalogom“</translation>
 <translation id="1549000191223877751">Premesti u drugi prozor</translation>
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sajtovi</translation>
 <translation id="4594952190837476234">Ova oflajn stranica je od <ph name="CREATION_TIME" /> i može da se razlikuje od onlajn verzije.</translation>
 <translation id="4605958867780575332">Stavka je uklonjena: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Sačuvajte stranice za kasnije i primite podsetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ugrožena lozinka}one{# ugrožena lozinka}few{# ugrožene lozinke}other{# ugroženih lozinki}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Vraćena je stavka <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Lozinke</translation>
 <translation id="7030675613184250187">Možete da sačuvate stranice na listi za čitanje da biste ih ponovo pronašli ili čitali oflajn</translation>
-<translation id="703523980599857277">Promeni početnu stranicu</translation>
 <translation id="7054588988317389591">Želite da dobijate opise slika?</translation>
 <translation id="7055152154916055070">Blokirano je preusmeravanje:</translation>
 <translation id="7063006564040364415">Nije moguće povezivanje sa serverom za sinhronizaciju.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome je ažuriran</translation>
 <translation id="7106762743910369165">Organizacija upravlja pregledačem</translation>
 <translation id="7121362699166175603">Briše istoriju i automatska dovršavanja u traci za adresu. Google nalog može da ima druge oblike istorije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Vidite sajtove koje najčešće posećujete i nedavne vesti kad god dodirnete dugme Početna</translation>
 <translation id="7138678301420049075">Drugo</translation>
 <translation id="7146622961999026732">Izgleda da su vam ovi sajtovi i aplikacije važni:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Učitaj originalnu stranicu<ph name="END_LINK" /> sa <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Izaberite <ph name="APP_NAME" />\n2. Dodirnite „Uvek“</translation>
 <translation id="8410695015584479363">Pratite cene</translation>
 <translation id="8413126021676339697">Prikaži svu istoriju</translation>
-<translation id="8425213833346101688">Promeni</translation>
 <translation id="8427875596167638501">Kartica za pregled je poluotvorena</translation>
 <translation id="8428213095426709021">Podešavanja</translation>
 <translation id="8438566539970814960">Poboljšaj pretrage i pregledanje</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Uklonite Chrome aktivnosti iz Digitalnog blagostanja</translation>
 <translation id="927968626442779827">Koristite Lite režim u Google Chrome-u</translation>
 <translation id="932327136139879170">Početna</translation>
-<translation id="93753284658583800">Početna stranica je promenjena</translation>
 <translation id="938850635132480979">Greška: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Unesite pristupnu frazu</translation>
 <translation id="948039501338975565">Lista foldera sa obeleživačima</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 1ac36155..01b810cc0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Да бисте синхронизовали и персонализовали садржај на уређајима, укључите синхронизацију</translation>
 <translation id="1209206284964581585">Сакриј за сада</translation>
 <translation id="1227058898775614466">Историја навигације</translation>
-<translation id="1229399675748764149">Подесите ову страницу као почетну страницу</translation>
 <translation id="1231733316453485619">Желите ли да укључите синхронизацију?</translation>
 <translation id="123724288017357924">Поновно учитавање актуелне странице, занемарујући кеширани садржај</translation>
 <translation id="124678866338384709">Затварање актуелне картице</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Избриши лозинку</translation>
 <translation id="1521774566618522728">Активан је данас</translation>
 <translation id="1538801903729528855">Остварите бољи доживљај при гласовној претрази на вебу</translation>
-<translation id="1543538514740974167">Брже отварајте ову страницу</translation>
 <translation id="1544826120773021464">Да бисте управљали Google налогом, додирните дугме „Управљајте налогом“</translation>
 <translation id="1549000191223877751">Премести у други прозор</translation>
 <translation id="1553358976309200471">Ажурирај Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4594952190837476234">Ова офлајн страница је од <ph name="CREATION_TIME" /> и може да се разликује од онлајн верзије.</translation>
 <translation id="4605958867780575332">Ставка је уклоњена: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Сачувајте странице за касније и примите подсетник</translation>
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Користи лозинку</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 угрожена лозинка}one{# угрожена лозинка}few{# угрожене лозинке}other{# угрожених лозинки}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Враћена је ставка <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Лозинке</translation>
 <translation id="7030675613184250187">Можете да сачувате странице на листи за читање да бисте их поново пронашли или читали офлајн</translation>
-<translation id="703523980599857277">Промени почетну страницу</translation>
 <translation id="7054588988317389591">Желите да добијате описе слика?</translation>
 <translation id="7055152154916055070">Блокирано је преусмеравање:</translation>
 <translation id="7063006564040364415">Није могуће повезивање са сервером за синхронизацију.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome је ажуриран</translation>
 <translation id="7106762743910369165">Организација управља прегледачем</translation>
 <translation id="7121362699166175603">Брише историју и аутоматска довршавања у траци за адресу. Google налог може да има друге облике историје прегледања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Видите сајтове које најчешће посећујете и недавне вести кад год додирнете дугме Почетна</translation>
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7146622961999026732">Изгледа да су вам ови сајтови и апликације важни:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Учитај оригиналну страницу<ph name="END_LINK" /> са <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Изаберите <ph name="APP_NAME" />\n2. Додирните „Увек“</translation>
 <translation id="8410695015584479363">Пратите цене</translation>
 <translation id="8413126021676339697">Прикажи сву историју</translation>
-<translation id="8425213833346101688">Промени</translation>
 <translation id="8427875596167638501">Картица за преглед је полуотворена</translation>
 <translation id="8428213095426709021">Подешавања</translation>
 <translation id="8438566539970814960">Побољшај претраге и прегледање</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Уклоните Chrome активности из Дигиталног благостања</translation>
 <translation id="927968626442779827">Користите Lite режим у Google Chrome-у</translation>
 <translation id="932327136139879170">Почетна</translation>
-<translation id="93753284658583800">Почетна страница је промењена</translation>
 <translation id="938850635132480979">Грешка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Унесите приступну фразу</translation>
 <translation id="948039501338975565">Листа фолдера са обележивачима</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index ef3e9cef..38b337f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Aktivera synkronisering om du vill synkronisera och anpassa alla dina enheter</translation>
 <translation id="1209206284964581585">Dölj för tillfället</translation>
 <translation id="1227058898775614466">Navigeringshistorik</translation>
-<translation id="1229399675748764149">Gör den här sidan till startsida</translation>
 <translation id="1231733316453485619">Vill du aktivera synkronisering?</translation>
 <translation id="123724288017357924">Läs in den aktuella sidan igen och ignorera cachelagrat innehåll</translation>
 <translation id="124678866338384709">Stäng den aktuella fliken</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Radera lösenord</translation>
 <translation id="1521774566618522728">Aktiv idag</translation>
 <translation id="1538801903729528855">Få en bättre upplevelse på webben med rösten</translation>
-<translation id="1543538514740974167">Kom hit snabbare</translation>
 <translation id="1544826120773021464">Tryck på knappen Hantera kontot om du vill hantera ditt Google-konto</translation>
 <translation id="1549000191223877751">Flytta till annat fönster</translation>
 <translation id="1553358976309200471">Uppdatera Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Webbplatser</translation>
 <translation id="4594952190837476234">Den här offlinesidan sparades <ph name="CREATION_TIME" /> och kan skilja sig från onlineversionen.</translation>
 <translation id="4605958867780575332">Borttaget objekt: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Spara sidor till senare och bli påmind</translation>
 <translation id="4616150815774728855">Öppna <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Använd lösenordet</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 utsatt lösenord}other{# utsatta lösenord}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> återställdes</translation>
 <translation id="7029809446516969842">Lösenord</translation>
 <translation id="7030675613184250187">Du kan spara sidor i läslistan så att du kan hitta dem igen eller läsa dem offline</translation>
-<translation id="703523980599857277">Ändra startsida</translation>
 <translation id="7054588988317389591">Vill du få bildbeskrivningar?</translation>
 <translation id="7055152154916055070">Omdirigeringen blockerades:</translation>
 <translation id="7063006564040364415">Det gick inte att ansluta till synkroniseringsservern.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome har uppdaterats</translation>
 <translation id="7106762743910369165">Webbläsaren hanteras av din organisation</translation>
 <translation id="7121362699166175603">Historik och autoslutföranden i adressfältet rensas. Det kan finnas andra former av webbhistorik i Google-kontot på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Se dina mest besökta webbplatser och dina senaste artiklar när du trycker på hemknappen</translation>
 <translation id="7138678301420049075">Övrigt</translation>
 <translation id="7146622961999026732">De här webbplatserna och apparna verkar vara viktiga för dig:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Läs in originalsidan<ph name="END_LINK" /> från <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Välj <ph name="APP_NAME" />\n2. Tryck på Alltid</translation>
 <translation id="8410695015584479363">Bevaka priser</translation>
 <translation id="8413126021676339697">Visa fullständig historik</translation>
-<translation id="8425213833346101688">Ändra</translation>
 <translation id="8427875596167638501">Fliken Förhandsgranskning visas på halva skärmen</translation>
 <translation id="8428213095426709021">Inställningar</translation>
 <translation id="8438566539970814960">Förbättra sökningar och surfandet</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Ta bort din aktivitet i Chrome från Digitalt välmående</translation>
 <translation id="927968626442779827">Använd begränsat läge i Google Chrome</translation>
 <translation id="932327136139879170">Startsida</translation>
-<translation id="93753284658583800">Startsidan har ändrats</translation>
 <translation id="938850635132480979">Fel: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ange lösenfras</translation>
 <translation id="948039501338975565">Lista över bokmärkesmappar</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index 865b9264..f4a302e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Ili usawazishe na uweke mapendeleo kwenye vifaa vyako vyote, washa kipengele cha usawazishaji</translation>
 <translation id="1209206284964581585">Ficha kwa sasa</translation>
 <translation id="1227058898775614466">Historia ya uelekezaji</translation>
-<translation id="1229399675748764149">Fanya ukurasa huu uwe ukurasa wako wa kwanza</translation>
 <translation id="1231733316453485619">Ungependa kuwasha usawazishaji?</translation>
 <translation id="123724288017357924">Pakia upya ukurasa wa sasa, puuza maudhui ya akiba</translation>
 <translation id="124678866338384709">Funga kichupo kilichofunguka</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Futa nenosiri</translation>
 <translation id="1521774566618522728">Ameitumia leo</translation>
 <translation id="1538801903729528855">Furahia hali bora zaidi ya kutumia sauti kwenye wavuti</translation>
-<translation id="1543538514740974167">Fika hapa haraka</translation>
 <translation id="1544826120773021464">Ili udhibiti akaunti yako ya Google, gusa kitufe cha "Dhibiti akaunti"</translation>
 <translation id="1549000191223877751">Nenda kwenye dirisha jingine</translation>
 <translation id="1553358976309200471">Sasisha Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Tovuti</translation>
 <translation id="4594952190837476234">Ukurasa huu wa nje ya mtandao umetoka <ph name="CREATION_TIME" /> na huenda ukatofautiana na toleo lililo mtandaoni.</translation>
 <translation id="4605958867780575332">Kipengee kilichoondolewa: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Hifadhi kurasa ili uzisome baadaye na upate kikumbusho</translation>
 <translation id="4616150815774728855">Fungua <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Tumia nenosiri</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Nenosiri moja limeathiriwa}other{Manenosiri # yameathiriwa}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Umerejesha <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Manenosiri</translation>
 <translation id="7030675613184250187">Unaweza kuhifadhi kurasa kwenye orodha yako ya kusoma ili uzipate tena au usome nje ya mtandao</translation>
-<translation id="703523980599857277">Badilisha ukurasa wa kwanza</translation>
 <translation id="7054588988317389591">Ungependa kupata maelezo ya picha?</translation>
 <translation id="7055152154916055070">Imezuiwa kuelekeza kwingine:</translation>
 <translation id="7063006564040364415">Haikuweza kuunganisha kwenye seva ya usawazishaji.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome imesasishwa</translation>
 <translation id="7106762743910369165">Kivinjari chako kinadhibitiwa na shirika lako</translation>
 <translation id="7121362699166175603">Hufuta historia na ukamilishaji kiotomatiki kwenye sehemu ya anwani. Huenda Akaunti yako ya Google ikawa na aina nyingine za historia ya kuvinjari kwenye <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Angalia tovuti zako kuu na taarifa za hivi punde unapogusa kitufe cha Ukurasa wa Mwanzo</translation>
 <translation id="7138678301420049075">Nyingine</translation>
 <translation id="7146622961999026732">Tovuti na programu hizi zinaonekana kuwa muhimu kwako:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Pakia ukurasa halisi<ph name="END_LINK" /> kutoka <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Chagua <ph name="APP_NAME" />\n2. Gusa “Kila mara”</translation>
 <translation id="8410695015584479363">Fuatilia bei</translation>
 <translation id="8413126021676339697">Onyesha historia kamili</translation>
-<translation id="8425213833346101688">Badilisha</translation>
 <translation id="8427875596167638501">Kichupo cha kukagua kwanza kimefunguliwa nusu</translation>
 <translation id="8428213095426709021">Mipangilio</translation>
 <translation id="8438566539970814960">Boresha utafutaji na kuvinjari</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Ondoa shughuli zako za Chrome kwenye mpango wa Nidhamu Dijitali</translation>
 <translation id="927968626442779827">Tumia Hali Nyepesi kwenye Google Chrome</translation>
 <translation id="932327136139879170">Mwanzo</translation>
-<translation id="93753284658583800">Ukurasa wa kwanza umebadilishwa</translation>
 <translation id="938850635132480979">Hitilafu: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ingiza kaulisiri</translation>
 <translation id="948039501338975565">Orodha ya folda za alamisho</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index 04f6d8b6..de0bc0bc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">அனைத்துச் சாதனங்களுக்கு இடையிலும் ஒத்திசைக்க மற்றும் தனிப்பயனாக்க, ஒத்திசைவை இயக்கவும்</translation>
 <translation id="1209206284964581585">இப்போதைக்கு மறை</translation>
 <translation id="1227058898775614466">வழிசெலுத்தல் வரலாறு</translation>
-<translation id="1229399675748764149">இந்தப் பக்கத்தை முகப்புப் பக்கமாக்குங்கள்</translation>
 <translation id="1231733316453485619">ஒத்திசைவை இயக்கவா?</translation>
 <translation id="123724288017357924">தற்காலிக சேமிப்பைப் புறக்கணித்து, நடப்புப் பக்கத்தை மீண்டும் ஏற்றும்</translation>
 <translation id="124678866338384709">தற்போதைய தாவலை மூடும்</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">கடவுச்சொல்லை நீக்கு</translation>
 <translation id="1521774566618522728">இன்று பயன்படுத்தியுள்ளார்</translation>
 <translation id="1538801903729528855">இன்னும் சிறப்பான குரல் அனுபவத்தை இணையத்தில் பெறுங்கள்</translation>
-<translation id="1543538514740974167">அடிக்கடி பயன்படுத்துபவற்றை விரைவாக அணுகுங்கள்</translation>
 <translation id="1544826120773021464">உங்கள் Google கணக்கை நிர்வகிக்க "கணக்கை நிர்வகி" என்ற பட்டனைத் தட்டுங்கள்</translation>
 <translation id="1549000191223877751">வேறு சாளரத்திற்கு நகர்த்து</translation>
 <translation id="1553358976309200471">Chromeஐப் புதுப்பி</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234"><ph name="CREATION_TIME" /> அன்று இந்த ஆஃப்லைன் பக்கம் உருவாக்கப்பட்டது. இது ஆன்லைன் பதிப்பிலிருந்து வேறுபடலாம்.</translation>
 <translation id="4605958867780575332">உருப்படி அகற்றப்பட்டது: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">பக்கங்களைப் பின்னர் பார்ப்பதற்குச் சேமித்து அதற்கான நினைவூட்டலைப் பெறலாம்</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ஐத் திற</translation>
 <translation id="4634124774493850572">கடவுச்சொல்லைப் பயன்படுத்து</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 களவாடப்பட்ட கடவுச்சொல்}other{# களவாடப்பட்ட கடவுச்சொற்கள்}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> மீட்டெடுக்கப்பட்டது</translation>
 <translation id="7029809446516969842">கடவுச்சொற்கள்</translation>
 <translation id="7030675613184250187">பக்கங்களை மீண்டும் கண்டறியவோ ஆஃப்லைனில் படிக்கவோ உங்கள் வாசிப்புப் பட்டியலில் அவற்றைச் சேமிக்கலாம்</translation>
-<translation id="703523980599857277">முகப்புப்பக்கத்தை மாற்று</translation>
 <translation id="7054588988317389591">பட விளக்கங்களைப் பெற வேண்டுமா?</translation>
 <translation id="7055152154916055070">திசைதிருப்புதல் தடுக்கப்பட்டது:</translation>
 <translation id="7063006564040364415">ஒத்திசைவு சேவையகத்துடன் இணைக்க முடியவில்லை.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome சமீபத்திய பதிப்பில் உள்ளது</translation>
 <translation id="7106762743910369165">உங்கள் உலாவியை உங்கள் நிறுவனம் நிர்வகிக்கிறது</translation>
 <translation id="7121362699166175603">முகவரிப் பட்டியில் வரலாற்றையும் தானே நிரப்புதலையும் அழிக்கும். உங்கள் Google கணக்கு, <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> என்ற இணைப்பில் உலாவல் வரலாறு தொடர்பான பிற தகவல்களைக் கொண்டிருக்கக்கூடும்.</translation>
-<translation id="7128355412245153445">முகப்புப் பட்டனைத் தட்டும்போது நீங்கள் அடிக்கடி பயன்படுத்தும் தளங்களையும் சமீபத்திய செய்திகளையும் காட்டும்</translation>
 <translation id="7138678301420049075">மற்றவை</translation>
 <translation id="7146622961999026732">இந்தத் தளங்களும் ஆப்ஸும் உங்களுக்கு முக்கியமானவை எனக் கருதுகிறோம்:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> இலிருந்து <ph name="BEGIN_LINK" />அசல் பக்கத்தை ஏற்று<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> ஐத் தேர்வுசெய்யவும்\n2. “எப்போதும்” என்பதைத் தட்டவும்</translation>
 <translation id="8410695015584479363">விலைகளைக் கண்காணி</translation>
 <translation id="8413126021676339697">முழு வரலாற்றையும் காண்பி</translation>
-<translation id="8425213833346101688">மாற்று</translation>
 <translation id="8427875596167638501">மாதிரிக்காட்சித் தாவல் பாதியளவு திறந்துள்ளது</translation>
 <translation id="8428213095426709021">அமைப்புகள்</translation>
 <translation id="8438566539970814960">தேடல்களையும் உலாவலையும் மேலும் சிறப்பாக்குக</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome செயல்பாட்டை டிஜிட்டல் வெல்பீயிங்கிலிருந்து நீக்குதல்</translation>
 <translation id="927968626442779827">Google Chrome உலாவியில் லைட் பயன்முறையைப் பயன்படுத்தலாம்</translation>
 <translation id="932327136139879170">முகப்பு</translation>
-<translation id="93753284658583800">முகப்புப்பக்கம் மாற்றப்பட்டது</translation>
 <translation id="938850635132480979">பிழை: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">கடவுச்சொற்றொடரை உள்ளிடுக</translation>
 <translation id="948039501338975565">புக்மார்க் கோப்புறைகளின் பட்டியல்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index dc778173..b1c35ee 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">మీ అన్ని పరికరాలలోనూ సమకాలీకరణ చేయాలన్నా లేదా మీ అభిరుచికి అనుగుణంగా సెట్ చేయాలన్నా, తప్పనిసరిగా సమకాలీకరణ ఎంపికను ఆన్ చేయాలి</translation>
 <translation id="1209206284964581585">ప్రస్తుతానికి దాచు</translation>
 <translation id="1227058898775614466">నావిగేషన్ చరిత్ర</translation>
-<translation id="1229399675748764149">ఈ పేజీను మీ హోమ్‌పేజీగా చేసుకోండి</translation>
 <translation id="1231733316453485619">సమకాలీకరణను ఆన్ చేయాలా?</translation>
 <translation id="123724288017357924">కాష్ కంటెంట్ విస్మరించి ప్రస్తుత పేజీ మళ్లీ లోడ్ చేయండి</translation>
 <translation id="124678866338384709">ప్రస్తుత ట్యాబ్‌ను మూసివేయండి</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">పాస్‌వర్డ్‌ను తొలగించు</translation>
 <translation id="1521774566618522728">ఈ రోజు యాక్టివ్‌గా ఉంది</translation>
 <translation id="1538801903729528855">వెబ్‌లో మెరుగైన వాయిస్ అనుభవాన్ని పొందండి</translation>
-<translation id="1543538514740974167">ఇక్కడకు త్వరగా చేరుకోండి</translation>
 <translation id="1544826120773021464">మీ Google ఖాతాను నిర్వహించడానికి, "ఖాతాను నిర్వహించు" బటన్‌ను నొక్కండి</translation>
 <translation id="1549000191223877751">వేరే విండోకు తరలించు</translation>
 <translation id="1553358976309200471">Chromeని నవీకరించు</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">సైట్‌లు</translation>
 <translation id="4594952190837476234">ఈ ఆఫ్‌లైన్ పేజీ <ph name="CREATION_TIME" />కి చెందినది మరియు ఆన్‌లైన్ వెర్షన్ వేరుగా ఉండవచ్చు.</translation>
 <translation id="4605958867780575332">ఈ అంశం తీసివేయబడింది: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">తర్వాత కోసం పేజీలను సేవ్ చేసి, ఒక రిమైండర్‌ను పొందండి</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ని తెరువు</translation>
 <translation id="4634124774493850572">పాస్‌వర్డ్‌ను ఉపయోగించు</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 చోరీకి గురైన పాస్‌వర్డ్}other{# చోరీకి గురైన పాస్‌వర్డ్‌లు}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> రీస్టోర్ చేయబడింది</translation>
 <translation id="7029809446516969842">పాస్‌వర్డ్‌లు</translation>
 <translation id="7030675613184250187">మీ చదివే జాబితాకు పేజీలను సేవ్ చేయడం ద్వారా మీరు వాటిని మళ్లీ చూడగలరు లేదా ఆఫ్‌లైన్‌లో చదవగలరు.</translation>
-<translation id="703523980599857277">హోమ్ పేజీని మార్చు</translation>
 <translation id="7054588988317389591">ఇమేజ్ వివరణలను పొందాలనుకుంటున్నారా?</translation>
 <translation id="7055152154916055070">మళ్లింపు బ్లాక్ చేయబడింది:</translation>
 <translation id="7063006564040364415">సింక్ సర్వర్‌కు కనెక్ట్ చేయడం సాధ్యపడలేదు.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome అప్‌డేట్ చేసి ఉంది</translation>
 <translation id="7106762743910369165">మీ బ్రౌజర్ మీ సంస్థ ద్వారా మేనేజ్ చేయబడుతుంది</translation>
 <translation id="7121362699166175603">చిరునామా బార్‌లో చరిత్ర, స్వీయపూరింపులను తొలగిస్తుంది. మీ Google ఖాతా <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />లో ఇతర రూపాల్లో ఉన్న బ్రౌజింగ్ చరిత్రను కలిగి ఉండవచ్చు.</translation>
-<translation id="7128355412245153445">మీరు హోమ్ బటన్‌ను ట్యాప్ చేసినప్పుడల్లా మీ టాప్ సైట్‌లు, ఇటీవలి కథనాలను చూస్తారు</translation>
 <translation id="7138678301420049075">ఇతర</translation>
 <translation id="7146622961999026732">ఈ సైట్‌లు, యాప్‌లు మీకు ముఖ్యమైనవిగా అనిపిస్తున్నాయి:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> నుండి <ph name="BEGIN_LINK" />అసలైన పేజీని లోడ్ చేయండి<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" />ను ఎంచుకోండి\n2. “ఎల్లప్పుడూ”ను ట్యాప్ చేయండి</translation>
 <translation id="8410695015584479363">ధరలను ట్రాక్ చేయండి</translation>
 <translation id="8413126021676339697">పూర్తి చరిత్రను చూపించు</translation>
-<translation id="8425213833346101688">మార్చు</translation>
 <translation id="8427875596167638501">ప్రివ్యూ ట్యాబ్ సగం తెరవబడింది</translation>
 <translation id="8428213095426709021">సెట్టింగ్‌లు</translation>
 <translation id="8438566539970814960">సెర్చ్‌లను, బ్రౌజింగ్‌ను మెరుగుపరచండి</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">డిజిటల్ సంక్షేమం నుండి మీ Chrome కార్యకలాపాన్ని తీసివేస్తుంది</translation>
 <translation id="927968626442779827">Google Chromeలోని లైట్ మోడ్‌ను ఉపయోగించండి</translation>
 <translation id="932327136139879170">హోమ్</translation>
-<translation id="93753284658583800">హోమ్ పేజీ మార్చబడింది</translation>
 <translation id="938850635132480979">ఎర్రర్: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">రహస్య పదబంధాన్ని నమోదు చేయండి</translation>
 <translation id="948039501338975565">బుక్‌మార్క్ ఫోల్డర్‌ల లిస్ట్</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index 6b37e508..26709d8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">เปิดการซิงค์เพื่อซิงค์และปรับเปลี่ยนข้อมูลตามความต้องการในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="1209206284964581585">ซ่อนไปก่อน</translation>
 <translation id="1227058898775614466">ประวัติการนำทาง</translation>
-<translation id="1229399675748764149">ทำให้หน้านี้เป็นหน้าแรก</translation>
 <translation id="1231733316453485619">เปิดการซิงค์ไหม</translation>
 <translation id="123724288017357924">โหลดหน้าปัจจุบันซ้ำ โดยไม่คำนึงถึงเนื้อหาที่แคชไว้</translation>
 <translation id="124678866338384709">ปิดแท็บปัจจุบัน</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">ลบรหัสผ่าน</translation>
 <translation id="1521774566618522728">ใช้งานวันนี้</translation>
 <translation id="1538801903729528855">รับประสบการณ์ใช้งานด้วยเสียงที่ดียิ่งขึ้นบนเว็บ</translation>
-<translation id="1543538514740974167">มาที่นี่ได้เร็วขึ้น</translation>
 <translation id="1544826120773021464">หากต้องการจัดการบัญชี Google ให้แตะปุ่ม "จัดการบัญชี"</translation>
 <translation id="1549000191223877751">ย้ายไปยังหน้าต่างอื่น</translation>
 <translation id="1553358976309200471">อัปเดต Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">เว็บไซต์</translation>
 <translation id="4594952190837476234">หน้าเว็บออฟไลน์นี้สร้างเมื่อวันที่ <ph name="CREATION_TIME" /> และอาจแตกต่างไปจากเวอร์ชันออนไลน์</translation>
 <translation id="4605958867780575332">รายการที่นำออก: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">บันทึกหน้าไว้ใช้ในภายหลังและรับการช่วยเตือน</translation>
 <translation id="4616150815774728855">เปิด <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ใช้รหัสผ่าน</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{มีรหัสผ่านที่ถูกละเมิด 1 รายการ}other{มีรหัสผ่านที่ถูกละเมิด # รายการ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">คืนค่า <ph name="ITEM_TITLE" /> แล้ว</translation>
 <translation id="7029809446516969842">รหัสผ่าน</translation>
 <translation id="7030675613184250187">คุณบันทึกหน้าในเรื่องรออ่านเพื่อให้หาเจออีกครั้งหรืออ่านแบบออฟไลน์ได้</translation>
-<translation id="703523980599857277">เปลี่ยนหน้าแรก</translation>
 <translation id="7054588988317389591">รับคำอธิบายรูปภาพใช่ไหม</translation>
 <translation id="7055152154916055070">การเปลี่ยนเส้นทางถูกบล็อก</translation>
 <translation id="7063006564040364415">ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์การซิงค์</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome เป็นเวอร์ชันล่าสุดแล้ว</translation>
 <translation id="7106762743910369165">เบราว์เซอร์ได้รับการจัดการโดยองค์กรของคุณ</translation>
 <translation id="7121362699166175603">ล้างประวัติการเข้าชมและการเติมข้อความอัตโนมัติในแถบที่อยู่เว็บ บัญชี Google อาจมีประวัติการท่องเว็บรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
-<translation id="7128355412245153445">ดูเว็บไซต์ยอดนิยมและเรื่องราวล่าสุดได้ทุกเมื่อที่แตะปุ่มหน้าแรก</translation>
 <translation id="7138678301420049075">อื่นๆ</translation>
 <translation id="7146622961999026732">ดูเหมือนว่าเว็บไซต์และแอปต่อไปนี้จะสำคัญกับคุณ</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />โหลดหน้าต้นฉบับ<ph name="END_LINK" />จาก <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. เลือก <ph name="APP_NAME" />\n2. แตะ "ทุกครั้ง"</translation>
 <translation id="8410695015584479363">ติดตามราคา</translation>
 <translation id="8413126021676339697">แสดงประวัติการเข้าชมทั้งหมด</translation>
-<translation id="8425213833346101688">เปลี่ยน</translation>
 <translation id="8427875596167638501">แท็บแสดงตัวอย่างเปิดอยู่ครึ่งเดียว</translation>
 <translation id="8428213095426709021">การตั้งค่า</translation>
 <translation id="8438566539970814960">ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">นำกิจกรรม Chrome ออกจากไลฟ์สไตล์ดิจิทัล</translation>
 <translation id="927968626442779827">ใช้โหมด Lite ใน Google Chrome</translation>
 <translation id="932327136139879170">หน้าแรก</translation>
-<translation id="93753284658583800">เปลี่ยนหน้าแรกแล้ว</translation>
 <translation id="938850635132480979">ข้อผิดพลาด: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">ป้อนข้อความรหัสผ่าน</translation>
 <translation id="948039501338975565">รายการโฟลเดอร์บุ๊กมาร์ก</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index fc26bc1..0ad903a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Cihazlar arasında senkronizasyon ve kişiselleştirme yapmak için senkronizasyonu etkinleştirin</translation>
 <translation id="1209206284964581585">Şimdilik gizle</translation>
 <translation id="1227058898775614466">Gezinme geçmişi</translation>
-<translation id="1229399675748764149">Bu sayfayı ana sayfanız yapın</translation>
 <translation id="1231733316453485619">Senkronizasyon açılsın mı?</translation>
 <translation id="123724288017357924">Önbelleğe alınmış içeriği yoksayarak geçerli sayfayı yeniden yükler</translation>
 <translation id="124678866338384709">Geçerli sekmeyi kapatır</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Şifreyi sil</translation>
 <translation id="1521774566618522728">Son etkin olduğu zaman:</translation>
 <translation id="1538801903729528855">Web'de daha iyi ses deneyimi elde edin</translation>
-<translation id="1543538514740974167">Buraya daha hızlı ulaşın</translation>
 <translation id="1544826120773021464">Google hesabınızı yönetmek için "Hesabı yönet" düğmesine dokunun</translation>
 <translation id="1549000191223877751">Diğer pencereye git</translation>
 <translation id="1553358976309200471">Chrome'u güncelle</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Siteler</translation>
 <translation id="4594952190837476234">Bu çevrimdışı sayfa <ph name="CREATION_TIME" /> tarihli olup web'deki sürümden farklı olabilir.</translation>
 <translation id="4605958867780575332">Öğe kaldırıldı: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Sayfaları daha sonrası için kaydedip hatırlatıcı alın</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> APK'sını aç</translation>
 <translation id="4634124774493850572">Şifre kullan</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Güvenliği ihlal edilmiş 1 şifre}other{Güvenliği ihlal edilmiş # şifre}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> tarihinde geri yüklendi</translation>
 <translation id="7029809446516969842">Şifreler</translation>
 <translation id="7030675613184250187">Sayfaları okuma listenize kaydederek daha sonra kolayca bulabilir veya internet bağlantınız olmadığında da okuyabilirsiniz</translation>
-<translation id="703523980599857277">Ana sayfayı değiştir</translation>
 <translation id="7054588988317389591">Resim açıklaması almak istiyor musunuz?</translation>
 <translation id="7055152154916055070">Yönlendirme engellendi:</translation>
 <translation id="7063006564040364415">Senkronizasyon sunucusuna bağlanılamadı.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome güncel</translation>
 <translation id="7106762743910369165">Tarayıcınız, kuruluşunuz tarafından yönetilmektedir</translation>
 <translation id="7121362699166175603">Geçmişi ve adres çubuğundaki otomatik tamamlamaları temizler. Google Hesabınızın <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir.</translation>
-<translation id="7128355412245153445">Ana sayfa düğmesine her dokunduğunuzda popüler sitelerinizi ve son haberleri görün</translation>
 <translation id="7138678301420049075">Diğer</translation>
 <translation id="7146622961999026732">Bu siteler ve uygulamalar sizin için önemli görünüyor:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> alanından <ph name="BEGIN_LINK" />orijinal sayfayı yükle<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> uygulamasını seçin\n2. "Her zaman" seçeneğine dokunun</translation>
 <translation id="8410695015584479363">Fiyatları takip et</translation>
 <translation id="8413126021676339697">Tüm geçmişi göster</translation>
-<translation id="8425213833346101688">Değiştir</translation>
 <translation id="8427875596167638501">Önizleme sekmesi yarım açık</translation>
 <translation id="8428213095426709021">Ayarlar</translation>
 <translation id="8438566539970814960">Aramaları ve göz atmayı daha iyi yap</translation>
@@ -1133,7 +1127,7 @@
 <translation id="8798449543960971550">Okunanlar</translation>
 <translation id="8812260976093120287">Bazı web sitelerinde, yukarıdaki desteklenen ödeme uygulamalarıyla cihazınızdan ödeme yapabilirsiniz.</translation>
 <translation id="881688628773363275">Önizleme sekmesinin içeriği görüntülenemiyor.</translation>
-<translation id="8820817407110198400">Favoriler</translation>
+<translation id="8820817407110198400">Yer işaretleri</translation>
 <translation id="883806473910249246">İçerik indirilirken bir hata oluştu.</translation>
 <translation id="8840953339110955557">Bu sayfa, web'deki sürümden farklı olabilir.</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" />, sekme</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome etkinliğinizi Dijital Denge'den kaldırma</translation>
 <translation id="927968626442779827">Google Chrome'da Basit modu kullanın</translation>
 <translation id="932327136139879170">Ana Sayfa</translation>
-<translation id="93753284658583800">Ana sayfa değişti</translation>
 <translation id="938850635132480979">Hata: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Parolayı girin</translation>
 <translation id="948039501338975565">Yer işareti klasörlerinin listesi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
index d1074aa..0edb8d80 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Щоб синхронізувати й персоналізувати дані на пристроях, увімкніть синхронізацію</translation>
 <translation id="1209206284964581585">Приховати</translation>
 <translation id="1227058898775614466">Історія навігації</translation>
-<translation id="1229399675748764149">Зробіть цю сторінку головною</translation>
 <translation id="1231733316453485619">Увімкнути синхронізацію?</translation>
 <translation id="123724288017357924">Оновити цю сторінку, ігноруючи кешований вміст</translation>
 <translation id="124678866338384709">Закрити поточну вкладку</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Видалити пароль</translation>
 <translation id="1521774566618522728">У мережі сьогодні</translation>
 <translation id="1538801903729528855">Кращий голосовий пошук в Інтернеті</translation>
-<translation id="1543538514740974167">Відкривайте потрібні сторінки швидше</translation>
 <translation id="1544826120773021464">Щоб налаштувати обліковий запис Google, натисніть кнопку "Керувати обліковим записом"</translation>
 <translation id="1549000191223877751">Відкрити в іншому вікні</translation>
 <translation id="1553358976309200471">Оновити Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Сайти</translation>
 <translation id="4594952190837476234">Цю сторінку створено <ph name="CREATION_TIME" />. Вона може відрізнятися від онлайн-версії.</translation>
 <translation id="4605958867780575332">Елемент "<ph name="ITEM_TITLE" />" вилучено</translation>
-<translation id="4614535611158687827">Зберігайте сторінки на пізніше й отримуйте нагадування</translation>
 <translation id="4616150815774728855">Відкрити файл <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Прийняти пароль</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 зламаний пароль}one{# зламаний пароль}few{# зламані паролі}many{# зламаних паролів}other{# зламаного пароля}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Відновлено об'єкт "<ph name="ITEM_TITLE" />"</translation>
 <translation id="7029809446516969842">Паролі</translation>
 <translation id="7030675613184250187">Додайте сторінку в список читання, щоб переглянути її в режимі офлайн або відвідати пізніше</translation>
-<translation id="703523980599857277">Змінити головну сторінку</translation>
 <translation id="7054588988317389591">Отримувати описи зображень?</translation>
 <translation id="7055152154916055070">Переадресацію заблоковано:</translation>
 <translation id="7063006564040364415">Не вдалося з’єднатись із сервером синхронізації.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome оновлено</translation>
 <translation id="7106762743910369165">Ваша організація керує веб-переглядачем</translation>
 <translation id="7121362699166175603">Видалення історії й варіантів автозавершень в адресному рядку. Історія веб-перегляду може також зберігатися у вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Переглядайте улюблені сайти й нещодавні історії щоразу, коли натискаєте кнопку головного екрана</translation>
 <translation id="7138678301420049075">Інше</translation>
 <translation id="7146622961999026732">Схоже, ці сайти й додатки є важливими для вас:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Завантажити оригінальну сторінку<ph name="END_LINK" /> з домену <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Виберіть <ph name="APP_NAME" />\n2. Натисніть "Завжди".</translation>
 <translation id="8410695015584479363">Відстежувати ціни</translation>
 <translation id="8413126021676339697">Показати повну історію</translation>
-<translation id="8425213833346101688">Змінити</translation>
 <translation id="8427875596167638501">Вкладку "Попередній перегляд" відкрито на половину висоти</translation>
 <translation id="8428213095426709021">Налаштування</translation>
 <translation id="8438566539970814960">Покращувати пошук і веб-перегляд</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Видалити активність у Chrome із Цифрового добробуту</translation>
 <translation id="927968626442779827">Користуйтеся спрощеним режимом у Google Chrome</translation>
 <translation id="932327136139879170">Домашня сторінка</translation>
-<translation id="93753284658583800">Головну сторінку змінено</translation>
 <translation id="938850635132480979">Помилка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ввести парольну фразу</translation>
 <translation id="948039501338975565">Список папок із закладками</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
index 41c5e8f..b2935e76 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">سبھی آلات پر سِنک کرنے اور ذاتی نوعیت سازی کیلئے، سِنک کو آن کریں</translation>
 <translation id="1209206284964581585">ابھی کیلئے چھپائیں</translation>
 <translation id="1227058898775614466">نیویگیشن کی تاریخ</translation>
-<translation id="1229399675748764149">اس صفحہ کو اپنا ہوم صفحہ بنائیں</translation>
 <translation id="1231733316453485619">مطابقت پذیری آن کریں؟</translation>
 <translation id="123724288017357924">کیش کردہ مواد نظر انداز کرکے موجودہ صفحہ پھر لوڈ کریں</translation>
 <translation id="124678866338384709">موجودہ ٹیب بند کریں</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">پاس ورڈ حذف کریں</translation>
 <translation id="1521774566618522728">آج فعال کیا گیا</translation>
 <translation id="1538801903729528855">ویب پر ایک بہتر صوتی تجربہ حاصل کریں</translation>
-<translation id="1543538514740974167">یہاں تیزی سے پہنچیں</translation>
 <translation id="1544826120773021464">‏اپنے Google اکاؤنٹ کا نظم کرنے کے لیے، "اکاؤنٹ کا نظم کریں" بٹن پر تھپتھپائیں</translation>
 <translation id="1549000191223877751">دوسری ونڈو پر جائیں</translation>
 <translation id="1553358976309200471">‏Chrome کو اپ ڈیٹ کریں</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">سائٹیں</translation>
 <translation id="4594952190837476234">یہ آف لائن صفحہ <ph name="CREATION_TIME" /> کا ہے اور آن لائن ورژن سے مختلف ہو سکتا ہے۔</translation>
 <translation id="4605958867780575332">آئٹم ہٹا دیا گیا: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">بعد کے لئے صفحات کو محفوظ کریں اور یاد دہانی حاصل کریں</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> کو کھولیں</translation>
 <translation id="4634124774493850572">پاس ورڈ استعمال کریں</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 متاثرہ پاس ورڈ}other{# متاثرہ پاس ورڈز}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705"><ph name="ITEM_TITLE" /> کو بحال کیا گیا</translation>
 <translation id="7029809446516969842">پاس ورڈز</translation>
 <translation id="7030675613184250187">آپ صفحات کو دوبارہ تلاش کرنے یا آف لائن پڑھنے کیلئے اپنی پڑھنے کی فہرست میں محفوظ کر سکتے ہیں</translation>
-<translation id="703523980599857277">ہوم صفحہ تبدیل کریں</translation>
 <translation id="7054588988317389591">تصویری تفصیلات حاصل کریں؟</translation>
 <translation id="7055152154916055070">ری ڈائریکٹ مسدود کیا گیا:</translation>
 <translation id="7063006564040364415">مطابقت پذیری سرور سے منسلک نہیں کیا جا سکا۔</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">‏Chrome اپ ٹو ڈیٹ ہے</translation>
 <translation id="7106762743910369165">آپ کا براؤزر آپ کی تنظیم کے زیر انتظام ہے</translation>
 <translation id="7121362699166175603">‏پتہ بار میں موجود سرگزشت اور خودکار تکمیلات کو صاف کر دیتا ہے۔ ممکن ہے کہ <ph name="BEGIN_LINK" />myactivity.google<ph name="END_LINK" /> پر آپ کے Google اکاؤنٹ میں براؤزنگ کی سرگزشت کی دیگر شکلیں موجود ہوں۔</translation>
-<translation id="7128355412245153445">جب بھی آپ ہوم بٹن پر تھپتھپائیں تو اپنی سر فہرست سائٹس اور حالیہ کہانیاں دیکھیں</translation>
 <translation id="7138678301420049075">دوسرا</translation>
 <translation id="7146622961999026732">یہ سائٹیں اور ایپس آپ کے لیے اہم معلوم ہوتی ہیں:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> سے <ph name="BEGIN_LINK" />اصل صفحہ لوڈ کریں<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">‏1۔ ‫<ph name="APP_NAME" /> منتخب کریں\n2۔ "ہمیشہ" پر تھپتھپائیں</translation>
 <translation id="8410695015584479363">قیمتیں ٹریک کریں</translation>
 <translation id="8413126021676339697">مکمل سرگزشت دکھائیں</translation>
-<translation id="8425213833346101688">تبدیل کریں</translation>
 <translation id="8427875596167638501">پیش منظر ٹیب آدھا کھلا ہے</translation>
 <translation id="8428213095426709021">ترتیبات</translation>
 <translation id="8438566539970814960">تلاشوں اور براؤزنگ کو بہتر بنائیں</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">‏ڈیجیٹل فلاح و بہبود سے اپنی Chrome کی سرگرمی ہٹائیں</translation>
 <translation id="927968626442779827">‏Google Chrome پر لائٹ موڈ کا استعمال کریں</translation>
 <translation id="932327136139879170">ھوم</translation>
-<translation id="93753284658583800">ہوم صفحہ کو تبدیل کر دیا گیا</translation>
 <translation id="938850635132480979">خرابی: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">پاس فریز درج کریں</translation>
 <translation id="948039501338975565">بُک مارک فولڈرز کی فہرست</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index 27147d3..e1760e3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Barcha qurilmalarda sinxronlash va o‘zingizga moslash uchun sinxronizatsiyani yoqing</translation>
 <translation id="1209206284964581585">Berkitish</translation>
 <translation id="1227058898775614466">Sahifalar tarixi</translation>
-<translation id="1229399675748764149">Bu sahifani asosiy qilib belgilang</translation>
 <translation id="1231733316453485619">Sinxronizatsiya yoqilsinmi?</translation>
 <translation id="123724288017357924">Keshga yuklangan ma’lumotlarsiz sahifani qayta yuklang.</translation>
 <translation id="124678866338384709">Joriy varaqni yopish</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Parolni o‘chirish</translation>
 <translation id="1521774566618522728">Bugun onlayn edi</translation>
 <translation id="1538801903729528855">Internetdagi axborotlarni ovoz bilan oling</translation>
-<translation id="1543538514740974167">Tezkor kirish</translation>
 <translation id="1544826120773021464">Google hisobingizni boshqarish uchun “Hisobni boshqarish” tugmasini bosing</translation>
 <translation id="1549000191223877751">Boshqa oynaga o‘tkazish</translation>
 <translation id="1553358976309200471">Chrome‘ni yangilash</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">Bu sahifa saytning <ph name="CREATION_TIME" /> kunidagi nusxasi va onlayn versiyasidan farq qilishi mumkin.</translation>
 <translation id="4605958867780575332">Olib tashlangan element: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Sahifalarni saqlab qolish va keyinroq eslatish</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> veb-ilovasini ochish</translation>
 <translation id="4634124774493850572">Paroldan foydalanish</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ta parol oshkor etilgan}other{# ta parol oshkor etilgan}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Tiklandi: <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Parollar</translation>
 <translation id="7030675613184250187">Sahifalarni Mutolaa roʻyxatiga saqlash va keyinroq oflayn oʻqish mumkin</translation>
-<translation id="703523980599857277">Bosh sahifani oʻzgartirish</translation>
 <translation id="7054588988317389591">Rasm tavsiflari chiqsinmi?</translation>
 <translation id="7055152154916055070">Yo‘naltirish bloklandi:</translation>
 <translation id="7063006564040364415">Sinxronlash serveriga ulanib bo‘lmadi.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome eng oxirgi versiyada</translation>
 <translation id="7106762743910369165">Brauzeringiz tashkilotingiz boshqaruvida</translation>
 <translation id="7121362699166175603">Manzil qatoridagi tarix va avto‘ldirishlarni tozalaydi. Google hisobingiz orqali bajargan internetdagi faoliyatingizni <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> orqali ko‘rishingiz mumkin.</translation>
-<translation id="7128355412245153445">Eng sara saytlar va yangi maqolalarni koʻrish uchun bosh sahifa tugmasini bosishingiz kifoya.</translation>
 <translation id="7138678301420049075">Boshqa</translation>
 <translation id="7146622961999026732">Bu sayt va ilovalar siz uchun muhimga oʻxshaydi:</translation>
 <translation id="7149158118503947153"><ph name="DOMAIN_NAME" /> domenidagi <ph name="BEGIN_LINK" />asl sahifani yuklash<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. <ph name="APP_NAME" /> ilovasini tanlang\n2. “Har doim” ustiga bosing</translation>
 <translation id="8410695015584479363">Narxlarni kuzatish</translation>
 <translation id="8413126021676339697">Barcha tarixni ko‘rsatish</translation>
-<translation id="8425213833346101688">O‘zgartirish</translation>
 <translation id="8427875596167638501">Razm solish sahifasi yarim hajmda ochildi</translation>
 <translation id="8428213095426709021">Sozlamalar</translation>
 <translation id="8438566539970814960">Sahifalarni kezish va qidiruvni yaxshilash</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Chrome amallarini Raqamli qulaylikdan olib tashlash</translation>
 <translation id="927968626442779827">Google Chrome brauzerida Lite rejimidan foydalanish</translation>
 <translation id="932327136139879170">Bosh sahifa</translation>
-<translation id="93753284658583800">Bosh sahifa oʻzgartirildi</translation>
 <translation id="938850635132480979">Xato: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Kodli iborani kiriting</translation>
 <translation id="948039501338975565">Bukmark jildlari roʻyxati</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
index 822628c1..dd0bcc5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Để đồng bộ hóa và cá nhân hóa trên các thiết bị, hãy bật tính năng đồng bộ hóa</translation>
 <translation id="1209206284964581585">Ẩn ngay bây giờ</translation>
 <translation id="1227058898775614466">Lịch sử di chuyển</translation>
-<translation id="1229399675748764149">Đặt trang này làm trang chủ</translation>
 <translation id="1231733316453485619">Bạn muốn bật tính năng đồng bộ hóa?</translation>
 <translation id="123724288017357924">Tải lại trang hiện tại, bỏ qua nội dung được lưu trong bộ nhớ đệm</translation>
 <translation id="124678866338384709">Đóng thẻ hiện tại</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Xóa mật khẩu</translation>
 <translation id="1521774566618522728">Hoạt động hôm nay</translation>
 <translation id="1538801903729528855">Cải thiện trải nghiệm nhập liệu bằng giọng nói trên web</translation>
-<translation id="1543538514740974167">Truy cập vào trang này nhanh hơn</translation>
 <translation id="1544826120773021464">Để quản lý Tài khoản Google của bạn, hãy nhấn vào nút "Quản lý tài khoản"</translation>
 <translation id="1549000191223877751">Di chuyển đến cửa sổ khác</translation>
 <translation id="1553358976309200471">Cập nhật Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Trang web</translation>
 <translation id="4594952190837476234">Trang ngoại tuyến này được tạo từ lúc <ph name="CREATION_TIME" /> và có thể khác với phiên bản trực tuyến.</translation>
 <translation id="4605958867780575332">Đã xóa mục: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Lưu các trang để đọc sau và nhận lời nhắc</translation>
 <translation id="4616150815774728855">Mở <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Sử dụng mật khẩu</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 mật khẩu bị lộ}other{# mật khẩu bị lộ}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Đã khôi phục <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Mật khẩu</translation>
 <translation id="7030675613184250187">Bạn có thể lưu các trang vào danh sách đọc để tìm lại hoặc đọc khi không có mạng</translation>
-<translation id="703523980599857277">Thay đổi trang chủ</translation>
 <translation id="7054588988317389591">Tải nội dung mô tả hình ảnh?</translation>
 <translation id="7055152154916055070">Liên kết chuyển hướng đã chặn:</translation>
 <translation id="7063006564040364415">Không thể kết nối với máy chủ đồng bộ hóa.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome đã được cập nhật</translation>
 <translation id="7106762743910369165">Tổ chức của bạn quản lý trình duyệt này</translation>
 <translation id="7121362699166175603">Xóa lịch sử duyệt web và nội dung tự động hoàn thành trong thanh địa chỉ. Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác tại <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Xem các trang web hàng đầu và những tin gần đây bất cứ khi nào bạn nhấn vào nút Trang chủ</translation>
 <translation id="7138678301420049075">Khác</translation>
 <translation id="7146622961999026732">Các trang web và ứng dụng này có vẻ quan trọng đối với bạn:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Tải trang gốc<ph name="END_LINK" /> từ <ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Chọn <ph name="APP_NAME" />\n2. Nhấn vào "Luôn chọn"</translation>
 <translation id="8410695015584479363">Theo dõi giá</translation>
 <translation id="8413126021676339697">Hiển thị toàn bộ lịch sử</translation>
-<translation id="8425213833346101688">Thay đổi</translation>
 <translation id="8427875596167638501">Thẻ xem trước đang mở trên nửa màn hình</translation>
 <translation id="8428213095426709021">Cài đặt</translation>
 <translation id="8438566539970814960">Cải thiện tính năng tìm kiếm và duyệt web</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Xóa hoạt động của bạn trên Chrome khỏi Digital Wellbeing</translation>
 <translation id="927968626442779827">Dùng Chế độ thu gọn trên Google Chrome</translation>
 <translation id="932327136139879170">Trang chủ</translation>
-<translation id="93753284658583800">Trang chủ đã thay đổi</translation>
 <translation id="938850635132480979">Lỗi: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Nhập cụm mật khẩu</translation>
 <translation id="948039501338975565">Danh sách thư mục dấu trang</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index 695bcec..00267a6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -2,11 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
 <translation id="1028699632127661925">正在发送到<ph name="DEVICE_NAME" />…</translation>
-<translation id="103269572468856066">一并清除以下网站和应用内的数据?</translation>
+<translation id="103269572468856066">一并清除来自这些网站和应用的数据?</translation>
 <translation id="1036348656032585052">关闭</translation>
 <translation id="1036727731225946849">正在添加<ph name="WEBAPK_NAME" />…</translation>
 <translation id="1041308826830691739">来自网站</translation>
-<translation id="1045899828449635435">一并清除以下网站内的数据?</translation>
+<translation id="1045899828449635435">一并清除来自这些网站的数据?</translation>
 <translation id="1047303875618851375">Chrome 无法验证您的信息</translation>
 <translation id="1049743911850919806">无痕</translation>
 <translation id="10614374240317010">一律不保存</translation>
@@ -34,10 +34,9 @@
 <translation id="1201402288615127009">下一步</translation>
 <translation id="1204037785786432551">下载链接</translation>
 <translation id="1206892813135768548">复制链接文字</translation>
-<translation id="1208340532756947324">要在您的所有设备上保持同步并进行个性化设置,请开启同步功能</translation>
+<translation id="1208340532756947324">要在您的所有设备上保持同步并获享个性化体验,请开启同步功能</translation>
 <translation id="1209206284964581585">暂时隐藏</translation>
 <translation id="1227058898775614466">导航历史记录</translation>
-<translation id="1229399675748764149">将此页面设为您的主页</translation>
 <translation id="1231733316453485619">开启同步功能?</translation>
 <translation id="123724288017357924">重新加载当前网页(忽略缓存的内容)</translation>
 <translation id="124678866338384709">关闭当前标签页</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">删除密码</translation>
 <translation id="1521774566618522728">今天曾有活动</translation>
 <translation id="1538801903729528855">在网络上畅享更佳的语音使用体验</translation>
-<translation id="1543538514740974167">更快速地转到此处</translation>
 <translation id="1544826120773021464">要管理您的 Google 帐号,请点按“管理帐号”按钮</translation>
 <translation id="1549000191223877751">移至其他窗口</translation>
 <translation id="1553358976309200471">更新 Chrome</translation>
@@ -142,7 +140,7 @@
 <translation id="2002537628803770967">Google Pay 中存储的信用卡和地址信息</translation>
 <translation id="2010780124464321179">无法为所选文本创建链接。请改为分享页面链接。</translation>
 <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# 个文件}other{# 个文件}}</translation>
-<translation id="2017836877785168846">清除历史记录和地址栏中的自动填充项。</translation>
+<translation id="2017836877785168846">清除历史记录和地址栏中的自动补全项。</translation>
 <translation id="2021896219286479412">全屏网站控件</translation>
 <translation id="2038563949887743358">开启“请求切换到桌面版网站”</translation>
 <translation id="204321170514947529">Chrome 中也有<ph name="APP_NAME" />的数据</translation>
@@ -153,7 +151,7 @@
 <translation id="2068748236079642969">观看下一个视频</translation>
 <translation id="2074143993849053708">针对 Google 助理语音搜索功能的用户意见征求界面已关闭</translation>
 <translation id="2082238445998314030">第 <ph name="RESULT_NUMBER" /> 条结果,共 <ph name="TOTAL_RESULTS" /> 条</translation>
-<translation id="2096012225669085171">在所有设备上保持同步并进行个性化设置</translation>
+<translation id="2096012225669085171">在所有设备上保持同步,获享个性化体验</translation>
 <translation id="2100273922101894616">自动登录</translation>
 <translation id="2100314319871056947">请尝试使用较小的文本块进行分享</translation>
 <translation id="2109711654079915747">无需离开所在页面,便可了解网站上的主题。“触摸搜索”功能会将被触摸的字词及上下文一起发送给 Google 搜索,后者随即会据此返回相应的定义、图片、搜索结果及其他详情。
@@ -298,7 +296,7 @@
 <translation id="3058498974290601450">您随时可在“设置”中开启同步功能</translation>
 <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> 个书签}other{<ph name="BOOKMARKS_COUNT_MANY" /> 个书签}}</translation>
 <translation id="3062802207422175757">Chrome 可提供您感兴趣的报道</translation>
-<translation id="3089395242580810162">在无痕模式标签页中打开</translation>
+<translation id="3089395242580810162">在无痕式标签页中打开</translation>
 <translation id="3098745985164956033">系统会将部分图片发送给 Google 以便为您改进说明</translation>
 <translation id="3114507951000454849">阅读今日新闻 <ph name="NEWS_ICON" /></translation>
 <translation id="3123734510202723619">通告</translation>
@@ -385,7 +383,7 @@
 <translation id="3716182511346448902">此网页占用的内存过多,因此 Chrome 已将其暂停。</translation>
 <translation id="3721119614952978349">您与 Google</translation>
 <translation id="3737319253362202215">翻译设置</translation>
-<translation id="3738139272394829648">触摸搜索</translation>
+<translation id="3738139272394829648">点按即可搜索</translation>
 <translation id="3739899004075612870">已在 <ph name="PRODUCT_NAME" /> 中添加书签</translation>
 <translation id="3749259744154402564">不支持</translation>
 <translation id="3771001275138982843">无法下载此项更新</translation>
@@ -474,7 +472,7 @@
 <translation id="4440958355523780886">由 Google 提供的精简版网页。点按即可加载原始网页。</translation>
 <translation id="4452411734226507615">关闭“<ph name="TAB_TITLE" />”标签页</translation>
 <translation id="4452548195519783679">已将书签添加到“<ph name="FOLDER_NAME" />”</translation>
-<translation id="4472118726404937099">要在您的所有设备上保持同步并进行个性化设置,请登录您的帐号并开启同步功能</translation>
+<translation id="4472118726404937099">要在您的所有设备上保持同步并获享个性化体验,请登录您的帐号并开启同步功能</translation>
 <translation id="447252321002412580">帮助我们改进 Chrome 的功能和性能</translation>
 <translation id="4479972344484327217">正在为 Chrome 安装<ph name="MODULE" />…</translation>
 <translation id="4487967297491345095">Chrome 的所有应用数据都将被永久删除,其中包括所有文件、设置、帐号、数据库等。</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">网站</translation>
 <translation id="4594952190837476234">此离线网页是在 <ph name="CREATION_TIME" />创建的,可能与在线版本有所不同。</translation>
 <translation id="4605958867780575332">以下项已移除:<ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">保存页面以供日后阅读并接收提醒</translation>
 <translation id="4616150815774728855">打开<ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密码</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{有 1 个密码已遭泄露}other{有 # 个密码已遭泄露}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">“<ph name="ITEM_TITLE" />”已恢复</translation>
 <translation id="7029809446516969842">密码</translation>
 <translation id="7030675613184250187">您可以将所需网页保存到阅读清单中,以便再次查看或离线阅读</translation>
-<translation id="703523980599857277">更改主页</translation>
 <translation id="7054588988317389591">获取图片说明?</translation>
 <translation id="7055152154916055070">已禁止重定向:</translation>
 <translation id="7063006564040364415">无法连接到同步服务器。</translation>
@@ -887,8 +883,7 @@
 <translation id="7080806333218412752">会将网址发送给“安全浏览”功能进行检查。还会发送网页、下载内容、扩展程序活动和系统信息的少量样本,以帮助发现新威胁。而且,会在您登录后暂时将这些数据关联到您的 Google 帐号,以便在各个 Google 应用中为您提供保护。</translation>
 <translation id="7088681679121566888">Chrome 已是最新版本</translation>
 <translation id="7106762743910369165">您的浏览器由贵单位管理</translation>
-<translation id="7121362699166175603">清除历史记录和地址栏中的自动填充项。您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation>
-<translation id="7128355412245153445">只需点击“主页”按钮,即可查看您所在国家/地区的热门网站和近期报道</translation>
+<translation id="7121362699166175603">清除历史记录和地址栏中的自动补全项。您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation>
 <translation id="7138678301420049075">其他</translation>
 <translation id="7146622961999026732">这些网站和应用似乎对您很重要:</translation>
 <translation id="7149158118503947153">从 <ph name="DOMAIN_NAME" /> <ph name="BEGIN_LINK" />加载原始网页<ph name="END_LINK" /></translation>
@@ -924,7 +919,7 @@
 <translation id="7396940094317457632"><ph name="FILE_NAME" />。</translation>
 <translation id="7400418766976504921">网址</translation>
 <translation id="7403691278183511381">Chrome 首次运行体验</translation>
-<translation id="741204030948306876">立即启用</translation>
+<translation id="741204030948306876">立即开启</translation>
 <translation id="7413229368719586778">开始日期:<ph name="DATE" /></translation>
 <translation id="7416941666639889592">加入 Web Crowd 即表示,您允许网站在不使用个人身份信息的情况下为您提供贴合需求的网络体验。Web Crowd 与音乐会中的人群类似,网站和广告主只会知道数千名用户有相似的兴趣。</translation>
 <translation id="7431991332293347422">控制 Google 如何利用您的浏览记录为您提供个性化的 Google 搜索和其他 Google 服务</translation>
@@ -972,9 +967,9 @@
 <translation id="766587987807204883">报道会显示在此处,即使在离线状态下也可以阅读</translation>
 <translation id="7682724950699840886">请尝试按以下提示操作:确保您的设备上有足够的空间,然后重新尝试导出。</translation>
 <translation id="7698359219371678927">在 <ph name="APP_NAME" /> 中创建电子邮件</translation>
-<translation id="7704317875155739195">自动填充搜索字词和网址</translation>
+<translation id="7704317875155739195">自动补全搜索字词和网址</translation>
 <translation id="7707922173985738739">使用移动数据</translation>
-<translation id="7725024127233776428">您添加书签的网页会显示在此处</translation>
+<translation id="7725024127233776428">您添加了书签的网页会显示在此处</translation>
 <translation id="7735637452482172701">使用“屏幕锁定”功能解锁</translation>
 <translation id="7746457520633464754">为了检测危险应用和网站,Chrome 会将您所访问的部分网页的网址、有限的系统信息以及部分网页内容发送给 Google</translation>
 <translation id="7757787379047923882">分享自“<ph name="DEVICE_NAME" />”的文字</translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. 选择 <ph name="APP_NAME" />\n2. 点按“始终”</translation>
 <translation id="8410695015584479363">跟踪价格</translation>
 <translation id="8413126021676339697">显示全部历史记录</translation>
-<translation id="8425213833346101688">更改</translation>
 <translation id="8427875596167638501">预览标签页已在下半屏中打开</translation>
 <translation id="8428213095426709021">设置</translation>
 <translation id="8438566539970814960">改善搜索和浏览体验</translation>
@@ -1106,7 +1100,7 @@
 <translation id="8561196567344536112">1. 转到“设置”\n2. 点按“浏览器应用”\n3. 选择 <ph name="APP_NAME" /></translation>
 <translation id="8562452229998620586">已保存的密码将显示在这里。</translation>
 <translation id="8569404424186215731">自 <ph name="DATE" />以来</translation>
-<translation id="8571213806525832805">近 4 周</translation>
+<translation id="8571213806525832805">过去 4 周</translation>
 <translation id="8572344201470131220">图片已复制</translation>
 <translation id="8583805026567836021">清除帐号数据</translation>
 <translation id="8587585930972369234">轻触并按住即可搜索</translation>
@@ -1118,7 +1112,7 @@
 <translation id="8655129584991699539">要清除数据,请前往 Chrome 的“设置”页面</translation>
 <translation id="8656747343598256512">使用您的 Google 帐号登录此网站和 Chrome。您可等到需要时再开启同步功能。</translation>
 <translation id="8659579665266920523">如何使用 Chrome 进行搜索</translation>
-<translation id="8662811608048051533">您会从大多数网站退出。</translation>
+<translation id="8662811608048051533">会致使您从大多数网站退出。</translation>
 <translation id="8664979001105139458">文件名已存在</translation>
 <translation id="8683039184091909753">图片</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{信号强度:# 格}other{信号强度:# 格}}</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">从“数字健康”应用中移除您的 Chrome 活动记录</translation>
 <translation id="927968626442779827">使用 Google Chrome 的精简模式</translation>
 <translation id="932327136139879170">首页</translation>
-<translation id="93753284658583800">主页已更改</translation>
 <translation id="938850635132480979">错误:<ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">请输入密码</translation>
 <translation id="948039501338975565">书签文件夹列表</translation>
@@ -1204,7 +1197,7 @@
 <translation id="962979164594783469">安装此应用</translation>
 <translation id="968900484120156207">您访问的网页会显示在此处</translation>
 <translation id="970715775301869095">还剩 <ph name="MINUTES" /> 分钟</translation>
-<translation id="974555521953189084">输入密码以开始同步</translation>
+<translation id="974555521953189084">输入密码即可开始同步</translation>
 <translation id="981121421437150478">离线</translation>
 <translation id="983192555821071799">关闭所有标签页</translation>
 <translation id="987264212798334818">常规</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index 702468c..156e5807 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">如要在不同裝置上同步和個人化內容,請開啟同步處理功能</translation>
 <translation id="1209206284964581585">暫時隱藏</translation>
 <translation id="1227058898775614466">導覽記錄</translation>
-<translation id="1229399675748764149">將此頁面設為首頁</translation>
 <translation id="1231733316453485619">要開啟同步處理功能嗎?</translation>
 <translation id="123724288017357924">重新載入目前的網頁,忽略之前快取的內容</translation>
 <translation id="124678866338384709">關閉目前分頁</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">刪除密碼</translation>
 <translation id="1521774566618522728">今天已使用</translation>
 <translation id="1538801903729528855">獲得更佳的網上語音體驗</translation>
-<translation id="1543538514740974167">輕輕一按,即時到位</translation>
 <translation id="1544826120773021464">如要管理 Google 帳戶,請輕按「管理帳戶」按鈕</translation>
 <translation id="1549000191223877751">移至其他視窗</translation>
 <translation id="1553358976309200471">更新 Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">網站</translation>
 <translation id="4594952190837476234">此離線網頁在 <ph name="CREATION_TIME" />建立,且可能與網上版本不同。</translation>
 <translation id="4605958867780575332">移除咗嘅項目:<ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">將頁面儲存至稍後閱讀,並接收提醒</translation>
 <translation id="4616150815774728855">開啟 <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密碼</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 個密碼被盜用}other{# 個密碼被盜用}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">還原咗 <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">密碼</translation>
 <translation id="7030675613184250187">您可將網頁儲存至閱讀清單,以便日後快速瀏覽或離線閱讀</translation>
-<translation id="703523980599857277">變更首頁</translation>
 <translation id="7054588988317389591">要取得圖片說明嗎?</translation>
 <translation id="7055152154916055070">已禁止重新導向:</translation>
 <translation id="7063006564040364415">無法連線至同步處理伺服器。</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome 目前是最新版本</translation>
 <translation id="7106762743910369165">您的瀏覽器由組織管理</translation>
 <translation id="7121362699166175603">清除記錄和網址列中的自動完成資料。您的 Google 帳戶在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的瀏覽記錄。</translation>
-<translation id="7128355412245153445">輕按首頁按鈕,即可隨時查看熱門網站和近期報導</translation>
 <translation id="7138678301420049075">其他</translation>
 <translation id="7146622961999026732">這些網站和應用程式似乎對您很重要:</translation>
 <translation id="7149158118503947153">從 <ph name="DOMAIN_NAME" /> <ph name="BEGIN_LINK" />載入原始網頁<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. 選擇 <ph name="APP_NAME" />\n2. 輕按 [一律採用]</translation>
 <translation id="8410695015584479363">追蹤價格</translation>
 <translation id="8413126021676339697">顯示完整記錄</translation>
-<translation id="8425213833346101688">變更</translation>
 <translation id="8427875596167638501">預覽分頁喺畫面下半部分顯示</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">從「健康數碼生活」中移除您的 Chrome 活動記錄</translation>
 <translation id="927968626442779827">使用 Google Chrome 的「精簡模式」</translation>
 <translation id="932327136139879170">首頁</translation>
-<translation id="93753284658583800">已變更首頁</translation>
 <translation id="938850635132480979">錯誤:<ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">請輸入複雜密碼</translation>
 <translation id="948039501338975565">書籤資料夾清單</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
index b1347f02..423b2bc8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">如要進行同步處理並在所有裝置上享有個人化的體驗,請開啟同步處理功能</translation>
 <translation id="1209206284964581585">暫時隱藏</translation>
 <translation id="1227058898775614466">瀏覽記錄</translation>
-<translation id="1229399675748764149">將這個頁面設為首頁</translation>
 <translation id="1231733316453485619">要開啟同步處理功能嗎?</translation>
 <translation id="123724288017357924">重新載入目前的網頁,略過已快取的內容</translation>
 <translation id="124678866338384709">關閉目前的分頁</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">刪除密碼</translation>
 <translation id="1521774566618522728">上次使用時間:今天</translation>
 <translation id="1538801903729528855">在網頁上享有更好的語音體驗</translation>
-<translation id="1543538514740974167">更快開啟這個頁面</translation>
 <translation id="1544826120773021464">如要管理你的 Google 帳戶,請輕觸 [管理帳戶] 按鈕</translation>
 <translation id="1549000191223877751">移至其他視窗</translation>
 <translation id="1553358976309200471">更新 Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">網站</translation>
 <translation id="4594952190837476234">這個離線版網頁是於 <ph name="CREATION_TIME" />建立,可能會和線上版本有所不同。</translation>
 <translation id="4605958867780575332">已移除項目:<ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">儲存頁面以便稍後閱讀並接收提醒</translation>
 <translation id="4616150815774728855">開啟 <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密碼</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{有 1 組密碼遭外洩}other{有 # 組密碼遭外洩}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">已還原 <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">密碼</translation>
 <translation id="7030675613184250187">你可以將頁面儲存至閱讀清單,以便再次查看或離線閱讀</translation>
-<translation id="703523980599857277">變更首頁</translation>
 <translation id="7054588988317389591">要取得圖片說明嗎?</translation>
 <translation id="7055152154916055070">已禁止重新導向:</translation>
 <translation id="7063006564040364415">無法連線至同步處理伺服器。</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">Chrome 目前是最新版本</translation>
 <translation id="7106762743910369165">你的瀏覽器是由貴機構管理</translation>
 <translation id="7121362699166175603">將歷史記錄和自動即時查詢從網址列中清除。你的 Google 帳戶可能會儲存其他形式的瀏覽記錄,請參閱 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />。</translation>
-<translation id="7128355412245153445">只要輕觸首頁按鈕即可查看常用網站和近期報導</translation>
 <translation id="7138678301420049075">其他</translation>
 <translation id="7146622961999026732">這些網站和應用程式似乎對你很重要:</translation>
 <translation id="7149158118503947153">從 <ph name="DOMAIN_NAME" /> <ph name="BEGIN_LINK" />載入原始頁面<ph name="END_LINK" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. 選擇 <ph name="APP_NAME" />\n2. 輕觸 [一律採用]</translation>
 <translation id="8410695015584479363">追蹤價格</translation>
 <translation id="8413126021676339697">顯示完整記錄</translation>
-<translation id="8425213833346101688">變更</translation>
 <translation id="8427875596167638501">已在畫面下半部顯示預覽分頁</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">將你的 Chrome 活動記錄從數位健康中移除</translation>
 <translation id="927968626442779827">使用 Google Chrome 精簡模式</translation>
 <translation id="932327136139879170">首頁</translation>
-<translation id="93753284658583800">已變更首頁</translation>
 <translation id="938850635132480979">錯誤:<ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">請輸入通關密語</translation>
 <translation id="948039501338975565">書籤資料夾清單</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
index 9076438..194ccf4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -37,7 +37,6 @@
 <translation id="1208340532756947324">Ukuze uvumelanise uphinde wenze kube ngokwakho kuwo wonkana amadivayisi akho, vula ukuvumelanisa</translation>
 <translation id="1209206284964581585">Fihla okwamanje</translation>
 <translation id="1227058898775614466">Umlando wokuzula</translation>
-<translation id="1229399675748764149">Yenza lokhu kube ikhasi lakho lasekhaya</translation>
 <translation id="1231733316453485619">vula ukuvumelanisa?</translation>
 <translation id="123724288017357924">Phinda ulayishe ikhasi lamanje, iziba okuqukethwe okufakwe kunqolobane</translation>
 <translation id="124678866338384709">Vala ithebhu yamanje</translation>
@@ -79,7 +78,6 @@
 <translation id="1513858653616922153">Susa iphasiwedi</translation>
 <translation id="1521774566618522728">Iyasebenza namhlanje</translation>
 <translation id="1538801903729528855">Thola umuzwa ongcono wezwi kuwebhu</translation>
-<translation id="1543538514740974167">Fika lapha ngokushesha</translation>
 <translation id="1544826120773021464">Ukuze uphathe i-akhawunti yakho ye-Google, thepha inkinobho "Phatha i-akhawunti"</translation>
 <translation id="1549000191223877751">Yisa kwelinye iwindi</translation>
 <translation id="1553358976309200471">Buyekeza i-Chrome</translation>
@@ -498,7 +496,6 @@
 <translation id="4587589328781138893">Amasayithi</translation>
 <translation id="4594952190837476234">Leli khasi elingaxhunyiwe kwi-inthanethi livele ngo-<ph name="CREATION_TIME" /> futhi lingahluka kusukela kunguqulo eku-inthanethi.</translation>
 <translation id="4605958867780575332">Into isusiwe: <ph name="ITEM_TITLE" /></translation>
-<translation id="4614535611158687827">Londoloza amakhasi mayelana nokwakamuva bese uthola isikhumbuzi</translation>
 <translation id="4616150815774728855">Vula i-<ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Sebenzisa iphasiwedi</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{iphasiwedi eyonakalisiwe e-1}one{amaphasiwedi onakalisiwe angu-#}other{amaphasiwedi onakalisiwe angu-#}}</translation>
@@ -877,7 +874,6 @@
 <translation id="7027549951530753705">Kubuyisiwe <ph name="ITEM_TITLE" /></translation>
 <translation id="7029809446516969842">Amaphasiwedi</translation>
 <translation id="7030675613184250187">Ungalondoloza amakhasi kuhlu lwakho lokufunda ukuze uwathole futhi noma uwafunde ngokungaxhunyiwe ku-inthanethi.</translation>
-<translation id="703523980599857277">Shintsha ikhasi lasekhaya</translation>
 <translation id="7054588988317389591">Thola incazelo yesithombe?</translation>
 <translation id="7055152154916055070">Ukuqondiswa kabusha kuvinjiwe:</translation>
 <translation id="7063006564040364415">Ayikwazanga ukuxhumeka kuseva yokuvumelanisa.</translation>
@@ -888,7 +884,6 @@
 <translation id="7088681679121566888">I-Chrome isesimweni sakamuva</translation>
 <translation id="7106762743910369165">Isiphequluli sakho siphethwe inhlangano yakho</translation>
 <translation id="7121362699166175603">Isula umlando nokuqedelelwa okuzenzakalelayo kubha yekheli. I-akhawunti yakho ye-Google ingaba namanye amafomu omlando okuphequlula ku-<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="7128355412245153445">Bona amasayithi akho aphezulu nezindaba zakamuva noma nini lapho uthepha inkinobho Yasekhaya</translation>
 <translation id="7138678301420049075">Okunye</translation>
 <translation id="7146622961999026732">La masayithi nezinhlelo zokusebenza kubonakala kubalulekile kuwe:</translation>
 <translation id="7149158118503947153"><ph name="BEGIN_LINK" />Layisha ikhasi loqobo<ph name="END_LINK" /> kusuka ku-<ph name="DOMAIN_NAME" /></translation>
@@ -1078,7 +1073,6 @@
 <translation id="8407396331882458341">1. Khetha i-<ph name="APP_NAME" />\n2. Thepha “Njalo”</translation>
 <translation id="8410695015584479363">Landelela izintengo</translation>
 <translation id="8413126021676339697">Bonisa umlando ophelele</translation>
-<translation id="8425213833346101688">Guqula</translation>
 <translation id="8427875596167638501">Ithebhu lokubuka kuqala livulwe ngohhafu</translation>
 <translation id="8428213095426709021">Izilungiselelo</translation>
 <translation id="8438566539970814960">Yenza usesho nokuphequlula kube ngcono</translation>
@@ -1196,7 +1190,6 @@
 <translation id="926205370408745186">Susa umsebenzi wakho we-Chrome kusukela ku-Digital Wellbeing</translation>
 <translation id="927968626442779827">Sebenzisa Imodi elula ku-Google Chrome</translation>
 <translation id="932327136139879170">Ikhaya</translation>
-<translation id="93753284658583800">Ikhasi lasekhaya lishintshile</translation>
 <translation id="938850635132480979">Iphutha: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Faka umushwana wokungena</translation>
 <translation id="948039501338975565">Uhlu lwamafolda ebhukhimakhi</translation>
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.cc b/chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.cc
index b442a97..e56f6b9 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_browsertest_base.cc
@@ -199,8 +199,7 @@
       base::BindLambdaForTesting(
           [&](HoldingSpaceItem::Type type, const base::FilePath& path) {
             return std::make_unique<HoldingSpaceImage>(
-                path,
-                /*placeholder=*/gfx::ImageSkia(),
+                HoldingSpaceImage::GetMaxSizeForType(type), path,
                 /*async_bitmap_resolver=*/base::DoNothing());
           }));
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_client_impl_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_client_impl_browsertest.cc
index 9edf185c..7143f1ad 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_client_impl_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_client_impl_browsertest.cc
@@ -44,8 +44,7 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
   return std::make_unique<HoldingSpaceImage>(
-      file_path,
-      /*placeholder=*/gfx::ImageSkia(),
+      HoldingSpaceImage::GetMaxSizeForType(type), file_path,
       /*async_bitmap_resolver=*/base::DoNothing());
 }
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
index fc397d6a2..6d73944 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
@@ -243,8 +243,7 @@
           base::BindLambdaForTesting([&](HoldingSpaceItem::Type type,
                                          const base::FilePath& file_path) {
             return std::make_unique<HoldingSpaceImage>(
-                file_path,
-                /*placeholder=*/gfx::ImageSkia(),
+                HoldingSpaceImage::GetMaxSizeForType(type), file_path,
                 /*async_bitmap_resolver=*/base::DoNothing());
           }));
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
index f85e84e..2a9c22e 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -69,8 +69,7 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
   return std::make_unique<HoldingSpaceImage>(
-      file_path,
-      /*placeholder=*/gfx::ImageSkia(),
+      HoldingSpaceImage::GetMaxSizeForType(type), file_path,
       /*async_bitmap_resolver=*/base::DoNothing());
 }
 
@@ -520,9 +519,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kScreenshot, item_1_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_1->image().image_skia().bitmap()));
+      *item_1->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_1_virtual_path,
@@ -536,9 +535,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kScreenshot, item_2_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_2->image().image_skia().bitmap()));
+      *item_2->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_2_virtual_path,
@@ -1700,9 +1699,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kNearbyShare, item_1_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_1->image().image_skia().bitmap()));
+      *item_1->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_1_virtual_path,
@@ -1716,9 +1715,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kNearbyShare, item_2_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_2->image().image_skia().bitmap()));
+      *item_2->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_2_virtual_path,
@@ -1774,9 +1773,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kScreenRecording, item_1_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_1->image().image_skia().bitmap()));
+      *item_1->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_1_virtual_path,
@@ -1790,9 +1789,9 @@
       *holding_space_util::ResolveImage(
            holding_space_service->thumbnail_loader_for_testing(),
            HoldingSpaceItem::Type::kScreenRecording, item_2_full_path)
-           ->image_skia()
+           ->GetImageSkia()
            .bitmap(),
-      *item_2->image().image_skia().bitmap()));
+      *item_2->image().GetImageSkia().bitmap()));
   // Verify the item file system URL resolves to the correct file in the file
   // manager's context.
   EXPECT_EQ(item_2_virtual_path,
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.cc b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.cc
index 56d6efb..b6021c9d 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.h"
 
-#include "ash/public/cpp/holding_space/holding_space_color_provider.h"
 #include "ash/public/cpp/image_downloader.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
@@ -21,8 +20,6 @@
 #include "chrome/browser/chromeos/file_manager/fileapi_util.h"
 #include "chrome/browser/extensions/api/messaging/native_message_port.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/ash/holding_space/holding_space_util.h"
-#include "chromeos/ui/vector_icons/vector_icons.h"
 #include "extensions/browser/api/messaging/channel_endpoint.h"
 #include "extensions/browser/api/messaging/message_service.h"
 #include "extensions/browser/api/messaging/native_message_host.h"
@@ -35,7 +32,6 @@
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/skia_util.h"
 #include "url/gurl.h"
 
@@ -48,9 +44,6 @@
 constexpr char kNativeMessageHostName[] =
     "com.google.holding_space_thumbnail_loader";
 
-// The DIP size for the folder icon.
-const size_t kFolderIconDipSize = 20;
-
 using ThumbnailDataCallback = base::OnceCallback<void(const std::string& data)>;
 
 // Handles a parsed message sent from image loader extension in response to a
@@ -153,7 +146,7 @@
 
   // BitmapFetcherDelegate:
   void OnFetchComplete(const GURL& url, const SkBitmap* bitmap) override {
-    std::move(callback_).Run(bitmap);
+    std::move(callback_).Run(bitmap, base::File::FILE_OK);
   }
 
   void Start(const std::string& data,
@@ -165,7 +158,8 @@
     // URL.
     GURL data_url(data);
     if (!data_url.is_valid() || !data_url.SchemeIs(url::kDataScheme)) {
-      std::move(callback).Run(nullptr);
+      std::move(callback).Run(/*bitmap=*/nullptr,
+                              base::File::FILE_ERROR_FAILED);
       return;
     }
 
@@ -196,9 +190,8 @@
 
 HoldingSpaceThumbnailLoader::ThumbnailRequest::ThumbnailRequest(
     const base::FilePath& item_path,
-    const gfx::Size& size,
-    float scale_factor)
-    : item_path(item_path), size(size), scale_factor(scale_factor) {}
+    const gfx::Size& size)
+    : item_path(item_path), size(size) {}
 
 HoldingSpaceThumbnailLoader::ThumbnailRequest::~ThumbnailRequest() = default;
 
@@ -227,20 +220,16 @@
     base::File::Error result,
     const base::File::Info& file_info) {
   if (result != base::File::FILE_OK) {
-    std::move(callback).Run(nullptr);
+    std::move(callback).Run(/*bitmap=*/nullptr, result);
     return;
   }
 
   // Short-circuit icons for folders.
   if (file_info.is_directory) {
-    std::move(callback).Run(
-        holding_space_util::CreatePlaceholderImage(
-            gfx::CreateVectorIcon(
-                chromeos::kFiletypeFolderIcon,
-                request.scale_factor * kFolderIconDipSize,
-                HoldingSpaceColorProvider::Get()->GetFileIconColor()),
-            request.size)
-            .bitmap());
+    // `FILE_ERROR_NOT_A_FILE` is a special value used to signify that the
+    // file for which the thumbnail was requested is actually a folder.
+    std::move(callback).Run(/*bitmap=*/nullptr,
+                            base::File::FILE_ERROR_NOT_A_FILE);
     return;
   }
 
@@ -248,7 +237,14 @@
   if (!file_manager::util::ConvertAbsoluteFilePathToFileSystemUrl(
           profile_, request.item_path, file_manager::kImageLoaderExtensionId,
           &thumbnail_url)) {
-    std::move(callback).Run(nullptr);
+    std::move(callback).Run(/*bitmap=*/nullptr, base::File::FILE_ERROR_FAILED);
+    return;
+  }
+
+  extensions::MessageService* const message_service =
+      extensions::MessageService::Get(profile_);
+  if (!message_service) {  // May be `nullptr` in tests.
+    std::move(callback).Run(/*bitmap=*/nullptr, base::File::FILE_ERROR_FAILED);
     return;
   }
 
@@ -284,8 +280,6 @@
                      weak_factory_.GetWeakPtr(), request_id, request.size));
   const extensions::PortId port_id(base::UnguessableToken::Create(),
                                    1 /* port_number */, true /* is_opener */);
-  extensions::MessageService* const message_service =
-      extensions::MessageService::Get(profile_);
   auto native_message_port = std::make_unique<extensions::NativeMessagePort>(
       message_service->GetChannelDelegate(), port_id,
       std::move(native_message_host));
@@ -304,7 +298,8 @@
     return;
 
   if (data.empty()) {
-    RespondToRequest(request_id, requested_size, nullptr);
+    RespondToRequest(request_id, requested_size, /*bitmap=*/nullptr,
+                     base::File::FILE_ERROR_FAILED);
     return;
   }
 
@@ -320,7 +315,8 @@
 void HoldingSpaceThumbnailLoader::RespondToRequest(
     const base::UnguessableToken& request_id,
     const gfx::Size& requested_size,
-    const SkBitmap* bitmap) {
+    const SkBitmap* bitmap,
+    base::File::Error error) {
   thumbnail_decoders_.erase(request_id);
   auto request_it = requests_.find(request_id);
   if (request_it == requests_.end())
@@ -341,7 +337,8 @@
 
   ImageCallback callback = std::move(request_it->second);
   requests_.erase(request_it);
-  std::move(callback).Run(cropped_bitmap.isNull() ? bitmap : &cropped_bitmap);
+  std::move(callback).Run(cropped_bitmap.isNull() ? bitmap : &cropped_bitmap,
+                          error);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.h b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.h
index 401d5e7..ad55304 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader.h
@@ -38,9 +38,7 @@
 
   // Thumbnail request data that will be forwarded to the image loader.
   struct ThumbnailRequest {
-    ThumbnailRequest(const base::FilePath& item_path,
-                     const gfx::Size& size,
-                     float scale_factor);
+    ThumbnailRequest(const base::FilePath& item_path, const gfx::Size& size);
     ~ThumbnailRequest();
 
     // The absolute item file path.
@@ -48,15 +46,13 @@
 
     // The desired bitmap size.
     const gfx::Size size;
-
-    // The scale factor for which the bitmap is being generated.
-    float scale_factor;
   };
 
   // Returns a weak pointer to this instance.
   base::WeakPtr<HoldingSpaceThumbnailLoader> GetWeakPtr();
 
-  using ImageCallback = base::OnceCallback<void(const SkBitmap* bitmap)>;
+  using ImageCallback =
+      base::OnceCallback<void(const SkBitmap* bitmap, base::File::Error error)>;
   // Starts a request for a thumbnail. `callback` called with the generated
   // bitmap. On error, the bitmap will be null.
   void Load(const ThumbnailRequest& request, ImageCallback callback);
@@ -86,7 +82,8 @@
   // originally `requested_size`, the bitmap will be cropped.
   void RespondToRequest(const base::UnguessableToken& request_id,
                         const gfx::Size& requested_size,
-                        const SkBitmap* bitmap);
+                        const SkBitmap* bitmap,
+                        base::File::Error error);
 
   Profile* const profile_;
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader_browsertest.cc
index f357afe3..d1e7d4c1 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_thumbnail_loader_browsertest.cc
@@ -35,11 +35,15 @@
 // Copies |bitmap| into |copy| and runs |callback|.
 void CopyBitmapAndRunClosure(base::OnceClosure callback,
                              SkBitmap* copy,
-                             const SkBitmap* bitmap) {
-  if (bitmap)
+                             const SkBitmap* bitmap,
+                             base::File::Error error) {
+  if (bitmap) {
+    EXPECT_EQ(base::File::FILE_OK, error);
     *copy = *bitmap;
-  else
+  } else {
+    EXPECT_NE(base::File::FILE_OK, error);
     ADD_FAILURE() << "Got null bitmap";
+  }
   std::move(callback).Run();
 }
 
@@ -166,11 +170,12 @@
 
   base::RunLoop run_loop;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kNonExistent), gfx::Size(48, 48),
-      /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kNonExistent), gfx::Size(48, 48));
   loader->Load(request,
-               base::BindLambdaForTesting([&run_loop](const SkBitmap* bitmap) {
+               base::BindLambdaForTesting([&run_loop](const SkBitmap* bitmap,
+                                                      base::File::Error error) {
                  EXPECT_FALSE(bitmap);
+                 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, error);
                  run_loop.Quit();
                }));
   run_loop.Run();
@@ -181,33 +186,16 @@
   ASSERT_TRUE(loader);
 
   base::RunLoop run_loop;
-  SkBitmap bitmap;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kEmptyDir), gfx::Size(48, 48),
-      /*scale_factor=*/1.0f);
-  loader->Load(request, base::BindOnce(&CopyBitmapAndRunClosure,
-                                       run_loop.QuitClosure(), &bitmap));
+      GetTestPath(TestPath::kEmptyDir), gfx::Size(48, 48));
+  loader->Load(request,
+               base::BindLambdaForTesting([&run_loop](const SkBitmap* bitmap,
+                                                      base::File::Error error) {
+                 EXPECT_FALSE(bitmap);
+                 EXPECT_EQ(base::File::FILE_ERROR_NOT_A_FILE, error);
+                 run_loop.Quit();
+               }));
   run_loop.Run();
-  EXPECT_FALSE(bitmap.isNull());
-  EXPECT_EQ(48, bitmap.width());
-  EXPECT_EQ(48, bitmap.height());
-}
-
-IN_PROC_BROWSER_TEST_F(HoldingSpaceThumbnailLoaderTest, LoadFolderScale2) {
-  ash::HoldingSpaceThumbnailLoader* loader = GetThumbnailLoader();
-  ASSERT_TRUE(loader);
-
-  base::RunLoop run_loop;
-  SkBitmap bitmap;
-  ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kEmptyDir), gfx::Size(48, 48),
-      /*scale_factor=*/2.0f);
-  loader->Load(request, base::BindOnce(&CopyBitmapAndRunClosure,
-                                       run_loop.QuitClosure(), &bitmap));
-  run_loop.Run();
-  EXPECT_FALSE(bitmap.isNull());
-  EXPECT_EQ(48, bitmap.width());
-  EXPECT_EQ(48, bitmap.height());
 }
 
 IN_PROC_BROWSER_TEST_F(HoldingSpaceThumbnailLoaderTest, LoadJpg) {
@@ -217,7 +205,7 @@
   SkBitmap bitmap;
   base::RunLoop run_loop;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kJpg), gfx::Size(48, 48), /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kJpg), gfx::Size(48, 48));
   loader->Load(request, base::BindOnce(&CopyBitmapAndRunClosure,
                                        run_loop.QuitClosure(), &bitmap));
   run_loop.Run();
@@ -233,11 +221,12 @@
 
   base::RunLoop run_loop;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kBrokenJpg), gfx::Size(48, 48),
-      /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kBrokenJpg), gfx::Size(48, 48));
   loader->Load(request,
-               base::BindLambdaForTesting([&run_loop](const SkBitmap* bitmap) {
+               base::BindLambdaForTesting([&run_loop](const SkBitmap* bitmap,
+                                                      base::File::Error error) {
                  EXPECT_FALSE(bitmap);
+                 EXPECT_EQ(base::File::FILE_ERROR_FAILED, error);
                  run_loop.Quit();
                }));
   run_loop.Run();
@@ -250,7 +239,7 @@
   SkBitmap bitmap;
   base::RunLoop run_loop;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kPng), gfx::Size(48, 48), /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kPng), gfx::Size(48, 48));
   loader->Load(request, base::BindOnce(&CopyBitmapAndRunClosure,
                                        run_loop.QuitClosure(), &bitmap));
   run_loop.Run();
@@ -264,7 +253,7 @@
   ASSERT_TRUE(loader);
 
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request(
-      GetTestPath(TestPath::kPng), gfx::Size(48, 48), /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kPng), gfx::Size(48, 48));
 
   SkBitmap bitmap1;
   base::RunLoop run_loop1;
@@ -305,14 +294,14 @@
 
   SkBitmap bitmap1;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request1(
-      GetTestPath(TestPath::kPng), gfx::Size(48, 48), /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kPng), gfx::Size(48, 48));
   base::RunLoop run_loop1;
   loader->Load(request1, base::BindOnce(&CopyBitmapAndRunClosure,
                                         run_loop1.QuitClosure(), &bitmap1));
 
   SkBitmap bitmap2;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request2(
-      GetTestPath(TestPath::kPng), gfx::Size(96, 96), /*scale_factor=*/2.0f);
+      GetTestPath(TestPath::kPng), gfx::Size(96, 96));
   base::RunLoop run_loop2;
   loader->Load(request2, base::BindOnce(&CopyBitmapAndRunClosure,
                                         run_loop2.QuitClosure(), &bitmap2));
@@ -320,7 +309,7 @@
   SkBitmap bitmap3;
   base::RunLoop run_loop3;
   ash::HoldingSpaceThumbnailLoader::ThumbnailRequest request3(
-      GetTestPath(TestPath::kJpg), gfx::Size(48, 48), /*scale_factor=*/1.0f);
+      GetTestPath(TestPath::kJpg), gfx::Size(48, 48));
   loader->Load(request3, base::BindOnce(&CopyBitmapAndRunClosure,
                                         run_loop3.QuitClosure(), &bitmap3));
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_util.cc b/chrome/browser/ui/ash/holding_space/holding_space_util.cc
index b040d18..0b32b13 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_util.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_util.cc
@@ -4,8 +4,6 @@
 
 #include "chrome/browser/ui/ash/holding_space/holding_space_util.h"
 
-#include "ash/public/cpp/file_icon_util.h"
-#include "ash/public/cpp/holding_space/holding_space_color_provider.h"
 #include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_image.h"
 #include "base/barrier_closure.h"
@@ -25,27 +23,6 @@
 
 base::Optional<base::Time> now_for_testing;
 
-// Helpers ---------------------------------------------------------------------
-
-gfx::ImageSkia GetPlaceholderImage(HoldingSpaceItem::Type type,
-                                   const base::FilePath& file_path) {
-  gfx::Size size;
-  switch (type) {
-    case HoldingSpaceItem::Type::kDownload:
-    case HoldingSpaceItem::Type::kNearbyShare:
-    case HoldingSpaceItem::Type::kPinnedFile:
-      size = gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize);
-      break;
-    case HoldingSpaceItem::Type::kScreenRecording:
-    case HoldingSpaceItem::Type::kScreenshot:
-      size = kHoldingSpaceScreenCaptureSize;
-      break;
-  }
-
-  const SkColor color = HoldingSpaceColorProvider::Get()->GetFileIconColor();
-  return CreatePlaceholderImage(GetIconForPath(file_path, color), size);
-}
-
 }  // namespace
 
 ValidityRequirement::ValidityRequirement() = default;
@@ -179,28 +156,17 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
   return std::make_unique<HoldingSpaceImage>(
-      file_path, GetPlaceholderImage(type, file_path),
+      HoldingSpaceImage::GetMaxSizeForType(type), file_path,
       base::BindRepeating(
           [](const base::WeakPtr<HoldingSpaceThumbnailLoader>& thumbnail_loader,
              const base::FilePath& file_path, const gfx::Size& size,
-             float scale_factor, HoldingSpaceImage::BitmapCallback callback) {
+             HoldingSpaceImage::BitmapCallback callback) {
             if (thumbnail_loader)
-              thumbnail_loader->Load({file_path, size, scale_factor},
-                                     std::move(callback));
+              thumbnail_loader->Load({file_path, size}, std::move(callback));
           },
           thumbnail_loader->GetWeakPtr()));
 }
 
-gfx::ImageSkia CreatePlaceholderImage(const gfx::ImageSkia& file_type_image,
-                                      const gfx::Size& size) {
-  // NOTE: We superimpose the file type icon for `file_path` over a transparent
-  // bitmap in order to center it within the placeholder image at a fixed size.
-  SkBitmap bitmap;
-  bitmap.allocN32Pixels(size.width(), size.height());
-  return gfx::ImageSkiaOperations::CreateSuperimposedImage(
-      gfx::ImageSkia::CreateFrom1xBitmap(bitmap), file_type_image);
-}
-
 void SetNowForTesting(base::Optional<base::Time> now) {
   now_for_testing = now;
 }
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_util.h b/chrome/browser/ui/ash/holding_space/holding_space_util.h
index d64e11f9..7ed4c750 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_util.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_util.h
@@ -19,11 +19,6 @@
 class FilePath;
 }  // namespace base
 
-namespace gfx {
-class ImageSkia;
-class Size;
-}  // namespace gfx
-
 namespace ash {
 
 class HoldingSpaceImage;
@@ -79,11 +74,6 @@
     HoldingSpaceItem::Type type,
     const base::FilePath& file_path);
 
-// Given a base image for a file type, returns a placeholder image to be used in
-// the holding space UI.
-gfx::ImageSkia CreatePlaceholderImage(const gfx::ImageSkia& file_type_image,
-                                      const gfx::Size& size);
-
 void SetNowForTesting(base::Optional<base::Time> now);
 
 }  // namespace holding_space_util
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index 31e5642..9296abf2 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -90,6 +90,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/reading_list/core/reading_list_entry.h"
 #include "components/reading_list/core/reading_list_model.h"
+#include "components/reading_list/core/reading_list_pref_names.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
 #include "components/sessions/core/live_tab_context.h"
 #include "components/sessions/core/tab_restore_service.h"
@@ -1055,6 +1056,7 @@
     return false;
   model->AddEntry(url, base::UTF16ToUTF8(title),
                   reading_list::EntrySource::ADDED_VIA_CURRENT_APP);
+  MaybeShowBookmarkBarForReadLater(browser);
   return true;
 }
 
@@ -1081,6 +1083,20 @@
   return entry && !entry->IsRead();
 }
 
+void MaybeShowBookmarkBarForReadLater(Browser* browser) {
+#if !defined(OS_ANDROID)
+  PrefService* pref_service = browser->profile()->GetPrefs();
+  if (pref_service &&
+      !pref_service->GetBoolean(
+          reading_list::prefs::kReadingListDesktopFirstUseExperienceShown)) {
+    pref_service->SetBoolean(
+        reading_list::prefs::kReadingListDesktopFirstUseExperienceShown, true);
+    if (browser->bookmark_bar_state() == BookmarkBar::HIDDEN)
+      ToggleBookmarkBar(browser);
+  }
+#endif  // defined(OS_ANDROID)
+}
+
 void SaveCreditCard(Browser* browser) {
   WebContents* web_contents =
       browser->tab_strip_model()->GetActiveWebContents();
diff --git a/chrome/browser/ui/browser_commands.h b/chrome/browser/ui/browser_commands.h
index eaa4431..6eecdf0 100644
--- a/chrome/browser/ui/browser_commands.h
+++ b/chrome/browser/ui/browser_commands.h
@@ -145,6 +145,7 @@
 bool MoveCurrentTabToReadLater(Browser* browser);
 bool MarkCurrentTabAsReadInReadLater(Browser* browser);
 bool IsCurrentTabUnreadInReadLater(Browser* browser);
+void MaybeShowBookmarkBarForReadLater(Browser* browser);
 void SaveCreditCard(Browser* browser);
 void MigrateLocalCards(Browser* browser);
 void MaybeShowSaveLocalCardSignInPromo(Browser* browser);
diff --git a/chrome/browser/ui/browser_commands_browsertest.cc b/chrome/browser/ui/browser_commands_browsertest.cc
index 1292e1c..2914ad3 100644
--- a/chrome/browser/ui/browser_commands_browsertest.cc
+++ b/chrome/browser/ui/browser_commands_browsertest.cc
@@ -4,12 +4,14 @@
 
 #include "chrome/browser/ui/browser_commands.h"
 
+#include "base/test/scoped_feature_list.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/reading_list/features/reading_list_switches.h"
 #include "content/public/test/browser_test.h"
 
 namespace chrome {
@@ -165,4 +167,46 @@
             url2);
 }
 
+class ReadLaterBrowserCommandsTest : public BrowserCommandsTest {
+ public:
+  ReadLaterBrowserCommandsTest() {
+    feature_list_.InitAndEnableFeature(reading_list::switches::kReadLater);
+  }
+  ~ReadLaterBrowserCommandsTest() override = default;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+// Verify that the bookmark bar is shown the first time someone saves to read
+// later.
+IN_PROC_BROWSER_TEST_F(ReadLaterBrowserCommandsTest,
+                       PRE_ReadLaterOpensBookmarksBarOnFirstUse) {
+  GURL url("https://www.google.com");
+  ui_test_utils::NavigateToURL(browser(), url);
+
+  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
+  // Verify the bookmark bar is shown after saving to the reading list.
+  MoveCurrentTabToReadLater(browser());
+  EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state());
+  ToggleBookmarkBar(browser());
+  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
+  // Verify the bookmark bar isn't reshown on subsequent saves to the reading
+  // list.
+  MoveCurrentTabToReadLater(browser());
+  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
+}
+
+// Verify that the bookmark bar is not reshown after Chrome restarts.
+IN_PROC_BROWSER_TEST_F(ReadLaterBrowserCommandsTest,
+                       ReadLaterOpensBookmarksBarOnFirstUse) {
+  GURL url("https://www.google.com");
+  ui_test_utils::NavigateToURL(browser(), url);
+
+  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
+  // Verify the bookmark bar is still hidden after saving to the reading list.
+  MoveCurrentTabToReadLater(browser());
+  EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
+}
+
 }  // namespace chrome
diff --git a/chrome/browser/ui/hats/hats_survey_status_checker.cc b/chrome/browser/ui/hats/hats_survey_status_checker.cc
index 59b7cde..c9371fd 100644
--- a/chrome/browser/ui/hats/hats_survey_status_checker.cc
+++ b/chrome/browser/ui/hats/hats_survey_status_checker.cc
@@ -40,6 +40,7 @@
   GURL cookie_url = GURL("https://www.google.com");
   auto survey_cookie = net::CanonicalCookie::Create(
       cookie_url, "PAIDCONTENT=0", base::Time::Now(), base::nullopt);
+  DCHECK(survey_cookie);
   network::mojom::CookieManager* cookie_manager =
       GetStoragePartition()->GetCookieManagerForBrowserProcess();
   cookie_manager->SetCanonicalCookie(*survey_cookie, cookie_url,
diff --git a/chrome/browser/ui/read_later/reading_list_model_factory.cc b/chrome/browser/ui/read_later/reading_list_model_factory.cc
index 177030c..b46a5fb 100644
--- a/chrome/browser/ui/read_later/reading_list_model_factory.cc
+++ b/chrome/browser/ui/read_later/reading_list_model_factory.cc
@@ -89,6 +89,11 @@
   registry->RegisterBooleanPref(
       reading_list::prefs::kReadingListHasUnseenEntries, false,
       PrefRegistry::NO_REGISTRATION_FLAGS);
+#if !defined(OS_ANDROID)
+  registry->RegisterBooleanPref(
+      reading_list::prefs::kReadingListDesktopFirstUseExperienceShown, false,
+      PrefRegistry::NO_REGISTRATION_FLAGS);
+#endif  // !defined(OS_ANDROID)
 }
 
 content::BrowserContext* ReadingListModelFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc
index f90422b9..19cc99b 100644
--- a/chrome/browser/ui/tabs/tab_strip_model.cc
+++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -30,6 +30,7 @@
 #include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/read_later/reading_list_model_factory.h"
 #include "chrome/browser/ui/tab_ui_helper.h"
@@ -2154,6 +2155,11 @@
                       reading_list::EntrySource::ADDED_VIA_CURRENT_APP);
     }
   }
+  // Maybe show the bookmark bar if an item exists in read later.
+  if (model->size()) {
+    chrome::MaybeShowBookmarkBarForReadLater(
+        chrome::FindBrowserWithWebContents(GetWebContentsAt(indices[0])));
+  }
 }
 
 base::Optional<tab_groups::TabGroupId> TabStripModel::UngroupTab(int index) {
diff --git a/chrome/browser/ui/views/find_bar_view.cc b/chrome/browser/ui/views/find_bar_view.cc
index 6fd5388..2e51ac5a 100644
--- a/chrome/browser/ui/views/find_bar_view.cc
+++ b/chrome/browser/ui/views/find_bar_view.cc
@@ -447,12 +447,8 @@
       views::BubbleBorder::NONE, views::BubbleBorder::STANDARD_SHADOW,
       bg_color);
 
-  border->SetCornerRadius(
-      base::FeatureList::IsEnabled(
-          views::features::kEnableMDRoundedCornersOnDialogs)
-          ? views::LayoutProvider::Get()->GetCornerRadiusMetric(
-                views::EMPHASIS_MEDIUM)
-          : 2);
+  border->SetCornerRadius(views::LayoutProvider::Get()->GetCornerRadiusMetric(
+      views::EMPHASIS_MEDIUM));
 
   SetBackground(std::make_unique<views::BubbleBackground>(border.get()));
   SetBorder(std::move(border));
diff --git a/chrome/browser/ui/views/location_bar/star_view.cc b/chrome/browser/ui/views/location_bar/star_view.cc
index 9c47f65f..9edaafeb 100644
--- a/chrome/browser/ui/views/location_bar/star_view.cc
+++ b/chrome/browser/ui/views/location_bar/star_view.cc
@@ -74,6 +74,7 @@
 }
 
 void StarView::ExecuteCommand(ExecuteSource source) {
+  OnExecuting(source);
   if (base::FeatureList::IsEnabled(reading_list::switches::kReadLater)) {
     menu_model_ = std::make_unique<StarMenuModel>(
         this, active(), chrome::CanMoveActiveTabToReadLater(browser_),
@@ -85,7 +86,6 @@
                             views::MenuAnchorPosition::kTopRight,
                             ui::MENU_SOURCE_NONE);
   } else {
-    OnExecuting(source);
     chrome::BookmarkCurrentTab(browser_);
   }
 }
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
index 8757384..5f68959 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
@@ -616,7 +616,9 @@
   if (GetWidget()->IsVisible())
     ++hover_cards_seen_count_;
 
-  if (GetWidget()->IsVisible() && !disable_animations_for_testing_) {
+  const bool animations_enabled = gfx::Animation::ShouldRenderRichAnimation();
+  if (GetWidget()->IsVisible() && !disable_animations_for_testing_ &&
+      animations_enabled) {
     slide_animation_delegate_->AnimateToAnchorView(tab);
   } else {
     if (!anchor_view_set)
@@ -628,7 +630,8 @@
   }
 
   if (!GetWidget()->IsVisible()) {
-    if (disable_animations_for_testing_ || show_immediately) {
+    if (disable_animations_for_testing_ || show_immediately ||
+        !animations_enabled) {
       GetWidget()->SetOpacity(1.0f);
       GetWidget()->Show();
     } else {
@@ -652,7 +655,8 @@
   thumbnail_observation_->Observe(nullptr);
   slide_animation_delegate_->StopAnimation();
   last_visible_timestamp_ = base::TimeTicks::Now();
-  if (disable_animations_for_testing_) {
+  if (disable_animations_for_testing_ ||
+      !gfx::Animation::ShouldRenderRichAnimation()) {
     GetWidget()->Hide();
   } else {
     fade_animation_delegate_->FadeOut();
diff --git a/chrome/browser/ui/webui/chromeos/login/online_login_helper.cc b/chrome/browser/ui/webui/chromeos/login/online_login_helper.cc
index 0be1575..96fce77 100644
--- a/chrome/browser/ui/webui/chromeos/login/online_login_helper.cc
+++ b/chrome/browser/ui/webui/chromeos/login/online_login_helper.cc
@@ -74,6 +74,8 @@
   std::unique_ptr<net::CanonicalCookie> cc(net::CanonicalCookie::Create(
       gaia_url, gaps_cookie_value, base::Time::Now(),
       base::nullopt /* server_time */));
+  if (!cc)
+    return;
 
   const net::CookieOptions options = net::CookieOptions::MakeAllInclusive();
   partition->GetCookieManagerForBrowserProcess()->SetCanonicalCookie(
@@ -244,4 +246,4 @@
   std::move(complete_login_callback_).Run(user_context);
 }
 
-}  // namespace chromeos
\ No newline at end of file
+}  // namespace chromeos
diff --git a/chrome/browser/ui/webui/domain_reliability_internals_ui.cc b/chrome/browser/ui/webui/domain_reliability_internals_ui.cc
index 6aa875b..8424e4b 100644
--- a/chrome/browser/ui/webui/domain_reliability_internals_ui.cc
+++ b/chrome/browser/ui/webui/domain_reliability_internals_ui.cc
@@ -32,29 +32,43 @@
   html_source->AddResourcePath("domain_reliability_internals.js",
       IDR_DOMAIN_RELIABILITY_INTERNALS_JS);
   html_source->SetDefaultResource(IDR_DOMAIN_RELIABILITY_INTERNALS_HTML);
-
-  web_ui->RegisterMessageCallback(
-      "updateData",
-      base::BindRepeating(&DomainReliabilityInternalsUI::UpdateData,
-                          base::Unretained(this)));
-
   Profile* profile = Profile::FromWebUI(web_ui);
   content::WebUIDataSource::Add(profile, html_source);
+
+  web_ui->AddMessageHandler(
+      std::make_unique<DomainReliabilityInternalsHandler>());
 }
 
-DomainReliabilityInternalsUI::~DomainReliabilityInternalsUI() {}
+DomainReliabilityInternalsUI::~DomainReliabilityInternalsUI() = default;
 
-void DomainReliabilityInternalsUI::UpdateData(const base::ListValue* args) {
+DomainReliabilityInternalsHandler::DomainReliabilityInternalsHandler() =
+    default;
+DomainReliabilityInternalsHandler::~DomainReliabilityInternalsHandler() =
+    default;
+
+void DomainReliabilityInternalsHandler::RegisterMessages() {
+  web_ui()->RegisterMessageCallback(
+      "updateData",
+      base::BindRepeating(&DomainReliabilityInternalsHandler::HandleUpdateData,
+                          base::Unretained(this)));
+}
+
+void DomainReliabilityInternalsHandler::HandleUpdateData(
+    const base::ListValue* args) {
+  DCHECK_EQ(1u, args->GetSize());
+  AllowJavascript();
+  callback_id_ = args->GetList()[0].GetString();
+
   Profile* profile = Profile::FromWebUI(web_ui());
   network::mojom::NetworkContext* network_context =
       content::BrowserContext::GetDefaultStoragePartition(profile)
           ->GetNetworkContext();
   network_context->GetDomainReliabilityJSON(
-      base::BindOnce(&DomainReliabilityInternalsUI::OnDataUpdated,
+      base::BindOnce(&DomainReliabilityInternalsHandler::OnDataUpdated,
                      weak_factory_.GetWeakPtr()));
 }
 
-void DomainReliabilityInternalsUI::OnDataUpdated(base::Value data) const {
-  web_ui()->CallJavascriptFunctionUnsafe(
-      "DomainReliabilityInternals.onDataUpdated", data);
+void DomainReliabilityInternalsHandler::OnDataUpdated(base::Value data) {
+  ResolveJavascriptCallback(base::Value(std::move(callback_id_)), data);
+  callback_id_.clear();
 }
diff --git a/chrome/browser/ui/webui/domain_reliability_internals_ui.h b/chrome/browser/ui/webui/domain_reliability_internals_ui.h
index 384474e..1c08e86 100644
--- a/chrome/browser/ui/webui/domain_reliability_internals_ui.h
+++ b/chrome/browser/ui/webui/domain_reliability_internals_ui.h
@@ -6,10 +6,12 @@
 #define CHROME_BROWSER_UI_WEBUI_DOMAIN_RELIABILITY_INTERNALS_UI_H_
 
 #include <memory>
+#include <string>
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "content/public/browser/web_ui_controller.h"
+#include "content/public/browser/web_ui_message_handler.h"
 
 namespace base {
 class ListValue;
@@ -22,13 +24,25 @@
   explicit DomainReliabilityInternalsUI(content::WebUI* web_ui);
   ~DomainReliabilityInternalsUI() override;
 
- private:
-  void UpdateData(const base::ListValue* args);
-  void OnDataUpdated(base::Value data) const;
-
-  base::WeakPtrFactory<DomainReliabilityInternalsUI> weak_factory_{this};
-
   DISALLOW_COPY_AND_ASSIGN(DomainReliabilityInternalsUI);
 };
 
+class DomainReliabilityInternalsHandler : public content::WebUIMessageHandler {
+ public:
+  DomainReliabilityInternalsHandler();
+  ~DomainReliabilityInternalsHandler() override;
+
+  // content::WebUIMessageHandler:
+  void RegisterMessages() override;
+
+ private:
+  void HandleUpdateData(const base::ListValue* args);
+  void OnDataUpdated(base::Value data);
+
+  std::string callback_id_;
+  base::WeakPtrFactory<DomainReliabilityInternalsHandler> weak_factory_{this};
+
+  DISALLOW_COPY_AND_ASSIGN(DomainReliabilityInternalsHandler);
+};
+
 #endif  // CHROME_BROWSER_UI_WEBUI_DOMAIN_RELIABILITY_INTERNALS_UI_H_
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index acc872f..a464292 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -1081,10 +1081,7 @@
     return extension_printer_handler_.get();
   }
 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
-  if (printer_type == PrinterType::kPrivet &&
-      (base::FeatureList::IsEnabled(features::kForceEnablePrivetPrinting) ||
-       GetPrefs()->GetBoolean(
-           prefs::kCloudPrintDeprecationWarningsSuppressed))) {
+  if (printer_type == PrinterType::kPrivet) {
     if (!privet_printer_handler_) {
       privet_printer_handler_ =
           PrinterHandler::CreateForPrivetPrinters(Profile::FromWebUI(web_ui()));
@@ -1156,8 +1153,7 @@
   DCHECK(!identity_manager_);
   cloud_print_enabled_ =
       !base::Contains(printer_type_deny_list_, PrinterType::kCloud) &&
-      GetPrefs()->GetBoolean(prefs::kCloudPrintSubmitEnabled) &&
-      GetPrefs()->GetBoolean(prefs::kCloudPrintDeprecationWarningsSuppressed);
+      GetPrefs()->GetBoolean(prefs::kCloudPrintSubmitEnabled);
 
   if (!cloud_print_enabled_)
     return;
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index fb85417..ac1fc3f 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -381,9 +381,7 @@
 
   source->AddBoolean("isEnterpriseManaged", webui::IsEnterpriseManaged());
 
-  bool cloud_print_deprecation_warnings_suppressed =
-      profile->GetPrefs()->GetBoolean(
-          prefs::kCloudPrintDeprecationWarningsSuppressed);
+  bool cloud_print_deprecation_warnings_suppressed = true;
   source->AddBoolean("cloudPrintDeprecationWarningsSuppressed",
                      cloud_print_deprecation_warnings_suppressed);
 
diff --git a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinatorImpl.java b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinatorImpl.java
index e0dfcd3e..b8dc909 100644
--- a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinatorImpl.java
+++ b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinatorImpl.java
@@ -84,7 +84,8 @@
                 ImageFetcher.VIDEO_TUTORIALS_IPH_UMA_CLIENT_NAME, widthPx, heightPx);
         if (useAnimatedGifUrl) {
             mImageFetcher.fetchGif(params, gifImage -> {
-                BaseGifDrawable baseGifDrawable = new BaseGifDrawable(gifImage, Config.ARGB_8888);
+                BaseGifDrawable baseGifDrawable =
+                        gifImage == null ? null : new BaseGifDrawable(gifImage, Config.ARGB_8888);
                 consumer.onResult(baseGifDrawable);
             });
         } else {
diff --git a/chrome/browser/web_applications/components/app_shortcut_manager.cc b/chrome/browser/web_applications/components/app_shortcut_manager.cc
index 4c0c077c..5b8ebd3c 100644
--- a/chrome/browser/web_applications/components/app_shortcut_manager.cc
+++ b/chrome/browser/web_applications/components/app_shortcut_manager.cc
@@ -27,6 +27,10 @@
 constexpr const char* kCreationResultMetric =
     "WebApp.Shortcuts.Creation.Result";
 
+// UMA metric name for shortcuts deletion result.
+constexpr const char* kDeletionResultMetric =
+    "WebApp.Shortcuts.Deletion.Success";
+
 // Result of shortcuts creation process.
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
@@ -96,6 +100,21 @@
                                  std::move(callback))));
 }
 
+void AppShortcutManager::DeleteShortcuts(
+    const AppId& app_id,
+    const base::FilePath& shortcuts_data_dir,
+    std::unique_ptr<ShortcutInfo> shortcut_info,
+    DeleteShortcutsCallback callback) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK(CanCreateShortcuts());
+
+  internals::ScheduleDeletePlatformShortcuts(
+      shortcuts_data_dir, std::move(shortcut_info),
+      base::BindOnce(&AppShortcutManager::OnShortcutsDeleted,
+                     weak_ptr_factory_.GetWeakPtr(), app_id,
+                     std::move(callback)));
+}
+
 void AppShortcutManager::ReadAllShortcutsMenuIconsAndRegisterShortcutsMenu(
     const AppId& app_id,
     RegisterShortcutsMenuCallback callback) {
@@ -155,6 +174,15 @@
   std::move(callback).Run(success);
 }
 
+void AppShortcutManager::OnShortcutsDeleted(const AppId& app_id,
+                                            DeleteShortcutsCallback callback,
+                                            bool success) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  UMA_HISTOGRAM_BOOLEAN(kDeletionResultMetric, success);
+
+  std::move(callback).Run(success);
+}
+
 void AppShortcutManager::OnShortcutInfoRetrievedCreateShortcuts(
     bool add_to_desktop,
     CreateShortcutsCallback callback,
diff --git a/chrome/browser/web_applications/components/app_shortcut_manager.h b/chrome/browser/web_applications/components/app_shortcut_manager.h
index 1f5fff54..74bfb46 100644
--- a/chrome/browser/web_applications/components/app_shortcut_manager.h
+++ b/chrome/browser/web_applications/components/app_shortcut_manager.h
@@ -52,6 +52,10 @@
                        CreateShortcutsCallback callback);
   void UpdateShortcuts(const web_app::AppId& app_id,
                        base::StringPiece old_name);
+  void DeleteShortcuts(const AppId& app_id,
+                       const base::FilePath& shortcuts_data_dir,
+                       std::unique_ptr<ShortcutInfo> shortcut_info,
+                       DeleteShortcutsCallback callback);
 
   // TODO(crbug.com/1098471): Move this into web_app_shortcuts_menu_win.cc when
   // a callback is integrated into the Shortcuts Menu registration flow.
@@ -97,6 +101,9 @@
   void OnShortcutsCreated(const AppId& app_id,
                           CreateShortcutsCallback callback,
                           bool success);
+  void OnShortcutsDeleted(const AppId& app_id,
+                          DeleteShortcutsCallback callback,
+                          bool success);
 
   AppRegistrar* registrar() { return registrar_; }
   Profile* profile() { return profile_; }
diff --git a/chrome/browser/web_applications/components/os_integration_manager.cc b/chrome/browser/web_applications/components/os_integration_manager.cc
index 9b8e4b1..e6c99e59 100644
--- a/chrome/browser/web_applications/components/os_integration_manager.cc
+++ b/chrome/browser/web_applications/components/os_integration_manager.cc
@@ -433,11 +433,17 @@
     const base::FilePath& shortcuts_data_dir,
     std::unique_ptr<ShortcutInfo> shortcut_info,
     DeleteShortcutsCallback callback) {
-  internals::ScheduleDeletePlatformShortcuts(
-      shortcuts_data_dir, std::move(shortcut_info),
-      base::BindOnce(&OsIntegrationManager::OnShortcutsDeleted,
-                     weak_ptr_factory_.GetWeakPtr(), app_id,
-                     std::move(callback)));
+  if (shortcut_manager_->CanCreateShortcuts()) {
+    auto shortcuts_callback = base::BindOnce(
+        &OsIntegrationManager::OnShortcutsDeleted,
+        weak_ptr_factory_.GetWeakPtr(), app_id, std::move(callback));
+
+    shortcut_manager_->DeleteShortcuts(app_id, shortcuts_data_dir,
+                                       std::move(shortcut_info),
+                                       std::move(shortcuts_callback));
+  } else {
+    std::move(callback).Run(false);
+  }
 }
 
 void OsIntegrationManager::UnregisterFileHandlers(const AppId& app_id) {
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc
index a9778f2..6c624ee 100644
--- a/chrome/browser/web_applications/system_web_app_manager.cc
+++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -132,10 +132,8 @@
           extension_misc::kCameraAppId};
     }
     // We need "FileHandling" to use File Handling API to set launch directory.
-    // And we need "NativeFileSystem2" to use Native File System API.
     infos.at(SystemAppType::CAMERA).enabled_origin_trials =
-        OriginTrialsMap({{GetOrigin("chrome://camera-app"),
-                          {"FileHandling", "NativeFileSystem2"}}});
+        OriginTrialsMap({{GetOrigin("chrome://camera-app"), {"FileHandling"}}});
     infos.at(SystemAppType::CAMERA).capture_navigations = true;
 
     // TODO(b/172343409): Remove this log when the camera app is fully migrated
@@ -192,8 +190,7 @@
     infos.at(SystemAppType::MEDIA).show_in_launcher = false;
     infos.at(SystemAppType::MEDIA).show_in_search = false;
     infos.at(SystemAppType::MEDIA).enabled_origin_trials =
-        OriginTrialsMap({{GetOrigin("chrome://media-app"),
-                          {"FileHandling", "NativeFileSystem2"}}});
+        OriginTrialsMap({{GetOrigin("chrome://media-app"), {"FileHandling"}}});
   }
 
   if (SystemWebAppManager::IsAppEnabled(SystemAppType::PRINT_MANAGEMENT)) {
diff --git a/chrome/browser/web_applications/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/system_web_app_manager_browsertest.cc
index b4c4d3b..0e78a57 100644
--- a/chrome/browser/web_applications/system_web_app_manager_browsertest.cc
+++ b/chrome/browser/web_applications/system_web_app_manager_browsertest.cc
@@ -915,7 +915,7 @@
     maybe_installation_ =
         TestSystemWebAppInstallation::SetUpAppWithEnabledOriginTrials(
             OriginTrialsMap({{GetOrigin(GURL("chrome://test-system-app/")),
-                              {"NativeFileSystem2", "FileHandling"}}}),
+                              {"FileHandling"}}}),
             install_from_web_app_info());
   }
 
@@ -1073,7 +1073,7 @@
           TestSystemWebAppInstallation::SetUpAppWithEnabledOriginTrials(
               OriginTrialsMap(
                   {{url::Origin::Create(GURL("chrome://test-system-app/")),
-                    {"NativeFileSystem2", "FileHandling"}}}),
+                    {"FileHandling"}}}),
               install_from_web_app_info());
     } else {
       maybe_installation_ = TestSystemWebAppInstallation::SetUpWithoutApps();
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index b968fa66..213d885 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-master-1610107094-a1b03a814715c7959032a16f0512a58b7ebd318d.profdata
+chrome-linux-master-1610128749-0f05f817c8023f7311c3f1f138caa77d30d9071d.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 4f2aa6a..936d42db 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-master-1610096386-b7d9ff85a7e5a6b9d422dd8ae3e7ff1b6461dd2b.profdata
+chrome-win32-master-1610107094-5d3c24229731decbd402a4499ebb6cac6decdedb.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index b58e242..77596d27 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1610074312-1e61cca385dcdccbd239aae3d699d6888b006a9e.profdata
+chrome-win64-master-1610107094-52dce87c233c024b300dbf806becfa12ff1bc3d4.profdata
diff --git a/chrome/installer/mini_installer/BUILD.gn b/chrome/installer/mini_installer/BUILD.gn
index a75484d..5f5cb1c 100644
--- a/chrome/installer/mini_installer/BUILD.gn
+++ b/chrome/installer/mini_installer/BUILD.gn
@@ -111,206 +111,176 @@
   data_deps = [ "//chrome/installer/setup" ]
 }
 
-# Generates a mini installer.
-#
-#   out_dir (required)
-#     The output directory out_dir where the mini_installer image should be
-#     written.
-#
-#   chrome_dll_file (required)
-#     The path to the version of chrome.dll that should be included in the
-#     installer archive.
-#
-#   chrome_dll_target (required)
-#     The target that generated chrome_dll_file.
-#
-#   deps (required)
-#     Normal meaning.
-template("generate_mini_installer") {
-  chrome_dll_file = invoker.chrome_dll_file
-  chrome_dll_target = invoker.chrome_dll_target
-  output_dir = invoker.out_dir
+packed_files_rc_file = "$target_gen_dir/mini_installer/packed_files.rc"
 
-  packed_files_rc_file = "$target_gen_dir/$target_name/packed_files.rc"
-  archive_name = target_name + "_archive"
-  staging_dir = "$target_gen_dir/$target_name"
+# TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
+python2_action("mini_installer_archive") {
+  script = "//chrome/tools/build/win/create_installer_archive.py"
 
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(archive_name) {
-    script = "//chrome/tools/build/win/create_installer_archive.py"
+  release_file = "chrome.release"
 
-    release_file = "chrome.release"
+  inputs = [
+    "$root_out_dir/chrome.dll",
+    "$root_out_dir/chrome.exe",
+    "$root_out_dir/locales/en-US.pak",
+    "$root_out_dir/setup.exe",
+    "//chrome/tools/build/win/makecab.py",
+    release_file,
+  ]
 
-    inputs = [
-      "$chrome_dll_file",
-      "$root_out_dir/chrome.exe",
-      "$root_out_dir/locales/en-US.pak",
-      "$root_out_dir/setup.exe",
-      "//chrome/tools/build/win/makecab.py",
-      release_file,
-    ]
+  outputs = [
+    # See also chrome.packed.7z conditionally added below.
+    "$root_out_dir/chrome.7z",
+    "$root_out_dir/setup.ex_",
+    packed_files_rc_file,
+  ]
+  args = [
+    "--build_dir",
+    rebase_path(root_out_dir, root_build_dir),
+    "--staging_dir",
+    rebase_path("$target_gen_dir/mini_installer", root_build_dir),
+    "--input_file",
+    rebase_path(release_file, root_build_dir),
+    "--resource_file_path",
+    rebase_path(packed_files_rc_file, root_build_dir),
+    "--target_arch=$current_cpu",
+    "--distribution=_${branding_path_component}",
+    "--output_dir",
+    rebase_path(root_out_dir, root_build_dir),
+    "--chrome_runtime_deps",
+    rebase_path(chrome_runtime_deps, root_build_dir),
+    "--setup_runtime_deps",
+    rebase_path(setup_runtime_deps, root_build_dir),
 
-    outputs = [
-      # See also chrome.packed.7z conditionally added below.
-      "$output_dir/chrome.7z",
-      "$output_dir/setup.ex_",
-      packed_files_rc_file,
-    ]
-    args = [
-      "--build_dir",
-      rebase_path(root_out_dir, root_build_dir),
-      "--staging_dir",
-      rebase_path(staging_dir, root_build_dir),
-      "--input_file",
-      rebase_path(release_file, root_build_dir),
-      "--resource_file_path",
-      rebase_path(packed_files_rc_file, root_build_dir),
-      "--target_arch=$current_cpu",
-      "--distribution=_${branding_path_component}",
-      "--output_dir",
-      rebase_path(output_dir, root_build_dir),
-      "--chrome_runtime_deps",
-      rebase_path(chrome_runtime_deps, root_build_dir),
-      "--setup_runtime_deps",
-      rebase_path(setup_runtime_deps, root_build_dir),
+    # Optional arguments to generate diff installer.
+    #'--last_chrome_installer=C:/Temp/base',
+    #'--setup_exe_format=DIFF',
+    #'--diff_algorithm=COURGETTE',
 
-      # Optional arguments to generate diff installer.
-      #'--last_chrome_installer=C:/Temp/base',
-      #'--setup_exe_format=DIFF',
-      #'--diff_algorithm=COURGETTE',
+    # Optional argument for verbose archiving output.
+    #"--verbose",
+  ]
 
-      # Optional argument for verbose archiving output.
-      #"--verbose",
-    ]
+  deps = [
+    ":chrome_runtime_deps",
+    ":setup_runtime_deps",
+    "//chrome",
+    "//chrome:chrome_dll",
+    "//chrome/browser/extensions/default_extensions",
+    "//chrome/common/win:eventlog_provider",
+    "//chrome/installer/setup",
+    "//mojo/core:shared_library",
+    "//third_party/icu:icudata",
+  ]
 
-    deps = [
-      ":chrome_runtime_deps",
-      ":setup_runtime_deps",
-      "//chrome",
-      "//chrome/browser/extensions/default_extensions",
-      "//chrome/common/win:eventlog_provider",
-      "//chrome/installer/setup",
-      "//mojo/core:shared_library",
-      "//third_party/icu:icudata",
-      chrome_dll_target,
-    ]
-
-    if (enable_hidpi) {
-      args += [ "--enable_hidpi=1" ]
-    }
-    if (is_component_build) {
-      args += [ "--component_build=1" ]
-    }
-
-    if (is_component_ffmpeg) {
-      args += [ "--component_ffmpeg_build=1" ]
-    }
-
-    if (skip_archive_compression) {
-      args += [ "--skip_archive_compression" ]
-    } else {
-      outputs += [ "$output_dir/chrome.packed.7z" ]
-    }
-
-    if (enable_nacl) {
-      inputs += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
-      deps += [ "//ppapi/native_client:irt" ]
-      if (current_cpu == "x86") {
-        inputs += [
-          "$root_out_dir/nacl64.exe",
-          "$root_out_dir/nacl_irt_x86_32.nexe",
-        ]
-        deps += [ "//components/nacl/broker:nacl64" ]
-      }
-    }
-
-    if (icu_use_data_file) {
-      inputs += [ "$root_out_dir/icudtl.dat" ]
-    } else {
-      inputs += [ "$root_out_dir/icudt.dll" ]
-    }
-
-    if (v8_use_external_startup_data) {
-      deps += [ "//v8" ]
-      if (use_v8_context_snapshot) {
-        inputs += [ "$root_out_dir/$v8_context_snapshot_filename" ]
-        deps += [ "//tools/v8_context_snapshot" ]
-      } else {
-        inputs += [ "$root_out_dir/snapshot_blob.bin" ]
-        args += [ "--include_snapshotblob=1" ]
-      }
-    }
-
-    depfile = "$target_gen_dir/archive.d"
-    args += [
-      "--depfile",
-      rebase_path(depfile, root_build_dir),
-    ]
+  if (enable_hidpi) {
+    args += [ "--enable_hidpi=1" ]
+  }
+  if (is_component_build) {
+    args += [ "--component_build=1" ]
   }
 
-  executable(target_name) {
-    output_name = "mini_installer"
-    sources = [
-      "mini_installer_exe_main.cc",
-      packed_files_rc_file,
-    ]
+  if (is_component_ffmpeg) {
+    args += [ "--component_ffmpeg_build=1" ]
+  }
 
-    # This target is special so we manually override most linker flags and
-    # specify our own to keep the size down.
-    configs -= [
-      # Initialization may insert unexpected memset calls.
-      "//build/config/compiler:default_init_stack_vars",
-      "//build/config:executable_config",
-      "//build/config/win:console",
-    ]
-    configs += [
-      ":mini_installer_compiler_flags",
-      "//build/config/sanitizers:link_executable",
-      "//build/config/win:sdk_link",
-      "//build/config/win:windowed",
-    ]
+  if (skip_archive_compression) {
+    args += [ "--skip_archive_compression" ]
+  } else {
+    outputs += [ "$root_out_dir/chrome.packed.7z" ]
+  }
 
-    ldflags = [
-      "/FIXED:NO",
-      "/ignore:4199",
-      "/NXCOMPAT",
-    ]
-
-    libs = [ "setupapi.lib" ]
-
-    deps = [
-      ":$archive_name",
-      ":lib",
-      ":version",
-      "//base:clang_profiling_buildflags",
-      "//build/win:default_exe_manifest",
-    ]
-
-    # In general, mini_installer tries to avoid depending on the C++ standard
-    # library for size reasons. This is achieved by:
-    #   1. setting a custom entry point which avoids pulling in the standard
-    #      library via a link dependency.
-    #   2. setting no_default_deps=true to avoid including the implicit
-    #      dependency on //buildtools/third_party/libc++ in builds that set
-    #      use_custom_libcxx=true.
-    #
-    # The net result is similar to linking with /NODEFAULTLIB, but more precise
-    # as it just excludes the CRT.
-    #
-    # But in asan and clang profiling builds we need to link against a runtime
-    # library, which in turn depends on the standard library and relies on it
-    # to run initializers.
-    if (!is_asan && !use_clang_profiling) {
-      no_default_deps = true
-      ldflags += [ "/ENTRY:MainEntryPoint" ]
+  if (enable_nacl) {
+    inputs += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
+    deps += [ "//ppapi/native_client:irt" ]
+    if (current_cpu == "x86") {
+      inputs += [
+        "$root_out_dir/nacl64.exe",
+        "$root_out_dir/nacl_irt_x86_32.nexe",
+      ]
+      deps += [ "//components/nacl/broker:nacl64" ]
     }
   }
+
+  if (icu_use_data_file) {
+    inputs += [ "$root_out_dir/icudtl.dat" ]
+  } else {
+    inputs += [ "$root_out_dir/icudt.dll" ]
+  }
+
+  if (v8_use_external_startup_data) {
+    deps += [ "//v8" ]
+    if (use_v8_context_snapshot) {
+      inputs += [ "$root_out_dir/$v8_context_snapshot_filename" ]
+      deps += [ "//tools/v8_context_snapshot" ]
+    } else {
+      inputs += [ "$root_out_dir/snapshot_blob.bin" ]
+      args += [ "--include_snapshotblob=1" ]
+    }
+  }
+
+  depfile = "$target_gen_dir/archive.d"
+  args += [
+    "--depfile",
+    rebase_path(depfile, root_build_dir),
+  ]
 }
 
-generate_mini_installer("mini_installer") {
-  out_dir = root_out_dir
-  chrome_dll_file = "$root_out_dir/chrome.dll"
-  chrome_dll_target = "//chrome:chrome_dll"
+executable("mini_installer") {
+  sources = [
+    "mini_installer_exe_main.cc",
+    packed_files_rc_file,
+  ]
+
+  # This target is special so we manually override most linker flags and
+  # specify our own to keep the size down.
+  configs -= [
+    # Initialization may insert unexpected memset calls.
+    "//build/config/compiler:default_init_stack_vars",
+    "//build/config:executable_config",
+    "//build/config/win:console",
+  ]
+  configs += [
+    ":mini_installer_compiler_flags",
+    "//build/config/sanitizers:link_executable",
+    "//build/config/win:sdk_link",
+    "//build/config/win:windowed",
+  ]
+
+  ldflags = [
+    "/FIXED:NO",
+    "/ignore:4199",
+    "/NXCOMPAT",
+  ]
+
+  libs = [ "setupapi.lib" ]
+
+  deps = [
+    ":lib",
+    ":mini_installer_archive",
+    ":version",
+    "//base:clang_profiling_buildflags",
+    "//build/win:default_exe_manifest",
+  ]
+
+  # In general, mini_installer tries to avoid depending on the C++ standard
+  # library for size reasons. This is achieved by:
+  #   1. setting a custom entry point which avoids pulling in the standard
+  #      library via a link dependency.
+  #   2. setting no_default_deps=true to avoid including the implicit
+  #      dependency on //buildtools/third_party/libc++ in builds that set
+  #      use_custom_libcxx=true.
+  #
+  # The net result is similar to linking with /NODEFAULTLIB, but more precise
+  # as it just excludes the CRT.
+  #
+  # But in asan and clang profiling builds we need to link against a runtime
+  # library, which in turn depends on the standard library and relies on it
+  # to run initializers.
+  if (!is_asan && !use_clang_profiling) {
+    no_default_deps = true
+    ldflags += [ "/ENTRY:MainEntryPoint" ]
+  }
 }
 
 # previous_version_mini_installer.exe can't be generated in an x86 Debug
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 0beadd9..ae76ebe 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2409,8 +2409,6 @@
         "../browser/chromeos/accessibility/magnification_controller_browsertest.cc",
         "../browser/chromeos/accessibility/magnification_manager_browsertest.cc",
         "../browser/chromeos/accessibility/select_to_speak_browsertest.cc",
-        "../browser/chromeos/accessibility/speech_monitor.cc",
-        "../browser/chromeos/accessibility/speech_monitor.h",
         "../browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc",
         "../browser/chromeos/accessibility/spoken_feedback_browsertest.cc",
         "../browser/chromeos/accessibility/spoken_feedback_browsertest.h",
diff --git a/chrome/test/data/webui/settings/chromeos/cellular_networks_list_test.js b/chrome/test/data/webui/settings/chromeos/cellular_networks_list_test.js
index 459fbd3..18d3f76 100644
--- a/chrome/test/data/webui/settings/chromeos/cellular_networks_list_test.js
+++ b/chrome/test/data/webui/settings/chromeos/cellular_networks_list_test.js
@@ -166,7 +166,8 @@
 
     let eSimNetworkList = cellularNetworkList.$$('#esimNetworkList');
     assertTrue(!!eSimNetworkList);
-    assertEquals(1, cellularNetworkList.eSimPendingProfileItems_.length);
+
+    Polymer.dom.flush();
 
     const listItem = eSimNetworkList.$$('network-list-item');
     assertTrue(!!listItem);
diff --git a/chrome/test/data/webui/settings/chromeos/device_page_tests.js b/chrome/test/data/webui/settings/chromeos/device_page_tests.js
index 038583b2..8fd944262 100644
--- a/chrome/test/data/webui/settings/chromeos/device_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/device_page_tests.js
@@ -1547,7 +1547,6 @@
                     settings.DevicePageBrowserProxyImpl.getInstance()
                         .updatePowerStatusCalled_);
 
-                acIdleSelect = assert(powerPage.$$('#acIdleSelect'));
                 lidClosedToggle = assert(powerPage.$$('#lidClosedToggle'));
 
                 assertEquals(
@@ -1587,9 +1586,13 @@
 
           // Power source row is hidden since there's no battery.
           assertTrue(powerSourceRow.hidden);
-          // Idle settings while on battery should not be visible if the
-          // battery is not present.
+          // Idle settings while on battery and while charging should not be
+          // visible if the battery is not present.
           assertEquals(null, powerPage.$$('#batteryIdleSettingBox'));
+          assertEquals(null, powerPage.$$('#acIdleSettingBox'));
+
+          // Expect the "When idle" dropdown options to appear instead.
+          assert(powerPage.$$('#noBatteryAcIdleSelect'));
         });
 
         test('power sources', function() {
@@ -1666,6 +1669,19 @@
         });
 
         test('set AC idle behavior', function() {
+          const batteryStatus = {
+            present: true,
+            charging: false,
+            calculating: false,
+            percent: 50,
+            statusText: '5 hours left',
+          };
+          cr.webUIListenerCallback(
+              'battery-status-changed', Object.assign({}, batteryStatus));
+          setPowerSources([], '', false);
+          Polymer.dom.flush();
+
+          acIdleSelect = assert(powerPage.$$('#acIdleSelect'));
           selectValue(acIdleSelect, settings.IdleBehavior.DISPLAY_ON);
           expectEquals(
               settings.IdleBehavior.DISPLAY_ON,
@@ -1885,6 +1901,7 @@
                 });
               })
               .then(function() {
+                acIdleSelect = assert(powerPage.$$('#acIdleSelect'));
                 const batteryIdleSelect =
                     assert(powerPage.$$('#batteryIdleSelect'));
                 expectEquals(
@@ -1971,6 +1988,7 @@
                    powerPage.async(resolve);
                  })
               .then(function() {
+                acIdleSelect = assert(powerPage.$$('#acIdleSelect'));
                 const batteryIdleSelect =
                     assert(powerPage.$$('#batteryIdleSelect'));
                 expectEquals(
diff --git a/chrome/test/data/webui/settings/privacy_page_test.js b/chrome/test/data/webui/settings/privacy_page_test.js
index 9a222ea..5655886 100644
--- a/chrome/test/data/webui/settings/privacy_page_test.js
+++ b/chrome/test/data/webui/settings/privacy_page_test.js
@@ -7,7 +7,7 @@
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {ClearBrowsingDataBrowserProxyImpl, ContentSettingsTypes, CookieControlsMode, SafeBrowsingSetting, SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
-import {HatsBrowserProxyImpl, MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, Route, Router, routes, SecureDnsMode, SyncBrowserProxyImpl} from 'chrome://settings/settings.js';
+import {HatsBrowserProxyImpl, MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, Route, Router, routes, SecureDnsMode} from 'chrome://settings/settings.js';
 
 import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
 import {flushTasks, isChildVisible, isVisible} from '../test_util.m.js';
@@ -17,7 +17,6 @@
 import {TestMetricsBrowserProxy} from './test_metrics_browser_proxy.js';
 import {TestPrivacyPageBrowserProxy} from './test_privacy_page_browser_proxy.js';
 import {TestSiteSettingsPrefsBrowserProxy} from './test_site_settings_prefs_browser_proxy.js';
-import {TestSyncBrowserProxy} from './test_sync_browser_proxy.m.js';
 
 // clang-format on
 
@@ -82,14 +81,12 @@
     });
   });
 
-  setup(async function() {
+  setup(function() {
     testClearBrowsingDataBrowserProxy = new TestClearBrowsingDataBrowserProxy();
     ClearBrowsingDataBrowserProxyImpl.instance_ =
         testClearBrowsingDataBrowserProxy;
     const testBrowserProxy = new TestPrivacyPageBrowserProxy();
     PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
-    const testSyncBrowserProxy = new TestSyncBrowserProxy();
-    SyncBrowserProxyImpl.instance_ = testSyncBrowserProxy;
     siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy();
     SiteSettingsPrefsBrowserProxyImpl.instance_ = siteSettingsBrowserProxy;
     siteSettingsBrowserProxy.setCookieSettingDescription(testLabels[0]);
@@ -112,7 +109,7 @@
           {mode: {value: SecureDnsMode.AUTOMATIC}, templates: {value: ''}},
     };
     document.body.appendChild(page);
-    return testSyncBrowserProxy.whenCalled('getSyncStatus');
+    return flushTasks();
   });
 
   teardown(function() {
diff --git a/chrome/test/data/webui/settings/security_page_test.js b/chrome/test/data/webui/settings/security_page_test.js
index 696fc3b8..4325cbb 100644
--- a/chrome/test/data/webui/settings/security_page_test.js
+++ b/chrome/test/data/webui/settings/security_page_test.js
@@ -7,13 +7,12 @@
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {SafeBrowsingSetting} from 'chrome://settings/lazy_load.js';
-import {MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, Router, routes, SafeBrowsingInteractions, SecureDnsMode, SyncBrowserProxyImpl} from 'chrome://settings/settings.js';
+import {MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, Router, routes, SafeBrowsingInteractions, SecureDnsMode} from 'chrome://settings/settings.js';
 import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
 import {flushTasks, isChildVisible} from '../test_util.m.js';
 
 import {TestMetricsBrowserProxy} from './test_metrics_browser_proxy.js';
 import {TestPrivacyPageBrowserProxy} from './test_privacy_page_browser_proxy.js';
-import {TestSyncBrowserProxy} from './test_sync_browser_proxy.m.js';
 
 // clang-format on
 
@@ -21,9 +20,6 @@
   /** @type {!TestMetricsBrowserProxy} */
   let testMetricsBrowserProxy;
 
-  /** @type {!TestSyncBrowserProxy} */
-  let syncBrowserProxy;
-
   /** @type {!TestPrivacyPageBrowserProxy} */
   let testPrivacyBrowserProxy;
 
@@ -42,8 +38,6 @@
     MetricsBrowserProxyImpl.instance_ = testMetricsBrowserProxy;
     testPrivacyBrowserProxy = new TestPrivacyPageBrowserProxy();
     PrivacyPageBrowserProxyImpl.instance_ = testPrivacyBrowserProxy;
-    syncBrowserProxy = new TestSyncBrowserProxy();
-    SyncBrowserProxyImpl.instance_ = syncBrowserProxy;
     document.body.innerHTML = '';
     page = /** @type {!SettingsSecurityPageElement} */ (
         document.createElement('settings-security-page'));
@@ -57,12 +51,11 @@
           type: chrome.settingsPrivate.PrefType.NUMBER,
           value: SafeBrowsingSetting.STANDARD,
         },
-        password_leak_detection: {value: true, userControlDisabled: false},
+        password_leak_detection: {value: false},
       },
       dns_over_https:
           {mode: {value: SecureDnsMode.AUTOMATIC}, templates: {value: ''}},
     };
-    page.set('syncStatus', {signedIn: false, hasError: false});
     document.body.appendChild(page);
     page.$$('#safeBrowsingEnhanced').updateCollapsed();
     page.$$('#safeBrowsingStandard').updateCollapsed();
@@ -119,13 +112,13 @@
     flush();
     assertEquals(activeWhenSignedInSubLabel, toggle.subLabel);
 
-    page.set('syncStatus', {signedIn: true});
+    page.set('prefs.generated.password_leak_detection.value', true);
     flush();
     assertEquals(defaultSubLabel, toggle.subLabel);
 
-    page.set('syncStatus', {signedIn: true, hasError: true});
+    page.set('prefs.profile.password_manager_leak_detection.value', false);
     flush();
-    assertEquals(activeWhenSignedInSubLabel, toggle.subLabel);
+    assertEquals(defaultSubLabel, toggle.subLabel);
   });
 
   test('LogSafeBrowsingExtendedToggle', async function() {
@@ -601,7 +594,6 @@
       dns_over_https:
           {mode: {value: SecureDnsMode.AUTOMATIC}, templates: {value: ''}},
     };
-    page.set('syncStatus', {signedIn: true, hasError: false});
     document.body.appendChild(page);
     flush();
   });
diff --git a/chrome/tools/build/linux/FILES.cfg b/chrome/tools/build/linux/FILES.cfg
index 48152bb..ef00a14b 100644
--- a/chrome/tools/build/linux/FILES.cfg
+++ b/chrome/tools/build/linux/FILES.cfg
@@ -443,17 +443,17 @@
   },
   # MojoJS support data (WebUSB):
   {
-    'filename': 'gen/url/mojom/url.mojom.js',
+    'filename': 'gen/url/mojom/url.mojom.m.js',
     'buildtype': ['dev', 'official'],
     'archive': 'mojojs.zip',
   },
   {
-    'filename': 'gen/services/device/public/mojom/usb_*.mojom.js',
+    'filename': 'gen/services/device/public/mojom/usb_*.mojom.m.js',
     'buildtype': ['dev', 'official'],
     'archive': 'mojojs.zip',
   },
   {
-    'filename': 'gen/third_party/blink/public/mojom/usb/web_usb_service.mojom.js',
+    'filename': 'gen/third_party/blink/public/mojom/usb/web_usb_service.mojom.m.js',
     'buildtype': ['dev', 'official'],
     'archive': 'mojojs.zip',
   },
diff --git a/chromecast/browser/cast_display_configurator.cc b/chromecast/browser/cast_display_configurator.cc
index 73bf778..bfbaac8 100644
--- a/chromecast/browser/cast_display_configurator.cc
+++ b/chromecast/browser/cast_display_configurator.cc
@@ -234,17 +234,15 @@
     display::DisplaySnapshot* display,
     const display::DisplayMode* mode,
     const gfx::Point& origin,
-    const base::flat_map<int64_t, bool>& statuses) {
+    bool config_success) {
   DCHECK(display);
   DCHECK(mode);
   DCHECK_EQ(display, display_);
-  DCHECK_EQ(statuses.size(), 1UL);
 
   const gfx::Rect bounds(origin, mode->size());
-  bool success = statuses.at(display_->display_id());
-  DVLOG(1) << __func__ << " success=" << success
+  DVLOG(1) << __func__ << " success=" << config_success
            << " bounds=" << bounds.ToString();
-  if (success) {
+  if (config_success) {
     // Need to update the display state otherwise it becomes stale.
     display_->set_current_mode(mode);
     display_->set_origin(origin);
diff --git a/chromecast/browser/cast_display_configurator.h b/chromecast/browser/cast_display_configurator.h
index 9bb1708..0c45c3b 100644
--- a/chromecast/browser/cast_display_configurator.h
+++ b/chromecast/browser/cast_display_configurator.h
@@ -64,7 +64,7 @@
   void OnDisplayConfigured(display::DisplaySnapshot* display,
                            const display::DisplayMode* mode,
                            const gfx::Point& origin,
-                           const base::flat_map<int64_t, bool>& statuses);
+                           bool statuses);
   void UpdateScreen(int64_t display_id,
                     const gfx::Rect& bounds,
                     float device_scale_factor,
diff --git a/chromeos/components/scanning/scanning_uma.h b/chromeos/components/scanning/scanning_uma.h
index 546feed..36881c8 100644
--- a/chromeos/components/scanning/scanning_uma.h
+++ b/chromeos/components/scanning/scanning_uma.h
@@ -8,16 +8,24 @@
 namespace chromeos {
 namespace scanning {
 
-// These are used in histograms, do not remove/renumber entries. If you're
-// adding to this enum with the intention that it will be logged, update the
-// ScanAppEntryPoint enum listing in
+// The enums below are used in histograms, do not remove/renumber entries. If
+// you're adding to any of these enums, update the corresponding enum listing in
 // tools/metrics/histograms/enums.xml.
+
 enum class ScanAppEntryPoint {
   kSettings = 0,
   kLauncher = 1,
   kMaxValue = kLauncher,
 };
 
+enum class ScanJobFailureReason {
+  kUnknownScannerError = 0,
+  kScannerNotFound = 1,
+  kUnsupportedScanToPath = 2,
+  kSaveToDiskFailed = 3,
+  kMaxValue = kSaveToDiskFailed,
+};
+
 // Records ScanAppEntryPoint histogram value.
 void RecordScanAppEntryPoint(ScanAppEntryPoint entry_point);
 
diff --git a/chromeos/components/sync_wifi/fake_local_network_collector.h b/chromeos/components/sync_wifi/fake_local_network_collector.h
index f4976aa2..4e1793e 100644
--- a/chromeos/components/sync_wifi/fake_local_network_collector.h
+++ b/chromeos/components/sync_wifi/fake_local_network_collector.h
@@ -27,6 +27,7 @@
   // For test purposes, |guid| == serialized NetworkIdentifier.
   void GetSyncableNetwork(const std::string& guid,
                           ProtoCallback callback) override;
+  void RecordZeroNetworksEligibleForSync() override {}
   // For test purposes, |guid| == serialized NetworkIdentifier.
   base::Optional<NetworkIdentifier> GetNetworkIdentifierFromGuid(
       const std::string& guid) override;
diff --git a/chromeos/components/sync_wifi/local_network_collector.h b/chromeos/components/sync_wifi/local_network_collector.h
index f9e73b3..3eb97610 100644
--- a/chromeos/components/sync_wifi/local_network_collector.h
+++ b/chromeos/components/sync_wifi/local_network_collector.h
@@ -50,6 +50,10 @@
   virtual void GetSyncableNetwork(const std::string& guid,
                                   ProtoCallback callback) = 0;
 
+  // Record the reason(s) why zero of the local networks are eligible to be
+  // synced.
+  virtual void RecordZeroNetworksEligibleForSync() = 0;
+
   // Retrieves the NetworkIdentifier for a given local network's |guid|
   // if the network no longer exists it returns nullopt.
   virtual base::Optional<NetworkIdentifier> GetNetworkIdentifierFromGuid(
diff --git a/chromeos/components/sync_wifi/local_network_collector_impl.cc b/chromeos/components/sync_wifi/local_network_collector_impl.cc
index b9ff459..f24a7271 100644
--- a/chromeos/components/sync_wifi/local_network_collector_impl.cc
+++ b/chromeos/components/sync_wifi/local_network_collector_impl.cc
@@ -40,8 +40,10 @@
 }  // namespace
 
 LocalNetworkCollectorImpl::LocalNetworkCollectorImpl(
-    network_config::mojom::CrosNetworkConfig* cros_network_config)
-    : cros_network_config_(cros_network_config) {
+    network_config::mojom::CrosNetworkConfig* cros_network_config,
+    SyncedNetworkMetricsLogger* metrics_recorder)
+    : cros_network_config_(cros_network_config),
+      metrics_recorder_(metrics_recorder) {
   cros_network_config_->AddObserver(
       cros_network_config_observer_receiver_.BindNewPipeAndPassRemote());
 
@@ -53,6 +55,13 @@
 
 void LocalNetworkCollectorImpl::GetAllSyncableNetworks(
     ProtoListCallback callback) {
+  if (!is_mojo_networks_loaded_) {
+    after_networks_are_loaded_callback_queue_.push(
+        base::BindOnce(&LocalNetworkCollectorImpl::GetAllSyncableNetworks,
+                       weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+    return;
+  }
+
   std::string request_guid = InitializeRequest();
   request_guid_to_list_callback_[request_guid] = std::move(callback);
 
@@ -74,6 +83,39 @@
   }
 }
 
+void LocalNetworkCollectorImpl::RecordZeroNetworksEligibleForSync() {
+  if (has_logged_zero_eligible_networks_metric_) {
+    return;
+  }
+
+  if (!is_mojo_networks_loaded_) {
+    after_networks_are_loaded_callback_queue_.push(base::BindOnce(
+        &LocalNetworkCollectorImpl::RecordZeroNetworksEligibleForSync,
+        weak_ptr_factory_.GetWeakPtr()));
+    return;
+  }
+
+  base::flat_set<NetworkEligibilityStatus>
+      network_eligible_for_sync_status_codes;
+  NetworkEligibilityStatus network_eligible_for_sync_status;
+  for (const network_config::mojom::NetworkStatePropertiesPtr& network :
+       mojo_networks_) {
+    if (!network ||
+        network->type != network_config::mojom::NetworkType::kWiFi) {
+      continue;
+    }
+    network_eligible_for_sync_status = GetNetworkEligibilityStatus(
+        network->guid, network->connectable,
+        network->type_state->get_wifi()->security, network->source,
+        /*log_result=*/false);
+    network_eligible_for_sync_status_codes.insert(
+        network_eligible_for_sync_status);
+  }
+  metrics_recorder_->RecordZeroNetworksEligibleForSync(
+      network_eligible_for_sync_status_codes);
+  has_logged_zero_eligible_networks_metric_ = true;
+}
+
 void LocalNetworkCollectorImpl::GetSyncableNetwork(const std::string& guid,
                                                    ProtoCallback callback) {
   const network_config::mojom::NetworkStateProperties* network = nullptr;
@@ -273,6 +315,13 @@
 }
 
 void LocalNetworkCollectorImpl::OnNetworkStateListChanged() {
+  if (!NetworkHandler::Get()
+           ->network_state_handler()
+           ->IsProfileNetworksLoaded()) {
+    is_mojo_networks_loaded_ = false;
+    return;
+  }
+
   cros_network_config_->GetNetworkStateList(
       network_config::mojom::NetworkFilter::New(
           network_config::mojom::FilterType::kConfigured,
@@ -285,6 +334,11 @@
 void LocalNetworkCollectorImpl::OnGetNetworkList(
     std::vector<network_config::mojom::NetworkStatePropertiesPtr> networks) {
   mojo_networks_ = std::move(networks);
+  is_mojo_networks_loaded_ = true;
+  while (!after_networks_are_loaded_callback_queue_.empty()) {
+    std::move(after_networks_are_loaded_callback_queue_.front()).Run();
+    after_networks_are_loaded_callback_queue_.pop();
+  }
 }
 
 }  // namespace sync_wifi
diff --git a/chromeos/components/sync_wifi/local_network_collector_impl.h b/chromeos/components/sync_wifi/local_network_collector_impl.h
index 3883367..024bc3d 100644
--- a/chromeos/components/sync_wifi/local_network_collector_impl.h
+++ b/chromeos/components/sync_wifi/local_network_collector_impl.h
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "chromeos/components/sync_wifi/local_network_collector.h"
+#include "chromeos/components/sync_wifi/synced_network_metrics_logger.h"
 #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 
@@ -39,12 +40,16 @@
 
   // |cros_network_config| and |network_metadata_store| must outlive this class.
   explicit LocalNetworkCollectorImpl(
-      network_config::mojom::CrosNetworkConfig* cros_network_config);
+      network_config::mojom::CrosNetworkConfig* cros_network_config,
+      SyncedNetworkMetricsLogger* metrics_recorder);
   ~LocalNetworkCollectorImpl() override;
 
   // Can only execute one request at a time.
   void GetAllSyncableNetworks(ProtoListCallback callback) override;
 
+  // Executes at most once per instance of LocalNetworkCollectorImpl.
+  void RecordZeroNetworksEligibleForSync() override;
+
   // Can be called on multiple networks simultaneously.
   void GetSyncableNetwork(const std::string& guid,
                           ProtoCallback callback) override;
@@ -102,6 +107,7 @@
       std::vector<network_config::mojom::NetworkStatePropertiesPtr> networks);
 
   network_config::mojom::CrosNetworkConfig* cros_network_config_;
+  SyncedNetworkMetricsLogger* metrics_recorder_;
   mojo::Receiver<chromeos::network_config::mojom::CrosNetworkConfigObserver>
       cros_network_config_observer_receiver_{this};
   std::vector<network_config::mojom::NetworkStatePropertiesPtr> mojo_networks_;
@@ -113,6 +119,10 @@
       request_guid_to_in_flight_networks_;
   base::flat_map<std::string, ProtoCallback> request_guid_to_single_callback_;
   base::flat_map<std::string, ProtoListCallback> request_guid_to_list_callback_;
+  base::queue<base::OnceCallback<void()>>
+      after_networks_are_loaded_callback_queue_;
+  bool is_mojo_networks_loaded_ = false;
+  bool has_logged_zero_eligible_networks_metric_ = false;
 
   base::WeakPtrFactory<LocalNetworkCollectorImpl> weak_ptr_factory_{this};
 };
diff --git a/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc b/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
index ebe2ac3b8..3cfc501 100644
--- a/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
+++ b/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
@@ -9,12 +9,14 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "chromeos/components/sync_wifi/local_network_collector.h"
 #include "chromeos/components/sync_wifi/local_network_collector_impl.h"
 #include "chromeos/components/sync_wifi/network_identifier.h"
 #include "chromeos/components/sync_wifi/network_test_helper.h"
 #include "chromeos/components/sync_wifi/network_type_conversions.h"
+#include "chromeos/components/sync_wifi/synced_network_metrics_logger.h"
 #include "chromeos/components/sync_wifi/test_data_generator.h"
 #include "chromeos/dbus/shill/fake_shill_simulated_result.h"
 #include "chromeos/network/network_handler.h"
@@ -59,10 +61,15 @@
   void SetUp() override {
     testing::Test::SetUp();
     helper()->SetUp();
+    metrics_logger_ = std::make_unique<SyncedNetworkMetricsLogger>(
+        /*network_state_handler=*/nullptr,
+        /*network_connection_handler=*/nullptr);
+
     local_network_collector_ = std::make_unique<LocalNetworkCollectorImpl>(
-        remote_cros_network_config_.get());
+        remote_cros_network_config_.get(), metrics_logger_.get());
     local_network_collector_->SetNetworkMetadataStore(
         NetworkHandler::Get()->network_metadata_store()->GetWeakPtr());
+    on_get_all_syncable_networks_count_ = 0;
   }
 
   void TearDown() override {
@@ -77,6 +84,7 @@
     for (int i = 0; i < (int)result.size(); i++) {
       EXPECT_EQ(expected[i], DecodeHexString(result[i].hex_ssid()));
     }
+    on_get_all_syncable_networks_count_++;
   }
 
   void OnGetSyncableNetwork(
@@ -103,15 +111,21 @@
   }
 
   NetworkTestHelper* helper() { return local_test_helper_.get(); }
+  size_t on_get_all_syncable_networks_count() {
+    return on_get_all_syncable_networks_count_;
+  }
 
  private:
   base::test::TaskEnvironment task_environment_;
 
   std::unique_ptr<LocalNetworkCollector> local_network_collector_;
+  std::unique_ptr<SyncedNetworkMetricsLogger> metrics_logger_;
   std::unique_ptr<NetworkTestHelper> local_test_helper_;
   mojo::Remote<chromeos::network_config::mojom::CrosNetworkConfig>
       remote_cros_network_config_;
 
+  size_t on_get_all_syncable_networks_count_;
+
   DISALLOW_COPY_AND_ASSIGN(LocalNetworkCollectorImplTest);
 };
 
@@ -130,6 +144,41 @@
 }
 
 TEST_F(LocalNetworkCollectorImplTest,
+       TestGetAllSyncableNetworks_MojoNetworksUnitializedThenInitialized) {
+  const std::string kSharedUserDirectory =
+      NetworkProfileHandler::GetSharedProfilePath();
+  helper()->network_state_test_helper()->ClearProfiles();
+  // Add back shared profile path to simulate user on the login screen.
+  helper()->network_state_test_helper()->profile_test()->AddProfile(
+      /*profile_path=*/kSharedUserDirectory, /*userhash=*/std::string());
+  base::RunLoop().RunUntilIdle();
+
+  size_t on_get_all_syncable_networks_count_before =
+      on_get_all_syncable_networks_count();
+  local_network_collector()->GetAllSyncableNetworks(base::DoNothing());
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(on_get_all_syncable_networks_count_before,
+            on_get_all_syncable_networks_count());
+
+  // Log users back in.
+  const char* kProfilePathUser =
+      helper()->network_state_test_helper()->ProfilePathUser();
+  const char* kUserHash = helper()->network_state_test_helper()->UserHash();
+  helper()->network_state_test_helper()->profile_test()->AddProfile(
+      /*profile_path=*/kProfilePathUser, /*userhash=*/kUserHash);
+  helper()->network_state_test_helper()->profile_test()->AddProfile(
+      /*profile_path=*/kUserHash, /*userhash=*/std::string());
+
+  std::vector<std::string> expected;
+  local_network_collector()->GetAllSyncableNetworks(
+      base::BindOnce(&LocalNetworkCollectorImplTest::OnGetAllSyncableNetworks,
+                     base::Unretained(this), expected));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(on_get_all_syncable_networks_count_before + 1,
+            on_get_all_syncable_networks_count());
+}
+
+TEST_F(LocalNetworkCollectorImplTest,
        TestGetAllSyncableNetworks_WithFiltering) {
   helper()->ConfigureWiFiNetwork(kFredSsid, /*is_secured=*/true,
                                  /*in_profile=*/true, /*has_connected=*/true);
@@ -164,6 +213,33 @@
   base::RunLoop().RunUntilIdle();
 }
 
+TEST_F(LocalNetworkCollectorImplTest, TestRecordZeroNetworksEligibleForSync) {
+  base::HistogramTester histogram_tester;
+  helper()->ConfigureWiFiNetwork(kMangoSsid, /*is_secured=*/true,
+                                 /*in_profile=*/false, /*has_connected=*/true,
+                                 /*owned_by_user=*/false);
+  helper()->ConfigureWiFiNetwork(kAnnieSsid, /*is_secured=*/false,
+                                 /*in_profile=*/true, /*has_connected=*/true);
+  helper()->ConfigureWiFiNetwork(kWalterSsid, /*is_secured=*/true,
+                                 /*in_profile=*/false, /*has_connected=*/true,
+                                 /*owned_by_user=*/true,
+                                 /*configured_by_sync=*/false,
+                                 /*is_from_policy=*/true);
+
+  local_network_collector()->RecordZeroNetworksEligibleForSync();
+  base::RunLoop().RunUntilIdle();
+  histogram_tester.ExpectTotalCount(kZeroNetworksSyncedReasonHistogram, 3);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kUnsupportedSecurityType, 1);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kNotConfiguredByUser, 1);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kProhibitedByPolicy, 1);
+}
+
 TEST_F(LocalNetworkCollectorImplTest, TestGetSyncableNetwork) {
   std::string guid = helper()->ConfigureWiFiNetwork(
       kFredSsid, /*is_secured=*/true,
diff --git a/chromeos/components/sync_wifi/network_eligibility_checker.cc b/chromeos/components/sync_wifi/network_eligibility_checker.cc
index d33b0da..96ba50d1 100644
--- a/chromeos/components/sync_wifi/network_eligibility_checker.cc
+++ b/chromeos/components/sync_wifi/network_eligibility_checker.cc
@@ -14,17 +14,18 @@
 
 namespace sync_wifi {
 
-bool IsEligibleForSync(const std::string& guid,
-                       bool is_connectable,
-                       const network_config::mojom::SecurityType& security_type,
-                       const network_config::mojom::OncSource& source,
-                       bool log_result) {
+NetworkEligibilityStatus GetNetworkEligibilityStatus(
+    const std::string& guid,
+    bool is_connectable,
+    const network_config::mojom::SecurityType& security_type,
+    const network_config::mojom::OncSource& source,
+    bool log_result) {
   NetworkMetadataStore* network_metadata_store =
       NetworkHandler::IsInitialized()
           ? NetworkHandler::Get()->network_metadata_store()
           : nullptr;
   if (!network_metadata_store)
-    return false;
+    return NetworkEligibilityStatus::kNoMetadata;
 
   if (source == network_config::mojom::OncSource::kDevicePolicy ||
       source == network_config::mojom::OncSource::kUserPolicy) {
@@ -32,7 +33,7 @@
       NET_LOG(EVENT) << NetworkGuidId(guid)
                      << " is not eligible, configured by policy.";
     }
-    return false;
+    return NetworkEligibilityStatus::kProhibitedByPolicy;
   }
 
   if (network_metadata_store->GetHasBadPassword(guid) &&
@@ -42,7 +43,7 @@
           << NetworkGuidId(guid)
           << " is not eligible, it has a bad password and has never connected.";
     }
-    return false;
+    return NetworkEligibilityStatus::kInvalidPassword;
   }
 
   if (!is_connectable) {
@@ -50,7 +51,7 @@
       NET_LOG(EVENT) << NetworkGuidId(guid)
                      << " is not eligible, it is not connectable.";
     }
-    return false;
+    return NetworkEligibilityStatus::kNotConnectable;
   }
 
   if (!network_metadata_store->GetIsCreatedByUser(guid)) {
@@ -58,7 +59,7 @@
       NET_LOG(EVENT) << NetworkGuidId(guid)
                      << " is not eligible, was not configured by user.";
     }
-    return false;
+    return NetworkEligibilityStatus::kNotConfiguredByUser;
   }
 
   if (security_type != network_config::mojom::SecurityType::kWepPsk &&
@@ -68,13 +69,23 @@
                      << " is not eligible, security type not supported: "
                      << security_type;
     }
-    return false;
+    return NetworkEligibilityStatus::kUnsupportedSecurityType;
   }
 
   if (log_result) {
     NET_LOG(EVENT) << NetworkGuidId(guid) << " is eligible for sync.";
   }
-  return true;
+  return NetworkEligibilityStatus::kNetworkIsEligible;
+}
+
+bool IsEligibleForSync(const std::string& guid,
+                       bool is_connectable,
+                       const network_config::mojom::SecurityType& security_type,
+                       const network_config::mojom::OncSource& source,
+                       bool log_result) {
+  return GetNetworkEligibilityStatus(guid, is_connectable, security_type,
+                                     source, log_result) ==
+         NetworkEligibilityStatus::kNetworkIsEligible;
 }
 
 }  // namespace sync_wifi
diff --git a/chromeos/components/sync_wifi/network_eligibility_checker.h b/chromeos/components/sync_wifi/network_eligibility_checker.h
index 09e9867..5706be6 100644
--- a/chromeos/components/sync_wifi/network_eligibility_checker.h
+++ b/chromeos/components/sync_wifi/network_eligibility_checker.h
@@ -14,6 +14,27 @@
 
 namespace sync_wifi {
 
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class NetworkEligibilityStatus {
+  kNetworkIsEligible = 0,
+  kNoMetadata = 1,
+  kProhibitedByPolicy = 2,
+  kInvalidPassword = 3,
+  kNotConnectable = 4,
+  kNotConfiguredByUser = 5,
+  kUnsupportedSecurityType = 6,
+  kNoWifiNetworksAvailable = 7,
+  kMaxValue = kNoWifiNetworksAvailable
+};
+
+NetworkEligibilityStatus GetNetworkEligibilityStatus(
+    const std::string& guid,
+    bool is_connectable,
+    const network_config::mojom::SecurityType& security_type,
+    const network_config::mojom::OncSource& source,
+    bool log_result);
+
 bool IsEligibleForSync(const std::string& guid,
                        bool is_connectable,
                        const network_config::mojom::SecurityType& security_type,
diff --git a/chromeos/components/sync_wifi/network_test_helper.cc b/chromeos/components/sync_wifi/network_test_helper.cc
index f952deb..f813e7af 100644
--- a/chromeos/components/sync_wifi/network_test_helper.cc
+++ b/chromeos/components/sync_wifi/network_test_helper.cc
@@ -76,7 +76,8 @@
   NetworkHandler::Get()->InitializePrefServices(&user_prefs_, &local_state_);
   network_state_helper_->ResetDevicesAndServices();
   network_state_helper_->profile_test()->AddProfile(
-      network_state_helper_->UserHash(), std::string());
+      /*profile_path=*/network_state_helper_->UserHash(),
+      /*userhash=*/std::string());
 
   base::RunLoop().RunUntilIdle();
 }
diff --git a/chromeos/components/sync_wifi/synced_network_metrics_logger.cc b/chromeos/components/sync_wifi/synced_network_metrics_logger.cc
index 9fffb3b..0e20455 100644
--- a/chromeos/components/sync_wifi/synced_network_metrics_logger.cc
+++ b/chromeos/components/sync_wifi/synced_network_metrics_logger.cc
@@ -6,8 +6,10 @@
 
 #include "base/bind.h"
 #include "base/metrics/histogram_functions.h"
+#include "chromeos/components/sync_wifi/network_eligibility_checker.h"
 #include "chromeos/network/network_configuration_handler.h"
 #include "chromeos/network/network_connection_handler.h"
+#include "chromeos/network/network_event_log.h"
 #include "chromeos/network/network_metadata_store.h"
 #include "chromeos/network/network_state_handler.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
@@ -236,6 +238,28 @@
   base::UmaHistogramCounts1000(kTotalCountHistogram, count);
 }
 
+void SyncedNetworkMetricsLogger::RecordZeroNetworksEligibleForSync(
+    base::flat_set<NetworkEligibilityStatus> network_eligibility_status_codes) {
+  // There is an eligible network that was not synced for some reason.
+  if (network_eligibility_status_codes.find(
+          NetworkEligibilityStatus::kNetworkIsEligible) !=
+      network_eligibility_status_codes.end()) {
+    base::UmaHistogramEnumeration(kZeroNetworksSyncedReasonHistogram,
+                                  NetworkEligibilityStatus::kNetworkIsEligible);
+    return;
+  }
+
+  if (network_eligibility_status_codes.size() == 0) {
+    network_eligibility_status_codes.insert(
+        NetworkEligibilityStatus::kNoWifiNetworksAvailable);
+  }
+  for (const NetworkEligibilityStatus network_eligibility_status_code :
+       network_eligibility_status_codes) {
+    base::UmaHistogramEnumeration(kZeroNetworksSyncedReasonHistogram,
+                                  network_eligibility_status_code);
+  }
+}
+
 }  // namespace sync_wifi
 
 }  // namespace chromeos
diff --git a/chromeos/components/sync_wifi/synced_network_metrics_logger.h b/chromeos/components/sync_wifi/synced_network_metrics_logger.h
index 2e0c374e..9517ae9 100644
--- a/chromeos/components/sync_wifi/synced_network_metrics_logger.h
+++ b/chromeos/components/sync_wifi/synced_network_metrics_logger.h
@@ -10,8 +10,10 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "base/values.h"
+#include "chromeos/components/sync_wifi/network_eligibility_checker.h"
 #include "chromeos/network/network_connection_observer.h"
 #include "chromeos/network/network_state_handler_observer.h"
+#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
 
 namespace chromeos {
 
@@ -35,6 +37,8 @@
     "Network.Wifi.Synced.UpdateOperation.FailureReason";
 const char kApplyResultHistogram[] =
     "Network.Wifi.Synced.UpdateOperation.Result";
+const char kZeroNetworksSyncedReasonHistogram[] =
+    "Network.Wifi.Synced.ZeroNetworksEligibleForSync.EligibilityStatus";
 
 const char kTotalCountHistogram[] = "Network.Wifi.Synced.TotalCount";
 
@@ -112,6 +116,9 @@
                                        const std::string& error_string);
   void RecordApplyNetworkSuccess();
   void RecordTotalCount(int count);
+  void RecordZeroNetworksEligibleForSync(
+      base::flat_set<NetworkEligibilityStatus>
+          network_eligiblility_status_codes);
 
  private:
   static ConnectionFailureReason ConnectionFailureReasonToEnum(
diff --git a/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc b/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
index 033992fcf..c294d23 100644
--- a/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
+++ b/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
@@ -14,6 +14,7 @@
 #include "chromeos/network/network_metadata_store.h"
 #include "chromeos/network/network_state_handler.h"
 #include "chromeos/network/network_state_test_helper.h"
+#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
@@ -247,6 +248,45 @@
               testing::ContainerEq(base::HistogramTester::CountsMap()));
 }
 
+TEST_F(SyncedNetworkMetricsLoggerTest, RecordZeroNetworksEligibleForSync) {
+  base::HistogramTester histogram_tester;
+
+  base::flat_set<NetworkEligibilityStatus>
+      network_eligible_for_sync_status_codes;
+  network_eligible_for_sync_status_codes.insert(
+      NetworkEligibilityStatus::kNoWifiNetworksAvailable);
+  synced_network_metrics_logger()->RecordZeroNetworksEligibleForSync(
+      network_eligible_for_sync_status_codes);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kNoWifiNetworksAvailable, 1);
+  histogram_tester.ExpectTotalCount(kZeroNetworksSyncedReasonHistogram, 1);
+
+  network_eligible_for_sync_status_codes.insert(
+      NetworkEligibilityStatus::kNotConnectable);
+  synced_network_metrics_logger()->RecordZeroNetworksEligibleForSync(
+      network_eligible_for_sync_status_codes);
+  histogram_tester.ExpectBucketCount(kZeroNetworksSyncedReasonHistogram,
+                                     NetworkEligibilityStatus::kNotConnectable,
+                                     1);
+  histogram_tester.ExpectTotalCount(kZeroNetworksSyncedReasonHistogram, 3);
+
+  network_eligible_for_sync_status_codes.insert(
+      NetworkEligibilityStatus::kNetworkIsEligible);
+  synced_network_metrics_logger()->RecordZeroNetworksEligibleForSync(
+      network_eligible_for_sync_status_codes);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kNetworkIsEligible, 1);
+  histogram_tester.ExpectBucketCount(kZeroNetworksSyncedReasonHistogram,
+                                     NetworkEligibilityStatus::kNotConnectable,
+                                     1);
+  histogram_tester.ExpectBucketCount(
+      kZeroNetworksSyncedReasonHistogram,
+      NetworkEligibilityStatus::kNoWifiNetworksAvailable, 2);
+  histogram_tester.ExpectTotalCount(kZeroNetworksSyncedReasonHistogram, 4);
+}
+
 }  // namespace sync_wifi
 
 }  // namespace chromeos
diff --git a/chromeos/components/sync_wifi/wifi_configuration_bridge.cc b/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
index e23cb456..961c77d 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
+++ b/chromeos/components/sync_wifi/wifi_configuration_bridge.cc
@@ -205,6 +205,10 @@
   batch->TakeMetadataChangesFrom(std::move(metadata_change_list));
   Commit(std::move(batch));
   metrics_recorder_->RecordTotalCount(entries_.size());
+  // If zero networks are synced log the reason.
+  if (entries_.size() == 0) {
+    local_network_collector_->RecordZeroNetworksEligibleForSync();
+  }
 }
 
 base::Optional<syncer::ModelError> WifiConfigurationBridge::ApplySyncChanges(
@@ -243,6 +247,10 @@
   batch->TakeMetadataChangesFrom(std::move(metadata_change_list));
   Commit(std::move(batch));
   metrics_recorder_->RecordTotalCount(entries_.size());
+  // If zero networks are synced log the reason.
+  if (entries_.size() == 0) {
+    local_network_collector_->RecordZeroNetworksEligibleForSync();
+  }
 
   return base::nullopt;
 }
@@ -327,6 +335,10 @@
     }
   }
   metrics_recorder_->RecordTotalCount(entries_size);
+  // If zero networks are synced log the reason.
+  if (entries_size == 0) {
+    local_network_collector_->RecordZeroNetworksEligibleForSync();
+  }
 }
 
 void WifiConfigurationBridge::OnReadAllMetadata(
@@ -435,6 +447,10 @@
                  << NetworkId(NetworkStateFromNetworkIdentifier(id))
                  << " to sync.";
   metrics_recorder_->RecordTotalCount(entries_.size());
+  // If zero networks are synced log the reason.
+  if (entries_.size() == 0) {
+    local_network_collector_->RecordZeroNetworksEligibleForSync();
+  }
 }
 
 void WifiConfigurationBridge::OnNetworkCreated(const std::string& guid) {
diff --git a/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc b/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc
index 6726beb..e8ee1ba 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc
+++ b/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc
@@ -42,7 +42,7 @@
       remote_cros_network_config_.get(), timer_factory_.get(),
       metrics_logger_.get());
   collector_ = std::make_unique<LocalNetworkCollectorImpl>(
-      remote_cros_network_config_.get());
+      remote_cros_network_config_.get(), metrics_logger_.get());
   bridge_ = std::make_unique<sync_wifi::WifiConfigurationBridge>(
       updater_.get(), collector_.get(),
       network_handler->network_configuration_handler(), metrics_logger_.get(),
diff --git a/chromeos/components/web_applications/externs/file_handling.externs.js b/chromeos/components/web_applications/externs/file_handling.externs.js
index 25ee66c..35b637e9 100644
--- a/chromeos/components/web_applications/externs/file_handling.externs.js
+++ b/chromeos/components/web_applications/externs/file_handling.externs.js
@@ -98,12 +98,12 @@
 }
 
 /** @typedef {{keepExistingData: boolean}} */
-let FileSystemCreateWriterOptions;
+let FileSystemCreateWritableOptions;
 
 /** @interface */
 class FileSystemFileHandle extends FileSystemHandle {
   /**
-   * @param {FileSystemCreateWriterOptions=} options
+   * @param {FileSystemCreateWritableOptions=} options
    * @return {!Promise<!FileSystemWritableFileStream>}
    */
   createWritable(options) {}
diff --git a/chromeos/dbus/shill/fake_shill_manager_client.cc b/chromeos/dbus/shill/fake_shill_manager_client.cc
index 93b9fc9..ebe06b7 100644
--- a/chromeos/dbus/shill/fake_shill_manager_client.cc
+++ b/chromeos/dbus/shill/fake_shill_manager_client.cc
@@ -1148,6 +1148,14 @@
   return new_service_list;
 }
 
+void FakeShillManagerClient::ClearProfiles() {
+  if (GetListProperty(shill::kProfilesProperty)->empty()) {
+    return;
+  }
+  GetListProperty(shill::kProfilesProperty)->ClearList();
+  CallNotifyObserversPropertyChanged(shill::kProfilesProperty);
+}
+
 void FakeShillManagerClient::ScanCompleted(const std::string& device_path) {
   VLOG(1) << "ScanCompleted: " << device_path;
   if (!device_path.empty()) {
diff --git a/chromeos/dbus/shill/fake_shill_manager_client.h b/chromeos/dbus/shill/fake_shill_manager_client.h
index 835448f..298c272 100644
--- a/chromeos/dbus/shill/fake_shill_manager_client.h
+++ b/chromeos/dbus/shill/fake_shill_manager_client.h
@@ -98,6 +98,7 @@
   void SetSimulateConfigurationResult(
       FakeShillSimulatedResult configuration_result) override;
   base::Value GetEnabledServiceList() const override;
+  void ClearProfiles() override;
 
   // Constants used for testing.
   static const char kFakeEthernetNetworkGuid[];
diff --git a/chromeos/dbus/shill/shill_manager_client.h b/chromeos/dbus/shill/shill_manager_client.h
index ccc8ba7..28c1e6e 100644
--- a/chromeos/dbus/shill/shill_manager_client.h
+++ b/chromeos/dbus/shill/shill_manager_client.h
@@ -121,6 +121,9 @@
     virtual void SetSimulateConfigurationResult(
         FakeShillSimulatedResult configuration_result) = 0;
 
+    // Clears profile list.
+    virtual void ClearProfiles() = 0;
+
    protected:
     virtual ~TestInterface() {}
   };
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 7c03ac1..4aea8c3 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -200,6 +200,10 @@
   return GetNetworkState(available_managed_network_path);
 }
 
+bool NetworkStateHandler::IsProfileNetworksLoaded() {
+  return is_profile_networks_loaded_;
+}
+
 bool NetworkStateHandler::OnlyManagedWifiNetworksAllowed() const {
   return allow_only_policy_networks_to_connect_ ||
          (allow_only_policy_networks_to_connect_if_available_ &&
@@ -1290,8 +1294,9 @@
   }
 }
 
-void NetworkStateHandler::ProfileListChanged() {
+void NetworkStateHandler::ProfileListChanged(const base::Value& profile_list) {
   NET_LOG(EVENT) << "ProfileListChanged. Re-Requesting Network Properties";
+  ProcessIsUserLoggedIn(profile_list);
   for (ManagedStateList::iterator iter = network_list_.begin();
        iter != network_list_.end(); ++iter) {
     const NetworkState* network = (*iter)->AsNetworkState();
@@ -1568,6 +1573,10 @@
       NotifyIfActiveNetworksChanged();
       NotifyNetworkListChanged();
       UpdateManagedWifiNetworkAvailable();
+      // ManagedStateListChanged only gets executed if all pending updates have
+      // completed. Profile networks are loaded if a user is logged in and all
+      // pending updates are complete.
+      is_profile_networks_loaded_ = is_user_logged_in_;
       return;
     case ManagedState::MANAGED_TYPE_DEVICE:
       std::string devices;
@@ -2110,4 +2119,14 @@
   default_network_is_metered_ = metered;
 }
 
+void NetworkStateHandler::ProcessIsUserLoggedIn(
+    const base::Value& profile_list) {
+  if (!profile_list.is_list()) {
+    return;
+  }
+  // The profile list contains the shared profile on the login screen. Once the
+  // user is logged in there is more than one profile in the profile list.
+  is_user_logged_in_ = profile_list.GetList().size() > 1;
+}
+
 }  // namespace chromeos
diff --git a/chromeos/network/network_state_handler.h b/chromeos/network/network_state_handler.h
index ed8a992..4dd56ba 100644
--- a/chromeos/network/network_state_handler.h
+++ b/chromeos/network/network_state_handler.h
@@ -402,6 +402,10 @@
   // available.
   const NetworkState* GetAvailableManagedWifiNetwork() const;
 
+  // Returns true if a user is logged in and the networks for the logged in user
+  // have been loaded.
+  bool IsProfileNetworksLoaded();
+
   // Returns true if the AllowOnlyPolicyNetworksToConnect policy is enabled or
   // if the AllowOnlyPolicyNetworksToConnectIfAvailable policy is enabled and
   // there is a managed wifi network available.
@@ -431,7 +435,7 @@
 
   // The list of profiles changed (i.e. a user has logged in). Re-request
   // properties for all services since they may have changed.
-  void ProfileListChanged() override;
+  void ProfileListChanged(const base::Value& profile_list) override;
 
   // Parses the properties for the network service or device. Mostly calls
   // managed->PropertyChanged(key, value) for each dictionary entry.
@@ -634,6 +638,9 @@
   // Metered.
   void SetDefaultNetworkValues(const std::string& path, bool metered);
 
+  // Determines whether the user is logged in and sets |is_user_logged_in_|.
+  void ProcessIsUserLoggedIn(const base::Value& profile_list);
+
   // Shill property handler instance, owned by this class.
   std::unique_ptr<internal::ShillPropertyHandler> shill_property_handler_;
 
@@ -703,6 +710,12 @@
   bool allow_only_policy_networks_to_connect_if_available_ = false;
   std::vector<std::string> blocked_hex_ssids_;
 
+  // After login the user's saved networks get updated asynchronously from
+  // shill. These variables indicate whether a user is logged in, and if the
+  // user's saved networks are done updating.
+  bool is_profile_networks_loaded_ = false;
+  bool is_user_logged_in_ = false;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   DISALLOW_COPY_AND_ASSIGN(NetworkStateHandler);
diff --git a/chromeos/network/network_state_handler_unittest.cc b/chromeos/network/network_state_handler_unittest.cc
index 636a6fd8e..14b472c 100644
--- a/chromeos/network/network_state_handler_unittest.cc
+++ b/chromeos/network/network_state_handler_unittest.cc
@@ -2269,4 +2269,40 @@
   EXPECT_TRUE(test_observer_->hostname().empty());
 }
 
+TEST_F(NetworkStateHandlerTest, IsProfileNetworksLoaded) {
+  // Ensure that the network list is the expected size.
+  const size_t kNumShillManagerClientStubImplServices = 4;
+  EXPECT_EQ(kNumShillManagerClientStubImplServices,
+            test_observer_->network_count());
+  // Add a non-visible network to a private profile.
+  const std::string profile = "/profile/profile1";
+  const std::string wifi_favorite_path = "/service/wifi_faviorite";
+  service_test_->AddService(wifi_favorite_path, "wifi_faviorite_guid",
+                            "wifi_faviorite", shill::kTypeWifi,
+                            shill::kStateIdle, false /* add_to_visible */);
+
+  NetworkStateHandler::NetworkStateList networks;
+
+  // Get networks before user is logged in.
+  network_state_handler_->GetNetworkListByType(
+      NetworkTypePattern::Default(), false /* configured_only */,
+      false /* visible_only */, 0 /* no limit */, &networks);
+  EXPECT_EQ(4u, networks.size());
+  EXPECT_FALSE(network_state_handler_->IsProfileNetworksLoaded());
+
+  // Simulate a user logging in.
+  profile_test_->AddProfile(profile, "" /* userhash */);
+  EXPECT_TRUE(profile_test_->AddService(profile, wifi_favorite_path));
+  // Wait for login to complete and profile networks to get loaded
+  UpdateManagerProperties();
+  // Get networks after user is logged in.
+  network_state_handler_->GetNetworkListByType(
+      NetworkTypePattern::Default(), false /* configured_only */,
+      false /* visible_only */, 0 /* no limit */, &networks);
+  base::RunLoop().RunUntilIdle();
+  // User is logged in and private network has been loaded.
+  EXPECT_TRUE(network_state_handler_->IsProfileNetworksLoaded());
+  EXPECT_EQ(5u, networks.size());
+}
+
 }  // namespace chromeos
diff --git a/chromeos/network/network_state_test_helper.cc b/chromeos/network/network_state_test_helper.cc
index 1d488ae5..2e5864b 100644
--- a/chromeos/network/network_state_test_helper.cc
+++ b/chromeos/network/network_state_test_helper.cc
@@ -97,6 +97,11 @@
   base::RunLoop().RunUntilIdle();
 }
 
+void NetworkStateTestHelper::ClearProfiles() {
+  profile_test_->ClearProfiles();
+  manager_test_->ClearProfiles();
+}
+
 void NetworkStateTestHelper::AddDevice(const std::string& device_path,
                                        const std::string& type,
                                        const std::string& name) {
diff --git a/chromeos/network/network_state_test_helper.h b/chromeos/network/network_state_test_helper.h
index a872ea5c..ae957036 100644
--- a/chromeos/network/network_state_test_helper.h
+++ b/chromeos/network/network_state_test_helper.h
@@ -46,6 +46,9 @@
   // Clears any fake services.
   void ClearServices();
 
+  // Clears the profile list.
+  void ClearProfiles();
+
   // Calls ShillDeviceClient::TestInterface::AddDevice and sets update_received
   // on the DeviceState.
   void AddDevice(const std::string& device_path,
diff --git a/chromeos/network/shill_property_handler.cc b/chromeos/network/shill_property_handler.cc
index 280d2f53..8a39933 100644
--- a/chromeos/network/shill_property_handler.cc
+++ b/chromeos/network/shill_property_handler.cc
@@ -378,7 +378,7 @@
     if (value.GetAsString(&prohibited_technologies))
       UpdateProhibitedTechnologies(prohibited_technologies);
   } else if (key == shill::kProfilesProperty) {
-    listener_->ProfileListChanged();
+    listener_->ProfileListChanged(value);
   } else if (key == shill::kCheckPortalListProperty) {
     std::string check_portal_list;
     if (value.GetAsString(&check_portal_list))
diff --git a/chromeos/network/shill_property_handler.h b/chromeos/network/shill_property_handler.h
index 1a6fd316..0e9d622 100644
--- a/chromeos/network/shill_property_handler.h
+++ b/chromeos/network/shill_property_handler.h
@@ -56,7 +56,7 @@
         const base::Value& properties) = 0;
 
     // Called when the list of profiles changes.
-    virtual void ProfileListChanged() = 0;
+    virtual void ProfileListChanged(const base::Value& profile_list) = 0;
 
     // Called when a property for a watched network service has changed.
     virtual void UpdateNetworkServiceProperty(
diff --git a/chromeos/network/shill_property_handler_unittest.cc b/chromeos/network/shill_property_handler_unittest.cc
index 9aaa3f7d..b326311e 100644
--- a/chromeos/network/shill_property_handler_unittest.cc
+++ b/chromeos/network/shill_property_handler_unittest.cc
@@ -55,7 +55,12 @@
     initial_property_updates(GetTypeString(type))[path] += 1;
   }
 
-  void ProfileListChanged() override {}
+  void ProfileListChanged(const base::Value& profile_list) override {
+    if (!profile_list.is_list()) {
+      return;
+    }
+    profile_list_size_ = profile_list.GetList().size();
+  }
 
   void UpdateNetworkServiceProperty(const std::string& service_path,
                                     const std::string& key,
@@ -113,6 +118,7 @@
   }
   std::string hostname() { return hostname_; }
   int errors() { return errors_; }
+  int profile_list_size() { return profile_list_size_; }
 
  private:
   std::string GetTypeString(ManagedState::ManagedType type) {
@@ -159,6 +165,7 @@
   int technology_list_updates_;
   std::string hostname_;
   int errors_;
+  int profile_list_size_;
 };
 
 }  // namespace
@@ -292,6 +299,17 @@
   EXPECT_EQ(0, listener_->errors());
 }
 
+TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerProfileListChanged) {
+  EXPECT_EQ(1, listener_->profile_list_size());
+
+  const char kMountedUserDirectory[] = "/profile/chronos/shill";
+  // Simulate a user logging in. When a user logs in the mounted user directory
+  // path is added to the list of profile paths.
+  profile_test_->AddProfile(kMountedUserDirectory, /*user_hash=*/"");
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(2, listener_->profile_list_size());
+}
+
 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerHostnameChanged) {
   EXPECT_TRUE(listener_->hostname().empty());
   const char kTestHostname[] = "Test Hostname";
diff --git a/components/autofill_assistant/browser/client.h b/components/autofill_assistant/browser/client.h
index fc3022de..0d932cd 100644
--- a/components/autofill_assistant/browser/client.h
+++ b/components/autofill_assistant/browser/client.h
@@ -86,9 +86,6 @@
   // Whether this client has had an UI.
   virtual bool HasHadUI() const = 0;
 
-  // Returns whether the user has seen a trigger script before or not.
-  virtual bool IsFirstTimeTriggerScriptUser() const = 0;
-
  protected:
   Client() = default;
 };
diff --git a/components/autofill_assistant/browser/trigger_scripts/mock_static_trigger_conditions.h b/components/autofill_assistant/browser/trigger_scripts/mock_static_trigger_conditions.h
index bd6466f..46603dc 100644
--- a/components/autofill_assistant/browser/trigger_scripts/mock_static_trigger_conditions.h
+++ b/components/autofill_assistant/browser/trigger_scripts/mock_static_trigger_conditions.h
@@ -15,11 +15,13 @@
   MockStaticTriggerConditions();
   ~MockStaticTriggerConditions() override;
 
-  MOCK_METHOD4(Init,
-               void(Client* client,
-                    const GURL& url,
-                    TriggerContext* trigger_context,
-                    base::OnceCallback<void(void)> callback));
+  MOCK_METHOD5(
+      Init,
+      void(WebsiteLoginManager* website_login_manager,
+           base::RepeatingCallback<bool(void)> is_first_time_user_callback,
+           const GURL& url,
+           TriggerContext* trigger_context,
+           base::OnceCallback<void(void)> callback));
   MOCK_METHOD1(set_is_first_time_user, void(bool));
   MOCK_CONST_METHOD0(is_first_time_user, bool());
   MOCK_CONST_METHOD0(has_stored_login_credentials, bool());
diff --git a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.cc b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.cc
index bbb0358..4551e4a 100644
--- a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.cc
@@ -12,21 +12,23 @@
 StaticTriggerConditions::StaticTriggerConditions() = default;
 StaticTriggerConditions::~StaticTriggerConditions() = default;
 
-void StaticTriggerConditions::Init(Client* client,
-                                   const GURL& url,
-                                   TriggerContext* trigger_context,
-                                   base::OnceCallback<void(void)> callback) {
+void StaticTriggerConditions::Init(
+    WebsiteLoginManager* website_login_manager,
+    base::RepeatingCallback<bool(void)> is_first_time_user_callback,
+    const GURL& url,
+    TriggerContext* trigger_context,
+    base::OnceCallback<void(void)> callback) {
   DCHECK(!callback_)
       << "Call to Init while another call to Init was still pending";
   if (callback_) {
     return;
   }
-  is_first_time_user_ = client->IsFirstTimeTriggerScriptUser();
+  is_first_time_user_ = is_first_time_user_callback.Run();
   trigger_context_ = trigger_context;
   has_stored_login_credentials_ = false;
 
   callback_ = std::move(callback);
-  client->GetWebsiteLoginManager()->GetLoginsForUrl(
+  website_login_manager->GetLoginsForUrl(
       url, base::BindOnce(&StaticTriggerConditions::OnGetLogins,
                           weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h
index 77327466..0721699 100644
--- a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h
+++ b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h
@@ -9,7 +9,6 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
-#include "components/autofill_assistant/browser/client.h"
 #include "components/autofill_assistant/browser/trigger_context.h"
 #include "components/autofill_assistant/browser/website_login_manager.h"
 #include "url/gurl.h"
@@ -24,13 +23,15 @@
   StaticTriggerConditions();
   virtual ~StaticTriggerConditions();
 
-  // Initializes the field values according to |url| and the current state of
-  // |client|. Invokes |callback| when done. |client| and |trigger_context| must
-  // outlive this instance.
-  virtual void Init(Client* client,
-                    const GURL& url,
-                    TriggerContext* trigger_context,
-                    base::OnceCallback<void(void)> callback);
+  // Initializes the field values using |website_login_manager| and
+  // |is_first_time_user_callback|. Invokes |callback| when done. All parameters
+  // must outlive this call.
+  virtual void Init(
+      WebsiteLoginManager* website_login_manager,
+      base::RepeatingCallback<bool(void)> is_first_time_user_callback,
+      const GURL& url,
+      TriggerContext* trigger_context,
+      base::OnceCallback<void(void)> callback);
   virtual void set_is_first_time_user(bool first_time_user);
   virtual bool is_first_time_user() const;
   virtual bool has_stored_login_credentials() const;
diff --git a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions_unittest.cc b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions_unittest.cc
index cc415a40..d016a22c 100644
--- a/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions_unittest.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "components/autofill_assistant/browser/trigger_scripts/static_trigger_conditions.h"
 
-#include "components/autofill_assistant/browser/mock_client.h"
 #include "components/autofill_assistant/browser/mock_website_login_manager.h"
 
 #include "base/test/gmock_callback_support.h"
@@ -29,23 +28,22 @@
 
  protected:
   StaticTriggerConditions static_trigger_conditions_;
+  base::MockCallback<base::RepeatingCallback<bool(void)>>
+      mock_is_first_time_user_callback_;
   base::MockCallback<base::OnceCallback<void(void)>> mock_callback_;
-  NiceMock<MockClient> mock_client_;
   NiceMock<MockWebsiteLoginManager> mock_website_login_manager_;
 };
 
 TEST_F(StaticTriggerConditionsTest, Init) {
   TriggerContextImpl trigger_context(/* params = */ {}, /* exp = */ "1,2,4");
-  EXPECT_CALL(mock_client_, IsFirstTimeTriggerScriptUser)
-      .WillOnce(Return(true));
-  EXPECT_CALL(mock_client_, GetWebsiteLoginManager)
-      .WillOnce(Return(&mock_website_login_manager_));
+  EXPECT_CALL(mock_is_first_time_user_callback_, Run).WillOnce(Return(true));
   EXPECT_CALL(mock_website_login_manager_, OnGetLoginsForUrl(GURL(kFakeUrl), _))
       .WillOnce(RunOnceCallback<1>(std::vector<WebsiteLoginManager::Login>{
           WebsiteLoginManager::Login(GURL(kFakeUrl), "fake_username")}));
   EXPECT_CALL(mock_callback_, Run).Times(1);
-  static_trigger_conditions_.Init(&mock_client_, GURL(kFakeUrl),
-                                  &trigger_context, mock_callback_.Get());
+  static_trigger_conditions_.Init(
+      &mock_website_login_manager_, mock_is_first_time_user_callback_.Get(),
+      GURL(kFakeUrl), &trigger_context, mock_callback_.Get());
 
   EXPECT_TRUE(static_trigger_conditions_.is_first_time_user());
   EXPECT_TRUE(static_trigger_conditions_.has_stored_login_credentials());
@@ -65,16 +63,14 @@
   EXPECT_FALSE(static_trigger_conditions_.has_results());
 
   TriggerContextImpl trigger_context(/* params = */ {}, /* exp = */ "1,2,4");
-  EXPECT_CALL(mock_client_, IsFirstTimeTriggerScriptUser)
-      .WillOnce(Return(true));
-  EXPECT_CALL(mock_client_, GetWebsiteLoginManager)
-      .WillOnce(Return(&mock_website_login_manager_));
+  EXPECT_CALL(mock_is_first_time_user_callback_, Run).WillOnce(Return(true));
   EXPECT_CALL(mock_website_login_manager_, OnGetLoginsForUrl(GURL(kFakeUrl), _))
       .WillOnce(RunOnceCallback<1>(std::vector<WebsiteLoginManager::Login>{
           WebsiteLoginManager::Login(GURL(kFakeUrl), "fake_username")}));
   EXPECT_CALL(mock_callback_, Run).Times(1);
-  static_trigger_conditions_.Init(&mock_client_, GURL(kFakeUrl),
-                                  &trigger_context, mock_callback_.Get());
+  static_trigger_conditions_.Init(
+      &mock_website_login_manager_, mock_is_first_time_user_callback_.Get(),
+      GURL(kFakeUrl), &trigger_context, mock_callback_.Get());
   EXPECT_TRUE(static_trigger_conditions_.has_results());
 }
 
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
index b34fc0ab..3d251de9 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
@@ -42,15 +42,18 @@
 namespace autofill_assistant {
 
 TriggerScriptCoordinator::TriggerScriptCoordinator(
-    Client* client,
+    content::WebContents* web_contents,
+    WebsiteLoginManager* website_login_manager,
+    base::RepeatingCallback<bool(void)> is_first_time_user_callback,
     std::unique_ptr<WebController> web_controller,
     std::unique_ptr<ServiceRequestSender> request_sender,
     const GURL& get_trigger_scripts_server,
     std::unique_ptr<StaticTriggerConditions> static_trigger_conditions,
     std::unique_ptr<DynamicTriggerConditions> dynamic_trigger_conditions,
     ukm::UkmRecorder* ukm_recorder)
-    : content::WebContentsObserver(client->GetWebContents()),
-      client_(client),
+    : content::WebContentsObserver(web_contents),
+      website_login_manager_(website_login_manager),
+      is_first_time_user_callback_(std::move(is_first_time_user_callback)),
       request_sender_(std::move(request_sender)),
       get_trigger_scripts_server_(get_trigger_scripts_server),
       web_controller_(std::move(web_controller)),
@@ -117,7 +120,7 @@
       initial_trigger_condition_evaluations_;
 
   Metrics::RecordLiteScriptShownToUser(
-      ukm_recorder_, client_->GetWebContents(),
+      ukm_recorder_, web_contents(),
       Metrics::LiteScriptShownToUser::LITE_SCRIPT_RUNNING);
   StartCheckingTriggerConditions();
 }
@@ -128,7 +131,7 @@
     case TriggerScriptProto::NOT_NOW:
       if (visible_trigger_script_ != -1) {
         Metrics::RecordLiteScriptShownToUser(
-            ukm_recorder_, client_->GetWebContents(),
+            ukm_recorder_, web_contents(),
             Metrics::LiteScriptShownToUser::LITE_SCRIPT_NOT_NOW);
         trigger_scripts_[visible_trigger_script_]
             ->waiting_for_precondition_no_longer_true(true);
@@ -169,7 +172,7 @@
     return;
   }
   Metrics::RecordLiteScriptShownToUser(
-      ukm_recorder_, client_->GetWebContents(),
+      ukm_recorder_, web_contents(),
       Metrics::LiteScriptShownToUser::LITE_SCRIPT_SWIPE_DISMISSED);
   PerformTriggerScriptAction(trigger_scripts_[visible_trigger_script_]
                                  ->AsProto()
@@ -180,8 +183,8 @@
   if (visible_trigger_script_ == -1) {
     return false;
   }
-  if (client_->GetWebContents()->GetController().CanGoBack()) {
-    client_->GetWebContents()->GetController().GoBack();
+  if (web_contents()->GetController().CanGoBack()) {
+    web_contents()->GetController().GoBack();
   }
   // We need to handle this event, because by default the bottom sheet will
   // close when the back button is pressed.
@@ -295,7 +298,7 @@
 void TriggerScriptCoordinator::WebContentsDestroyed() {
   if (!finished_state_recorded_) {
     Metrics::RecordLiteScriptFinished(
-        ukm_recorder_, client_->GetWebContents(),
+        ukm_recorder_, web_contents(),
         visible_trigger_script_ == -1
             ? Metrics::LiteScriptFinishedState::
                   LITE_SCRIPT_WEB_CONTENTS_DESTROYED_WHILE_INVISIBLE
@@ -313,7 +316,8 @@
         trigger_script->AsProto());
   }
   static_trigger_conditions_->Init(
-      client_, deeplink_url_, trigger_context_.get(),
+      website_login_manager_, is_first_time_user_callback_, deeplink_url_,
+      trigger_context_.get(),
       base::BindOnce(&TriggerScriptCoordinator::CheckDynamicTriggerConditions,
                      weak_ptr_factory_.GetWeakPtr()));
 }
@@ -337,7 +341,7 @@
   }
 
   Metrics::RecordLiteScriptShownToUser(
-      ukm_recorder_, client_->GetWebContents(),
+      ukm_recorder_, web_contents(),
       Metrics::LiteScriptShownToUser::LITE_SCRIPT_SHOWN_TO_USER);
   visible_trigger_script_ = index;
   auto proto = trigger_scripts_[index]->AsProto().user_interface();
@@ -384,7 +388,7 @@
   if (visible_trigger_script_ != -1 &&
       !evaluated_trigger_conditions[visible_trigger_script_]) {
     Metrics::RecordLiteScriptShownToUser(
-        ukm_recorder_, client_->GetWebContents(),
+        ukm_recorder_, web_contents(),
         Metrics::LiteScriptShownToUser::
             LITE_SCRIPT_HIDE_ON_TRIGGER_CONDITION_NO_LONGER_TRUE);
     HideTriggerScript();
@@ -453,8 +457,7 @@
     Metrics::LiteScriptFinishedState state) {
   if (!finished_state_recorded_) {
     finished_state_recorded_ = true;
-    Metrics::RecordLiteScriptFinished(ukm_recorder_, client_->GetWebContents(),
-                                      state);
+    Metrics::RecordLiteScriptFinished(ukm_recorder_, web_contents(), state);
   }
 
   for (Observer& observer : observers_) {
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
index 1a01bed..4bd629c 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
@@ -49,9 +49,11 @@
     virtual void OnVisibilityChanged(bool visible) = 0;
   };
 
-  // |client| and |web_contents| must outlive this instance.
+  // |web_contents| must outlive this instance.
   TriggerScriptCoordinator(
-      Client* client,
+      content::WebContents* web_contents,
+      WebsiteLoginManager* website_login_manager,
+      base::RepeatingCallback<bool(void)> is_first_time_user_callback,
       std::unique_ptr<WebController> web_controller,
       std::unique_ptr<ServiceRequestSender> request_sender,
       const GURL& get_trigger_scripts_server,
@@ -126,9 +128,12 @@
 
   void NotifyOnTriggerScriptFinished(Metrics::LiteScriptFinishedState state);
 
-  // Used to retrieve deps and also to request shutdown and, if applicable,
-  // start of the regular script.
-  Client* client_;
+  // Used to query login information for the current webcontents.
+  WebsiteLoginManager* website_login_manager_;
+
+  // Callback that can be used to query whether a user has seen the trigger
+  // script UI at least once or not.
+  base::RepeatingCallback<bool(void)> is_first_time_user_callback_;
 
   // The original deeplink to request trigger scripts for.
   GURL deeplink_url_;
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
index 701e46e..2dca122 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
@@ -7,7 +7,7 @@
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
-#include "components/autofill_assistant/browser/mock_client.h"
+#include "components/autofill_assistant/browser/mock_website_login_manager.h"
 #include "components/autofill_assistant/browser/service/mock_service_request_sender.h"
 #include "components/autofill_assistant/browser/test_util.h"
 #include "components/autofill_assistant/browser/trigger_scripts/mock_dynamic_trigger_conditions.h"
@@ -57,8 +57,6 @@
     RenderViewHostTestHarness::SetUp();
     ukm::InitializeSourceUrlRecorderForWebContents(web_contents());
 
-    ON_CALL(mock_client_, GetWebContents).WillByDefault(Return(web_contents()));
-
     auto mock_request_sender =
         std::make_unique<NiceMock<MockServiceRequestSender>>();
     mock_request_sender_ = mock_request_sender.get();
@@ -79,7 +77,8 @@
         .WillByDefault(Return(true));
 
     coordinator_ = std::make_unique<TriggerScriptCoordinator>(
-        &mock_client_, std::move(mock_web_controller),
+        web_contents(), &mock_website_login_manager_,
+        mock_is_first_time_user_callback_.Get(), std::move(mock_web_controller),
         std::move(mock_request_sender), GURL(kFakeServerUrl),
         std::move(mock_static_trigger_conditions),
         std::move(mock_dynamic_trigger_conditions), &ukm_recorder_);
@@ -135,7 +134,9 @@
   ukm::TestAutoSetUkmRecorder ukm_recorder_;
   NiceMock<MockServiceRequestSender>* mock_request_sender_;
   NiceMock<MockWebController>* mock_web_controller_;
-  NiceMock<MockClient> mock_client_;
+  NiceMock<MockWebsiteLoginManager> mock_website_login_manager_;
+  base::MockCallback<base::RepeatingCallback<bool(void)>>
+      mock_is_first_time_user_callback_;
   NaggyMock<MockObserver> mock_observer_;
   std::unique_ptr<TriggerScriptCoordinator> coordinator_;
   NiceMock<MockStaticTriggerConditions>* mock_static_trigger_conditions_;
@@ -235,7 +236,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, ClearSelectors).Times(1);
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               AddSelectorsFromTriggerScript(response.trigger_scripts(0)))
@@ -264,7 +265,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   ON_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -300,7 +301,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
@@ -324,7 +325,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
@@ -346,7 +347,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -386,7 +387,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -416,7 +417,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -446,7 +447,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -477,7 +478,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches)
@@ -521,7 +522,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
@@ -565,7 +566,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _))
       .WillByDefault(RunOnceCallback<1>());
   EXPECT_CALL(mock_observer_, OnTriggerScriptShown).Times(1);
@@ -591,7 +592,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
 
   // Note: expect 4 calls: 1 initial plus 3 until timeout.
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
@@ -627,7 +628,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillRepeatedly(RunOnceCallback<1>());
@@ -670,7 +671,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillRepeatedly(RunOnceCallback<1>());
@@ -698,7 +699,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
@@ -744,7 +745,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillRepeatedly(RunOnceCallback<1>());
@@ -771,7 +772,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillRepeatedly(RunOnceCallback<1>());
@@ -801,7 +802,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
@@ -826,7 +827,7 @@
   EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _))
       .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response));
   EXPECT_CALL(*mock_static_trigger_conditions_, Init)
-      .WillOnce(RunOnceCallback<3>());
+      .WillOnce(RunOnceCallback<4>());
   EXPECT_CALL(*mock_dynamic_trigger_conditions_,
               OnUpdate(mock_web_controller_, _))
       .WillOnce(RunOnceCallback<1>());
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
index 4c4dbd4..0536b94 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
@@ -140,7 +140,7 @@
 <translation id="5063480226653192405">Erabilera</translation>
 <translation id="5100237604440890931">Tolestuta; egin klik zabaltzeko.</translation>
 <translation id="5123685120097942451">Ezkutuko moduko fitxa</translation>
-<translation id="5186036860380548585">aukera pantailaren goialdean dago</translation>
+<translation id="5186036860380548585">Aukera pantailaren goialdean dago</translation>
 <translation id="5197729504361054390">Hautatzen dituzun kontaktuak <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webgunearekin partekatuko dira.</translation>
 <translation id="528192093759286357">Pantaila osoko ikuspegitik irteteko, arrastatu goitik eta ukitu Atzera botoia.</translation>
 <translation id="5300589172476337783">Erakutsi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
index 209781e2..3701339 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
@@ -140,7 +140,7 @@
 <translation id="5063480226653192405">Utilisation</translation>
 <translation id="5100237604440890931">Réduit : cliquer pour développer</translation>
 <translation id="5123685120097942451">Onglet de navigation privée</translation>
-<translation id="5186036860380548585">Options accessibles près du haut de l'écran</translation>
+<translation id="5186036860380548585">Option accessible près du haut de l'écran</translation>
 <translation id="5197729504361054390">Les contacts que vous sélectionnez seront partagés avec <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation>
 <translation id="528192093759286357">Faites glisser du haut vers le bas et appuyez sur le bouton de retour pour quitter le mode plein écran.</translation>
 <translation id="5300589172476337783">Afficher</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
index 560d059..d86dc93 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -107,7 +107,7 @@
 <translation id="3987993985790029246">Kopírovať odkaz</translation>
 <translation id="3991845972263764475"><ph name="BYTES_DOWNLOADED_WITH_UNITS" /> / ?</translation>
 <translation id="4002066346123236978">Názov</translation>
-<translation id="4008040567710660924">Povolenie súborov cookie konkrétneho webu</translation>
+<translation id="4008040567710660924">Povoliť súbory cookie na konkrétnom webe.</translation>
 <translation id="4046123991198612571">Ďalšia skladba</translation>
 <translation id="4165986682804962316">Nastavenia webu</translation>
 <translation id="4200726100658658164">Otvoriť nastavenia polohy</translation>
@@ -120,7 +120,7 @@
 <translation id="4433925000917964731">Zjednodušenú verziu stránky poskytol Google</translation>
 <translation id="4434045419905280838">Vyskakovacie okná a presmerovania</translation>
 <translation id="445467742685312942">Povoliť webom prehrávať chránený obsah</translation>
-<translation id="4468959413250150279">Vypnite zvuk konkrétneho webu.</translation>
+<translation id="4468959413250150279">Vypnúť zvuk na konkrétnom webe.</translation>
 <translation id="4479647676395637221">Pýtať sa, či chcete povoliť webu používať kameru (odporúčané)</translation>
 <translation id="4505788138578415521">Webová adresa bola rozbalená</translation>
 <translation id="4534723447064627427">Ak chcete povoliť aplikácii <ph name="APP_NAME" /> používať mikrofón, zapnite ho aj v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation>
@@ -155,7 +155,7 @@
 <translation id="5394307150471348411">{DETAIL_COUNT,plural, =1{(+ 1 ďalšie)}few{(+ # ďalšie)}many{(+ # more)}other{(+ # ďalších)}}</translation>
 <translation id="5403592356182871684">Názvy</translation>
 <translation id="5489227211564503167">Uplynutý čas: <ph name="ELAPSED_TIME" /> z <ph name="TOTAL_TIME" />.</translation>
-<translation id="5494752089476963479">Blokovať reklamy webov, ktoré zobrazujú obťažujúce alebo zavádzajúce reklamy</translation>
+<translation id="5494752089476963479">Blokovať reklamy na weboch, ktoré zobrazujú obťažujúce alebo zavádzajúce reklamy</translation>
 <translation id="5502860503640766021">Povolené: <ph name="PERMISSION_1" />, blokované: <ph name="PERMISSION_2" /></translation>
 <translation id="5505264765875738116">Weby nemôžu žiadať o odosielanie upozornení</translation>
 <translation id="5516455585884385570">Otvoriť nastavenia upozornení</translation>
@@ -250,7 +250,7 @@
 <translation id="783819812427904514">Zapnúť zvuk videa</translation>
 <translation id="7846076177841592234">Zrušiť výber</translation>
 <translation id="7846621471902887024">Systém vás odhlási zo všetkých webov.</translation>
-<translation id="7882806643839505685">Povoliť zvuk pre konkrétny web.</translation>
+<translation id="7882806643839505685">Povoliť zvuk na konkrétnom webe.</translation>
 <translation id="7986741934819883144">Výber kontaktu</translation>
 <translation id="7993619969781047893">Funkcie na niektorých weboch môžu zlyhávať</translation>
 <translation id="7999064672810608036">Naozaj chcete vymazať všetky miestne dáta tohto webu, vrátane súborov cookie, a resetovať všetky jeho povolenia?</translation>
@@ -259,7 +259,7 @@
 <translation id="8067883171444229417">Prehrať video</translation>
 <translation id="8068648041423924542">Nedá sa vybrať certifikát</translation>
 <translation id="8087000398470557479">Tento obsah pochádza z domény <ph name="DOMAIN_NAME" /> a bol doručený Googlom.</translation>
-<translation id="8116925261070264013">Zvuk bol vypnutý</translation>
+<translation id="8116925261070264013">Vypnuté</translation>
 <translation id="8131740175452115882">Potvrdiť</translation>
 <translation id="8197286292360124385">Povolené: <ph name="PERMISSION_1" /></translation>
 <translation id="8200772114523450471">Pokračovať</translation>
@@ -268,7 +268,7 @@
 <translation id="8261506727792406068">Odstrániť</translation>
 <translation id="8300705686683892304">Spravované aplikáciou</translation>
 <translation id="8324158725704657629">Nabudúce sa nepýtať</translation>
-<translation id="8372893542064058268">Povolenie synchronizácie na pozadí na konkrétnom webe.</translation>
+<translation id="8372893542064058268">Povoliť synchronizáciu na pozadí na konkrétnom webe.</translation>
 <translation id="8376384591331888629">Vrátane súborov cookie tretích strán na tomto webe</translation>
 <translation id="83792324527827022">Váš fotoaparát a mikrofón používa nejaký web</translation>
 <translation id="8380167699614421159">Tento web zobrazuje obťažujúce alebo zavádzajúce reklamy</translation>
@@ -279,17 +279,17 @@
 <translation id="8447861592752582886">Odvolať povolenie pre zariadenie</translation>
 <translation id="8451050538944905715">{NUM_SELECTED,plural, =1{Používa sa 1 súbor cookie}few{Používajú sa # súbory cookie}many{# cookies in use}other{Používa sa # súborov cookie}}</translation>
 <translation id="8463851957836045671">Web je rýchly</translation>
-<translation id="851751545965956758">Zakázať webom pripájať sa k zariadeniam</translation>
+<translation id="851751545965956758">Brániť webom pripájať sa k zariadeniam</translation>
 <translation id="8525306231823319788">Celá obrazovka</translation>
 <translation id="857943718398505171">Povolené (odporúčané)</translation>
 <translation id="8609465669617005112">Presunúť nahor</translation>
 <translation id="8676374126336081632">Vymazať vstup</translation>
 <translation id="868929229000858085">Prehľadať kontakty</translation>
-<translation id="8702612070107455751">Budú vymazané všetky offline údaje.</translation>
+<translation id="8702612070107455751">Všetky offline dáta budú vymazané.</translation>
 <translation id="8719283222052720129">Zapnite v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" /> povolenie pre aplikáciu <ph name="APP_NAME" />.</translation>
 <translation id="8725066075913043281">Skúsiť znova</translation>
 <translation id="8730621377337864115">Hotovo</translation>
-<translation id="8737217482364735741">Týmto vymažete všetky dáta a súbory cookie uložené zdrojom <ph name="ORIGIN" />.</translation>
+<translation id="8737217482364735741">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="ORIGIN" />.</translation>
 <translation id="8751914237388039244">Vyberte obrázok</translation>
 <translation id="8801436777607969138">Blokovať JavaScript na konkrétnom webe.</translation>
 <translation id="8816026460808729765">Zablokovať webom prístup k senzorom</translation>
@@ -299,7 +299,7 @@
 <translation id="8929372349074745002">Tento web sa väčšine ľudí otvára rýchlo, aj tak reaguje</translation>
 <translation id="8941729603749328384">www.example.com</translation>
 <translation id="894871326938397531">Ukončiť režim inkognito?</translation>
-<translation id="8958424370300090006">Blokovanie súborov cookie konkrétneho webu</translation>
+<translation id="8958424370300090006">Blokovať súbory cookie na konkrétnom webe.</translation>
 <translation id="8959122750345127698">Navigácia je nedostupná: <ph name="URL" /></translation>
 <translation id="9019902583201351841">Spravované vašimi rodičmi</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
index 0b3852e6..cd97779 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -20,7 +20,7 @@
 <translation id="1415402041810619267">URL kısaltıldı</translation>
 <translation id="1431402976894535801">Etkin olduğunuzda sitelerin bilmesini engelleyin</translation>
 <translation id="1446450296470737166">MIDI cihazlarının tam denetimine izin verme</translation>
-<translation id="1509960214886564027">Birçok sitedeki özellikler bozulabilir</translation>
+<translation id="1509960214886564027">Birçok sitedeki özellikler çalışmayabilir</translation>
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1660204651932907780">Sitelerin ses çalmasına izin ver (önerilir)</translation>
 <translation id="1677097821151855053">Çerezler ve diğer site verileri sizi hatırlamamız için kullanılır, örneğin oturumunuzu açmak veya reklamları kişiselleştirmek için. Çerezlerin tüm siteler için nasıl yönetileceğini <ph name="BEGIN_LINK" />Ayarlar<ph name="END_LINK" /> bölümünden öğrenebilirsiniz.</translation>
@@ -113,7 +113,7 @@
 <translation id="4200726100658658164">Konum Ayarlarını açın</translation>
 <translation id="4226663524361240545">Bildirimler cihazı titretebilir</translation>
 <translation id="4259722352634471385">Gezinme engellendi: <ph name="URL" /></translation>
-<translation id="4278390842282768270">İzin verilen</translation>
+<translation id="4278390842282768270">İzin veriliyor</translation>
 <translation id="429312253194641664">Bir site medya oynatıyor</translation>
 <translation id="42981349822642051">Genişlet</translation>
 <translation id="4336434711095810371">Tüm verileri temizle</translation>
@@ -163,7 +163,7 @@
 <translation id="5556459405103347317">Yeniden Yükle</translation>
 <translation id="5596627076506792578">Diğer seçenekler</translation>
 <translation id="5649053991847567735">Otomatik indirmeler</translation>
-<translation id="5677928146339483299">Engellendi</translation>
+<translation id="5677928146339483299">Engelleniyor</translation>
 <translation id="5689516760719285838">Konum</translation>
 <translation id="5690795753582697420">Kamera, Android ayarlarında kapatıldı</translation>
 <translation id="5710871682236653961">NFC cihazlarına dokunduğunuzda sitelerin bilgi göndermesine ve almasına izin verilmeden önce size sorulur (önerilen)</translation>
@@ -188,7 +188,7 @@
 <translation id="6206551242102657620">Bağlantı güvenli. Site bilgileri</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Seçenekleri</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> engellendi</translation>
-<translation id="6270391203985052864">Siteler bildirim göndermek isteyebilir</translation>
+<translation id="6270391203985052864">Siteler bildirim gönderme izni isteyebilir</translation>
 <translation id="6295158916970320988">Tüm siteler</translation>
 <translation id="6320088164292336938">Titreşim</translation>
 <translation id="6388207532828177975">Temizle ve sıfırla</translation>
@@ -199,7 +199,7 @@
 <translation id="6527303717912515753">Paylaş</translation>
 <translation id="6545864417968258051">Bluetooth taraması</translation>
 <translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> izin daha engellendi}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> izin daha engellendi}}</translation>
-<translation id="6561560012278703671">Bilgiyi daha az rahatsız edici bir şekilde alın (bildirim istemlerinin sizi rahatsız etmesini engelleyin)</translation>
+<translation id="6561560012278703671">İletişim daha sessiz kurulsun (bildirim istemlerinin sizi rahatsız etmesini engeller)</translation>
 <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
 <translation id="6612358246767739896">Korunan içerik</translation>
 <translation id="662080504995468778">Kal</translation>
@@ -252,7 +252,7 @@
 <translation id="7846621471902887024">Tüm sitelerdeki oturumunuz kapatılacak.</translation>
 <translation id="7882806643839505685">Belirli bir site için sese izin verin.</translation>
 <translation id="7986741934819883144">Kişi seçin</translation>
-<translation id="7993619969781047893">Bazı sitelerdeki özellikler bozulabilir</translation>
+<translation id="7993619969781047893">Bazı sitelerdeki özellikler çalışmayabilir</translation>
 <translation id="7999064672810608036">Bu web sitesine ilişkin çerezler dahil tüm yerel verileri temizlemek ve bu sitenin tüm izinlerini sıfırlamak istediğinizden emin misiniz?</translation>
 <translation id="8007176423574883786">Bu cihaz için kapatıldı</translation>
 <translation id="802154636333426148">İndirilemedi</translation>
@@ -305,6 +305,6 @@
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> tane daha}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> tane daha}}</translation>
 <translation id="913657688200966289"><ph name="APP_NAME" /> için izinleri açmak üzere <ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda izinleri açın.</translation>
-<translation id="965817943346481315">Site, araya giren veya yanıltıcı reklamlar gösteriyorsa engelle (önerilen)</translation>
+<translation id="965817943346481315">Araya giren veya yanıltıcı reklamlar gösteren sitelerde reklamları engelle (önerilir)</translation>
 <translation id="967624055006145463">Depolanan veriler</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
index e63cf66..fd3cea0 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -27,7 +27,7 @@
 <translation id="1688867105868176567">要清除网站数据吗?</translation>
 <translation id="169515064810179024">禁止网站使用动态传感器</translation>
 <translation id="1717218214683051432">动态传感器</translation>
-<translation id="1743802530341753419">网站需先询问并得到许可才能连接设备(推荐)</translation>
+<translation id="1743802530341753419">需先询问,得到许可后才允许网站连接设备(推荐)</translation>
 <translation id="1779089405699405702">图片解码器</translation>
 <translation id="1818308510395330587">若要允许 <ph name="APP_NAME" /> 使用 AR 功能,您还需在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启摄像头。</translation>
 <translation id="1887786770086287077">此设备的位置信息使用权已关闭;若想开启这项权限,请转到 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />。</translation>
@@ -42,10 +42,10 @@
 <translation id="2054665754582400095">您的状态</translation>
 <translation id="2079545284768500474">撤消</translation>
 <translation id="2091887806945687916">声音</translation>
-<translation id="2107397443965016585">网站需先询问并得到许可才能播放受保护内容 (推荐)</translation>
+<translation id="2107397443965016585">需先询问,得到许可后才允许网站播放受保护的内容 (推荐)</translation>
 <translation id="2146738493024040262">打开免安装应用</translation>
 <translation id="2148716181193084225">今天</translation>
-<translation id="2182457891543959921">在允许网站为您的周边环境创建 3D 地图或跟踪摄像头位置之前询问您(推荐)</translation>
+<translation id="2182457891543959921">需先询问,得到许可后才允许网站为您的周边环境创建 3D 地图或跟踪摄像头位置(推荐)</translation>
 <translation id="2212565012507486665">允许使用 Cookie</translation>
 <translation id="2228071138934252756">若要允许 <ph name="APP_NAME" /> 使用您的摄像头,您还需在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启摄像头。</translation>
 <translation id="2241634353105152135">仅一次</translation>
@@ -73,7 +73,7 @@
 <translation id="2870560284913253234">网站</translation>
 <translation id="2874939134665556319">上一首</translation>
 <translation id="2903493209154104877">地址</translation>
-<translation id="2910701580606108292">网站需先询问并得到许可才能播放受保护内容</translation>
+<translation id="2910701580606108292">需先询问,得到许可后才允许网站播放受保护的内容</translation>
 <translation id="2913331724188855103">允许网站保存和读取 Cookie 数据(推荐)</translation>
 <translation id="2968755619301702150">证书查看器</translation>
 <translation id="300526633675317032">这会清除全部的网站存储数据 (<ph name="SIZE_IN_KB" />)。</translation>
@@ -90,7 +90,7 @@
 <translation id="3295602654194328831">隐藏信息</translation>
 <translation id="3328801116991980348">网站信息</translation>
 <translation id="3333961966071413176">所有联系人</translation>
-<translation id="3386292677130313581">网站需要先询问并得到您的许可才能获取您的位置信息(推荐)</translation>
+<translation id="3386292677130313581">网站需要先询问,得到许可后才能获取您的位置信息(推荐)</translation>
 <translation id="3538390592868664640">禁止网站为您的周边环境创建 3D 地图或跟踪摄像头位置</translation>
 <translation id="3586500876634962664">正在使用摄像头和麦克风</translation>
 <translation id="3587482841069643663">全部</translation>
@@ -130,14 +130,14 @@
 <translation id="4708011789095599544">确定要清除此网站的 Cookie 和其他网站数据吗?</translation>
 <translation id="4751476147751820511">动态传感器或光传感器</translation>
 <translation id="4883854917563148705">无法重置托管设置</translation>
-<translation id="4887024562049524730">网站需在使用您的虚拟实境设备和数据之前获得您的许可(推荐)</translation>
+<translation id="4887024562049524730">需先询问,得到许可后才允许网站使用您的虚拟实境设备和数据(推荐)</translation>
 <translation id="4962975101802056554">撤消设备的所有权限</translation>
 <translation id="497421865427891073">前进</translation>
 <translation id="4994033804516042629">找不到任何联系人</translation>
 <translation id="4996978546172906250">分享方式</translation>
 <translation id="5039804452771397117">允许</translation>
 <translation id="5048398596102334565">允许网站使用动态传感器(推荐)</translation>
-<translation id="5063480226653192405">使用情况</translation>
+<translation id="5063480226653192405">空间占用量</translation>
 <translation id="5100237604440890931">已收起 - 点击此处即可展开。</translation>
 <translation id="5123685120097942451">无痕式标签页</translation>
 <translation id="5186036860380548585">选项位于屏幕顶部附近</translation>
@@ -159,14 +159,14 @@
 <translation id="5502860503640766021">已授予“<ph name="PERMISSION_1" />”权限,已禁用“<ph name="PERMISSION_2" />”权限</translation>
 <translation id="5505264765875738116">网站无法询问能否向您发送通知</translation>
 <translation id="5516455585884385570">打开通知设置</translation>
-<translation id="5527111080432883924">网站需先询问并得到许可才能读取剪贴板中的文字和图片(推荐)</translation>
+<translation id="5527111080432883924">需先询问,得到许可后才允许网站读取剪贴板中的文字和图片(推荐)</translation>
 <translation id="5556459405103347317">重新加载</translation>
 <translation id="5596627076506792578">更多选项</translation>
 <translation id="5649053991847567735">自动下载项</translation>
 <translation id="5677928146339483299">已禁止</translation>
 <translation id="5689516760719285838">位置信息</translation>
 <translation id="5690795753582697420">已在 Android 设置中关闭摄像头</translation>
-<translation id="5710871682236653961">(推荐)网站需先询问并获得您的许可,才能在您触碰 NFC 设备时发送和接收信息</translation>
+<translation id="5710871682236653961">需先询问,得到许可后才允许网站在您触碰 NFC 设备时发送和接收信息(推荐)</translation>
 <translation id="5719847187258001597">此操作会清除 <ph name="ORIGIN" /> 或其在主屏幕中安装的应用所存储的全部数据和 Cookie。</translation>
 <translation id="5771720122942595109">已禁用“<ph name="PERMISSION_1" />”权限</translation>
 <translation id="5804241973901381774">权限</translation>
@@ -199,7 +199,7 @@
 <translation id="6527303717912515753">分享</translation>
 <translation id="6545864417968258051">蓝牙扫描</translation>
 <translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{已禁用“<ph name="PERMISSION_1" />”权限、“<ph name="PERMISSION_2" />”权限和另外 <ph name="NUM_MORE" /> 项权限}other{已禁用“<ph name="PERMISSION_1" />”权限、“<ph name="PERMISSION_2" />”权限和另外 <ph name="NUM_MORE" /> 项权限}}</translation>
-<translation id="6561560012278703671">改用静态指示方式(禁止网站发送通知,以免干扰)</translation>
+<translation id="6561560012278703671">改用干扰性更低的提示方式(禁止网站发送通知,以免干扰)</translation>
 <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
 <translation id="6612358246767739896">受保护的内容</translation>
 <translation id="662080504995468778">留下</translation>
@@ -236,7 +236,7 @@
 <translation id="7554752735887601236">有一个网站正在使用您的麦克风</translation>
 <translation id="7561196759112975576">永远</translation>
 <translation id="7572498721684305250">禁止网站在您触碰 NFC 设备时发送和接收信息</translation>
-<translation id="757524316907819857">禁止网站播放受保护内容</translation>
+<translation id="757524316907819857">禁止网站播放受保护的内容</translation>
 <translation id="7589445247086920869">不允许当前搜索引擎使用</translation>
 <translation id="7649070708921625228">帮助</translation>
 <translation id="7658239707568436148">取消</translation>
@@ -259,7 +259,7 @@
 <translation id="8067883171444229417">播放视频</translation>
 <translation id="8068648041423924542">无法选择证书。</translation>
 <translation id="8087000398470557479">此内容来自 <ph name="DOMAIN_NAME" />(由 Google 提供)。</translation>
-<translation id="8116925261070264013">已静音的网站</translation>
+<translation id="8116925261070264013">已静音</translation>
 <translation id="8131740175452115882">确认</translation>
 <translation id="8197286292360124385">已授予“<ph name="PERMISSION_1" />”权限</translation>
 <translation id="8200772114523450471">继续</translation>
diff --git a/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java b/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java
index 4302def..422b443 100644
--- a/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java
+++ b/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java
@@ -286,4 +286,12 @@
     protected String describeError(final int errorCode) {
         return GoogleApiAvailability.getInstance().getErrorString(errorCode);
     }
+
+    /**
+     * Sets an instance for testing.
+     * @param externalAuthUtils The instance to set for testing.
+     */
+    public static void setInstanceForTesting(ExternalAuthUtils externalAuthUtils) {
+        sInstance = externalAuthUtils;
+    }
 }
diff --git a/components/full_restore/full_restore_read_handler.cc b/components/full_restore/full_restore_read_handler.cc
index 07b49fd70..267b3b7 100644
--- a/components/full_restore/full_restore_read_handler.cc
+++ b/components/full_restore/full_restore_read_handler.cc
@@ -37,6 +37,15 @@
                      std::move(callback)));
 }
 
+void FullRestoreReadHandler::RemoveApp(const base::FilePath& profile_path,
+                                       const std::string& app_id) {
+  auto it = profile_path_to_restore_data_.find(profile_path);
+  if (it == profile_path_to_restore_data_.end())
+    return;
+
+  it->second->RemoveApp(app_id);
+}
+
 void FullRestoreReadHandler::OnGetRestoreData(
     const base::FilePath& profile_path,
     Callback callback,
diff --git a/components/full_restore/full_restore_read_handler.h b/components/full_restore/full_restore_read_handler.h
index 6104189b..f531d39 100644
--- a/components/full_restore/full_restore_read_handler.h
+++ b/components/full_restore/full_restore_read_handler.h
@@ -43,6 +43,10 @@
   // calls |callback| when the reading operation is done.
   void ReadFromFile(const base::FilePath& profile_path, Callback callback);
 
+  // Removes app launching and app windows for an app with the given |app_id|
+  // from |profile_path_to_restore_data_| for |profile_path| .
+  void RemoveApp(const base::FilePath& profile_path, const std::string& app_id);
+
  private:
   // Invoked when reading the restore data from |profile_path| is finished, and
   // calls |callback| to notify that the reading operation is done.
diff --git a/components/full_restore/full_restore_save_handler.cc b/components/full_restore/full_restore_save_handler.cc
index f6b2ebcc..0c45667 100644
--- a/components/full_restore/full_restore_save_handler.cc
+++ b/components/full_restore/full_restore_save_handler.cc
@@ -142,6 +142,19 @@
                          weak_factory_.GetWeakPtr(), profile_path));
 }
 
+void FullRestoreSaveHandler::RemoveApp(const base::FilePath& profile_path,
+                                       const std::string& app_id) {
+  auto it = profile_path_to_restore_data_.find(profile_path);
+  if (it == profile_path_to_restore_data_.end())
+    return;
+
+  it->second.RemoveApp(app_id);
+
+  pending_save_profile_paths_.insert(profile_path);
+
+  MaybeStartSaveTimer();
+}
+
 void FullRestoreSaveHandler::MaybeStartSaveTimer() {
   if (!save_timer_.IsRunning() && save_running_.empty()) {
     save_timer_.Start(FROM_HERE, kSaveDelay,
diff --git a/components/full_restore/full_restore_save_handler.h b/components/full_restore/full_restore_save_handler.h
index 4e6cc9ff..d1a81bd 100644
--- a/components/full_restore/full_restore_save_handler.h
+++ b/components/full_restore/full_restore_save_handler.h
@@ -65,6 +65,10 @@
   // data.
   void Flush(const base::FilePath& profile_path);
 
+  // Removes app launching and app windows for an app with the given |app_id|
+  // from |file_path_to_restore_data_| for |profile_path| .
+  void RemoveApp(const base::FilePath& profile_path, const std::string& app_id);
+
   base::OneShotTimer* GetTimerForTesting() { return &save_timer_; }
 
  private:
diff --git a/components/payments/content/android/java_templates/ErrorStrings.java.tmpl b/components/payments/content/android/java_templates/ErrorStrings.java.tmpl
index eaf67b2..1908867 100644
--- a/components/payments/content/android/java_templates/ErrorStrings.java.tmpl
+++ b/components/payments/content/android/java_templates/ErrorStrings.java.tmpl
@@ -30,6 +30,8 @@
 
     public static final String CONTEXT_NOT_FOUND = "Unable to find Chrome context.";
 
+    public static final String TAB_NOT_FOUND = "Unable to find Chrome tab.";
+
     public static final String WINDOW_NOT_FOUND = "Unable to find Chrome window.";
 
     public static final String PAYMENT_APP_INVALID_RESPONSE = "Payment app response is not valid.";
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto
index 34e189b..cf783a3 100644
--- a/components/policy/proto/device_management_backend.proto
+++ b/components/policy/proto/device_management_backend.proto
@@ -363,6 +363,7 @@
   //   google/chromeos/user => ChromeSettingsProto
   //   google/chromeos/publicaccount => ChromeSettingsProto
   //   google/chrome/machine-level-user => ChromeSettingsProto
+  //   google/chrome/machine-level-user-ios => ChromeSettingsProto
   //   google/chrome/extension => ExternalPolicyData
   //   google/chrome/machine-level-extension => ExternalPolicyData
   //   google/chromeos/signinextension => ExternalPolicyData
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 08019f5..89fd395 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -10482,11 +10482,11 @@
       'id': 151,
       'caption': '''Enable or disable spell checking web service''',
       'tags': [],
-      'desc': '''<ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can use a Google web service to help resolve spelling errors. If this setting is enabled, then this service is always used. If this setting is disabled, then this service is never used.
+      'desc': '''Setting the policy to Enabled puts a Google web service in use to help resolve spelling errors. This policy only controls the use of the online service. Setting the policy to Disabled means this service is never used.
 
-      Spell checking can still be performed using a downloaded dictionary; this policy only controls the usage of the online service.
+      Leaving the policy unset lets users choose whether to use the spellcheck service.
 
-      If this setting is not configured then users can choose whether the spell checking service should be used or not.''',
+      The spell check can always use a downloaded dictionary locally unless the feature is disabled by <ph name="SPELLCHECK_ENABLED_POLICY_NAME">SpellcheckEnabled</ph> in which case this policy will have no effect.''',
     },
     {
       'name': 'ExternalStorageDisabled',
@@ -17653,12 +17653,11 @@
       'id': 408,
       'caption': '''Enable spellcheck''',
       'tags': [],
-      'desc': '''If this policy is not set, the user can enable or disable spellcheck in the language settings.
+      'desc': '''Setting the policy to Enabled turns spellcheck on, and users can't turn it off. On <ph name="MS_WIN_NAME">Microsoft® Windows®</ph>, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> and <ph name="LINUX_OS_NAME">Linux®</ph>, spellcheck languages can be switched on or off individually, so users can still turn spellcheck off by switching off every spellcheck language. To avoid that, use the <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME">SpellcheckLanguage</ph> to force-enable specific spellcheck languages.
 
-      If this policy is set to true, spellcheck is enabled and the user cannot disable it. On <ph name="MS_WIN_NAME">Microsoft® Windows</ph>, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> and <ph name="LINUX_OS_NAME">Linux</ph>, spellcheck languages can be individually toggled on or off, so the user can still effectively disable spellcheck by toggling off every spellcheck language. To avoid that, the <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME">SpellcheckLanguage</ph> policy can be used to force specific spellcheck languages to be enabled.
+      Setting the policy to Disabled turns off spellcheck from all sources, and users can't turn it on. The <ph name="SPELL_CHECK_SERVICE_ENABLED_POLICY_NAME">SpellCheckServiceEnabled</ph>, <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME">SpellcheckLanguage</ph> and <ph name="SPELLCHECK_LANGUAGE_BLOCKLIST_POLICY_NAME">SpellcheckLanguageBlocklist</ph> policies have no effect when this policy is set to False.
 
-      If this policy is set to false, spellcheck is disabled and the user cannot enable it. The <ph name="SPELLCHECK_LANGUAGE_POLICY_NAME">SpellcheckLanguage</ph> and <ph name="SPELLCHECK_LANGUAGE_BLACKLIST_POLICY_NAME">SpellcheckLanguageBlacklist</ph> policies have no effect when this policy is set to false.
-      '''
+      Leaving the policy unset lets users turn spellcheck on or off in the language settings. '''
     },
     {
       'name': 'AdsSettingForIntrusiveAdsSites',
diff --git a/components/reading_list/core/reading_list_pref_names.cc b/components/reading_list/core/reading_list_pref_names.cc
index 9e43435..08da77f0 100644
--- a/components/reading_list/core/reading_list_pref_names.cc
+++ b/components/reading_list/core/reading_list_pref_names.cc
@@ -11,5 +11,11 @@
 // device. Not synced.
 const char kReadingListHasUnseenEntries[] = "reading_list.has_unseen_entries";
 
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
+// Boolean to track if the first-use experience has been shown on desktop.
+const char kReadingListDesktopFirstUseExperienceShown[] =
+    "reading_list.desktop_first_use_experience_shown";
+#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
+
 }  // namespace prefs
 }  // namespace reading_list
diff --git a/components/reading_list/core/reading_list_pref_names.h b/components/reading_list/core/reading_list_pref_names.h
index 997da56..76a8f76 100644
--- a/components/reading_list/core/reading_list_pref_names.h
+++ b/components/reading_list/core/reading_list_pref_names.h
@@ -7,11 +7,17 @@
 #ifndef COMPONENTS_READING_LIST_CORE_READING_LIST_PREF_NAMES_H_
 #define COMPONENTS_READING_LIST_CORE_READING_LIST_PREF_NAMES_H_
 
+#include "build/build_config.h"
+
 namespace reading_list {
 namespace prefs {
 
 extern const char kReadingListHasUnseenEntries[];
 
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
+extern const char kReadingListDesktopFirstUseExperienceShown[];
+#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
+
 }  // namespace prefs
 }  // namespace reading_list
 
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 5de6774..1b49caf 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -1443,6 +1443,7 @@
 <translation id="6687335167692595844">Lettertipegrootte versoek</translation>
 <translation id="6689249931105087298">Relatief met swartpuntsaampersing</translation>
 <translation id="6689271823431384964">Chrome bied aan om jou kaarte in jou Google-rekening te stoor omdat jy aangemeld is. Jy kan hierdie gedrag in instellings verander. Die kaarthouernaam kom van jou rekening af.</translation>
+<translation id="6698381487523150993">Geskep:</translation>
 <translation id="6702919718839027939">Bied aan</translation>
 <translation id="6710213216561001401">Vorige</translation>
 <translation id="6710594484020273272">&lt;Tik soekterm in&gt;</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index e51d864..29ab461 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -630,6 +630,7 @@
 <translation id="3487845404393360112">መሳቢያ 4</translation>
 <translation id="3495081129428749620">በገጽ ውስጥ ያግኙ
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">የፋይል ስም፦</translation>
 <translation id="3507936815618196901">የዙሪያዎ የ3ል ካርታ መፍጠር ወይም የካሜራ ቦታን መከታተል</translation>
 <translation id="3512163584740124171">ይህ መመሪያ ከተመሳሳይ የመመሪያ ቡድን የመጣ ሌላ መመሪያ ከፍተኛ ተቀዳሚነት ስላለው ችላ ተብሏል።</translation>
 <translation id="3518941727116570328">በርካታ ነገሮችን መያዝ</translation>
@@ -1237,6 +1238,7 @@
 <translation id="5895138241574237353">እንደገና ጀምር</translation>
 <translation id="5895187275912066135">በዚህ ቀን ቀርቧል</translation>
 <translation id="5901630391730855834">ቢጫ</translation>
+<translation id="5903264686717710770">ርዕስ፡-</translation>
 <translation id="5905445707201418379">በ <ph name="ORIGIN" /> የደህንነት መመሪያ መሠረት ታግዷል።</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ሰምሯል)</translation>
 <translation id="5913377024445952699">የማያ ገጽ ቀረጻ ባለበት ቆሟል</translation>
@@ -1433,6 +1435,7 @@
 <translation id="6687335167692595844">የቅርጸ-ቁምፊ መጠን ተጠይቋል</translation>
 <translation id="6689249931105087298">አንጻራዊ ከጥቁር ነጥብ እመቃ ጋር</translation>
 <translation id="6689271823431384964">በመለያ ስለገቡ Chrome ካርዶችዎን በGoogle መለያዎ ሊያስቀምጥልዎ እየጠየቀ ነው። ይህን ባህሪ በቅንብሮች ውስጥ መቀየር ይችላሉ። የካርድ ያዢው ስም ከመለያዎ ነው የመጣው።</translation>
+<translation id="6698381487523150993">ተፈጠረ:</translation>
 <translation id="6702919718839027939">አቅርብ</translation>
 <translation id="6710213216561001401">ቀዳሚ</translation>
 <translation id="6710594484020273272">&lt;የፍለጋ ቃል ይተይቡ&gt;</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 3bf012c59..5decf8c 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">الدُرج 4</translation>
 <translation id="3495081129428749620">البحث في الصفحة
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">اسم الملفّ:</translation>
 <translation id="3507936815618196901">إنشاء خريطة ثلاثية الأبعاد للبيئة المحيطة بك وتتبُّع موضع الكاميرا</translation>
 <translation id="3512163584740124171">يتم تجاهل هذه السياسة بسبب سياسة أخرى من نفس مجموعة السياسة لها أولوية أعلى.</translation>
 <translation id="3518941727116570328">معالجة الأهداف المتعددة</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">إعادة التشغيل</translation>
 <translation id="5895187275912066135">تاريخ الإصدار</translation>
 <translation id="5901630391730855834">أصفر</translation>
+<translation id="5903264686717710770">العنوان:</translation>
 <translation id="5905445707201418379">تم الحظر وفقًا لسياسة المصدر <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (تمت المزامنة)</translation>
 <translation id="5913377024445952699">إيقاف وضع "التقاط الشاشة" مؤقتًا</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">حجم الخط المطلوب</translation>
 <translation id="6689249931105087298">طباعة نسبية باستخدام ميزة "تعويض النقاط السوداء"</translation>
 <translation id="6689271823431384964">‏يتيح لك Chrome حفظ بطاقاتك في حسابك على Google لأنك سجَّلت الدخول. يمكنك تغيير هذا السلوك في الإعدادات. ويتم الحصول على اسم حامل البطاقة من حسابك.</translation>
+<translation id="6698381487523150993">تاريخ الإنشاء:</translation>
 <translation id="6702919718839027939">وضع العرض التقديمي</translation>
 <translation id="6710213216561001401">السابق</translation>
 <translation id="6710594484020273272">&lt;إدخال عبارة البحث&gt;</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 4aee01ad..cc2259c 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -1438,6 +1438,7 @@
 <translation id="6687335167692595844">Şrift ölçüsü üzrə sorğu göndərildi</translation>
 <translation id="6689249931105087298">Qara nöqtə sıxılması ilə nisbi</translation>
 <translation id="6689271823431384964">Daxil olduğunuza görə Chrome kartları Google Hesabında yadda saxlamağı təklif edir. Bunu ayarlarda dəyişə bilərsiniz. Kart sahibinin adı hesabınızdan götürülüb.</translation>
+<translation id="6698381487523150993">Yaradılıb:</translation>
 <translation id="6702919718839027939">Təqdim edin</translation>
 <translation id="6710213216561001401">Əvvəlki</translation>
 <translation id="6710594484020273272">&lt;Axtarış sözünü yazın&gt;</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 3158e44..81c7112 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -633,6 +633,7 @@
 <translation id="3487845404393360112">Тава 4</translation>
 <translation id="3495081129428749620">Търсене в страницата
 <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Име на файла:</translation>
 <translation id="3507936815618196901">Създаване на триизмерна карта на заобикалящата ви среда и следене на позицията на камерата</translation>
 <translation id="3512163584740124171">Това правило е пренебрегнато, защото друго правило от същата група е с по-висок приоритет.</translation>
 <translation id="3518941727116570328">Обработване на няколко обекта</translation>
@@ -1243,6 +1244,7 @@
 <translation id="5895138241574237353">Рестартиране</translation>
 <translation id="5895187275912066135">Издаден на</translation>
 <translation id="5901630391730855834">жълто</translation>
+<translation id="5903264686717710770">Заглавие:</translation>
 <translation id="5905445707201418379">Блокирано според правилото за източник на <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизирано)</translation>
 <translation id="5913377024445952699">Функцията за заснемане на екрана е поставена на пауза</translation>
@@ -1439,6 +1441,7 @@
 <translation id="6687335167692595844">Размерът на шрифта е заявен</translation>
 <translation id="6689249931105087298">Относително с компенсиране на черните точки</translation>
 <translation id="6689271823431384964">Chrome предлага да запази картите ви в профила ви в Google, защото сте влезли в него. Можете да промените това поведение от настройките. Името на картодържателя е от профила ви.</translation>
+<translation id="6698381487523150993">Създадено:</translation>
 <translation id="6702919718839027939">Представяне</translation>
 <translation id="6710213216561001401">Предишно</translation>
 <translation id="6710594484020273272">&lt;Въведете дума за търсене&gt;</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index a4783cb..215dcd8 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -638,6 +638,7 @@
 <translation id="3487845404393360112">ট্রে ৪</translation>
 <translation id="3495081129428749620">এই পৃষ্ঠাতে খুঁজুন
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ফাইলের নাম:</translation>
 <translation id="3507936815618196901">আপনার আশেপাশের এলাকার একটি 3D ম্যাপ তৈরি করতে এবং ক্যামেরার অবস্থান ট্র্যাক করতে চায়</translation>
 <translation id="3512163584740124171">একই নীতির গ্রুপের অন্য একটি নীতি অগ্রাধিকার পেয়েছে, তাই এই নীতি অগ্রাহ্য করা হয়েছে।</translation>
 <translation id="3518941727116570328">মাল্টিপল অবজেক্ট ম্যানেজ করা</translation>
@@ -1248,6 +1249,7 @@
 <translation id="5895138241574237353">পুনর্সূচনা</translation>
 <translation id="5895187275912066135">এই তারিখে ইস্যু করা</translation>
 <translation id="5901630391730855834">হলুদ</translation>
+<translation id="5903264686717710770">শিরোনাম:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> সার্ভারের 'অরিজিন নীতি' অনুযায়ী ব্লক করা হয়েছে।</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (সিঙ্ক হয়েছে)</translation>
 <translation id="5913377024445952699">স্ক্রিন ক্যাপচার পজ করা হয়েছে</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">ফন্ট সাইজের অনুরোধ করা হয়েছে</translation>
 <translation id="6689249931105087298">ব্ল্যাক পয়েন্ট কম্প্রেশনের সাথে রিলেটিভ</translation>
 <translation id="6689271823431384964">আপনি সাইন-ইন করে আছেন বলে, Chrome আপনার কার্ডগুলি Google অ্যাকাউন্টে সেভ করতে চান কিনা তা জানতে চাইছে। সেটিংস থেকে আপনি এই বিকল্প পরিবর্তন করতে পারেন। আপনার অ্যাকাউন্ট থেকেই কার্ডহোল্ডারের নাম পাওয়া গেছে।</translation>
+<translation id="6698381487523150993">তৈরি হয়েছে:</translation>
 <translation id="6702919718839027939">প্রেজেন্টেশন মোড</translation>
 <translation id="6710213216561001401">আগের</translation>
 <translation id="6710594484020273272">&lt;সার্চের পদ লিখুন&gt;</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index f1c42adb..383f50c 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Ladica 4</translation>
 <translation id="3495081129428749620">Pronađi na stranici
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Naziv:</translation>
 <translation id="3507936815618196901">Kreirati 3D mapu vašeg okruženja i prati položaj kamere</translation>
 <translation id="3512163584740124171">Ovo pravilo je zanemareno jer drugo pravilo iz iste grupe pravila ima veći prioritet.</translation>
 <translation id="3518941727116570328">Obrada više objekata</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Ponovo pokreni</translation>
 <translation id="5895187275912066135">Izdano</translation>
 <translation id="5901630391730855834">Žuta</translation>
+<translation id="5903264686717710770">Naslov:</translation>
 <translation id="5905445707201418379">Blokirano prema izvornim pravilima koja određuje izvor <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizirano)</translation>
 <translation id="5913377024445952699">Snimanje ekrana je pauzirano</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Zatražena je veličina fonta</translation>
 <translation id="6689249931105087298">Relativno s kompresijom crne tačke</translation>
 <translation id="6689271823431384964">Chrome vam nudi pohranjivanje kartica na Google računu zato što ste prijavljeni. Ovo ponašanje možete promjeniti u postavkama. Ime vlasnika kartice je ime s vašeg računa.</translation>
+<translation id="6698381487523150993">Autor/ica:</translation>
 <translation id="6702919718839027939">Prezentacija</translation>
 <translation id="6710213216561001401">Nazad</translation>
 <translation id="6710594484020273272">&lt;Unesite pojam za pretraživanje&gt;</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 25357fce..6b2fd5da 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">Safata 4</translation>
 <translation id="3495081129428749620">Cerca a la pàgina
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nom del fitxer:</translation>
 <translation id="3507936815618196901">Crear un mapa en 3D del teu entorn i fer un seguiment de la posició de la càmera</translation>
 <translation id="3512163584740124171">Aquesta política s'ignora perquè una altra política del mateix grup de polítiques té una prioritat més alta.</translation>
 <translation id="3518941727116570328">Gestió de diversos objectes</translation>
@@ -1236,6 +1237,7 @@
 <translation id="5895138241574237353">Reinicia</translation>
 <translation id="5895187275912066135">Emès el</translation>
 <translation id="5901630391730855834">Groc</translation>
+<translation id="5903264686717710770">Títol:</translation>
 <translation id="5905445707201418379">S'ha bloquejat d'acord amb la política d'origen de: <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (informació sincronitzada)</translation>
 <translation id="5913377024445952699">La captura de pantalla s'ha posat en pausa</translation>
@@ -1432,6 +1434,7 @@
 <translation id="6687335167692595844">Mida de la lletra sol·licitada</translation>
 <translation id="6689249931105087298">Relatiu amb compressió de punts negres</translation>
 <translation id="6689271823431384964">Chrome t'està oferint desar les targetes al Compte de Google perquè tens la sessió iniciada. Pots canviar aquest comportament a la configuració. El nom del titular de la targeta s'obté del teu compte.</translation>
+<translation id="6698381487523150993">Creat:</translation>
 <translation id="6702919718839027939">Presenta</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Escriviu el terme de cerca&gt;</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 1cc64611..471b5ec 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -628,6 +628,7 @@
 <translation id="3487845404393360112">Přihrádka 4</translation>
 <translation id="3495081129428749620">Najít na stránce
 <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Název souboru:</translation>
 <translation id="3507936815618196901">Vytvářet 3D mapu vašeho okolí a sledovat polohu kamery</translation>
 <translation id="3512163584740124171">Tato zásada se ignoruje, protože jiná zásada ze stejné skupiny zásad má vyšší prioritu.</translation>
 <translation id="3518941727116570328">Zpracování více objektů</translation>
@@ -1232,6 +1233,7 @@
 <translation id="5895138241574237353">Restartovat</translation>
 <translation id="5895187275912066135">Datum vydání</translation>
 <translation id="5901630391730855834">Žlutá</translation>
+<translation id="5903264686717710770">Název:</translation>
 <translation id="5905445707201418379">Zablokováno na základě zásad webu <ph name="ORIGIN" /> ohledně původu.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizováno)</translation>
 <translation id="5913377024445952699">Záznam obrazovky je pozastaven</translation>
@@ -1427,6 +1429,7 @@
 <translation id="6687335167692595844">Požadována velikost písma</translation>
 <translation id="6689249931105087298">Relativní s kompresí černého bodu</translation>
 <translation id="6689271823431384964">Chrome vám nabízí uložení karet do účtu Google, protože jste přihlášeni. Toto chování můžete změnit v Nastavení. Jméno držitele karty pochází z vašeho účtu.</translation>
+<translation id="6698381487523150993">Vytvořil:</translation>
 <translation id="6702919718839027939">Prezentovat</translation>
 <translation id="6710213216561001401">Předchozí</translation>
 <translation id="6710594484020273272">&lt;Zadejte vyhledávací dotaz&gt;</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 3350d9e..7b283f9 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Bakke 4</translation>
 <translation id="3495081129428749620">Find på side
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Filnavn:</translation>
 <translation id="3507936815618196901">Oprette et 3D-kort over dine omgivelser og registrere kamerapositionen</translation>
 <translation id="3512163584740124171">Politikken ignoreres, da en anden politik fra samme politikgruppe har højere prioritet.</translation>
 <translation id="3518941727116570328">Håndtering af flere objekter</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Genstart</translation>
 <translation id="5895187275912066135">Udstedt den</translation>
 <translation id="5901630391730855834">Gul</translation>
+<translation id="5903264686717710770">Titel:</translation>
 <translation id="5905445707201418379">Blokeret i overensstemmelse med oprindelsespolitikken for <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniseret)</translation>
 <translation id="5913377024445952699">Screenshots er sat på pause</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Der blev anmodet om størrelse på skrifttype</translation>
 <translation id="6689249931105087298">Relativ komprimering med sorte punkter</translation>
 <translation id="6689271823431384964">Chrome tilbyder at gemme dine kort på din Google-konto, fordi du er logget ind. Du kan ændre dette i indstillingerne. Kortindehaverens navn hentes fra din konto.</translation>
+<translation id="6698381487523150993">Oprettet:</translation>
 <translation id="6702919718839027939">Nutid</translation>
 <translation id="6710213216561001401">Forrige</translation>
 <translation id="6710594484020273272">&lt;Indtast søgeterm&gt;</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 0bb509df..c2a4ece 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -630,6 +630,7 @@
 <translation id="3484560055331845446">Sie könnten den Zugriff auf Ihr Google-Konto verlieren. Chrome empfiehlt Ihnen, Ihr Passwort jetzt zu ändern. Sie werden dazu aufgefordert, sich anzumelden.</translation>
 <translation id="3487845404393360112">Fach 4</translation>
 <translation id="3495081129428749620">Auf Seite "<ph name="PAGE_TITLE" />" suchen</translation>
+<translation id="350069200438440499">Dateiname:</translation>
 <translation id="3507936815618196901">Eine 3D-Karte Ihrer Umgebung erstellen und die Kameraposition verfolgen</translation>
 <translation id="3512163584740124171">Diese Richtlinie wird ignoriert, da eine andere Richtlinie aus derselben Richtliniengruppe eine höhere Priorität hat.</translation>
 <translation id="3518941727116570328">Handhabung mehrerer Objekte</translation>
@@ -1234,6 +1235,7 @@
 <translation id="5895138241574237353">Neu starten</translation>
 <translation id="5895187275912066135">Ausgestellt am</translation>
 <translation id="5901630391730855834">Gelb</translation>
+<translation id="5903264686717710770">Titel:</translation>
 <translation id="5905445707201418379">Gemäß der Ursprungsrichtlinie von <ph name="ORIGIN" /> blockiert.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisiert)</translation>
 <translation id="5913377024445952699">Bildschirmaufnahme pausiert</translation>
@@ -1430,6 +1432,7 @@
 <translation id="6687335167692595844">Gewünschte Schriftgröße</translation>
 <translation id="6689249931105087298">Relativ mit Schwarzpunktkompensation</translation>
 <translation id="6689271823431384964">Chrome bietet Ihnen die Möglichkeit, die Karten in Ihrem Google-Konto zu speichern, weil Sie angemeldet sind. Sie können dies in den Einstellungen ändern. Der Name des Karteninhabers stammt aus Ihrem Konto.</translation>
+<translation id="6698381487523150993">Erstellt:</translation>
 <translation id="6702919718839027939">Präsentieren</translation>
 <translation id="6710213216561001401">Zurück</translation>
 <translation id="6710594484020273272">&lt;Suchbegriff eingeben&gt;</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 8de8d46..e1e2996 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Δίσκος 4</translation>
 <translation id="3495081129428749620">Εύρεση στη σελίδα
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Όνομα αρχείου:</translation>
 <translation id="3507936815618196901">Δημιουργία τρισδιάστατου χάρτη του περιβάλλοντα χώρου σας και παρακολούθηση της θέσης της κάμερας.</translation>
 <translation id="3512163584740124171">Αυτή η πολιτική αγνοείται επειδή μια άλλη πολιτική από την ίδια ομάδα πολιτικής έχει υψηλότερη προτεραιότητα.</translation>
 <translation id="3518941727116570328">Χειρισμός πολλών αντικειμένων</translation>
@@ -1248,6 +1249,7 @@
 <translation id="5895138241574237353">Επανεκκίνηση</translation>
 <translation id="5895187275912066135">Εκδόθηκε την</translation>
 <translation id="5901630391730855834">Κίτρινο</translation>
+<translation id="5903264686717710770">Τίτλος:</translation>
 <translation id="5905445707201418379">Αποκλείστηκε σύμφωνα με την πολιτική προέλευσης του <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (συγχρονισμένο)</translation>
 <translation id="5913377024445952699">Η καταγραφή οθόνης τέθηκε σε παύση</translation>
@@ -1444,6 +1446,7 @@
 <translation id="6687335167692595844">Ζητήθηκε μέγεθος γραμματοσειράς</translation>
 <translation id="6689249931105087298">Σχετική με τη συμπίεση μαύρου σημείου</translation>
 <translation id="6689271823431384964">Το Chrome προσφέρεται να αποθηκεύσει τις κάρτες σας στον Λογαριασμό σας Google, επειδή έχετε συνδεθεί. Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά στις ρυθμίσεις. Το όνομα του κατόχου κάρτας προέρχεται από τον λογαριασμό σας.</translation>
+<translation id="6698381487523150993">Δημιουργήθηκε:</translation>
 <translation id="6702919718839027939">Παρουσίαση</translation>
 <translation id="6710213216561001401">Προηγούμενο</translation>
 <translation id="6710594484020273272">&lt;Πληκτρολογήστε όρο αναζήτησης&gt;</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index c18c65a4..1941d6e 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -96,7 +96,7 @@
 <translation id="129553762522093515">Recently closed</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Try clearing your cookies<ph name="END_LINK" /></translation>
 <translation id="1301324364792935241">Check your secure DNS settings</translation>
-<translation id="1307966114820526988">Deprecated Features</translation>
+<translation id="1307966114820526988">Deprecated features</translation>
 <translation id="131405271941274527"><ph name="URL" /> wants to send and receive info when you tap your phone on an NFC device</translation>
 <translation id="1314509827145471431">Bind right</translation>
 <translation id="1320233736580025032">Prc1 (Envelope)</translation>
@@ -312,7 +312,7 @@
 <translation id="2119867082804433120">Punch bottom right</translation>
 <translation id="2129079103035905234">Motion Sensors</translation>
 <translation id="2130448033692577677">The templates that you've specified may not be applied due to the DnsOverHttpsMode policy not being set.</translation>
-<translation id="213826338245044447">Mobile Bookmarks</translation>
+<translation id="213826338245044447">Mobile bookmarks</translation>
 <translation id="214556005048008348">Cancel payment</translation>
 <translation id="2147827593068025794">Background Sync</translation>
 <translation id="2148613324460538318">Add Card</translation>
@@ -389,7 +389,7 @@
 <translation id="2465402087343596252">Architecture-E</translation>
 <translation id="2465655957518002998">Choose delivery method</translation>
 <translation id="2465688316154986572">Staple</translation>
-<translation id="2467694685043708798"><ph name="BEGIN_LINK" />Running Network Diagnostics<ph name="END_LINK" /></translation>
+<translation id="2467694685043708798"><ph name="BEGIN_LINK" />Running network diagnostics<ph name="END_LINK" /></translation>
 <translation id="2469153820345007638">1-to-N order</translation>
 <translation id="2470767536994572628">When you edit annotations, this document will return to single-page view and its original rotation</translation>
 <translation id="2479410451996844060">Invalid search URL.</translation>
@@ -636,6 +636,7 @@
 <translation id="3487845404393360112">Tray 4</translation>
 <translation id="3495081129428749620">Find in page
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">File name:</translation>
 <translation id="3507936815618196901">Create a 3D map of your surroundings and track camera position</translation>
 <translation id="3512163584740124171">This policy is ignored because another policy from the same policy group has a higher priority.</translation>
 <translation id="3518941727116570328">Multiple objects handling</translation>
@@ -1246,6 +1247,7 @@
 <translation id="5895138241574237353">Restart</translation>
 <translation id="5895187275912066135">Issued On</translation>
 <translation id="5901630391730855834">Yellow</translation>
+<translation id="5903264686717710770">Title:</translation>
 <translation id="5905445707201418379">Blocked according to <ph name="ORIGIN" />'s origin policy.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synced)</translation>
 <translation id="5913377024445952699">Screen capture paused</translation>
@@ -1442,6 +1444,7 @@
 <translation id="6687335167692595844">Font size requested</translation>
 <translation id="6689249931105087298">Relative with black point compression</translation>
 <translation id="6689271823431384964">Chrome is offering to save your cards in your Google account because you are signed in. You can change this behaviour in settings. The cardholder name comes from your account.</translation>
+<translation id="6698381487523150993">Created:</translation>
 <translation id="6702919718839027939">Present</translation>
 <translation id="6710213216561001401">Previous</translation>
 <translation id="6710594484020273272">&lt;Type search term&gt;</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index d9311f1e..04a9a63 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -632,6 +632,7 @@
 <translation id="3487845404393360112">Bandeja 4</translation>
 <translation id="3495081129428749620">Buscar en la página
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nombre de archivo:</translation>
 <translation id="3507936815618196901">Crear un mapa 3D de tu entorno y hacer un seguimiento de la posición de la cámara</translation>
 <translation id="3512163584740124171">Se ignora esta política porque otra del mismo grupo tiene prioridad.</translation>
 <translation id="3518941727116570328">Control de varios objetos</translation>
@@ -1237,6 +1238,7 @@
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5895187275912066135">Emitido el</translation>
 <translation id="5901630391730855834">Amarillo</translation>
+<translation id="5903264686717710770">Título:</translation>
 <translation id="5905445707201418379">Se bloqueó conforme a la política de origen de <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5913377024445952699">Se pausó la captura de pantalla</translation>
@@ -1433,6 +1435,7 @@
 <translation id="6687335167692595844">Se necesita el tamaño de la fuente</translation>
 <translation id="6689249931105087298">Relativo con la compresión de puntos negros</translation>
 <translation id="6689271823431384964">Como accediste a tu Cuenta de Google, Chrome te ofrece guardar tus tarjetas allí. Puedes modificar este comportamiento en la configuración. El nombre del titular de la tarjeta se obtiene de tu cuenta.</translation>
+<translation id="6698381487523150993">Creado:</translation>
 <translation id="6702919718839027939">Presente</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Escribe el término de búsqueda&gt;</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 3762324..e61b287b 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Bandeja 4</translation>
 <translation id="3495081129428749620">Buscar en la página
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nombre:</translation>
 <translation id="3507936815618196901">Crear un mapa 3D de tu entorno y hacer un seguimiento de la posición de la cámara</translation>
 <translation id="3512163584740124171">Se ha ignorado esta política porque existe otra en el mismo grupo de políticas con mayor prioridad.</translation>
 <translation id="3518941727116570328">Gestión de varios objetos</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5895187275912066135">Emitido el</translation>
 <translation id="5901630391730855834">Amarillo</translation>
+<translation id="5903264686717710770">Título:</translation>
 <translation id="5905445707201418379">Se ha bloqueado según la política de origen de <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5913377024445952699">Grabación de pantalla pausada</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Tamaño de fuente solicitado</translation>
 <translation id="6689249931105087298">Relativo con compresión de puntos negros</translation>
 <translation id="6689271823431384964">Chrome te ofrece guardar las tarjetas en tu cuenta de Google porque has iniciado sesión. Puedes cambiar esta opción en los ajustes. El nombre del titular procede de tu cuenta.</translation>
+<translation id="6698381487523150993">Creado:</translation>
 <translation id="6702919718839027939">Presentar</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Introducir término de búsqueda&gt;</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 47b3c09..c0ee2552 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -636,6 +636,7 @@
 <translation id="3487845404393360112">Salv 4</translation>
 <translation id="3495081129428749620">Lehelt otsimine
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Faili nimi:</translation>
 <translation id="3507936815618196901">Teid ümbritsevast 3D-kaardi loomine ja kaamera asendi jälgimine</translation>
 <translation id="3512163584740124171">Seda reeglit eiratakse, kuna sama reegligrupi teisel reeglil on kõrgem prioriteet.</translation>
 <translation id="3518941727116570328">Mitme objekti käsitlemine</translation>
@@ -1246,6 +1247,7 @@
 <translation id="5895138241574237353">Taaskäivitamine</translation>
 <translation id="5895187275912066135">Väljastamiskuupäev</translation>
 <translation id="5901630391730855834">Kollane</translation>
+<translation id="5903264686717710770">Pealkiri:</translation>
 <translation id="5905445707201418379">Blokeeritud saidi <ph name="ORIGIN" /> lähtekohareegli tõttu.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sünkroonitud)</translation>
 <translation id="5913377024445952699">Ekraanikuva jäädvustamine on peatatud</translation>
@@ -1442,6 +1444,7 @@
 <translation id="6687335167692595844">Fondi taotletud suurus</translation>
 <translation id="6689249931105087298">Suhteline, musta punkti tihendamisega</translation>
 <translation id="6689271823431384964">Chrome pakub kaartide salvestamist teie Google'i kontole, kuna olete sisse logitud. Seda käitumist saab seadetes muuta. Kaardiomaniku nimi pärineb teie kontolt.</translation>
+<translation id="6698381487523150993">Loodud:</translation>
 <translation id="6702919718839027939">Esitlemine</translation>
 <translation id="6710213216561001401">Eelmine</translation>
 <translation id="6710594484020273272">&lt;Sisestage otsingutermin&gt;</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 68363c8..cc9541c 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -1427,6 +1427,7 @@
 <translation id="6687335167692595844">Eskatutako letra-tamaina</translation>
 <translation id="6689249931105087298">Erlatiboa, puntu beltzen konprimaketarekin</translation>
 <translation id="6689271823431384964">Saioa hasita duzunez, txartelak Google-ko kontuan gordetzeko aukera ematen dizu Chrome-k. Aukera hori aldatzeko, joan Ezarpenak atalera. Txartelaren titularraren izena kontutik hartu da.</translation>
+<translation id="6698381487523150993">Sortze-data:</translation>
 <translation id="6702919718839027939">Aurkeztu</translation>
 <translation id="6710213216561001401">Aurrekoa</translation>
 <translation id="6710594484020273272">&lt;Idatzi bilaketa-hitza&gt;</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 25cd8d1..c21f0e9 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -635,6 +635,7 @@
 <translation id="3487845404393360112">سینی ۴</translation>
 <translation id="3495081129428749620">یافتن در صفحه
 <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">نام فایل:</translation>
 <translation id="3507936815618196901">ایجاد نقشه سه‌بعدی از محیط و ردیابی موقعیت دوربین</translation>
 <translation id="3512163584740124171">این خط‌مشی، چون خط‌مشی دیگری از همین گروه خط‌مشی اولویت بالاتری دارد، لحاظ نمی‌شود.</translation>
 <translation id="3518941727116570328">کار با چند شیء</translation>
@@ -1441,6 +1442,7 @@
 <translation id="6687335167692595844">اندازه قلم درخواست شد</translation>
 <translation id="6689249931105087298">نسبی با فشرده‌سازی نقطه سیاه</translation>
 <translation id="6689271823431384964">‏چون به سیستم وارد شده‌اید، Chrome پیشنهاد می‌کند کارت‌ها را در حساب Google ذخیره کنید. در تنظیمات می‌توانید این رفتار را تغییر دهید. نام دارنده کارت از حساب شما گرفته شده است.</translation>
+<translation id="6698381487523150993">ایجاد شده:</translation>
 <translation id="6702919718839027939">ارائه کردن</translation>
 <translation id="6710213216561001401">قبلی</translation>
 <translation id="6710594484020273272">&lt;عبارت جستجو را تایپ کنید&gt;</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index bf979ff..d6f99cc 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -638,6 +638,7 @@
 <translation id="3487845404393360112">Lokero 4</translation>
 <translation id="3495081129428749620">Hae sivulta
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Tiedostonimi:</translation>
 <translation id="3507936815618196901">Luo 3D-kartta ympäristöstäsi ja seuraa kameran asentoa</translation>
 <translation id="3512163584740124171">Tämä käytäntö ohitetaan, koska saman käytäntöryhmän toisella käytännöllä on korkeampi prioriteetti.</translation>
 <translation id="3518941727116570328">Useiden objektien käsittely</translation>
@@ -1248,6 +1249,7 @@
 <translation id="5895138241574237353">Käynnistä uudelleen</translation>
 <translation id="5895187275912066135">Myönnetty</translation>
 <translation id="5901630391730855834">Keltainen</translation>
+<translation id="5903264686717710770">Otsikko:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> estää tämän alkuperäkäytännössään.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronoitu)</translation>
 <translation id="5913377024445952699">Näytön tallennus keskeytetty</translation>
@@ -1444,6 +1446,7 @@
 <translation id="6687335167692595844">Fonttikokoa pyydetty</translation>
 <translation id="6689249931105087298">Suhteellinen mustan pisteen pakkauksella</translation>
 <translation id="6689271823431384964">Chrome tarjoaa korttien tallentamista Google-tilillesi, koska olet kirjautuneena sisään. Voit muuttaa tätä koska tahansa asetuksista. Kortinhaltijan nimi on peräisin tililtäsi.</translation>
+<translation id="6698381487523150993">Luomispvm:</translation>
 <translation id="6702919718839027939">Esitystila</translation>
 <translation id="6710213216561001401">Edellinen</translation>
 <translation id="6710594484020273272">&lt;Anna hakukysely&gt;</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 9328c3b..dfd278f 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Tray 4</translation>
 <translation id="3495081129428749620">Hanapin sa page
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">File name:</translation>
 <translation id="3507936815618196901">Gumawa ng 3D na mapa ng iyong kapaligiran at subaybayan ang posisyon ng camera</translation>
 <translation id="3512163584740124171">Binabalewala ang patakarang ito dahil may isa pang patakaran mula sa parehong pangkat ng patakaran na may mas mataas na priyoridad.</translation>
 <translation id="3518941727116570328">Pangangasiwa sa maraming object</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">I-restart</translation>
 <translation id="5895187275912066135">Ibinigay Noong</translation>
 <translation id="5901630391730855834">Dilaw</translation>
+<translation id="5903264686717710770">Pamagat:</translation>
 <translation id="5905445707201418379">Na-black ayon sa patakaran ng pinagmulan ng <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (naka-sync)</translation>
 <translation id="5913377024445952699">Na-pause ang screen capture</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Hiniling na laki ng font</translation>
 <translation id="6689249931105087298">Kaugnay sa black point compression</translation>
 <translation id="6689271823431384964">Nag-aalok ang Chrome na i-save ang iyong mga card sa Google Account mo dahil naka-sign in ka. Puwede mong baguhin ang gawing ito sa mga setting. Mula sa iyong account ang pangalan ng cardholder.</translation>
+<translation id="6698381487523150993">Nalikha:</translation>
 <translation id="6702919718839027939">I-present</translation>
 <translation id="6710213216561001401">Nauna</translation>
 <translation id="6710594484020273272">&lt;I-type ang termino para sa paghahanap&gt;</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index a676af6..4efc00e 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -1432,6 +1432,7 @@
 <translation id="6687335167692595844">Taille de police demandée</translation>
 <translation id="6689249931105087298">Valeur relative avec compression des points noirs</translation>
 <translation id="6689271823431384964">Chrome vous propose d'enregistrer vos cartes dans votre compte Google parce que vous y êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du détenteur de la carte provient de votre compte.</translation>
+<translation id="6698381487523150993">Créé :</translation>
 <translation id="6702919718839027939">Présentation</translation>
 <translation id="6710213216561001401">Précédent</translation>
 <translation id="6710594484020273272">&lt;Entrez un terme de recherche&gt;</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index efcda375..572a632 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -635,6 +635,7 @@
 <translation id="3487845404393360112">Bac 4</translation>
 <translation id="3495081129428749620">Rechercher sur la page
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nom du fichier :</translation>
 <translation id="3507936815618196901">Créer un plan 3D de votre environnement et suivre la position de la caméra</translation>
 <translation id="3512163584740124171">Cette règle est ignorée, car une autre issue du même groupe de règles présente une priorité plus élevée.</translation>
 <translation id="3518941727116570328">Gestion d'objets multiples</translation>
@@ -1245,6 +1246,7 @@
 <translation id="5895138241574237353">Redémarrer</translation>
 <translation id="5895187275912066135">Émis le</translation>
 <translation id="5901630391730855834">Jaune</translation>
+<translation id="5903264686717710770">Titre :</translation>
 <translation id="5905445707201418379">Bloqué selon la règle relative à l'origine de <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisés)</translation>
 <translation id="5913377024445952699">Capture d'écran mise en pause</translation>
@@ -1441,6 +1443,7 @@
 <translation id="6687335167692595844">Taille de police demandée</translation>
 <translation id="6689249931105087298">Valeur relative avec compression des points noirs</translation>
 <translation id="6689271823431384964">Chrome propose d'enregistrer vos cartes dans votre compte Google, car vous êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du titulaire de la carte provient de votre compte.</translation>
+<translation id="6698381487523150993">Créé :</translation>
 <translation id="6702919718839027939">Présenter</translation>
 <translation id="6710213216561001401">Précédent</translation>
 <translation id="6710594484020273272">&lt;Saisissez le terme de recherche&gt;</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index fb0d3932..3210616 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -1440,6 +1440,7 @@
 <translation id="6687335167692595844">Tamaño do tipo de letra solicitado</translation>
 <translation id="6689249931105087298">Relativo con compresión de puntos negros</translation>
 <translation id="6689271823431384964">Chrome permíteche gardar as túas tarxetas na túa Conta de Google porque tes a sesión iniciada. Podes cambiar esta opción na configuración cando queiras. O nome do titular da tarxeta procede da túa conta.</translation>
+<translation id="6698381487523150993">Creada:</translation>
 <translation id="6702919718839027939">Presentar</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Escribe un termo de busca&gt;</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 250f1b2..896f13d 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">ટ્રે 4</translation>
 <translation id="3495081129428749620">પેજ
     <ph name="PAGE_TITLE" />માં શોધો</translation>
+<translation id="350069200438440499">ફાઇલનું નામ:</translation>
 <translation id="3507936815618196901">તમારી આજુબાજુનો 3D નકશો બનાવો અને કૅમેરાની સ્થિતિ ટ્રૅક કરો</translation>
 <translation id="3512163584740124171">આ નીતિને અવગણવામાં આવે છે કારણ કે સમાન નીતિ ગ્રૂપની બીજી નીતિ ઉચ્ચ પ્રાથમિકતા ધરાવે છે.</translation>
 <translation id="3518941727116570328">એકથી વધુ ઑબ્જેક્ટ હૅન્ડલ કરવા</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">પુનઃપ્રારંભ કરો</translation>
 <translation id="5895187275912066135">ના રોજ રજૂ કરાયું</translation>
 <translation id="5901630391730855834">પીળો</translation>
+<translation id="5903264686717710770">શીર્ષક:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" />ની ઑરિજિન પૉલિસી અનુસાર બ્લૉક કરેલી છે.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (સમન્વયિત)</translation>
 <translation id="5913377024445952699">સ્ક્રીન કૅપ્ચરની સુવિધા થોભાવવામાં આવી છે</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">ફોન્ટના કદ માટે વિનંતી કરી</translation>
 <translation id="6689249931105087298">કાળા પૉઇન્ટને નાનો કરવા સંબંધિત</translation>
 <translation id="6689271823431384964">તમે સાઇન ઇન કરેલું છે તેથી Chrome તમને તમારા કાર્ડ તમારા Google એકાઉન્ટમાં સાચવવાની ઑફર કરે છે. તમે સેટિંગમાં આ વર્તણૂકને બદલી શકો છો. કાર્ડધારકનું નામ તમારા એકાઉન્ટમાંથી આવે છે.</translation>
+<translation id="6698381487523150993">બનાવેલા:</translation>
 <translation id="6702919718839027939">પ્રસ્તુત કરો</translation>
 <translation id="6710213216561001401">પાછલી</translation>
 <translation id="6710594484020273272">&lt;શોધ શબ્દ લખો&gt;</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index ad1e2a5..3db9a8f 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -634,6 +634,7 @@
 <translation id="3487845404393360112">ट्रे 4</translation>
 <translation id="3495081129428749620">पेज में ढूंढें
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">फ़ाइल नाम:</translation>
 <translation id="3507936815618196901">आपके आस-पास की जगह का 3D मैप बनाना और कैमरे की स्थिति ट्रैक करना चाहती है</translation>
 <translation id="3512163584740124171">इस नीति को अनदेखा कर दिया गया है, क्योंकि इसी नीति समूह की दूसरी नीति को ज़्यादा प्राथमिकता दी गई है.</translation>
 <translation id="3518941727116570328">कई ऑब्जेक्ट को हैंडल करना</translation>
@@ -1244,6 +1245,7 @@
 <translation id="5895138241574237353">फिर से प्रारंभ करें</translation>
 <translation id="5895187275912066135">जारी करने की तारीख</translation>
 <translation id="5901630391730855834">पीला</translation>
+<translation id="5903264686717710770">शीर्षक :</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> की मूल नीति के मुताबिक रोक लगाई गई.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक किया गया)</translation>
 <translation id="5913377024445952699">स्क्रीन को कैप्चर करने की सुविधा रोक दी गई है</translation>
@@ -1440,6 +1442,7 @@
 <translation id="6687335167692595844">फ़ॉन्ट साइज़ का अनुरोध किया गया</translation>
 <translation id="6689249931105087298">ब्लैक पॉइंट कंप्रेशन से मिलता-जुलता</translation>
 <translation id="6689271823431384964">आपके साइन इन किए होने की वजह से, Chrome आपको Google खाते में कार्ड सेव करने की सुविधा देता है. आप 'सेटिंग' में जाकर इसे बदल सकते हैं. कार्डधारक का नाम आपके खाते से लिया जाता है.</translation>
+<translation id="6698381487523150993">निर्मित:</translation>
 <translation id="6702919718839027939">प्रज़ेंट</translation>
 <translation id="6710213216561001401">पिछला</translation>
 <translation id="6710594484020273272">&lt;खोज शब्द लिखें&gt;</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 5d23591..5099f834 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Ladica 4</translation>
 <translation id="3495081129428749620">Traži na stranici
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Naziv:</translation>
 <translation id="3507936815618196901">Izradite 3D kartu svojeg okruženja i pratite položaj kamere</translation>
 <translation id="3512163584740124171">To se pravilo zanemaruje jer drugo pravilo iz iste grupe pravila ima viši prioritet.</translation>
 <translation id="3518941727116570328">Obrada više predmeta</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Ponovno pokreni</translation>
 <translation id="5895187275912066135">Izdano</translation>
 <translation id="5901630391730855834">Žuta</translation>
+<translation id="5903264686717710770">Naslov:</translation>
 <translation id="5905445707201418379">Blokirano izvornim pravilom koje određuje <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinkronizirano)</translation>
 <translation id="5913377024445952699">Snimanje zaslona je pauzirano</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Zatražena je veličina fonta</translation>
 <translation id="6689249931105087298">Relativno s kompresijom crne točke</translation>
 <translation id="6689271823431384964">Chrome vam nudi spremanje vaših kartica na vaš Google račun jer ste prijavljeni. To ponašanje možete promijeniti u postavkama. Ime nositelja kartice preuzeto je s vašeg računa.</translation>
+<translation id="6698381487523150993">Autor/ica:</translation>
 <translation id="6702919718839027939">Prezentacija</translation>
 <translation id="6710213216561001401">Prethodno</translation>
 <translation id="6710594484020273272">&lt;Upišite pojam za pretraživanje&gt;</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 626e6d1a..9bc9721 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -633,6 +633,7 @@
 <translation id="3487845404393360112">4. tálca</translation>
 <translation id="3495081129428749620">Keresés a következő oldalon:
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Fájlnév?</translation>
 <translation id="3507936815618196901">3D-s térkép készítése az Ön környezetéről és a kamera pozíciójának követése</translation>
 <translation id="3512163584740124171">A böngésző figyelmen kívül hagyja ezt a házirendet, mert magasabb prioritással rendelkezik egy másik házirend ugyanabból a házirendcsoportból.</translation>
 <translation id="3518941727116570328">Több elem kezelése</translation>
@@ -745,7 +746,7 @@
 <translation id="3962859241508114581">Előző szám</translation>
 <translation id="3963721102035795474">Olvasási mód</translation>
 <translation id="3963837677003247395">Folytatja manuálisan?</translation>
-<translation id="3964661563329879394">{COUNT,plural, =0{Nincs}=1{ 1 webhelytől }other{# webhelytől }}</translation>
+<translation id="3964661563329879394">{COUNT,plural, =0{Nincs}=1{ 1 webhelyről }other{# webhelyről }}</translation>
 <translation id="397105322502079400">Számítás…</translation>
 <translation id="3973234410852337861">A(z) <ph name="HOST_NAME" /> le van tiltva</translation>
 <translation id="3987405730340719549">A Chrome azt észlelte, hogy ez a webhely hamis vagy megtévesztő szándékú lehet.
@@ -1243,6 +1244,7 @@
 <translation id="5895138241574237353">Újraindítás</translation>
 <translation id="5895187275912066135">Kiállítva</translation>
 <translation id="5901630391730855834">Sárga</translation>
+<translation id="5903264686717710770">Megszólítás:</translation>
 <translation id="5905445707201418379">Letiltva a(z) <ph name="ORIGIN" /> eredetházirendje miatt.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (szinkronizálva)</translation>
 <translation id="5913377024445952699">Képernyőrögzítés szüneteltetve</translation>
@@ -1439,6 +1441,7 @@
 <translation id="6687335167692595844">Kért betűméret</translation>
 <translation id="6689249931105087298">Relatív, feketepontos tömörítéssel</translation>
 <translation id="6689271823431384964">A Chrome felajánlja a kártyák mentését az Ön Google-fiókjába, mert be van jelentkezve. A beállítások között ezt bármikor módosíthatja. A kártyatulajdonos nevének forrása az Ön fiókja.</translation>
+<translation id="6698381487523150993">Létrehozva:</translation>
 <translation id="6702919718839027939">Prezentáció</translation>
 <translation id="6710213216561001401">Előző</translation>
 <translation id="6710594484020273272">&lt;Írja be a keresési kifejezést&gt;</translation>
@@ -1687,7 +1690,7 @@
 <translation id="7673278391011283842">6. postaláda</translation>
 <translation id="7676643023259824263">Vágólapon lévő szöveg keresése, <ph name="TEXT" /></translation>
 <translation id="7682287625158474539">Szállítási cím</translation>
-<translation id="7687186412095877299">Kitölti a fizetési űrlapokat az Ön mentett fizetési módjaival</translation>
+<translation id="7687186412095877299">Kitölti a fizetési űrlapokat az Ön mentett fizetési adataival</translation>
 <translation id="7687305263118037187">Újrapróbálkozás időtúllépése</translation>
 <translation id="7693583928066320343">Fogadott oldalsorrend</translation>
 <translation id="7697066736081121494">Prc8 (boríték)</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index d783a3c..fc3ff94 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -1443,6 +1443,7 @@
 <translation id="6687335167692595844">Տառաչափի հարցումն ուղարկվել է</translation>
 <translation id="6689249931105087298">Հարաբերական՝ սև կետի սեղմումով</translation>
 <translation id="6689271823431384964">Chrome-ն առաջարկում է պահել քարտերը ձեր Google հաշվում, քանի որ դուք մտել եք հաշիվ: Այս գործառույթը կարող եք փոխել կարգավորումներում։ Քարտապանի անունը վերցվել է ձեր հաշվից:</translation>
+<translation id="6698381487523150993">Ստեղծվել է`</translation>
 <translation id="6702919718839027939">Ներկայացում</translation>
 <translation id="6710213216561001401">Նախորդը</translation>
 <translation id="6710594484020273272">&lt;Մուտքագրեք որոնման հարցումը&gt;</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index ea45c0d..55af048 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -632,6 +632,7 @@
 <translation id="3484560055331845446">Anda dapat kehilangan akses ke Akun Google Anda. Chrome merekomendasikan untuk mengubah sandi Anda sekarang. Anda akan diminta untuk login.</translation>
 <translation id="3487845404393360112">Baki 4</translation>
 <translation id="3495081129428749620">Cari pada halaman <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nama file:</translation>
 <translation id="3507936815618196901">Membuat peta 3D untuk area di sekeliling Anda dan melacak posisi kamera</translation>
 <translation id="3512163584740124171">Kebijakan ini diabaikan karena kebijakan lain dari grup kebijakan yang sama memiliki prioritas lebih tinggi.</translation>
 <translation id="3518941727116570328">Penanganan beberapa objek</translation>
@@ -1237,6 +1238,7 @@
 <translation id="5895138241574237353">Mulai Ulang</translation>
 <translation id="5895187275912066135">Diterbitkan Pada</translation>
 <translation id="5901630391730855834">Kuning</translation>
+<translation id="5903264686717710770">Judul:</translation>
 <translation id="5905445707201418379">Diblokir sesuai dengan kebijakan asal <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (disinkronkan)</translation>
 <translation id="5913377024445952699">Tangkapan layar dijeda</translation>
@@ -1433,6 +1435,7 @@
 <translation id="6687335167692595844">Ukuran font diminta</translation>
 <translation id="6689249931105087298">Relatif dengan kompresi titik hitam</translation>
 <translation id="6689271823431384964">Chrome menawarkan untuk menyimpan informasi kartu ke Akun Google Anda karena Anda sedang login. Anda dapat mengubah perilaku ini di setelan. Nama pemegang kartu berasal dari akun Anda.</translation>
+<translation id="6698381487523150993">Dibuat:</translation>
 <translation id="6702919718839027939">Presentasi</translation>
 <translation id="6710213216561001401">Sebelumnya</translation>
 <translation id="6710594484020273272">&lt;Ketik istilah penelusuran&gt;</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 1b3786f..e29d544 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -1444,6 +1444,7 @@
 <translation id="6687335167692595844">Beðið um leturstærð</translation>
 <translation id="6689249931105087298">Háð með þjöppun svartra punkta</translation>
 <translation id="6689271823431384964">Chrome býður þér að vista kortin þín á Google reikningnum vegna þess að þú ert innskráð(ur). Þú getur breytt þessu í stillingunum. Nafn korthafa er sótt af reikningnum þínum.</translation>
+<translation id="6698381487523150993">Búið til:</translation>
 <translation id="6702919718839027939">Kynna</translation>
 <translation id="6710213216561001401">Til baka</translation>
 <translation id="6710594484020273272">&lt;Sláðu inn leitarorð&gt;</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 6fa802de..c9e50b9 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -634,6 +634,7 @@
 <translation id="3487845404393360112">Vassoio 4</translation>
 <translation id="3495081129428749620">Trova nella pagina
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nome file:</translation>
 <translation id="3507936815618196901">Creare una mappa 3D dell'ambiente circostante e monitorare la posizione della fotocamera</translation>
 <translation id="3512163584740124171">Questo criterio viene ignorato perché un altro criterio dello stesso gruppo ha una priorità più elevata.</translation>
 <translation id="3518941727116570328">Gestione di più oggetti</translation>
@@ -1244,6 +1245,7 @@
 <translation id="5895138241574237353">Riavvia</translation>
 <translation id="5895187275912066135">Emesso in data</translation>
 <translation id="5901630391730855834">Giallo</translation>
+<translation id="5903264686717710770">Titolo:</translation>
 <translation id="5905445707201418379">Bloccato secondo la norma di partenza di <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizzati)</translation>
 <translation id="5913377024445952699">Acquisizione schermo in pausa</translation>
@@ -1439,6 +1441,7 @@
 <translation id="6687335167692595844">Dimensioni carattere richieste</translation>
 <translation id="6689249931105087298">Relativo con compressione del punto nero</translation>
 <translation id="6689271823431384964">Chrome chiede se vuoi salvare le tue carte nel tuo Account Google perché hai eseguito l'accesso. Puoi modificare questo comportamento nelle impostazioni. Il nome del titolare della carta proviene dal tuo account.</translation>
+<translation id="6698381487523150993">Data creazione:</translation>
 <translation id="6702919718839027939">Presentazione</translation>
 <translation id="6710213216561001401">Precedente</translation>
 <translation id="6710594484020273272">&lt;Digita un termine di ricerca&gt;</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 5b07ae1..a9f9bda 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">מגש 4</translation>
 <translation id="3495081129428749620">חיפוש בדף
 <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">שם הקובץ:</translation>
 <translation id="3507936815618196901">ליצור מפה בתלת ממד של הסביבה שלך ולעקוב אחר מיקום המצלמה</translation>
 <translation id="3512163584740124171">המערכת מתעלמת מהמדיניות הזו כי יש מדיניות אחרת מאותה קבוצה של הגדרות מדיניות שקיבלה עדיפות גבוהה יותר.</translation>
 <translation id="3518941727116570328">טיפול באובייקטים מרובים</translation>
@@ -1250,6 +1251,7 @@
 <translation id="5895138241574237353">הפעלה מחדש</translation>
 <translation id="5895187275912066135">הונפק בתאריך</translation>
 <translation id="5901630391730855834">צהוב</translation>
+<translation id="5903264686717710770">כותרת:</translation>
 <translation id="5905445707201418379">נחסם בהתאם למדיניות המקור של <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (מסונכרנים)</translation>
 <translation id="5913377024445952699">אפשרות צילום המסך מושהית</translation>
@@ -1446,6 +1448,7 @@
 <translation id="6687335167692595844">גודל הגופן שהתבקש</translation>
 <translation id="6689249931105087298">יחסי עם דחיסת נקודות שחורות</translation>
 <translation id="6689271823431384964">‏מאחר שנכנסת לחשבון, Chrome מציע לשמור את הכרטיסים שלך בחשבון Google. אפשר לשנות את ההתנהגות הזאת בהגדרות. שם בעל הכרטיס מגיע מהחשבון שלך.</translation>
+<translation id="6698381487523150993">נוצר:</translation>
 <translation id="6702919718839027939">הצגה</translation>
 <translation id="6710213216561001401">הקודם</translation>
 <translation id="6710594484020273272">&lt;יש להקליד מונח חיפוש&gt;</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 1531663..afe390e 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">トレイ 4</translation>
 <translation id="3495081129428749620"><ph name="PAGE_TITLE" />
     ページ内を検索</translation>
+<translation id="350069200438440499">ファイル名:</translation>
 <translation id="3507936815618196901">周囲の 3D マップの作成とカメラ位置の追跡</translation>
 <translation id="3512163584740124171">より優先度の高いポリシーが同じポリシー グループにあるため、このポリシーは無視されます。</translation>
 <translation id="3518941727116570328">複数オブジェクトの処理</translation>
@@ -1236,6 +1237,7 @@
 <translation id="5895138241574237353">再起動</translation>
 <translation id="5895187275912066135">発行日</translation>
 <translation id="5901630391730855834">黄</translation>
+<translation id="5903264686717710770">タイトル:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> のオリジン ポリシーに沿ってブロックしました。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(同期済み)</translation>
 <translation id="5913377024445952699">画面キャプチャが一時停止されました</translation>
@@ -1432,6 +1434,7 @@
 <translation id="6687335167692595844">リクエストされたフォントサイズ</translation>
 <translation id="6689249931105087298">相対的(黒点の補正あり)</translation>
 <translation id="6689271823431384964">ログインしている場合は、その Google アカウントにカードを保存できます。この動作は設定で変更できます。カード名義人はアカウントから取得されます。</translation>
+<translation id="6698381487523150993">作成:</translation>
 <translation id="6702919718839027939">プレゼンテーション</translation>
 <translation id="6710213216561001401">前へ</translation>
 <translation id="6710594484020273272">&lt;検索キーワードを入力&gt;</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 5da324a..58b6d4e9 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -1432,6 +1432,7 @@
 <translation id="6687335167692595844">შრიფტის ზომა მოთხოვნილია</translation>
 <translation id="6689249931105087298">ფარდობითი, შავი წერტილის შეკუმშვით</translation>
 <translation id="6689271823431384964">თქვენს Google ანგარიშში ბარათების შენახვას Chrome გთავაზობთ, ვინაიდან შესული ხართ სისტემაში. ამ ქცევის შეცვლა შეგიძლიათ პარამეტრებიდან. ბარათის მფლობელის სახელი მიღებულია თქვენი ანგარიშიდან.</translation>
+<translation id="6698381487523150993">შექმნილია:</translation>
 <translation id="6702919718839027939">პრეზენტირება</translation>
 <translation id="6710213216561001401">წინა</translation>
 <translation id="6710594484020273272">&lt;აკრიფეთ საძიებო ფრაზა&gt;</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 6ecdad1..01bf0a2 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -1442,6 +1442,7 @@
 <translation id="6687335167692595844">Қаріп өлшемі сұралды</translation>
 <translation id="6689249931105087298">Қара нүктені сығуға қатысты</translation>
 <translation id="6689271823431384964">Сіз есептік жазбаға кіргендіктен, Chrome браузері карталарыңызды Google есептік жазбасына сақтауды ұсынып отыр. Мұны "Параметрлер" бөлімінен өзгертуіңізге болады. Карта иесінің аты-жөнін есептік жазбаңыздан алынады.</translation>
+<translation id="6698381487523150993">Жасалған кезі:</translation>
 <translation id="6702919718839027939">Презентация</translation>
 <translation id="6710213216561001401">Алдыңғы</translation>
 <translation id="6710594484020273272">&lt;Іздеу терминін теру&gt;</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index 56374665e..6adc40d1 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -1447,6 +1447,7 @@
 <translation id="6687335167692595844">បានស្នើសុំ​ទំហំពុម្ពអក្សរ</translation>
 <translation id="6689249931105087298">ពាក់ព័ន្ធនឹង​ការបង្ហាប់​ចំណុចខ្មៅ</translation>
 <translation id="6689271823431384964">Chrome ផ្ដល់ជូន​ជម្រើស​រក្សាទុកបណ្ណ​របស់អ្នក​នៅក្នុង​គណនី Google របស់អ្នក ដោយសារ​អ្នកចូល​គណនី។ អ្នកអាច​ប្ដូរសកម្មភាពនេះ​បាននៅក្នុង​ការកំណត់។ ឈ្មោះ​ម្ចាស់បណ្ណ​គឺបានមកពី​គណនី​របស់អ្នក។</translation>
+<translation id="6698381487523150993">បានបង្កើត៖</translation>
 <translation id="6702919718839027939">បង្ហាញ</translation>
 <translation id="6710213216561001401">មុន</translation>
 <translation id="6710594484020273272">&lt;វាយបញ្ចូលពាក្យដែលត្រូវស្វែងរក&gt;</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 91eb6a2..74b5921 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">ಟ್ರೇ 4</translation>
 <translation id="3495081129428749620">ಪುಟದಲ್ಲಿ ಹುಡುಕಿ
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ಫೈಲ್ ಹೆಸರು:</translation>
 <translation id="3507936815618196901">ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ 3D ನಕ್ಷೆಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು ಕ್ಯಾಮರಾ ಸ್ಥಿತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ</translation>
 <translation id="3512163584740124171">ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ ಏಕೆಂದರೆ, ಅದೇ ಕಾರ್ಯನೀತಿಯ ಗುಂಪಿನ ಮತ್ತೊಂದು ಕಾರ್ಯನೀತಿಯು ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯನ್ನು ಹೊಂದಿದೆ.</translation>
 <translation id="3518941727116570328">ಹಲವಾರು ಆಬ್ಜೆಕ್ಟ್‌ಗಳ ನಿರ್ವಹಣೆ</translation>
@@ -1235,6 +1236,7 @@
 <translation id="5895138241574237353">ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="5895187275912066135">ರಂದು ನೀಡಲಾಗಿದೆ</translation>
 <translation id="5901630391730855834">ಹಳದಿ</translation>
+<translation id="5903264686717710770">ಶೀರ್ಷಿಕೆ:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> ನ ಮೂಲ ಕಾರ್ಯನೀತಿಗೆ ಅನುಗುಣವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ಸಿಂಕ್‌ ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="5913377024445952699">ಸ್ಕ್ರೀನ್ ಕ್ಯಾಪ್ಚರ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation>
@@ -1430,6 +1432,7 @@
 <translation id="6687335167692595844">ವಿನಂತಿಸಲಾದ ಫಾಂಟ್ ಗಾತ್ರ</translation>
 <translation id="6689249931105087298">ಕಪ್ಪು ಬಿಂದು ಕಂಪ್ರೆಶ್ಶನ್‌ಗೆ ಸಂಬಂಧಿಸಿದ</translation>
 <translation id="6689271823431384964">ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಕಾರಣದಿಂದಾಗಿ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಲು Chrome ಅವಕಾಶ ನೀಡುತ್ತಿದೆ. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನೀವು ಈ ವರ್ತನೆಯನ್ನು ಬದಲಿಸಬಹುದು. ಕಾರ್ಡ್ ಹೋಲ್ಡರ್ ಹೆಸರು ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಬರುತ್ತದೆ.</translation>
+<translation id="6698381487523150993">ರಚಿಸಲಾಗಿದೆ:</translation>
 <translation id="6702919718839027939">ಪ್ರಸ್ತುತಿ ಮೋಡ್</translation>
 <translation id="6710213216561001401">ಹಿಂದಿನದು</translation>
 <translation id="6710594484020273272">&lt;ಹುಡುಕಾಟದ ಪದ ಟೈಪ್ ಮಾಡಿ&gt;</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index b84656c6..72d555d 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">트레이 4</translation>
 <translation id="3495081129428749620"><ph name="PAGE_TITLE" />
 페이지에서 찾기</translation>
+<translation id="350069200438440499">파일 이름:</translation>
 <translation id="3507936815618196901">주변 환경의 3D 지도를 생성하고 카메라 위치를 추적</translation>
 <translation id="3512163584740124171">동일한 정책 그룹에 있는 다른 정책이 우선순위가 높기 때문에 이 정책은 무시됩니다.</translation>
 <translation id="3518941727116570328">다중 객체 처리</translation>
@@ -1236,6 +1237,7 @@
 <translation id="5895138241574237353">다시 시작</translation>
 <translation id="5895187275912066135">발급일:</translation>
 <translation id="5901630391730855834">노란색</translation>
+<translation id="5903264686717710770">직책:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" />의 기존 정책에 따라 차단됨</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(동기화됨)</translation>
 <translation id="5913377024445952699">화면 캡처가 일시중지됨</translation>
@@ -1432,6 +1434,7 @@
 <translation id="6687335167692595844">글꼴 크기 요청됨</translation>
 <translation id="6689249931105087298">상대적이며 흑점 보정 포함</translation>
 <translation id="6689271823431384964">Google 계정에 로그인되어 있기 때문에 Chrome에서 계정에 카드를 저장할지 묻는 메시지가 표시됩니다. 설정에서 이 동작을 변경할 수 있습니다. 카드 소지자 이름은 계정에서 가져온 것입니다.</translation>
+<translation id="6698381487523150993">생성됨:</translation>
 <translation id="6702919718839027939">발표</translation>
 <translation id="6710213216561001401">이전</translation>
 <translation id="6710594484020273272">&lt;검색어 입력&gt;</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 930e1456..0724a2a 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -1442,6 +1442,7 @@
 <translation id="6687335167692595844">Ариптин өлчөмү суралды</translation>
 <translation id="6689249931105087298">Кара чекит кысуусуна тийиштүү</translation>
 <translation id="6689271823431384964">Аккаунтуңузга кирип турганыңыздан улам, Chrome карталарыңызды Google аккаунтуңузга сактап коюуну сунуштап жатат. Бул параметрди жөндөөлөргө өтүп, өзгөртүп койсоңуз болот. Картанын ээси – аккаунттун ээси болуп эсептелет.</translation>
+<translation id="6698381487523150993">Түзүлгөн:</translation>
 <translation id="6702919718839027939">Презентация</translation>
 <translation id="6710213216561001401">Мурунку</translation>
 <translation id="6710594484020273272">&lt;Изделүүчү сөздү териңиз&gt;</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 7041cbe..fad3761 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -1443,6 +1443,7 @@
 <translation id="6687335167692595844">ຂໍຂະໜາດຟອນແລ້ວ</translation>
 <translation id="6689249931105087298">ສຳພັນກັບການບີບຈຸດສີດຳ</translation>
 <translation id="6689271823431384964">Chrome ກຳລັງສະເໜີບັນທຶກບັດຂອງທ່ານໄວ້ໃນບັນຊີ Google ຂອງທ່ານ ເພາະວ່າທ່ານເຂົ້າສູ່ລະບົບຢູ່. ທ່ານສາມາດປ່ຽນພຶດຕິກຳນີ້ໄດ້ໃນການຕັ້ງຄ່າ. ຊື່ຜູ້ຖືບັດມາຈາກບັນຊີຂອງທ່ານ.</translation>
+<translation id="6698381487523150993">ສ້າງຂຶ້ນແລ້ວ:</translation>
 <translation id="6702919718839027939">ປັດຈຸບັນ</translation>
 <translation id="6710213216561001401">ຜ່ານມາ</translation>
 <translation id="6710594484020273272">&lt;ພິມຄຳສັບການຄົ້ນຫາ&gt;</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 0ad7c51..8b0c966 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -638,6 +638,7 @@
 <translation id="3487845404393360112">4 dėklas</translation>
 <translation id="3495081129428749620">Rasti puslapyje
     „<ph name="PAGE_TITLE" />“</translation>
+<translation id="350069200438440499">Failo pav.:</translation>
 <translation id="3507936815618196901">Kurti jūsų aplinkos 3D žemėlapį ir stebėti kameros padėtį</translation>
 <translation id="3512163584740124171">Šios politikos nepaisoma, nes kitos politikos toje pačioje politikos grupėje prioritetas yra didesnis.</translation>
 <translation id="3518941727116570328">Kelių objektų apdorojimas</translation>
@@ -1248,6 +1249,7 @@
 <translation id="5895138241574237353">Paleisti iš naujo</translation>
 <translation id="5895187275912066135">Išduota</translation>
 <translation id="5901630391730855834">Geltona</translation>
+<translation id="5903264686717710770">Pavadinimas:</translation>
 <translation id="5905445707201418379">Užblokuota vadovaujantis „<ph name="ORIGIN" />“ pradine politika.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinchronizuota)</translation>
 <translation id="5913377024445952699">Ekrano fiksavimas pristabdytas</translation>
@@ -1444,6 +1446,7 @@
 <translation id="6687335167692595844">Reikia nurodyti šrifto dydį</translation>
 <translation id="6689249931105087298">Santykinis su juodų taškų sutankinimu</translation>
 <translation id="6689271823431384964">„Chrome“ siūlo išsaugoti korteles „Google“ paskyroje, nes esate prisijungę. Šią elgseną galite pakeisti nustatymuose. Kortelės savininko vardas gaunamas iš jūsų paskyros.</translation>
+<translation id="6698381487523150993">Sukurta:</translation>
 <translation id="6702919718839027939">Rodyti</translation>
 <translation id="6710213216561001401">Ankstesnė</translation>
 <translation id="6710594484020273272">&lt;Įveskite paieškos terminą&gt;</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 26f459d..23773d06 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -635,6 +635,7 @@
 <translation id="3487845404393360112">4. paplāte</translation>
 <translation id="3495081129428749620">Meklēt lapā
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Faila vārds:</translation>
 <translation id="3507936815618196901">Izveidot jūsu apkārtnes 3D karti un izsekot kameras pozīciju</translation>
 <translation id="3512163584740124171">Šī politika tiek ignorēta, jo citai tās pašas politiku grupas politikai ir augstāka prioritāte.</translation>
 <translation id="3518941727116570328">Vairāku objektu apstrāde</translation>
@@ -1244,6 +1245,7 @@
 <translation id="5895138241574237353">Restartēt</translation>
 <translation id="5895187275912066135">Izsniegšanas datums</translation>
 <translation id="5901630391730855834">Dzeltena</translation>
+<translation id="5903264686717710770">Nosaukums:</translation>
 <translation id="5905445707201418379">Bloķēts, pamatojoties uz <ph name="ORIGIN" /> izcelsmes politiku.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (veikta sinhronizācija)</translation>
 <translation id="5913377024445952699">Ekrānuzņēmumu izveide ir pārtraukta</translation>
@@ -1440,6 +1442,7 @@
 <translation id="6687335167692595844">Tika pieprasīts fonta lielums</translation>
 <translation id="6689249931105087298">Relatīva, ar melno punktu saspiešanu</translation>
 <translation id="6689271823431384964">Pārlūkprogrammā Chrome tiek piedāvāts saglabāt jūsu kartes Google kontā, jo esat pierakstījies. Varat mainīt šo darbību iestatījumos. Kartes īpašnieka vārds tiek iegūts no jūsu konta.</translation>
+<translation id="6698381487523150993">Izveidots:</translation>
 <translation id="6702919718839027939">Prezentācija</translation>
 <translation id="6710213216561001401">Iepriekšējais</translation>
 <translation id="6710594484020273272">&lt;Ierakstiet meklēšanas vienumu&gt;</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 1655115..1fe86ec 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -1443,6 +1443,7 @@
 <translation id="6687335167692595844">Побарана е големина на фонтот</translation>
 <translation id="6689249931105087298">Релативна, со компресија на црни точки</translation>
 <translation id="6689271823431384964">Chrome нуди да ви ги зачува картичките во вашата сметка на Google бидејќи сте најавени. Ваквото однесување може да го смените во поставки. Името на сопственикот на картичката доаѓа од сметката.</translation>
+<translation id="6698381487523150993">Создадено:</translation>
 <translation id="6702919718839027939">Презентација</translation>
 <translation id="6710213216561001401">Претходно</translation>
 <translation id="6710594484020273272">&lt;Внесете поим за пребарување&gt;</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index e4dca21..3aaac01 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -633,6 +633,7 @@
 <translation id="3487845404393360112">ട്രേ 4</translation>
 <translation id="3495081129428749620">പേജിൽ കണ്ടെത്തുക
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ഫയല്‍ നാമം:</translation>
 <translation id="3507936815618196901">നിങ്ങളുടെ ചുറ്റുപാടുകളുടെ 3D മാപ്പ് സൃഷ്ടിക്കാനും ക്യാമറയുടെ സ്ഥാനം ട്രാക്ക് ചെയ്യാനും</translation>
 <translation id="3512163584740124171">ഇതേ നയ ഗ്രൂപ്പിൽ നിന്നുള്ള മറ്റൊരു നയത്തിന് ഉയർന്ന മുൻഗണനയുള്ളതിനാൽ ഈ നയം അവഗണിച്ചു.</translation>
 <translation id="3518941727116570328">ഒന്നിലധികം ഒബ്‌ജക്റ്റുകൾ കൈകാര്യം ചെയ്യൽ</translation>
@@ -1241,6 +1242,7 @@
 <translation id="5895138241574237353">പുനരാരംഭിക്കുക</translation>
 <translation id="5895187275912066135">ഇനിപ്പറയുന്നദിവസം നല്‍‌കി</translation>
 <translation id="5901630391730855834">മഞ്ഞ</translation>
+<translation id="5903264686717710770">ശീര്‍ഷകം:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> എന്നതിന്റെ ഉറവിട നയത്തിന് അനുസൃതമായി ബ്ലോക്ക് ചെയ്‌തു.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (സമന്വയിപ്പിച്ചത്)</translation>
 <translation id="5913377024445952699">സ്‌ക്രീൻ ക്യാപ്‌ചർ താൽക്കാലികമായി നിർത്തി</translation>
@@ -1437,6 +1439,7 @@
 <translation id="6687335167692595844">അഭ്യർത്ഥിച്ച ഫോണ്ട് വലുപ്പം</translation>
 <translation id="6689249931105087298">ബ്ലാക്ക് പോയിന്റ് കംപ്രഷനോട് കൂടിയ റിലേറ്റീവ്</translation>
 <translation id="6689271823431384964">നിങ്ങൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നതിനാലാണ് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ കാർഡുകൾ സംരക്ഷിക്കാമെന്ന് Chrome വാഗ്‌ദാനം ചെയ്യുന്നത്. ക്രമീകരണത്തിൽ ഈ രീതി മാറ്റാനാകും. കാർഡുടമയുടെ പേര് നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്നുമാണ് വന്നത്.</translation>
+<translation id="6698381487523150993">സൃഷ്ടിച്ചു:</translation>
 <translation id="6702919718839027939">ദൃശ്യമാക്കുക</translation>
 <translation id="6710213216561001401">മുമ്പത്തേത്</translation>
 <translation id="6710594484020273272">&lt;തിരയൽ പദം നൽകുക&gt;</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 35267bd5..6b2be31 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -1443,6 +1443,7 @@
 <translation id="6687335167692595844">Фонтын хэмжээг шаардсан</translation>
 <translation id="6689249931105087298">Хар цэгийн шахалттай харьцангуй</translation>
 <translation id="6689271823431384964">Та нэвтэрсэн тул Chrome таны картыг таны Google бүртгэлд хадгалахыг санал болгож байна. Та энэ ажиллах төлөвийг тохиргоонд өөрчилж болно. Карт эзэмшигчийн нэр таны бүртгэлээс гаралтай.</translation>
+<translation id="6698381487523150993">Үүсгэсэн:</translation>
 <translation id="6702919718839027939">Үзүүлэн</translation>
 <translation id="6710213216561001401">Өмнөх</translation>
 <translation id="6710594484020273272">&lt;Хайх зүйлээ шивнэ үү&gt;</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 66b96f9..293b038 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -636,6 +636,7 @@
 <translation id="3484560055331845446">तुम्ही तुमच्या Google खात्याचा ॲक्सेस कदाचित गमवाल. Chrome आता तुमचा पासवर्ड बदलण्याची शिफारस करते. तुम्हाला साइन इन करण्यासाठी सांगितले जाऊ शकते.</translation>
 <translation id="3487845404393360112">ट्रे ४</translation>
 <translation id="3495081129428749620">पेज <ph name="PAGE_TITLE" /> मध्ये शोधा</translation>
+<translation id="350069200438440499">फाइल नाव:</translation>
 <translation id="3507936815618196901">तुमच्या आसपासच्या परिसराचा 3D नकाशा तयार करा आणि कॅमेर्‍याचे स्थान ट्रॅक करा</translation>
 <translation id="3512163584740124171">या धोरणाकडे दुर्लक्ष केले कारण त्याच धोरण गटातील दुसऱ्या धोरणाला उच्च प्राधान्य आहे.</translation>
 <translation id="3518941727116570328">एकापेक्षा अधिक ऑब्जेक्ट हाताळणी</translation>
@@ -1246,6 +1247,7 @@
 <translation id="5895138241574237353">रीस्टार्ट करा</translation>
 <translation id="5895187275912066135">रोजी जारी केले</translation>
 <translation id="5901630391730855834">पिवळा</translation>
+<translation id="5903264686717710770">शीर्षक:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> च्या मूळ धोरणानुसार ब्लॉक केले आहे.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक केलेले)</translation>
 <translation id="5913377024445952699">स्‍क्रीन कॅप्‍चर थांबवले आहे</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">विनंती केलेल्या फॉंटचा आकार</translation>
 <translation id="6689249931105087298">काळ्या पॉइंटच्या काँप्रेशनशी संबंंधित</translation>
 <translation id="6689271823431384964">तुम्ही साइन इन केले असल्यामुळे Chrome तुमच्या Google खात्यामध्ये तुमची कार्डे सेव्ह करत आहे. तुम्‍ही हे वर्तन सेटिंग्‍जमध्‍ये बदलू शकता. कार्डधारकाचे नाव तुमच्या खात्यामधून घेतले जाते.</translation>
+<translation id="6698381487523150993">तयार केलेले:</translation>
 <translation id="6702919718839027939">सादर करा</translation>
 <translation id="6710213216561001401">मागील</translation>
 <translation id="6710594484020273272">&lt;शोध संज्ञा एंटर करा&gt;</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index d3d5ed2..214740f1 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Dulang 4</translation>
 <translation id="3495081129428749620">Cari dalam halaman
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nama fail:</translation>
 <translation id="3507936815618196901">Buat peta 3D bagi persekitaran anda dan jejaki kedudukan kamera</translation>
 <translation id="3512163584740124171">Dasar ini diabaikan kerana dasar lain daripada kumpulan dasar yang sama mempunyai keutamaan yang lebih tinggi.</translation>
 <translation id="3518941727116570328">Pengendalian berbilang objek</translation>
@@ -1444,6 +1445,7 @@
 <translation id="6687335167692595844">Saiz fon diminta</translation>
 <translation id="6689249931105087298">Relatif dengan mampatan mata hitam</translation>
 <translation id="6689271823431384964">Chrome menawarkan penyimpanan kad dalam Akaun Google anda kerana anda telah log masuk. Anda boleh menukar gelagat ini dalam tetapan. Nama pemegang kad diambil daripada akaun anda.</translation>
+<translation id="6698381487523150993">Dicipta:</translation>
 <translation id="6702919718839027939">Pembentangan</translation>
 <translation id="6710213216561001401">Sebelumnya</translation>
 <translation id="6710594484020273272">&lt;Taip istilah carian&gt;</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index bc0812b..8f61272 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -1442,6 +1442,7 @@
 <translation id="6687335167692595844">ဖောင့်အရွယ်အစား တောင်းဆိုထားသည်</translation>
 <translation id="6689249931105087298">အနက်ရောင်အမှတ် အချိုင့်နှင့် အညီ</translation>
 <translation id="6689271823431384964">လက်မှတ်ထိုးဝင်ထားသဖြင့် သင်၏ကတ်များကို သင့် Google အကောင့်တွင် သိမ်းရန် Chrome က ကမ်းလှမ်းထားပါသည်။ ဤလုပ်ဆောင်ပုံကို ဆက်တင်များတွင် ပြောင်းနိုင်သည်။ ကတ်ကိုင်ဆောင်သူ အမည်ကို သင့်အကောင့်မှ ရရှိပါသည်။</translation>
+<translation id="6698381487523150993">ဖန်တီးခဲ့:</translation>
 <translation id="6702919718839027939">တင်ပြရန်</translation>
 <translation id="6710213216561001401">အရင်</translation>
 <translation id="6710594484020273272">&lt;ရှာဖွေရန် အကြောင်းအရာကို ရိုက်ထည့်ပါ&gt;</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 398d40b..1d593e8 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1439,6 +1439,7 @@
 <translation id="6687335167692595844">फन्टको अनुरोध गरिएको आकार</translation>
 <translation id="6689249931105087298">कालो बिन्दुको कम्प्रेसनसँग सापेक्ष</translation>
 <translation id="6689271823431384964">तपाईं साइन इन हुनुभएकाले Chrome ले तपाईंको Google खातामा तपाईंका कार्डहरू सुरक्षित गरिदिने प्रस्ताव गर्दै छ। तपाईं सेटिङहरूमा गई उक्त व्यवहार परिवर्तन गर्न सक्नुहुन्छ। कार्डवाहकको नामका रूपमा तपाईंको खातामा भएको नाम प्रयोग गरिन्छ।</translation>
+<translation id="6698381487523150993">सिर्जना गरिएको:</translation>
 <translation id="6702919718839027939">प्रस्तुति दिनुहोस्</translation>
 <translation id="6710213216561001401">अघिल्लो</translation>
 <translation id="6710594484020273272">&lt;खोज पदलाई टाइप गर्नुहोस्&gt;</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 765d031..ba162d2b 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -626,6 +626,7 @@
 <translation id="3484560055331845446">Je kunt de toegang tot je Google-account kwijtraken. Chrome raadt je aan je wachtwoord nu te wijzigen. Je wordt gevraagd in te loggen op je account.</translation>
 <translation id="3487845404393360112">Lade 4</translation>
 <translation id="3495081129428749620">Zoeken op pagina <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Bestandsnaam:</translation>
 <translation id="3507936815618196901">Een 3D-kaart van je omgeving maken en de camerapositie volgen</translation>
 <translation id="3512163584740124171">Dit beleid wordt genegeerd omdat een ander beleid in dezelfde beleidsgroep een hogere prioriteit heeft.</translation>
 <translation id="3518941727116570328">Verwerking van meerdere objecten</translation>
@@ -1233,6 +1234,7 @@
 <translation id="5895138241574237353">Opnieuw starten</translation>
 <translation id="5895187275912066135">Verleend op</translation>
 <translation id="5901630391730855834">Geel</translation>
+<translation id="5903264686717710770">Titel:</translation>
 <translation id="5905445707201418379">Geblokkeerd op basis van het herkomstbeleid van <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (gesynchroniseerd)</translation>
 <translation id="5913377024445952699">Schermopname onderbroken</translation>
@@ -1428,6 +1430,7 @@
 <translation id="6687335167692595844">Lettergrootte aangevraagd</translation>
 <translation id="6689249931105087298">Relatief met zwartpuntcompressie</translation>
 <translation id="6689271823431384964">Chrome biedt aan je kaarten in je Google-account op te slaan omdat je bent ingelogd. Je kunt dit wijzigen in de instellingen. De naam van de kaarthouder is afkomstig uit je account.</translation>
+<translation id="6698381487523150993">Gemaakt:</translation>
 <translation id="6702919718839027939">Presenteren</translation>
 <translation id="6710213216561001401">Vorige</translation>
 <translation id="6710594484020273272">&lt;Typ een zoekterm&gt;</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 73e2ce0..7198818 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Skuff 4</translation>
 <translation id="3495081129428749620">Finn på siden
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Filnavn:</translation>
 <translation id="3507936815618196901">lage et 3D-kart av omgivelsene dine og spore kameraposisjonen</translation>
 <translation id="3512163584740124171">Denne regelen ignoreres fordi en annen regel i den samme regelgruppen har høyere prioritet.</translation>
 <translation id="3518941727116570328">Håndtering av flere objekter</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Start på nytt</translation>
 <translation id="5895187275912066135">Utstedt</translation>
 <translation id="5901630391730855834">Gul</translation>
+<translation id="5903264686717710770">Tittel:</translation>
 <translation id="5905445707201418379">Blokkert i samsvar med opphavsregelen for <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronisert)</translation>
 <translation id="5913377024445952699">Skjermopptaket er satt på pause</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Forespurt skriftstørrelse</translation>
 <translation id="6689249931105087298">Relativ med svartpunktkomprimering</translation>
 <translation id="6689271823431384964">Chrome tilbyr å lagre kort i Google-kontoen din fordi du er logget på. Du kan endre dette i innstillingene. Kortinnehaverens navn kommer fra kontoen din.</translation>
+<translation id="6698381487523150993">Opprettet:</translation>
 <translation id="6702919718839027939">Presenter</translation>
 <translation id="6710213216561001401">Forrige</translation>
 <translation id="6710594484020273272">&lt;Skriv inn en søketerm&gt;</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 25f1b85..98ca3df 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -629,6 +629,7 @@
 <translation id="3487845404393360112">ଟ୍ରେ 4</translation>
 <translation id="3495081129428749620">ପୃଷ୍ଠାରେ ଖୋଜନ୍ତୁ
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ଫାଇଲ୍ ନାମ:</translation>
 <translation id="3507936815618196901">ଆପଣଙ୍କ ପରିପାର୍ଶ୍ୱର ଏକ 3D ମ୍ୟାପ୍ ତିଆରି କରନ୍ତୁ ଏବଂ କ୍ୟାମେରା ସ୍ଥିତି ଟ୍ରାକ୍ କରନ୍ତୁ</translation>
 <translation id="3512163584740124171">ଏହି ନୀତିକୁ ଅଣଦେଖା କରାଯାଏ କାରଣ ସେହି ଏକା ନୀତି ଗୋଷ୍ଠୀ ଭିତରୁ ଅନ୍ୟ ଗୋଟିଏ ନୀତିର ପ୍ରାଧାନ୍ୟ ଅଛି।</translation>
 <translation id="3518941727116570328">ଏକାଧିକ ବସ୍ତୁର ପରିଚାଳନା</translation>
@@ -1233,6 +1234,7 @@
 <translation id="5895138241574237353">ପୁନଃଆରମ୍ଭ</translation>
 <translation id="5895187275912066135">ଜାରି କରାଯାଇଥିବା ତାରିଖ</translation>
 <translation id="5901630391730855834">ହଳଦିଆ</translation>
+<translation id="5903264686717710770">ଆଖ୍ୟା:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" />ର ମୂଳ ନୀତି ଅନୁଯାୟୀ ବ୍ଲକ୍ କରାଯାଇଛି।</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> ( ସିଙ୍କ୍‍ କରାଯାଇଛି)</translation>
 <translation id="5913377024445952699">ସ୍କ୍ରିନ୍ କ୍ୟାପଚର୍ ବିରତ କରାଯାଇଛି</translation>
@@ -1428,6 +1430,7 @@
 <translation id="6687335167692595844">ଅନୁରୋଧ କରାଯାଇଥିବା ଫଣ୍ଟ ଆକାର</translation>
 <translation id="6689249931105087298">ବ୍ଲାକ୍ ପଏଣ୍ଟ କମ୍ପ୍ରେସନ୍ ସହିତ ରିଲେଟିଭ୍</translation>
 <translation id="6689271823431384964">ଆପଣ ସାଇନ୍ ଇନ୍ କରିଥିବା ଯୋଗୁଁ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ଆପଣଙ୍କ କାର୍ଡଗୁଡ଼ିକ ସେଭ୍ କରିବାକୁ Chrome ଅଫର୍ ଦେଉଛି। ଆପଣ ସେଟିଂସ୍‌ରେ ଏହି ଆଚରଣ ପରିବର୍ତ୍ତନ କରିପାରିବେ। ଆପଣଙ୍କ ଆକାଉଣ୍ଟରୁ କାର୍ଡ ଧାରକଙ୍କ ନାମ ଆସିଛି।</translation>
+<translation id="6698381487523150993">ସୃଷ୍ଟିହେଲା:</translation>
 <translation id="6702919718839027939">ବର୍ତ୍ତମାନ</translation>
 <translation id="6710213216561001401">ପୂର୍ବବର୍ତ୍ତୀ</translation>
 <translation id="6710594484020273272">&lt;ସନ୍ଧାନ ପଦ ଟାଇପ୍ କରନ୍ତୁ&gt;</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 2569e14..8ef117b 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -1429,6 +1429,7 @@
 <translation id="6687335167692595844">ਫ਼ੌਂਟ ਆਕਾਰ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਗਈ</translation>
 <translation id="6689249931105087298">ਕਾਲੇ ਬਿੰਦੂ ਨਪੀੜਨ ਨਾਲ ਸੰਬੰਧਿਤ</translation>
 <translation id="6689271823431384964">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ ਕਰਕੇ Chrome ਤੁਹਾਡੇ ਕਾਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰ ਰਿਹਾ ਹੈ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਸ ਵਤੀਰੇ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ। ਕਾਰਡਧਾਰਕ ਦੇ ਨਾਮ ਦੀ ਜਾਣਕਾਰੀ ਤੁਹਾਡੇ ਖਾਤੇ ਤੋਂ ਮਿਲਦੀ ਹੈ।</translation>
+<translation id="6698381487523150993">ਬਣਾਇਆ:</translation>
 <translation id="6702919718839027939">ਪੇਸ਼ਕਾਰੀ ਮੋਡ</translation>
 <translation id="6710213216561001401">ਪਿਛਲਾ</translation>
 <translation id="6710594484020273272">&lt;ਖੋਜ ਸ਼ਬਦ ਟਾਈਪ ਕਰੋ&gt;</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 103faaf..55bc695 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -633,6 +633,7 @@
 <translation id="3487845404393360112">Taca 4</translation>
 <translation id="3495081129428749620">Znajdź na stronie
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nazwa pliku:</translation>
 <translation id="3507936815618196901">Tworzyć mapę 3D Twojego otoczenia i śledzić pozycję kamery.</translation>
 <translation id="3512163584740124171">Ta zasada jest ignorowana, ponieważ inna zasada z tej samej grupy zasad ma wyższy priorytet.</translation>
 <translation id="3518941727116570328">Obsługa wielu obiektów</translation>
@@ -1238,6 +1239,7 @@
 <translation id="5895138241574237353">Uruchom ponownie</translation>
 <translation id="5895187275912066135">Wystawiony dnia</translation>
 <translation id="5901630391730855834">Żółty</translation>
+<translation id="5903264686717710770">Tytuł:</translation>
 <translation id="5905445707201418379">Zablokowano zgodnie z zasadami dotyczącymi źródła obowiązującymi w przypadku strony <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (zsynchronizowane)</translation>
 <translation id="5913377024445952699">Przechwytywanie ekranu zostało wstrzymane</translation>
@@ -1434,6 +1436,7 @@
 <translation id="6687335167692595844">Zażądano rozmiaru czcionki</translation>
 <translation id="6689249931105087298">Względna z kompresją punktu czerni</translation>
 <translation id="6689271823431384964">Chrome proponuje zalogowanym użytkownikom zapisywanie kart na koncie Google. Możesz to zmienić w ustawieniach. Imię i nazwisko posiadacza karty pochodzi z Twojego konta.</translation>
+<translation id="6698381487523150993">Utworzono:</translation>
 <translation id="6702919718839027939">Tryb prezentacji</translation>
 <translation id="6710213216561001401">Poprzedni</translation>
 <translation id="6710594484020273272">&lt;Wpisz wyszukiwane słowa&gt;</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 97073140..d0675df 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">Bandeja 4</translation>
 <translation id="3495081129428749620">Encontrar na página
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nome do arquivo:</translation>
 <translation id="3507936815618196901">Criar um mapa 3D dos seus arredores e acompanhar a posição da câmera</translation>
 <translation id="3512163584740124171">Esta política é ignorada porque outra política do mesmo grupo tem uma prioridade mais alta.</translation>
 <translation id="3518941727116570328">Gerenciamento de vários objetos</translation>
@@ -1236,6 +1237,7 @@
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5895187275912066135">Emitido em</translation>
 <translation id="5901630391730855834">Amarelo</translation>
+<translation id="5903264686717710770">Título:</translation>
 <translation id="5905445707201418379">Bloqueado de acordo com a política de origem de <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5913377024445952699">Captura de tela pausada</translation>
@@ -1432,6 +1434,7 @@
 <translation id="6687335167692595844">Tamanho da fonte solicitado</translation>
 <translation id="6689249931105087298">Relativa com compressão de pontos pretos</translation>
 <translation id="6689271823431384964">A opção de salvar seus cartões na Conta do Google está disponível no Chrome porque você fez login. É possível alterar esse comportamento nas configurações. O nome do titular do cartão vem da sua conta.</translation>
+<translation id="6698381487523150993">Criado em:</translation>
 <translation id="6702919718839027939">Apresentação</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Digitar termo de pesquisa&gt;</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 7ebedd9..7c7e2b3 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Tabuleiro 4</translation>
 <translation id="3495081129428749620">Procurar na página
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nome do ficheiro:</translation>
 <translation id="3507936815618196901">Criar um mapa 3D do ambiente à sua volta e monitorizar a posição da câmara.</translation>
 <translation id="3512163584740124171">Esta política é ignorada, porque existe outra política do mesmo grupo de políticas com prioridade superior.</translation>
 <translation id="3518941727116570328">Processamento de vários objetos</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5895187275912066135">Emitido em</translation>
 <translation id="5901630391730855834">Amarelo</translation>
+<translation id="5903264686717710770">Título:</translation>
 <translation id="5905445707201418379">Bloqueado de acordo com a política de origem de <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizados)</translation>
 <translation id="5913377024445952699">Captura de ecrã em pausa</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Tamanho do tipo de letra solicitado</translation>
 <translation id="6689249931105087298">Relativa com compressão do ponto preto</translation>
 <translation id="6689271823431384964">O Chrome está a disponibilizar a opção de guardar os seus cartões na sua Conta Google porque tem sessão iniciada. Pode alterar este comportamento nas definições. O nome do titular do cartão vem da sua conta.</translation>
+<translation id="6698381487523150993">Criado:</translation>
 <translation id="6702919718839027939">Apresentar</translation>
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="6710594484020273272">&lt;Introduzir termo de pesquisa&gt;</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index bb78cec..14e85429 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -635,6 +635,7 @@
 <translation id="3487845404393360112">Tava 4</translation>
 <translation id="3495081129428749620">Caută în pagină
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Nume fișier:</translation>
 <translation id="3507936815618196901">să creeze o hartă 3D a lucrurilor din jurul tău și să urmărească poziția camerei video</translation>
 <translation id="3512163584740124171">Această politică este ignorată deoarece o altă politică din același grup de politici are prioritate ridicată.</translation>
 <translation id="3518941727116570328">Gestionarea mai multor obiecte</translation>
@@ -1245,6 +1246,7 @@
 <translation id="5895138241574237353">Reîncepe</translation>
 <translation id="5895187275912066135">Emis la</translation>
 <translation id="5901630391730855834">Galben</translation>
+<translation id="5903264686717710770">Titlul:</translation>
 <translation id="5905445707201418379">Blocat conform politicii de origine de la <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizat)</translation>
 <translation id="5913377024445952699">Funcție de realizare a capturilor întreruptă</translation>
@@ -1441,6 +1443,7 @@
 <translation id="6687335167692595844">Dimensiunea fontului solicitată</translation>
 <translation id="6689249931105087298">Relativă cu comprimarea punctelor negre</translation>
 <translation id="6689271823431384964">Chrome oferă salvarea cardurilor în Contul Google pentru că te-ai conectat. Poți schimba acest comportament în setări. Numele titularului de card vine din contul tău.</translation>
+<translation id="6698381487523150993">Creat:</translation>
 <translation id="6702919718839027939">Prezentare</translation>
 <translation id="6710213216561001401">Înapoi</translation>
 <translation id="6710594484020273272">&lt;Introdu termenul de căutare&gt;</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index f1fd492..d8aa769 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -630,6 +630,7 @@
 <translation id="3487845404393360112">Лоток 4</translation>
 <translation id="3495081129428749620">Найти на странице
     "<ph name="PAGE_TITLE" />"</translation>
+<translation id="350069200438440499">Имя файла:</translation>
 <translation id="3507936815618196901">Создание 3D-карты места, в котором вы находитесь, и отслеживание положения камеры</translation>
 <translation id="3512163584740124171">Действует правило с более высоким приоритетом.</translation>
 <translation id="3518941727116570328">Обработка нескольких объектов</translation>
@@ -1235,6 +1236,7 @@
 <translation id="5895138241574237353">Перезапустить</translation>
 <translation id="5895187275912066135">Дата выдачи</translation>
 <translation id="5901630391730855834">Желтый</translation>
+<translation id="5903264686717710770">Заголовок:</translation>
 <translation id="5905445707201418379">Заблокировано в соответствии с политикой в отношении источников <ph name="ORIGIN" /></translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (данные синхронизируются)</translation>
 <translation id="5913377024445952699">Съемка экрана приостановлена</translation>
@@ -1431,6 +1433,7 @@
 <translation id="6687335167692595844">Размер шрифта запрошен</translation>
 <translation id="6689249931105087298">Относительный со сжатием точки черного цвета</translation>
 <translation id="6689271823431384964">Chrome предлагает вам сохранить карты в аккаунте Google, поскольку вы вошли в систему. Этот параметр можно изменить в разделе настроек. Имя владельца карты взято из вашего аккаунта.</translation>
+<translation id="6698381487523150993">Создано:</translation>
 <translation id="6702919718839027939">Режим презентации</translation>
 <translation id="6710213216561001401">Назад</translation>
 <translation id="6710594484020273272">&lt;Введите поисковый запрос&gt;</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index b6f7b2e..116c509 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -1438,6 +1438,7 @@
 <translation id="6687335167692595844">අකුරු ප්‍රමාණය ඉල්ලුවා</translation>
 <translation id="6689249931105087298">කළු ලක්‍ෂ්‍ය සම්පීඩනයට අදාළ</translation>
 <translation id="6689271823431384964">ඔබ පුරනය වී සිටින බැවින් Chrome ඔබට ඔබේ කාඩ්පත් ඔබේ Google ගිණුමට සුරැකීම පිරිනමයි. ඔබට මෙම හැසිරීම සැකසීම් තුළ වෙනස් කළ හැක. කාඩ්පත් හිමිකරුගේ නම ඔබේ ගිණුමෙන් ලැබේ.</translation>
+<translation id="6698381487523150993">නිර්මිත:</translation>
 <translation id="6702919718839027939">ඉදිරිපත් කරන්න</translation>
 <translation id="6710213216561001401">පෙර</translation>
 <translation id="6710594484020273272">&lt;සෙවීම් පදය ටයිප් කරන්න&gt;</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index b2ff0c35..12377101 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -628,6 +628,7 @@
 <translation id="3487845404393360112">Priehradka č. 4</translation>
 <translation id="3495081129428749620">Nájsť na stránke
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Názov súboru:</translation>
 <translation id="3507936815618196901">Vytvorenie 3D mapy vášho okolia a sledovanie umiestnenia kamier</translation>
 <translation id="3512163584740124171">Toto pravidlo sa ignoruje, pretože iné pravidlo z rovnakej skupiny má vyššiu prioritu.</translation>
 <translation id="3518941727116570328">Spracúvanie viacerých objektov</translation>
@@ -1232,6 +1233,7 @@
 <translation id="5895138241574237353">Reštartovať</translation>
 <translation id="5895187275912066135">Vydané dňa</translation>
 <translation id="5901630391730855834">Žltá</translation>
+<translation id="5903264686717710770">Názov:</translation>
 <translation id="5905445707201418379">Blokované pravidlom pre zdroj <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizované)</translation>
 <translation id="5913377024445952699">Snímanie obrazovky bolo pozastavené</translation>
@@ -1427,6 +1429,7 @@
 <translation id="6687335167692595844">Bola vyžiadaná veľkosť písma</translation>
 <translation id="6689249931105087298">Relatívne s kompresiou čierneho bodu</translation>
 <translation id="6689271823431384964">Chrome poskytuje možnosť uložiť karty v účte Google, pretože ste sa prihlásili. Toto správanie môžete zmeniť v nastaveniach. Toto meno majiteľa karty pochádza z vášho účtu.</translation>
+<translation id="6698381487523150993">Vytvorené:</translation>
 <translation id="6702919718839027939">Prezentovať</translation>
 <translation id="6710213216561001401">Späť</translation>
 <translation id="6710594484020273272">&lt;Zadajte hľadaný výraz&gt;</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 23ff7da6..ff3a86e0 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Pladenj 4</translation>
 <translation id="3495081129428749620">Iskanje na strani
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Ime datoteke:</translation>
 <translation id="3507936815618196901">Ustvarjanje 3D-zemljevida vaše okolice in spremljanje položaja kamere</translation>
 <translation id="3512163584740124171">Ta pravilnik se prezre, ker ima drug pravilnik iz iste skupine pravilnikov prednost.</translation>
 <translation id="3518941727116570328">Obravnava več predmetov</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Znova zaženi</translation>
 <translation id="5895187275912066135">Izdano dne</translation>
 <translation id="5901630391730855834">Rumena</translation>
+<translation id="5903264686717710770">Naslov:</translation>
 <translation id="5905445707201418379">Blokirano v skladu s pravilnikom izvora za <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizirano)</translation>
 <translation id="5913377024445952699">Začasno zaustavljeno zajemanje slike zaslona</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Zahtevana je velikost besedila</translation>
 <translation id="6689249931105087298">Relativno s stiskanjem črnih pik</translation>
 <translation id="6689271823431384964">Chrome ponuja shranjevanje kartic v račun za Google, ker ste prijavljeni. To lahko spremenite v nastavitvah. Ime imetnika računa je iz vašega računa.</translation>
+<translation id="6698381487523150993">Ustvarjeno:</translation>
 <translation id="6702919718839027939">Predstavitev</translation>
 <translation id="6710213216561001401">Prejšnji</translation>
 <translation id="6710594484020273272">&lt;Vnesite iskalno poizvedbo&gt;</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index f1a1bb2..471c395c 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1437,6 +1437,7 @@
 <translation id="6687335167692595844">Kërkohet madhësia e fontit</translation>
 <translation id="6689249931105087298">Relative me ngjeshjen e pikës së zezë</translation>
 <translation id="6689271823431384964">Chrome po ofron që të ruash kartat e tua në "Llogarinë tënde të Google" sepse je identifikuar. Mund ta ndryshosh këtë sjellje te cilësimet. Emri i mbajtësit të kartës vjen nga llogaria jote.</translation>
+<translation id="6698381487523150993">Krijuar:</translation>
 <translation id="6702919718839027939">Prezantim</translation>
 <translation id="6710213216561001401">Prapa</translation>
 <translation id="6710594484020273272">&lt;Shkruaj termin e kërkimit&gt;</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 74db657..e3be836 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">4. fioka</translation>
 <translation id="3495081129428749620">Pronađite na stranici
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Ime datoteke:</translation>
 <translation id="3507936815618196901">Pravi 3D mapu okruženja i prati položaj kamere</translation>
 <translation id="3512163584740124171">Ove smernice su zanemarene jer druge smernice iz iste grupe smernica imaju prednost.</translation>
 <translation id="3518941727116570328">Obrada više predmeta</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Pokreni ponovo</translation>
 <translation id="5895187275912066135">Izdato</translation>
 <translation id="5901630391730855834">Žuta</translation>
+<translation id="5903264686717710770">Naslov:</translation>
 <translation id="5905445707201418379">Blokirano je u skladu sa smernicama za poreklo (<ph name="ORIGIN" />).</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizovano)</translation>
 <translation id="5913377024445952699">Snimanje ekrana je pauzirano</translation>
@@ -1442,6 +1444,7 @@
 <translation id="6687335167692595844">Zatražena je veličina fonta</translation>
 <translation id="6689249931105087298">Relativno sa kompresijom crnih tačaka</translation>
 <translation id="6689271823431384964">Chrome vam nudi čuvanje kartica na Google nalogu zato što ste prijavljeni. To možete da promenite u podešavanjima. Ime vlasnika kartice smo uzeli sa naloga.</translation>
+<translation id="6698381487523150993">Napravljeno:</translation>
 <translation id="6702919718839027939">Prezentacija</translation>
 <translation id="6710213216561001401">Prethodno</translation>
 <translation id="6710594484020273272">&lt;Unesite termin za pretragu&gt;</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index c6f95b6..091dda2f 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">4. фиока</translation>
 <translation id="3495081129428749620">Пронађите на страници
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Име датотеке:</translation>
 <translation id="3507936815618196901">Прави 3D мапу окружења и прати положај камере</translation>
 <translation id="3512163584740124171">Ове смернице су занемарене јер друге смернице из исте групе смерница имају предност.</translation>
 <translation id="3518941727116570328">Обрада више предмета</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Покрени поново</translation>
 <translation id="5895187275912066135">Издато</translation>
 <translation id="5901630391730855834">Жута</translation>
+<translation id="5903264686717710770">Наслов:</translation>
 <translation id="5905445707201418379">Блокирано је у складу са смерницама за порекло (<ph name="ORIGIN" />).</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизовано)</translation>
 <translation id="5913377024445952699">Снимање екрана је паузирано</translation>
@@ -1442,6 +1444,7 @@
 <translation id="6687335167692595844">Затражена је величина фонта</translation>
 <translation id="6689249931105087298">Релативно са компресијом црних тачака</translation>
 <translation id="6689271823431384964">Chrome вам нуди чување картица на Google налогу зато што сте пријављени. То можете да промените у подешавањима. Име власника картице смо узели са налога.</translation>
+<translation id="6698381487523150993">Направљено:</translation>
 <translation id="6702919718839027939">Презентација</translation>
 <translation id="6710213216561001401">Претходно</translation>
 <translation id="6710594484020273272">&lt;Унесите термин за претрагу&gt;</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index fb70fd74..d73b81c 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Fack 4</translation>
 <translation id="3495081129428749620">Hitta på sidan
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Filnamn:</translation>
 <translation id="3507936815618196901">Skapa en 3D-karta över dina omgivningar och registrera kamerans position</translation>
 <translation id="3512163584740124171">Den här principen ignoreras eftersom en annan princip i samma principgrupp har högre prioritet.</translation>
 <translation id="3518941727116570328">Hantering av flera objekt</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Starta om</translation>
 <translation id="5895187275912066135">Utfärdat</translation>
 <translation id="5901630391730855834">Gul</translation>
+<translation id="5903264686717710770">Namn:</translation>
 <translation id="5905445707201418379">Blockerad i enlighet med ursprungsprincipen på <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniserade)</translation>
 <translation id="5913377024445952699">Skärmbild/skärminspelning har pausats</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Teckenstorlek begärd</translation>
 <translation id="6689249931105087298">Relativ med svartpunktskomprimering</translation>
 <translation id="6689271823431384964">Chrome ger möjlighet att spara dina kort i ditt Google-konto eftersom du är inloggad. Du kan ändra detta i inställningarna. Kortinnehavarens namn hämtas från ditt konto.</translation>
+<translation id="6698381487523150993">Skapad av:</translation>
 <translation id="6702919718839027939">Presentera</translation>
 <translation id="6710213216561001401">Föregående</translation>
 <translation id="6710594484020273272">&lt;Ange sökterm&gt;</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index b952b70..ebdd15b8 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -636,6 +636,7 @@
 <translation id="3487845404393360112">Trei ya nne</translation>
 <translation id="3495081129428749620">Pata katika ukurasa wa
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Jina la faili:</translation>
 <translation id="3507936815618196901">Kubuni ramani ya 3D ya mazingira yako na kufuatilia mkao wa kamera</translation>
 <translation id="3512163584740124171">Sera hii haitumiki kwa sababu sera nyingine kutoka kundi sawa la sera inapewa kipaumbele zaidi.</translation>
 <translation id="3518941727116570328">Kushughulikia vipengee vingi</translation>
@@ -1246,6 +1247,7 @@
 <translation id="5895138241574237353">Zzima na uwashe</translation>
 <translation id="5895187275912066135">Kilitolewa</translation>
 <translation id="5901630391730855834">Manjano</translation>
+<translation id="5903264686717710770">Kichwa:</translation>
 <translation id="5905445707201418379">Imezuiwa kulingana na sera ya asili ya <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (imesawazishwa)</translation>
 <translation id="5913377024445952699">Kipengele cha kupiga picha ya skrini kimesitishwa</translation>
@@ -1442,6 +1444,7 @@
 <translation id="6687335167692595844">Imeomba ukubwa wa fonti</translation>
 <translation id="6689249931105087298">Ya kiwango cha kati yenye sehemu nyeusi iliyobanwa</translation>
 <translation id="6689271823431384964">Chrome itakuhifadhia kadi zako katika Akaunti yako ya Google kwa sababu umeingia katika akaunti. Unaweza kubadilisha hali hii katika mipangilio. Jina la mwenye kadi linatoka kwenye akaunti yako.</translation>
+<translation id="6698381487523150993">Imeundwa</translation>
 <translation id="6702919718839027939">Wasilisha</translation>
 <translation id="6710213216561001401">Iliyopita</translation>
 <translation id="6710594484020273272">&lt;Andika neno unalotaka kutafuta&gt;</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 42a7dfe..8f66ace0 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -631,6 +631,7 @@
 <translation id="3484560055331845446">உங்கள் Google கணக்கிற்கான அணுகலை நீங்கள் இழக்கக்கூடும். இப்போதே உங்கள் கடவுச்சொல்லை மாற்றுமாறு Chrome பரிந்துரைக்கிறது. அதற்கு நீங்கள் உள்நுழைய வேண்டும்.</translation>
 <translation id="3487845404393360112">தட்டு 4</translation>
 <translation id="3495081129428749620"><ph name="PAGE_TITLE" /> பக்கத்தில் கண்டறிக</translation>
+<translation id="350069200438440499">கோப்பு பெயர்:</translation>
 <translation id="3507936815618196901">உங்களைச் சுற்றியுள்ள இடங்களின் 3D மேப்பை உருவாக்கவும் கேமரா நிலையை டிராக் செய்யவும் விரும்புகிறது</translation>
 <translation id="3512163584740124171">அதே கொள்கை வகையைச் சார்ந்த வேறொன்று அதிக முக்கியத்துவம் வாய்ந்தது என்பதால் இந்தக் கொள்கை ஏற்றுக் கொள்ளப்படவில்லை.</translation>
 <translation id="3518941727116570328">பல பொருட்களைக் கையாளுதல்</translation>
@@ -1241,6 +1242,7 @@
 <translation id="5895138241574237353">மறுதொடக்கம்</translation>
 <translation id="5895187275912066135">வழங்கப்பட்டது</translation>
 <translation id="5901630391730855834">மஞ்சள்</translation>
+<translation id="5903264686717710770">தலைப்பு:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> இன் அசல் கொள்கையின்படி தடுக்கப்பட்டுள்ளது.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ஒத்திசைக்கப்பட்டது)</translation>
 <translation id="5913377024445952699">ஸ்கிரீன்ஷாட் எடுப்பது இடைநிறுத்தப்பட்டது</translation>
@@ -1436,6 +1438,7 @@
 <translation id="6687335167692595844">கோரப்பட்ட எழுத்துரு அளவு</translation>
 <translation id="6689249931105087298">கறுப்புப் புள்ளிச் சுருக்கத்துடன் சார்புடையது</translation>
 <translation id="6689271823431384964">நீங்கள் உள்நுழைந்துள்ளதால் Google கணக்கில் உங்கள் கார்டு விவரங்களைச் சேமிக்கும் விருப்பத்தை Chrome வழங்குகிறது. இதை நீங்கள் அமைப்புகளில் மாற்றலாம். கார்டு உரிமையாளரின் பெயர் உங்கள் கணக்கிலிருந்து பெறப்படுகிறது.</translation>
+<translation id="6698381487523150993">உருவாக்கப்பட்டது:</translation>
 <translation id="6702919718839027939">ஸ்கிரீனைப் பகிர்</translation>
 <translation id="6710213216561001401">முந்தையது</translation>
 <translation id="6710594484020273272">&lt;தேடல் வார்த்தையை உள்ளிடுக&gt;</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 0ac7b69..e0832378 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">ట్రే 4</translation>
 <translation id="3495081129428749620">పేజీలో కనుగొను
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ఫైల్ పేరు:</translation>
 <translation id="3507936815618196901">మీ పరిసరాల 3D మ్యాప్‌ను రూపొందించడం, అలాగే కెమెరా పొజిషన్‌ను ట్రాక్ చేయడం</translation>
 <translation id="3512163584740124171">ఈ విధానం విస్మరించబడుతుంది, ఎందుకంటే ఒకే విధాన సమూహం నుండి మరొక విధానం అధిక ప్రాధాన్యతను కలిగి ఉంది.</translation>
 <translation id="3518941727116570328">అనేక వస్తువులను హ్యాండిల్ చేయడం</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">మళ్ళీ ప్రారంభించు</translation>
 <translation id="5895187275912066135">జారీ చేయబడినది</translation>
 <translation id="5901630391730855834">పసుపు</translation>
+<translation id="5903264686717710770">శీర్షిక:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> యొక్క ఆరిజిన్ ఎర్రర్ విధానం ప్రకారం బ్లాక్ చేయబడింది.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (సమకాలీకరించబడింది)</translation>
 <translation id="5913377024445952699">స్క్రీన్‌ను క్యాప్చర్ చేయడం పాజ్ చేయబడింది</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">అభ్యర్థించబడిన ఫాంట్ పరిమాణం</translation>
 <translation id="6689249931105087298">సంబంధిత బ్లాక్ పాయింట్ కంప్రెషన్</translation>
 <translation id="6689271823431384964">మీరు సైన్ ఇన్ చేసి ఉన్నందున, మీ కార్డ్‌లను మీ Google ఖాతాలో సేవ్ చేసుకోగల అవకాశాన్ని Chrome మీకు అందిస్తోంది. మీరు సెట్టింగ్‌లలో ఈ ప్రవర్తనను మార్చవచ్చు. కార్డుదారుడి పేరు మీ ఖాతా నుండి అందించబడింది.</translation>
+<translation id="6698381487523150993">సృష్టించబడింది:</translation>
 <translation id="6702919718839027939">పిన్ చేయండి</translation>
 <translation id="6710213216561001401">మునుపటి</translation>
 <translation id="6710594484020273272">&lt;శోధన పదాన్ని టైప్ చేయండి&gt;</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 9b4f10a..df330223 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -630,6 +630,7 @@
 <translation id="3484560055331845446">คุณอาจสูญเสียสิทธิ์เข้าถึงบัญชี Google ของคุณ Chrome ขอแนะนำให้เปลี่ยนรหัสผ่านทันที ระบบจะขอให้คุณลงชื่อเข้าใช้</translation>
 <translation id="3487845404393360112">ถาด 4</translation>
 <translation id="3495081129428749620">ค้นหาในหน้าเว็บ <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">ชื่อไฟล์:</translation>
 <translation id="3507936815618196901">สร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณและติดตามตำแหน่งของกล้อง</translation>
 <translation id="3512163584740124171">ระบบจะไม่สนใจนโยบายนี้เพราะอีกนโยบายหนึ่งจากกลุ่มนโยบายเดียวกันมีลำดับความสำคัญสูงกว่า</translation>
 <translation id="3518941727116570328">การจัดการออบเจ็กต์หลายรายการ</translation>
@@ -1235,6 +1236,7 @@
 <translation id="5895138241574237353">ปิดแล้วเปิดอีกครั้ง</translation>
 <translation id="5895187275912066135">ออกเมื่อ</translation>
 <translation id="5901630391730855834">สีเหลือง</translation>
+<translation id="5903264686717710770">ชื่อ:</translation>
 <translation id="5905445707201418379">ถูกบล็อกตามนโยบายดั้งเดิมของ <ph name="ORIGIN" /></translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ซิงค์แล้ว)</translation>
 <translation id="5913377024445952699">การจับภาพหน้าจอหยุดอยู่ชั่วคราว</translation>
@@ -1431,6 +1433,7 @@
 <translation id="6687335167692595844">ขอขนาดแบบอักษรแล้ว</translation>
 <translation id="6689249931105087298">สัมพัทธ์กับการบีบจุดสีดำ</translation>
 <translation id="6689271823431384964">Chrome เสนอที่จะบันทึกบัตรลงในบัญชี Google ของคุณเพราะคุณลงชื่อเข้าใช้อยู่ คุณปรับเปลี่ยนลักษณะการทำงานนี้ได้ในการตั้งค่า ชื่อผู้ถือบัตรมาจากบัญชีของคุณ</translation>
+<translation id="6698381487523150993">สร้าง:</translation>
 <translation id="6702919718839027939">การนำเสนอ</translation>
 <translation id="6710213216561001401">ก่อนหน้า</translation>
 <translation id="6710594484020273272">&lt;พิมพ์ข้อความค้นหา&gt;</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 005bc9d..35cb6a60 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -351,7 +351,7 @@
 <translation id="2288422996159078444">Yazdığınız her şey, görüntülediğiniz her sayfa ve web'deki diğer tüm etkinlikleriniz izlenir. Sitelerdeki içerik, bilginiz dışında değiştirilebilir.</translation>
 <translation id="2289385804009217824">Kırp</translation>
 <translation id="2292556288342944218">İnternet erişiminiz engellendi</translation>
-<translation id="2293443924986248631">Etkinleştirildiğinde, siteler sizi web'de takip eden çerezler kullanamaz. Bazı sitelerdeki özellikler bozulabilir.</translation>
+<translation id="2293443924986248631">Etkinleştirildiğinde, siteler sizi web'de takip eden çerezler kullanamaz. Bazı sitelerdeki özellikler çalışmayabilir.</translation>
 <translation id="2295290966866883927">Ziyaret ettiğiniz sayfaların URL'leri analiz amacıyla Google Cloud'a veya üçüncü taraflara gönderilir. Örneğin, güvenli olmayan web sitelerini tespit etmek için taranabilirler.</translation>
 <translation id="2297722699537546652">B5 (Zarf)</translation>
 <translation id="2300306941146563769">Yüklenmeyenler</translation>
@@ -632,6 +632,7 @@
 <translation id="3487845404393360112">Tepsi 4</translation>
 <translation id="3495081129428749620">Şu sayfada bul:
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Dosya adı:</translation>
 <translation id="3507936815618196901">Çevrenizin 3D haritasını oluşturma ve kamera konumunu takip etme</translation>
 <translation id="3512163584740124171">Aynı politika grubundan farklı bir politika daha yüksek önceliği sahip olduğundan bu politika yok sayılır.</translation>
 <translation id="3518941727116570328">Birden çok nesne işleme</translation>
@@ -1238,6 +1239,7 @@
 <translation id="5895138241574237353">Yeniden başlat</translation>
 <translation id="5895187275912066135">Verildiği Tarih</translation>
 <translation id="5901630391730855834">Sarı</translation>
+<translation id="5903264686717710770">Başlık:</translation>
 <translation id="5905445707201418379"><ph name="ORIGIN" /> sitesinin kaynak politikası uyarınca engellendi.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (senkronize edildi)</translation>
 <translation id="5913377024445952699">Ekran görüntüsü alma duraklatıldı</translation>
@@ -1434,6 +1436,7 @@
 <translation id="6687335167692595844">Yazı tipi boyutu istendi</translation>
 <translation id="6689249931105087298">Siyah nokta sıkıştırma ile göreli</translation>
 <translation id="6689271823431384964">Chrome, oturumunuz açık olduğu için kartlarınızı Google Hesabınıza kaydetmeyi öneriyor. Bu davranışı ayarlardan değiştirebilirsiniz. Kart sahibinin adı hesabınızdan gelir.</translation>
+<translation id="6698381487523150993">Oluşturma tarihi:</translation>
 <translation id="6702919718839027939">Sunum</translation>
 <translation id="6710213216561001401">Önceki</translation>
 <translation id="6710594484020273272">&lt;Arama terimini yazın&gt;</translation>
@@ -1959,7 +1962,7 @@
 <translation id="8805819170075074995">Liste girişi "<ph name="LANGUAGE_ID" />": Giriş, SpellcheckLanguage politikasında da yer aldığı için yoksayıldı.</translation>
 <translation id="8807160976559152894">Her sayfadan sonra kırp</translation>
 <translation id="8816395686387277279"><ph name="UPDATE_CHROME_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome ayarlarınızdan Chrome'u güncellemek için Sekme'ye, sonra Enter'a basın</translation>
-<translation id="8820817407110198400">Favoriler</translation>
+<translation id="8820817407110198400">Yer işaretleri</translation>
 <translation id="883848425547221593">Diğer Yer İşaretleri</translation>
 <translation id="884264119367021077">Gönderim adresi</translation>
 <translation id="884923133447025588">İptal mekanizması bulunamadı.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 1e0006fc..44f6c06b 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -635,6 +635,7 @@
 <translation id="3487845404393360112">Лоток 4</translation>
 <translation id="3495081129428749620">Знайти на сторінці
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Ім'я файлу:</translation>
 <translation id="3507936815618196901">Створити 3D-карту вашого оточення та відстежувати положення камери</translation>
 <translation id="3512163584740124171">Це правило ігнорується, оскільки інше правило цієї групи має вищий пріоритет.</translation>
 <translation id="3518941727116570328">Обробка кількох об'єктів</translation>
@@ -1245,6 +1246,7 @@
 <translation id="5895138241574237353">Перезапустити</translation>
 <translation id="5895187275912066135">Дата видачі</translation>
 <translation id="5901630391730855834">Жовтий</translation>
+<translation id="5903264686717710770">Заголовок:</translation>
 <translation id="5905445707201418379">Заблоковано відповідно до правила джерела <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронізовано)</translation>
 <translation id="5913377024445952699">Зйомку екрана призупинено</translation>
@@ -1441,6 +1443,7 @@
 <translation id="6687335167692595844">Запит на розмір шрифту</translation>
 <translation id="6689249931105087298">Відносно стиснення чорної точки</translation>
 <translation id="6689271823431384964">Chrome пропонує вам зберегти картки в обліковому записі Google, оскільки ви ввійшли в нього. Це можна змінити в налаштуваннях. Ім'я власника картки взято з вашого облікового запису.</translation>
+<translation id="6698381487523150993">Створено:</translation>
 <translation id="6702919718839027939">Презентація</translation>
 <translation id="6710213216561001401">Назад</translation>
 <translation id="6710594484020273272">&lt;Введіть пошуковий термін&gt;</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index b4b411e..2e97c0d 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -1447,6 +1447,7 @@
 <translation id="6687335167692595844">فونٹ سائز کی درخواست کی گئی</translation>
 <translation id="6689249931105087298">سیاہ پوائنٹ کمپریشن کے ساتھ متعلقہ</translation>
 <translation id="6689271823431384964">‏آپ کے سائن ان ہونے کی وجہ سے Chrome آپ کے کارڈز کو آپ کے Google اکاؤنٹ میں محفوظ کرنے کی پیشکش کر رہا ہے۔ آپ اس برتاؤ کو ترتیبات میں تبدیل کر سکتے ہیں۔ کارڈ ہولڈر کے نام کا تعلق آپ کے اکاؤنٹ سے ہے۔</translation>
+<translation id="6698381487523150993">بنا دی گئی:</translation>
 <translation id="6702919718839027939">پیش کریں</translation>
 <translation id="6710213216561001401">گزشتہ</translation>
 <translation id="6710594484020273272">&lt;تلاش کی اصطلاح ٹائپ کریں&gt;</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index 0f1d01d..bccc8a1 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -1437,6 +1437,7 @@
 <translation id="6687335167692595844">Shrift oʻlchami talab qilindi</translation>
 <translation id="6689249931105087298">Qora nuqta tejalishiga aloqador</translation>
 <translation id="6689271823431384964">Hisobingizga kirganingiz uchun Chrome kartalarni Google hisobingizga saqlashni taklif qilmoqda. Buni sozlamalar orqali oʻzgartirish mumkin. Karta egasining ismi hisobingizdan olinadi.</translation>
+<translation id="6698381487523150993">Yaratilgan sanasi:</translation>
 <translation id="6702919718839027939">Taqdimot</translation>
 <translation id="6710213216561001401">Avvalgi</translation>
 <translation id="6710594484020273272">&lt;Qidiruv so‘rovini kiriting&gt;</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index cc0f2b86..04c89bbb 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -637,6 +637,7 @@
 <translation id="3487845404393360112">Khay 4</translation>
 <translation id="3495081129428749620">Tìm trong trang
     <ph name="PAGE_TITLE" /></translation>
+<translation id="350069200438440499">Tên tệp:</translation>
 <translation id="3507936815618196901">Tạo bản đồ 3D về các khu vực xung quanh bạn và theo dõi thông tin vị trí của máy ảnh</translation>
 <translation id="3512163584740124171">Chính sách này bị bỏ qua vì một chính sách khác thuộc cùng nhóm chính sách có mức ưu tiên cao hơn.</translation>
 <translation id="3518941727116570328">Xử lý nhiều đối tượng</translation>
@@ -1247,6 +1248,7 @@
 <translation id="5895138241574237353">Khởi động lại</translation>
 <translation id="5895187275912066135">Cấp vào</translation>
 <translation id="5901630391730855834">Vàng</translation>
+<translation id="5903264686717710770">Tiêu đề:</translation>
 <translation id="5905445707201418379">Bị chặn theo chính sách nguồn gốc của <ph name="ORIGIN" />.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (được đồng bộ hóa)</translation>
 <translation id="5913377024445952699">Tính năng chụp ảnh màn hình bị tạm dừng</translation>
@@ -1443,6 +1445,7 @@
 <translation id="6687335167692595844">Kích thước phông chữ đã yêu cầu</translation>
 <translation id="6689249931105087298">Tương đối có nén điểm đen</translation>
 <translation id="6689271823431384964">Chrome đang đề xuất lưu thẻ của bạn vào Tài khoản Google vì bạn đã đăng nhập. Bạn có thể thay đổi hoạt động này trong phần cài đặt. Tên chủ thẻ được lấy từ tài khoản của bạn.</translation>
+<translation id="6698381487523150993">Tạo:</translation>
 <translation id="6702919718839027939">Thuyết trình</translation>
 <translation id="6710213216561001401">Trước</translation>
 <translation id="6710594484020273272">&lt;Nhập cụm từ tìm kiếm&gt;</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index fd6f852..93de499 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -355,7 +355,7 @@
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">未上传</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
-<translation id="2316887270356262533">释放了不到 1 MB。当您下次访问时,某些网站的加载速度可能会更慢。</translation>
+<translation id="2316887270356262533">释放不到 1 MB 空间。当您下次访问时,某些网站的加载速度可能会更慢。</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> 要求提供用户名和密码。</translation>
 <translation id="2330137317877982892"><ph name="CREDIT_CARD" />,到期时间:<ph name="EXPIRATION_DATE_ABBR" /></translation>
 <translation id="2337852623177822836">设置由管理员控制</translation>
@@ -628,6 +628,7 @@
 <translation id="3484560055331845446">您可能会无法再访问自己的 Google 帐号。Chrome 建议您立即更改密码。系统会要求您登录。</translation>
 <translation id="3487845404393360112">纸匣 4</translation>
 <translation id="3495081129428749620">在网页“<ph name="PAGE_TITLE" />”中查找</translation>
+<translation id="350069200438440499">文件名:</translation>
 <translation id="3507936815618196901">为您的周边环境创建 3D 地图并跟踪摄像头位置</translation>
 <translation id="3512163584740124171">此政策会被忽略,因为同一政策组中的另一个政策具有更高的优先级。</translation>
 <translation id="3518941727116570328">多对象处理</translation>
@@ -1232,6 +1233,7 @@
 <translation id="5895138241574237353">重新启动</translation>
 <translation id="5895187275912066135">颁发日期</translation>
 <translation id="5901630391730855834">黄色</translation>
+<translation id="5903264686717710770">标题:</translation>
 <translation id="5905445707201418379">已根据 <ph name="ORIGIN" /> 的来源政策而屏蔽。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(已同步)</translation>
 <translation id="5913377024445952699">屏幕截取功能已暂停</translation>
@@ -1341,7 +1343,7 @@
 <translation id="6328639280570009161">请尝试停用网络联想查询功能</translation>
 <translation id="6328784461820205019">“您的连接不是私密连接”、“&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;”、“&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;”、“&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;”、“&lt;span class="error-code"&gt;ERR_CERT_SYMANTEC_LEGACY&lt;/span&gt;”或“SSL 证书错误”</translation>
 <translation id="6328786501058569169">此网站是欺骗性网站</translation>
-<translation id="6337133576188860026">释放了不到 <ph name="SIZE" />。当您下次访问时,某些网站的加载速度可能会更慢。</translation>
+<translation id="6337133576188860026">释放不到 <ph name="SIZE" /> 空间。当您下次访问时,某些网站的加载速度可能会更慢。</translation>
 <translation id="6337534724793800597">按名称过滤政策</translation>
 <translation id="6349101878882523185">安装“<ph name="APP_NAME" />”</translation>
 <translation id="6353505687280762741">{COUNT,plural, =0{无}=1{1 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}=2{2 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}other{# 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}}</translation>
@@ -1427,6 +1429,7 @@
 <translation id="6687335167692595844">请求的字号</translation>
 <translation id="6689249931105087298">相对(使用黑点压缩)</translation>
 <translation id="6689271823431384964">Chrome 正在询问是否要将卡保存到您的 Google 帐号中,因为您已登录。您可在“设置”中更改此行为。持卡人姓名来自您的帐号。</translation>
+<translation id="6698381487523150993">创建时间:</translation>
 <translation id="6702919718839027939">演示</translation>
 <translation id="6710213216561001401">上一项</translation>
 <translation id="6710594484020273272">&lt;输入搜索字词&gt;</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index 107e29819..8882b42 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -630,6 +630,7 @@
 <translation id="3484560055331845446">您可能會失去 Google 帳戶存取權。Chrome 建議您立即變更密碼。系統會要求您登入。</translation>
 <translation id="3487845404393360112">紙匣 4</translation>
 <translation id="3495081129428749620">喺「<ph name="PAGE_TITLE" />」網頁度搵</translation>
+<translation id="350069200438440499">檔案名稱:</translation>
 <translation id="3507936815618196901">建立您身處環境的 3D 地圖並追蹤攝錄機位置</translation>
 <translation id="3512163584740124171">由於相同政策群組中有其他政策的優先順序更高,因此系統已忽略此政策。</translation>
 <translation id="3518941727116570328">多物件處理</translation>
@@ -1235,6 +1236,7 @@
 <translation id="5895138241574237353">重新啟動</translation>
 <translation id="5895187275912066135">發行日期</translation>
 <translation id="5901630391730855834">黃色</translation>
+<translation id="5903264686717710770">標題:</translation>
 <translation id="5905445707201418379">已根據 <ph name="ORIGIN" /> 的安全政策封鎖。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (已同步)</translation>
 <translation id="5913377024445952699">已暫停擷取螢幕畫面</translation>
@@ -1431,6 +1433,7 @@
 <translation id="6687335167692595844">要求的字型大小</translation>
 <translation id="6689249931105087298">與黑點壓縮相對</translation>
 <translation id="6689271823431384964">由於您已登入,因此 Chrome 提議將您的付款卡儲存至 Google 帳戶。您可在設定中變更此行為。持卡人姓名來自您的帳戶。</translation>
+<translation id="6698381487523150993">已建立:</translation>
 <translation id="6702919718839027939">簡報</translation>
 <translation id="6710213216561001401">上一個</translation>
 <translation id="6710594484020273272">&lt;輸入搜尋字詞&gt;</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 83ed130..962239ee 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -631,6 +631,7 @@
 <translation id="3487845404393360112">紙匣 4</translation>
 <translation id="3495081129428749620">在
     「<ph name="PAGE_TITLE" />」網頁中尋找</translation>
+<translation id="350069200438440499">檔案名稱:</translation>
 <translation id="3507936815618196901">根據你的周遭環境建立 3D 地圖並追蹤攝影機位置</translation>
 <translation id="3512163584740124171">由於相同政策群組中有其他政策的優先順序更高,因此系統已忽略這項政策。</translation>
 <translation id="3518941727116570328">多個物件處理</translation>
@@ -1236,6 +1237,7 @@
 <translation id="5895138241574237353">重新啟動</translation>
 <translation id="5895187275912066135">發行日期</translation>
 <translation id="5901630391730855834">黃色</translation>
+<translation id="5903264686717710770">標題:</translation>
 <translation id="5905445707201418379">已根據「<ph name="ORIGIN" />」的來源政策加以封鎖。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (已同步)</translation>
 <translation id="5913377024445952699">已暫停擷取螢幕畫面</translation>
@@ -1432,6 +1434,7 @@
 <translation id="6687335167692595844">要求的字型大小</translation>
 <translation id="6689249931105087298">與黑點壓縮相對</translation>
 <translation id="6689271823431384964">你已登入帳戶,因此 Chrome 詢問你是否要將卡片儲存至 Google 帳戶。你可以在設定中變更這項行為。持卡人姓名來自你的帳戶。</translation>
+<translation id="6698381487523150993">建立於:</translation>
 <translation id="6702919718839027939">簡報</translation>
 <translation id="6710213216561001401">返回</translation>
 <translation id="6710594484020273272">&lt;輸入搜尋字詞&gt;</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 2cde8b3..7f0c4e2 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -1440,6 +1440,7 @@
 <translation id="6687335167692595844">Usayizi wefonti eceliwe</translation>
 <translation id="6689249931105087298">Kuhlobene nephoyinti elimnyama lokucindezela</translation>
 <translation id="6689271823431384964">I-Chrome inikeza ngokulondoloza amakhadi akho ku-akhawunti yakho ye-Google ngoba ungene ngemvume. Ungashintsha le mpatho kuzilungiselelo. Igama lomnikazi wekhadi livela ku-akhawunti yakho.</translation>
+<translation id="6698381487523150993">Idalwe:</translation>
 <translation id="6702919718839027939">Okwamanje</translation>
 <translation id="6710213216561001401">Okwedlule</translation>
 <translation id="6710594484020273272">&lt;Thayipha itemu lokusesha&gt;</translation>
diff --git a/components/translate/OWNERS b/components/translate/OWNERS
index 420b2c6..9be5fe7 100644
--- a/components/translate/OWNERS
+++ b/components/translate/OWNERS
@@ -15,3 +15,7 @@
 napper@chromium.org
 sclittle@chromium.org
 toyoshim@chromium.org
+
+# Specialized reviewers
+# UMA and UKM translate metrics
+curranmax@chromium.org
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc
index bea492a..7438c791 100644
--- a/content/browser/accessibility/browser_accessibility_com_win.cc
+++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -498,6 +498,7 @@
 IFACEMETHODIMP BrowserAccessibilityComWin::get_hyperlink(
     LONG index,
     IAccessibleHyperlink** hyperlink) {
+  *hyperlink = nullptr;
   WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_HYPERLINK);
   AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
   if (!owner())
@@ -514,7 +515,13 @@
   int32_t id = hypertext_.hyperlinks[index];
   AXPlatformNode* node = AXPlatformNodeWin::GetFromUniqueId(id);
   if (!node) {
-    // Error: possibly incorrect number of hyper links reported.
+    // TODO(https://crbug.com/id=1164043) Fix illegal hyperlink of iframes.
+    // Based on information received from DumpWithoutCrashing() reports, this
+    // is still sometimes occurring when get_hyperlink() is called on an
+    // iframe, which would have exactly 1 hyperlink and no text. The
+    // DumpWithoutCrashing() was removed to reduced crash report noise.
+    // Interestingly, the top url reported was always called "empty".
+    // Sample report for iframe issue: go/crash/93d7fce137a15ef0
     LONG num_hyperlinks = -1;
     get_nHyperlinks(&num_hyperlinks);
     std::ostringstream error;
@@ -526,7 +533,11 @@
     static auto* hyperlink_err = base::debug::AllocateCrashKeyString(
         "ax_hyperlink_err2", base::debug::CrashKeySize::Size256);
     base::debug::SetCrashKeyString(hyperlink_err, error.str().substr(230));
-    base::debug::DumpWithoutCrashing();
+    if (GetData().role != ax::mojom::Role::kIframe) {
+      // Only report for non-iframe situation. The iframe occurrence is known
+      // and was too noisy to keep reporting.
+      base::debug::DumpWithoutCrashing();
+    }
     NOTREACHED() << "Hyperlink error: " << error.str();
     return E_FAIL;
   }
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index d01bf08a..150923e3 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -357,9 +357,11 @@
     return;
   parent->OnDataChanged();
   parent->UpdatePlatformAttributes();
-  parent =
-      RetargetForEvents(parent, RetargetEventType::RetargetEventTypeGenerated);
-  FireGeneratedEvent(ui::AXEventGenerator::Event::CHILDREN_CHANGED, parent);
+  BrowserAccessibilityManager* parent_manager = parent->manager();
+  parent = parent_manager->RetargetForEvents(
+      parent, RetargetEventType::RetargetEventTypeGenerated);
+  parent_manager->FireGeneratedEvent(
+      ui::AXEventGenerator::Event::CHILDREN_CHANGED, parent);
 }
 
 BrowserAccessibility* BrowserAccessibilityManager::GetPopupRoot() const {
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index 1d97199..9481788 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -196,6 +196,9 @@
   // If this tree has a parent tree, return the parent node in that tree.
   BrowserAccessibility* GetParentNodeFromParentTree() const;
 
+  // Refreshes a parent node in a parent tree when it needs to be informed that
+  // this tree is ready or being destroyed. For example, an iframe object
+  // in a parent tree may need to link or unlink to this manager.
   void ParentConnectionChanged(BrowserAccessibility* parent);
 
   // In general, there is only a single node with the role of kRootWebArea,
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 5c5036f8..5d2e3a9 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -2171,9 +2171,6 @@
     const IsolationContext& isolation_context,
     const url::Origin& origin,
     bool origin_requests_isolation) {
-  // Note: we cannot check the feature flags and early-out here, because the
-  // origin trial might be active (in which case no feature flags are active).
-
   if (!IsolatedOriginUtil::IsValidOriginForOptInIsolation(origin))
     return false;
 
diff --git a/content/browser/file_system_access/native_file_system_file_writer_impl.cc b/content/browser/file_system_access/native_file_system_file_writer_impl.cc
index dc12072..251ab51 100644
--- a/content/browser/file_system_access/native_file_system_file_writer_impl.cc
+++ b/content/browser/file_system_access/native_file_system_file_writer_impl.cc
@@ -160,21 +160,21 @@
 }
 
 NativeFileSystemFileWriterImpl::~NativeFileSystemFileWriterImpl() {
-  if (can_purge()) {
-    DoFileSystemOperation(FROM_HERE, &FileSystemOperationRunner::RemoveFile,
-                          base::BindOnce(
-                              [](const storage::FileSystemURL& swap_url,
-                                 base::File::Error result) {
-                                if (result != base::File::FILE_OK) {
-                                  DLOG(ERROR)
-                                      << "Error Deleting Swap File, status: "
-                                      << base::File::ErrorToString(result)
-                                      << " path: " << swap_url.path();
-                                }
-                              },
-                              swap_url()),
-                          swap_url());
-  }
+  // Purge the swap file. The swap file should be deleted after Close(), but
+  // we'll try to delete it anyways in case the writer wasn't closed cleanly.
+  DoFileSystemOperation(
+      FROM_HERE, &FileSystemOperationRunner::RemoveFile,
+      base::BindOnce(
+          [](const storage::FileSystemURL& swap_url, base::File::Error result) {
+            if (result != base::File::FILE_OK &&
+                result != base::File::FILE_ERROR_NOT_FOUND) {
+              DLOG(ERROR) << "Error Deleting Swap File, status: "
+                          << base::File::ErrorToString(result)
+                          << " path: " << swap_url.path();
+            }
+          },
+          swap_url()),
+      swap_url());
 }
 
 void NativeFileSystemFileWriterImpl::Write(
@@ -355,35 +355,36 @@
 }  // namespace
 
 // Do not call this method if |close_callback_| is not set.
-void NativeFileSystemFileWriterImpl::CallCloseCallbackAndMaybeDeleteThis(
+void NativeFileSystemFileWriterImpl::CallCloseCallbackAndDeleteThis(
     blink::mojom::FileSystemAccessErrorPtr result) {
   std::move(close_callback_).Run(std::move(result));
 
-  if (!receiver_.is_bound()) {
-    // |this| is deleted after this call.
-    manager()->RemoveFileWriter(this);
-  }
+  // |this| is deleted after this call.
+  manager()->RemoveFileWriter(this);
 }
 
 void NativeFileSystemFileWriterImpl::OnDisconnect() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   receiver_.reset();
 
-  if (!close_callback_) {
-    if (!is_closed() && auto_close_) {
-      // Close the Writer. |this| is deleted via
-      // CallCloseCallbackAndMaybeDeleteThis when Close finishes.
-      Close(base::BindOnce([](blink::mojom::FileSystemAccessErrorPtr result) {
-        if (result->status != blink::mojom::FileSystemAccessStatus::kOk) {
-          DLOG(ERROR) << "AutoClose failed with result:"
-                      << base::File::ErrorToString(result->file_error);
-        }
-      }));
-      return;
-    }
-    // |this| is deleted after this call.
-    manager()->RemoveFileWriter(this);
+  if (is_close_pending())
+    // Mojo connection lost while Close() in progress.
+    return;
+
+  if (auto_close_) {
+    // Close the Writer. |this| is deleted via
+    // CallCloseCallbackAndDeleteThis when Close() finishes.
+    Close(base::BindOnce([](blink::mojom::FileSystemAccessErrorPtr result) {
+      if (result->status != blink::mojom::FileSystemAccessStatus::kOk) {
+        DLOG(ERROR) << "AutoClose failed with result:"
+                    << base::File::ErrorToString(result->file_error);
+      }
+    }));
+    return;
   }
+
+  // Mojo connection severed before Close() called. Destroy |this|.
+  manager()->RemoveFileWriter(this);
 }
 
 void NativeFileSystemFileWriterImpl::WriteImpl(
@@ -394,11 +395,11 @@
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
-  if (is_closed()) {
+  if (is_close_pending()) {
     std::move(callback).Run(
         native_file_system_error::FromStatus(
             FileSystemAccessStatus::kInvalidState,
-            "An attempt was made to write to a closed writer."),
+            "An attempt was made to write to a closing writer."),
         /*bytes_written=*/0);
     return;
   }
@@ -443,11 +444,11 @@
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
-  if (is_closed()) {
+  if (is_close_pending()) {
     std::move(callback).Run(
         native_file_system_error::FromStatus(
             FileSystemAccessStatus::kInvalidState,
-            "An attempt was made to write to a closed writer."),
+            "An attempt was made to write to a closing writer."),
         /*bytes_written=*/0);
     return;
   }
@@ -481,10 +482,10 @@
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
 
-  if (is_closed()) {
+  if (is_close_pending()) {
     std::move(callback).Run(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kInvalidState,
-        "An attempt was made to write to a closed writer."));
+        "An attempt was made to write to a closing writer."));
     return;
   }
 
@@ -503,15 +504,14 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(GetWritePermissionStatus(),
             blink::mojom::PermissionStatus::GRANTED);
-  if (is_closed()) {
+  if (is_close_pending()) {
     std::move(callback).Run(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kInvalidState,
-        "An attempt was made to close an already closed writer."));
+        "An attempt was made to close an already closing writer."));
     return;
   }
 
   close_callback_ = std::move(callback);
-  state_ = State::kClosePending;
 
   if (!RequireSecurityChecks() || !manager()->permission_context()) {
     DidAfterWriteCheck(
@@ -526,17 +526,19 @@
 
 void NativeFileSystemFileWriterImpl::AbortImpl(AbortCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (is_closed()) {
+  if (is_close_pending()) {
     std::move(callback).Run(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kInvalidState,
-        "An attempt was made to abort an already closed writer."));
+        "An attempt was made to abort an already closing writer."));
     return;
   }
 
-  state_ = State::kClosed;
   auto_close_ = false;
 
   std::move(callback).Run(native_file_system_error::Ok());
+
+  // |this| is deleted after this call.
+  manager()->RemoveFileWriter(this);
 }
 
 // static
@@ -551,7 +553,7 @@
     // callback.
     manager()->operation_runner().PostTaskWithThisObject(
         FROM_HERE, base::BindOnce(&RemoveSwapFile, swap_url()));
-    CallCloseCallbackAndMaybeDeleteThis(native_file_system_error::FromStatus(
+    CallCloseCallbackAndDeleteThis(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kOperationAborted,
         "Failed to perform Safe Browsing check."));
     return;
@@ -579,7 +581,7 @@
     // file and call the callback to report that close failed.
     manager()->operation_runner().PostTaskWithThisObject(
         FROM_HERE, base::BindOnce(&RemoveSwapFile, swap_url()));
-    CallCloseCallbackAndMaybeDeleteThis(native_file_system_error::FromStatus(
+    CallCloseCallbackAndDeleteThis(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kOperationAborted,
         "Write operation blocked by Safe Browsing."));
     return;
@@ -616,17 +618,15 @@
     base::File::Error result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (result != base::File::FILE_OK) {
-    state_ = State::kCloseError;
     DLOG(ERROR) << "Swap file move operation failed source: "
                 << swap_url().path() << " dest: " << url().path()
                 << " error: " << base::File::ErrorToString(result);
-    CallCloseCallbackAndMaybeDeleteThis(
+    CallCloseCallbackAndDeleteThis(
         native_file_system_error::FromFileError(result));
     return;
   }
 
-  state_ = State::kClosed;
-  CallCloseCallbackAndMaybeDeleteThis(native_file_system_error::Ok());
+  CallCloseCallbackAndDeleteThis(native_file_system_error::Ok());
 }
 
 void NativeFileSystemFileWriterImpl::DidSwapFileDoQuarantine(
@@ -637,10 +637,9 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (result != base::File::FILE_OK) {
-    state_ = State::kCloseError;
     DLOG(ERROR) << "Swap file move operation failed dest: " << target_url.path()
                 << " error: " << base::File::ErrorToString(result);
-    CallCloseCallbackAndMaybeDeleteThis(
+    CallCloseCallbackAndDeleteThis(
         native_file_system_error::FromFileError(result));
     return;
   }
@@ -697,7 +696,6 @@
     mojo::Remote<quarantine::mojom::Quarantine> quarantine_remote,
     quarantine::mojom::QuarantineFileResult result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  state_ = State::kClosed;
 
   if (result != quarantine::mojom::QuarantineFileResult::OK &&
       result != quarantine::mojom::QuarantineFileResult::ANNOTATION_FAILED) {
@@ -705,13 +703,13 @@
     // file will be deleted at this point by AttachmentServices on Windows.
     // There is nothing to do except to return the error message to the
     // application.
-    CallCloseCallbackAndMaybeDeleteThis(native_file_system_error::FromStatus(
+    CallCloseCallbackAndDeleteThis(native_file_system_error::FromStatus(
         FileSystemAccessStatus::kOperationAborted,
         "Write operation aborted due to security policy."));
     return;
   }
 
-  CallCloseCallbackAndMaybeDeleteThis(native_file_system_error::Ok());
+  CallCloseCallbackAndDeleteThis(native_file_system_error::Ok());
 }
 
 void NativeFileSystemFileWriterImpl::ComputeHashForSwapFile(
diff --git a/content/browser/file_system_access/native_file_system_file_writer_impl.h b/content/browser/file_system_access/native_file_system_file_writer_impl.h
index 2a9e1433..23a9f89 100644
--- a/content/browser/file_system_access/native_file_system_file_writer_impl.h
+++ b/content/browser/file_system_access/native_file_system_file_writer_impl.h
@@ -66,7 +66,9 @@
                    WriteStreamCallback callback) override;
 
   void Truncate(uint64_t length, TruncateCallback callback) override;
+  // The writer will be destroyed upon completion.
   void Close(CloseCallback callback) override;
+  // The writer will be destroyed upon completion.
   void Abort(AbortCallback callback) override;
 
   using HashCallback = base::OnceCallback<
@@ -82,10 +84,13 @@
 
   mojo::Receiver<blink::mojom::FileSystemAccessFileWriter> receiver_;
 
+  // If the mojo pipe is severed before either Close() or Abort() is invoked,
+  // the transaction is aborted from the OnDisconnect method. Otherwise, the
+  // writer will be destroyed upon completion of Close() or Abort().
   void OnDisconnect();
 
-  // Delete the FileWriter after Close if the mojo pipe is unbound.
-  void CallCloseCallbackAndMaybeDeleteThis(
+  // Destroys the file writer after calling the close callback.
+  void CallCloseCallbackAndDeleteThis(
       blink::mojom::FileSystemAccessErrorPtr result);
 
   void WriteImpl(uint64_t offset,
@@ -125,44 +130,13 @@
 
   void ComputeHashForSwapFile(HashCallback callback);
 
-  enum class State {
-    // The writer accepts write operations.
-    kOpen,
-    // The writer does not accept write operations and is in the process of
-    // closing.
-    kClosePending,
-    // The writer does not accept write operations and has entered an error
-    // state. A swap file may need to be purged.
-    kCloseError,
-    // The writer does not accept write operations. There should be no more swap
-    // file.
-    kClosed,
-  };
-  bool is_closed() const { return state_ != State::kOpen; }
-  // Returns whether the File Writer is in a state where any files can be
-  // deleted. We do not want to delete the files if there are clean-up
-  // operations in-flight.
-  bool can_purge() const {
-    return state_ == State::kOpen || state_ == State::kCloseError;
-  }
+  bool is_close_pending() const { return !close_callback_.is_null(); }
 
   // We write using this file URL. When `Close()` is invoked, we
   // execute a move operation from the swap URL to the target URL at `url_`. In
   // most filesystems, this move operation is atomic.
   storage::FileSystemURL swap_url_;
 
-  // NativeFileSystemWriter lifetime management has the following cases:
-  // 1) The mojo pipe is severed before Close() is invoked.
-  //    - Abort the transaction from the OnDisconnect method.
-  // 2) The mojo pipe is severed before Close() finishes.
-  //    - The Close() call is allowed to finish.
-  //    - The Writer is destroyed immediately afterwards, via the
-  //      CallCloseCallbackAndMaybeDeleteThis method.
-  // 3) The mojo pipe exists when Close() finishes.
-  //    - The Writer will exist for as long as the mojo pipe is connected.
-  //    - The Writer is destroyed via the OnDisconnect method.
-  State state_ = State::kOpen;
-  // This callback is non-null when the State is kClosePending or kCloseError.
   CloseCallback close_callback_;
 
   download::QuarantineConnectionCallback quarantine_connection_callback_;
diff --git a/content/browser/file_system_access/native_file_system_file_writer_impl_unittest.cc b/content/browser/file_system_access/native_file_system_file_writer_impl_unittest.cc
index b5dd989..a71bad1 100644
--- a/content/browser/file_system_access/native_file_system_file_writer_impl_unittest.cc
+++ b/content/browser/file_system_access/native_file_system_file_writer_impl_unittest.cc
@@ -549,7 +549,7 @@
   EXPECT_EQ(std::string("abc\0\0", 5), ReadFile(test_file_url_));
 }
 
-TEST_F(NativeFileSystemFileWriterImplTest, CloseAfterCloseNotOK) {
+TEST_F(NativeFileSystemFileWriterImplTest, WriterDestroyedAfterClose) {
   uint64_t bytes_written;
   FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
   EXPECT_EQ(result, FileSystemAccessStatus::kOk);
@@ -557,49 +557,13 @@
 
   result = CloseSync();
   EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  result = CloseSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
+  EXPECT_TRUE(handle_.WasInvalidated());
+  EXPECT_FALSE(storage::AsyncFileTestHelper::FileExists(
+      file_system_context_.get(), test_swap_url_,
+      storage::AsyncFileTestHelper::kDontCheckSize));
 }
 
-TEST_F(NativeFileSystemFileWriterImplTest, TruncateAfterCloseNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = CloseSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-
-  result = TruncateSync(0);
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
-}
-
-TEST_P(NativeFileSystemFileWriterImplWriteTest, WriteAfterCloseNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = CloseSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-
-  result = WriteSync(0, "bcd", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
-}
-
-TEST_F(NativeFileSystemFileWriterImplTest, AbortAfterCloseNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = CloseSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  result = AbortSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
-}
-
-TEST_F(NativeFileSystemFileWriterImplTest, AbortOK) {
+TEST_F(NativeFileSystemFileWriterImplTest, WriterDestroyedAfterAbort) {
   uint64_t bytes_written;
   FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
   EXPECT_EQ(result, FileSystemAccessStatus::kOk);
@@ -608,44 +572,10 @@
   result = AbortSync();
   EXPECT_EQ(result, FileSystemAccessStatus::kOk);
   EXPECT_EQ("", ReadFile(test_file_url_));
-}
-
-TEST_F(NativeFileSystemFileWriterImplTest, TruncateAfterAbortNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = AbortSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-
-  result = TruncateSync(0);
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
-}
-
-TEST_P(NativeFileSystemFileWriterImplWriteTest, WriteAfterAbortNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = AbortSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-
-  result = WriteSync(0, "bcd", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
-}
-
-TEST_F(NativeFileSystemFileWriterImplTest, CloseAfterAbortNotOK) {
-  uint64_t bytes_written;
-  FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  EXPECT_EQ(bytes_written, 3u);
-
-  result = AbortSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kOk);
-  result = CloseSync();
-  EXPECT_EQ(result, FileSystemAccessStatus::kInvalidState);
+  EXPECT_TRUE(handle_.WasInvalidated());
+  EXPECT_FALSE(storage::AsyncFileTestHelper::FileExists(
+      file_system_context_.get(), test_swap_url_,
+      storage::AsyncFileTestHelper::kDontCheckSize));
 }
 
 // TODO(mek): More tests, particularly for error conditions.
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index c2028f2..bb38974 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -900,12 +900,44 @@
   }
 #endif  // OS_WIN
 
-  if (!gpu_info_for_hardware_gpu_.IsInitialized()) {
-    if (gpu_info_for_hardware_gpu) {
+  bool needs_to_update_gpu_info_for_hardware_gpu =
+      !gpu_info_for_hardware_gpu_.IsInitialized();
+  if (!needs_to_update_gpu_info_for_hardware_gpu &&
+      !gpu_info_.UsesSwiftShader()) {
+    // On multi-GPU system, when switching to a different GPU, we want to reset
+    // GPUInfo for hardware GPU, because we want to know on which GPU Chrome
+    // crashes multiple times and falls back to SwiftShader.
+    const gpu::GPUInfo::GPUDevice& active_gpu = gpu_info_.active_gpu();
+    const gpu::GPUInfo::GPUDevice& cached_active_gpu =
+        gpu_info_for_hardware_gpu_.active_gpu();
+#if defined(OS_WIN)
+    if (active_gpu.luid.HighPart != cached_active_gpu.luid.HighPart &&
+        active_gpu.luid.LowPart != cached_active_gpu.luid.LowPart) {
+      needs_to_update_gpu_info_for_hardware_gpu = true;
+    }
+#else
+    if (active_gpu.vendor_id != cached_active_gpu.vendor_id ||
+        active_gpu.device_id != cached_active_gpu.device_id) {
+      needs_to_update_gpu_info_for_hardware_gpu = true;
+    }
+#endif  // OS_WIN
+  }
+
+  if (needs_to_update_gpu_info_for_hardware_gpu) {
+    if (gpu_info_for_hardware_gpu.has_value()) {
       DCHECK(gpu_info_for_hardware_gpu->IsInitialized());
-      gpu_info_for_hardware_gpu_ = gpu_info_for_hardware_gpu.value();
+      bool valid_info = true;
+      if (gpu_info_for_hardware_gpu->UsesSwiftShader()) {
+        valid_info = false;
+      } else if (gpu_info_for_hardware_gpu->gl_renderer.empty() &&
+                 gpu_info_for_hardware_gpu->active_gpu().vendor_id == 0u) {
+        valid_info = false;
+      }
+      if (valid_info)
+        gpu_info_for_hardware_gpu_ = gpu_info_for_hardware_gpu.value();
     } else {
-      gpu_info_for_hardware_gpu_ = gpu_info_;
+      if (!gpu_info_.UsesSwiftShader())
+        gpu_info_for_hardware_gpu_ = gpu_info_;
     }
   }
 
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index 29061c0..7d9f2da 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -865,28 +865,30 @@
   feature_status->Set("workarounds", std::move(workarounds));
   gpu_info_val->Set("featureStatus", std::move(feature_status));
   if (!GpuDataManagerImpl::GetInstance()->IsGpuProcessUsingHardwareGpu()) {
-    auto feature_status_for_hardware_gpu =
-        std::make_unique<base::DictionaryValue>();
-    feature_status_for_hardware_gpu->Set("featureStatus",
-                                         GetFeatureStatusForHardwareGpu());
-    feature_status_for_hardware_gpu->Set("problems",
-                                         GetProblemsForHardwareGpu());
-    auto workarounds_for_hardware_gpu = std::make_unique<base::ListValue>();
-    for (const auto& workaround : GetDriverBugWorkaroundsForHardwareGpu())
-      workarounds_for_hardware_gpu->AppendString(workaround);
-    feature_status_for_hardware_gpu->Set(
-        "workarounds", std::move(workarounds_for_hardware_gpu));
-    gpu_info_val->Set("featureStatusForHardwareGpu",
-                      std::move(feature_status_for_hardware_gpu));
     const gpu::GPUInfo gpu_info_for_hardware_gpu =
         GpuDataManagerImpl::GetInstance()->GetGPUInfoForHardwareGpu();
-    const gpu::GpuFeatureInfo gpu_feature_info_for_hardware_gpu =
-        GpuDataManagerImpl::GetInstance()->GetGpuFeatureInfoForHardwareGpu();
-    auto gpu_info_for_hardware_gpu_val = BasicGpuInfoAsListValue(
-        gpu_info_for_hardware_gpu, gpu_feature_info_for_hardware_gpu,
-        gfx::GpuExtraInfo{});
-    gpu_info_val->Set("basicInfoForHardwareGpu",
-                      std::move(gpu_info_for_hardware_gpu_val));
+    if (gpu_info_for_hardware_gpu.IsInitialized()) {
+      auto feature_status_for_hardware_gpu =
+          std::make_unique<base::DictionaryValue>();
+      feature_status_for_hardware_gpu->Set("featureStatus",
+                                           GetFeatureStatusForHardwareGpu());
+      feature_status_for_hardware_gpu->Set("problems",
+                                           GetProblemsForHardwareGpu());
+      auto workarounds_for_hardware_gpu = std::make_unique<base::ListValue>();
+      for (const auto& workaround : GetDriverBugWorkaroundsForHardwareGpu())
+        workarounds_for_hardware_gpu->AppendString(workaround);
+      feature_status_for_hardware_gpu->Set(
+          "workarounds", std::move(workarounds_for_hardware_gpu));
+      gpu_info_val->Set("featureStatusForHardwareGpu",
+                        std::move(feature_status_for_hardware_gpu));
+      const gpu::GpuFeatureInfo gpu_feature_info_for_hardware_gpu =
+          GpuDataManagerImpl::GetInstance()->GetGpuFeatureInfoForHardwareGpu();
+      auto gpu_info_for_hardware_gpu_val = BasicGpuInfoAsListValue(
+          gpu_info_for_hardware_gpu, gpu_feature_info_for_hardware_gpu,
+          gfx::GpuExtraInfo{});
+      gpu_info_val->Set("basicInfoForHardwareGpu",
+                        std::move(gpu_info_for_hardware_gpu_val));
+    }
   }
   gpu_info_val->Set("compositorInfo", CompositorInfo());
   gpu_info_val->Set("gpuMemoryBufferInfo", GpuMemoryBufferInfo(gpu_extra_info));
diff --git a/content/browser/isolated_origin_browsertest.cc b/content/browser/isolated_origin_browsertest.cc
index 88731fd4..f1f5f0b3 100644
--- a/content/browser/isolated_origin_browsertest.cc
+++ b/content/browser/isolated_origin_browsertest.cc
@@ -79,6 +79,16 @@
     return IsIsolatedOrigin(url::Origin::Create(url));
   }
 
+  bool ShouldOriginGetOptInIsolation(const url::Origin& origin) {
+    auto* site_instance = static_cast<SiteInstanceImpl*>(
+        shell()->web_contents()->GetMainFrame()->GetSiteInstance());
+
+    return ChildProcessSecurityPolicyImpl::GetInstance()
+        ->ShouldOriginGetOptInIsolation(site_instance->GetIsolationContext(),
+                                        origin,
+                                        false /* origin_requests_isolation */);
+  }
+
   ProcessLock ProcessLockFromUrl(const std::string& url) {
     return ProcessLock(
         SiteInfo(GURL(url), GURL(url), false /* is_origin_keyed */,
@@ -140,13 +150,12 @@
   DISALLOW_COPY_AND_ASSIGN(IsolatedOriginTest);
 };
 
-// Base class used for server-based origin isolation opt-in tests to handle the
-// server responses and other common infrastructure.
-class OriginIsolationOptInServerTest : public IsolatedOriginTestBase {
+// Tests that verify the header can be used to opt-in to origin isolation.
+class OriginIsolationOptInHeaderTest : public IsolatedOriginTestBase {
  public:
-  OriginIsolationOptInServerTest()
+  OriginIsolationOptInHeaderTest()
       : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
-  ~OriginIsolationOptInServerTest() override = default;
+  ~OriginIsolationOptInHeaderTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     IsolatedOriginTestBase::SetUpCommandLine(command_line);
@@ -155,18 +164,31 @@
     // This is needed for this test to run properly on platforms where
     //  --site-per-process isn't the default, such as Android.
     IsolateAllSitesForTesting(command_line);
+
     command_line->AppendSwitch(switches::kIgnoreCertificateErrors);
-    feature_list_.InitAndEnableFeature(feature_switch());
+    feature_list_.InitAndEnableFeature(features::kOriginIsolationHeader);
 
     // Start the HTTPS server here so derived tests can use it if they override
     // SetUpCommandLine().
     https_server()->AddDefaultHandlers(GetTestDataFilePath());
     https_server()->RegisterRequestHandler(
-        base::BindRepeating(&OriginIsolationOptInServerTest::HandleResponse,
+        base::BindRepeating(&OriginIsolationOptInHeaderTest::HandleResponse,
                             base::Unretained(this)));
     ASSERT_TRUE(https_server()->Start());
   }
 
+  void SetHeaderValue(const std::string& header_value) {
+    header_ = header_value;
+  }
+
+  // Allows specifying what content to return when an opt-in isolation header is
+  // intercepted. Uses a queue so that multiple requests can be handled without
+  // returning to the test body. If the queue is empty, the document content is
+  // simply "isolate me!".
+  void AddContentToQueue(const std::string& content_str) {
+    content_.push(content_str);
+  }
+
   void SetUpOnMainThread() override {
     IsolatedOriginTestBase::SetUpOnMainThread();
 
@@ -179,115 +201,12 @@
     IsolatedOriginTestBase::TearDownOnMainThread();
   }
 
-  // Need an https server because
-  // OriginPolicyThrottle::ShouldRequestOriginPolicy() will return false
-  // otherwise.
+  // Need an https server because the header requires HTTPS.
   net::EmbeddedTestServer* https_server() { return &https_server_; }
 
-  bool ShouldOriginGetOptInIsolation(const url::Origin& origin) {
-    auto* site_instance = static_cast<SiteInstanceImpl*>(
-        shell()->web_contents()->GetMainFrame()->GetSiteInstance());
-
-    return ChildProcessSecurityPolicyImpl::GetInstance()
-        ->ShouldOriginGetOptInIsolation(site_instance->GetIsolationContext(),
-                                        origin,
-                                        false /* origin_requests_isolation */);
-  }
-
- protected:
-  virtual const base::Feature& feature_switch() = 0;
-  virtual std::unique_ptr<net::test_server::HttpResponse> HandleResponse(
-      const net::test_server::HttpRequest& request) = 0;
-
  private:
-  net::EmbeddedTestServer https_server_;
-  base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(OriginIsolationOptInServerTest);
-};
-
-// Tests of opt-in origin isolation which use origin policy as the opt-in
-// mechanism. Most tests for the overall feature are in this class, but see also
-// OriginIsolationOptInHeaderTest for tests that verify headers can be used as
-// an opt-in mechanism as well.
-class OriginIsolationOptInOriginPolicyTest
-    : public OriginIsolationOptInServerTest {
- public:
-  OriginIsolationOptInOriginPolicyTest() = default;
-
-  void SetOriginPolicyManifest(const std::string& manifest) {
-    origin_policy_manifest_ = manifest;
-  }
-
-  // Allows specifying what content to return when an opt-in isolation header is
-  // intercepted. Uses a queue so that multiple requests can be handled without
-  // returning to the test body. If the queue is empty, the document content is
-  // simply "isolate me!".
-  void AddContentToQueue(const std::string& content_str) {
-    content_.push(content_str);
-  }
-
- protected:
-  const base::Feature& feature_switch() override {
-    return features::kOriginPolicy;
-  }
-
   std::unique_ptr<net::test_server::HttpResponse> HandleResponse(
-      const net::test_server::HttpRequest& request) override {
-    auto response = std::make_unique<net::test_server::BasicHttpResponse>();
-
-    // Ensures requests to /isolate_origin request that the origin policy be
-    // applied.
-    if (request.relative_url == "/isolate_origin") {
-      response->set_code(net::HTTP_OK);
-      response->set_content_type("text/html");
-      response->AddCustomHeader("Origin-Policy", "allowed=(latest)");
-      if (!content_.empty()) {
-        response->set_content(content_.front());
-        content_.pop();
-      } else {
-        response->set_content("isolate me!");
-      }
-      return std::move(response);
-    }
-
-    // Intercepts the request to get the origin policy, and injects the policy.
-    // Note: this will only be activated for requests that load "isolate_origin"
-    // above, since only it sets the Origin-Policy header.
-    if (request.relative_url == "/.well-known/origin-policy") {
-      response->set_code(net::HTTP_OK);
-      response->set_content(origin_policy_manifest_);
-      return std::move(response);
-    }
-
-    // If we return nullptr, then the server will go ahead and actually serve
-    // the file.
-    return nullptr;
-  }
-
-  std::string origin_policy_manifest_;
-  std::queue<std::string> content_;
-
-  DISALLOW_COPY_AND_ASSIGN(OriginIsolationOptInOriginPolicyTest);
-};
-
-// Tests that verify headers can be used to opt-in to origin isolation.  See
-// OriginIsolationOptInOriginPolicyTest for most tests of the feature.
-class OriginIsolationOptInHeaderTest : public OriginIsolationOptInServerTest {
- public:
-  OriginIsolationOptInHeaderTest() = default;
-
-  void SetHeaderValue(const std::string& header_value) {
-    header_ = header_value;
-  }
-
- protected:
-  const base::Feature& feature_switch() override {
-    return features::kOriginIsolationHeader;
-  }
-
-  std::unique_ptr<net::test_server::HttpResponse> HandleResponse(
-      const net::test_server::HttpRequest& request) override {
+      const net::test_server::HttpRequest& request) {
     if (request.relative_url == "/isolate_origin") {
       auto response = std::make_unique<net::test_server::BasicHttpResponse>();
       response->set_code(net::HTTP_OK);
@@ -297,7 +216,12 @@
         response->AddCustomHeader("Origin-Agent-Cluster", *header_);
       }
 
-      response->set_content("isolate me!");
+      if (!content_.empty()) {
+        response->set_content(content_.front());
+        content_.pop();
+      } else {
+        response->set_content("isolate me!");
+      }
       return std::move(response);
     }
 
@@ -306,7 +230,11 @@
     return nullptr;
   }
 
+  net::EmbeddedTestServer https_server_;
+  base::test::ScopedFeatureList feature_list_;
+
   base::Optional<std::string> header_;
+  std::queue<std::string> content_;
 
   DISALLOW_COPY_AND_ASSIGN(OriginIsolationOptInHeaderTest);
 };
@@ -336,16 +264,6 @@
     embedded_test_server()->StartAcceptingConnections();
   }
 
-  bool ShouldOriginGetOptInIsolation(const url::Origin& origin) {
-    auto* site_instance = static_cast<SiteInstanceImpl*>(
-        shell()->web_contents()->GetMainFrame()->GetSiteInstance());
-
-    return ChildProcessSecurityPolicyImpl::GetInstance()
-        ->ShouldOriginGetOptInIsolation(site_instance->GetIsolationContext(),
-                                        origin,
-                                        false /* origin_requests_isolation */);
-  }
-
  private:
   std::unique_ptr<net::test_server::HttpResponse> HandleResponse(
       const net::test_server::HttpRequest& request) {
@@ -366,13 +284,13 @@
 // isolation for origins. Tests using this class will isolate foo.com and
 // bar.com by default using command-line isolation, but any opt-in isolation
 // will override this.
-class OriginIsolationOptInOriginPolicyCommandLineTest
-    : public OriginIsolationOptInOriginPolicyTest {
+class OriginIsolationOptInHeaderCommandLineTest
+    : public OriginIsolationOptInHeaderTest {
  public:
-  OriginIsolationOptInOriginPolicyCommandLineTest() = default;
+  OriginIsolationOptInHeaderCommandLineTest() = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    OriginIsolationOptInOriginPolicyTest::SetUpCommandLine(command_line);
+    OriginIsolationOptInHeaderTest::SetUpCommandLine(command_line);
     // The base class should already have started the HTTPS server so we can use
     // it here to generate origins to specify on the command line.
     ASSERT_TRUE(https_server()->Started());
@@ -384,7 +302,7 @@
   }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(OriginIsolationOptInOriginPolicyCommandLineTest);
+  DISALLOW_COPY_AND_ASSIGN(OriginIsolationOptInHeaderCommandLineTest);
 };
 
 // This test verifies that opt-in isolation takes precedence over command-line
@@ -392,13 +310,13 @@
 // otherwise been isolated via command-line isolation), and then loads a child
 // frame sub-origin which should-not be isolated (but would have been if the
 // base origin was command-line isolated).
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyCommandLineTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderCommandLineTest,
                        OptInOverridesCommandLine) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   // Start off with an isolated base-origin in an a(a) configuration, then
   // navigate the subframe to a sub-origin not requesting isolation.
   // Note: this works because we serve mock headers with the base origin's html
-  // file, requesting loading the origin policy.
+  // file, which set the header.
   GURL isolated_base_origin_url(https_server()->GetURL(
       "foo.com", "/isolated_base_origin_with_subframe.html"));
   GURL non_isolated_sub_origin(
@@ -455,19 +373,6 @@
       browser_context, url::Origin::Create(non_isolated_sub_origin)));
 }
 
-// This tests that origin policy opt-in causes the origin to end up in the
-// isolated origins list.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest, Basic) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
-
-  GURL url(https_server()->GetURL("isolated.foo.com", "/isolate_origin"));
-  url::Origin origin(url::Origin::Create(url));
-
-  EXPECT_FALSE(ShouldOriginGetOptInIsolation(origin));
-  EXPECT_TRUE(NavigateToURL(shell(), url));
-  EXPECT_TRUE(ShouldOriginGetOptInIsolation(origin));
-}
-
 // This tests that header-based opt-in causes the origin to end up in the
 // isolated origins list.
 IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest, Basic) {
@@ -513,15 +418,12 @@
 }
 
 // Further tests deep-dive into various scenarios for the isolation opt-ins.
-// They use the origin policy mechanism, under the assumption that it will be
-// the same for the header mechanism since they both trigger the same behavior
-// in ChildProcessSecurityPolicyImpl.
 
-// In this test the sub-origin is isolated because the origin policy requests
-// "isolation". It will have a different site instance than the main frame.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+// In this test the sub-origin is isolated because the header requests it. It
+// will have a different site instance than the main frame.
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        SimpleSubOriginIsolationTest) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   // Start off with an a(a) page, then navigate the subframe to an isolated sub
   // origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -561,11 +463,10 @@
                 child_frame_node->current_frame_host()->GetProcess()->GetID()));
 }
 
-// In this test the sub-origin isn't isolated because the origin policy doesn't
-// request "isolation". It will have the same site instance as the main frame.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+// In this test the sub-origin isn't isolated because no header is set. It will
+// have the same site instance as the main frame.
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        SimpleSubOriginNonIsolationTest) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"] })");
   // Start off with an a(a) page, then navigate the subframe to an isolated sub
   // origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -586,9 +487,9 @@
 
 // This test verifies that renderer-initiated navigations to/from isolated
 // sub-origins works as expected.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        RendererInitiatedNavigations) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   GURL test_url(https_server()->GetURL("foo.com",
                                        "/cross_site_iframe_factory.html?"
                                        "foo.com(foo.com)"));
@@ -629,9 +530,8 @@
 // both for renderer-initiated and browser-initiated navigations.
 // Note: this test is essentially identical to
 // IsolatedOriginTest.MainFrameNavigation.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
-                       MainFrameNavigation) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest, MainFrameNavigation) {
+  SetHeaderValue("?1");
   GURL unisolated_url(https_server()->GetURL("www.foo.com", "/title1.html"));
   GURL isolated_url(
       https_server()->GetURL("isolated.foo.com", "/isolate_origin"));
@@ -712,9 +612,9 @@
 // This test ensures that if an origin starts off being isolated in a
 // BrowsingInstance, it continues that way within the BrowsingInstance, even
 // if a new policy is received that removes the opt-in request.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        OriginIsolationStateRetainedForBrowsingInstance) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   // Start off with an a(a,a) page, then navigate the subframe to an isolated
   // sub origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -734,9 +634,9 @@
   EXPECT_NE(root->current_frame_host()->GetSiteInstance(),
             child_frame_node0->current_frame_host()->GetSiteInstance());
 
-  // Change OriginPolicy manifest to stop isolating the sub-origin. It should
+  // Change the server's responses to stop isolating the sub-origin. It should
   // still be isolated, to remain consistent with the other frame.
-  SetOriginPolicyManifest(R"({ })");
+  SetHeaderValue("?0");
 
   WebContentsConsoleObserver console_observer(shell()->web_contents());
   console_observer.SetPattern(
@@ -763,11 +663,11 @@
 
 // This test ensures that if an origin starts off not being isolated in a
 // BrowsingInstance, it continues that way within the BrowsingInstance, even
-// if a new opt-in policy is received.
+// if the header starts being sent.
 // Case #1 where the non-opted-in origin is currently in the frame tree.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        OriginNonIsolationStateRetainedForBrowsingInstance1) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"] })");
+  SetHeaderValue("?0");
   // Start off with an a(a,a) page, then navigate the subframe to an isolated
   // sub origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -787,9 +687,9 @@
   EXPECT_EQ(root->current_frame_host()->GetSiteInstance(),
             child_frame_node0->current_frame_host()->GetSiteInstance());
 
-  // Change OriginPolicy manifest to start isolating the sub-origin. It should
+  // Change the server responses to start isolating the sub-origin. It should
   // still be not-isolated, to remain consistent with the other frame.
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
 
   WebContentsConsoleObserver console_observer(shell()->web_contents());
   console_observer.SetPattern(
@@ -812,11 +712,11 @@
 
 // This test ensures that if an origin starts off not being isolated in a
 // BrowsingInstance, it continues that way within the BrowsingInstance, even
-// if a new opt-in policy is received.
+// if the header starts being sent.
 // Case #2 where the non-opted-in origin is currently not in the frame tree.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        OriginNonIsolationStateRetainedForBrowsingInstance2) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"] })");
+  SetHeaderValue("?0");
   // Start off with an a(a) page, then navigate the subframe to an isolated sub
   // origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -845,9 +745,9 @@
   EXPECT_EQ(root->current_frame_host()->GetSiteInstance(),
             child_frame_node0->current_frame_host()->GetSiteInstance());
 
-  // Change OriginPolicy manifest to start isolating the sub-origin. It should
+  // Change the server to start isolating the sub-origin. It should
   // still be not isolated, to remain consistent with the other frame.
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   EXPECT_TRUE(
       NavigateToURLFromRenderer(child_frame_node0, isolated_suborigin_url));
   EXPECT_EQ(root->current_frame_host()->GetSiteInstance(),
@@ -868,10 +768,10 @@
 
 // This test makes sure that a different tab in the same BrowsingInstance where
 // an origin originally did not opt-in respects that state even if the
-// OriginPolicy changes.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+// server sends a different header.
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        OriginNonIsolationStateRetainedForPopup) {
-  SetOriginPolicyManifest(R"({ })");
+  SetHeaderValue("?0");
   // Start off with an a(a,a) page, then navigate the subframe to an isolated
   // sub origin.
   GURL test_url(https_server()->GetURL("foo.com",
@@ -890,9 +790,9 @@
   EXPECT_EQ(root->current_frame_host()->GetSiteInstance(),
             child_frame_node0->current_frame_host()->GetSiteInstance());
 
-  // Change OriginPolicy manifest to start isolating the sub-origin. It should
-  // still be isolated, to remain consistent with the other frame.
-  SetOriginPolicyManifest(R"({ "isolation": true })");
+  // Change the server to start isolating the sub-origin. It should
+  // not be isolated, to remain consistent with the other frame.
+  SetHeaderValue("?1");
 
   // Open a popup in the same browsing instance, and navigate it to the
   // not-opted-in origin. Even though the manifest now requests isolation, it
@@ -921,9 +821,9 @@
 // RenderFrameHostManager that is verifying that the second child frame was
 // put in a compatible renderer process.
 // https://crbug.com/1099718
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        NoKillForBrowsingInstanceDifferencesInProcess) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   GURL opener_url(https_server()->GetURL("foo.com", "/title1.html"));
   EXPECT_TRUE(NavigateToURL(shell(), opener_url));
 
@@ -1002,9 +902,9 @@
 // BrowsingInstance will show sub.foo.com as isolated, then if
 // CanAccessDataForOrigin only checks the first BrowsingInstance it will get the
 // wrong result.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        NoKillForBrowsingInstanceDifferencesInProcess2) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   // Start on a page with same-site iframe.
   GURL opener_url(https_server()->GetURL("foo.com", "/page_with_iframe.html"));
   EXPECT_TRUE(NavigateToURL(shell(), opener_url));
@@ -1097,9 +997,8 @@
 // value stripped. The test IsolatedBaseOriginNoPorts tests the case where
 // neither the isolated base origin nor the non-isolated sub-origin has a port
 // value.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
-                       IsolatedBaseOrigin) {
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest, IsolatedBaseOrigin) {
+  SetHeaderValue("?1");
   // Start off with an isolated base-origin in an a(a) configuration, then
   // navigate the subframe to a sub-origin no requesting isolation.
   GURL test_url(https_server()->GetURL(
@@ -1171,7 +1070,7 @@
       browser_context, url::Origin::Create(non_isolated_sub_origin2)));
 }
 
-// This test is the same as OriginIsolationOptInOriginPolicyTest
+// This test is the same as OriginIsolationOptInHeaderTest
 // .IsolatedBaseOrigin except it uses port-free URLs. This is critical since we
 // can have two SiteInstances with the same SiteURL as long as one is
 // origin-keyed and the other isn't. Site URLs used to be used as map-keys but
@@ -1200,7 +1099,7 @@
           // Note: this call would normally get the headers from
           // isolated_base_origin_with_subframe.html.mock-http-headers,
           // but those are meant for use with a
-          // OriginIsolationOptInOriginPolicyTest. and won't work here, so we
+          // OriginIsolationOptInHeaderTest. and won't work here, so we
           // override them.
           URLLoaderInterceptor::WriteResponse(
               "content/test/data/isolated_base_origin_with_subframe.html",
@@ -1396,7 +1295,7 @@
 // that opts-in to isolation. The opt-in triggers a walk of the session history
 // and the frame tree ... the session history won't pick up the first frame, but
 // the frame-tree walk should.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest, FrameTreeTest) {
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest, FrameTreeTest) {
   EXPECT_TRUE(NavigateToURL(shell(),
                             https_server()->GetURL("bar.com", "/title1.html")));
   // Have tab1 call window.open() to create blank tab2.
@@ -1424,7 +1323,7 @@
   // Do a browser-initiated navigation of tab1 to the same origin, but isolate
   // it this time. This should place the two frames with |isolated_origin_url|
   // into different BrowsingInstances.
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   EXPECT_TRUE(NavigateToURL(shell(), isolated_origin_url));
 
   // Since the same origin exists in two tabs, but one is isolated and the other
@@ -1488,7 +1387,7 @@
 // isolation at the pending commit state in tab2, then verify that the FrameTree
 // walk has correctly registered the origin as non-isolated in tab2, but
 // isolated in tab1.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        FrameTreeTestPendingCommit) {
   GURL isolated_origin_url(
       https_server()->GetURL("isolated.foo.com", "/isolate_origin"));
@@ -1502,7 +1401,7 @@
   // Do a browser-initiated navigation of tab2 to the same origin, but isolate
   // it this time. This should place the two frames with |isolated_origin_url|
   // into different BrowsingInstances.
-  SetOriginPolicyManifest(R"({ "ids": ["my-policy"], "isolation": true })");
+  SetHeaderValue("?1");
   EXPECT_TRUE(NavigateToURL(tab2, isolated_origin_url));
 
   // Now commit the non-isolated navigation.
@@ -1546,7 +1445,7 @@
     : public DidCommitNavigationInterceptor {
  public:
   InjectIsolationRequestingNavigation(
-      OriginIsolationOptInOriginPolicyTest* test_framework,
+      OriginIsolationOptInHeaderTest* test_framework,
       WebContents* tab1_web_contents,
       Shell* tab2,
       const GURL& url)
@@ -1569,14 +1468,13 @@
 
     // Performa a navigation of |tab2_| to |url_|. |url_| should request
     // isolation.
-    test_framework_->SetOriginPolicyManifest(
-        R"({ "ids": ["my-policy"], "isolation": true })");
+    test_framework_->SetHeaderValue("?1");
     EXPECT_TRUE(NavigateToURL(tab2_, url_));
 
     return true;
   }
 
-  OriginIsolationOptInOriginPolicyTest* test_framework_;
+  OriginIsolationOptInHeaderTest* test_framework_;
   Shell* tab2_;
   const GURL& url_;
   bool was_called_ = false;
@@ -1593,7 +1491,7 @@
 // This test is similar to the one above, but exercises the pending navigation
 // when it's at a different stage, namely between the CommitNavigation and
 // DidCommitProvisionalLoad, rather than at WillProcessResponse.
-IN_PROC_BROWSER_TEST_F(OriginIsolationOptInOriginPolicyTest,
+IN_PROC_BROWSER_TEST_F(OriginIsolationOptInHeaderTest,
                        MAYBE_FrameTreeTestBeforeDidCommit) {
   GURL isolated_origin_url(
       https_server()->GetURL("isolated.foo.com", "/isolate_origin"));
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index d783bb0..8b9c734 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -116,7 +116,6 @@
 #include "services/network/public/mojom/web_sandbox_flags.mojom.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/common/client_hints/client_hints.h"
-#include "third_party/blink/public/common/origin_trials/trial_token_validator.h"
 #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
 #include "third_party/blink/public/common/web_preferences/web_preferences.h"
 #include "third_party/blink/public/mojom/appcache/appcache.mojom.h"
@@ -2024,7 +2023,7 @@
 }
 
 void NavigationRequest::CheckForIsolationOptIn(const GURL& url) {
-  if (IsOptInIsolationRequested(url) == OptInIsolationCheckResult::NONE)
+  if (!IsOptInIsolationRequested())
     return;
 
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
@@ -2067,47 +2066,24 @@
   return origin == url::Origin::Create(GetURL());
 }
 
-NavigationRequest::OptInIsolationCheckResult
-NavigationRequest::IsOptInIsolationRequested(const GURL& url) {
+bool NavigationRequest::IsOptInIsolationRequested() {
   if (!response())
-    return OptInIsolationCheckResult::NONE;
+    return false;
 
   // Do not attempt isolation if the environment prevents us from enabling site
   // isolation (e.g., when we are under the memory threshold on Android).
   if (!SiteIsolationPolicy::IsOptInOriginIsolationEnabled())
-    return OptInIsolationCheckResult::NONE;
+    return false;
 
-  // For now we only check for the presence of hints; we do not yet act on the
-  // specific hints.
-  const bool requests_via_origin_policy =
-      base::FeatureList::IsEnabled(features::kOriginPolicy) &&
-      response()->origin_policy &&
-      response()->origin_policy->state == network::OriginPolicyState::kLoaded &&
-      response()->origin_policy->contents->isolation_optin_hints.has_value();
+  if (base::FeatureList::IsEnabled(features::kOriginIsolationHeader) &&
+      response_head_->parsed_headers->origin_isolation) {
+    return true;
+  }
 
-  if (requests_via_origin_policy)
-    return OptInIsolationCheckResult::ORIGIN_POLICY;
-
-  // The header can be enabled via either a command-line flag or an origin
-  // trial.
-  blink::TrialTokenValidator validator;
-  const bool header_is_enabled =
-      base::FeatureList::IsEnabled(features::kOriginIsolationHeader) ||
-      (response()->headers && validator.RequestEnablesFeature(
-                                  url, response()->headers.get(),
-                                  "OriginIsolationHeader", base::Time::Now()));
-
-  const bool requests_via_header =
-      header_is_enabled && response_head_->parsed_headers->origin_isolation;
-
-  if (requests_via_header)
-    return OptInIsolationCheckResult::HEADER;
-
-  return OptInIsolationCheckResult::NONE;
+  return false;
 }
 
-void NavigationRequest::DetermineOriginIsolationEndResult(
-    OptInIsolationCheckResult check_result) {
+void NavigationRequest::DetermineOriginIsolationEndResult(bool is_requested) {
   DCHECK_EQ(state_, WILL_PROCESS_RESPONSE);
 
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
@@ -2115,31 +2091,17 @@
   const IsolationContext& isolation_context =
       render_frame_host_->GetSiteInstance()->GetIsolationContext();
   const bool got_isolated = policy->ShouldOriginGetOptInIsolation(
-      isolation_context, origin,
-      check_result !=
-          OptInIsolationCheckResult::NONE /* origin_requests_isolation */);
+      isolation_context, origin, is_requested);
 
-  switch (check_result) {
-    case OptInIsolationCheckResult::NONE:
-      origin_isolation_end_result_ =
-          got_isolated
-              ? OptInOriginIsolationEndResult::kNotRequestedButIsolated
-              : OptInOriginIsolationEndResult::kNotRequestedAndNotIsolated;
-      break;
-    case OptInIsolationCheckResult::ORIGIN_POLICY:
-      origin_isolation_end_result_ =
-          got_isolated ? OptInOriginIsolationEndResult::
-                             kRequestedViaOriginPolicyAndIsolated
-                       : OptInOriginIsolationEndResult::
-                             kRequestedViaOriginPolicyButNotIsolated;
-      break;
-    case OptInIsolationCheckResult::HEADER:
-      origin_isolation_end_result_ =
-          got_isolated
-              ? OptInOriginIsolationEndResult::kRequestedViaHeaderAndIsolated
-              : OptInOriginIsolationEndResult::
-                    kRequestedViaHeaderButNotIsolated;
-      break;
+  if (is_requested) {
+    origin_isolation_end_result_ =
+        got_isolated ? OptInOriginIsolationEndResult::kRequestedAndIsolated
+                     : OptInOriginIsolationEndResult::kRequestedButNotIsolated;
+  } else {
+    origin_isolation_end_result_ =
+        got_isolated
+            ? OptInOriginIsolationEndResult::kNotRequestedButIsolated
+            : OptInOriginIsolationEndResult::kNotRequestedAndNotIsolated;
   }
 
   // This needs to be computed separately from origin.opaque() because, per
@@ -2157,9 +2119,7 @@
   commit_params_->origin_isolated =
       is_opaque_origin_because_sandbox || origin.opaque() ||
       origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::kRequestedViaOriginPolicyAndIsolated ||
-      origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::kRequestedViaHeaderAndIsolated ||
+          OptInOriginIsolationEndResult::kRequestedAndIsolated ||
       origin_isolation_end_result_ ==
           OptInOriginIsolationEndResult::kNotRequestedButIsolated;
 }
@@ -2169,19 +2129,16 @@
     return;
 
   if (origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::kRequestedViaHeaderAndIsolated ||
+          OptInOriginIsolationEndResult::kRequestedAndIsolated ||
       origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::kRequestedViaHeaderButNotIsolated)
+          OptInOriginIsolationEndResult::kRequestedButNotIsolated)
     GetContentClient()->browser()->LogWebFeatureForCurrentPage(
         render_frame_host_, blink::mojom::WebFeature::kOriginIsolationHeader);
 
   const url::Origin origin = url::Origin::Create(GetURL());
 
   if (origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::kRequestedViaHeaderButNotIsolated ||
-      origin_isolation_end_result_ ==
-          OptInOriginIsolationEndResult::
-              kRequestedViaOriginPolicyButNotIsolated)
+      OptInOriginIsolationEndResult::kRequestedButNotIsolated)
     render_frame_host_->AddMessageToConsole(
         blink::mojom::ConsoleMessageLevel::kWarning,
         base::StringPrintf(
@@ -2203,8 +2160,7 @@
 }
 
 UrlInfo NavigationRequest::GetUrlInfo() {
-  return UrlInfo(GetURL(), IsOptInIsolationRequested(GetURL()) !=
-                               OptInIsolationCheckResult::NONE);
+  return UrlInfo(GetURL(), IsOptInIsolationRequested());
 }
 
 void NavigationRequest::OnResponseStarted(
@@ -2245,9 +2201,9 @@
 
   ComputeSandboxFlagsToCommit(response_head_.get());
 
-  // The navigation may have encountered an origin policy or Origin-Isolation
-  // header that requests isolation for the url's origin. Before we pick the
-  // renderer, make sure we update the origin-isolation opt-ins appropriately.
+  // The navigation may have encountered a header that requests isolation for
+  // the url's origin. Before we pick the renderer, make sure we update the
+  // origin-isolation opt-ins appropriately.
   CheckForIsolationOptIn(GetURL());
 
   // Check if the response should be sent to a renderer.
@@ -2453,7 +2409,7 @@
     DCHECK(!response_should_be_rendered_);
 
   if (render_frame_host_)
-    DetermineOriginIsolationEndResult(IsOptInIsolationRequested(GetURL()));
+    DetermineOriginIsolationEndResult(IsOptInIsolationRequested());
 
   cross_origin_embedder_policy_ = cross_origin_embedder_policy;
 
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index bc8c9b53..6f293b4c 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -239,14 +239,9 @@
   // is at (or past) WILL_PROCESS_RESPONSE.
   bool HasCommittingOrigin(const url::Origin& origin);
 
-  // Returns whether and how this navigation request is requesting opt-in
+  // Returns whether this navigation request is requesting opt-in
   // origin-isolation.
-  enum class OptInIsolationCheckResult {
-    NONE,          // no isolation requested
-    HEADER,        // requested using the Origin-Isolation header
-    ORIGIN_POLICY  // requested using origin policy
-  };
-  OptInIsolationCheckResult IsOptInIsolationRequested(const GURL& url);
+  bool IsOptInIsolationRequested();
 
   // The origin isolation end result is determined early in the lifecycle of a
   // NavigationRequest, but used late. In particular, we want to trigger use
@@ -254,13 +249,10 @@
   enum class OptInOriginIsolationEndResult {
     kNotRequestedAndNotIsolated,
     kNotRequestedButIsolated,
-    kRequestedViaOriginPolicyButNotIsolated,
-    kRequestedViaOriginPolicyAndIsolated,
-    kRequestedViaHeaderButNotIsolated,
-    kRequestedViaHeaderAndIsolated
+    kRequestedButNotIsolated,
+    kRequestedAndIsolated
   };
-  void DetermineOriginIsolationEndResult(
-      OptInIsolationCheckResult check_result);
+  void DetermineOriginIsolationEndResult(bool is_requested);
   void ProcessOriginIsolationEndResult();
 
   // NavigationHandle implementation:
diff --git a/content/browser/renderer_host/render_frame_host_delegate.h b/content/browser/renderer_host/render_frame_host_delegate.h
index 680651d..e83f9f1 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.h
+++ b/content/browser/renderer_host/render_frame_host_delegate.h
@@ -666,6 +666,9 @@
                                       int32_t pp_instance) {}
   virtual void OnPepperStopsPlayback(RenderFrameHostImpl* source,
                                      int32_t pp_instance) {}
+  virtual void OnPepperPluginCrashed(RenderFrameHostImpl* source,
+                                     const base::FilePath& plugin_path,
+                                     base::ProcessId plugin_pid) {}
 #endif
 
  protected:
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 1b7f87f..ae8f1ea4 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -887,6 +887,12 @@
     frame_host_->delegate()->OnPepperStopsPlayback(frame_host_, instance_id_);
   }
 
+  void InstanceCrashed(const base::FilePath& plugin_path,
+                       base::ProcessId plugin_pid) override {
+    frame_host_->delegate()->OnPepperPluginCrashed(frame_host_, plugin_path,
+                                                   plugin_pid);
+  }
+
   void SetVolume(double volume) { remote_->SetVolume(volume); }
 
  private:
diff --git a/content/browser/renderer_host/render_frame_proxy_host.cc b/content/browser/renderer_host/render_frame_proxy_host.cc
index 9d562c24..49546be 100644
--- a/content/browser/renderer_host/render_frame_proxy_host.cc
+++ b/content/browser/renderer_host/render_frame_proxy_host.cc
@@ -166,7 +166,7 @@
     // This can be removed once we don't have a swapped out state on
     // RenderFrame. See https://crbug.com/357747
     if (!frame_tree_node_->IsMainFrame())
-      Send(new UnfreezableFrameMsg_DeleteProxy(routing_id_));
+      GetAssociatedRemoteFrame()->DetachAndDispose();
   }
 
   // TODO(arthursonzogni): There are no known reason for removing the
diff --git a/content/browser/screen_orientation/screen_orientation_delegate_android.cc b/content/browser/screen_orientation/screen_orientation_delegate_android.cc
index 640b536d..409e232e 100644
--- a/content/browser/screen_orientation/screen_orientation_delegate_android.cc
+++ b/content/browser/screen_orientation/screen_orientation_delegate_android.cc
@@ -6,9 +6,8 @@
 
 #include "base/android/scoped_java_ref.h"
 #include "content/browser/screen_orientation/screen_orientation_provider.h"
+#include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/android/content_jni_headers/ScreenOrientationProviderImpl_jni.h"
-#include "ui/android/window_android.h"
-#include "ui/gfx/native_widget_types.h"
 
 namespace content {
 
@@ -31,10 +30,9 @@
   base::android::ScopedJavaLocalRef<jobject> java_instance =
       Java_ScreenOrientationProviderImpl_getInstance(
           base::android::AttachCurrentThread());
-  gfx::NativeWindow window = web_contents->GetTopLevelNativeWindow();
-  Java_ScreenOrientationProviderImpl_lockOrientation(
+  Java_ScreenOrientationProviderImpl_lockOrientationForWebContents(
       base::android::AttachCurrentThread(), java_instance,
-      window ? window->GetJavaObject() : nullptr,
+      static_cast<WebContentsImpl*>(web_contents)->GetJavaWebContents(),
       static_cast<jbyte>(lock_orientation));
 }
 
@@ -53,10 +51,9 @@
   base::android::ScopedJavaLocalRef<jobject> java_instance =
       Java_ScreenOrientationProviderImpl_getInstance(
           base::android::AttachCurrentThread());
-  gfx::NativeWindow window = web_contents->GetTopLevelNativeWindow();
-  Java_ScreenOrientationProviderImpl_unlockOrientation(
+  Java_ScreenOrientationProviderImpl_unlockOrientationForWebContents(
       base::android::AttachCurrentThread(), java_instance,
-      window ? window->GetJavaObject() : nullptr);
+      static_cast<WebContentsImpl*>(web_contents)->GetJavaWebContents());
 }
 
 } // namespace content
diff --git a/content/browser/tracing/startup_tracing_browsertest.cc b/content/browser/tracing/startup_tracing_browsertest.cc
index bc1e63e..7511abb 100644
--- a/content/browser/tracing/startup_tracing_browsertest.cc
+++ b/content/browser/tracing/startup_tracing_browsertest.cc
@@ -28,17 +28,27 @@
 
 namespace {
 
+void CheckForConditionAndWaitMoreIfNeeded(
+    base::RepeatingCallback<bool()> condition,
+    base::OnceClosure quit_closure) {
+  if (condition.Run()) {
+    std::move(quit_closure).Run();
+    return;
+  }
+  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+      FROM_HERE,
+      base::BindOnce(&CheckForConditionAndWaitMoreIfNeeded,
+                     std::move(condition), std::move(quit_closure)),
+      TestTimeouts::tiny_timeout());
+}
+
 // Wait until |condition| returns true.
 void WaitForCondition(base::RepeatingCallback<bool()> condition,
                       const std::string& description) {
-  const base::TimeDelta kTimeout = base::TimeDelta::FromSeconds(30);
-  const base::TimeTicks start_time = base::TimeTicks::Now();
-  while (!condition.Run() && (base::TimeTicks::Now() - start_time < kTimeout)) {
-    base::RunLoop run_loop;
-    base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-        FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
-    run_loop.Run();
-  }
+  base::RunLoop run_loop;
+  CheckForConditionAndWaitMoreIfNeeded(condition, run_loop.QuitClosure());
+  run_loop.Run();
+
   ASSERT_TRUE(condition.Run())
       << "Timeout waiting for condition: " << description;
 }
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index d89656fa..65d404c0 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1147,7 +1147,6 @@
 #if BUILDFLAG(ENABLE_PLUGINS)
   IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(WebContentsImpl, message, render_frame_host)
     IPC_MESSAGE_HANDLER(FrameHostMsg_PepperPluginHung, OnPepperPluginHung)
-    IPC_MESSAGE_HANDLER(FrameHostMsg_PluginCrashed, OnPluginCrashed)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 #else
@@ -6050,10 +6049,10 @@
   pepper_playback_observer_->PepperStopsPlayback(source, pp_instance);
 }
 
-void WebContentsImpl::OnPluginCrashed(RenderFrameHostImpl* source,
-                                      const base::FilePath& plugin_path,
-                                      base::ProcessId plugin_pid) {
-  OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::OnPluginCrashed",
+void WebContentsImpl::OnPepperPluginCrashed(RenderFrameHostImpl* source,
+                                            const base::FilePath& plugin_path,
+                                            base::ProcessId plugin_pid) {
+  OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::OnPepperPluginCrashed",
                         "render_frame_host",
                         base::trace_event::ToTracedValue(source));
   // TODO(nick): Eliminate the |plugin_pid| parameter, which can't be trusted,
@@ -8009,6 +8008,12 @@
 
 #endif  // !defined(OS_MAC)
 
+void WebContentsImpl::UpdateWindowControlsOverlay(
+    const gfx::Rect& bounding_rect) {
+  GetMainFrame()->GetAssociatedLocalMainFrame()->UpdateWindowControlsOverlay(
+      bounding_rect);
+}
+
 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() const {
   return browser_plugin_embedder_.get();
 }
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 00ab358b..bd4c845c 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -531,6 +531,7 @@
   const std::vector<blink::mojom::FaviconURLPtr>& GetFaviconURLs() override;
   void Resize(const gfx::Rect& new_bounds) override;
   gfx::Size GetSize() override;
+  void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override;
 
 #if defined(OS_ANDROID)
   base::android::ScopedJavaLocalRef<jobject> GetJavaWebContents() override;
@@ -782,6 +783,9 @@
                               int32_t pp_instance) override;
   void OnPepperStopsPlayback(RenderFrameHostImpl* source,
                              int32_t pp_instance) override;
+  void OnPepperPluginCrashed(RenderFrameHostImpl* source,
+                             const base::FilePath& plugin_path,
+                             base::ProcessId plugin_pid) override;
 #endif
 
   // RenderViewHostDelegate ----------------------------------------------------
@@ -1518,9 +1522,6 @@
                           int plugin_child_id,
                           const base::FilePath& path,
                           bool is_hung);
-  void OnPluginCrashed(RenderFrameHostImpl* source,
-                       const base::FilePath& plugin_path,
-                       base::ProcessId plugin_pid);
 #endif  // BUILDFLAG(ENABLE_PLUGINS)
   void OnShowValidationMessage(RenderViewHostImpl* source,
                                const gfx::Rect& anchor_in_root_view,
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index 6ab89de..cd99fb5 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -4555,4 +4555,87 @@
   EXPECT_TRUE(browser_td >= renderer_td);
 }
 
+class WebContentsImplBrowserTestWindowControlsOverlay
+    : public WebContentsImplBrowserTest {
+ public:
+  void SetUp() override {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kWebAppWindowControlsOverlay);
+    WebContentsImplBrowserTest::SetUp();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTestWindowControlsOverlay,
+                       UpdateWindowControlsOverlay) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  auto* web_contents = shell()->web_contents();
+
+  GURL url("about:blank");
+  EXPECT_TRUE(NavigateToURL(shell(), url));
+
+  WaitForLoadStop(web_contents);
+
+  // initial state with no visible bounds and empty rect
+  int empty_rect_value = 0;
+
+  EXPECT_EQ(false,
+            EvalJs(web_contents, "navigator.windowControlsOverlay.visible"));
+
+  EXPECT_EQ(
+      empty_rect_value,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().x"));
+
+  EXPECT_EQ(
+      empty_rect_value,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().y"));
+
+  EXPECT_EQ(
+      empty_rect_value,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().width"));
+
+  EXPECT_EQ(
+      empty_rect_value,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().height"));
+
+  gfx::Rect bounding_client_rect =
+      gfx::Rect(2 /*x*/, 2 /*y*/, 2 /*width*/, 2 /*height*/);
+
+  web_contents->UpdateWindowControlsOverlay(bounding_client_rect);
+
+  // information about the bounds should be updated
+  int new_x = 2;
+  int new_y = 2;
+  int new_width = 2;
+  int new_height = 2;
+
+  EXPECT_EQ(true,
+            EvalJs(web_contents, "navigator.windowControlsOverlay.visible"));
+
+  EXPECT_EQ(
+      new_x,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().x"));
+
+  EXPECT_EQ(
+      new_y,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().y"));
+
+  EXPECT_EQ(
+      new_width,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().width"));
+
+  EXPECT_EQ(
+      new_height,
+      EvalJs(web_contents,
+             "navigator.windowControlsOverlay.getBoundingClientRect().height"));
+}
 }  // namespace content
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index beb9d019..74cc582 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -257,15 +257,6 @@
                     base::FilePath /* path */,
                     bool /* is_hung */)
 
-// Sent by the renderer process to indicate that a plugin instance has crashed.
-// Note: |plugin_pid| should not be trusted. The corresponding process has
-// probably died. Moreover, the ID may have been reused by a new process. Any
-// usage other than displaying it in a prompt to the user is very likely to be
-// wrong.
-IPC_MESSAGE_ROUTED2(FrameHostMsg_PluginCrashed,
-                    base::FilePath /* plugin_path */,
-                    base::ProcessId /* plugin_pid */)
-
 // Return information about a plugin for the given URL and MIME
 // type. If there is no matching plugin, |found| is false.
 // |actual_mime_type| is the actual mime type supported by the
diff --git a/content/common/pepper_plugin.mojom b/content/common/pepper_plugin.mojom
index bcd7ac3..288db52 100644
--- a/content/common/pepper_plugin.mojom
+++ b/content/common/pepper_plugin.mojom
@@ -4,6 +4,9 @@
 
 module content.mojom;
 
+import "mojo/public/mojom/base/file_path.mojom";
+import "mojo/public/mojom/base/process_id.mojom";
+
 // Generic Pepper messages. Implemented by the browser.
 interface PepperHost {
   // Notification that a Pepper plugin instance is created in the DOM.
@@ -19,6 +22,14 @@
 
   // Notification a plugin instance has stopped playback.
   StopsPlayback();
+
+  // Notification that a plugin instance has crashed.
+  // Note: |plugin_pid| should not be trusted. The corresponding process has
+  // probably died. Moreover, the ID may have been reused by a new process. Any
+  // usage other than displaying it in a prompt to the user is very likely to be
+  // wrong.
+  InstanceCrashed(mojo_base.mojom.FilePath plugin_path,
+                  mojo_base.mojom.ProcessId plugin_pid);
 };
 
 // Plugin instance specific messages. Implemented by the renderer.
diff --git a/content/common/unfreezable_frame_messages.h b/content/common/unfreezable_frame_messages.h
index 3fae66da..86efcf5 100644
--- a/content/common/unfreezable_frame_messages.h
+++ b/content/common/unfreezable_frame_messages.h
@@ -23,8 +23,4 @@
 // Instructs the renderer to delete the RenderFrame.
 IPC_MESSAGE_ROUTED1(UnfreezableFrameMsg_Delete, content::FrameDeleteIntention)
 
-// Requests the corresponding RenderFrameProxy to be deleted and removed from
-// the frame tree.
-IPC_MESSAGE_ROUTED0(UnfreezableFrameMsg_DeleteProxy)
-
 #endif  // CONTENT_COMMON_UNFREEZABLE_FRAME_MESSAGES_H_
diff --git a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java
index df41d81..8ac3442 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java
@@ -21,6 +21,7 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.content_public.browser.ScreenOrientationDelegate;
 import org.chromium.content_public.browser.ScreenOrientationProvider;
+import org.chromium.content_public.browser.WebContents;
 import org.chromium.device.mojom.ScreenOrientationLockType;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.display.DisplayAndroid;
@@ -41,6 +42,10 @@
 
     private static final String TAG = "ScreenOrientation";
 
+    // More readable constants to be passed to |addPendingRequest|.
+    private static final boolean LOCK = true;
+    private static final boolean UNLOCK = false;
+
     private ScreenOrientationDelegate mDelegate;
 
     /**
@@ -60,6 +65,45 @@
      */
     private Map<Activity, Pair<Boolean, Integer>> mDelayedRequests = new WeakHashMap<>();
 
+    private static final class PendingRequest implements WindowEventObserver {
+        private final ScreenOrientationProviderImpl mProvider;
+        private final WindowEventObserverManager mWindowEventManager;
+        private final boolean mLockOrUnlock;
+        private final byte mWebScreenOrientation;
+        private boolean mObserverRemoved;
+
+        public PendingRequest(ScreenOrientationProviderImpl provider,
+                WindowEventObserverManager windowEventManager, boolean lockOrUnlock,
+                byte webScreenOrientation) {
+            mProvider = provider;
+            mWindowEventManager = windowEventManager;
+            mLockOrUnlock = lockOrUnlock;
+            mWebScreenOrientation = webScreenOrientation;
+            mWindowEventManager.addObserver(this);
+        }
+
+        public void cancel() {
+            if (mObserverRemoved) return;
+            mWindowEventManager.removeObserver(this);
+            mObserverRemoved = true;
+        }
+
+        @Override
+        public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) {
+            if (newWindowAndroid == null) return;
+
+            if (mLockOrUnlock) {
+                mProvider.lockOrientation(newWindowAndroid, mWebScreenOrientation);
+            } else {
+                mProvider.unlockOrientation(newWindowAndroid);
+            }
+            mWindowEventManager.removeObserver(this);
+            mObserverRemoved = true;
+        }
+    }
+
+    private final Map<WebContents, PendingRequest> mPendingRequests = new WeakHashMap<>();
+
     @CalledByNative
     public static ScreenOrientationProviderImpl getInstance() {
         return Holder.sInstance;
@@ -114,7 +158,26 @@
         }
     }
 
+    private void addPendingRequest(
+            WebContents webContents, boolean lockOrUnlock, byte webScreenOrientation) {
+        WindowEventObserverManager windowEventManager =
+                WindowEventObserverManager.from(webContents);
+        PendingRequest existingRequest = mPendingRequests.get(webContents);
+        if (existingRequest != null) existingRequest.cancel();
+        mPendingRequests.put(webContents,
+                new PendingRequest(this, windowEventManager, lockOrUnlock, webScreenOrientation));
+    }
+
     @CalledByNative
+    private void lockOrientationForWebContents(WebContents webContents, byte webScreenOrientation) {
+        WindowAndroid window = webContents.getTopLevelNativeWindow();
+        if (window == null) {
+            addPendingRequest(webContents, LOCK, webScreenOrientation);
+        } else {
+            lockOrientation(window, webScreenOrientation);
+        }
+    }
+
     @Override
     public void lockOrientation(@Nullable WindowAndroid window, byte webScreenOrientation) {
         // WindowAndroid may be null if the tab is being reparented.
@@ -136,6 +199,15 @@
     }
 
     @CalledByNative
+    private void unlockOrientationForWebContents(WebContents webContents) {
+        WindowAndroid window = webContents.getTopLevelNativeWindow();
+        if (window == null) {
+            addPendingRequest(webContents, UNLOCK, (byte) 0);
+        } else {
+            unlockOrientation(window);
+        }
+    }
+
     @Override
     public void unlockOrientation(@Nullable WindowAndroid window) {
         // WindowAndroid may be null if the tab is being reparented.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java
index ac1df74..2fecdee 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java
@@ -11,6 +11,8 @@
 
 /**
  * Interface providing the access to C++ ScreenOrientationProvider.
+ * TODO(boliu): This interface working with WindowAndroid does not support the use case
+ * when an Activity (and WindowAndroid) is recreated on rotation.
  */
 public interface ScreenOrientationProvider {
     static ScreenOrientationProvider getInstance() {
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index c912ce5..a67421e 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -1167,6 +1167,10 @@
   // reliable favicon-related state.
   virtual const std::vector<blink::mojom::FaviconURLPtr>& GetFaviconURLs() = 0;
 
+  // Intended for desktop pwas with manifest entry of window-controls-overlay,
+  // This sends the available title bar area bounds to the renderer process.
+  virtual void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) = 0;
+
  private:
   // This interface should only be implemented inside content.
   friend class WebContentsImpl;
diff --git a/content/public/test/fake_remote_frame.cc b/content/public/test/fake_remote_frame.cc
index d4d61765..205a76a 100644
--- a/content/public/test/fake_remote_frame.cc
+++ b/content/public/test/fake_remote_frame.cc
@@ -93,4 +93,6 @@
       std::move(handle)));
 }
 
+void FakeRemoteFrame::DetachAndDispose() {}
+
 }  // namespace content
diff --git a/content/public/test/fake_remote_frame.h b/content/public/test/fake_remote_frame.h
index d886ef9a..a9b8a3e 100644
--- a/content/public/test/fake_remote_frame.h
+++ b/content/public/test/fake_remote_frame.h
@@ -87,6 +87,7 @@
   void DidUpdateFramePolicy(const blink::FramePolicy& frame_policy) override {}
   void UpdateOpener(const base::Optional<base::UnguessableToken>&
                         opener_frame_token) override;
+  void DetachAndDispose() override;
 
  private:
   void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index e230aafc..4737f70a 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -787,8 +787,8 @@
   BindGraphics(pp_instance(), 0);
   InvalidateRect(gfx::Rect());
 
-  if (render_frame_)
-    render_frame_->PluginCrashed(module_->path(), module_->GetPeerProcessId());
+  if (auto* host = GetPepperPluginInstanceHost())
+    host->InstanceCrashed(module_->path(), module_->GetPeerProcessId());
 }
 
 bool PepperPluginInstanceImpl::Initialize(
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 5393f991..b42f671 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2138,13 +2138,6 @@
   SyncSelectionIfRequired();
 }
 
-void RenderFrameImpl::PluginCrashed(const base::FilePath& plugin_path,
-                                    base::ProcessId plugin_pid) {
-  // TODO(jam): dispatch this IPC in RenderFrameHost and switch to use
-  // routing_id_ as a result.
-  Send(new FrameHostMsg_PluginCrashed(routing_id_, plugin_path, plugin_pid));
-}
-
 #endif  // BUILDFLAG(ENABLE_PLUGINS)
 
 void RenderFrameImpl::ScriptedPrint(bool user_initiated) {
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 96127a4..f55598f 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -332,10 +332,6 @@
   // Informs the render view that a PPAPI plugin has changed selection.
   void PepperSelectionChanged(PepperPluginInstanceImpl* instance);
 
-  // Notification that the given plugin has crashed.
-  void PluginCrashed(const base::FilePath& plugin_path,
-                     base::ProcessId plugin_pid);
-
 #endif  // BUILDFLAG(ENABLE_PLUGINS)
 
   void ScriptedPrint(bool user_initiated);
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 8f12db28..9fb5c49c 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -409,14 +409,7 @@
 }
 
 bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP(RenderFrameProxy, msg)
-    IPC_MESSAGE_HANDLER(UnfreezableFrameMsg_DeleteProxy, OnDeleteProxy)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP()
-
-  // Note: If |handled| is true, |this| may have been deleted.
-  return handled;
+  return false;
 }
 
 void RenderFrameProxy::OnAssociatedInterfaceRequest(
@@ -437,11 +430,6 @@
   return agent_scheduling_group_.Send(message);
 }
 
-void RenderFrameProxy::OnDeleteProxy() {
-  DCHECK(web_frame_);
-  web_frame_->Detach();
-}
-
 void RenderFrameProxy::ChildProcessGone() {
   crashed_ = true;
   compositing_helper_->ChildFrameGone(local_frame_size(),
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index fd91c41..5e8323d5 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -216,12 +216,6 @@
 
   mojom::RenderFrameProxyHost* GetFrameProxyHost();
 
-  // IPC handlers
-  void OnDeleteProxy();
-  void OnCompositorFrameSwapped(const IPC::Message& message);
-  void OnEnforceInsecureRequestPolicy(
-      blink::mojom::InsecureRequestPolicy policy);
-
   // mojom::RenderFrameProxy implementation:
   void EnableAutoResize(const gfx::Size& min_size,
                         const gfx::Size& max_size) override;
@@ -246,10 +240,6 @@
   // The routing ID by which this RenderFrameProxy is known.
   const int routing_id_;
 
-  // The routing ID of the provisional RenderFrame (if any) that is meant to
-  // replace this RenderFrameProxy in the frame tree.
-  int provisional_frame_routing_id_;
-
   // Stores the WebRemoteFrame we are associated with.
   blink::WebRemoteFrame* web_frame_ = nullptr;
 
diff --git a/content/test/data/gpu/functional_files/context.js b/content/test/data/gpu/functional_files/context.js
index 3e96f2d..17a8083 100644
--- a/content/test/data/gpu/functional_files/context.js
+++ b/content/test/data/gpu/functional_files/context.js
@@ -28,7 +28,7 @@
 
   // Only continue if WebGL is available and working.
   if (gl_context) {
-    gl_context.clearColor(0.0, 0.0, 0.0, 1.0);
+    gl_context.clearColor(0.0, 1.0, 0.0, 1.0);
     gl_context.enable(gl_context.DEPTH_TEST);
     gl_context.depthFunc(gl_context.LEQUAL);
     gl_context.clearDepth(1);
diff --git a/content/test/data/gpu/webgl-high-perf.html b/content/test/data/gpu/webgl-high-perf.html
new file mode 100644
index 0000000..f7eab33
--- /dev/null
+++ b/content/test/data/gpu/webgl-high-perf.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+<script type="text/javascript">
+var gl_canvas;
+var gl;
+
+function onLoad() {
+  gl_canvas = document.getElementById("glcanvas");
+  gl_canvas.addEventListener("webglcontextlost", function(event) {
+    event.preventDefault();
+  }, false);
+  gl_canvas.addEventListener("webglcontextrestored", setupWebGL, false);
+
+  setupWebGL();
+
+  window.domAutomationController.reset = function() {
+    window.domAutomationController._loaded = false;
+    window.domAutomationController._succeeded = false;
+    window.domAutomationController._finished = false;
+    window.requestAnimationFrame(succeed);
+  };
+  window.domAutomationController.send("LOADED");
+}
+
+function setupWebGL() {
+  // Initialize the GL context.
+  gl = gl_canvas.getContext("webgl", {powerPreference: "high-performance"});
+  if (gl) {
+    gl.clearColor(0.0, 1.0, 0.0, 1.0);
+    gl.clearDepth(1);
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+  }
+}
+
+function succeed() {
+  if (gl)
+    window.domAutomationController.send("SUCCESS");
+}
+</script>
+</head>
+<body onload="onLoad()">
+  <canvas id="glcanvas" width="640" height="480"></canvas>
+</body>
+</html>
diff --git a/content/test/data/isolated_base_origin_with_subframe.html.mock-http-headers b/content/test/data/isolated_base_origin_with_subframe.html.mock-http-headers
index 5bc8f85..cb32287 100644
--- a/content/test/data/isolated_base_origin_with_subframe.html.mock-http-headers
+++ b/content/test/data/isolated_base_origin_with_subframe.html.mock-http-headers
@@ -1,3 +1,3 @@
 HTTP/1.1 200 OK
 Content-Type: text/html
-Origin-Policy: allowed=(latest)
+Origin-Agent-Cluster: ?1
diff --git a/content/test/gpu/gpu_tests/context_lost_integration_test.py b/content/test/gpu/gpu_tests/context_lost_integration_test.py
index dc18720..6a3d471 100644
--- a/content/test/gpu/gpu_tests/context_lost_integration_test.py
+++ b/content/test/gpu/gpu_tests/context_lost_integration_test.py
@@ -60,7 +60,7 @@
     } else {
       query_result = document.querySelector('.feature-status-list');
     }
-    for (let i=0; i < query_result.childElementCount; i++) {
+    for (let i = 0; i < query_result.childElementCount; i++) {
       let feature_status = query_result.children[i].textContent.split(': ');
       if (feature_status.length == 2 && feature_status[0] == feature_name)
         return feature_status[1];
@@ -69,6 +69,41 @@
   }
 """
 
+vendor_id_query_script = """
+  function GetActiveVendorId(for_hardware_gpu) {
+    let div;
+    if (for_hardware_gpu) {
+      div = document.querySelector('.basic-info-for-hardware-gpu-div');
+    } else {
+      div = document.querySelector('#basic-info');
+    }
+    let trs = div.getElementsByTagName('tr');
+    let vendor_id = 0;
+    // The first four rows are "Initialization time", "In-process GPU",
+    // "Passthrough Command Decoder", and "Sandboxed".
+    for (let i = 4; i < trs.length; i++) {
+      let tds = trs[i].getElementsByTagName('td');
+      let token = tds[0].textContent.trim();
+      if (!token.startsWith('GPU'))
+        break;
+      if (i == 4 && token != 'GPU0')
+        break;
+      let gpu_string = tds[1].textContent.trim();
+      let vendor_info = gpu_string.split(', ')[0].split('= ');
+      if (vendor_info.length != 2 || vendor_info[0] != 'VENDOR')
+        break;
+      let id = parseInt(vendor_info[1]);
+      if (vendor_id == 0)
+        vendor_id = id;
+      if (gpu_string.endsWith('*ACTIVE*')) {
+        vendor_id = id;
+        break;
+      }
+    }
+    return vendor_id;
+  }
+"""
+
 
 class ContextLostIntegrationTest(gpu_integration_test.GpuIntegrationTest):
 
@@ -140,7 +175,9 @@
               'webgl2-multisampling-high-power-switch-loses-context.html'),
              ('ContextLost_MacWebGLPreserveDBHighPowerSwitchLosesContext',
               'webgl2-preserve-db-high-power-switch-loses-context.html'),
-             ('GpuCrash_InfoForHardwareGpu', 'simple.html'))
+             ('GpuCrash_InfoForHardwareGpu', 'simple.html'),
+             ('GpuCrash_InfoForDualHardwareGpus', 'webgl-high-perf.html'))
+
     for t in tests:
       yield (t[0], t[1], ('_' + t[0]))
 
@@ -255,6 +292,16 @@
     tab.Close()
     return status
 
+  def _GetActiveVendorId(self, for_hardware_gpu):
+    tab = self.tab.browser.tabs.New()
+    tab.Navigate('chrome:gpu',
+                 script_to_evaluate_on_commit=vendor_id_query_script)
+    tab.WaitForJavaScriptCondition('window.gpuPagePopulated', timeout=10)
+    vid = (tab.EvaluateJavaScript('GetActiveVendorId(%s)' %
+                                  ('true' if for_hardware_gpu else 'false')))
+    tab.Close()
+    return vid
+
   def _WaitForTabAndCheckCompletion(self):
     tab = self.tab
     completed = _WaitForPageToFinish(tab)
@@ -501,6 +548,33 @@
                 'but got %s' % webgl_status_for_hardware_gpu)
     self._RestartBrowser('must restart after tests that kill the GPU process')
 
+  def _GpuCrash_InfoForDualHardwareGpus(self, test_path):
+    # Ensure that info displayed in chrome:gpu for hardware gpu is from
+    # the latest active GPU before the crash, after gpu process crashes three
+    # times and falls back to SwiftShader.
+    # Currently the test only works on Mac dual GPU bots.
+    if not self._IsDualGPUMacLaptop():
+      logging.info('Skipping test because not running on dual-GPU Mac laptop')
+      return
+    self.RestartBrowserIfNecessaryWithArgs(
+        [cba.DISABLE_DOMAIN_BLOCKING_FOR_3D_APIS])
+    active_vendor_id = self._GetActiveVendorId(False)
+    # Load WebGL content and switch to discrete GPU.
+    self._NavigateAndWaitForLoad(test_path)
+    new_active_vendor_id = self._GetActiveVendorId(False)
+    if not active_vendor_id or not new_active_vendor_id:
+      self.fail('Fail to query the active GPU vendor id from about:gpu')
+    # After three GPU crashes, check if the active vendor id for hardware GPU
+    # is the new_active_vendor_id.
+    self._KillGPUProcess(3, True)
+    active_vendor_id_for_hardware_gpu = self._GetActiveVendorId(True)
+    if not active_vendor_id_for_hardware_gpu:
+      self.fail('Fail to query the active GPU vendor id for hardware GPU')
+    if active_vendor_id_for_hardware_gpu != new_active_vendor_id:
+      self.fail('vendor id for hw GPU should be 0x%04x, got 0x%04x' %
+                (new_active_vendor_id, active_vendor_id_for_hardware_gpu))
+    self._RestartBrowser('must restart after tests that kill the GPU process')
+
   @classmethod
   def GetPlatformTags(cls, browser):
     tags = super(ContextLostIntegrationTest, cls).GetPlatformTags(browser)
diff --git a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
index 175cbe943..e54ba223 100644
--- a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
@@ -136,3 +136,4 @@
 
 # Flaky hangs on Mac Debug NVIDIA, stalling the test suite for 40 minutes
 crbug.com/1161570 [ mac nvidia debug ] GpuCrash_InfoForHardwareGpu [ Skip ]
+crbug.com/1161570 [ mac nvidia debug ] GpuCrash_InfoForDualHardwareGpus [ Skip ]
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
index a6507725..f595b21 100644
--- a/device/bluetooth/BUILD.gn
+++ b/device/bluetooth/BUILD.gn
@@ -49,6 +49,13 @@
     "socket.h",
   ]
 
+  if (is_chromeos || is_linux) {
+    sources += [
+      "bluez/metrics_recorder.cc",
+      "bluez/metrics_recorder.h",
+    ]
+  }
+
   deps = [
     ":bluetooth",
     "//device/bluetooth/public/mojom:deprecated_experimental_interfaces",
diff --git a/device/bluetooth/adapter.cc b/device/bluetooth/adapter.cc
index 0d204e93..50d07da9 100644
--- a/device/bluetooth/adapter.cc
+++ b/device/bluetooth/adapter.cc
@@ -24,7 +24,20 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+#include "device/bluetooth/bluez/metrics_recorder.h"
+#endif
+
 namespace bluetooth {
+namespace {
+
+const char kMojoReceivingPipeError[] = "Failed to create receiving DataPipe.";
+const char kMojoSendingPipeError[] = "Failed to create sending DataPipe.";
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+const char kCannotConnectToDeviceError[] = "Cannot connect to device.";
+#endif
+
+}  // namespace
 
 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter)
     : adapter_(std::move(adapter)) {
@@ -198,7 +211,7 @@
                      copyable_callback),
       base::BindOnce(&Adapter::OnConnectToServiceError,
                      weak_ptr_factory_.GetWeakPtr(), copyable_callback,
-                     "Cannot connect to device."));
+                     kCannotConnectToDeviceError));
 #else
   OnConnectToServiceError(std::move(callback), "Device does not exist.");
 #endif
@@ -400,7 +413,7 @@
   if (result != MOJO_RESULT_OK) {
     socket->Disconnect(base::BindOnce(
         &Adapter::OnConnectToServiceError, weak_ptr_factory_.GetWeakPtr(),
-        std::move(callback), "Failed to create receiving DataPipe."));
+        std::move(callback), kMojoReceivingPipeError));
     return;
   }
 
@@ -411,7 +424,7 @@
   if (result != MOJO_RESULT_OK) {
     socket->Disconnect(base::BindOnce(
         &Adapter::OnConnectToServiceError, weak_ptr_factory_.GetWeakPtr(),
-        std::move(callback), "Failed to create sending DataPipe."));
+        std::move(callback), kMojoSendingPipeError));
     return;
   }
 
@@ -429,6 +442,11 @@
       std::move(receive_pipe_consumer_handle);
   connect_to_service_result->send_stream = std::move(send_pipe_producer_handle);
   std::move(callback).Run(std::move(connect_to_service_result));
+
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+  RecordConnectToServiceInsecurelyResult(
+      ConnectToServiceInsecurelyResult::kSuccess);
+#endif
 }
 
 void Adapter::OnConnectToServiceError(
@@ -436,6 +454,26 @@
     const std::string& message) {
   DLOG(ERROR) << "Failed to connect to service: '" << message << "'";
   std::move(callback).Run(/*result=*/nullptr);
+
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+  base::Optional<ConnectToServiceInsecurelyResult> result =
+      ExtractResultFromErrorString(message);
+  if (result) {
+    RecordConnectToServiceInsecurelyResult(*result);
+  } else if (message == kMojoSendingPipeError) {
+    RecordConnectToServiceInsecurelyResult(
+        ConnectToServiceInsecurelyResult::kMojoSendingPipeError);
+  } else if (message == kMojoReceivingPipeError) {
+    RecordConnectToServiceInsecurelyResult(
+        ConnectToServiceInsecurelyResult::kMojoReceivingPipeError);
+  } else if (message == kCannotConnectToDeviceError) {
+    RecordConnectToServiceInsecurelyResult(
+        ConnectToServiceInsecurelyResult::kCouldNotConnectError);
+  } else {
+    RecordConnectToServiceInsecurelyResult(
+        ConnectToServiceInsecurelyResult::kUnknownError);
+  }
+#endif
 }
 
 void Adapter::OnCreateRfcommServiceInsecurely(
diff --git a/device/bluetooth/bluez/bluetooth_socket_bluez.cc b/device/bluetooth/bluez/bluetooth_socket_bluez.cc
index 97b8cba..b3e404a 100644
--- a/device/bluetooth/bluez/bluetooth_socket_bluez.cc
+++ b/device/bluetooth/bluez/bluetooth_socket_bluez.cc
@@ -18,6 +18,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequenced_task_runner.h"
 #include "base/single_thread_task_runner.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/task_runner_util.h"
 #include "base/threading/scoped_blocking_call.h"
@@ -301,11 +302,11 @@
   DCHECK(ui_task_runner()->RunsTasksInCurrentSequence());
   DCHECK(profile_);
 
+  const std::string error = base::StrCat({error_name, ": ", error_message});
   LOG(WARNING) << profile_->object_path().value()
-               << ": Failed to connect profile: " << error_name << ": "
-               << error_message;
+               << ": Failed to connect profile: " << error;
   UnregisterProfile();
-  std::move(error_callback).Run(error_message);
+  std::move(error_callback).Run(error);
 }
 
 void BluetoothSocketBlueZ::AdapterPresentChanged(BluetoothAdapter* adapter,
diff --git a/device/bluetooth/bluez/metrics_recorder.cc b/device/bluetooth/bluez/metrics_recorder.cc
new file mode 100644
index 0000000..b5f04010
--- /dev/null
+++ b/device/bluetooth/bluez/metrics_recorder.cc
@@ -0,0 +1,84 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/bluetooth/bluez/metrics_recorder.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "base/stl_util.h"
+
+namespace bluetooth {
+namespace {
+
+// Note: These values must stay in sync with BlueZ's error.c file.
+const char kBlueZInvalidArgumentsError[] = "org.bluez.Error.InvalidArguments";
+const char kBlueZInProgressError[] = "org.bluez.Error.InProgress";
+const char kBlueZAlreadyExistsError[] = "org.bluez.Error.AlreadyExists";
+const char kBlueZNotSupportedError[] = "org.bluez.Error.NotSupported";
+const char kBlueZNotConnectedError[] = "org.bluez.Error.NotConnected";
+const char kBlueZAlreadyConnectedError[] = "org.bluez.Error.AlreadyConnected";
+const char kBlueZNotAvailableError[] = "org.bluez.Error.NotAvailable";
+const char kBlueZDoesNotExistError[] = "org.bluez.Error.DoesNotExist";
+const char kBlueZNotAuthorizedError[] = "org.bluez.Error.NotAuthorized";
+const char kBlueZNotPermittedError[] = "org.bluez.Error.NotPermitted";
+const char kBlueZNoSuchAdapterError[] = "org.bluez.Error.NoSuchAdapter";
+const char kBlueZAgentNotAvailableError[] = "org.bluez.Error.AgentNotAvailable";
+const char kBlueZNotReadyError[] = "org.bluez.Error.NotReady";
+const char kBlueZFailedError[] = "org.bluez.Error.Failed";
+
+}  // namespace
+
+base::Optional<ConnectToServiceInsecurelyResult> ExtractResultFromErrorString(
+    const std::string& error_string) {
+  if (base::Contains(error_string, kBlueZInvalidArgumentsError))
+    return ConnectToServiceInsecurelyResult::kInvalidArgumentsError;
+
+  if (base::Contains(error_string, kBlueZInProgressError))
+    return ConnectToServiceInsecurelyResult::kInProgressError;
+
+  if (base::Contains(error_string, kBlueZAlreadyExistsError))
+    return ConnectToServiceInsecurelyResult::kAlreadyExistsError;
+
+  if (base::Contains(error_string, kBlueZNotSupportedError))
+    return ConnectToServiceInsecurelyResult::kNotSupportedError;
+
+  if (base::Contains(error_string, kBlueZNotConnectedError))
+    return ConnectToServiceInsecurelyResult::kNotConnectedError;
+
+  if (base::Contains(error_string, kBlueZAlreadyConnectedError))
+    return ConnectToServiceInsecurelyResult::kAlreadyConnectedError;
+
+  if (base::Contains(error_string, kBlueZNotAvailableError))
+    return ConnectToServiceInsecurelyResult::kNotAvailableError;
+
+  if (base::Contains(error_string, kBlueZDoesNotExistError))
+    return ConnectToServiceInsecurelyResult::kDoesNotExistError;
+
+  if (base::Contains(error_string, kBlueZNotAuthorizedError))
+    return ConnectToServiceInsecurelyResult::kNotAuthorizedError;
+
+  if (base::Contains(error_string, kBlueZNotPermittedError))
+    return ConnectToServiceInsecurelyResult::kNotPermittedError;
+
+  if (base::Contains(error_string, kBlueZNoSuchAdapterError))
+    return ConnectToServiceInsecurelyResult::kNoSuchAdapterError;
+
+  if (base::Contains(error_string, kBlueZAgentNotAvailableError))
+    return ConnectToServiceInsecurelyResult::kAgentNotAvailableError;
+
+  if (base::Contains(error_string, kBlueZNotReadyError))
+    return ConnectToServiceInsecurelyResult::kNotReadyError;
+
+  if (base::Contains(error_string, kBlueZFailedError))
+    return ConnectToServiceInsecurelyResult::kFailedError;
+
+  return base::nullopt;
+}
+
+void RecordConnectToServiceInsecurelyResult(
+    ConnectToServiceInsecurelyResult result) {
+  base::UmaHistogramEnumeration(
+      "Bluetooth.Linux.ConnectToServiceInsecurelyResult", result);
+}
+
+}  // namespace bluetooth
diff --git a/device/bluetooth/bluez/metrics_recorder.h b/device/bluetooth/bluez/metrics_recorder.h
new file mode 100644
index 0000000..9eee01c
--- /dev/null
+++ b/device/bluetooth/bluez/metrics_recorder.h
@@ -0,0 +1,47 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef DEVICE_BLUETOOTH_BLUEZ_METRICS_RECORDER_H_
+#define DEVICE_BLUETOOTH_BLUEZ_METRICS_RECORDER_H_
+
+#include "base/optional.h"
+
+namespace bluetooth {
+
+// Result types for ConnectToServiceInsecurely(). Numerical values are used for
+// metrics and should not be changed or reused.
+enum class ConnectToServiceInsecurelyResult {
+  kSuccess = 0,
+  kInvalidArgumentsError = 1,
+  kInProgressError = 2,
+  kAlreadyExistsError = 3,
+  kNotSupportedError = 4,
+  kNotConnectedError = 5,
+  kAlreadyConnectedError = 6,
+  kNotAvailableError = 7,
+  kDoesNotExistError = 8,
+  kNotAuthorizedError = 9,
+  kNotPermittedError = 10,
+  kNoSuchAdapterError = 11,
+  kAgentNotAvailableError = 12,
+  kNotReadyError = 13,
+  kFailedError = 14,
+  kMojoReceivingPipeError = 15,
+  kMojoSendingPipeError = 16,
+  kCouldNotConnectError = 17,
+  kUnknownError = 18,
+  kMaxValue = kUnknownError
+};
+
+// Returns the ConnectToServiceInsecurelyResult type associated with
+// |error_string|, or null if no result could be found.
+base::Optional<ConnectToServiceInsecurelyResult> ExtractResultFromErrorString(
+    const std::string& error_string);
+
+void RecordConnectToServiceInsecurelyResult(
+    ConnectToServiceInsecurelyResult result);
+
+}  // namespace bluetooth
+
+#endif  // DEVICE_BLUETOOTH_BLUEZ_METRICS_RECORDER_H_
diff --git a/extensions/browser/api/BUILD.gn b/extensions/browser/api/BUILD.gn
index 85f6363..9378a280 100644
--- a/extensions/browser/api/BUILD.gn
+++ b/extensions/browser/api/BUILD.gn
@@ -138,7 +138,6 @@
     public_deps += [
       "//extensions/browser/api/cec_private",
       "//extensions/browser/api/diagnostics",
-      "//extensions/browser/api/virtual_keyboard",
       "//extensions/browser/api/vpn_provider",
       "//extensions/browser/api/webcam_private",
     ]
@@ -209,7 +208,10 @@
   ]
 
   if (is_chromeos_ash) {
-    public_deps += [ "//extensions/browser/api/clipboard" ]
+    public_deps += [
+      "//extensions/browser/api/clipboard",
+      "//extensions/browser/api/virtual_keyboard",
+    ]
   }
 }
 
diff --git a/extensions/browser/api/virtual_keyboard/BUILD.gn b/extensions/browser/api/virtual_keyboard/BUILD.gn
index 0c3a216..c66ebcf 100644
--- a/extensions/browser/api/virtual_keyboard/BUILD.gn
+++ b/extensions/browser/api/virtual_keyboard/BUILD.gn
@@ -17,6 +17,7 @@
     "//build:chromeos_buildflags",
     "//extensions/browser/api/virtual_keyboard_private",
     "//extensions/common/api",
+    "//ui/base/ime/chromeos",
   ]
 
   public_deps = [ "//extensions/browser:browser_sources" ]
diff --git a/gin/function_template.h b/gin/function_template.h
index 3f6a1dd..2c13d41 100644
--- a/gin/function_template.h
+++ b/gin/function_template.h
@@ -248,9 +248,8 @@
 
   v8::Local<v8::FunctionTemplate> tmpl = v8::FunctionTemplate::New(
       isolate, &internal::Dispatcher<Sig>::DispatchToCallback,
-      ConvertToV8<v8::Local<v8::External>>(isolate,
-                                           holder->GetHandle(isolate)));
-  tmpl->RemovePrototype();
+      ConvertToV8<v8::Local<v8::External>>(isolate, holder->GetHandle(isolate)),
+      v8::Local<v8::Signature>(), 0, v8::ConstructorBehavior::kThrow);
   return tmpl;
 }
 
diff --git a/gin/modules/console.cc b/gin/modules/console.cc
index 8786392b..7e3087f 100644
--- a/gin/modules/console.cc
+++ b/gin/modules/console.cc
@@ -29,9 +29,9 @@
 // static
 void Console::Register(v8::Isolate* isolate,
                        v8::Local<v8::ObjectTemplate> templ) {
-  v8::Local<v8::FunctionTemplate> log_templ =
-      v8::FunctionTemplate::New(isolate, Log);
-  log_templ->RemovePrototype();
+  v8::Local<v8::FunctionTemplate> log_templ = v8::FunctionTemplate::New(
+      isolate, Log, v8::Local<v8::Value>(), v8::Local<v8::Signature>(), 0,
+      v8::ConstructorBehavior::kThrow);
 
   templ->Set(StringToSymbol(isolate, "log"), log_templ);
 }
diff --git a/gpu/config/gpu_info.cc b/gpu/config/gpu_info.cc
index e989baa..9a55d9b 100644
--- a/gpu/config/gpu_info.cc
+++ b/gpu/config/gpu_info.cc
@@ -238,6 +238,10 @@
   return gpu.vendor_id != 0 || !gl_vendor.empty();
 }
 
+bool GPUInfo::UsesSwiftShader() const {
+  return gl_renderer.find("SwiftShader") != std::string::npos;
+}
+
 void GPUInfo::EnumerateFields(Enumerator* enumerator) const {
   struct GPUInfoKnownFields {
     base::TimeDelta initialization_time;
diff --git a/gpu/config/gpu_info.h b/gpu/config/gpu_info.h
index 1589fee9..6b69e32 100644
--- a/gpu/config/gpu_info.h
+++ b/gpu/config/gpu_info.h
@@ -283,6 +283,8 @@
 
   bool IsInitialized() const;
 
+  bool UsesSwiftShader() const;
+
   // The amount of time taken to get from the process starting to the message
   // loop being pumped.
   base::TimeDelta initialization_time;
diff --git a/ios/build/bots/scripts/result_sink_util.py b/ios/build/bots/scripts/result_sink_util.py
index e4c53ce6..a48b869 100644
--- a/ios/build/bots/scripts/result_sink_util.py
+++ b/ios/build/bots/scripts/result_sink_util.py
@@ -106,11 +106,15 @@
       # Ensure session is closed at exit.
       atexit.register(self.close)
 
+    logging.getLogger("requests").setLevel(logging.WARNING)
+
   def close(self):
     """Closes the connection to result sink server."""
     if not self.sink:
       return
     LOGGER.info('Closing connection with result sink server.')
+    # Reset to default logging level of test runner scripts.
+    logging.getLogger("requests").setLevel(logging.DEBUG)
     self._session.close()
 
   def post(self, test_result):
diff --git a/ios/build/bots/scripts/test_apps.py b/ios/build/bots/scripts/test_apps.py
index fa225c05..757711a 100644
--- a/ios/build/bots/scripts/test_apps.py
+++ b/ios/build/bots/scripts/test_apps.py
@@ -472,6 +472,8 @@
       ]
       self.test_args.append('--gtest_filter=%s' % gtest_filter)
 
+    self.test_args.append('--gmock_verbose=error')
+
     xctestrun_data['TestTargetName'].update(
         {'CommandLineArguments': self.test_args})
 
@@ -587,6 +589,8 @@
       ]
       self.test_args.append('--gtest_filter=%s' % gtest_filter)
 
+    self.test_args.append('--gmock_verbose=error')
+
     xctestrun_data['TestTargetName'].update(
         {'CommandLineArguments': self.test_args})
 
diff --git a/ios/build/bots/scripts/test_apps_test.py b/ios/build/bots/scripts/test_apps_test.py
index 7a90156..dd22bb4 100644
--- a/ios/build/bots/scripts/test_apps_test.py
+++ b/ios/build/bots/scripts/test_apps_test.py
@@ -3,12 +3,20 @@
 # found in the LICENSE file.
 """Unittests for test_apps.py."""
 
+import mock
 import unittest
 
 import test_apps
 import test_runner_test
 
 
+_TEST_APP_PATH = '/path/to/test_app.app'
+_HOST_APP_PATH = '/path/to/host_app.app'
+_BUNDLE_ID = 'org.chromium.gtest.test-app'
+_MODULE_NAME = 'test_app'
+_XCTEST_PATH = '/PlugIns/boringssl_ssl_tests_module.xctest'
+
+
 class GetKIFTestFilterTest(test_runner_test.TestCase):
   """Tests for test_runner.get_kif_test_filter."""
 
@@ -58,5 +66,82 @@
     self.assertEqual(test_apps.get_gtest_filter(tests, invert=True), expected)
 
 
+class DeviceXCTestUnitTestsAppTest(test_runner_test.TestCase):
+  """Tests to test methods of SimulatorXCTestUnitTestsApp."""
+
+  @mock.patch('test_apps.get_bundle_id', return_value=_BUNDLE_ID)
+  @mock.patch(
+      'test_apps.DeviceXCTestUnitTestsApp._xctest_path',
+      return_value=_XCTEST_PATH)
+  @mock.patch('os.path.exists', return_value=True)
+  def test_fill_xctestrun_node(self, *args):
+    """Tests fill_xctestrun_node method."""
+    test_app = test_apps.DeviceXCTestUnitTestsApp(_TEST_APP_PATH)
+    expected_xctestrun_node = {
+        'TestTargetName': {
+            'CommandLineArguments': [
+                '--enable-run-ios-unittests-with-xctest',
+                '--gmock_verbose=error'
+            ],
+            'IsAppHostedTestBundle': True,
+            'TestBundlePath': '__TESTHOST__/%s' % _XCTEST_PATH,
+            'TestHostBundleIdentifier': _BUNDLE_ID,
+            'TestHostPath': '%s' % _TEST_APP_PATH,
+            'TestingEnvironmentVariables': {
+                'DYLD_INSERT_LIBRARIES':
+                    '__TESTHOST__/Frameworks/libXCTestBundleInject.dylib',
+                'DYLD_LIBRARY_PATH':
+                    '__PLATFORMS__/iPhoneOS.platform/Developer/Library',
+                'DYLD_FRAMEWORK_PATH':
+                    '__PLATFORMS__/iPhoneOS.platform/Developer/'
+                    'Library/Frameworks',
+                'XCInjectBundleInto':
+                    '__TESTHOST__/%s' % _MODULE_NAME
+            }
+        }
+    }
+    xctestrun_node = test_app.fill_xctestrun_node()
+    self.assertEqual(xctestrun_node, expected_xctestrun_node)
+
+
+class SimulatorXCTestUnitTestsAppTest(test_runner_test.TestCase):
+  """Tests to test methods of SimulatorXCTestUnitTestsApp."""
+
+  @mock.patch('test_apps.get_bundle_id', return_value=_BUNDLE_ID)
+  @mock.patch(
+      'test_apps.SimulatorXCTestUnitTestsApp._xctest_path',
+      return_value=_XCTEST_PATH)
+  @mock.patch('os.path.exists', return_value=True)
+  def test_fill_xctestrun_node(self, *args):
+    """Tests fill_xctestrun_node method."""
+    test_app = test_apps.SimulatorXCTestUnitTestsApp(_TEST_APP_PATH)
+    expected_xctestrun_node = {
+        'TestTargetName': {
+            'CommandLineArguments': [
+                '--enable-run-ios-unittests-with-xctest',
+                '--gmock_verbose=error'
+            ],
+            'IsAppHostedTestBundle': True,
+            'TestBundlePath': '__TESTHOST__/%s' % _XCTEST_PATH,
+            'TestHostBundleIdentifier': _BUNDLE_ID,
+            'TestHostPath': '%s' % _TEST_APP_PATH,
+            'TestingEnvironmentVariables': {
+                'DYLD_INSERT_LIBRARIES':
+                    '__PLATFORMS__/iPhoneSimulator.platform/Developer/usr/lib/'
+                    'libXCTestBundleInject.dylib',
+                'DYLD_LIBRARY_PATH':
+                    '__PLATFORMS__/iPhoneSimulator.platform/Developer/Library',
+                'DYLD_FRAMEWORK_PATH':
+                    '__PLATFORMS__/iPhoneSimulator.platform/Developer/'
+                    'Library/Frameworks',
+                'XCInjectBundleInto':
+                    '__TESTHOST__/%s' % _MODULE_NAME
+            }
+        }
+    }
+    xctestrun_node = test_app.fill_xctestrun_node()
+    self.assertEqual(xctestrun_node, expected_xctestrun_node)
+
+
 if __name__ == '__main__':
-  unittest.main()
\ No newline at end of file
+  unittest.main()
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index c09d8df..fa1a991 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">ትር ደርሷል።</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> ደቂቃዎች</translation>
 <translation id="3448016392200048164">የተከፈለ ዕይታ</translation>
+<translation id="3454224729131972583">ርዕስ</translation>
 <translation id="345565170154308620">የይለፍ ቃላትን አቀናብር...</translation>
 <translation id="3469166899695866866">ማውረድ ይቁም?</translation>
 <translation id="3470502288861289375">በመቅዳት ላይ...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">ቁጥር</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ላይ ዕልባት ተደርጓል</translation>
 <translation id="3709582977625132201">እንዳልተነበበ ምልክት አድርግ</translation>
+<translation id="3720541637541300822">Chromeን ሲዘጉ ማንነት የማያሳውቁ ትሮችን ይቆልፉ</translation>
 <translation id="3740397331642243698">በGoogle Chrome ውስጥ የገቡትን ዩአርኤሎች ማንነትን በማያሳውቅ ሁነታ ላይ ይከፍታል።</translation>
 <translation id="3771033907050503522">ማንነት የማያሳውቁ ትሮች</translation>
 <translation id="3775743491439407556">ስምረት እየሰራ አይደለም</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index c423b15..e05a434f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Атрымана ўкладка.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> хв</translation>
 <translation id="3448016392200048164">Раздзелены кадр</translation>
+<translation id="3454224729131972583">Форма звароту</translation>
 <translation id="345565170154308620">Кіраваць паролямі...</translation>
 <translation id="3469166899695866866">Спыніць спампоўку?</translation>
 <translation id="3470502288861289375">Ідзе капіраванне...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Нумар</translation>
 <translation id="3691593122358196899">Закладка дададзена ў папку "<ph name="FOLDER_TITLE" />"</translation>
 <translation id="3709582977625132201">Пазначыць як непрачытанае</translation>
+<translation id="3720541637541300822">Блакіраваць укладкі ў рэжыме інкогніта пры закрыцці Chrome</translation>
 <translation id="3740397331642243698">Адкрывае ўведзеныя URL-адрасы ў Google Chrome у рэжыме інкогніта.</translation>
 <translation id="3771033907050503522">Укладкі інкогніта</translation>
 <translation id="3775743491439407556">Сінхранізацыя не працуе</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 7ed3e1a9..5da1f32 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">ট্যাব পাওয়া গেছে।</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> মিনিট</translation>
 <translation id="3448016392200048164">বিভক্ত দৃশ্য</translation>
+<translation id="3454224729131972583">শীর্ষক</translation>
 <translation id="345565170154308620">পাসওয়ার্ড পরিচালনা করুন…</translation>
 <translation id="3469166899695866866">ডাউনলোড বন্ধ করবেন?</translation>
 <translation id="3470502288861289375">অনুলিপি করা হচ্ছে...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">নম্বর</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> এ বুকমার্ক করা হয়েছে</translation>
 <translation id="3709582977625132201">'পড়া হয়নি' হিসেবে চিহ্নিত করুন</translation>
+<translation id="3720541637541300822">Chrome বন্ধ করলে, 'ছদ্মবেশী' ট্যাব লক হয়ে যায়</translation>
 <translation id="3740397331642243698">এটি ইনপুট করা ইউআরএলগুলিকে Google Chrome-এ, 'ছদ্মবেশী' মোডে খোলে।</translation>
 <translation id="3771033907050503522">ছদ্মবেশী ট্যাবগুলি</translation>
 <translation id="3775743491439407556">সিঙ্ক কাজ করছে না</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 5e382ae..0ccd89df 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">S'ha rebut una pestanya.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Visualització dividida</translation>
+<translation id="3454224729131972583">Títol</translation>
 <translation id="345565170154308620">Gestiona les contrasenyes...</translation>
 <translation id="3469166899695866866">Vols aturar la baixada?</translation>
 <translation id="3470502288861289375">S'està copiant...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Adreça d'interès afegida a <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Marca com a no llegit</translation>
+<translation id="3720541637541300822">Bloqueja les pestanyes d'incògnit després de tancar Chrome</translation>
 <translation id="3740397331642243698">Obre els URL introduïts en mode d'incògnit a Google Chrome.</translation>
 <translation id="3771033907050503522">Pestanyes d'incògnit</translation>
 <translation id="3775743491439407556">La sincronització no funciona</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index b960a88..2916d66 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Byla přijata karta.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Režim Split View</translation>
+<translation id="3454224729131972583">Název</translation>
 <translation id="345565170154308620">Spravovat hesla...</translation>
 <translation id="3469166899695866866">Zastavit stahování?</translation>
 <translation id="3470502288861289375">Kopírování...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Číslo</translation>
 <translation id="3691593122358196899">Záložka přidána do složky <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Označit jako nepřečtené</translation>
+<translation id="3720541637541300822">Při zavření Chromu zamknout anonymní karty</translation>
 <translation id="3740397331642243698">Otevře zadané adresy URL v prohlížeči Google Chrome v anonymním režimu.</translation>
 <translation id="3771033907050503522">Anonymní karty</translation>
 <translation id="3775743491439407556">Synchronizace nefunguje</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 25fc35d..ba377e2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -465,7 +465,7 @@
 <translation id="5964480694698977962">Neuen Inkognitotab erstellen.</translation>
 <translation id="5965679971710331625">Sie sind angemeldet</translation>
 <translation id="5979837087407522202">Passwörter suchen</translation>
-<translation id="5982717868370722439">Vorhandene Daten zu <ph name="USER_EMAIL" /> hinzufügen.</translation>
+<translation id="5982717868370722439">Vorhandene Daten zu <ph name="USER_EMAIL" /> hinzufügen</translation>
 <translation id="5984222099446776634">Kürzlich besucht</translation>
 <translation id="5988851877894965432">URLs in Chrome öffnen</translation>
 <translation id="6012140227487808125">Wird verschlüsselt…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index ef9ed6f..3af5ea1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -60,7 +60,7 @@
 <translation id="1492417797159476138">You already saved this username for this site</translation>
 <translation id="1509486075633541495">Sign in to website</translation>
 <translation id="1509960214886564027">Features on many sites may break</translation>
-<translation id="152234381334907219">Never Saved</translation>
+<translation id="152234381334907219">Never saved</translation>
 <translation id="1523341279170789507">Allow All Cookies</translation>
 <translation id="1535268707340844072">Your current setting may cause some sites to break. To manage cookies for all sites, see <ph name="BEGIN_LINK" />Cookie settings<ph name="END_LINK" />.</translation>
 <translation id="1540800554400757039">Address 1</translation>
@@ -179,7 +179,7 @@
 <translation id="2830972654601096923">Manage Addresses…</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Initial Sync Setup Not Finished</translation>
-<translation id="2843803966603263712">Reset Translate Settings</translation>
+<translation id="2843803966603263712">Reset Translate settings</translation>
 <translation id="2858204748079866344">To protect your privacy, Chrome will not auto-fill your password in this field.</translation>
 <translation id="285960592395650245">Retry Download</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -595,7 +595,7 @@
 <translation id="7159472599653637159">Request Mobile Site</translation>
 <translation id="7162168282402939716">Unlock incognito tabs with <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /></translation>
 <translation id="7172852049901402487">Keep your passwords safe from security issues</translation>
-<translation id="7173114856073700355">Open Settings</translation>
+<translation id="7173114856073700355">Open settings</translation>
 <translation id="7189598951263744875">Share...</translation>
 <translation id="7192050974311852563">Start logging</translation>
 <translation id="7203585745079012652">Speak Answers Back</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index 30cc7ff..4db4ced 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Fitxa bat jaso da.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Ikuspegi zatitua</translation>
+<translation id="3454224729131972583">Izena</translation>
 <translation id="345565170154308620">Kudeatu pasahitzak…</translation>
 <translation id="3469166899695866866">Deskarga eten nahi duzu?</translation>
 <translation id="3470502288861289375">Kopiatzen…</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Zenbakia</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> karpetan gehitu da laster-marka</translation>
 <translation id="3709582977625132201">Markatu irakurri gabeko gisa</translation>
+<translation id="3720541637541300822">Blokeatu ezkutuko moduko fitxak Chrome ixten duzunean</translation>
 <translation id="3740397331642243698">Idatzitako URLak Google Chrome-ren ezkutuko moduan irekitzen ditu.</translation>
 <translation id="3771033907050503522">Ezkutuko moduko fitxak</translation>
 <translation id="3775743491439407556">Sinkronizazioa ez dabil</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 15a5cdefa..978cd85 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">برگه دریافت شد.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> دقیقه</translation>
 <translation id="3448016392200048164">نمای تقسیم</translation>
+<translation id="3454224729131972583">عنوان</translation>
 <translation id="345565170154308620">مدیریت گذرواژه‌ها…</translation>
 <translation id="3469166899695866866">بارگیری متوقف شود؟</translation>
 <translation id="3470502288861289375">در حال کپی کردن...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">عدد</translation>
 <translation id="3691593122358196899">نشانک به <ph name="FOLDER_TITLE" /> اضافه شد</translation>
 <translation id="3709582977625132201">علامت‌گذاری به‌عنوان خوانده‌نشده</translation>
+<translation id="3720541637541300822">‏قفل کردن «برگه‌های ناشناس» وقتی Chrome را می‌بندید</translation>
 <translation id="3740397331642243698">‏نشانی‌های واردشده را در Google Chrome در حالت «ناشناس» باز می‌کند.</translation>
 <translation id="3771033907050503522">برگه‌های ناشناس</translation>
 <translation id="3775743491439407556">همگام‌سازی کار نمی‌کند</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 6baf99a..80ef0b5d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Välilehti vastaanotettu</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Jaettu näkymä</translation>
+<translation id="3454224729131972583">Nimi</translation>
 <translation id="345565170154308620">Salasanavalinnat…</translation>
 <translation id="3469166899695866866">Pysäytetäänkö lataus?</translation>
 <translation id="3470502288861289375">Kopioidaan…</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Numero</translation>
 <translation id="3691593122358196899">Lisätty kirjanmerkiksi kansioon <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Merkitse lukemattomaksi</translation>
+<translation id="3720541637541300822">Lukitse incognito-välilehdet, kun suljet Chromen</translation>
 <translation id="3740397331642243698">Avaa syötetyt URL-osoitteet Google Chromen incognito-tilassa.</translation>
 <translation id="3771033907050503522">Incognito</translation>
 <translation id="3775743491439407556">Synkronointi ei toimi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index 4a09e8a..df46a44 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Onglet reçu.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Vue partagée</translation>
+<translation id="3454224729131972583">Titre</translation>
 <translation id="345565170154308620">Gérer les mots de passe…</translation>
 <translation id="3469166899695866866">Arrêter le téléchargement?</translation>
 <translation id="3470502288861289375">Copie en cours…</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Numéro</translation>
 <translation id="3691593122358196899">Marqué comme favori dans <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Marquer comme non lu</translation>
+<translation id="3720541637541300822">Verrouiller les onglets de navigation privée lorsque vous fermez Chrome</translation>
 <translation id="3740397331642243698">Ouvre les URL entrées dans Google Chrome en mode de navigation privée.</translation>
 <translation id="3771033907050503522">Onglets nav. priv.</translation>
 <translation id="3775743491439407556">La synchronisation ne fonctionne pas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
index 7975821..1a7ef12 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Recibiuse unha pestana.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Vista dividida</translation>
+<translation id="3454224729131972583">Tratamento</translation>
 <translation id="345565170154308620">Xestionar contrasinais…</translation>
 <translation id="3469166899695866866">Queres deter a descarga?</translation>
 <translation id="3470502288861289375">Copiando...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Marcador engadido a <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Marcar como non lido</translation>
+<translation id="3720541637541300822">Bloquear pestanas do modo de incógnito ao pechar Chrome</translation>
 <translation id="3740397331642243698">Abre os URL escritos en Google Chrome no modo de incógnito.</translation>
 <translation id="3771033907050503522">Pestanas de incógnito</translation>
 <translation id="3775743491439407556">A sincronización non funciona</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 9dbdcc4d..549223b7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -118,7 +118,7 @@
 <translation id="2139867232736819575">Vágólapra másolt szöveg keresése</translation>
 <translation id="2149973817440762519">Könyvjelző szerkesztése</translation>
 <translation id="2175927920773552910">QR-kód</translation>
-<translation id="2198757192731523470">A Google felhasználhatja az Ön előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására.</translation>
+<translation id="2198757192731523470">A Google felhasználhatja az Ön előzményeit a Kereső, a hirdetések és más Google-szolgáltatások személyre szabására.</translation>
 <translation id="2218443599109088993">Kicsinyítés</translation>
 <translation id="2230173723195178503">A weboldal betöltött</translation>
 <translation id="2239626343334228536">Böngészési adatok törlése…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
index 36142c6..baa61d59 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Դուք ներդիր եք ստացել։</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> րոպե</translation>
 <translation id="3448016392200048164">Տրոհված տեսք</translation>
+<translation id="3454224729131972583">Դիմելաձև</translation>
 <translation id="345565170154308620">Կառավարել գաղտնաբառերը…</translation>
 <translation id="3469166899695866866">Դադարեցնե՞լ ներբեռնումը</translation>
 <translation id="3470502288861289375">Պատճենում…</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Քարտի համարը</translation>
 <translation id="3691593122358196899">Էջանիշը պահվել է <ph name="FOLDER_TITLE" />-ում</translation>
 <translation id="3709582977625132201">Նշել որպես չկարդացված</translation>
+<translation id="3720541637541300822">Կողպել ինկոգնիտո ներդիրները, երբ փակում եք Chrome-ը</translation>
 <translation id="3740397331642243698">Մուտքագրված URL-ները բացվում են Google Chrome-ի ինկոգնիտո ներդիրում։</translation>
 <translation id="3771033907050503522">Ինկոգնիտո ներդիրներ</translation>
 <translation id="3775743491439407556">Համաժամացումը չի աշխատում</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index abac366..7a5920ba 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Skirtukas gautas.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min.</translation>
 <translation id="3448016392200048164">Padalytas rodinys</translation>
+<translation id="3454224729131972583">Pavadinimas</translation>
 <translation id="345565170154308620">Tvarkyti slaptažodžius...</translation>
 <translation id="3469166899695866866">Sustabdyti atsisiuntimą?</translation>
 <translation id="3470502288861289375">Kopijuojama...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Numeris</translation>
 <translation id="3691593122358196899">Sukurta „<ph name="FOLDER_TITLE" />“ žymė</translation>
 <translation id="3709582977625132201">Pažymėti kaip neskaitytą</translation>
+<translation id="3720541637541300822">Užrakinti inkognito skirtukus uždarius „Chrome“</translation>
 <translation id="3740397331642243698">Atidaromi įvesti URL naršyklėje „Google Chrome“ inkognito režimu.</translation>
 <translation id="3771033907050503522">Inkognito skirt.</translation>
 <translation id="3775743491439407556">Sinchronizavimas neveikia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
index 67908b86..f957ac9d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Примена е картичка.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> мин.</translation>
 <translation id="3448016392200048164">Поделен приказ</translation>
+<translation id="3454224729131972583">Наслов</translation>
 <translation id="345565170154308620">Управувајте со лозинките…</translation>
 <translation id="3469166899695866866">Дали да се сопре преземањето?</translation>
 <translation id="3470502288861289375">Се копира...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Број</translation>
 <translation id="3691593122358196899">Додаден е обележувач во <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Обележи како непрочитано</translation>
+<translation id="3720541637541300822">Заклучувај ги картичките „Инкогнито“ кога ќе го затворам Chrome</translation>
 <translation id="3740397331642243698">Ги отвора внесените URL-адреси во Google Chrome во „Инкогнито“.</translation>
 <translation id="3771033907050503522">Инкогнито картички</translation>
 <translation id="3775743491439407556">Синхронизацијата не функционира</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index 370859d..7bcbe6f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">ടാബ് സ്വീകരിച്ചു.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> മി.</translation>
 <translation id="3448016392200048164">വിഭജിത കാഴ്‌ച</translation>
+<translation id="3454224729131972583">പേര്</translation>
 <translation id="345565170154308620">പാസ്‌വേഡുകൾ മാനേജ് ചെയ്യുക...</translation>
 <translation id="3469166899695866866">ഡൗൺലോഡ് നിർത്തണോ?</translation>
 <translation id="3470502288861289375">പകർത്തുന്നു...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">നമ്പർ</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ഫോൾഡറിലേക്ക് ബുക്ക്മാർക്ക് ചെയ്‌തു</translation>
 <translation id="3709582977625132201">വായിച്ചില്ലെന്ന് അടയാളപ്പെടുത്തുക</translation>
+<translation id="3720541637541300822">Chrome അടയ്‌ക്കുമ്പോൾ അദൃശ്യ ടാബുകൾ ലോക്ക് ചെയ്യുക</translation>
 <translation id="3740397331642243698">Google Chrome-ൽ നൽകിയിട്ടുള്ള URL-കൾ അദൃശ്യ മോഡിൽ തുറക്കുന്നു.</translation>
 <translation id="3771033907050503522">ആൾമാറാട്ട ടാബുകൾ</translation>
 <translation id="3775743491439407556">സമന്വയം പ്രവർത്തിക്കുന്നില്ല</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 8664741..f50c969 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Fila a fost primită.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min.</translation>
 <translation id="3448016392200048164">Vizualizare împărțită</translation>
+<translation id="3454224729131972583">Titlu</translation>
 <translation id="345565170154308620">Gestionează parolele...</translation>
 <translation id="3469166899695866866">Oprești descărcarea?</translation>
 <translation id="3470502288861289375">Se copiază...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Număr</translation>
 <translation id="3691593122358196899">Marcaj adăugat în <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Marchează ca necitit</translation>
+<translation id="3720541637541300822">Blochează filele incognito când închizi Chrome</translation>
 <translation id="3740397331642243698">Deschide adresele URL introduse în Google Chrome în modul incognito.</translation>
 <translation id="3771033907050503522">File incognito</translation>
 <translation id="3775743491439407556">Sincronizarea nu funcționează</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb
index a0bc542..91f8164e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">ලැබූ පටිත්ත.</translation>
 <translation id="3445288400492335833">මිනි <ph name="MINUTES" /></translation>
 <translation id="3448016392200048164">විභෙදුම් දසුන</translation>
+<translation id="3454224729131972583">මාතෘකාව</translation>
 <translation id="345565170154308620">මුරපද කළමනා කරන්න...</translation>
 <translation id="3469166899695866866">බාගැනීම නවතන්න</translation>
 <translation id="3470502288861289375">පිටපත් කෙරෙමින්...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">අංකය</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> වෙත පිටුසන් යොදන ලදී</translation>
 <translation id="3709582977625132201">නොකියවූ ලෙස ලකුණු කරන්න</translation>
+<translation id="3720541637541300822">ඔබ Chrome වසන විට අප්‍රසිද්ධ ටැබ අගුලු දමන්න</translation>
 <translation id="3740397331642243698">අප්‍රසිද්ධ තුළ Google Chrome in හි ආදානය කළ URL විවෘත කරයි.</translation>
 <translation id="3771033907050503522">අප්‍රකට පටිති</translation>
 <translation id="3775743491439407556">සමමුහූර්ත කිරීම ක්‍රියා නොකරයි</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index d3e17301..e8debc1c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -84,7 +84,7 @@
 <translation id="1687475363370981210">Označiť všetko ako prečítané</translation>
 <translation id="1689333818294560261">Prezývka</translation>
 <translation id="1690731385917361335">Žiadne položky</translation>
-<translation id="1692118695553449118">Synchronizácia je zapnutá.</translation>
+<translation id="1692118695553449118">Synchronizácia je zapnutá</translation>
 <translation id="1700629756560807968">Počet vybraných záložiek: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
 <translation id="1740468249224277719">Dvojitým klepnutím spustíte inštaláciu.</translation>
 <translation id="1746815479209538200">Ak chcete prehliadať internet, pridajte novú kartu.</translation>
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Karta bola prijatá.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Rozdelené zobrazenie</translation>
+<translation id="3454224729131972583">Názov</translation>
 <translation id="345565170154308620">Spravovať heslá…</translation>
 <translation id="3469166899695866866">Zastaviť sťahovanie?</translation>
 <translation id="3470502288861289375">Prebieha kopírovanie...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Číslo</translation>
 <translation id="3691593122358196899">Uložené ako záložka v priečinku <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Označiť ako neprečítané</translation>
+<translation id="3720541637541300822">Uzamknúť karty inkognito pri zavretí Chromu</translation>
 <translation id="3740397331642243698">Otvorí zadané webové adresy v prehliadači Google Chrome v režime inkognito.</translation>
 <translation id="3771033907050503522">Karty inkognito</translation>
 <translation id="3775743491439407556">Synchronizácia nefunguje</translation>
@@ -389,7 +391,7 @@
 <translation id="5090832849094901128">Odstránením tohto hesla nevymažete svoj účet na <ph name="WEBSITE" />.</translation>
 <translation id="5094827893301452931">Tweet bol uverejnený.</translation>
 <translation id="5118764316110575523">Vypnuté</translation>
-<translation id="5127805178023152808">Synchronizácia je vypnutá.</translation>
+<translation id="5127805178023152808">Synchronizácia je vypnutá</translation>
 <translation id="5132942445612118989">Synchronizujte svoje heslá, históriu a ďalší obsah vo všetkých zariadeniach</translation>
 <translation id="5140288047769711648">Chrome si toto heslo zapamätá za vás. Nemusíte sa ho učiť naspamäť.</translation>
 <translation id="5150492518600715772">Odoslať do vášho zariadenia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index d9d71f0..45c4443 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -238,6 +238,7 @@
 <translation id="3443810440409579745">Skeda u mor.</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Pamja e ndarë</translation>
+<translation id="3454224729131972583">Titulli</translation>
 <translation id="345565170154308620">Menaxho fjalëkalimet...</translation>
 <translation id="3469166899695866866">Të ndalohet shkarkimi?</translation>
 <translation id="3470502288861289375">Po kopjon...</translation>
@@ -267,6 +268,7 @@
 <translation id="3670030362669914947">Numri</translation>
 <translation id="3691593122358196899">Faqeshënuesi u shtua te <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Shëno si të palexuar</translation>
+<translation id="3720541637541300822">Kyçi skedat "e fshehta" kur të mbyllësh Chrome</translation>
 <translation id="3740397331642243698">Hap URL-të e futura në Google Chrome në modalitetin "i fshehtë".</translation>
 <translation id="3771033907050503522">Skedat "e fshehura"</translation>
 <translation id="3775743491439407556">Sinkronizimi nuk po punon</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 571a7f32..8818416 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -59,7 +59,7 @@
 <translation id="1491277525950327607">Ayarı açıp kapatmak için iki kez dokunun</translation>
 <translation id="1492417797159476138">Bu site için bu kullanıcı adını zaten kaydettiniz</translation>
 <translation id="1509486075633541495">Web sitesinde oturum açın</translation>
-<translation id="1509960214886564027">Birçok sitedeki özellikler bozulabilir</translation>
+<translation id="1509960214886564027">Birçok sitedeki özellikler çalışmayabilir</translation>
 <translation id="152234381334907219">Hiç Kaydedilmeyenler</translation>
 <translation id="1523341279170789507">Tüm Çerezlere İzin Ver</translation>
 <translation id="1535268707340844072">Geçerli ayarlarınız bazı sitelerin bozulmasına neden olabilir. Çerezlerin tüm siteler için nasıl yönetileceğini <ph name="BEGIN_LINK" />Çerez Ayarları<ph name="END_LINK" /> sayfasından öğrenebilirsiniz.</translation>
@@ -667,7 +667,7 @@
 Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezler kullanabilir.</translation>
 <translation id="7971521879845308059">Pop-up'ları Engelle</translation>
 <translation id="7982789257301363584">Ağ</translation>
-<translation id="7993619969781047893">Bazı sitelerdeki özellikler bozulabilir</translation>
+<translation id="7993619969781047893">Bazı sitelerdeki özellikler çalışmayabilir</translation>
 <translation id="800361585186029508">Girilen URL'leri Google Chrome'da açar.</translation>
 <translation id="8007420562015504427">Gizli Arama</translation>
 <translation id="802154636333426148">İndirilemedi</translation>
@@ -737,7 +737,7 @@
 <translation id="8756969031206844760">Şifre güncellensin mi?</translation>
 <translation id="8775144690796719618">Geçersiz URL</translation>
 <translation id="8803639129939845298">Güvenli</translation>
-<translation id="8820817407110198400">Favoriler</translation>
+<translation id="8820817407110198400">Yer işaretleri</translation>
 <translation id="8840513115188359703">Google Hesaplarınızdaki oturumlarınız kapatılmaz.</translation>
 <translation id="8870413625673593573">Son Kapatılan</translation>
 <translation id="8881801611828450202">Bu Resmi <ph name="SEARCH_ENGINE" /> Üzerinde Ara</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index 6082e047..cc382a8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -25,7 +25,7 @@
 <translation id="1165039591588034296">错误</translation>
 <translation id="1172898394251786223">下一个字段</translation>
 <translation id="1176932207622159128">无法保存图片</translation>
-<translation id="1180526666083833456">在所有设备上保持同步并进行个性化设置。</translation>
+<translation id="1180526666083833456">在所有设备上保持同步,获享个性化体验。</translation>
 <translation id="1181037720776840403">移除</translation>
 <translation id="1207113853726624428">新搜索</translation>
 <translation id="1209206284964581585">暂时隐藏</translation>
@@ -187,7 +187,7 @@
 <translation id="2876369937070532032">当您面临安全风险时,将您所访问的部分网页的网址发送给 Google</translation>
 <translation id="288655811176831528">关闭标签页</translation>
 <translation id="2898963176829412617">新建文件夹…</translation>
-<translation id="2916171785467530738">自动填充搜索字词和网址</translation>
+<translation id="2916171785467530738">自动补全搜索字词和网址</translation>
 <translation id="291754862089661335">将 QR 码或条形码放到此框内</translation>
 <translation id="2921219216347069551">无法分享网页</translation>
 <translation id="2923448633003185837">粘贴并转到</translation>
@@ -755,7 +755,7 @@
 <translation id="9079935439869366234">全部标为未读</translation>
 <translation id="9081058212938299310">更新 <ph name="USERNAME" /> 的密码?</translation>
 <translation id="9083392325882095631">有1个书签</translation>
-<translation id="9083838294503912307">要在您的所有设备上保持同步并进行个性化设置,请开启同步功能。</translation>
+<translation id="9083838294503912307">要在您的所有设备上保持同步并获享个性化体验,请开启同步功能。</translation>
 <translation id="9087108903408689779">Chrome 建议的密码:</translation>
 <translation id="9094033019050270033">更新密码</translation>
 <translation id="9100610230175265781">必须提供密码</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 3523871..27bc8be 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -222,6 +222,19 @@
     {"Native UI", kDiscoverFeedInNtpEnableNativeUI,
      base::size(kDiscoverFeedInNtpEnableNativeUI), nullptr}};
 
+const FeatureEntry::FeatureParam kWebViewNativeContextMenuWeb[] = {
+    {web::features::kWebViewNativeContextMenuName,
+     web::features::kWebViewNativeContextMenuParameterWeb}};
+const FeatureEntry::FeatureParam kWebViewNativeContextMenuSystem[] = {
+    {web::features::kWebViewNativeContextMenuName,
+     web::features::kWebViewNativeContextMenuParameterSystem}};
+
+const FeatureEntry::FeatureVariation kWebViewNativeContextMenuVariations[] = {
+    {"Web", kWebViewNativeContextMenuWeb,
+     base::size(kWebViewNativeContextMenuWeb), nullptr},
+    {"System", kWebViewNativeContextMenuSystem,
+     base::size(kWebViewNativeContextMenuSystem), nullptr}};
+
 // To add a new entry, add to the end of kFeatureEntries. There are four
 // distinct types of entries:
 // . ENABLE_DISABLE_VALUE: entry is either enabled, disabled, or uses the
@@ -562,7 +575,9 @@
     {"web-view-native-context-menu",
      flag_descriptions::kWebViewNativeContextMenuName,
      flag_descriptions::kWebViewNativeContextMenuDescription, flags_ui::kOsIos,
-     FEATURE_VALUE_TYPE(web::features::kWebViewNativeContextMenu)},
+     FEATURE_WITH_PARAMS_VALUE_TYPE(web::features::kWebViewNativeContextMenu,
+                                    kWebViewNativeContextMenuVariations,
+                                    "WebViewNativeContextMenu")},
     {"location-permissions-prompt",
      flag_descriptions::kLocationPermissionsPromptName,
      flag_descriptions::kLocationPermissionsPromptDescription, flags_ui::kOsIos,
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 3c24886..4e6a693 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -3294,7 +3294,8 @@
 
 - (void)webState:(web::WebState*)webState
     handleContextMenu:(const web::ContextMenuParams&)params {
-  DCHECK(!web::features::UseWebViewNativeContextMenu());
+  DCHECK(!web::features::UseWebViewNativeContextMenuWeb() &&
+         !web::features::UseWebViewNativeContextMenuSystem());
   // Prevent context menu from displaying for a tab which is no longer the
   // current one.
   if (webState != self.currentWebState) {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm
index 2053bd3..f1d024c 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm
@@ -92,6 +92,9 @@
 // horizontal to grid layout.
 @property(nonatomic, strong)
     UICollectionViewTransitionLayout* gridHorizontalTransitionLayout;
+
+// YES while batch updates and the batch update completion are being performed.
+@property(nonatomic) BOOL updating;
 @end
 
 @implementation GridViewController
@@ -836,11 +839,15 @@
         (ProceduralBlockWithBool)collectionViewUpdatesCompletion {
   [self.collectionView
       performBatchUpdates:^{
+        self.updating = YES;
         // Synchronize model and view updates.
         modelUpdates();
         collectionViewUpdates();
       }
-               completion:collectionViewUpdatesCompletion];
+      completion:^(BOOL completed) {
+        collectionViewUpdatesCompletion(completed);
+        self.updating = NO;
+      }];
 }
 
 // Returns the index in |self.items| of the first item whose identifier is
@@ -889,6 +896,12 @@
     [self.delegate didTapPlusSignInGridViewController:self];
     return;
   }
+
+  // Speculative fix for crbug.com/1134663, where this method is called while
+  // updates from a tab insertion are processing.
+  if (self.updating)
+    return;
+
   NSUInteger index = base::checked_cast<NSUInteger>(indexPath.item);
   DCHECK_LT(index, self.items.count);
   NSString* itemID = self.items[index].identifier;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
index fe16bb8e..41bfe54 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
@@ -82,7 +82,7 @@
 }
 
 // Returns the index of the tab with |identifier| in |web_state_list|. Returns
-// -1 if not found.
+// WebStateList::kInvalidIndex if not found.
 int GetIndexOfTabWithId(WebStateList* web_state_list, NSString* identifier) {
   for (int i = 0; i < web_state_list->count(); i++) {
     web::WebState* web_state = web_state_list->GetWebStateAt(i);
@@ -90,7 +90,7 @@
     if ([identifier isEqualToString:tab_helper->tab_id()])
       return i;
   }
-  return -1;
+  return WebStateList::kInvalidIndex;
 }
 
 // Returns the WebState with |identifier| in |web_state_list|. Returns |nullptr|
@@ -241,8 +241,8 @@
   if (webStateList->IsBatchInProgress())
     return;
   // If the selected index changes as a result of the last webstate being
-  // detached, atIndex will be -1.
-  if (atIndex == -1) {
+  // detached, atIndex will be kInvalidIndex.
+  if (atIndex == WebStateList::kInvalidIndex) {
     [self.consumer selectItemWithID:nil];
     return;
   }
@@ -301,19 +301,36 @@
 
 - (void)moveItemWithID:(NSString*)itemID toIndex:(NSUInteger)destinationIndex {
   int sourceIndex = GetIndexOfTabWithId(self.webStateList, itemID);
-  if (sourceIndex >= 0)
+  if (sourceIndex != WebStateList::kInvalidIndex)
     self.webStateList->MoveWebStateAt(sourceIndex, destinationIndex);
 }
 
 - (void)selectItemWithID:(NSString*)itemID {
   int index = GetIndexOfTabWithId(self.webStateList, itemID);
-  if (index >= 0)
-    self.webStateList->ActivateWebStateAt(index);
+
+  // Don't activate non-existent indexes.
+  if (index == WebStateList::kInvalidIndex)
+    return;
+
+  // Don't attempt a no-op activation. Normally this is not an issue, but it's
+  // possible that this method (-selectItemWithID:) is being called as part of
+  // a WebStateListObserver callback, in which case even a no-op activation
+  // will cause a CHECK().
+  if (index == self.webStateList->active_index())
+    return;
+
+  // Avoid a reentrant activation. This is a fix for crbug.com/1134663, although
+  // ignoring the slection at this point may do weird things.
+  if (self.webStateList->IsMutating())
+    return;
+
+  // It should be safe to activate here.
+  self.webStateList->ActivateWebStateAt(index);
 }
 
 - (void)closeItemWithID:(NSString*)itemID {
   int index = GetIndexOfTabWithId(self.webStateList, itemID);
-  if (index >= 0)
+  if (index != WebStateList::kInvalidIndex)
     self.webStateList->CloseWebStateAt(index, WebStateList::CLOSE_USER_ACTION);
 }
 
@@ -456,7 +473,7 @@
     }
     // Reorder tab within same grid.
     int sourceIndex = GetIndexOfTabWithId(self.webStateList, tabInfo.tabID);
-    if (sourceIndex >= 0)
+    if (sourceIndex != WebStateList::kInvalidIndex)
       self.webStateList->MoveWebStateAt(sourceIndex, destinationIndex);
     return;
   }
diff --git a/ios/chrome/browser/web/chrome_web_client.h b/ios/chrome/browser/web/chrome_web_client.h
index 8049728d..f1e1f7a 100644
--- a/ios/chrome/browser/web/chrome_web_client.h
+++ b/ios/chrome/browser/web/chrome_web_client.h
@@ -62,6 +62,7 @@
                         base::OnceCallback<void(NSString*)> callback) override;
   UIView* GetWindowedContainer() override;
   bool EnableLongPressAndForceTouchHandling() const override;
+  bool EnableLongPressUIContextMenu() const override;
   bool ForceMobileVersionByDefault(const GURL& url) override;
   web::UserAgentType GetDefaultUserAgent(id<UITraitEnvironment> web_view,
                                          const GURL& url) override;
diff --git a/ios/chrome/browser/web/chrome_web_client.mm b/ios/chrome/browser/web/chrome_web_client.mm
index d5ab352..4e345d8d 100644
--- a/ios/chrome/browser/web/chrome_web_client.mm
+++ b/ios/chrome/browser/web/chrome_web_client.mm
@@ -397,7 +397,11 @@
 }
 
 bool ChromeWebClient::EnableLongPressAndForceTouchHandling() const {
-  return !web::features::UseWebViewNativeContextMenu();
+  return !web::features::UseWebViewNativeContextMenuWeb();
+}
+
+bool ChromeWebClient::EnableLongPressUIContextMenu() const {
+  return web::features::UseWebViewNativeContextMenuSystem();
 }
 
 bool ChromeWebClient::ForceMobileVersionByDefault(const GURL& url) {
diff --git a/ios/chrome/browser/web/ssl_egtest.mm b/ios/chrome/browser/web/ssl_egtest.mm
index 79982e3..140fced 100644
--- a/ios/chrome/browser/web/ssl_egtest.mm
+++ b/ios/chrome/browser/web/ssl_egtest.mm
@@ -5,6 +5,7 @@
 #include "base/bind.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
 #include "ios/testing/embedded_test_server_handlers.h"
@@ -38,11 +39,7 @@
   _HTTPSServer = std::make_unique<net::test_server::EmbeddedTestServer>(
       net::test_server::EmbeddedTestServer::TYPE_HTTPS);
   RegisterDefaultHandlers(_HTTPSServer.get());
-}
 
-// Test loading a page with a bad SSL certificate from the NTP, to avoid
-// https://crbug.com/1067250 from regressing.
-- (void)testBadSSLOnNTP {
   GREYAssertTrue(_HTTPSServer->Start(), @"Test server failed to start.");
 
   const GURL pageURL = _HTTPSServer->GetURL("/echo");
@@ -52,17 +49,43 @@
                                                     IDS_SSL_V2_HEADING)];
 }
 
+// Tests loading a bad ssl page and tapping "proceed".
+- (void)testProceedToBadSSL {
+  // Tap on the "Proceed" link and verify that we go to the unsafe page.
+  [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
+  [ChromeEarlGrey tapWebStateElementWithID:@"proceed-link"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Echo"];
+}
+
+// Tests loading a bad ssl page and tapping "Back to safety". The bad ssl page
+// is loaded from the NTP to prevent https://crbug.com/1067250 from regressing.
+- (void)testBackToSafetyFromBadSSL {
+  // Tap on the "Back to safety" link and verify that we go to the NTP.
+  [ChromeEarlGrey tapWebStateElementWithID:@"primary-button"];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Tests loading a BadSSL URL then a good URL then pressing back to navigates
+// back to the BadSSL URL is showing the warning.
+- (void)testNavigateBackToBadSSL {
+  // Load a server without SSL issues.
+  GREYAssertTrue(self.testServer->Start(), @"Test server failed to start.");
+
+  const GURL pageURL = self.testServer->GetURL("/echo");
+  [ChromeEarlGrey loadURL:pageURL];
+
+  [ChromeEarlGrey waitForWebStateContainingText:"Echo"];
+
+  // Navigate back to the bad SSL page.
+  [ChromeEarlGrey goBack];
+  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
+                                                    IDS_SSL_V2_HEADING)];
+}
+
 // Test loading a page with a bad SSL certificate during session restore, to
 // avoid regressing https://crbug.com/1050808.
 - (void)testBadSSLInSessionRestore {
-  GREYAssertTrue(_HTTPSServer->Start(), @"Test server failed to start.");
-
-  GURL pageURL = _HTTPSServer->GetURL("/echo");
-  [ChromeEarlGrey loadURL:pageURL];
-
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_SSL_V2_HEADING)];
-
   [ChromeEarlGrey triggerRestoreViaTabGridRemoveAllUndo];
   [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                                     IDS_SSL_V2_HEADING)];
diff --git a/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb b/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
index d197166c..8a46a521 100644
--- a/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
+++ b/ios/chrome/share_extension/strings/resources/ios_share_extension_strings_en-GB.xtb
@@ -3,7 +3,7 @@
 <translationbundle lang="en-GB">
 <translation id="1613742542373525524">APPLICATION_NAME cannot handle this link.</translation>
 <translation id="4655616150233109325">Open in Chrome</translation>
-<translation id="4743991241988563337">Read Later</translation>
+<translation id="4743991241988563337">Read later</translation>
 <translation id="6930009216791986919">Add to Bookmarks</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="8258999165172757081">Added</translation>
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index fc2cbc7c..603fb7b 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-d35eaa7488bab6b76b1e2cbcc9a79813ee380c2c
\ No newline at end of file
+96000536c395a463386e923a7515471c664a5394
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index 61f2d16..fb3c96e 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-2a03c2ba1c14490e70ec58326debef58891bec38
\ No newline at end of file
+27cc14be2139609c7c7da56c525c3bae5cf50d17
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index 96c2f6cca..427084cc 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-32575c02bd0089bc0c16100ab1851cc6006b7fa0
\ No newline at end of file
+ada10ff16fa2b99659bc9a41f13f8dfe50cc6770
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index b38e9cc..56d73bd4 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-1f1b56e21aa2be7a392e03cd1bd0cedadc11b6ef
\ No newline at end of file
+c5e26248c1626432705c1dacf39c8ac405462c16
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index 4592cd67..61c4b9d8 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-123b2c131d978512700b9560bfef6a298ad14567
\ No newline at end of file
+721a9c861f3bd1764e506cadc00abad6c6afbbe3
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index eb1a1e5e..fed1a58 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-671a339206310696c276bdb0be0cb912d87585eb
\ No newline at end of file
+d56e002052ef6e2460cecd84270eee100de66c32
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index 33896b8..290ed473 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-8ecc877a8f1ea68933b0f3253f7060f5c3e8f123
\ No newline at end of file
+1d2d8d8eb2500924ef44d5567e62b8e999650149
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index 8e73bca..6a907b2 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-49c07444d6372ee239e8a74f7573cbfc07f4cc8b
\ No newline at end of file
+28a50656e0a255bd518dda7ae93dfc68fcac3054
\ No newline at end of file
diff --git a/ios/web/common/features.h b/ios/web/common/features.h
index 7ca2ac9..1ab3fd75 100644
--- a/ios/web/common/features.h
+++ b/ios/web/common/features.h
@@ -60,22 +60,31 @@
 // When enabled, display an interstitial on legacy TLS connections.
 extern const base::Feature kIOSLegacyTLSInterstitial;
 
-// When enabled, use the native context menu in web content, for the iOS version
-// that supports it.
-extern const base::Feature kWebViewNativeContextMenu;
-
 // Records snapshot size of image (IOS.Snapshots.ImageSize histogram) and PDF
 // (IOS.Snapshots.PDFSize histogram) if enabled. Enabling this flag will
 // generate PDF when Page Snapshot is taken just to record PDF size.
 extern const base::Feature kRecordSnapshotSize;
 
+// When enabled, use the native context menu in web content, for the iOS version
+// that supports it.
+extern const base::Feature kWebViewNativeContextMenu;
+
+// Parameter name and values for the native context menu.
+extern const char kWebViewNativeContextMenuName[];
+extern const char kWebViewNativeContextMenuParameterSystem[];
+extern const char kWebViewNativeContextMenuParameterWeb[];
+
 // When true, for each navigation, the default user agent is chosen by the
 // WebClient GetDefaultUserAgent() method. If it is false, the mobile version
 // is requested by default.
 bool UseWebClientDefaultUserAgent();
 
 // When true, the native context menu for the web content are used.
-bool UseWebViewNativeContextMenu();
+bool UseWebViewNativeContextMenuWeb();
+
+// When true, the custom implementation of context menu using native ContextMenu
+// for the web content is used.
+bool UseWebViewNativeContextMenuSystem();
 
 }  // namespace features
 }  // namespace web
diff --git a/ios/web/common/features.mm b/ios/web/common/features.mm
index cbf8f6f..22b0e7a9 100644
--- a/ios/web/common/features.mm
+++ b/ios/web/common/features.mm
@@ -46,11 +46,15 @@
 const base::Feature kIOSLegacyTLSInterstitial{"IOSLegacyTLSInterstitial",
                                               base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kRecordSnapshotSize{"RecordSnapshotSize",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kWebViewNativeContextMenu{
     "WebViewNativeContextMenu", base::FEATURE_DISABLED_BY_DEFAULT};
 
-const base::Feature kRecordSnapshotSize{"RecordSnapshotSize",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
+const char kWebViewNativeContextMenuName[] = "type";
+const char kWebViewNativeContextMenuParameterSystem[] = "system";
+const char kWebViewNativeContextMenuParameterWeb[] = "web";
 
 bool UseWebClientDefaultUserAgent() {
   if (@available(iOS 13, *)) {
@@ -59,9 +63,24 @@
   return false;
 }
 
-bool UseWebViewNativeContextMenu() {
+bool UseWebViewNativeContextMenuWeb() {
   if (@available(iOS 13, *)) {
-    return base::FeatureList::IsEnabled(kWebViewNativeContextMenu);
+    if (!base::FeatureList::IsEnabled(kWebViewNativeContextMenu))
+      return false;
+    std::string field_trial_param = base::GetFieldTrialParamValueByFeature(
+        kWebViewNativeContextMenu, kWebViewNativeContextMenuName);
+    return field_trial_param == kWebViewNativeContextMenuParameterWeb;
+  }
+  return false;
+}
+
+bool UseWebViewNativeContextMenuSystem() {
+  if (@available(iOS 13, *)) {
+    if (!base::FeatureList::IsEnabled(kWebViewNativeContextMenu))
+      return false;
+    std::string field_trial_param = base::GetFieldTrialParamValueByFeature(
+        kWebViewNativeContextMenu, kWebViewNativeContextMenuName);
+    return field_trial_param == kWebViewNativeContextMenuParameterSystem;
   }
   return false;
 }
diff --git a/ios/web/public/web_client.h b/ios/web/public/web_client.h
index d9e79aa..c74ae81 100644
--- a/ios/web/public/web_client.h
+++ b/ios/web/public/web_client.h
@@ -189,10 +189,13 @@
   virtual UIView* GetWindowedContainer();
 
   // Enables the logic to handle long press and force
-  // touch. Should return false to use the context menu API.
-  // Defaults to return true.
+  // touch through action sheet. Should return false to use the context menu
+  // API. Defaults to return true.
   virtual bool EnableLongPressAndForceTouchHandling() const;
 
+  // Enables the logic to handle long press context menu with UIContextMenu.
+  virtual bool EnableLongPressUIContextMenu() const;
+
   // This method is used when the user didn't express any preference for the
   // version of |url|. Returning true allows to make sure that for |url|, the
   // mobile version will be used, unless the user explicitly requested the
diff --git a/ios/web/web_client.mm b/ios/web/web_client.mm
index e405ab5..d285e0f 100644
--- a/ios/web/web_client.mm
+++ b/ios/web/web_client.mm
@@ -120,6 +120,10 @@
   return true;
 }
 
+bool WebClient::EnableLongPressUIContextMenu() const {
+  return false;
+}
+
 bool WebClient::ForceMobileVersionByDefault(const GURL&) {
   return false;
 }
diff --git a/ios/web/web_state/ui/BUILD.gn b/ios/web/web_state/ui/BUILD.gn
index 9f14e25..6c03c00 100644
--- a/ios/web/web_state/ui/BUILD.gn
+++ b/ios/web/web_state/ui/BUILD.gn
@@ -104,6 +104,8 @@
   ]
 
   sources = [
+    "crw_context_menu_controller.h",
+    "crw_context_menu_controller.mm",
     "crw_context_menu_element_fetcher.h",
     "crw_context_menu_element_fetcher.mm",
     "crw_html_element_fetch_request.h",
diff --git a/ios/web/web_state/ui/crw_context_menu_controller.h b/ios/web/web_state/ui/crw_context_menu_controller.h
new file mode 100644
index 0000000..238c777
--- /dev/null
+++ b/ios/web/web_state/ui/crw_context_menu_controller.h
@@ -0,0 +1,25 @@
+// 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 IOS_WEB_WEB_STATE_UI_CRW_CONTEXT_MENU_CONTROLLER_H_
+#define IOS_WEB_WEB_STATE_UI_CRW_CONTEXT_MENU_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+#import <WebKit/WebKit.h>
+
+namespace web {
+class WebState;
+}
+
+// Controller for displaying system Context Menu when the user is long pressing
+// on an element. This is working by adding an interaction to the whole web view
+// and then only adding focus on the element being long pressed.
+API_AVAILABLE(ios(13.0)) @interface CRWContextMenuController : NSObject
+
+- (instancetype)initWithWebView:(WKWebView*)webView
+                       webState:(web::WebState*)webState;
+
+@end
+
+#endif  // IOS_WEB_WEB_STATE_UI_CRW_CONTEXT_MENU_CONTROLLER_H_
diff --git a/ios/web/web_state/ui/crw_context_menu_controller.mm b/ios/web/web_state/ui/crw_context_menu_controller.mm
new file mode 100644
index 0000000..9663d103
--- /dev/null
+++ b/ios/web/web_state/ui/crw_context_menu_controller.mm
@@ -0,0 +1,116 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/web/web_state/ui/crw_context_menu_controller.h"
+
+#import "ios/web/public/ui/context_menu_params.h"
+#import "ios/web/web_state/ui/crw_context_menu_element_fetcher.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+const CGFloat kJavaScriptTimeout = 1;
+}  // namespace
+
+@interface CRWContextMenuController () <UIContextMenuInteractionDelegate>
+
+@property(nonatomic, assign) web::ContextMenuParams params;
+
+// The context menu responsible for the interaction.
+@property(nonatomic, strong) UIContextMenuInteraction* contextMenu;
+
+@property(nonatomic, strong) WKWebView* webView;
+
+@property(nonatomic, assign) web::WebState* webState;
+
+@property(nonatomic, strong) CRWContextMenuElementFetcher* elementFetcher;
+
+@end
+
+@implementation CRWContextMenuController
+
+- (instancetype)initWithWebView:(WKWebView*)webView
+                       webState:(web::WebState*)webState {
+  self = [super init];
+  if (self) {
+    _contextMenu = [[UIContextMenuInteraction alloc] initWithDelegate:self];
+
+    _webView = webView;
+    [webView addInteraction:_contextMenu];
+
+    _webState = webState;
+
+    _elementFetcher =
+        [[CRWContextMenuElementFetcher alloc] initWithWebView:webView
+                                                     webState:webState];
+  }
+  return self;
+}
+
+#pragma mark - UIContextMenuInteractionDelegate
+
+- (UIContextMenuConfiguration*)contextMenuInteraction:
+                                   (UIContextMenuInteraction*)interaction
+                       configurationForMenuAtLocation:(CGPoint)location {
+  CGPoint locationInWebView =
+      [self.webView.scrollView convertPoint:location fromView:interaction.view];
+
+  // While traditionally using dispatch_async would be used here, we have to
+  // instead use CFRunLoop because dispatch_async blocks the thread. As this
+  // function is called by iOS when it detects the user's force touch, it is on
+  // the main thread and we cannot block that. CFRunLoop instead just loops on
+  // the main thread until the completion block is fired.
+  __block BOOL isRunLoopNested = NO;
+  __block BOOL javascriptEvaluationComplete = NO;
+  __block BOOL isRunLoopComplete = NO;
+
+  __weak __typeof(self) weakSelf = self;
+  [self.elementFetcher
+      fetchDOMElementAtPoint:locationInWebView
+           completionHandler:^(const web::ContextMenuParams& params) {
+             __typeof(self) strongSelf = weakSelf;
+             javascriptEvaluationComplete = YES;
+             strongSelf.params = params;
+             if (isRunLoopNested) {
+               CFRunLoopStop(CFRunLoopGetCurrent());
+             }
+           }];
+
+  // Make sure to timeout in case the JavaScript doesn't return in a timely
+  // manner. While this is executing, the scrolling on the page is frozen.
+  // Interacting with the page will force this method to return even before any
+  // of this code is called.
+  dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
+                               (int64_t)(kJavaScriptTimeout * NSEC_PER_SEC)),
+                 dispatch_get_main_queue(), ^{
+                   if (!isRunLoopComplete) {
+                     // JavaScript didn't complete. Cancel the JavaScript and
+                     // return.
+                     CFRunLoopStop(CFRunLoopGetCurrent());
+                     __typeof(self) strongSelf = weakSelf;
+                     [strongSelf.elementFetcher cancelFetches];
+                   }
+                 });
+
+  // CFRunLoopRun isn't necessary if javascript evaluation is completed by the
+  // time we reach this line.
+  if (!javascriptEvaluationComplete) {
+    isRunLoopNested = YES;
+    CFRunLoopRun();
+    isRunLoopNested = NO;
+  }
+
+  isRunLoopComplete = YES;
+
+  self.params.location = [self.webView convertPoint:location
+                                           fromView:interaction.view];
+
+  // TODO(crbug.com/1140387): Present the context menu with the params.
+
+  return nil;
+}
+
+@end
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 7323264e..0524d38 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -46,6 +46,7 @@
 #import "ios/web/security/crw_ssl_status_updater.h"
 #import "ios/web/web_state/page_viewport_state.h"
 #import "ios/web/web_state/ui/cookie_blocking_error_logger.h"
+#import "ios/web/web_state/ui/crw_context_menu_controller.h"
 #import "ios/web/web_state/ui/crw_legacy_context_menu_controller.h"
 #import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h"
 #import "ios/web/web_state/ui/crw_web_controller_container_view.h"
@@ -223,6 +224,10 @@
 // Returns the navigation item for the current page.
 @property(nonatomic, readonly) web::NavigationItemImpl* currentNavItem;
 
+// ContextMenu controller, handling the interactions with the context menu.
+@property(nonatomic, strong)
+    CRWContextMenuController* contextMenuController API_AVAILABLE(ios(13.0));
+
 // Returns the current URL of the web view, and sets |trustLevel| accordingly
 // based on the confidence in the verification.
 - (GURL)webURLWithTrustLevel:(web::URLVerificationTrustLevel*)trustLevel;
@@ -1550,10 +1555,22 @@
           requireGestureRecognizerToFail:swipeRecognizer];
     }
 
-    self.UIHandler.contextMenuController =
-        [[CRWLegacyContextMenuController alloc]
+    BOOL usingNewContextMenu = NO;
+    if (web::GetWebClient()->EnableLongPressUIContextMenu()) {
+      if (@available(iOS 13, *)) {
+        usingNewContextMenu = YES;
+        self.contextMenuController = [[CRWContextMenuController alloc]
             initWithWebView:self.webView
                    webState:self.webStateImpl];
+      }
+    }
+    if (!usingNewContextMenu) {
+      // Default to legacy implementation.
+      self.UIHandler.contextMenuController =
+          [[CRWLegacyContextMenuController alloc]
+              initWithWebView:self.webView
+                     webState:self.webStateImpl];
+    }
 
     // WKWebViews with invalid or empty frames have exhibited rendering bugs, so
     // resize the view to match the container view upon creation.
diff --git a/ios/web/web_state/ui/crw_wk_ui_handler.h b/ios/web/web_state/ui/crw_wk_ui_handler.h
index 27a7e3b90..12a70bd 100644
--- a/ios/web/web_state/ui/crw_wk_ui_handler.h
+++ b/ios/web/web_state/ui/crw_wk_ui_handler.h
@@ -19,6 +19,7 @@
 // Delegate for the handler.
 @property(nonatomic, weak) id<CRWWKUIHandlerDelegate> delegate;
 
+// TODO(crbug.com/1156636): Remove once the new context menus have shipped.
 // Context menu controller, to be set when the WebView is created.
 @property(nonatomic, strong)
     CRWLegacyContextMenuController* contextMenuController;
diff --git a/ios/web/web_state/ui/wk_web_view_configuration_provider.mm b/ios/web/web_state/ui/wk_web_view_configuration_provider.mm
index be13021..d8e1a0b 100644
--- a/ios/web/web_state/ui/wk_web_view_configuration_provider.mm
+++ b/ios/web/web_state/ui/wk_web_view_configuration_provider.mm
@@ -125,9 +125,11 @@
       // displayed and also prevents the iOS 13 ContextMenu delegate methods
       // from being called.
       // https://github.com/WebKit/webkit/blob/1233effdb7826a5f03b3cdc0f67d713741e70976/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm#L307
-      BOOL enable_long_press_action =
-          !web::GetWebClient()->EnableLongPressAndForceTouchHandling();
-      [configuration_ setValue:@(enable_long_press_action)
+      BOOL disable_long_press_system_actions =
+
+          web::GetWebClient()->EnableLongPressAndForceTouchHandling() ||
+          web::GetWebClient()->EnableLongPressUIContextMenu();
+      [configuration_ setValue:@(!disable_long_press_system_actions)
                         forKey:@"longPressActionsEnabled"];
     } @catch (NSException* exception) {
       NOTREACHED() << "Error setting value for longPressActionsEnabled";
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index 39d6247..6c554eb 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -565,13 +565,12 @@
     case THEORA:
       return false;
 
-    // AV1 is not supported on Android yet.
-    case AV1:
-      return false;
-
     // ----------------------------------------------------------------------
     // The remaining codecs may be supported depending on platform abilities.
     // ----------------------------------------------------------------------
+    case AV1:
+      return BUILDFLAG(ENABLE_AV1_DECODER);
+
     case MPEG2_AAC:
       // MPEG2_AAC cannot be used in HLS (mpegurl suffix), but this is enforced
       // in the parsing step by excluding MPEG2_AAC from the list of
diff --git a/media/base/mime_util_unittest.cc b/media/base/mime_util_unittest.cc
index c539b94..ae9451d 100644
--- a/media/base/mime_util_unittest.cc
+++ b/media/base/mime_util_unittest.cc
@@ -563,7 +563,6 @@
         switch (codec) {
           // These codecs are never supported by the Android platform.
           case MimeUtil::INVALID_CODEC:
-          case MimeUtil::AV1:
           case MimeUtil::MPEG_H_AUDIO:
           case MimeUtil::THEORA:
             EXPECT_FALSE(result);
@@ -611,6 +610,10 @@
           case MimeUtil::EAC3:
             EXPECT_EQ(HasEac3Support(), result);
             break;
+
+          case MimeUtil::AV1:
+            EXPECT_EQ(BUILDFLAG(ENABLE_AV1_DECODER), result);
+            break;
         }
       });
 }
@@ -630,7 +633,6 @@
           case MimeUtil::INVALID_CODEC:
           case MimeUtil::MPEG_H_AUDIO:
           case MimeUtil::THEORA:
-          case MimeUtil::AV1:
             EXPECT_FALSE(result);
             break;
 
@@ -671,6 +673,10 @@
           case MimeUtil::EAC3:
             EXPECT_EQ(HasEac3Support(), result);
             break;
+
+          case MimeUtil::AV1:
+            EXPECT_EQ(BUILDFLAG(ENABLE_AV1_DECODER), result);
+            break;
         }
       });
 }
diff --git a/media/media_options.gni b/media/media_options.gni
index a37ae0c..bd85ac8 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -97,7 +97,7 @@
   # Enable logging override, e.g. enable DVLOGs at build time.
   enable_logging_override = is_chromecast
 
-  enable_dav1d_decoder = !is_android && !is_ios
+  enable_dav1d_decoder = !is_ios
 
   # Enable browser managed persistent metadata storage for EME persistent
   # session and persistent usage record session.
diff --git a/net/base/port_util.cc b/net/base/port_util.cc
index 12bfd9a..bf5a0a7 100644
--- a/net/base/port_util.cc
+++ b/net/base/port_util.cc
@@ -73,7 +73,6 @@
     532,   // netnews
     540,   // uucp
     548,   // AFP (Apple Filing Protocol)
-    554,   // rtsp
     556,   // remotefs
     563,   // nntp+ssl
     587,   // smtp (rfc6409)
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index 729883ce..8c60173b 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -428,14 +428,11 @@
   if (parsed_cookie.IsSameParty())
     base::UmaHistogramBoolean("Cookie.IsSamePartyValid", is_same_party_valid);
 
-  // TODO(chlily): Log metrics.
   if (!status->IsInclude())
     return nullptr;
 
   CookieSameSiteString samesite_string = CookieSameSiteString::kUnspecified;
   CookieSameSite samesite = parsed_cookie.SameSite(&samesite_string);
-  RecordCookieSameSiteAttributeValueHistogram(samesite_string,
-                                              parsed_cookie.IsSameParty());
 
   CookieSourceScheme source_scheme = url.SchemeIsCryptographic()
                                          ? CookieSourceScheme::kSecure
@@ -449,9 +446,16 @@
       parsed_cookie.IsHttpOnly(), samesite, parsed_cookie.Priority(),
       parsed_cookie.IsSameParty(), source_scheme, source_port));
 
-  DCHECK(cc->IsCanonical());
-
   // TODO(chlily): Log metrics.
+  if (!cc->IsCanonical()) {
+    status->AddExclusionReason(
+        net::CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE);
+    return nullptr;
+  }
+
+  RecordCookieSameSiteAttributeValueHistogram(samesite_string,
+                                              parsed_cookie.IsSameParty());
+
   return cc;
 }
 
diff --git a/net/cookies/canonical_cookie.h b/net/cookies/canonical_cookie.h
index 0c25758da..38808e4 100644
--- a/net/cookies/canonical_cookie.h
+++ b/net/cookies/canonical_cookie.h
@@ -60,27 +60,6 @@
   CanonicalCookie();
   CanonicalCookie(const CanonicalCookie& other);
 
-  // This constructor does not validate or canonicalize their inputs;
-  // the resulting CanonicalCookies should not be relied on to be canonical
-  // unless the caller has done appropriate validation and canonicalization
-  // themselves.
-  // NOTE: Prefer using CreateSanitizedCookie() over directly using this
-  // constructor.
-  CanonicalCookie(const std::string& name,
-                  const std::string& value,
-                  const std::string& domain,
-                  const std::string& path,
-                  const base::Time& creation,
-                  const base::Time& expiration,
-                  const base::Time& last_access,
-                  bool secure,
-                  bool httponly,
-                  CookieSameSite same_site,
-                  CookiePriority priority,
-                  bool same_party,
-                  CookieSourceScheme scheme_secure = CookieSourceScheme::kUnset,
-                  int source_port = url::PORT_UNSPECIFIED);
-
   ~CanonicalCookie();
 
   // Supports the default copy constructor.
@@ -371,6 +350,27 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(CanonicalCookieTest, TestPrefixHistograms);
 
+  // This constructor does not validate or canonicalize their inputs;
+  // the resulting CanonicalCookies should not be relied on to be canonical
+  // unless the caller has done appropriate validation and canonicalization
+  // themselves.
+  // NOTE: Prefer using CreateSanitizedCookie() over directly using this
+  // constructor.
+  CanonicalCookie(const std::string& name,
+                  const std::string& value,
+                  const std::string& domain,
+                  const std::string& path,
+                  const base::Time& creation,
+                  const base::Time& expiration,
+                  const base::Time& last_access,
+                  bool secure,
+                  bool httponly,
+                  CookieSameSite same_site,
+                  CookiePriority priority,
+                  bool same_party,
+                  CookieSourceScheme scheme_secure = CookieSourceScheme::kUnset,
+                  int source_port = url::PORT_UNSPECIFIED);
+
   // The special cookie prefixes as defined in
   // https://tools.ietf.org/html/draft-west-cookie-prefixes
   //
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc
index dbdf396..226adc7 100644
--- a/net/cookies/canonical_cookie_unittest.cc
+++ b/net/cookies/canonical_cookie_unittest.cc
@@ -194,6 +194,21 @@
   cookie = CanonicalCookie::Create(GURL("http://fool/;/"), "*", creation_time,
                                    server_time);
   EXPECT_TRUE(cookie.get());
+
+  // Control characters in name or value.
+  CookieInclusionStatus status;
+  cookie =
+      CanonicalCookie::Create(GURL("http://www.example.com/test/foo.html"),
+                              "\b=foo", creation_time, server_time, &status);
+  EXPECT_FALSE(cookie.get());
+  EXPECT_TRUE(status.HasExclusionReason(
+      CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE));
+  cookie =
+      CanonicalCookie::Create(GURL("http://www.example.com/test/foo.html"),
+                              "bar=\b", creation_time, server_time, &status);
+  EXPECT_FALSE(cookie.get());
+  EXPECT_TRUE(status.HasExclusionReason(
+      CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE));
 }
 
 TEST(CanonicalCookieTest, Create) {
diff --git a/remoting/resources/remoting_strings_am.xtb b/remoting/resources/remoting_strings_am.xtb
index 31da413..b994ec08 100644
--- a/remoting/resources/remoting_strings_am.xtb
+++ b/remoting/resources/remoting_strings_am.xtb
@@ -24,6 +24,7 @@
 «<ph name="SERVICE_SCRIPT_NAME" />» አስቀድሞ ምልክት ከተደረገበት ምልክቱን ያንሱትና እንደገና ምልክት ያድርጉበት።</translation>
 <translation id="225614027745146050">እንኳን ደህና መጡ</translation>
 <translation id="2320166752086256636">የቁልፍ ሰሌዳን ደብቅ</translation>
+<translation id="2333212046079545895">የቅጂ መብት 2021 Google LLC.። ሁሉም መብቶች የተጠበቁ ናቸው።</translation>
 <translation id="2359808026110333948">ቀጥል</translation>
 <translation id="2366718077645204424">አስተናጋጁን መድረስ አልተቻለም። ይሄ በሚጠቀሙት አውታረ መረብ ላይ ባለ ውቅር ምክንያት ሳይሆን አይቀርም።</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  ለመጨረሻ ጊዜ መስመር ላይ የታየው በ<ph name="RELATIVE_TIMESTAMP" />።</translation>
diff --git a/remoting/resources/remoting_strings_be.xtb b/remoting/resources/remoting_strings_be.xtb
index 73d0da5..d1ce9eb 100644
--- a/remoting/resources/remoting_strings_be.xtb
+++ b/remoting/resources/remoting_strings_be.xtb
@@ -24,6 +24,7 @@
 Калі птушка побач з параметрам "<ph name="SERVICE_SCRIPT_NAME" />" была ўжо пастаўлена, зніміце яе і пастаўце зноў.</translation>
 <translation id="225614027745146050">Вітаем</translation>
 <translation id="2320166752086256636">Схаваць клавіятуру</translation>
+<translation id="2333212046079545895">Аўтарскае права належыць Google LLC, 2021. Усе правы абаронены.</translation>
 <translation id="2359808026110333948">Працягнуць</translation>
 <translation id="2366718077645204424">Не ўдалося звязацца з хостам. Магчыма, праблема з канфігурацыяй сеткі, якой вы карыстаецеся.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Апошні выхад у інтэрнэт: <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb
index 06a8ad0..36969a5 100644
--- a/remoting/resources/remoting_strings_bn.xtb
+++ b/remoting/resources/remoting_strings_bn.xtb
@@ -24,6 +24,7 @@
 '<ph name="SERVICE_SCRIPT_NAME" />' বিকল্পে আগে থেকেই টিক চিহ্ন দেওয়া থাকলে, সেটি সরিয়ে আবার টিক দিন।</translation>
 <translation id="225614027745146050">স্বাগতম</translation>
 <translation id="2320166752086256636">কীবোর্ড লুকান</translation>
+<translation id="2333212046079545895">কপিরাইট ২০২১ Google LLC. সর্বস্বত্ব সংরক্ষিত।</translation>
 <translation id="2359808026110333948">চালিয়ে যান</translation>
 <translation id="2366718077645204424">হোস্টে পৌঁছাতে পারেনি৷ আপনার ব্যবহার করা নেটওয়ার্কের কনফিগারেশনের কারণে সম্ভবত এটি হয়েছে৷</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> অনলাইনে সর্বশেষ <ph name="RELATIVE_TIMESTAMP" /> দেখা গেছে।</translation>
diff --git a/remoting/resources/remoting_strings_ca.xtb b/remoting/resources/remoting_strings_ca.xtb
index 6b25ad2..185937c 100644
--- a/remoting/resources/remoting_strings_ca.xtb
+++ b/remoting/resources/remoting_strings_ca.xtb
@@ -24,6 +24,7 @@
 Si la casella <ph name="SERVICE_SCRIPT_NAME" /> ja està marcada, desmarca-la i torna-la a marcar.</translation>
 <translation id="225614027745146050">Et donem la benvinguda</translation>
 <translation id="2320166752086256636">Amaga el teclat</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Tots els drets reservats.</translation>
 <translation id="2359808026110333948">Continua</translation>
 <translation id="2366718077645204424">No es pot connectar amb l'amfitrió. Probablement, això passa a causa de la configuració de la xarxa que esteu fent servir.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> L'última connexió va ser <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_cs.xtb b/remoting/resources/remoting_strings_cs.xtb
index 1226a49..4b7c0c9 100644
--- a/remoting/resources/remoting_strings_cs.xtb
+++ b/remoting/resources/remoting_strings_cs.xtb
@@ -24,6 +24,7 @@
 Pokud je položka <ph name="SERVICE_SCRIPT_NAME" /> již zaškrtnutá, zrušte její zaškrtnutí a poté ji zaškrtněte znovu.</translation>
 <translation id="225614027745146050">Vítejte</translation>
 <translation id="2320166752086256636">Skrýt klávesnici</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Všechna práva vyhrazena.</translation>
 <translation id="2359808026110333948">Pokračovat</translation>
 <translation id="2366718077645204424">Hostitele nelze nalézt. Pravděpodobnou příčinou je aktuální konfigurace sítě.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Naposledy online: <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_eu.xtb b/remoting/resources/remoting_strings_eu.xtb
index 034e5c45..73cee8b 100644
--- a/remoting/resources/remoting_strings_eu.xtb
+++ b/remoting/resources/remoting_strings_eu.xtb
@@ -24,6 +24,7 @@
 "<ph name="SERVICE_SCRIPT_NAME" />" dagoeneko markatuta badago, desmarkatu, eta marka ezazu berriro.</translation>
 <translation id="225614027745146050">Ongi etorri</translation>
 <translation id="2320166752086256636">Ezkutatu teklatua</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Eskubide guztiak erreserbatuta.</translation>
 <translation id="2359808026110333948">Jarraitu</translation>
 <translation id="2366718077645204424">Ezin da ostalariarekin konektatu. Agian erabiltzen ari zaren sarearen konfigurazioarengatik izan daiteke.zoo</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Azken konexio-data <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_fa.xtb b/remoting/resources/remoting_strings_fa.xtb
index 312c69b..2c4a2751 100644
--- a/remoting/resources/remoting_strings_fa.xtb
+++ b/remoting/resources/remoting_strings_fa.xtb
@@ -24,6 +24,7 @@
 اگر «<ph name="SERVICE_SCRIPT_NAME" />» قبلاً علامت زده شده است، علامت آن را بردارید و دوباره علامت بزنید.</translation>
 <translation id="225614027745146050">خوش آمدید</translation>
 <translation id="2320166752086256636">پنهان کردن صفحه‌کلید</translation>
+<translation id="2333212046079545895">‏حق نسخه‌برداری ۲۰۲۱ Google LLC. کلیه حقوق محفوظ است.</translation>
 <translation id="2359808026110333948">ادامه</translation>
 <translation id="2366718077645204424">دسترسی به میزبان امکان‌پذیر نیست. این احتمالاً به دلیل پیکربندی شبکه‌ای است که استفاده می‌کنید.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  آخرین حضور آنلاین <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_fi.xtb b/remoting/resources/remoting_strings_fi.xtb
index 1f3065f..530ce15 100644
--- a/remoting/resources/remoting_strings_fi.xtb
+++ b/remoting/resources/remoting_strings_fi.xtb
@@ -24,6 +24,7 @@
 Jos <ph name="SERVICE_SCRIPT_NAME" /> on jo valittuna, poista valinta ja valitse se uudelleen.</translation>
 <translation id="225614027745146050">Tervetuloa</translation>
 <translation id="2320166752086256636">Piilota näppäimistö</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Kaikki oikeudet pidätetään.</translation>
 <translation id="2359808026110333948">Jatka</translation>
 <translation id="2366718077645204424">Isäntään ei saatu yhteyttä. Tämä johtuu luultavasti käyttämäsi verkon määrityksistä.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Havaittiin verkossa viimeksi <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_fr-CA.xtb b/remoting/resources/remoting_strings_fr-CA.xtb
index eaa6c19..252ee3f 100644
--- a/remoting/resources/remoting_strings_fr-CA.xtb
+++ b/remoting/resources/remoting_strings_fr-CA.xtb
@@ -24,6 +24,7 @@
 Si l'option « <ph name="SERVICE_SCRIPT_NAME" /> » est déjà cochée, décochez-la, puis cochez-la de nouveau.</translation>
 <translation id="225614027745146050">Bienvenue</translation>
 <translation id="2320166752086256636">Masquer le clavier</translation>
+<translation id="2333212046079545895">Droits d'auteur 2021 Google LLC. Tous droits réservés.</translation>
 <translation id="2359808026110333948">Continuer</translation>
 <translation id="2366718077645204424">Impossible d'accéder à l'hôte, probablement en raison de la configuration réseau que vous utilisez.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Dernière connexion <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_gl.xtb b/remoting/resources/remoting_strings_gl.xtb
index 3ec455b..654d086 100644
--- a/remoting/resources/remoting_strings_gl.xtb
+++ b/remoting/resources/remoting_strings_gl.xtb
@@ -24,6 +24,7 @@
 Se a caixa que hai a carón de <ph name="SERVICE_SCRIPT_NAME" /> xa está seleccionada, desmárcaa e márcaa de novo.</translation>
 <translation id="225614027745146050">Dámosche a benvida</translation>
 <translation id="2320166752086256636">Ocultar teclado</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Reservados todos os dereitos.</translation>
 <translation id="2359808026110333948">Continuar</translation>
 <translation id="2366718077645204424">Non se pode conectar co host. A causa é probablemente á configuración da rede que estás usando.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Última conexión en liña <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_hy.xtb b/remoting/resources/remoting_strings_hy.xtb
index 4d0eb1f..00e6fbd 100644
--- a/remoting/resources/remoting_strings_hy.xtb
+++ b/remoting/resources/remoting_strings_hy.xtb
@@ -24,6 +24,7 @@
 Եթե «<ph name="SERVICE_SCRIPT_NAME" />» պարամետրն արդեն նշված է, ապանշեք ու նորից նշեք այն։</translation>
 <translation id="225614027745146050">Ողջույն</translation>
 <translation id="2320166752086256636">Թաքցնել ստեղնաշարը</translation>
+<translation id="2333212046079545895">© 2021 Google LLC։ Բոլոր իրավունքները պահպանված են։</translation>
 <translation id="2359808026110333948">Շարունակել</translation>
 <translation id="2366718077645204424">Հնարավոր չէ կապ հաստատել խնամորդի հետ: Հավանաբար, սա ձեր ցանցի կազմաձևումների պատճառով է:</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Վերջին անգամ առցանց է եղել <ph name="RELATIVE_TIMESTAMP" />:</translation>
diff --git a/remoting/resources/remoting_strings_lt.xtb b/remoting/resources/remoting_strings_lt.xtb
index d35533b..f3bbc6b 100644
--- a/remoting/resources/remoting_strings_lt.xtb
+++ b/remoting/resources/remoting_strings_lt.xtb
@@ -24,6 +24,7 @@
 Jei parinktis „<ph name="SERVICE_SCRIPT_NAME" />“ jau pažymėta, atžymėkite ją ir pažymėkite iš naujo.</translation>
 <translation id="225614027745146050">Sveiki</translation>
 <translation id="2320166752086256636">Slėpti klaviatūrą</translation>
+<translation id="2333212046079545895">Autorių teisės „Google LLC“, 2021 m. Visos teisės saugomos.</translation>
 <translation id="2359808026110333948">Tęskite</translation>
 <translation id="2366718077645204424">Neįmanoma pasiekti prieglobos. Taip greičiausiai nutiko dėl naudojamo tinklo konfigūracijos.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Paskutinį kartą matyta prisijungus <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_mk.xtb b/remoting/resources/remoting_strings_mk.xtb
index 41d2d1c..6518d6b 100644
--- a/remoting/resources/remoting_strings_mk.xtb
+++ b/remoting/resources/remoting_strings_mk.xtb
@@ -24,6 +24,7 @@
 Ако „<ph name="SERVICE_SCRIPT_NAME" />“ е веќе избрано, поништете го изборот и повторно изберете го.</translation>
 <translation id="225614027745146050">Добре дојдовте</translation>
 <translation id="2320166752086256636">Сoкриј ја тастатурата</translation>
+<translation id="2333212046079545895">Авторски права за 2021 г. на Google LLC. Сите права се задржани.</translation>
 <translation id="2359808026110333948">Продолжи</translation>
 <translation id="2366718077645204424">Не може да се добие домаќинот. Тоа е веројатно поради конфигурацијата на мрежата што ја користите.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Последен пат онлајн <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_ml.xtb b/remoting/resources/remoting_strings_ml.xtb
index 7ca100e..417ed3df 100644
--- a/remoting/resources/remoting_strings_ml.xtb
+++ b/remoting/resources/remoting_strings_ml.xtb
@@ -24,6 +24,7 @@
 '<ph name="SERVICE_SCRIPT_NAME" />' എന്നതിൽ മുമ്പേ ചെക്ക്‌മാർക്ക് ഇട്ടിട്ടുണ്ടെങ്കിൽ, അത് അൺചെക്ക് ചെയ്‍ത ശേഷം വീണ്ടും ചെക്ക്‌ മാർക്കിടുക.</translation>
 <translation id="225614027745146050">സ്വാഗതം</translation>
 <translation id="2320166752086256636">കീബോർഡ് മറയ്‌ക്കുക</translation>
+<translation id="2333212046079545895">പകർപ്പവകാശം 2021 Google LLC. എല്ലാ അവകാശങ്ങളും നിക്ഷിപ്‌തം.</translation>
 <translation id="2359808026110333948">തുടരുക</translation>
 <translation id="2366718077645204424">ഹോസ്റ്റിൽ എത്തിച്ചേരാനായില്ല. ഇത് നിങ്ങൾ ഉപയോഗിക്കുന്ന നെറ്റ്‌വർക്കിന്റെ കോൺഫിഗറേഷൻ കാരണമാകാം.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> അവസാനമായി ഓൺലൈനിൽ കണ്ടത് <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_ro.xtb b/remoting/resources/remoting_strings_ro.xtb
index 5011857..44a43fc 100644
--- a/remoting/resources/remoting_strings_ro.xtb
+++ b/remoting/resources/remoting_strings_ro.xtb
@@ -24,6 +24,7 @@
 Dacă opțiunea „<ph name="SERVICE_SCRIPT_NAME" />” este deja bifată, debifeaz-o și bifeaz-o din nou.</translation>
 <translation id="225614027745146050">Bun venit</translation>
 <translation id="2320166752086256636">Ascunde tastatura</translation>
+<translation id="2333212046079545895">Drept de autor 2021 Google LLC. Toate drepturile rezervate.</translation>
 <translation id="2359808026110333948">Continuă</translation>
 <translation id="2366718077645204424">Gazda nu poate fi accesată. Acest lucru este cauzat, probabil, de configurația rețelei pe care o utilizați.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Ultima dată online <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_si.xtb b/remoting/resources/remoting_strings_si.xtb
index 06db24a..98ef3d9d 100644
--- a/remoting/resources/remoting_strings_si.xtb
+++ b/remoting/resources/remoting_strings_si.xtb
@@ -24,6 +24,7 @@
 '<ph name="SERVICE_SCRIPT_NAME" />' දැනටමත් ලකුණු කර තිබේ නම්, එය ලකුණු නොකර නැවත ලකුණු කරන්න.</translation>
 <translation id="225614027745146050">ආයුබෝවන්</translation>
 <translation id="2320166752086256636">යතුරු පුවරුව සඟවන්න</translation>
+<translation id="2333212046079545895">ප්‍රකාශන හිමිකම 2020 Google LLC. සියලු හිමිකම් ඇවිරිණි.</translation>
 <translation id="2359808026110333948">කරගෙන යන්න</translation>
 <translation id="2366718077645204424">අනුග්‍රාහක වෙත ළඟා විය නොහැකි විය. මීට හේතු විය හැක්කේ ඔබ භාවිතා කරන ජාලයේ වින්‍යාසකරණය වේ.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  අවසන් වරට සබැඳිව දැක්කේ <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_sk.xtb b/remoting/resources/remoting_strings_sk.xtb
index d01faf2a..1696db4 100644
--- a/remoting/resources/remoting_strings_sk.xtb
+++ b/remoting/resources/remoting_strings_sk.xtb
@@ -24,6 +24,7 @@
 Ak je políčko <ph name="SERVICE_SCRIPT_NAME" /> už začiarknuté, začiarknutie zrušte a potom ho znova začiarknite.</translation>
 <translation id="225614027745146050">Vitajte</translation>
 <translation id="2320166752086256636">Skryť klávesnicu</translation>
+<translation id="2333212046079545895">Copyright 2021 Google LLC. Všetky práva vyhradené.</translation>
 <translation id="2359808026110333948">Pokračovať</translation>
 <translation id="2366718077645204424">Hostiteľa sa nepodarilo nájsť. Pravdepodobne je to spôsobené konfiguráciou siete, ktorú používate.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Naposledy bol(a) online <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/remoting/resources/remoting_strings_sq.xtb b/remoting/resources/remoting_strings_sq.xtb
index 5b910e0..d1307eb 100644
--- a/remoting/resources/remoting_strings_sq.xtb
+++ b/remoting/resources/remoting_strings_sq.xtb
@@ -24,6 +24,7 @@
 Nëse "<ph name="SERVICE_SCRIPT_NAME" />" është e zgjedhur tashmë, anulo zgjedhjen e saj dhe më pas zgjidhe përsëri.</translation>
 <translation id="225614027745146050">Mirë se erdhe</translation>
 <translation id="2320166752086256636">Fshih tastierën</translation>
+<translation id="2333212046079545895">Të drejtat e autorit 2021 Google LLC. Të gjitha të drejtat të rezervuara.</translation>
 <translation id="2359808026110333948">Vazhdo</translation>
 <translation id="2366718077645204424">Strehuesi nuk mund të arrihet. Kjo ndodh ndoshta për shkak të konfigurimit të rrjetit që po përdor.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Parë për herë të fundit në linjë <ph name="RELATIVE_TIMESTAMP" />.</translation>
diff --git a/services/network/origin_policy/origin_policy_parser.cc b/services/network/origin_policy/origin_policy_parser.cc
index b52f32a0..291ead6 100644
--- a/services/network/origin_policy/origin_policy_parser.cc
+++ b/services/network/origin_policy/origin_policy_parser.cc
@@ -45,14 +45,6 @@
   if (base::Value* features = json->FindDictKey("features")) {
     ParseFeatures(*features);
   }
-
-  if (base::Value* isolation =
-          json->FindKeyOfType("isolation", base::Value::Type::BOOLEAN)) {
-    if (isolation->GetBool())
-      policy_contents_->isolation_optin_hints = IsolationOptInHints::NO_HINTS;
-  } else if (base::Value* isolation = json->FindDictKey("isolation")) {
-    ParseIsolation(*isolation);
-  }
 }
 
 bool OriginPolicyParser::ParseIds(const base::Value& json) {
@@ -104,25 +96,6 @@
   }
 }
 
-// The parsing is based on the example at
-// https://github.com/domenic/origin-isolation#example.
-void OriginPolicyParser::ParseIsolation(const base::Value& policy) {
-  IsolationOptInHints hints = IsolationOptInHints::NO_HINTS;
-  for (const auto& key_value : policy.DictItems()) {
-    // If we hit a key with a non-boolean value, skip it.
-    if (!key_value.second.is_bool())
-      continue;
-    if (key_value.second.GetBool()) {
-      IsolationOptInHints dict_hint =
-          GetIsolationOptInHintFromString(key_value.first);
-      // If we hit a key we don't recognise, it will just return NO_HINTS and
-      // have no effect.
-      hints |= dict_hint;
-    }
-  }
-  policy_contents_->isolation_optin_hints = hints;
-}
-
 // https://wicg.github.io/origin-policy/#valid-origin-policy-id
 bool OriginPolicyParser::IsValidOriginPolicyId(const std::string& id) {
   return !id.empty() && std::none_of(id.begin(), id.end(), [](char ch) {
diff --git a/services/network/origin_policy/origin_policy_parser.h b/services/network/origin_policy/origin_policy_parser.h
index 6aa027b..5d5a326 100644
--- a/services/network/origin_policy/origin_policy_parser.h
+++ b/services/network/origin_policy/origin_policy_parser.h
@@ -38,7 +38,6 @@
   bool ParseIds(const base::Value&);
   void ParseContentSecurity(const base::Value&);
   void ParseFeatures(const base::Value&);
-  void ParseIsolation(const base::Value&);
 
   static bool IsValidOriginPolicyId(const std::string&);
 
diff --git a/services/network/origin_policy/origin_policy_parser_unittest.cc b/services/network/origin_policy/origin_policy_parser_unittest.cc
index a9284a2..a92c217 100644
--- a/services/network/origin_policy/origin_policy_parser_unittest.cc
+++ b/services/network/origin_policy/origin_policy_parser_unittest.cc
@@ -19,7 +19,6 @@
 void AssertEmptyPolicy(
     const network::OriginPolicyContentsPtr& policy_contents) {
   ASSERT_FALSE(policy_contents->feature_policy.has_value());
-  ASSERT_FALSE(policy_contents->isolation_optin_hints.has_value());
   ASSERT_EQ(0u, policy_contents->ids.size());
   ASSERT_EQ(0u, policy_contents->content_security_policies.size());
   ASSERT_EQ(0u, policy_contents->content_security_policies_report_only.size());
@@ -547,108 +546,4 @@
   ASSERT_FALSE(policy_contents->feature_policy.has_value());
 }
 
-namespace {
-
-void TestHintsHelper(const std::vector<std::string>& target_hints) {
-  std::string hints_substr;
-  for (auto hint_str : target_hints) {
-    hints_substr += base::StringPrintf("%s\"%s\": true",
-                                       (!hints_substr.empty() ? ", " : ""),
-                                       hint_str.c_str());
-  }
-  std::string manifest_string =
-      base::StringPrintf("{ \"ids\": [\"my-policy\"], \"isolation\": { %s }}",
-                         hints_substr.c_str());
-  auto policy_contents = OriginPolicyParser::Parse(manifest_string);
-
-  ASSERT_TRUE(policy_contents->isolation_optin_hints.has_value());
-  for (auto target_hint_str : target_hints) {
-    IsolationOptInHints target_hint =
-        GetIsolationOptInHintFromString(target_hint_str);
-    EXPECT_EQ(target_hint,
-              target_hint & policy_contents->isolation_optin_hints.value());
-  }
-}
-
-}  // namespace
-
-TEST(OriginPolicyParser, IsolationOptInNoIsolationKey) {
-  auto policy_contents =
-      OriginPolicyParser::Parse(R"({ "ids": ["my-policy"] })");
-  ASSERT_FALSE(policy_contents->isolation_optin_hints.has_value());
-}
-
-TEST(OriginPolicyParser, IsolationOptInNoDictTrue) {
-  auto policy_contents = OriginPolicyParser::Parse(R"({
-    "ids": ["my-policy"],
-    "isolation": true
-  })");
-  ASSERT_TRUE(policy_contents->isolation_optin_hints.has_value());
-  EXPECT_EQ(IsolationOptInHints::NO_HINTS,
-            policy_contents->isolation_optin_hints.value());
-}
-
-TEST(OriginPolicyParser, IsolationOptInNoDictFalse) {
-  auto policy_contents = OriginPolicyParser::Parse(R"({
-    "ids": ["my-policy"],
-    "isolation": false
-  })");
-
-  ASSERT_FALSE(OriginPolicyParser::Parse(R"({ "isolation": false })")
-                   ->isolation_optin_hints.has_value());
-}
-
-TEST(OriginPolicyParser, IsolationOptInEmptyDict) {
-  TestHintsHelper({});
-}
-
-TEST(OriginPolicyParser, IsolationOptInTestOneHint) {
-  TestHintsHelper({"prefer_isolated_event_loop"});
-  TestHintsHelper({"prefer_isolated_memory"});
-  TestHintsHelper({"for_side_channel_protection"});
-  TestHintsHelper({"for_memory_measurement"});
-}
-
-TEST(OriginPolicyParser, IsolationOptInTestTwoHints) {
-  TestHintsHelper({"prefer_isolated_event_loop", "prefer_isolated_memory"});
-  TestHintsHelper(
-      {"prefer_isolated_event_loop", "for_side_channel_protection"});
-  TestHintsHelper({"prefer_isolated_event_loop", "for_memory_measurement"});
-  TestHintsHelper({"prefer_isolated_memory", "for_side_channel_protection"});
-  TestHintsHelper({"prefer_isolated_memory", "for_memory_measurement"});
-  TestHintsHelper({"for_side_channel_protection", "for_memory_measurement"});
-}
-
-TEST(OriginPolicyParser, IsolationOptInTestThreeHints) {
-  TestHintsHelper({"prefer_isolated_event_loop", "prefer_isolated_memory",
-                   "for_side_channel_protection"});
-}
-
-TEST(OriginPolicyParser, IsolationOptInIgnoreUnrecognisedKeys) {
-  std::string manifest_string = R"( {
-    "ids": ["my-policy"],
-    "isolation": {
-      "prefer_isolated_event_loop": true,
-      "foo": true
-    }
-  } )";
-  auto policy_contents = OriginPolicyParser::Parse(manifest_string);
-  ASSERT_TRUE(policy_contents->isolation_optin_hints.has_value());
-  EXPECT_EQ(IsolationOptInHints::PREFER_ISOLATED_EVENT_LOOP,
-            policy_contents->isolation_optin_hints.value());
-}
-
-TEST(OriginPolicyParser, IsolationOptInIgnoreFalseValues) {
-  std::string manifest_string = R"( {
-    "ids": ["my-policy"],
-    "isolation": {
-      "prefer_isolated_event_loop": false
-    }
-  } )";
-  auto policy_contents = OriginPolicyParser::Parse(manifest_string);
-  ASSERT_TRUE(policy_contents->isolation_optin_hints.has_value());
-  EXPECT_EQ(IsolationOptInHints::NO_HINTS,
-            policy_contents->isolation_optin_hints.value());
-}
-
 }  // namespace network
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
index ea0388a..d177c05 100644
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -202,6 +202,9 @@
 // Determines whether Trust Tokens issuance requests should be diverted, at the
 // corresponding issuers' request, to the operating system instead of sent
 // to the issuers' servers.
+//
+// WARNING: If you rename this param, you must update the corresponding flag
+// entry in about_flags.cc.
 const base::FeatureParam<bool> kPlatformProvidedTrustTokenIssuance{
     &kTrustTokens, "PlatformProvidedTrustTokenIssuance", false};
 
diff --git a/services/network/public/cpp/network_ipc_param_traits.h b/services/network/public/cpp/network_ipc_param_traits.h
index a898d3f..f287d83b6 100644
--- a/services/network/public/cpp/network_ipc_param_traits.h
+++ b/services/network/public/cpp/network_ipc_param_traits.h
@@ -140,7 +140,6 @@
   IPC_STRUCT_TRAITS_MEMBER(feature_policy)
   IPC_STRUCT_TRAITS_MEMBER(content_security_policies)
   IPC_STRUCT_TRAITS_MEMBER(content_security_policies_report_only)
-  IPC_STRUCT_TRAITS_MEMBER(isolation_optin_hints)
 IPC_STRUCT_TRAITS_END()
 
 IPC_STRUCT_TRAITS_BEGIN(network::OriginPolicy)
diff --git a/services/network/public/cpp/origin_policy.cc b/services/network/public/cpp/origin_policy.cc
index 4ecc285..e1d3d831 100644
--- a/services/network/public/cpp/origin_policy.cc
+++ b/services/network/public/cpp/origin_policy.cc
@@ -26,14 +26,12 @@
     const std::vector<std::string>& ids,
     const base::Optional<std::string>& feature_policy,
     const std::vector<std::string>& content_security_policies,
-    const std::vector<std::string>& content_security_policies_report_only,
-    const base::Optional<IsolationOptInHints>& isolation_optin_hints)
+    const std::vector<std::string>& content_security_policies_report_only)
     : ids(ids),
       feature_policy(feature_policy),
       content_security_policies(content_security_policies),
       content_security_policies_report_only(
-          content_security_policies_report_only),
-      isolation_optin_hints(isolation_optin_hints) {}
+          content_security_policies_report_only) {}
 
 OriginPolicyContents& OriginPolicyContents::operator=(
     const OriginPolicyContents& other) = default;
@@ -42,8 +40,7 @@
   return ids == other.ids && feature_policy == other.feature_policy &&
          content_security_policies == other.content_security_policies &&
          content_security_policies_report_only ==
-             other.content_security_policies_report_only &&
-         isolation_optin_hints == other.isolation_optin_hints;
+             other.content_security_policies_report_only;
 }
 
 OriginPolicyContentsPtr OriginPolicyContents::ClonePtr() {
diff --git a/services/network/public/cpp/origin_policy.h b/services/network/public/cpp/origin_policy.h
index bb4cec8..6bec8d2a 100644
--- a/services/network/public/cpp/origin_policy.h
+++ b/services/network/public/cpp/origin_policy.h
@@ -50,8 +50,7 @@
       const std::vector<std::string>& ids,
       const base::Optional<std::string>& feature_policy,
       const std::vector<std::string>& content_security_policies,
-      const std::vector<std::string>& content_security_policies_report_only,
-      const base::Optional<IsolationOptInHints>& isolation_optin_hints);
+      const std::vector<std::string>& content_security_policies_report_only);
 
   OriginPolicyContents(const OriginPolicyContents& other);
   OriginPolicyContents& operator=(const OriginPolicyContents& other);
@@ -92,11 +91,6 @@
   // a "report" disposition.
   // https://w3c.github.io/webappsec-csp/#policy-disposition
   std::vector<std::string> content_security_policies_report_only;
-
-  // This field, if present, indicates that the origin is opting in to
-  // origin-based isolation. The int contains zero or more flag bits indicating
-  // what the origin is hoping to achieve through isolation.
-  base::Optional<IsolationOptInHints> isolation_optin_hints;
 };
 
 // Native implementation of mojom::OriginPolicy. This is done so we can pass
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 4ffa6340..2c3bc48 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -41673,6 +41673,116 @@
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices"
         ],
+        "experiment_percentage": 100,
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "chrome_public_smoke_test"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "PQ3A.190801.002",
+              "device_os_flavor": "google",
+              "device_os_type": "userdebug",
+              "device_type": "walleye",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "chrome_public_smoke_test",
+        "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--git-revision=${got_revision}",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter"
+        ],
+        "experiment_percentage": 50,
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "chrome_public_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "precommit_args": [
+          "--gerrit-issue=${patch_issue}",
+          "--gerrit-patchset=${patch_set}",
+          "--buildbucket-id=${buildbucket_build_id}"
+        ],
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "PQ3A.190801.002",
+              "device_os_flavor": "google",
+              "device_os_type": "userdebug",
+              "device_type": "walleye",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 20
+        },
+        "test": "chrome_public_test_apk",
+        "test_id_prefix": "ninja://chrome/android:chrome_public_test_apk/"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -41974,6 +42084,57 @@
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices"
         ],
+        "experiment_percentage": 100,
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "weblayer_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "PQ3A.190801.002",
+              "device_os_flavor": "google",
+              "device_os_type": "userdebug",
+              "device_type": "walleye",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "weblayer_unittests",
+        "test_id_prefix": "ninja://weblayer/test:weblayer_unittests/"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -42075,6 +42236,57 @@
         },
         "test": "webview_instrumentation_test_apk",
         "test_id_prefix": "ninja://android_webview/test:webview_instrumentation_test_apk/"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices"
+        ],
+        "experiment_percentage": 100,
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "webview_ui_test_app_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "resultdb": {
+          "enable": true
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "PQ3A.190801.002",
+              "device_os_flavor": "google",
+              "device_os_type": "userdebug",
+              "device_type": "walleye",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "webview_ui_test_app_test_apk",
+        "test_id_prefix": "ninja://android_webview/tools/automated_ui_tests:webview_ui_test_app_test_apk/"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.angle.json b/testing/buildbot/chromium.angle.json
index ff10f32d..de0e9241 100644
--- a/testing/buildbot/chromium.angle.json
+++ b/testing/buildbot/chromium.angle.json
@@ -1031,43 +1031,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:5912-19.0.2",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
@@ -1096,42 +1059,6 @@
           "shards": 2
         },
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:5912-19.0.2",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
       }
     ]
   },
@@ -1306,43 +1233,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:1cb3-418.56",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
@@ -1371,42 +1261,6 @@
           "shards": 2
         },
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:1cb3-418.56",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
       }
     ]
   },
@@ -2617,7 +2471,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
@@ -2626,7 +2480,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl2_conformance_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true
         },
@@ -2765,7 +2619,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2773,7 +2627,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_tests",
+        "name": "webgl_conformance_validating_tests",
         "resultdb": {
           "enable": true
         },
@@ -2893,7 +2747,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
@@ -2902,7 +2756,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl2_conformance_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true
         },
@@ -3033,7 +2887,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3041,7 +2895,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_tests",
+        "name": "webgl_conformance_validating_tests",
         "resultdb": {
           "enable": true
         },
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 1f4778b6..9b37184 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -10588,51 +10588,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "breakpad_unittests",
-        "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/"
       },
@@ -10715,28 +10670,6 @@
               "os": "Android"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -10760,27 +10693,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -10802,27 +10714,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -11159,27 +11050,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -11633,45 +11503,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "breakpad_unittests",
-        "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/"
       },
@@ -11742,25 +11573,6 @@
               "os": "Android"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -11781,24 +11593,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -11817,24 +11611,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -12123,24 +11899,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -12603,51 +12361,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "breakpad_unittests",
-        "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/"
       },
@@ -12730,28 +12443,6 @@
               "os": "Android"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -12775,27 +12466,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -12817,27 +12487,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -13174,27 +12823,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -13687,51 +13315,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "breakpad_unittests",
-        "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/"
       },
@@ -13814,28 +13397,6 @@
               "os": "Android"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -13859,27 +13420,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -13901,27 +13441,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -14258,27 +13777,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "resultdb": {
-          "enable": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -50696,27 +50194,6 @@
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -50783,25 +50260,6 @@
               "os": "Ubuntu-16.04"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -50822,24 +50280,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -50858,24 +50298,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -51164,24 +50586,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -51573,27 +50977,6 @@
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -51660,25 +51043,6 @@
               "os": "Ubuntu-16.04"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -51699,24 +51063,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -51735,24 +51081,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -52041,24 +51369,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Ubuntu-16.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/"
       },
@@ -57964,27 +57274,6 @@
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -58051,25 +57340,6 @@
               "os": "Mac-10.15"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -58090,24 +57360,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -58126,24 +57378,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -58432,24 +57666,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "sandbox_mac_unittests",
         "test_id_prefix": "ninja://sandbox/mac:sandbox_mac_unittests/"
       },
@@ -58860,27 +58076,6 @@
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -58947,25 +58142,6 @@
               "os": "Mac-10.15"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -58986,24 +58162,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -59022,24 +58180,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -59328,24 +58468,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Mac-10.15"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "sandbox_mac_unittests",
         "test_id_prefix": "ninja://sandbox/mac:sandbox_mac_unittests/"
       },
@@ -59975,27 +59097,6 @@
         "test_id_prefix": "ninja://chrome/browser/browser_switcher/bho:browser_switcher_bho_unittests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -60098,25 +59199,6 @@
               "os": "Windows-10-18363"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -60155,24 +59237,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -60227,24 +59291,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -60601,24 +59647,6 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
               "integrity": "high",
               "os": "Windows-10-18363"
             }
@@ -61125,27 +60153,6 @@
         "test_id_prefix": "ninja://chrome/browser/browser_switcher/bho:browser_switcher_bho_unittests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -61248,25 +60255,6 @@
               "os": "Windows-10-18363"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -61305,24 +60293,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -61377,24 +60347,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -61751,24 +60703,6 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
               "integrity": "high",
               "os": "Windows-10-18363"
             }
@@ -62275,27 +61209,6 @@
         "test_id_prefix": "ninja://chrome/browser/browser_switcher/bho:browser_switcher_bho_unittests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -62398,25 +61311,6 @@
               "os": "Windows-10-18363"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -62455,24 +61349,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -62527,24 +61403,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -62901,24 +61759,6 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
               "integrity": "high",
               "os": "Windows-10-18363"
             }
@@ -63425,27 +62265,6 @@
         "test_id_prefix": "ninja://chrome/browser/browser_switcher/bho:browser_switcher_bho_unittests/"
       },
       {
-        "args": [
-          "--gtest_filter=-*UsingRealWebcam*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "capture_unittests",
-        "test_id_prefix": "ninja://media/capture:capture_unittests/"
-      },
-      {
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -63548,25 +62367,6 @@
               "os": "Windows-10-18363"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 6
-        },
-        "test": "content_browsertests",
-        "test_id_prefix": "ninja://content/test:content_browsertests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "content_unittests",
@@ -63605,24 +62405,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "crashpad_tests",
-        "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/"
       },
@@ -63677,24 +62459,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "events_unittests",
-        "test_id_prefix": "ninja://ui/events:events_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/"
       },
@@ -64051,24 +62815,6 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "os": "Windows-10-18363"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "perfetto_unittests",
-        "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
               "integrity": "high",
               "os": "Windows-10-18363"
             }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index bfe0aae..53c264a 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -470,43 +470,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:5912-19.0.2",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
@@ -535,42 +498,6 @@
           "shards": 2
         },
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:5912-19.0.2",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
       }
     ]
   },
@@ -911,43 +838,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:1cb3-418.56",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
@@ -976,42 +866,6 @@
           "shards": 2
         },
         "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_validating_tests",
-        "resultdb": {
-          "enable": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:1cb3-418.56",
-              "os": "Ubuntu-19.04",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
       }
     ]
   },
@@ -1200,7 +1054,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
@@ -1209,7 +1063,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl2_conformance_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true
         },
@@ -1340,7 +1194,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1348,7 +1202,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_tests",
+        "name": "webgl_conformance_validating_tests",
         "resultdb": {
           "enable": true
         },
@@ -1569,7 +1423,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
@@ -1578,7 +1432,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl2_conformance_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true
         },
@@ -1717,7 +1571,7 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1725,7 +1579,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_tests",
+        "name": "webgl_conformance_validating_tests",
         "resultdb": {
           "enable": true
         },
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index b663667..e8bbabd 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -729,6 +729,12 @@
     'remove_from': [
       'android-code-coverage-native', # https://crbug.com/1018780
     ],
+    # TODO(crbug.com/1111436): Remove experimental when it works fine.
+    'modifications': {
+      'android-pie-arm64-rel': {
+          'experiment_percentage': 100,
+      },
+    },
   },
   'chrome_public_test_apk': {
     'remove_from': [
@@ -788,6 +794,8 @@
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter', # https://crbug.com/1010211
         ],
+        # TODO(crbug.com/1111436): Remove experimental when it works fine.
+        'experiment_percentage': 50,
       },
       'android-pie-x86-rel': {
         'args': [
@@ -2927,6 +2935,14 @@
       },
     },
   },
+  # TODO(crbug.com/1111436): Remove this once it works fine.
+  'weblayer_unittests': {
+    'modifications': {
+      'android-pie-arm64-rel': {
+        'experiment_percentage': 100,
+      },
+    },
+  },
   'webview_cts_tests': {
     'modifications': {
       'android-pie-arm64-rel': {
@@ -2977,6 +2993,14 @@
       },
     },
   },
+  # TODO(crbug.com/1111436): Remove this once it works fine.
+  'webview_ui_test_app_test_apk': {
+    'modifications': {
+      'android-pie-arm64-rel': {
+        'experiment_percentage': 100,
+      },
+    },
+  },
   'xr_browser_tests': {
     'remove_from': [
       # This exception probably needs to stay due to lack of capacity
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 78afa6e..ef7b12a9 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -151,30 +151,22 @@
     'android_pie_rel_reduced_capacity_gtests': {
       'android_browsertests': {},
       'blink_platform_unittests': {},
-      'chrome_java_test_pagecontroller_tests': {},
-      'chrome_java_test_webapk_launch_tests': {},
+      'chrome_public_test_apk': {
+        'swarming': {
+          'shards': 20,
+        },
+        'mixins': [
+          'chrome-gold-service-account',
+          'skia_gold_test',
+          'enable_resultdb',
+        ],
+      },
       'content_browsertests': {
         'swarming': {
           'shards': 15,
         },
       },
-      'monochrome_public_bundle_fake_modules_smoke_test': {},
-      'monochrome_public_bundle_smoke_test': {},
-      'monochrome_public_smoke_test': {},
-      'weblayer_browsertests': {},
       'weblayer_instrumentation_test_apk': {},
-      'webview_cts_tests': {
-        'swarming': {
-          'shards': 2,
-          'cipd_packages': [
-            {
-              "cipd_package": 'chromium/android_webview/tools/cts_archive',
-              'location': 'android_webview/tools/cts_archive',
-              'revision': 'ai8Ig4HlO0vG6aP_JP2uhyruE2yPzze8PFP1g8Z4_hgC',
-            }
-          ]
-        },
-      },
       'webview_instrumentation_test_apk': {
         'swarming': {
           'shards': 7,
@@ -259,7 +251,6 @@
         },
       },
       'android_webview_unittests': {},
-      'breakpad_unittests': {},
       'gl_unittests': {},
       'ui_android_unittests': {},
     },
@@ -4215,6 +4206,77 @@
       },
     },
 
+    'paeverywhere_common_tests': {
+      # Copy from chromium_gtests minus capture_unittests, crashpad_tests,
+      # content_browsertests, events_unittests and perfetto_unittests, because
+      # they fail.
+      'absl_hardening_tests': {},
+      'angle_unittests': {
+        'args': [
+          'angle_unittests',
+        ],
+        'android_args': [
+          '-v',
+        ],
+        'use_isolated_scripts_api': True,
+      },
+      'base_unittests': {},
+      'base_util_unittests': {},
+      'blink_common_unittests': {},
+      'blink_heap_unittests': {},
+      'blink_platform_unittests': {},
+      'boringssl_crypto_tests': {},
+      'boringssl_ssl_tests': {},
+      'cast_unittests': {},
+      'components_browsertests': {},
+      'components_unittests': {
+        'android_swarming': {
+          'shards': 4,
+        },
+      },
+      'content_unittests': {
+        'android_swarming': {
+          'shards': 3,
+        },
+      },
+      'crypto_unittests': {},
+      'gcm_unit_tests': {},
+      'gin_unittests': {},
+      'google_apis_unittests': {},
+      'gpu_unittests': {},
+      'gwp_asan_unittests': {},
+      'ipc_tests': {},
+      'jingle_unittests': {},
+      'latency_unittests': {},
+      'libjingle_xmpp_unittests': {},
+      'liburlpattern_unittests': {},
+      'media_blink_unittests': {},
+      'media_unittests': {},
+      'midi_unittests': {},
+      'mojo_unittests': {},
+      'net_unittests': {
+        'android_swarming': {
+          'shards': 3,
+        },
+      },
+      'services_unittests': {},
+      'shell_dialogs_unittests': {},
+      'skia_unittests': {},
+      'sql_unittests': {},
+      'storage_unittests': {},
+      'ui_base_unittests': {},
+      'ui_touch_selection_unittests': {},
+      'url_unittests': {},
+      'webkit_unit_tests': {
+        'test': 'blink_unittests',
+        'android_swarming': {
+          'shards': 4,
+        },
+      },
+      'wtf_unittests': {},
+      'zlib_unittests': {},
+    },
+
     'perfetto_gtests': {
       'base_unittests': {},
       'content_browsertests': {
@@ -5203,12 +5265,16 @@
     #
     # TODO(https://crbug.com/1058067): Remove this once SkiaRenderer goes
     # stable on Android.
-    # 'android_pie_rel_non_skia_renderer_gtests': [
-    #   'android_monochrome_smoke_tests',
-    #   'android_pagecontroller_self_tests',
-    #   'android_smoke_tests',
-    #   'android_webapk_launch_tests',
-    #   # TODO: Following tests are experimental (crbug/1010211).
+    'android_pie_rel_non_skia_renderer_gtests': [
+      # TODO(crbug.com/1111436): Deprecate this when all the test suites below
+      # it are re-enabled.
+      'android_pie_rel_reduced_capacity_gtests',
+
+      'android_monochrome_smoke_tests',
+      'android_pagecontroller_self_tests',
+      'android_smoke_tests',
+      'android_webapk_launch_tests',
+      # TODO: Following tests are experimental (crbug/1010211).
     #   'android_specific_chromium_gtests',  # Already includes gl_gtests.
     #   'chromium_gtests',
     #   'chromium_gtests_for_devices_with_graphical_output',
@@ -5218,11 +5284,11 @@
     #   'system_webview_shell_instrumentation_tests', # Not an experimental test
     #   'vr_platform_specific_chromium_gtests',
     #   'weblayer_android_gtests',
-    #   'weblayer_gtests',
-    #   # Experimental tests end here.
-    #   'webview_cts_tests_gtest',
-    #   'webview_ui_instrumentation_tests',
-    # ],
+      'weblayer_gtests',
+      # Experimental tests end here.
+      'webview_cts_tests_gtest',
+      'webview_ui_instrumentation_tests',
+    ],
 
     'android_wpt_scripts': [
       'chrome_public_wpt',
@@ -5640,9 +5706,7 @@
     'gpu_angle_linux_telemetry_tests': [
       'gpu_common_and_optional_telemetry_tests',
       'gpu_webgl2_conformance_gl_passthrough_telemetry_tests',
-      'gpu_webgl2_conformance_validating_telemetry_tests',
       'gpu_webgl_conformance_gl_passthrough_telemetry_tests',
-      'gpu_webgl_conformance_validating_telemetry_tests',
     ],
 
     'gpu_angle_mac_amd_and_intel_gtests': [
@@ -5666,8 +5730,8 @@
 
     'gpu_angle_mac_telemetry_tests': [
       'gpu_info_collection_telemetry_tests',
-      'gpu_webgl2_conformance_telemetry_tests',
-      'gpu_webgl_conformance_telemetry_tests',
+      'gpu_webgl2_conformance_gl_passthrough_telemetry_tests',
+      'gpu_webgl_conformance_validating_telemetry_tests',
       'gpu_webgl_conformance_gl_passthrough_telemetry_tests',
       'gpu_webgl_conformance_metal_passthrough_telemetry_tests',
       'gpu_webgl_conformance_swangle_passthrough_representative_telemetry_tests',
@@ -6269,25 +6333,25 @@
     'paeverywhere_android_gtests': [
       'android_specific_chromium_gtests_for_paeverywhere',
       'android_smoke_tests',
-      'chromium_gtests'
+      'paeverywhere_common_tests'
     ],
 
     'paeverywhere_linux_gtests': [
       'chromium_gtests_for_linux_and_mac_only',
       'chromium_gtests_for_linux_only',
       'chromium_gtests_for_win_and_linux_only',
-      'chromium_gtests',
+      'paeverywhere_common_tests',
     ],
 
     'paeverywhere_mac_gtests': [
       'chromium_gtests_for_linux_and_mac_only',
       'mac_specific_chromium_gtests',
-      'chromium_gtests',
+      'paeverywhere_common_tests',
     ],
 
     'paeverywhere_win_gtests': [
       'chromium_gtests_for_win_and_linux_only',
-      'chromium_gtests',
+      'paeverywhere_common_tests',
       'win_specific_chromium_gtests',
     ],
 
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 78c590a..c67ebef 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1125,11 +1125,10 @@
           'weblayer_shell',
         ],
         'test_suites': {
-          #'gtest_tests': 'android_pie_rel_non_skia_renderer_gtests',
-          #'isolated_scripts': 'marshmallow_nougat_pie_isolated_scripts_with_proguard',
-          # TODO(crbug.com/1111436): Remove this if/when additional capacity
+          'gtest_tests': 'android_pie_rel_non_skia_renderer_gtests',
+          # TODO(crbug.com/1111436): Re-enable this if/when additional capacity
           # has been deployed.
-          'gtest_tests': 'android_pie_rel_reduced_capacity_gtests',
+          #'isolated_scripts': 'marshmallow_nougat_pie_isolated_scripts_with_proguard',
         },
         'use_swarming': True,
         'os_type': 'android',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 50a0007..3f3555d 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1376,7 +1376,8 @@
                 {
                     "name": "Enabled_Stage2",
                     "enable_features": [
-                        "AutofillEnableAccountWalletStorage"
+                        "AutofillEnableAccountWalletStorage",
+                        "AutofillEnablePasswordInfoBarAccountIndicationFooter"
                     ],
                     "disable_features": [
                         "WalletRequiresFirstSyncSetupComplete"
diff --git a/third_party/blink/public/mojom/file_system_access/file_system_access_file_writer.mojom b/third_party/blink/public/mojom/file_system_access/file_system_access_file_writer.mojom
index 8c965fb..338833ba 100644
--- a/third_party/blink/public/mojom/file_system_access/file_system_access_file_writer.mojom
+++ b/third_party/blink/public/mojom/file_system_access/file_system_access_file_writer.mojom
@@ -32,13 +32,15 @@
 
   // Closes the file writer. This will materialize the writes operations on the
   // intended file target in the case of atomic writes.
+  // The mojo pipe will be destroyed when Close() completes.
   // Specify the |autoClose| flag to ensure Close() is automatically invoked
   // when the mojo pipe closes.
   // Returns whether the operation succeeded.
   Close() => (FileSystemAccessError result);
 
   // Aborts the write operation, resulting in the writes not being committed,
-  // even if autoClose is specified. All further operations will be rejected.
+  // even if |autoClose| is specified. The mojo pipe will be destroyed when
+  // Abort() completes.
   // Returns whether the write operation was aborted successfully.
   Abort() => (FileSystemAccessError result);
 };
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index f8cfa660..bc260e90 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -915,6 +915,11 @@
   // Requests that the blink::RemoteFrame updates its opener to the specified
   // frame. The frame token may be "empty" if the opener was disowned.
   UpdateOpener(mojo_base.mojom.UnguessableToken? opener_frame_token);
+
+  // Requests the corresponding RemoteFrame to be deleted and removed from
+  // the frame tree. This should not be called on the main frame as that frame
+  // is owned by the associated WebView.
+  DetachAndDispose();
 };
 
 // Implemented in Blink, this interface defines main-frame-specific methods that
@@ -994,6 +999,10 @@
   UpdateBrowserControlsState(cc.mojom.BrowserControlsState constraints,
                              cc.mojom.BrowserControlsState current,
                              bool animate);
+
+  // Notify renderer that the window controls overlay has changed size or
+  // visibility.
+  UpdateWindowControlsOverlay(gfx.mojom.Rect window_controls_overlay_rect);
 };
 
 // Implemented in Blink, this interface defines remote main-frame-specific
diff --git a/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc b/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
index ac07b12..5ea6550 100644
--- a/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
+++ b/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
@@ -409,8 +409,6 @@
     v8::Local<v8::FunctionTemplate> set_func = v8::FunctionTemplate::New(
         isolate, CSSPropertyAttributeSet, v8_property_name, signature, 1,
         v8::ConstructorBehavior::kThrow, v8::SideEffectType::kHasSideEffect);
-    get_func->RemovePrototype();
-    set_func->RemovePrototype();
     get_func->SetAcceptAnyReceiver(false);
     set_func->SetAcceptAnyReceiver(false);
     get_func->SetClassName(
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc
index 39f20c5..54ed4ad 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc
@@ -205,11 +205,10 @@
     } else {
       function_template = v8::FunctionTemplate::New(
           isolate, callback, data, signature, length,
-          v8::ConstructorBehavior::kAllow, side_effect_type);
+          v8::ConstructorBehavior::kThrow, side_effect_type);
     }
 
     if (!function_template.IsEmpty()) {
-      function_template->RemovePrototype();
       function_template->SetAcceptAnyReceiver(
           access_check_configuration == V8DOMConfiguration::kDoNotCheckAccess);
 
@@ -485,12 +484,10 @@
           : v8::SideEffectType::kHasSideEffect;
   if (method.property_location_configuration &
       (V8DOMConfiguration::kOnInstance | V8DOMConfiguration::kOnPrototype)) {
-    // TODO(luoe): use ConstructorBehavior::kThrow for non-constructor methods.
     v8::Local<v8::FunctionTemplate> function_template =
         v8::FunctionTemplate::New(
             isolate, callback, v8::Local<v8::Value>(), signature, method.length,
-            v8::ConstructorBehavior::kAllow, side_effect_type, v8_c_function);
-    function_template->RemovePrototype();
+            v8::ConstructorBehavior::kThrow, side_effect_type, v8_c_function);
     function_template->SetAcceptAnyReceiver(
         method.access_check_configuration ==
         V8DOMConfiguration::kDoNotCheckAccess);
@@ -510,13 +507,11 @@
     // Operations installed on the interface object must be static methods, so
     // no need to specify a signature, i.e. no need to do type check against a
     // holder.
-    // TODO(luoe): use ConstructorBehavior::kThrow for non-constructor methods.
     v8::Local<v8::FunctionTemplate> function_template =
         v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
                                   v8::Local<v8::Signature>(), method.length,
-                                  v8::ConstructorBehavior::kAllow,
+                                  v8::ConstructorBehavior::kThrow,
                                   side_effect_type);
-    function_template->RemovePrototype();
     // Similarly, there is no need to do an access check for static methods, as
     // there is no holder to check against.
     AddMethodToTemplate(isolate, interface_template, function_template, method);
@@ -554,12 +549,10 @@
   DCHECK(location);
   if (location &
       (V8DOMConfiguration::kOnInstance | V8DOMConfiguration::kOnPrototype)) {
-    // TODO(luoe): use ConstructorBehavior::kThrow for non-constructor methods.
     v8::Local<v8::FunctionTemplate> function_template =
         v8::FunctionTemplate::New(
             isolate, callback, v8::Local<v8::Value>(), signature, config.length,
-            v8::ConstructorBehavior::kAllow, side_effect_type);
-    function_template->RemovePrototype();
+            v8::ConstructorBehavior::kThrow, side_effect_type);
     function_template->SetAcceptAnyReceiver(
         config.access_check_configuration ==
         V8DOMConfiguration::kDoNotCheckAccess);
@@ -586,13 +579,11 @@
     // Operations installed on the interface object must be static
     // operations, so no need to specify a signature, i.e. no need to do
     // type check against a holder.
-    // TODO(luoe): use ConstructorBehavior::kThrow for non-constructor methods.
     v8::Local<v8::FunctionTemplate> function_template =
         v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
                                   v8::Local<v8::Signature>(), config.length,
-                                  v8::ConstructorBehavior::kAllow,
+                                  v8::ConstructorBehavior::kThrow,
                                   side_effect_type);
-    function_template->RemovePrototype();
     v8::Local<v8::Function> function =
         function_template->GetFunction(isolate->GetCurrentContext())
             .ToLocalChecked();
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni
index 9425e65..058fadc 100644
--- a/third_party/blink/renderer/bindings/generated_in_modules.gni
+++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -283,8 +283,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_picker_accept_type.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_picker_options.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_picker_options.h",
-  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writer_options.cc",
-  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writer_options.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writable_options.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writable_options.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_flags.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_flags.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_file_system_get_directory_options.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index 9a37733..96f53b886 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -210,7 +210,7 @@
           "//third_party/blink/renderer/modules/file_system_access/directory_picker_options.idl",
           "//third_party/blink/renderer/modules/file_system_access/file_picker_accept_type.idl",
           "//third_party/blink/renderer/modules/file_system_access/file_picker_options.idl",
-          "//third_party/blink/renderer/modules/file_system_access/file_system_create_writer_options.idl",
+          "//third_party/blink/renderer/modules/file_system_access/file_system_create_writable_options.idl",
           "//third_party/blink/renderer/modules/file_system_access/file_system_directory_handle.idl",
           "//third_party/blink/renderer/modules/file_system_access/file_system_file_handle.idl",
           "//third_party/blink/renderer/modules/file_system_access/file_system_get_directory_options.idl",
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
index ca8faf0..24caf58 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
@@ -5213,8 +5213,9 @@
 // https://heycam.github.io/webidl/#es-DOMException-specialness
 {
   v8::Local<v8::FunctionTemplate> intrinsic_error_prototype_interface_template =
-      v8::FunctionTemplate::New(${isolate});
-  intrinsic_error_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(${isolate}, nullptr, v8::Local<v8::Value>(),
+                                v8::Local<v8::Signature>(), 0,
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_error_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(${isolate}, "prototype"), v8::kErrorPrototype);
   ${interface_function_template}->Inherit(
@@ -5230,8 +5231,9 @@
 {
   v8::Local<v8::FunctionTemplate>
       intrinsic_iterator_prototype_interface_template =
-      v8::FunctionTemplate::New(${isolate});
-  intrinsic_iterator_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(${isolate}, nullptr, v8::Local<v8::Value>(),
+                                v8::Local<v8::Signature>(), 0,
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_iterator_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(${isolate}, "prototype"), v8::kAsyncIteratorPrototype);
   ${interface_function_template}->Inherit(
@@ -5257,8 +5259,9 @@
 {
   v8::Local<v8::FunctionTemplate>
       intrinsic_iterator_prototype_interface_template =
-      v8::FunctionTemplate::New(${isolate});
-  intrinsic_iterator_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(${isolate}, nullptr, v8::Local<v8::Value>(),
+                                v8::Local<v8::Signature>(), 0,
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_iterator_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(${isolate}, "prototype"), v8::kIteratorPrototype);
   ${interface_function_template}->Inherit(
diff --git a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
index 8f75aea..e4bc040f 100644
--- a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
@@ -579,8 +579,9 @@
   //   so there is no need to reuse this FunctionTemplate and register it in
   //   V8PerIsolateData.
   v8::Local<v8::FunctionTemplate> intrinsic_iterator_prototype_interface_template =
-      v8::FunctionTemplate::New(isolate);
-  intrinsic_iterator_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(isolate, nullptr, v8::Local<v8::Value>(), 
+                                v8::Local<v8::Signature>(), 0, 
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_iterator_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(isolate, "prototype"), v8::kIteratorPrototype);
   interface_template->Inherit(intrinsic_iterator_prototype_interface_template);
@@ -590,8 +591,9 @@
   // Temporary @@asyncIterator support for FileSystemDirectoryHandle
   // TODO(https://crbug.com/1087157): Replace with proper bindings support.
   v8::Local<v8::FunctionTemplate> intrinsic_iterator_prototype_interface_template =
-      v8::FunctionTemplate::New(isolate);
-  intrinsic_iterator_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(isolate, nullptr, v8::Local<v8::Value>(), 
+                                v8::Local<v8::Signature>(), 0, 
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_iterator_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(isolate, "prototype"), v8::kAsyncIteratorPrototype);
   interface_template->Inherit(intrinsic_iterator_prototype_interface_template);
@@ -614,8 +616,9 @@
   // |interface_template| is instantiated, its prototype.__proto__ will point to
   // |intrinsic_error_prototype_interface_template|'s "prototype" property.
   v8::Local<v8::FunctionTemplate> intrinsic_error_prototype_interface_template =
-      v8::FunctionTemplate::New(isolate);
-  intrinsic_error_prototype_interface_template->RemovePrototype();
+      v8::FunctionTemplate::New(isolate, nullptr, v8::Local<v8::Value>(), 
+                                v8::Local<v8::Signature>(), 0, 
+                                v8::ConstructorBehavior::kThrow);
   intrinsic_error_prototype_interface_template->SetIntrinsicDataProperty(
       V8AtomicString(isolate, "prototype"), v8::kErrorPrototype);
   interface_template->Inherit(intrinsic_error_prototype_interface_template);
diff --git a/third_party/blink/renderer/core/animation/animation_test.cc b/third_party/blink/renderer/core/animation/animation_test.cc
index abd458ea..922cec5 100644
--- a/third_party/blink/renderer/core/animation/animation_test.cc
+++ b/third_party/blink/renderer/core/animation/animation_test.cc
@@ -231,6 +231,38 @@
 
 class AnimationAnimationTestCompositing
     : public AnimationAnimationTestNoCompositing {
+ public:
+  Animation* CreateAnimation(CSSPropertyID property_id,
+                             String from,
+                             String to) {
+    Timing timing;
+    timing.iteration_duration = AnimationTimeDelta::FromSecondsD(30);
+
+    Persistent<StringKeyframe> start_keyframe =
+        MakeGarbageCollected<StringKeyframe>();
+    start_keyframe->SetCSSPropertyValue(
+        property_id, from, SecureContextMode::kInsecureContext, nullptr);
+    Persistent<StringKeyframe> end_keyframe =
+        MakeGarbageCollected<StringKeyframe>();
+    end_keyframe->SetCSSPropertyValue(
+        property_id, to, SecureContextMode::kInsecureContext, nullptr);
+
+    StringKeyframeVector keyframes;
+    keyframes.push_back(start_keyframe);
+    keyframes.push_back(end_keyframe);
+
+    Element* element = GetElementById("target");
+    auto* model = MakeGarbageCollected<StringKeyframeEffectModel>(keyframes);
+
+    NonThrowableExceptionState exception_state;
+    DocumentTimeline* timeline =
+        MakeGarbageCollected<DocumentTimeline>(&GetDocument());
+    return Animation::Create(
+        MakeGarbageCollected<KeyframeEffect>(element, model, timing), timeline,
+        exception_state);
+  }
+
+ private:
   void SetUp() override {
     EnableCompositing();
     AnimationAnimationTestNoCompositing::SetUp();
@@ -1411,34 +1443,8 @@
     </div>
   )HTML");
 
-  // Create KeyframeEffect
-  Timing timing;
-  timing.iteration_duration = AnimationTimeDelta::FromSecondsD(30);
-
-  Persistent<StringKeyframe> start_keyframe =
-      MakeGarbageCollected<StringKeyframe>();
-  start_keyframe->SetCSSPropertyValue(CSSPropertyID::kBackgroundColor, "red",
-                                      SecureContextMode::kInsecureContext,
-                                      nullptr);
-  Persistent<StringKeyframe> end_keyframe =
-      MakeGarbageCollected<StringKeyframe>();
-  end_keyframe->SetCSSPropertyValue(CSSPropertyID::kBackgroundColor, "green",
-                                    SecureContextMode::kInsecureContext,
-                                    nullptr);
-
-  StringKeyframeVector keyframes;
-  keyframes.push_back(start_keyframe);
-  keyframes.push_back(end_keyframe);
-
-  Element* element = GetElementById("target");
-  auto* model = MakeGarbageCollected<StringKeyframeEffectModel>(keyframes);
-
-  NonThrowableExceptionState exception_state;
-  DocumentTimeline* timeline =
-      MakeGarbageCollected<DocumentTimeline>(&GetDocument());
-  Animation* animation = Animation::Create(
-      MakeGarbageCollected<KeyframeEffect>(element, model, timing), timeline,
-      exception_state);
+  Animation* animation =
+      CreateAnimation(CSSPropertyID::kBackgroundColor, "red", "green");
 
   UpdateAllLifecyclePhasesForTest();
   animation->play();
@@ -1446,6 +1452,143 @@
             CompositorAnimations::kNoFailure);
 }
 
+// crbug.com/1149012
+// Regression test to ensure proper restart logic for composited animations on
+// relative transforms after a size change. In this test, the transform depends
+// on the width and height of the box and a change to either triggers a restart
+// of the animation if running.
+TEST_F(AnimationAnimationTestCompositing,
+       RestartCompositedAnimationOnSizeChange) {
+  // TODO(crbug.com/389359): Remove forced feature enabling once on by
+  // default.
+  ScopedCompositeRelativeKeyframesForTest composite_relative_keyframes(true);
+  SetBodyInnerHTML(R"HTML(
+    <div id ="target"
+         style="width: 100px; height: 200px; will-change: transform">
+    </div>
+  )HTML");
+
+  Animation* animation = CreateAnimation(
+      CSSPropertyID::kTransform, "translate(100%, 100%)", "translate(0%, 0%)");
+
+  UpdateAllLifecyclePhasesForTest();
+  animation->play();
+  KeyframeEffect* keyframe_effect =
+      DynamicTo<KeyframeEffect>(animation->effect());
+  ASSERT_TRUE(keyframe_effect);
+
+  EXPECT_EQ(animation->CheckCanStartAnimationOnCompositor(nullptr),
+            CompositorAnimations::kNoFailure);
+
+  GetDocument().GetPendingAnimations().Update(nullptr, true);
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+
+  // Kick the animation out of the play-pending state.
+  animation->setStartTime(0);
+
+  // No size change and animation does not require a restart.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(100, 200));
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+
+  // Restart animation on a width change.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(200, 200));
+  EXPECT_FALSE(animation->HasActiveAnimationsOnCompositor());
+
+  GetDocument().GetPendingAnimations().Update(nullptr, true);
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+
+  // Restart animation on a height change.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(200, 300));
+  EXPECT_FALSE(animation->HasActiveAnimationsOnCompositor());
+}
+
+// crbug.com/1149012
+// Regression test to ensure proper restart logic for composited animations on
+// relative transforms after a size change. In this test, the transform only
+// depends on width and a change to the height does not trigger a restart.
+TEST_F(AnimationAnimationTestCompositing,
+       RestartCompositedAnimationOnWidthChange) {
+  // TODO(crbug.com/389359): Remove forced feature enabling once on by
+  // default.
+  ScopedCompositeRelativeKeyframesForTest composite_relative_keyframes(true);
+  SetBodyInnerHTML(R"HTML(
+    <div id ="target"
+         style="width: 100px; height: 200px; will-change: transform">
+    </div>
+  )HTML");
+
+  animation = CreateAnimation(CSSPropertyID::kTransform, "translateX(100%)",
+                              "translateX(0%)");
+
+  UpdateAllLifecyclePhasesForTest();
+  animation->play();
+  KeyframeEffect* keyframe_effect =
+      DynamicTo<KeyframeEffect>(animation->effect());
+  ASSERT_TRUE(keyframe_effect);
+
+  GetDocument().GetPendingAnimations().Update(nullptr, true);
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(100, 200));
+  animation->setStartTime(0);
+
+  // Transform is not height dependent and a change to the height does not force
+  // an animation restart.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(100, 300));
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+
+  // Width change forces a restart.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(200, 300));
+  EXPECT_FALSE(animation->HasActiveAnimationsOnCompositor());
+}
+
+// crbug.com/1149012
+// Regression test to ensure proper restart logic for composited animations on
+// relative transforms after a size change.  In this test, the transition only
+// affects height and a change to the width does not trigger a restart.
+TEST_F(AnimationAnimationTestCompositing,
+       RestartCompositedAnimationOnHeightChange) {
+  // TODO(crbug.com/389359): Remove forced feature enabling once on by
+  // default.
+  ScopedCompositeRelativeKeyframesForTest composite_relative_keyframes(true);
+  SetBodyInnerHTML(R"HTML(
+    <div id ="target"
+         style="width: 100px; height: 200px; will-change: transform">
+    </div>
+  )HTML");
+
+  animation = CreateAnimation(CSSPropertyID::kTransform, "translateY(100%)",
+                              "translateY(0%)");
+
+  UpdateAllLifecyclePhasesForTest();
+  animation->play();
+  KeyframeEffect* keyframe_effect =
+      DynamicTo<KeyframeEffect>(animation->effect());
+  ASSERT_TRUE(keyframe_effect);
+
+  GetDocument().GetPendingAnimations().Update(nullptr, true);
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(100, 200));
+  animation->setStartTime(0);
+
+  // Transform is not width dependent and a change to the width does not force
+  // an animation restart.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(300, 200));
+  EXPECT_TRUE(animation->HasActiveAnimationsOnCompositor());
+
+  // Height change forces a restart.
+  keyframe_effect->UpdateBoxSizeAndCheckTransformAxisAlignment(
+      FloatSize(300, 400));
+  EXPECT_FALSE(animation->HasActiveAnimationsOnCompositor());
+}
+
 TEST_F(AnimationAnimationTestCompositing,
        ScrollLinkedAnimationCanBeComposited) {
   ResetWithCompositedAnimation();
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc
index 7880fdb..1ef7eef 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -503,12 +503,10 @@
     if (effect_target_size_) {
       if ((size_dependencies & TransformOperation::kDependsWidth) &&
           (effect_target_size_->Width() != box_size.Width()))
-        GetAnimation()->RestartAnimationOnCompositor();
+        RestartRunningAnimationOnCompositor();
       else if ((size_dependencies & TransformOperation::kDependsHeight) &&
-               (effect_target_size_->Width() != box_size.Height()))
-        GetAnimation()->RestartAnimationOnCompositor();
-    } else if (size_dependencies) {
-      GetAnimation()->RestartAnimationOnCompositor();
+               (effect_target_size_->Height() != box_size.Height()))
+        RestartRunningAnimationOnCompositor();
     }
   }
 
@@ -517,6 +515,19 @@
   return preserves_axis_alignment;
 }
 
+void KeyframeEffect::RestartRunningAnimationOnCompositor() {
+  Animation* animation = GetAnimation();
+  if (!animation)
+    return;
+
+  // No need to to restart an animation that is in the process of starting up,
+  // paused or idle.
+  if (!animation->startTime())
+    return;
+
+  animation->RestartAnimationOnCompositor();
+}
+
 bool KeyframeEffect::IsIdentityOrTranslation() const {
   static const auto** properties = TransformProperties();
   for (size_t i = 0; i < num_transform_properties; i++) {
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.h b/third_party/blink/renderer/core/animation/keyframe_effect.h
index 3fda832..7e880f5 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.h
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.h
@@ -166,6 +166,7 @@
       AnimationTimeDelta time_to_next_iteration) const override;
   bool HasIncompatibleStyle() const;
   bool HasMultipleTransformProperties() const;
+  void RestartRunningAnimationOnCompositor();
 
   Member<Element> effect_target_;
   Member<Element> target_element_;
diff --git a/third_party/blink/renderer/core/css/build.gni b/third_party/blink/renderer/core/css/build.gni
index 9a8e2aae..8f62f083 100644
--- a/third_party/blink/renderer/core/css/build.gni
+++ b/third_party/blink/renderer/core/css/build.gni
@@ -393,8 +393,6 @@
   "media_values_cached.h",
   "media_values_dynamic.cc",
   "media_values_dynamic.h",
-  "media_values_initial_viewport.cc",
-  "media_values_initial_viewport.h",
   "native_paint_image_generator.h",
   "offscreen_font_selector.cc",
   "offscreen_font_selector.h",
@@ -663,7 +661,6 @@
   "media_query_list_test.cc",
   "media_query_matcher_test.cc",
   "media_query_set_test.cc",
-  "media_values_initial_viewport_test.cc",
   "media_values_test.cc",
   "parser/css_lazy_parsing_test.cc",
   "parser/css_parser_fast_paths_test.cc",
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.cc b/third_party/blink/renderer/core/css/css_style_sheet.cc
index bdf00ae..6fe5978 100644
--- a/third_party/blink/renderer/core/css/css_style_sheet.cc
+++ b/third_party/blink/renderer/core/css/css_style_sheet.cc
@@ -37,6 +37,7 @@
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/node.h"
 #include "third_party/blink/renderer/core/frame/deprecation.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/html/html_link_element.h"
 #include "third_party/blink/renderer/core/html/html_style_element.h"
 #include "third_party/blink/renderer/core/html_names.h"
@@ -137,9 +138,15 @@
                                            const KURL& base_url,
                                            const TextPosition& start_position,
                                            const WTF::TextEncoding& encoding) {
+  Document& owner_node_document = owner_node.GetDocument();
   auto* parser_context = MakeGarbageCollected<CSSParserContext>(
-      owner_node.GetDocument(), owner_node.GetDocument().BaseURL(),
-      true /* origin_clean */, owner_node.GetDocument().GetReferrerPolicy(),
+      owner_node_document, owner_node_document.BaseURL(),
+      true /* origin_clean */,
+      Referrer(
+          owner_node_document.GetExecutionContext()
+              ? owner_node_document.GetExecutionContext()->OutgoingReferrer()
+              : String(),  // GetExecutionContext() only returns null in tests.
+          owner_node.GetDocument().GetReferrerPolicy()),
       encoding);
   if (AdTracker::IsAdScriptExecutingInDocument(&owner_node.GetDocument()))
     parser_context->SetIsAdRelated();
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc
index 697684dc..f02ca798 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/renderer/core/css/media_list.h"
 #include "third_party/blink/renderer/core/css/media_query.h"
 #include "third_party/blink/renderer/core/css/media_values_dynamic.h"
-#include "third_party/blink/renderer/core/css/media_values_initial_viewport.h"
 #include "third_party/blink/renderer/core/css/resolver/media_query_result.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -103,12 +102,6 @@
 MediaQueryEvaluator::MediaQueryEvaluator(const MediaValues& media_values)
     : media_values_(media_values.Copy()) {}
 
-MediaQueryEvaluator::MediaQueryEvaluator(
-    MediaValuesInitialViewport* media_values)
-    : media_values_(media_values) {
-  DCHECK(media_values);
-}
-
 MediaQueryEvaluator::~MediaQueryEvaluator() = default;
 
 void MediaQueryEvaluator::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.h b/third_party/blink/renderer/core/css/media_query_evaluator.h
index 3a2f09d..c3ed951 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.h
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.h
@@ -33,6 +33,7 @@
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
+
 class LocalFrame;
 class MediaQuery;
 class MediaQueryExp;
@@ -40,7 +41,6 @@
 class MediaQuerySet;
 class MediaQuerySetResult;
 class MediaValues;
-class MediaValuesInitialViewport;
 
 using MediaQueryResultList = Vector<MediaQueryResult>;
 
@@ -74,7 +74,6 @@
   // values.
   explicit MediaQueryEvaluator(const MediaValues&);
 
-  explicit MediaQueryEvaluator(MediaValuesInitialViewport*);
   MediaQueryEvaluator(const MediaQueryEvaluator&) = delete;
   MediaQueryEvaluator& operator=(const MediaQueryEvaluator&) = delete;
 
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
index d473d62..54654c0c 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/core/css/media_list.h"
 #include "third_party/blink/renderer/core/css/media_values.h"
 #include "third_party/blink/renderer/core/css/media_values_cached.h"
-#include "third_party/blink/renderer/core/css/media_values_initial_viewport.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
 #include "third_party/blink/renderer/core/css/parser/media_query_parser.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -474,20 +473,6 @@
                   media_query_evaluator);
 }
 
-TEST(MediaQueryEvaluatorTest, InitialViewport) {
-  auto page_holder = std::make_unique<DummyPageHolder>(IntSize(500, 500));
-  page_holder->GetFrameView().SetMediaType(media_type_names::kScreen);
-  page_holder->GetFrameView().SetLayoutSizeFixedToFrameSize(false);
-  page_holder->GetFrameView().SetInitialViewportSize(IntSize(500, 500));
-  page_holder->GetFrameView().SetLayoutSize(IntSize(800, 800));
-  page_holder->GetFrameView().SetFrameRect(IntRect(0, 0, 800, 800));
-
-  MediaQueryEvaluator media_query_evaluator(
-      MakeGarbageCollected<MediaValuesInitialViewport>(
-          page_holder->GetFrame()));
-  TestMQEvaluator(g_viewport_test_cases, media_query_evaluator);
-}
-
 TEST(MediaQueryEvaluatorTest, DynamicImmersive) {
   auto page_holder = std::make_unique<DummyPageHolder>(IntSize(500, 500));
   page_holder->GetFrameView().SetMediaType(media_type_names::kScreen);
diff --git a/third_party/blink/renderer/core/css/media_values_initial_viewport.cc b/third_party/blink/renderer/core/css/media_values_initial_viewport.cc
deleted file mode 100644
index e81c5cc7..0000000
--- a/third_party/blink/renderer/core/css/media_values_initial_viewport.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/css/media_values_initial_viewport.h"
-
-#include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/frame/local_frame_view.h"
-
-namespace blink {
-
-MediaValuesInitialViewport::MediaValuesInitialViewport(LocalFrame& frame)
-    : MediaValuesDynamic(&frame) {}
-
-double MediaValuesInitialViewport::ViewportWidth() const {
-  DCHECK(frame_->View());
-  return frame_->View()->InitialViewportWidth();
-}
-
-double MediaValuesInitialViewport::ViewportHeight() const {
-  DCHECK(frame_->View());
-  return frame_->View()->InitialViewportHeight();
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/css/media_values_initial_viewport.h b/third_party/blink/renderer/core/css/media_values_initial_viewport.h
deleted file mode 100644
index 3aed1d5..0000000
--- a/third_party/blink/renderer/core/css/media_values_initial_viewport.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_INITIAL_VIEWPORT_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_INITIAL_VIEWPORT_H_
-
-#include "third_party/blink/renderer/core/css/media_values_dynamic.h"
-
-namespace blink {
-
-class CORE_EXPORT MediaValuesInitialViewport final : public MediaValuesDynamic {
- public:
-  explicit MediaValuesInitialViewport(LocalFrame&);
-
-  double ViewportWidth() const override;
-  double ViewportHeight() const override;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_INITIAL_VIEWPORT_H_
diff --git a/third_party/blink/renderer/core/css/media_values_initial_viewport_test.cc b/third_party/blink/renderer/core/css/media_values_initial_viewport_test.cc
deleted file mode 100644
index 6b68f43..0000000
--- a/third_party/blink/renderer/core/css/media_values_initial_viewport_test.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/core/css/media_values_initial_viewport.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/core/frame/local_frame_view.h"
-#include "third_party/blink/renderer/core/testing/page_test_base.h"
-
-namespace blink {
-
-class MediaValuesInitialViewportTest : public PageTestBase {
- private:
-  void SetUp() override {
-    PageTestBase::SetUp(IntSize(320, 480));
-    GetDocument().View()->SetInitialViewportSize(IntSize(320, 480));
-  }
-};
-
-TEST_F(MediaValuesInitialViewportTest, InitialViewportSize) {
-  LocalFrameView* view = GetDocument().View();
-  ASSERT_TRUE(view);
-  EXPECT_TRUE(view->LayoutSizeFixedToFrameSize());
-
-  auto* media_values = MakeGarbageCollected<MediaValuesInitialViewport>(
-      *GetDocument().GetFrame());
-  EXPECT_EQ(320, media_values->ViewportWidth());
-  EXPECT_EQ(480, media_values->ViewportHeight());
-
-  view->SetLayoutSizeFixedToFrameSize(false);
-  view->SetLayoutSize(IntSize(800, 600));
-  EXPECT_EQ(320, media_values->ViewportWidth());
-  EXPECT_EQ(480, media_values->ViewportHeight());
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.cc b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
index 2587550..dd8e486 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_context.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
@@ -53,27 +53,25 @@
   is_ad_related_ = other->is_ad_related_;
 }
 
-CSSParserContext::CSSParserContext(
-    const CSSParserContext* other,
-    const KURL& base_url,
-    bool origin_clean,
-    network::mojom::ReferrerPolicy referrer_policy,
-    const WTF::TextEncoding& charset,
-    const Document* use_counter_document)
-    : CSSParserContext(
-          base_url,
-          origin_clean,
-          charset,
-          other->mode_,
-          other->match_mode_,
-          other->profile_,
-          Referrer(base_url.StrippedForUseAsReferrer(), referrer_policy),
-          other->is_html_document_,
-          other->use_legacy_background_size_shorthand_behavior_,
-          other->secure_context_mode_,
-          other->world_,
-          use_counter_document,
-          other->resource_fetch_restriction_) {
+CSSParserContext::CSSParserContext(const CSSParserContext* other,
+                                   const KURL& base_url,
+                                   bool origin_clean,
+                                   const Referrer& referrer,
+                                   const WTF::TextEncoding& charset,
+                                   const Document* use_counter_document)
+    : CSSParserContext(base_url,
+                       origin_clean,
+                       charset,
+                       other->mode_,
+                       other->match_mode_,
+                       other->profile_,
+                       referrer,
+                       other->is_html_document_,
+                       other->use_legacy_background_size_shorthand_behavior_,
+                       other->secure_context_mode_,
+                       other->world_,
+                       use_counter_document,
+                       other->resource_fetch_restriction_) {
   is_ad_related_ = other->is_ad_related_;
 }
 
@@ -96,18 +94,23 @@
                        ResourceFetchRestriction::kNone) {}
 
 CSSParserContext::CSSParserContext(const Document& document)
-    : CSSParserContext(document,
-                       document.BaseURL(),
-                       true /* origin_clean */,
-                       document.GetReferrerPolicy(),
-                       WTF::TextEncoding(),
-                       kLiveProfile) {}
+    : CSSParserContext(
+          document,
+          document.BaseURL(),
+          true /* origin_clean */,
+          Referrer(document.GetExecutionContext()
+                       ? document.GetExecutionContext()->OutgoingReferrer()
+                       : String(),  // GetExecutionContext() only returns null
+                                    // in tests.
+                   document.GetReferrerPolicy()),
+          WTF::TextEncoding(),
+          kLiveProfile) {}
 
 CSSParserContext::CSSParserContext(
     const Document& document,
     const KURL& base_url_override,
     bool origin_clean,
-    network::mojom::ReferrerPolicy referrer_policy_override,
+    const Referrer& referrer,
     const WTF::TextEncoding& charset,
     SelectorProfile profile,
     enum ResourceFetchRestriction resource_fetch_restriction)
@@ -122,8 +125,7 @@
                      : kHTMLStandardMode)
               : document.InQuirksMode() ? kHTMLQuirksMode : kHTMLStandardMode,
           profile,
-          Referrer(base_url_override.StrippedForUseAsReferrer(),
-                   referrer_policy_override),
+          referrer,
           IsA<HTMLDocument>(document),
           document.GetSettings()
               ? document.GetSettings()
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.h b/third_party/blink/renderer/core/css/parser/css_parser_context.h
index 3af0d8fa..9b654de 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_context.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_context.h
@@ -42,10 +42,15 @@
   explicit CSSParserContext(const CSSParserContext* other,
                             const Document* use_counter_document = nullptr);
 
+  // Creates a context with most of its constructor attributes provided by
+  // copying from |other|, except that the remaining constructor arguments take
+  // precedence over the corresponding characteristics of |other|. This is
+  // useful for initializing @imported sheets' contexts, which inherit most of
+  // their characteristics from their parents.
   CSSParserContext(const CSSParserContext* other,
                    const KURL& base_url_override,
                    bool origin_clean,
-                   network::mojom::ReferrerPolicy referrer_policy_override,
+                   const Referrer& referrer,
                    const WTF::TextEncoding& charset_override,
                    const Document* use_counter_document);
   CSSParserContext(CSSParserMode,
@@ -56,7 +61,7 @@
   CSSParserContext(const Document&,
                    const KURL& base_url_override,
                    bool origin_clean,
-                   network::mojom::ReferrerPolicy referrer_policy_override,
+                   const Referrer& referrer,
                    const WTF::TextEncoding& charset = WTF::TextEncoding(),
                    SelectorProfile = kLiveProfile,
                    ResourceFetchRestriction resource_fetch_restriction =
@@ -71,7 +76,7 @@
                    CSSParserMode,
                    CSSParserMode match_mode,
                    SelectorProfile,
-                   const Referrer&,
+                   const Referrer& referrer,
                    bool is_html_document,
                    bool use_legacy_background_size_shorthand_behavior,
                    SecureContextMode,
diff --git a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.cc b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.cc
index 1501af0..59e9698 100644
--- a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.cc
@@ -36,7 +36,6 @@
 #include "third_party/blink/renderer/core/css/css_style_sheet.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
 #include "third_party/blink/renderer/core/css/document_style_sheet_collection.h"
-#include "third_party/blink/renderer/core/css/media_values_initial_viewport.h"
 #include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
 #include "third_party/blink/renderer/core/css/style_rule.h"
 #include "third_party/blink/renderer/core/css/style_rule_import.h"
@@ -50,7 +49,6 @@
 #include "third_party/blink/renderer/core/frame/viewport_data.h"
 #include "third_party/blink/renderer/core/page/chrome_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
-#include "third_party/blink/renderer/core/page/viewport_description.h"
 
 namespace blink {
 
@@ -67,8 +65,6 @@
 ViewportStyleResolver::ViewportStyleResolver(Document& document)
     : document_(document) {
   DCHECK(document.GetFrame());
-  initial_viewport_medium_ = MakeGarbageCollected<MediaQueryEvaluator>(
-      MakeGarbageCollected<MediaValuesInitialViewport>(*document.GetFrame()));
 }
 
 void ViewportStyleResolver::Reset() {
@@ -329,7 +325,6 @@
 void ViewportStyleResolver::Trace(Visitor* visitor) const {
   visitor->Trace(document_);
   visitor->Trace(property_set_);
-  visitor->Trace(initial_viewport_medium_);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h
index f3a84a9..d12a806 100644
--- a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h
+++ b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h
@@ -75,7 +75,6 @@
 
   Member<Document> document_;
   Member<MutableCSSPropertyValueSet> property_set_;
-  Member<MediaQueryEvaluator> initial_viewport_medium_;
   scoped_refptr<ComputedStyle> initial_style_;
   bool has_viewport_units_ = false;
   UpdateType needs_update_ = kCollectRules;
diff --git a/third_party/blink/renderer/core/css/selector_query.cc b/third_party/blink/renderer/core/css/selector_query.cc
index c7d6966..2b29519e 100644
--- a/third_party/blink/renderer/core/css/selector_query.cc
+++ b/third_party/blink/renderer/core/css/selector_query.cc
@@ -466,9 +466,8 @@
 
   CSSSelectorList selector_list = CSSParser::ParseSelector(
       MakeGarbageCollected<CSSParserContext>(
-          document, document.BaseURL(), true /* origin_clean */,
-          document.GetReferrerPolicy(), WTF::TextEncoding(),
-          CSSParserContext::kSnapshotProfile),
+          document, document.BaseURL(), true /* origin_clean */, Referrer(),
+          WTF::TextEncoding(), CSSParserContext::kSnapshotProfile),
       nullptr, selectors);
 
   if (!selector_list.First()) {
diff --git a/third_party/blink/renderer/core/css/selector_query_test.cc b/third_party/blink/renderer/core/css/selector_query_test.cc
index 1b17ed9..54234b9 100644
--- a/third_party/blink/renderer/core/css/selector_query_test.cc
+++ b/third_party/blink/renderer/core/css/selector_query_test.cc
@@ -72,9 +72,8 @@
 
   CSSSelectorList selector_list = CSSParser::ParseSelector(
       MakeGarbageCollected<CSSParserContext>(
-          *document, NullURL(), true /* origin_clean */,
-          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
-          CSSParserContext::kSnapshotProfile),
+          *document, NullURL(), true /* origin_clean */, Referrer(),
+          WTF::TextEncoding(), CSSParserContext::kSnapshotProfile),
       nullptr, "span::before");
   std::unique_ptr<SelectorQuery> query =
       SelectorQuery::Adopt(std::move(selector_list));
@@ -83,9 +82,8 @@
 
   selector_list = CSSParser::ParseSelector(
       MakeGarbageCollected<CSSParserContext>(
-          *document, NullURL(), true /* origin_clean */,
-          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
-          CSSParserContext::kSnapshotProfile),
+          *document, NullURL(), true /* origin_clean */, Referrer(),
+          WTF::TextEncoding(), CSSParserContext::kSnapshotProfile),
       nullptr, "span");
   query = SelectorQuery::Adopt(std::move(selector_list));
   elm = query->QueryFirst(*document);
@@ -103,9 +101,8 @@
 
   CSSSelectorList selector_list = CSSParser::ParseSelector(
       MakeGarbageCollected<CSSParserContext>(
-          *document, NullURL(), true /* origin_clean */,
-          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
-          CSSParserContext::kSnapshotProfile),
+          *document, NullURL(), true /* origin_clean */, Referrer(),
+          WTF::TextEncoding(), CSSParserContext::kSnapshotProfile),
       nullptr, "p:last-of-type");
   std::unique_ptr<SelectorQuery> query =
       SelectorQuery::Adopt(std::move(selector_list));
diff --git a/third_party/blink/renderer/core/css/style_rule_import.cc b/third_party/blink/renderer/core/css/style_rule_import.cc
index c07f3449..3b94a9f 100644
--- a/third_party/blink/renderer/core/css/style_rule_import.cc
+++ b/third_party/blink/renderer/core/css/style_rule_import.cc
@@ -83,8 +83,9 @@
   CSSParserContext* context = MakeGarbageCollected<CSSParserContext>(
       parent_context, cached_style_sheet->GetResponse().ResponseUrl(),
       cached_style_sheet->GetResponse().IsCorsSameOrigin(),
-      cached_style_sheet->GetReferrerPolicy(), cached_style_sheet->Encoding(),
-      document);
+      Referrer(cached_style_sheet->GetResponse().ResponseUrl(),
+               cached_style_sheet->GetReferrerPolicy()),
+      cached_style_sheet->Encoding(), document);
   if (cached_style_sheet->GetResourceRequest().IsAdResource())
     context->SetIsAdRelated();
 
diff --git a/third_party/blink/renderer/core/dom/processing_instruction.cc b/third_party/blink/renderer/core/dom/processing_instruction.cc
index d779cd7e..63f6777b 100644
--- a/third_party/blink/renderer/core/dom/processing_instruction.cc
+++ b/third_party/blink/renderer/core/dom/processing_instruction.cc
@@ -206,7 +206,9 @@
     auto* parser_context = MakeGarbageCollected<CSSParserContext>(
         GetDocument(), style_resource->GetResponse().ResponseUrl(),
         style_resource->GetResponse().IsCorsSameOrigin(),
-        style_resource->GetReferrerPolicy(), style_resource->Encoding());
+        Referrer(style_resource->GetResponse().ResponseUrl(),
+                 style_resource->GetReferrerPolicy()),
+        style_resource->Encoding());
     if (style_resource->GetResourceRequest().IsAdResource())
       parser_context->SetIsAdRelated();
 
diff --git a/third_party/blink/renderer/core/editing/visible_position.cc b/third_party/blink/renderer/core/editing/visible_position.cc
index b4943579..8d5860f 100644
--- a/third_party/blink/renderer/core/editing/visible_position.cc
+++ b/third_party/blink/renderer/core/editing/visible_position.cc
@@ -82,55 +82,36 @@
   DocumentLifecycle::DisallowTransitionScope disallow_transition(
       document.Lifecycle());
 
-  // Find the canonical position with a backward preference.
-  const PositionWithAffinityTemplate<Strategy> backward_position =
-      SnapBackward(position_with_affinity.GetPosition());
-  if (backward_position.IsNull())
+  const PositionTemplate<Strategy> deep_position =
+      CanonicalPositionOf(position_with_affinity.GetPosition());
+  if (deep_position.IsNull())
     return VisiblePositionTemplate<Strategy>();
-  const PositionWithAffinityTemplate<Strategy> backward_position_upstream(
-      backward_position.GetPosition(), TextAffinity::kUpstream);
-  const PositionWithAffinityTemplate<Strategy> backward_position_downstream(
-      backward_position.GetPosition(), TextAffinity::kDownstream);
+  const PositionWithAffinityTemplate<Strategy> downstream_position(
+      deep_position);
+  if (position_with_affinity.Affinity() == TextAffinity::kDownstream)
+    return VisiblePositionTemplate<Strategy>(downstream_position);
 
   if (RuntimeEnabledFeatures::BidiCaretAffinityEnabled() &&
-      NGInlineFormattingContextOf(backward_position.GetPosition())) {
-    if (position_with_affinity.Affinity() == TextAffinity::kDownstream)
-      return VisiblePositionTemplate<Strategy>(backward_position_downstream);
+      NGInlineFormattingContextOf(deep_position)) {
     // When not at a line wrap or bidi boundary, make sure to end up with
     // |TextAffinity::Downstream| affinity.
-    if (AbsoluteCaretBoundsOf(backward_position_upstream) ==
-        AbsoluteCaretBoundsOf(backward_position_downstream)) {
-      return VisiblePositionTemplate<Strategy>(backward_position_downstream);
+    const PositionWithAffinityTemplate<Strategy> upstream_position(
+        deep_position, TextAffinity::kUpstream);
+
+    if (AbsoluteCaretBoundsOf(downstream_position) !=
+        AbsoluteCaretBoundsOf(upstream_position)) {
+      return VisiblePositionTemplate<Strategy>(upstream_position);
     }
-    return VisiblePositionTemplate<Strategy>(backward_position_upstream);
+    return VisiblePositionTemplate<Strategy>(downstream_position);
   }
 
-  // Find the canonical position with a forward preference. If backward_position
-  // has a downstream affinity, it means that we couldn't find any backward
-  // candidate, so they must be equal and we can avoid calling SnapForward().
-  // The forward canonical position can't be null because we already checked
-  // that the backward one is not null.
-  const PositionWithAffinityTemplate<Strategy> forward_position =
-      backward_position.Affinity() == TextAffinity::kDownstream
-          ? backward_position
-          : SnapForward(position_with_affinity.GetPosition());
-  DCHECK(forward_position.IsNotNull());
-
-  // Fast path to avoid slow InSameLine() below in common cases.
-  if (position_with_affinity.Affinity() == TextAffinity::kDownstream &&
-      backward_position_downstream == forward_position) {
-    return VisiblePositionTemplate<Strategy>(backward_position_downstream);
-  }
-
-  // When not at a line wrap, make sure to end up with the backward canonical
-  // position with |TextAffinity::Downstream| affinity.
-  if (InSameLine(backward_position_upstream, forward_position))
-    return VisiblePositionTemplate<Strategy>(backward_position_downstream);
-  if (position_with_affinity.Affinity() == TextAffinity::kUpstream)
-    return VisiblePositionTemplate<Strategy>(backward_position_upstream);
-  if (StartOfLine(forward_position).IsNull())
-    return VisiblePositionTemplate<Strategy>(backward_position_downstream);
-  return VisiblePositionTemplate<Strategy>(forward_position);
+  // When not at a line wrap, make sure to end up with
+  // |TextAffinity::Downstream| affinity.
+  const PositionWithAffinityTemplate<Strategy> upstream_position(
+      deep_position, TextAffinity::kUpstream);
+  if (InSameLine(downstream_position, upstream_position))
+    return VisiblePositionTemplate<Strategy>(downstream_position);
+  return VisiblePositionTemplate<Strategy>(upstream_position);
 }
 
 template <typename Strategy>
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index b11ef956..8c0c8ab 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -513,6 +513,7 @@
   visitor->Trace(text_fragment_selector_generator_);
   visitor->Trace(saved_scroll_offsets_);
   visitor->Trace(background_color_paint_image_generator_);
+  visitor->Trace(window_controls_overlay_rect_);
   Frame::Trace(visitor);
   Supplementable<LocalFrame>::Trace(visitor);
 }
@@ -2757,6 +2758,14 @@
                                                       animate);
 }
 
+void LocalFrame::UpdateWindowControlsOverlay(
+    const gfx::Rect& window_controls_overlay_rect) {
+  const auto& rect = window_controls_overlay_rect;
+  window_controls_overlay_rect_ =
+      DOMRect::Create(rect.x(), rect.y(), rect.width(), rect.height());
+  is_window_controls_overlay_visible_ = !rect.IsEmpty();
+}
+
 void LocalFrame::RequestFullscreenVideoElement() {
   // Find the first video element of the frame.
   for (auto* child = GetDocument()->documentElement(); child;
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
index 4a77518..cbb67b1 100644
--- a/third_party/blink/renderer/core/frame/local_frame.h
+++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -65,6 +65,7 @@
 #include "third_party/blink/renderer/core/frame/frame_types.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/policy_container.h"
+#include "third_party/blink/renderer/core/geometry/dom_rect.h"
 #include "third_party/blink/renderer/core/loader/frame_loader.h"
 #include "third_party/blink/renderer/platform/graphics/touch_action.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
@@ -698,6 +699,8 @@
   void UpdateBrowserControlsState(cc::BrowserControlsState constraints,
                                   cc::BrowserControlsState current,
                                   bool animate) override;
+  void UpdateWindowControlsOverlay(
+      const gfx::Rect& window_controls_overlay_rect) override;
 
   // mojom::FullscreenVideoElementHandler implementation:
   void RequestFullscreenVideoElement() final;
@@ -736,6 +739,16 @@
   WebURLLoader::DeferType GetLoadDeferType();
   bool IsLoadDeferred();
 
+  // For PWAs with display_overrides, these getters are information about the
+  // titlebar bounds sent over from the browser via UpdateWindowControlsOverlay
+  // in LocalMainFrame that are needed to persist the lifetime of the frame.
+  bool IsWindowControlsOverlayVisible() const {
+    return is_window_controls_overlay_visible_;
+  }
+  DOMRect* GetWindowControlsOverlayRect() const {
+    return window_controls_overlay_rect_;
+  }
+
  private:
   friend class FrameNavigationDisabler;
   FRIEND_TEST_ALL_PREFIXES(LocalFrameTest, CharacterIndexAtPointWithPinchZoom);
@@ -970,6 +983,9 @@
   TransientAllowFullscreen transient_allow_fullscreen_;
 
   std::unique_ptr<PolicyContainer> policy_container_;
+
+  bool is_window_controls_overlay_visible_ = false;
+  Member<DOMRect> window_controls_overlay_rect_ = DOMRect::Create(0, 0, 0, 0);
 };
 
 inline FrameLoader& LocalFrame::Loader() const {
diff --git a/third_party/blink/renderer/core/frame/remote_frame.cc b/third_party/blink/renderer/core/frame/remote_frame.cc
index e2ef984..1daf044 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.cc
+++ b/third_party/blink/renderer/core/frame/remote_frame.cc
@@ -143,6 +143,11 @@
   DCHECK(!view_);
 }
 
+void RemoteFrame::DetachAndDispose() {
+  DCHECK(!IsMainFrame());
+  Detach(FrameDetachType::kRemove);
+}
+
 void RemoteFrame::Trace(Visitor* visitor) const {
   visitor->Trace(view_);
   visitor->Trace(security_context_);
diff --git a/third_party/blink/renderer/core/frame/remote_frame.h b/third_party/blink/renderer/core/frame/remote_frame.h
index 9147a3f..6b9b569 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.h
+++ b/third_party/blink/renderer/core/frame/remote_frame.h
@@ -167,6 +167,7 @@
   void DidUpdateFramePolicy(const FramePolicy& frame_policy) override;
   void UpdateOpener(const base::Optional<base::UnguessableToken>&
                         opener_frame_token) override;
+  void DetachAndDispose() override;
 
   // Called only when this frame has a local frame owner.
   IntSize GetMainFrameViewportSize() const override;
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
index a9b65a4..31c740e 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -2119,22 +2119,28 @@
   // This class should be called at most once per commit.
   WebPerformance perf = LocalRootImpl()->Performance();
   auto metrics = std::make_unique<cc::WebVitalMetrics>();
-  if (perf.FirstInputDelay().has_value())
-    metrics->first_input_delay = *perf.FirstInputDelay();
+  if (perf.FirstInputDelay().has_value()) {
+    metrics->first_input_delay = perf.FirstInputDelay().value();
+    metrics->has_fid = true;
+  }
 
   base::TimeTicks start = perf.NavigationStartAsMonotonicTime();
   base::TimeTicks largest_contentful_paint =
       perf.LargestContentfulPaintAsMonotonicTime();
-  if (largest_contentful_paint >= start)
+  if (largest_contentful_paint >= start) {
     metrics->largest_contentful_paint = largest_contentful_paint - start;
+    metrics->has_lcp = true;
+  }
 
   double layout_shift = LocalRootImpl()
                             ->GetFrame()
                             ->View()
                             ->GetLayoutShiftTracker()
                             .WeightedScore();
-  if (layout_shift > 0.f)
+  if (layout_shift > 0.f) {
     metrics->layout_shift = layout_shift;
+    metrics->has_cls = true;
+  }
 
   if (!metrics->HasValue())
     return nullptr;
diff --git a/third_party/blink/renderer/core/frame/window_controls_overlay.cc b/third_party/blink/renderer/core/frame/window_controls_overlay.cc
index 90e16a0..21618ae 100644
--- a/third_party/blink/renderer/core/frame/window_controls_overlay.cc
+++ b/third_party/blink/renderer/core/frame/window_controls_overlay.cc
@@ -15,15 +15,20 @@
 const char WindowControlsOverlay::kSupplementName[] = "WindowControlsOverlay";
 
 // static
-WindowControlsOverlay* WindowControlsOverlay::windowControlsOverlay(
-    Navigator& navigator) {
-  auto* supplement =
+WindowControlsOverlay& WindowControlsOverlay::From(Navigator& navigator) {
+  WindowControlsOverlay* supplement =
       Supplement<Navigator>::From<WindowControlsOverlay>(navigator);
   if (!supplement) {
     supplement = MakeGarbageCollected<WindowControlsOverlay>(navigator);
     ProvideTo(navigator, supplement);
   }
-  return supplement;
+  return *supplement;
+}
+
+// static
+WindowControlsOverlay* WindowControlsOverlay::windowControlsOverlay(
+    Navigator& navigator) {
+  return &From(navigator);
 }
 
 WindowControlsOverlay::WindowControlsOverlay(Navigator& navigator)
@@ -32,19 +37,23 @@
 WindowControlsOverlay::~WindowControlsOverlay() = default;
 
 bool WindowControlsOverlay::visible() const {
-  if (!GetSupplementable()->DomWindow()->GetFrame())
+  if (!GetSupplementable()->DomWindow())
     return false;
-  // TODO(crbug.com/937121): Replace the hardcoded value in the next javascript
-  // API CL.
-  return false;
+
+  return GetSupplementable()
+      ->DomWindow()
+      ->GetFrame()
+      ->IsWindowControlsOverlayVisible();
 }
 
 DOMRect* WindowControlsOverlay::getBoundingClientRect() const {
-  if (!GetSupplementable()->DomWindow()->GetFrame())
+  if (!GetSupplementable()->DomWindow())
     return DOMRect::Create(0, 0, 0, 0);
-  // TODO(crbug.com/937121): Replace the hardcoded value in the next javascript
-  // API CL.
-  return DOMRect::Create(0, 0, 0, 0);
+
+  return GetSupplementable()
+      ->DomWindow()
+      ->GetFrame()
+      ->GetWindowControlsOverlayRect();
 }
 
 void WindowControlsOverlay::Trace(blink::Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/frame/window_controls_overlay.h b/third_party/blink/renderer/core/frame/window_controls_overlay.h
index f9f5435..16a3731 100644
--- a/third_party/blink/renderer/core/frame/window_controls_overlay.h
+++ b/third_party/blink/renderer/core/frame/window_controls_overlay.h
@@ -6,13 +6,13 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_
 
 #include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/geometry/dom_rect.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/supplementable.h"
 
 namespace blink {
 
-class DOMRect;
 class Navigator;
 
 class CORE_EXPORT WindowControlsOverlay final : public ScriptWrappable,
@@ -24,6 +24,8 @@
   // Web Exposed as navigator.windowControlsOverlay
   static WindowControlsOverlay* windowControlsOverlay(Navigator& navigator);
 
+  static WindowControlsOverlay& From(Navigator& navigator);
+
   explicit WindowControlsOverlay(Navigator& navigator);
   WindowControlsOverlay(const WindowControlsOverlay&) = delete;
   ~WindowControlsOverlay() override;
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index 06cda47..d5ef5c36 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -247,6 +247,7 @@
       UpdateRequiredPolicy();
     }
   } else if (name == html_names::kTrusttokenAttr) {
+    UseCounter::Count(GetDocument(), WebFeature::kTrustTokenIframe);
     trust_token_ = value;
   } else {
     // Websites picked up a Chromium article that used this non-specified
diff --git a/third_party/blink/renderer/core/html/link_style.cc b/third_party/blink/renderer/core/html/link_style.cc
index 2ee2492..baa26cde9 100644
--- a/third_party/blink/renderer/core/html/link_style.cc
+++ b/third_party/blink/renderer/core/html/link_style.cc
@@ -88,7 +88,9 @@
   auto* parser_context = MakeGarbageCollected<CSSParserContext>(
       GetDocument(), cached_style_sheet->GetResponse().ResponseUrl(),
       cached_style_sheet->GetResponse().IsCorsSameOrigin(),
-      cached_style_sheet->GetReferrerPolicy(), cached_style_sheet->Encoding());
+      Referrer(cached_style_sheet->GetResponse().ResponseUrl(),
+               cached_style_sheet->GetReferrerPolicy()),
+      cached_style_sheet->Encoding());
   if (cached_style_sheet->GetResourceRequest().IsAdResource()) {
     parser_context->SetIsAdRelated();
   }
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
index 05bf030..7cde9098 100644
--- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc
+++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -1229,7 +1229,7 @@
 
   const SegmentedString source(input_source);
 
-  if (!preload_scanner_ && preloader_ && GetDocument()->Url().IsValid() &&
+  if (!preload_scanner_ && GetDocument()->Url().IsValid() &&
       (!task_runner_state_->IsSynchronous() ||
        GetDocument()->IsPrefetchOnly() || IsPaused())) {
     // If we're operating with synchronous, budgeted foreground HTML parsing
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
index 727caa1..351917d 100644
--- a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
+++ b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.cc
@@ -244,9 +244,8 @@
 VTTParser::ParseState VTTParser::CollectStyleSheet(const String& line) {
   if (line.IsEmpty() || line.Contains("-->")) {
     auto* parser_context = MakeGarbageCollected<CSSParserContext>(
-        *document_, NullURL(), true /* origin_clean */,
-        document_->GetReferrerPolicy(), UTF8Encoding(),
-        CSSParserContext::kLiveProfile,
+        *document_, NullURL(), true /* origin_clean */, Referrer(),
+        UTF8Encoding(), CSSParserContext::kLiveProfile,
         ResourceFetchRestriction::kOnlyDataUrls);
     auto* style_sheet_contents =
         MakeGarbageCollected<StyleSheetContents>(parser_context);
diff --git a/third_party/blink/renderer/core/inspector/inspector_session_state.cc b/third_party/blink/renderer/core/inspector/inspector_session_state.cc
index b1e28c7..c7b3803a 100644
--- a/third_party/blink/renderer/core/inspector/inspector_session_state.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_session_state.cc
@@ -128,7 +128,7 @@
 bool InspectorAgentState::Deserialize(span<uint8_t> in, WTF::String* v) {
   CBORTokenizer tokenizer(in);
   if (tokenizer.TokenTag() == CBORTokenTag::STRING8) {
-    *v = WTF::String(
+    *v = WTF::String::FromUTF8(
         reinterpret_cast<const char*>(tokenizer.GetString8().data()),
         static_cast<size_t>(tokenizer.GetString8().size()));
     return true;
diff --git a/third_party/blink/renderer/core/inspector/inspector_session_state_test.cc b/third_party/blink/renderer/core/inspector/inspector_session_state_test.cc
index 9b632b8..99dccbf 100644
--- a/third_party/blink/renderer/core/inspector/inspector_session_state_test.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_session_state_test.cc
@@ -82,10 +82,14 @@
     simple_agent.counter_.Set(311);
     simple_agent.bytes_.Set({0xde, 0xad, 0xbe, 0xef});
 
+    // Test that Latin1 is handled properly
+    simple_agent.message_.Set("\xC7 cedilla");
+
     EXPECT_EQ(true, simple_agent.enabled_.Get());
     EXPECT_EQ(11.0, simple_agent.field1_.Get());
     EXPECT_EQ(42.0, simple_agent.multiplier_.Get());
     EXPECT_EQ(311, simple_agent.counter_.Get());
+    EXPECT_EQ("\xC7 cedilla", simple_agent.message_.Get());
     EXPECT_THAT(simple_agent.bytes_.Get(), ElementsAre(0xde, 0xad, 0xbe, 0xef));
 
     // Now send the updates back to the browser session.
@@ -101,6 +105,7 @@
     EXPECT_EQ(11.0, simple_agent.field1_.Get());
     EXPECT_EQ(42.0, simple_agent.multiplier_.Get());
     EXPECT_EQ(311, simple_agent.counter_.Get());
+    EXPECT_EQ("\xC7 cedilla", simple_agent.message_.Get());
     EXPECT_THAT(simple_agent.bytes_.Get(), ElementsAre(0xde, 0xad, 0xbe, 0xef));
 
     simple_agent.enabled_.Set(false);
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
index 3e13652..8e47f6a 100644
--- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
@@ -439,10 +439,11 @@
                                      clamped_intrinsic_block_border_box);
   }
 
+  MinMaxSizes inline_min_max = ComputeTransferredMinMaxInlineSizes(
+      aspect_ratio, used_min_max_block_sizes, border_padding,
+      EBoxSizing::kContentBox);
+
   if (intrinsic_inline) {
-    MinMaxSizes inline_min_max = ComputeTransferredMinMaxInlineSizes(
-        aspect_ratio, used_min_max_block_sizes, border_padding,
-        EBoxSizing::kContentBox);
     LayoutUnit intrinsic_inline_border_box =
         *intrinsic_inline + border_padding.InlineSum();
     return inline_min_max.ClampSizeToMinAndMax(intrinsic_inline_border_box);
@@ -456,7 +457,9 @@
   // https://drafts.csswg.org/css-sizing-3/#intrinsic-sizes
   DCHECK_NE(space.AvailableSize().inline_size, kIndefiniteSize);
   NGBoxStrut margins = ComputeMarginsForSelf(space, style);
-  return (space.AvailableSize().inline_size - margins.InlineSum())
+  return inline_min_max
+      .ClampSizeToMinAndMax(space.AvailableSize().inline_size -
+                            margins.InlineSum())
       .ClampNegativeToZero();
 }
 
@@ -488,9 +491,6 @@
   }
 
   if (inline_size_border_box) {
-    // Clamping block size to the transferred inline min/max sizes might be
-    // uninentionally unspecified. See
-    // https://github.com/w3c/csswg-drafts/issues/5583
     LayoutUnit clamped_intrinsic_inline_border_box =
         used_min_max_inline_sizes.ClampSizeToMinAndMax(*inline_size_border_box);
     return BlockSizeFromAspectRatio(border_padding, aspect_ratio,
@@ -498,18 +498,18 @@
                                     clamped_intrinsic_inline_border_box);
   }
 
+  MinMaxSizes transferred_block_min_max = {LayoutUnit(), LayoutUnit::Max()};
+  if (used_min_max_inline_sizes.min_size > LayoutUnit()) {
+    transferred_block_min_max.min_size = BlockSizeFromAspectRatio(
+        border_padding, aspect_ratio, EBoxSizing::kContentBox,
+        used_min_max_inline_sizes.min_size);
+  }
+  if (used_min_max_inline_sizes.max_size != LayoutUnit::Max()) {
+    transferred_block_min_max.max_size = BlockSizeFromAspectRatio(
+        border_padding, aspect_ratio, EBoxSizing::kContentBox,
+        used_min_max_inline_sizes.max_size);
+  }
   if (intrinsic_block) {
-    MinMaxSizes transferred_block_min_max = {LayoutUnit(), LayoutUnit::Max()};
-    if (used_min_max_inline_sizes.min_size > LayoutUnit()) {
-      transferred_block_min_max.min_size = BlockSizeFromAspectRatio(
-          border_padding, aspect_ratio, EBoxSizing::kContentBox,
-          used_min_max_inline_sizes.min_size);
-    }
-    if (used_min_max_inline_sizes.max_size != LayoutUnit::Max()) {
-      transferred_block_min_max.max_size = BlockSizeFromAspectRatio(
-          border_padding, aspect_ratio, EBoxSizing::kContentBox,
-          used_min_max_inline_sizes.max_size);
-    }
     // Minimum size wins over maximum size.
     transferred_block_min_max.max_size = std::max(
         transferred_block_min_max.max_size, transferred_block_min_max.min_size);
@@ -530,9 +530,10 @@
   LayoutUnit stretch_into_available_inline_size(
       (space.AvailableSize().inline_size - margins.InlineSum())
           .ClampNegativeToZero());
-  return BlockSizeFromAspectRatio(border_padding, aspect_ratio,
-                                  EBoxSizing::kContentBox,
-                                  stretch_into_available_inline_size);
+  return transferred_block_min_max.ClampSizeToMinAndMax(
+      BlockSizeFromAspectRatio(border_padding, aspect_ratio,
+                               EBoxSizing::kContentBox,
+                               stretch_into_available_inline_size));
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
index 05f56cf7..6da2c78 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
+++ b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
@@ -97,14 +97,11 @@
   // Only calculate the relevant animations. If we actually set the
   // animation value, we don't need to calculate what is beneath it
   // in the sandwich.
-  bool needs_underlying_value = true;
   auto* sandwich_start = active_.end();
   while (sandwich_start != active_.begin()) {
     --sandwich_start;
-    if ((*sandwich_start)->OverwritesUnderlyingAnimationValue()) {
-      needs_underlying_value = false;
+    if ((*sandwich_start)->OverwritesUnderlyingAnimationValue())
       break;
-    }
   }
 
   // For now we need an element to setup and apply an animation. Any animation
@@ -114,8 +111,7 @@
   // Only reset the animated type to the base value once for
   // the lowest priority animation that animates and
   // contributes to a particular element/attribute pair.
-  SMILAnimationValue animation_value =
-      animation->CreateAnimationValue(needs_underlying_value);
+  SMILAnimationValue animation_value = animation->CreateAnimationValue();
 
   for (auto* sandwich_it = sandwich_start; sandwich_it != active_.end();
        sandwich_it++) {
diff --git a/third_party/blink/renderer/core/svg/svg_animate_element.cc b/third_party/blink/renderer/core/svg/svg_animate_element.cc
index b123fce..62d3ae2 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_animate_element.cc
@@ -415,8 +415,7 @@
   return true;
 }
 
-SMILAnimationValue SVGAnimateElement::CreateAnimationValue(
-    bool needs_underlying_value) const {
+SMILAnimationValue SVGAnimateElement::CreateAnimationValue() const {
   DCHECK(targetElement());
   SMILAnimationValue animation_value;
   if (IsAnimatingSVGDom()) {
@@ -431,9 +430,7 @@
 
     // CSS properties animation code-path.
     String base_value =
-        needs_underlying_value
-            ? ComputeCSSPropertyValue(targetElement(), css_property_id_)
-            : g_empty_string;
+        ComputeCSSPropertyValue(targetElement(), css_property_id_);
     animation_value.property_value = CreatePropertyForCSSAnimation(base_value);
   }
   return animation_value;
diff --git a/third_party/blink/renderer/core/svg/svg_animate_element.h b/third_party/blink/renderer/core/svg/svg_animate_element.h
index af6440f0..e6d2695 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_element.h
+++ b/third_party/blink/renderer/core/svg/svg_animate_element.h
@@ -61,8 +61,7 @@
 
   bool HasValidAnimation() const override;
 
-  SMILAnimationValue CreateAnimationValue(
-      bool needs_underlying_value) const final;
+  SMILAnimationValue CreateAnimationValue() const final;
   void ClearAnimationValue() final;
 
   bool CalculateToAtEndOfDurationValue(
diff --git a/third_party/blink/renderer/core/svg/svg_animate_motion_element.cc b/third_party/blink/renderer/core/svg/svg_animate_motion_element.cc
index 47c7480..bb52b24 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_motion_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_animate_motion_element.cc
@@ -153,8 +153,7 @@
   });
 }
 
-SMILAnimationValue SVGAnimateMotionElement::CreateAnimationValue(
-    bool needs_underlying_value) const {
+SMILAnimationValue SVGAnimateMotionElement::CreateAnimationValue() const {
   DCHECK(targetElement());
   DCHECK(TargetCanHaveMotionTransform(*targetElement()));
   return SMILAnimationValue();
diff --git a/third_party/blink/renderer/core/svg/svg_animate_motion_element.h b/third_party/blink/renderer/core/svg/svg_animate_motion_element.h
index a08026c..f2aa208 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_motion_element.h
+++ b/third_party/blink/renderer/core/svg/svg_animate_motion_element.h
@@ -42,8 +42,7 @@
 
   void ParseAttribute(const AttributeModificationParams&) override;
 
-  SMILAnimationValue CreateAnimationValue(
-      bool needs_underlying_value) const override;
+  SMILAnimationValue CreateAnimationValue() const override;
   void ClearAnimationValue() override;
   bool CalculateToAtEndOfDurationValue(
       const String& to_at_end_of_duration_string) override;
diff --git a/third_party/blink/renderer/core/svg/svg_animation_element.h b/third_party/blink/renderer/core/svg/svg_animation_element.h
index 0b1659f..779b21a 100644
--- a/third_party/blink/renderer/core/svg/svg_animation_element.h
+++ b/third_party/blink/renderer/core/svg/svg_animation_element.h
@@ -72,8 +72,7 @@
   DEFINE_ATTRIBUTE_EVENT_LISTENER(end, kEndEvent)
   DEFINE_ATTRIBUTE_EVENT_LISTENER(repeat, kRepeatEvent)
 
-  virtual SMILAnimationValue CreateAnimationValue(
-      bool needs_underlying_value) const = 0;
+  virtual SMILAnimationValue CreateAnimationValue() const = 0;
   void ApplyAnimation(SMILAnimationValue&);
   virtual void ApplyResultsToTarget(const SMILAnimationValue&) = 0;
 
diff --git a/third_party/blink/renderer/modules/file_system_access/data_transfer_item_file_system_access.idl b/third_party/blink/renderer/modules/file_system_access/data_transfer_item_file_system_access.idl
index a34eae0..867af6c 100644
--- a/third_party/blink/renderer/modules/file_system_access/data_transfer_item_file_system_access.idl
+++ b/third_party/blink/renderer/modules/file_system_access/data_transfer_item_file_system_access.idl
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://wicg.github.io/file-system-access/#drag-and-drop
 [
     ImplementedAs=DataTransferItemFileSystemAccess,
     RuntimeEnabled=FileSystemAccess
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_create_writer_options.idl b/third_party/blink/renderer/modules/file_system_access/file_system_create_writable_options.idl
similarity index 83%
rename from third_party/blink/renderer/modules/file_system_access/file_system_create_writer_options.idl
rename to third_party/blink/renderer/modules/file_system_access/file_system_create_writable_options.idl
index 5e9d8a4..d3ab371 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_create_writer_options.idl
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_create_writable_options.idl
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://wicg.github.io/file-system-access/#dictdef-filesystemcreatewriteroptions
-dictionary FileSystemCreateWriterOptions {
+// https://wicg.github.io/file-system-access/#dictdef-filesystemcreatewritableoptions
+dictionary FileSystemCreateWritableOptions {
   boolean keepExistingData = false;
   [RuntimeEnabled=FileSystemAccessAPIExperimental] boolean autoClose = false;
 };
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_directory_iterator.idl b/third_party/blink/renderer/modules/file_system_access/file_system_directory_iterator.idl
index 77bca06..b9169b2 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_directory_iterator.idl
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_directory_iterator.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // Async iterator returned by FileSystemDirectoryHandle.getEntries().
-// https://github.com/WICG/writable-files/blob/master/EXPLAINER.md
+// https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable
 // https://www.ecma-international.org/ecma-262/9.0/index.html#sec-asynciterator-interface
 [
     LegacyNoInterfaceObject,
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.cc b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.cc
index 0f290539..0308f905 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.cc
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.cc
@@ -8,7 +8,7 @@
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_file_writer.mojom-blink.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_transfer_token.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writer_options.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_file_system_create_writable_options.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/fileapi/file.h"
 #include "third_party/blink/renderer/core/fileapi/file_error.h"
@@ -34,7 +34,7 @@
 
 ScriptPromise FileSystemFileHandle::createWritable(
     ScriptState* script_state,
-    const FileSystemCreateWriterOptions* options,
+    const FileSystemCreateWritableOptions* options,
     ExceptionState& exception_state) {
   if (!mojo_ptr_.is_bound()) {
     exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError, "");
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.h b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.h
index 02f5608..1c46d61 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.h
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.h
@@ -11,7 +11,7 @@
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
 
 namespace blink {
-class FileSystemCreateWriterOptions;
+class FileSystemCreateWritableOptions;
 
 class FileSystemFileHandle final : public FileSystemHandle {
   DEFINE_WRAPPERTYPEINFO();
@@ -25,7 +25,7 @@
   bool isFile() const override { return true; }
 
   ScriptPromise createWritable(ScriptState*,
-                               const FileSystemCreateWriterOptions* options,
+                               const FileSystemCreateWritableOptions* options,
                                ExceptionState&);
   ScriptPromise getFile(ScriptState*, ExceptionState&);
 
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.idl b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.idl
index 931ff2d..f8c4cf50 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.idl
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_file_handle.idl
@@ -9,7 +9,8 @@
     Serializable,
     RuntimeEnabled=FileSystemAccess
 ] interface FileSystemFileHandle : FileSystemHandle {
-    [CallWith=ScriptState, RaisesException] Promise<FileSystemWritableFileStream> createWritable(optional FileSystemCreateWriterOptions options = {});
+    [CallWith=ScriptState, RaisesException]
+    Promise<FileSystemWritableFileStream> createWritable(optional FileSystemCreateWritableOptions options = {});
 
     [CallWith=ScriptState, RaisesException] Promise<File> getFile();
 };
diff --git a/third_party/blink/renderer/modules/file_system_access/idls.gni b/third_party/blink/renderer/modules/file_system_access/idls.gni
index 56587022..2d4f323 100644
--- a/third_party/blink/renderer/modules/file_system_access/idls.gni
+++ b/third_party/blink/renderer/modules/file_system_access/idls.gni
@@ -14,7 +14,7 @@
   "directory_picker_options.idl",
   "file_picker_accept_type.idl",
   "file_picker_options.idl",
-  "file_system_create_writer_options.idl",
+  "file_system_create_writable_options.idl",
   "file_system_get_directory_options.idl",
   "file_system_get_file_options.idl",
   "file_system_handle_permission_descriptor.idl",
diff --git a/third_party/blink/renderer/modules/file_system_access/window_file_system_access.idl b/third_party/blink/renderer/modules/file_system_access/window_file_system_access.idl
index f416f361..5ea043ca 100644
--- a/third_party/blink/renderer/modules/file_system_access/window_file_system_access.idl
+++ b/third_party/blink/renderer/modules/file_system_access/window_file_system_access.idl
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://wicg.github.io/native-file-system/#native-filesystem
-// https://wicg.github.io/native-file-system/#api-getoriginprivatefilesystem
+// https://wicg.github.io/file-system-access/#local-filesystem
 [
     SecureContext,
     RuntimeEnabled=FileSystemAccess,
diff --git a/third_party/blink/renderer/platform/bindings/idl_member_installer.cc b/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
index 520ff5d..81dbc9c 100644
--- a/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
+++ b/third_party/blink/renderer/platform/bindings/idl_member_installer.cc
@@ -161,10 +161,10 @@
         V8PrivateProperty::GetCachedAccessor(isolate, v8_cached_accessor)
             .GetPrivate(),
         v8::Local<v8::Value>(), signature, length, v8_side_effect);
+    function_template->RemovePrototype();
   }
 
   function_template->SetClassName(name);
-  function_template->RemovePrototype();
   function_template->SetAcceptAnyReceiver(
       GetConfigCrossOriginCheck<kind>(config) ==
       IDLMemberInstaller::FlagCrossOriginCheck::kDoNotCheck);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 5b045a5..aeafd89b 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -882,13 +882,8 @@
       status: "stable",
     },
     {
-      // Also enabled when blink::features::kNativeFileSystemAPI is overridden
-      // on the command line (or via chrome://flags).
       name: "FileSystemAccess",
       status: {"Android": "test", "default": "stable"},
-      // TODO(mek): Remove origin trial integration.
-      origin_trial_feature_name: "NativeFileSystem2",
-      origin_trial_os: ["win", "mac", "linux", "chromeos"],
     },
     {
       // In-development features for the File System Access API.
@@ -1391,7 +1386,6 @@
     },
     {
       name: "OriginIsolationHeader",
-      origin_trial_feature_name: "OriginIsolationHeader",
       status: "experimental",
     },
     {
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
index 5a0d7c0..e876d05 100644
--- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
+++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
@@ -1409,7 +1409,7 @@
   while (!compositor_event_queue_->empty()) {
     std::unique_ptr<EventWithCallback> event_with_callback =
         scroll_predictor_->ResampleScrollEvents(compositor_event_queue_->Pop(),
-                                                args.frame_time);
+                                                args.frame_time, args.interval);
 
     DispatchSingleInputEvent(std::move(event_with_callback), args.frame_time);
   }
diff --git a/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc b/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
index 95e5f3f..9fa43f8 100644
--- a/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
+++ b/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
@@ -58,7 +58,8 @@
 
 std::unique_ptr<EventWithCallback> ScrollPredictor::ResampleScrollEvents(
     std::unique_ptr<EventWithCallback> event_with_callback,
-    base::TimeTicks frame_time) {
+    base::TimeTicks frame_time,
+    base::TimeDelta frame_interval) {
   if (!should_resample_scroll_events_)
     return event_with_callback;
 
@@ -79,7 +80,8 @@
       UpdatePrediction(coalesced_event.event_->Event(), frame_time);
 
     if (should_resample_scroll_events_) {
-      ResampleEvent(frame_time, event_with_callback->event_pointer(),
+      ResampleEvent(frame_time, frame_interval,
+                    event_with_callback->event_pointer(),
                     &event_with_callback->latency_info());
     }
 
@@ -128,6 +130,7 @@
 }
 
 void ScrollPredictor::ResampleEvent(base::TimeTicks frame_time,
+                                    base::TimeDelta frame_interval,
                                     WebInputEvent* event,
                                     ui::LatencyInfo* latency_info) {
   DCHECK(event->GetType() == WebInputEvent::Type::kGestureScrollUpdate);
@@ -151,7 +154,7 @@
   base::TimeTicks prediction_time =
       gesture_event->TimeStamp() + prediction_delta;
 
-  auto result = predictor_->GeneratePrediction(prediction_time);
+  auto result = predictor_->GeneratePrediction(prediction_time, frame_interval);
   if (result) {
     predicted_accumulated_delta = result->pos;
     gesture_event->SetTimeStamp(result->time_stamp);
diff --git a/third_party/blink/renderer/platform/widget/input/scroll_predictor.h b/third_party/blink/renderer/platform/widget/input/scroll_predictor.h
index aff434f..7957d77 100644
--- a/third_party/blink/renderer/platform/widget/input/scroll_predictor.h
+++ b/third_party/blink/renderer/platform/widget/input/scroll_predictor.h
@@ -37,7 +37,8 @@
   // event if enable_resampling is true.
   std::unique_ptr<EventWithCallback> ResampleScrollEvents(
       std::unique_ptr<EventWithCallback> event_with_callback,
-      base::TimeTicks frame_time);
+      base::TimeTicks frame_time,
+      base::TimeDelta frame_interval);
 
  private:
   friend class test::InputHandlerProxyEventQueueTest;
@@ -52,6 +53,7 @@
 
   // Apply resampled deltaX/deltaY to gesture events
   void ResampleEvent(base::TimeTicks frame_time,
+                     base::TimeDelta frame_interval,
                      WebInputEvent* event,
                      ui::LatencyInfo* latency_info);
 
diff --git a/third_party/blink/renderer/platform/widget/input/scroll_predictor_unittest.cc b/third_party/blink/renderer/platform/widget/input/scroll_predictor_unittest.cc
index 88725b7d..b34f9df 100644
--- a/third_party/blink/renderer/platform/widget/input/scroll_predictor_unittest.cc
+++ b/third_party/blink/renderer/platform/widget/input/scroll_predictor_unittest.cc
@@ -77,26 +77,32 @@
   }
 
   void HandleResampleScrollEvents(std::unique_ptr<WebInputEvent>& event,
-                                  double time_delta_in_milliseconds = 0) {
+                                  double time_delta_in_milliseconds = 0,
+                                  double display_refresh_rate = 30) {
     auto event_with_callback = std::make_unique<EventWithCallback>(
         std::make_unique<WebCoalescedInputEvent>(std::move(event),
                                                  ui::LatencyInfo()),
         base::TimeTicks(), base::NullCallback(), nullptr);
     event_with_callback->original_events() = std::move(original_events_);
 
+    base::TimeDelta frame_interval =
+        base::TimeDelta::FromSecondsD(1.0f / display_refresh_rate);
     event_with_callback = scroll_predictor_->ResampleScrollEvents(
         std::move(event_with_callback),
         WebInputEvent::GetStaticTimeStampForTests() +
-            base::TimeDelta::FromMillisecondsD(time_delta_in_milliseconds));
+            base::TimeDelta::FromMillisecondsD(time_delta_in_milliseconds),
+        frame_interval);
 
     event = event_with_callback->event().Clone();
   }
 
   std::unique_ptr<ui::InputPredictor::InputData> PredictionAvailable(
       double time_delta_in_milliseconds = 0) {
-    return scroll_predictor_->predictor_->GeneratePrediction(
+    base::TimeTicks frame_time =
         WebInputEvent::GetStaticTimeStampForTests() +
-        base::TimeDelta::FromMillisecondsD(time_delta_in_milliseconds));
+        base::TimeDelta::FromMillisecondsD(time_delta_in_milliseconds);
+    // Tests with 60Hz.
+    return scroll_predictor_->predictor_->GeneratePrediction(frame_time);
   }
 
   gfx::PointF GetLastAccumulatedDelta() {
@@ -168,6 +174,30 @@
     EXPECT_EQ(expected_type, scroll_predictor_->filter_->GetName());
   }
 
+  void InitLinearResamplingTest(bool use_frames_based_experimental_prediction) {
+    base::FieldTrialParams params;
+    params["filter"] = ::features::kPredictorNameLinearResampling;
+    base::test::ScopedFeatureList::FeatureAndParams prediction_params = {
+        features::kResamplingScrollEvents, params};
+
+    base::FieldTrialParams prediction_type_params;
+    prediction_type_params["mode"] =
+        use_frames_based_experimental_prediction
+            ? ::features::kPredictionTypeFramesBased
+            : ::features::kPredictionTypeTimeBased;
+    base::test::ScopedFeatureList::FeatureAndParams
+        experimental_prediction_params = {
+            ::features::kResamplingScrollEventsExperimentalPrediction,
+            prediction_type_params};
+
+    scoped_feature_list_.Reset();
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {prediction_params, experimental_prediction_params}, {});
+    scroll_predictor_ = std::make_unique<ScrollPredictor>();
+
+    VerifyPredictorType(::features::kPredictorNameLinearResampling);
+  }
+
  protected:
   EventWithCallback::OriginalEventList original_events_;
   std::unique_ptr<ScrollPredictor> scroll_predictor_;
@@ -372,6 +402,60 @@
   EXPECT_EQ(-150, result->pos.y());
 }
 
+TEST_F(ScrollPredictorTest, LinearResamplingPredictorTest) {
+  // Test kResamplingScrollEventsExperimentalLatencyFixed
+  InitLinearResamplingTest(false);
+  SendGestureScrollBegin();
+
+  // Send 1st GSU, no prediction available.
+  std::unique_ptr<WebInputEvent> gesture_update =
+      CreateGestureScrollUpdate(0, 10, 10 /* ms */);
+  HandleResampleScrollEvents(gesture_update, 10 /* ms */, 30 /* Hz */);
+  EXPECT_EQ(10, static_cast<const WebGestureEvent*>(gesture_update.get())
+                    ->data.scroll_update.delta_y);
+  EXPECT_EQ(
+      WebInputEvent::GetStaticTimeStampForTests() +
+          base::TimeDelta::FromMillisecondsD(10 /* ms */),
+      static_cast<const WebGestureEvent*>(gesture_update.get())->TimeStamp());
+
+  // Prediction using fixed +3.3ms latency.
+  gesture_update = CreateGestureScrollUpdate(0, 10, 20 /* ms */);
+  HandleResampleScrollEvents(gesture_update, 20 /* ms */, 30 /* Hz */);
+  ASSERT_FLOAT_EQ(10 + 3.3,
+                  static_cast<const WebGestureEvent*>(gesture_update.get())
+                      ->data.scroll_update.delta_y);
+  EXPECT_EQ(
+      WebInputEvent::GetStaticTimeStampForTests() +
+          base::TimeDelta::FromMillisecondsD(23.3 /* ms */),
+      static_cast<const WebGestureEvent*>(gesture_update.get())->TimeStamp());
+
+  // Test kResamplingScrollEventsExperimentalLatencyVariable
+  InitLinearResamplingTest(true);
+  SendGestureScrollBegin();
+
+  // Send 1st GSU, no prediction available.
+  gesture_update = CreateGestureScrollUpdate(0, 10, 10 /* ms */);
+  HandleResampleScrollEvents(gesture_update, 10 /* ms */, 60 /* Hz */);
+  EXPECT_EQ(10, static_cast<const WebGestureEvent*>(gesture_update.get())
+                    ->data.scroll_update.delta_y);
+  EXPECT_EQ(
+      WebInputEvent::GetStaticTimeStampForTests() +
+          base::TimeDelta::FromMillisecondsD(10 /* ms */),
+      static_cast<const WebGestureEvent*>(gesture_update.get())->TimeStamp());
+
+  // Prediction at 60Hz: uses experimental latency of 0.5 * 1/60 seconds.
+  // Remember linear resampling has its -5 built-in latency.
+  gesture_update = CreateGestureScrollUpdate(0, 10, 20 /* ms */);
+  HandleResampleScrollEvents(gesture_update, 20 /* ms */, 60 /* Hz */);
+  ASSERT_FLOAT_EQ(10 - 5 + 8.333,
+                  static_cast<const WebGestureEvent*>(gesture_update.get())
+                      ->data.scroll_update.delta_y);
+  EXPECT_EQ(
+      WebInputEvent::GetStaticTimeStampForTests() +
+          base::TimeDelta::FromMillisecondsD(10 + 10 - 5 + 8.333 /* ms */),
+      static_cast<const WebGestureEvent*>(gesture_update.get())->TimeStamp());
+}
+
 TEST_F(ScrollPredictorTest, ScrollPredictorNotChangeScrollDirection) {
   SetUpLSQPredictor();
   SendGestureScrollBegin();
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 6369bfd..5057588 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -70,6 +70,7 @@
 crbug.com/591099 external/wpt/css/css-flexbox/image-as-flexitem-size-003v.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox/image-as-flexitem-size-004.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox/image-as-flexitem-size-004v.html [ Failure ]
+crbug.com/1162704 external/wpt/css/css-flexbox/flex-aspect-ratio-img-row-015.html [ Failure ]
 
 ### external/wpt/css/css-fonts/
 crbug.com/591099 external/wpt/css/css-fonts/font-features-across-space-1.html [ Failure ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
index dc3921b..83b2ed6 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
+++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -27,4 +27,3 @@
 
 # Opt-in origin isolation is intentionally disabled with --disable-site-isolation-trials.
 virtual/no-auto-wpt-origin-isolation/external/wpt/origin-isolation/* [ Skip ]
-virtual/no-auto-wpt-origin-isolation/wpt_internal/origin-isolation/* [ Skip ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index 15fa790..dcb8390 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1964,9 +1964,7 @@
 # with site isolation enabled, we use a different virtual test suite than
 # not-site-per-process, named no-auto-wpt-origin-isolation.
 external/wpt/origin-isolation/* [ Skip ]
-wpt_internal/origin-isolation/* [ Skip ]
 virtual/no-auto-wpt-origin-isolation/external/wpt/origin-isolation/* [ Pass ]
-virtual/no-auto-wpt-origin-isolation/wpt_internal/origin-isolation/* [ Pass ]
 # ==== Tests incompatible with the default WPT Origin Isolation end here ==^^
 
 # Tests using testRunner.useUnfortunateSynchronousResizeMode occasionally fail on Win7,
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 0931a64..ab33847 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -51,11 +51,6 @@
 # WPT Test harness doesn't deal with finding an about:blank ref test
 crbug.com/1066130 external/wpt/infrastructure/assumptions/blank.html [ Failure ]
 
-# When running under Python 3 on Windows, this test fails to activate backpressure.
-crbug.com/1155106 external/wpt/websockets/stream/tentative/backpressure-receive.any.html [ Failure ]
-crbug.com/1155106 external/wpt/websockets/stream/tentative/backpressure-receive.any.worker.html [ Failure ]
-crbug.com/1155106 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html [ Failure ]
-
 # Favicon is not supported by run_web_tests.
 external/wpt/fetch/metadata/favicon.https.sub.html [ Skip ]
 
@@ -1436,6 +1431,8 @@
 
 crbug.com/860211 [ Mac ] external/wpt/editing/run/delete.html [ Failure ]
 
+crbug.com/1002937 external/wpt/editing/run/caret-navigation-around-line-break.html [ Failure ]
+
 crbug.com/821455 editing/pasteboard/drag-files-to-editable-element.html [ Failure ]
 
 crbug.com/688613 external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-audio-is-silence.https.html [ Skip ]
@@ -2826,6 +2823,7 @@
 # See also crbug.com/920100 (sheriff 2019-01-09).
 crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Timeout Failure ]
 crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Timeout Failure ]
+crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/inline-style-with-differentorigin-base-tag.tentative.html [ Timeout Failure ]
 crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Timeout Failure ]
 crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Timeout Failure ]
 crbug.com/626703 external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Timeout Failure ]
@@ -5943,3 +5941,7 @@
 
 # Sheriff 2021-01-21
 crbug.com/1164166 [ Linux ] virtual/synchronous_html_parser/external/wpt/preload/avoid-prefetching-on-text-plain.html [ Pass Failure ]
+
+# Sheriff 2021-01-08
+crbug.com/1164459 [ Mac ] virtual/synchronous_html_parser/external/wpt/preload/download-resources.html [ Pass Timeout ]
+
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 3899930..36cadaf 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -124,7 +124,6 @@
               "inspector-protocol/dom-snapshot",
               "media/stable",
               "webexposed",
-              "wpt_internal/origin-isolation",
               "compositing/filters"
               ],
     "args": ["--stable-release-mode",
@@ -518,8 +517,7 @@
   },
   {
     "prefix": "no-auto-wpt-origin-isolation",
-    "bases": ["external/wpt/origin-isolation",
-              "wpt_internal/origin-isolation"],
+    "bases": ["external/wpt/origin-isolation"],
     "args": ["--disable-auto-wpt-origin-isolation"]
   },
   {
@@ -812,5 +810,10 @@
               "scrollingcoordinator/plugin-with-wheel-handler.html",
               "scrollingcoordinator/non-fast-scrollable-region-nested.html"],
     "args": ["--enable-features=WheelEventRegions"]
+  },
+  {
+    "prefix": "web-app-window-controls-overlay",
+    "bases": ["external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay.html"],
+    "args": [ "--enable-features=WebAppWindowControlsOverlay"]
   }
 ]
diff --git a/third_party/blink/web_tests/editing/execCommand/indent/indent_blockquote_with_inline_nested_paragraphs.html b/third_party/blink/web_tests/editing/execCommand/indent/indent_blockquote_with_inline_nested_paragraphs.html
index 9fed943..f2e1ad1 100644
--- a/third_party/blink/web_tests/editing/execCommand/indent/indent_blockquote_with_inline_nested_paragraphs.html
+++ b/third_party/blink/web_tests/editing/execCommand/indent/indent_blockquote_with_inline_nested_paragraphs.html
@@ -151,9 +151,7 @@
             '<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">^hello',
             '<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">',
             '<foreignobject height="80" width="80" x="20" y="20">Test|</foreignobject>',
-            '</svg>',
-            '<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">',
-            '<foreignobject height="80" width="80" x="20" y="20">Test</foreignobject></svg></blockquote>',
+            '</svg></blockquote>',
         '</pre>',
     ],
     'Indent content spanning across different selection contexts');
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index f43a58c..dfd763af 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -45912,6 +45912,45 @@
         {}
        ]
       ],
+      "one-element-three-keyframes-animation1.html": [
+       "380c5d32feb0844cbc4edbf91a93db7f4d88051f",
+       [
+        null,
+        [
+         [
+          "/css/css-backgrounds/animations/one-element-animation-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "one-element-three-keyframes-animation2.html": [
+       "e71b858b6ac11a735672231c85edf7cb511945dd",
+       [
+        null,
+        [
+         [
+          "/css/css-backgrounds/animations/one-element-three-keyframes-animation2-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "one-element-three-keyframes-animation3.html": [
+       "080ed01b835717fd5cdb052ab592979ac8c707fb",
+       [
+        null,
+        [
+         [
+          "/css/css-backgrounds/animations/one-element-animation-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "one-element-transition.html": [
        "51d3a968c735f78c3ba2b3f0213ec0d2a989ae15",
        [
@@ -90922,6 +90961,45 @@
        {}
       ]
      ],
+     "overflow-clip-margin-004.html": [
+      "aab356f487ec4cd6095d011203eedbe494a1b03a",
+      [
+       null,
+       [
+        [
+         "/css/css-overflow/overflow-clip-margin-004-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
+     "overflow-clip-margin-005.html": [
+      "2d03a969719cd1334e6e6912b553ba05c263d713",
+      [
+       null,
+       [
+        [
+         "/css/css-overflow/overflow-clip-margin-005-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
+     "overflow-clip-margin-006.html": [
+      "493bcee29f65c6890cec5472ac277adaa662a546",
+      [
+       null,
+       [
+        [
+         "/css/css-overflow/overflow-clip-margin-006-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "overflow-clip-margin-invalidation.html": [
       "d9c87a34a53f17451b0d3ae8c2071971d1df3a94",
       [
@@ -182417,6 +182495,10 @@
       "one-element-animation-ref.html": [
        "8e0e70ba20e56678753b78c91ba8d02fb195b6cf",
        []
+      ],
+      "one-element-three-keyframes-animation2-ref.html": [
+       "823d8ac3821638dd92cdccbc39497d1cc1dc797a",
+       []
       ]
      },
      "background-332-expected.txt": [
@@ -198377,6 +198459,18 @@
       "cf6b55a2f91d52a669ab64ce7f2ee66ae3abb139",
       []
      ],
+     "overflow-clip-margin-004-ref.html": [
+      "3cc79ed480e68fa19286b694d9d96514992a61ff",
+      []
+     ],
+     "overflow-clip-margin-005-ref.html": [
+      "84110e57792086613515a824483fa0b9a8d75ff0",
+      []
+     ],
+     "overflow-clip-margin-006-ref.html": [
+      "cf6b55a2f91d52a669ab64ce7f2ee66ae3abb139",
+      []
+     ],
      "overflow-clip-margin-invalidation-ref.html": [
       "1ec2a5ce0a21c8dd578b3fcfde702307e4e2a9a8",
       []
@@ -234672,6 +234766,10 @@
         ]
        },
        "unhandled-promise-rejections": {
+        "promise-rejection-event-during-parse-expected.txt": [
+         "89c041abb5d763c4a2c2468a412619eb5fac0a4f",
+         []
+        ],
         "support": {
          "promise-access-control.py": [
           "cf8ed5e49244a614dbe44acf2dc9146629e79290",
@@ -236499,7 +236597,7 @@
      []
     ],
     "webhid.idl": [
-     "ad2f0b78653be7c583216c782f1a4125275b964c",
+     "ffc960938c9221c9bb8cca295997271e2ec394fe",
      []
     ],
     "webmidi.idl": [
@@ -236808,7 +236906,7 @@
     ]
    },
    "lint.ignore": [
-    "049d4f81235cbe0538f41e7066c9cd98405b6a68",
+    "31cb00022d3002508f794a29841efd28b0639a4b",
     []
    ],
    "loading": {
@@ -240849,30 +240947,6 @@
      []
     ],
     "pointerlock": {
-     "pointerevent_coordinates_when_locked.html.ini": [
-      "04c0f72c7d99bc37a364e7192e7e65a1e6827f60",
-      []
-     ],
-     "pointerevent_getCoalescedEvents_when_pointerlocked.html.ini": [
-      "9e125839696524cc24cb3f91655765624854e1f8",
-      []
-     ],
-     "pointerevent_movementxy_with_pointerlock.html.ini": [
-      "d22487b5371f040fd3edb99ac345b2a38cc58705",
-      []
-     ],
-     "pointerevent_pointerlock_after_pointercapture.html.ini": [
-      "dc1a38a96f354e88d08d45bfa692583cb4dcc4ac",
-      []
-     ],
-     "pointerevent_pointermove_in_pointerlock.html.ini": [
-      "7c4043d0fa0abe2ae9d15c437aac8b617a3c5512",
-      []
-     ],
-     "pointerevent_pointermove_on_chorded_mouse_button_when_locked.html.ini": [
-      "9d0b178aa192acc5ac1428b67482728b9ee676ee",
-      []
-     ],
      "resources": {
       "pointerevent_movementxy-iframe.html": [
        "627af3b61cad74bb112558169b1e66f6a24b1129",
@@ -301466,6 +301540,13 @@
        {}
       ]
      ],
+     "highlight-pseudos-computed.html": [
+      "ec3532db6a9f47965fb4819b5cfcbd3e55157f5a",
+      [
+       null,
+       {}
+      ]
+     ],
      "idlharness.html": [
       "514d31f6b39ef066df52c113e68232119cb6927d",
       [
@@ -301534,6 +301615,13 @@
       ]
      ],
      "parsing": {
+      "highlight-pseudos.html": [
+       "aa3c4e20aa2d15b267cddfb76163d8edf9ff03c8",
+       [
+        null,
+        {}
+       ]
+      ],
       "marker-supported-properties-in-animation.html": [
        "df0e9bc6d34b3e8828d886bbe7ad3359f4178756",
        [
@@ -301548,13 +301636,6 @@
         {}
        ]
       ],
-      "target-text.html": [
-       "37cbdd4c15aedaa09d62af71545b7d9760a207ff",
-       [
-        null,
-        {}
-       ]
-      ],
       "tree-abiding-pseudo-elements.html": [
        "05c23a3bc143ce2a005b3686af2eae2cb60cb7ba",
        [
@@ -301563,13 +301644,6 @@
        ]
       ]
      },
-     "target-text-computed.html": [
-      "429903052ed196d272464b6a5838c2d3a18cd46e",
-      [
-       null,
-       {}
-      ]
-     ],
      "text-selection.html": [
       "42acd0aa52a25b3f92c0cfc47089fcd79c71c75c",
       [
@@ -381484,10 +381558,14 @@
       ]
      },
      "atob": {
-      "base64.html": [
-       "61c3667dceeb136e03abcec1d4835ea852e0018b",
+      "base64.any.js": [
+       "7f433f4d8a9ee2e317def3327c5882938cbd6732",
        [
-        null,
+        "html/webappapis/atob/base64.any.html",
+        {}
+       ],
+       [
+        "html/webappapis/atob/base64.any.worker.html",
         {}
        ]
       ]
@@ -383205,6 +383283,13 @@
           {}
          ]
         ],
+        "promise-rejection-event-during-parse.html": [
+         "160dad9b36bd38de015c9dc82fd2410c5276cc8d",
+         [
+          null,
+          {}
+         ]
+        ],
         "promise-rejection-events-attached-in-event.html": [
          "b151bd812f9b92a5398923624d6e4601552de095",
          [
@@ -383437,31 +383522,47 @@
         {}
        ]
       ],
-      "negative-setinterval.html": [
-       "663872cd1f3850ffccbc199f6e92267bfcf65652",
+      "negative-setinterval.any.js": [
+       "5646140c2a45f30e2002c8285777d672e378c119",
        [
-        null,
+        "html/webappapis/timers/negative-setinterval.any.html",
+        {}
+       ],
+       [
+        "html/webappapis/timers/negative-setinterval.any.worker.html",
         {}
        ]
       ],
-      "negative-settimeout.html": [
-       "b59fc8f22984c8329119763ea68214d2e46fa8a1",
+      "negative-settimeout.any.js": [
+       "da191f1bf00d92663fb70cedb459eb429bf9aa68",
        [
-        null,
+        "html/webappapis/timers/negative-settimeout.any.html",
+        {}
+       ],
+       [
+        "html/webappapis/timers/negative-settimeout.any.worker.html",
         {}
        ]
       ],
-      "type-long-setinterval.html": [
-       "7fb81ff29ac3a99e2408b51e4cfe7c7b5bd49e17",
+      "type-long-setinterval.any.js": [
+       "164527f18b1e6f6b41affc46ee171b08137f509c",
        [
-        null,
+        "html/webappapis/timers/type-long-setinterval.any.html",
+        {}
+       ],
+       [
+        "html/webappapis/timers/type-long-setinterval.any.worker.html",
         {}
        ]
       ],
-      "type-long-settimeout.html": [
-       "4dc7d17ea5f13f9bb379d4acae89263da138c0c9",
+      "type-long-settimeout.any.js": [
+       "9092f13f3b1000067fea2b31b61423f06cfc945a",
        [
-        null,
+        "html/webappapis/timers/type-long-settimeout.any.html",
+        {}
+       ],
+       [
+        "html/webappapis/timers/type-long-settimeout.any.worker.html",
         {}
        ]
       ]
@@ -402507,6 +402608,13 @@
         {}
        ]
       ],
+      "inline-style-with-differentorigin-base-tag.tentative.html": [
+       "091afd832ab35a76136b4242df1c1ec73aee109d",
+       [
+        null,
+        {}
+       ]
+      ],
       "inline-style.html": [
        "1e94b3df2cd9093dc489c46a079cd14adaffb90e",
        [
@@ -402551,6 +402659,13 @@
         {}
        ]
       ],
+      "inline-style-with-differentorigin-base-tag.tentative.html": [
+       "9a8bc6da418bc7302138daba8cf06cb449bd2dfe",
+       [
+        null,
+        {}
+       ]
+      ],
       "inline-style.html": [
        "2d4725e0bb1454035e560ad8218ccbbc0eb98107",
        [
@@ -429517,17 +429632,25 @@
       {}
      ]
     ],
-    "url-constructor.html": [
-     "7ddcdc88170c202347b072d88f6a47477a776045",
+    "url-constructor.any.js": [
+     "153d985ff6796183fd01b66437549544c497d02b",
      [
-      null,
+      "url/url-constructor.any.html",
+      {}
+     ],
+     [
+      "url/url-constructor.any.worker.html",
       {}
      ]
     ],
-    "url-origin.html": [
-     "fccb643ed6c8069cc61fee276fbf5c69b3828850",
+    "url-origin.any.js": [
+     "d9ef64c73b8bcc7fe37d94e6b77a5b8d967a0f0f",
      [
-      null,
+      "url/url-origin.any.html",
+      {}
+     ],
+     [
+      "url/url-origin.any.worker.html",
       {}
      ]
     ],
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-018.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-018.html
new file mode 100644
index 0000000..04b12875
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-018.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>SVG as flex item</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#algo-main-item" title="Part E">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#min-max-widths">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="Flex base size of svg item with aspect ratio + no intrinsic width or height honors transferred max-width." />
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; flex-direction: column; align-items: flex-start; width: 200px;">
+  <svg viewBox="0 0 1 1" style="max-width: 100px; background: green;"></svg>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-row-015.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-row-015.html
new file mode 100644
index 0000000..e288290
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-aspect-ratio-img-row-015.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>SVG as flex item</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#algo-main-item" title="Part E">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#min-max-widths">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="Flex base size of svg item with aspect ratio + no intrinsic width or height honors transferred max-height." />
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; align-items: flex-start; height: 200px;">
+  <svg viewBox="0 0 1 1" style="max-height: 100px; background: green;"></svg>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/request/request-bad-port.any.js b/third_party/blink/web_tests/external/wpt/fetch/api/request/request-bad-port.any.js
index afb02ae..31a08eaa 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/api/request/request-bad-port.any.js
+++ b/third_party/blink/web_tests/external/wpt/fetch/api/request/request-bad-port.any.js
@@ -53,7 +53,6 @@
     532,  // netnews
     540,  // uucp
     548,  // afp
-    554,  // rtsp
     556,  // remotefs
     563,  // nntp+ssl
     587,  // smtp (outgoing)
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.html b/third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.any.js
similarity index 91%
rename from third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.html
rename to third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.any.js
index 61c3667d..7f433f4 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.html
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/atob/base64.any.js
@@ -1,12 +1,3 @@
-<!doctype html>
-<!-- Originally developed by Aryeh Gregor, funded by Google.  Copyright belongs
-to Google. -->
-<title>atob()/btoa() tests</title>
-<meta charset=utf-8>
-<div id=log></div>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script>
 /**
  * btoa() as defined by the HTML5 spec, which mostly just references RFC4648.
  */
@@ -160,9 +151,9 @@
           output = allTests[i][1];
     test(() => {
       if(output === null) {
-        assert_throws_dom("InvalidCharacterError", () => window.atob(input));
+        assert_throws_dom("InvalidCharacterError", () => globalThis.atob(input));
       } else {
-        const result = window.atob(input);
+        const result = globalThis.atob(input);
         for(let ii = 0; ii < output.length; ii++) {
           assert_equals(result.charCodeAt(ii), output[ii]);
         }
@@ -170,4 +161,3 @@
     }, "atob(" + format_value(input) + ")");
   }
 }
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse-expected.txt
new file mode 100644
index 0000000..89c041a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Promise rejection during initial parsing of document assert_array_equals: lengths differ, expected array ["readystatechange:interactive", "unhandledrejection", "readystatechange:complete"] length 3, got ["readystatechange:interactive", "readystatechange:complete"] length 2
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse.html b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse.html
new file mode 100644
index 0000000..160dad9b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Promise rejection during initial parsing of document</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">
+<body>
+<p>The script in this test is executed immediately while parsing is ongoing, and
+<a
+href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script">cleaning
+up after running script</a> involves queueing a task on the DOM manipulation
+task source to fire the <code>unhandledrejection</code> event. Parsing then
+completes, immediately transitioning the document's readiness state to
+"interactive," and queuing another task on the DOM manipulation task source to
+transition the state to "complete."
+</p>
+<script>
+'use strict';
+setup({ allow_uncaught_exception: true });
+
+async_test(function(t) {
+  const events = [];
+  document.addEventListener('readystatechange', t.step_func(function() {
+    events.push('readystatechange:' + document.readyState);
+  }));
+  addEventListener('unhandledrejection', t.step_func(function() {
+    events.push('unhandledrejection');
+  }));
+
+  Promise.reject(new Error('this error is intentional'));
+
+  addEventListener('load', t.step_func(function() {
+    assert_array_equals(
+      events,
+      [
+        'readystatechange:interactive',
+        'unhandledrejection',
+        'readystatechange:complete'
+      ]
+    );
+    t.done();
+  }));
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.any.js
new file mode 100644
index 0000000..5646140
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.any.js
@@ -0,0 +1,12 @@
+setup({ single_test: true });
+var i = 0;
+var interval;
+function next() {
+  i++;
+  if (i === 20) {
+    clearInterval(interval);
+    done();
+  }
+}
+setTimeout(assert_unreached, 1000);
+interval = setInterval(next, -100);
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.html b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.html
deleted file mode 100644
index 663872cd..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-setinterval.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!doctype html>
-<title>Negative timeout in setInterval</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-setup({ single_test: true });
-var i = 0;
-var interval;
-function next() {
-  i++;
-  if (i === 20) {
-    clearInterval(interval);
-    done();
-  }
-}
-setTimeout(assert_unreached, 1000);
-interval = setInterval(next, -100);
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js
new file mode 100644
index 0000000..da191f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.any.js
@@ -0,0 +1,3 @@
+setup({ single_test: true });
+setTimeout(done, -100);
+setTimeout(assert_unreached, 10);
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.html b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.html
deleted file mode 100644
index b59fc8f..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/negative-settimeout.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!doctype html>
-<title>Negative timeout in setTimeout</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
- setup({ single_test: true });
- setTimeout(done, -100);
- setTimeout(assert_unreached, 10);
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.any.js
new file mode 100644
index 0000000..164527f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.any.js
@@ -0,0 +1,8 @@
+setup({ single_test: true });
+var interval;
+function next() {
+  clearInterval(interval);
+  done();
+}
+interval = setInterval(next, Math.pow(2, 32));
+setTimeout(assert_unreached, 100);
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.html b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.html
deleted file mode 100644
index 7fb81ff..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-setinterval.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html>
-<title>Type long timeout for setInterval</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-setup({ single_test: true });
-var interval;
-function next() {
-  clearInterval(interval);
-  done();
-}
-interval = setInterval(next, Math.pow(2, 32));
-setTimeout(assert_unreached, 100);
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.any.js
new file mode 100644
index 0000000..9092f13f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.any.js
@@ -0,0 +1,3 @@
+setup({ single_test: true });
+setTimeout(done, Math.pow(2, 32));
+setTimeout(assert_unreached, 100);
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.html b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.html
deleted file mode 100644
index 4dc7d17..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/type-long-settimeout.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!doctype html>
-<title>Type long timeout for setTimeout</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-setup({ single_test: true });
-setTimeout(done, Math.pow(2, 32));
-setTimeout(assert_unreached, 100);
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webhid.idl b/third_party/blink/web_tests/external/wpt/interfaces/webhid.idl
index ad2f0b7..ffc9609 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webhid.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webhid.idl
@@ -66,8 +66,14 @@
 dictionary HIDReportItem {
     boolean isAbsolute;
     boolean isArray;
+    boolean isBufferedBytes;
+    boolean isConstant;
+    boolean isLinear;
     boolean isRange;
+    boolean isVolatile;
     boolean hasNull;
+    boolean hasPreferredState;
+    boolean wrap;
     sequence<unsigned long> usages;
     unsigned long usageMinimum;
     unsigned long usageMaximum;
@@ -96,6 +102,7 @@
 dictionary HIDCollectionInfo {
     unsigned short usagePage;
     unsigned short usage;
+    octet type;
     sequence<HIDCollectionInfo> children;
     sequence<HIDReportInfo> inputReports;
     sequence<HIDReportInfo> outputReports;
diff --git a/third_party/blink/web_tests/external/wpt/lint.ignore b/third_party/blink/web_tests/external/wpt/lint.ignore
index 049d4f81..27ba549 100644
--- a/third_party/blink/web_tests/external/wpt/lint.ignore
+++ b/third_party/blink/web_tests/external/wpt/lint.ignore
@@ -274,7 +274,7 @@
 GENERATE_TESTS: html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context.html
 GENERATE_TESTS: html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html
 GENERATE_TESTS: html/syntax/serializing-html-fragments/serializing.html
-GENERATE_TESTS: html/webappapis/atob/base64.html
+GENERATE_TESTS: html/webappapis/atob/base64.any.js
 GENERATE_TESTS: mediacapture-fromelement/capture.html
 GENERATE_TESTS: mediacapture-fromelement/creation.html
 GENERATE_TESTS: mediacapture-fromelement/ended.html
@@ -723,12 +723,12 @@
 MISSING DEPENDENCY: idle-detection/resources/idle-detection-helper.js
 MISSING DEPENDENCY: mediacapture-image/resources/imagecapture-helpers.js
 MISSING DEPENDENCY: orientation-event/resources/orientation-event-helpers.js
+MISSING DEPENDENCY: resources/chromium/webusb-test.js
 MISSING DEPENDENCY: resources/test-only-api.js
 MISSING DEPENDENCY: screen_enumeration/resources/screenenumeration-helpers.js
 MISSING DEPENDENCY: serial/resources/automation.js
 MISSING DEPENDENCY: shape-detection/resources/shapedetection-helpers.js
 MISSING DEPENDENCY: web-nfc/resources/nfc-helpers.js
-MISSING DEPENDENCY: webusb/resources/usb-helpers.js
 MISSING DEPENDENCY: webxr/resources/webxr_util.js
 
 # Tests that are false positives for using Ahem as a system font
diff --git a/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-button.html b/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-button.html
index 2bf0ddb..0672219 100644
--- a/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-button.html
+++ b/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-button.html
@@ -4,7 +4,7 @@
     function handleMessage(e) {
       if (e.data == "focus") {
         let button = document.querySelector("button");
-        button.onfocus = () => e.source.postMessage({focused: true}, "*");
+        button.onfocus = () => e.source.postMessage({focused: true}, {targetOrigin: "*"});
         button.focus();
       }
     }
@@ -22,7 +22,7 @@
 
     window.onfocus = () => {
       if (window.portalHost)
-        window.portalHost.postMessage("window focused", "*");
+        window.portalHost.postMessage("window focused");
     };
   </script>
   <button>A</button>
diff --git a/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-x-origin-iframe.sub.html b/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-x-origin-iframe.sub.html
index 7c9df9d..9807898 100644
--- a/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-x-origin-iframe.sub.html
+++ b/third_party/blink/web_tests/external/wpt/portals/resources/focus-page-with-x-origin-iframe.sub.html
@@ -19,9 +19,9 @@
 
     window.onmessage = e => {
       if (window.portalHost)
-        window.portalHost.postMessage(e.data, "*");
+        window.portalHost.postMessage(e.data);
       else
-        document.querySelector("portal").postMessage(e.data, "*");
+        document.querySelector("portal").postMessage(e.data);
     }
   </script>
   <iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/portals/resources/focus-page-with-button.html"></iframe>
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/image/inline-style-with-differentorigin-base-tag.tentative.html b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/image/inline-style-with-differentorigin-base-tag.tentative.html
new file mode 100644
index 0000000..091afd83
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/image/inline-style-with-differentorigin-base-tag.tentative.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<title>CSS integration - image from inline style from document with base tag</title>
+<link rel="help" href="https://crbug.com/1158645" />
+
+<head>
+  <meta name="referrer" content="origin">
+</head>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<!-- Common global functions for referrer-policy tests. -->
+<script src="/common/security-features/resources/common.sub.js"></script>
+
+<!-- This has to follow the <script> tags, or it will make the js files fail to load. -->
+<base href="http://other-site.example" />
+
+<p>Check that resources from inline styles are loaded with
+  the referrer and referrer policy from the document and, in
+  particular, not with the different base URL set in the base tag.</p>
+
+<div class="styled"></div>
+
+<script>
+  'use strict';
+  promise_test(function(css_test) {
+    var id = token();
+    var css_url = location.protocol + "//www1." + location.hostname + ":" + location.port + "/common/security-features/subresource/image.py" + "?id=" + id;
+    var img_url = css_url + "&report-headers";
+
+    var div = document.querySelector("div.styled");
+    div.style = "content:url(" + css_url + ")";
+    return timeoutPromise(css_test, 1000)
+      .then(() => requestViaXhr(img_url))
+      .then(function(message) {
+        assert_own_property(message, "headers");
+        assert_own_property(message, "referrer");
+        assert_equals(message.referrer, location.origin + "/");
+      });
+  }, "Image from inline styles.");
+</script>
+
+<div id="log"></div>
+
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/inline-style-with-differentorigin-base-tag.tentative.html b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/inline-style-with-differentorigin-base-tag.tentative.html
new file mode 100644
index 0000000..9a8bc6d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/referrer-policy/css-integration/svg/inline-style-with-differentorigin-base-tag.tentative.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <title>CSS integration - styling SVG from inline style on page with different-origin base tag</title>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+  <script src="/common/utils.js"></script>
+  <!-- Common global functions for referrer-policy tests. -->
+  <script src="/common/security-features/resources/common.sub.js"></script>
+  <!-- Helper functions for referrer-policy css tests. -->
+  <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+  <meta name="referrer" content="origin">
+</head>
+
+<base href="http://other-page.example/" />
+
+<body>
+  <p>Check that resources from inline styles are loaded with
+    the referrer and referrer policy from the document and, in
+    particular, not from the document's overridden base URL.</p>
+  <script>
+    function setInlineStyle(test) {
+      test.expected = location.origin + "/";
+      let svg = createSvg();
+      document.body.appendChild(svg);
+      let element = svg.getElementsByTagName('path')[0];
+      element.style = test.property + ": url(" + url_prefix + "svg.py?id=" +
+        test.id + "#invalidFragment);";
+    }
+
+    runSvgTests(svg_test_properties,
+      "Styling SVG from inline styles",
+      setInlineStyle);
+  </script>
+
+  <div id="log"></div>
+</body>
+
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/webusb-test.js b/third_party/blink/web_tests/external/wpt/resources/chromium/webusb-test.js
index 8bccfd1f..f6a793d 100644
--- a/third_party/blink/web_tests/external/wpt/resources/chromium/webusb-test.js
+++ b/third_party/blink/web_tests/external/wpt/resources/chromium/webusb-test.js
@@ -16,6 +16,19 @@
   messagePort: null,
 };
 
+let mojom = {};
+
+async function loadMojomDefinitions() {
+  const deviceMojom =
+      await import('/gen/services/device/public/mojom/usb_device.mojom.m.js');
+  const serviceMojom = await import(
+      '/gen/third_party/blink/public/mojom/usb/web_usb_service.mojom.m.js');
+  return {
+    ...deviceMojom,
+    ...serviceMojom,
+  };
+}
+
 function getMessagePort(target) {
   return new Promise(resolve => {
     target.addEventListener('message', messageEvent => {
@@ -93,29 +106,29 @@
           var endpointInfo = {
             endpointNumber: endpoint.endpointNumber,
             packetSize: endpoint.packetSize,
-            synchronizationType: device.mojom.UsbSynchronizationType.NONE,
-            usageType: device.mojom.UsbUsageType.DATA,
+            synchronizationType: mojom.UsbSynchronizationType.NONE,
+            usageType: mojom.UsbUsageType.DATA,
             pollingInterval: 0,
             extraData: new Uint8Array()
           };
           switch (endpoint.direction) {
-          case "in":
-            endpointInfo.direction = device.mojom.UsbTransferDirection.INBOUND;
-            break;
-          case "out":
-            endpointInfo.direction = device.mojom.UsbTransferDirection.OUTBOUND;
-            break;
+            case "in":
+              endpointInfo.direction = mojom.UsbTransferDirection.INBOUND;
+              break;
+            case "out":
+              endpointInfo.direction = mojom.UsbTransferDirection.OUTBOUND;
+              break;
           }
           switch (endpoint.type) {
-          case "bulk":
-            endpointInfo.type = device.mojom.UsbTransferType.BULK;
-            break;
-          case "interrupt":
-            endpointInfo.type = device.mojom.UsbTransferType.INTERRUPT;
-            break;
-          case "isochronous":
-            endpointInfo.type = device.mojom.UsbTransferType.ISOCHRONOUS;
-            break;
+            case "bulk":
+              endpointInfo.type = mojom.UsbTransferType.BULK;
+              break;
+            case "interrupt":
+              endpointInfo.type = mojom.UsbTransferType.INTERRUPT;
+              break;
+            case "isochronous":
+              endpointInfo.type = mojom.UsbTransferType.ISOCHRONOUS;
+              break;
           }
           alternateInfo.endpoints.push(endpointInfo);
         });
@@ -173,7 +186,7 @@
   open() {
     assert_false(this.opened_);
     this.opened_ = true;
-    return Promise.resolve({ error: device.mojom.UsbOpenDeviceError.OK });
+    return Promise.resolve({error: mojom.UsbOpenDeviceError.OK});
   }
 
   close() {
@@ -244,36 +257,35 @@
   async controlTransferIn(params, length, timeout) {
     assert_true(this.opened_);
 
-    if ((params.recipient == device.mojom.UsbControlTransferRecipient.INTERFACE ||
-         params.recipient == device.mojom.UsbControlTransferRecipient.ENDPOINT) &&
+    if ((params.recipient == mojom.UsbControlTransferRecipient.INTERFACE ||
+         params.recipient == mojom.UsbControlTransferRecipient.ENDPOINT) &&
         this.currentConfiguration_ == null) {
       return {
-        status: device.mojom.UsbTransferStatus.PERMISSION_DENIED,
+        status: mojom.UsbTransferStatus.PERMISSION_DENIED,
       };
     }
 
     return {
-      status: device.mojom.UsbTransferStatus.OK,
-      data: [length >> 8, length & 0xff, params.request, params.value >> 8,
-             params.value & 0xff, params.index >> 8, params.index & 0xff]
+      status: mojom.UsbTransferStatus.OK,
+      data: [
+        length >> 8, length & 0xff, params.request, params.value >> 8,
+        params.value & 0xff, params.index >> 8, params.index & 0xff
+      ]
     };
   }
 
   async controlTransferOut(params, data, timeout) {
     assert_true(this.opened_);
 
-    if ((params.recipient == device.mojom.UsbControlTransferRecipient.INTERFACE ||
-         params.recipient == device.mojom.UsbControlTransferRecipient.ENDPOINT) &&
+    if ((params.recipient == mojom.UsbControlTransferRecipient.INTERFACE ||
+         params.recipient == mojom.UsbControlTransferRecipient.ENDPOINT) &&
         this.currentConfiguration_ == null) {
       return {
-        status: device.mojom.UsbTransferStatus.PERMISSION_DENIED,
+        status: mojom.UsbTransferStatus.PERMISSION_DENIED,
       };
     }
 
-    return {
-      status: device.mojom.UsbTransferStatus.OK,
-      bytesWritten: data.byteLength
-    };
+    return {status: mojom.UsbTransferStatus.OK, bytesWritten: data.byteLength};
   }
 
   genericTransferIn(endpointNumber, length, timeout) {
@@ -283,20 +295,15 @@
     let data = new Array(length);
     for (let i = 0; i < length; ++i)
       data[i] = i & 0xff;
-    return Promise.resolve({
-      status: device.mojom.UsbTransferStatus.OK,
-      data: data
-    });
+    return Promise.resolve({status: mojom.UsbTransferStatus.OK, data: data});
   }
 
   genericTransferOut(endpointNumber, data, timeout) {
     assert_true(this.opened_);
     assert_false(this.currentConfiguration_ == null, 'device configured');
     // TODO(reillyg): Assert that endpoint is valid.
-    return Promise.resolve({
-      status: device.mojom.UsbTransferStatus.OK,
-      bytesWritten: data.byteLength
-    });
+    return Promise.resolve(
+        {status: mojom.UsbTransferStatus.OK, bytesWritten: data.byteLength});
   }
 
   isochronousTransferIn(endpointNumber, packetLengths, timeout) {
@@ -312,7 +319,7 @@
       packets[i] = {
         length: packetLengths[i],
         transferredLength: packetLengths[i],
-        status: device.mojom.UsbTransferStatus.OK
+        status: mojom.UsbTransferStatus.OK
       };
     }
     return Promise.resolve({ data: data, packets: packets });
@@ -327,7 +334,7 @@
       packets[i] = {
         length: packetLengths[i],
         transferredLength: packetLengths[i],
-        status: device.mojom.UsbTransferStatus.OK
+        status: mojom.UsbTransferStatus.OK
       };
     }
     return Promise.resolve({ packets: packets });
@@ -336,7 +343,7 @@
 
 class FakeWebUsbService {
   constructor() {
-    this.bindingSet_ = new mojo.BindingSet(blink.mojom.WebUsbService);
+    this.receiver_ = new mojom.WebUsbServiceReceiver(this);
     this.devices_ = new Map();
     this.devicesByGuid_ = new Map();
     this.client_ = null;
@@ -344,7 +351,7 @@
   }
 
   addBinding(handle) {
-    this.bindingSet_.addBinding(this, handle);
+    this.receiver_.$.bindHandle(handle);
   }
 
   addDevice(fakeDevice, info) {
@@ -352,7 +359,7 @@
       fakeDevice: fakeDevice,
       guid: (this.nextGuid_++).toString(),
       info: info,
-      bindingArray: []
+      receivers: [],
     };
     this.devices_.set(fakeDevice, device);
     this.devicesByGuid_.set(device.guid, device);
@@ -365,8 +372,8 @@
     if (!device)
       throw new Error('Cannot remove unknown device.');
 
-    for (var binding of device.bindingArray)
-      binding.close();
+    for (const receiver of device.receivers)
+      receiver.$.close();
     this.devices_.delete(device.fakeDevice);
     this.devicesByGuid_.delete(device.guid);
     if (this.client_) {
@@ -377,8 +384,8 @@
 
   removeAllDevices() {
     this.devices_.forEach(device => {
-      for (var binding of device.bindingArray)
-        binding.close();
+      for (const receiver of device.receivers)
+        receiver.$.close();
       this.client_.onDeviceRemoved(
           fakeDeviceInitToDeviceInfo(device.guid, device.info));
     });
@@ -397,17 +404,16 @@
   getDevice(guid, request) {
     let retrievedDevice = this.devicesByGuid_.get(guid);
     if (retrievedDevice) {
-      let binding = new mojo.Binding(
-          device.mojom.UsbDevice,
-          new FakeDevice(retrievedDevice.info),
-          request);
-      binding.setConnectionErrorHandler(() => {
+      const receiver =
+          new mojom.UsbDeviceReceiver(new FakeDevice(retrievedDevice.info));
+      receiver.$.bindHandle(request.handle);
+      receiver.onConnectionError.addListener(() => {
         if (retrievedDevice.fakeDevice.onclose)
           retrievedDevice.fakeDevice.onclose();
       });
-      retrievedDevice.bindingArray.push(binding);
+      retrievedDevice.receivers.push(receiver);
     } else {
-      request.close();
+      request.handle.close();
     }
   }
 
@@ -422,8 +428,8 @@
     });
   }
 
-  setClient(clientInfo) {
-    this.client_ = new device.mojom.UsbDeviceManagerClientAssociatedPtr(clientInfo);
+  setClient(client) {
+    this.client_ = client;
   }
 }
 
@@ -474,9 +480,10 @@
       getMessagePort(window);
     }
 
+    mojom = await loadMojomDefinitions();
     internal.webUsbService = new FakeWebUsbService();
     internal.webUsbServiceInterceptor =
-        new MojoInterfaceInterceptor(blink.mojom.WebUsbService.name);
+        new MojoInterfaceInterceptor(mojom.WebUsbService.$interfaceName);
     internal.webUsbServiceInterceptor.oninterfacerequest =
         e => internal.webUsbService.addBinding(e.handle);
     internal.webUsbServiceInterceptor.start();
@@ -498,7 +505,7 @@
       return new Promise(resolve => {
         internal.messagePort.onmessage = channelEvent => {
           switch (channelEvent.data.type) {
-            case blink.mojom.WebUsbService.name:
+            case mojom.WebUsbService.$interfaceName:
               internal.webUsbService.addBinding(channelEvent.data.handle);
               break;
             case 'Complete':
@@ -507,10 +514,11 @@
           }
         };
         internal.messagePort.postMessage({
-          type: 'Attach' ,
+          type: 'Attach',
           interfaces: [
-            blink.mojom.WebUsbService.name,
-          ]});
+            mojom.WebUsbService.$interfaceName,
+          ]
+        });
       });
     });
   }
diff --git a/third_party/blink/web_tests/external/wpt/url/url-constructor.html b/third_party/blink/web_tests/external/wpt/url/url-constructor.any.js
similarity index 88%
rename from third_party/blink/web_tests/external/wpt/url/url-constructor.html
rename to third_party/blink/web_tests/external/wpt/url/url-constructor.any.js
index 7ddcdc88..153d985f 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-constructor.html
+++ b/third_party/blink/web_tests/external/wpt/url/url-constructor.any.js
@@ -1,9 +1,3 @@
-<!doctype html>
-<meta charset=utf-8>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
 function bURL(url, base) {
   return new URL(url, base || "about:blank")
 }
@@ -41,4 +35,3 @@
 }
 
 promise_test(() => fetch("resources/urltestdata.json").then(res => res.json()).then(runURLTests), "Loading data…");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/url/url-origin.html b/third_party/blink/web_tests/external/wpt/url/url-origin.any.js
similarity index 77%
rename from third_party/blink/web_tests/external/wpt/url/url-origin.html
rename to third_party/blink/web_tests/external/wpt/url/url-origin.any.js
index fccb643..d9ef64c7 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-origin.html
+++ b/third_party/blink/web_tests/external/wpt/url/url-origin.any.js
@@ -1,9 +1,3 @@
-<!doctype html>
-<meta charset=utf-8>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
 promise_test(() => fetch("resources/urltestdata.json").then(res => res.json()).then(runURLTests), "Loading data…");
 
 function bURL(url, base) {
@@ -21,4 +15,3 @@
     }, "Origin parsing: <" + expected.input + "> against <" + expected.base + ">")
   }
 }
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
index 85ff9f1c..542849df 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
@@ -7,6 +7,6 @@
 PASS If a transceiver is stopped locally, setting a locally generated answer should still work
 PASS If a transceiver is stopped remotely, setting a locally generated answer should still work
 PASS If a transceiver is stopped, transceivers, senders and receivers should disappear after offer/answer
-FAIL If a transceiver is stopped, transceivers should end up in state stopped assert_equals: expected "recvonly" but got "stopped"
+FAIL If a transceiver is stopped, transceivers should end up in state stopped assert_equals: expected "stopped" but got "recvonly"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop.html
index 60f6d0c1..766b34d7 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver-stop.html
@@ -148,8 +148,8 @@
   pc2Transceiver = pc2.getTransceivers()[0];
   pc1.getTransceivers()[0].stop();
   await exchangeOfferAnswer(pc1, pc2);
-  assert_equals('stopped', pc1Transceiver.direction);
-  assert_equals('stopped', pc2Transceiver.direction);
+  assert_equals(pc1Transceiver.direction, 'stopped');
+  assert_equals(pc2Transceiver.direction, 'stopped');
 }, 'If a transceiver is stopped, transceivers should end up in state stopped');
 
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/websockets/Create-blocked-port.any.js b/third_party/blink/web_tests/external/wpt/websockets/Create-blocked-port.any.js
index 84728c0..0e8938a 100644
--- a/third_party/blink/web_tests/external/wpt/websockets/Create-blocked-port.any.js
+++ b/third_party/blink/web_tests/external/wpt/websockets/Create-blocked-port.any.js
@@ -58,7 +58,6 @@
   532,  // netnews
   540,  // uucp
   548,  // afp
-  554,  // rtsp
   556,  // remotefs
   563,  // nntp+ssl
   587,  // smtp (outgoing)
diff --git a/third_party/blink/web_tests/external/wpt/websockets/handlers/send-backpressure_wsh.py b/third_party/blink/web_tests/external/wpt/websockets/handlers/send-backpressure_wsh.py
index 40905c3..e59070c 100755
--- a/third_party/blink/web_tests/external/wpt/websockets/handlers/send-backpressure_wsh.py
+++ b/third_party/blink/web_tests/external/wpt/websockets/handlers/send-backpressure_wsh.py
@@ -9,7 +9,12 @@
 # this number too large will result in false positives, when it takes more than
 # 2 seconds to transmit the message anyway. This number was arrived at by
 # trial-and-error.
-MESSAGE_SIZE = 16 * 1024 * 1024
+MESSAGE_SIZE = 1024 * 1024
+
+# With Windows 10 and Python 3, the OS will buffer an entire message in memory
+# and return from send() immediately, even if it is very large. To work around
+# this problem, send multiple messages.
+MESSAGE_COUNT = 16
 
 
 def web_socket_do_extra_handshake(request):
@@ -26,8 +31,10 @@
     # 3 is complete. time.time() can go backwards.
     start_time = time.time()
 
-    # The large message that will be blocked by backpressure.
-    request.ws_stream.send_message(b' ' * MESSAGE_SIZE, binary=True)
+    # The large messages that will be blocked by backpressure.
+    for i in range(MESSAGE_COUNT):
+        request.ws_stream.send_message(b' ' * MESSAGE_SIZE, binary=True)
 
     # Report the time taken to send the large message.
-    request.ws_stream.send_message(six.text_type(time.time() - start_time), binary=False)
+    request.ws_stream.send_message(six.text_type(time.time() - start_time),
+                                   binary=False)
diff --git a/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/backpressure-receive.any.js b/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/backpressure-receive.any.js
index 17c75bd5..662a6a28 100644
--- a/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/backpressure-receive.any.js
+++ b/third_party/blink/web_tests/external/wpt/websockets/stream/tentative/backpressure-receive.any.js
@@ -5,6 +5,7 @@
 
 // Allow for this much timer jitter.
 const JITTER_ALLOWANCE_MS = 200;
+const LARGE_MESSAGE_COUNT = 16;
 
 // This test works by using a server WebSocket handler which sends a large
 // message, and then sends a second message with the time it measured the first
@@ -22,8 +23,10 @@
   // Skip the empty message used to fill the readable queue.
   await reader.read();
 
-  // Skip the large message.
-  await reader.read();
+  // Skip the large messages.
+  for (let i = 0; i < LARGE_MESSAGE_COUNT; ++i) {
+    await reader.read();
+  }
 
   // Read the time it took.
   const { value, done } = await reader.read();
diff --git a/third_party/blink/web_tests/external/wpt/webusb/resources/usb-helpers.js b/third_party/blink/web_tests/external/wpt/webusb/resources/usb-helpers.js
index bb67451..8525da7 100644
--- a/third_party/blink/web_tests/external/wpt/webusb/resources/usb-helpers.js
+++ b/third_party/blink/web_tests/external/wpt/webusb/resources/usb-helpers.js
@@ -16,28 +16,12 @@
   }
 })();
 
-// This function is shared between blink/web_tests/usb and external/wpt/webusb.
-// Only include "/gen/" paths here, which are available in both places.
-async function loadChromiumResources() {
-  const chromiumResources = [
-    '/gen/mojo/public/mojom/base/big_buffer.mojom.js',
-    '/gen/mojo/public/mojom/base/string16.mojom.js',
-    '/gen/url/mojom/url.mojom.js',
-    '/gen/services/device/public/mojom/usb_device.mojom.js',
-    '/gen/services/device/public/mojom/usb_enumeration_options.mojom.js',
-    '/gen/services/device/public/mojom/usb_manager_client.mojom.js',
-    '/gen/third_party/blink/public/mojom/usb/web_usb_service.mojom.js',
-  ];
-  await loadMojoResources(chromiumResources);
-}
-
 function usb_test(func, name, properties) {
   promise_test(async () => {
     assert_implements(navigator.usb, 'missing navigator.usb');
     if (navigator.usb.test === undefined) {
       // Try loading a polyfill for the WebUSB Testing API.
       if (isChromiumBased) {
-        await loadChromiumResources();
         await loadScript('/resources/chromium/webusb-test.js');
       }
     }
diff --git a/third_party/blink/web_tests/http/tests/css/resources/referrer-check.php b/third_party/blink/web_tests/http/tests/css/resources/referrer-check.php
index 69483e0..7a517de 100644
--- a/third_party/blink/web_tests/http/tests/css/resources/referrer-check.php
+++ b/third_party/blink/web_tests/http/tests/css/resources/referrer-check.php
@@ -31,7 +31,7 @@
     "document" => "/css/css-resources-referrer.html",
     "sheet" => "/css/resources/css-resources-referrer.css",
     "importedSheet" => "/css/resources/css-resources-referrer-import.css",
-    "iframe" => "/from/iframe.html"
+    "iframe" => "/css/css-resources-referrer-srcdoc.html"
 );
 
 $from = $_GET["from"];
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/file-system-access-origin-trial-interfaces.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/file-system-access-origin-trial-interfaces.html
deleted file mode 100644
index b806171b..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/file-system-access-origin-trial-interfaces.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate token with the command:
-generate_token.py http://127.0.0.1:8000 NativeFileSystem2 --expire-timestamp=2000000000
--- -->
-<meta http-equiv="origin-trial" content="AmmBxJTKsdbb26LLpdAVmIKBvVxU6fKf6UZDoMXiD+b9bULkOHzUTtZ4dNwHMhI7tZzO+tNgmWCzNK2MLoZsvAEAAABZeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiTmF0aXZlRmlsZVN5c3RlbTIiLCAiZXhwaXJ5IjogMjAwMDAwMDAwMH0=">
-<title>File System Access API - interfaces exposed by origin trial</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/origin-trials-helper.js"></script>
-<script>
-test(t => {
-  OriginTrialsHelper.check_properties_exist(this, {
-    'FileSystemHandle': ['kind', 'name', 'queryPermission', 'requestPermission'],
-    'FileSystemFileHandle': ['getFile', 'createWritable'],
-    'FileSystemDirectoryHandle': ['getFileHandle', 'getDirectoryHandle', 'entries', 'removeEntry'],
-    'FileSystemWritableFileStream': ['write', 'truncate', 'close', 'seek'],
-    'global': ['showOpenFilePicker', 'showSaveFilePicker', 'showDirectoryPicker'],
-  });
-}, 'File System Access API interfaces and properties in Origin-Trial enabled document.');
-</script>
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any-expected.txt
new file mode 100644
index 0000000..e1cae2c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any-expected.txt
@@ -0,0 +1,644 @@
+This is a testharness.js-based test.
+Found 576 tests; 426 PASS, 150 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///tmp/mock/c:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///tmp/mock/c%7C////foo/bar.html"
+FAIL Parsing: <C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///tmp/mock/C%7C/foo/bar"
+FAIL Parsing: </C|\foo\bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///C%7C/foo/bar"
+FAIL Parsing: <//C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file://c%7C/foo/bar"
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <file:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <file:...> against <http://www.example.com/test>
+PASS Parsing: <file:..> against <http://www.example.com/test>
+PASS Parsing: <file:a> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+FAIL Parsing: <..> against <file:///C:/> assert_equals: href expected "file:///C:/" but got "file:///"
+PASS Parsing: <..> against <file:///>
+FAIL Parsing: </> against <file:///C:/a/b> assert_equals: href expected "file:///C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/a/b> assert_equals: href expected "file://h/" but got "file:///"
+FAIL Parsing: <//d:> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> assert_equals: href expected "file:////?fox" but got "file:///?fox"
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file:///#guppy"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file:///localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file:///mouse"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file://host/dir/C%7C"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file://host/D:/dir1/dir2/C%7C"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file://host/dir/C%7C#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file://host/dir/C%7C?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file://host/dir/C%7Ca"
+PASS Parsing: </c:/foo/bar> against <file:///c:/baz/qux>
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///c%7C/foo/bar"
+PASS Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux>
+PASS Parsing: </c:/foo/bar> against <file://host/path>
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
+FAIL Parsing: <file:/C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file:///C%7C/"
+FAIL Parsing: <file://C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file://c%7C/"
+PASS Parsing: <file:> against <about:blank>
+PASS Parsing: <file:?q=v> against <about:blank>
+PASS Parsing: <file:#frag> against <about:blank>
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+PASS Parsing: <\\\.\Y:> against <about:blank>
+PASS Parsing: <file:///y:> against <about:blank>
+PASS Parsing: <file:///y:/> against <about:blank>
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+PASS Parsing: <\\\.\y:> against <about:blank>
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file:///foo"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <file:///.//> against <file:////>
+PASS Parsing: <file:.//p> against <about:blank>
+PASS Parsing: <file:/.//p> against <about:blank>
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+PASS Parsing: <test-a-colon.html> against <a:>
+PASS Parsing: <test-a-colon-b.html> against <a:b>
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> Failed to construct 'URL': Invalid URL
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any.worker-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any.worker-expected.txt
new file mode 100644
index 0000000..e1cae2c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-constructor.any.worker-expected.txt
@@ -0,0 +1,644 @@
+This is a testharness.js-based test.
+Found 576 tests; 426 PASS, 150 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///tmp/mock/c:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///tmp/mock/c%7C////foo/bar.html"
+FAIL Parsing: <C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///tmp/mock/C%7C/foo/bar"
+FAIL Parsing: </C|\foo\bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///C%7C/foo/bar"
+FAIL Parsing: <//C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file://c%7C/foo/bar"
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <file:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <file:...> against <http://www.example.com/test>
+PASS Parsing: <file:..> against <http://www.example.com/test>
+PASS Parsing: <file:a> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+FAIL Parsing: <..> against <file:///C:/> assert_equals: href expected "file:///C:/" but got "file:///"
+PASS Parsing: <..> against <file:///>
+FAIL Parsing: </> against <file:///C:/a/b> assert_equals: href expected "file:///C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/a/b> assert_equals: href expected "file://h/" but got "file:///"
+FAIL Parsing: <//d:> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> assert_equals: href expected "file:////?fox" but got "file:///?fox"
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file:///#guppy"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file:///localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file:///mouse"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file://host/dir/C%7C"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file://host/D:/dir1/dir2/C%7C"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file://host/dir/C%7C#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file://host/dir/C%7C?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file://host/dir/C%7Ca"
+PASS Parsing: </c:/foo/bar> against <file:///c:/baz/qux>
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///c%7C/foo/bar"
+PASS Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux>
+PASS Parsing: </c:/foo/bar> against <file://host/path>
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
+FAIL Parsing: <file:/C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file:///C%7C/"
+FAIL Parsing: <file://C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file://c%7C/"
+PASS Parsing: <file:> against <about:blank>
+PASS Parsing: <file:?q=v> against <about:blank>
+PASS Parsing: <file:#frag> against <about:blank>
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+PASS Parsing: <\\\.\Y:> against <about:blank>
+PASS Parsing: <file:///y:> against <about:blank>
+PASS Parsing: <file:///y:/> against <about:blank>
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+PASS Parsing: <\\\.\y:> against <about:blank>
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file:///foo"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <file:///.//> against <file:////>
+PASS Parsing: <file:.//p> against <about:blank>
+PASS Parsing: <file:/.//p> against <about:blank>
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+PASS Parsing: <test-a-colon.html> against <a:>
+PASS Parsing: <test-a-colon-b.html> against <a:b>
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> Failed to construct 'URL': Invalid URL
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any-expected.txt
new file mode 100644
index 0000000..e6b9139
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 302 PASS, 7 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+PASS Origin parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any.worker-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any.worker-expected.txt
new file mode 100644
index 0000000..e6b9139
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/url/url-origin.any.worker-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 302 PASS, 7 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+PASS Origin parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt b/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
index 596e3c4..208f97b 100644
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
+++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/external/wpt/webrtc/RTCRtpTransceiver-stop-expected.txt
@@ -6,6 +6,6 @@
 PASS If a transceiver is stopped locally, setting a locally generated answer should still work
 PASS If a transceiver is stopped remotely, setting a locally generated answer should still work
 PASS If a transceiver is stopped, transceivers, senders and receivers should disappear after offer/answer
-FAIL If a transceiver is stopped, transceivers should end up in state stopped assert_equals: expected "recvonly" but got "stopped"
+FAIL If a transceiver is stopped, transceivers should end up in state stopped assert_equals: expected "stopped" but got "recvonly"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-allow-popups-report-to.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-allow-popups-report-to.https-expected.txt
new file mode 100644
index 0000000..b964a17
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-allow-popups-report-to.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+PASS coop reporting test reporting same origin with report-to to SAME_ORIGIN with same-origin; report-to="coop-popup-report-endpoint", , , 
+PASS coop reporting test reporting same origin with report-to to CROSS_ORIGIN with same-origin-allow-popups; report-to="coop-popup-report-endpoint", require-corp, , 
+PASS coop reporting test reporting same origin with report-to to CROSS_ORIGIN with same-origin, require-corp, , 
+FAIL verify remaining reports promise_test: Unhandled rejection with value: "coop-report-endpoint not empty"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any-expected.txt
new file mode 100644
index 0000000..e1cae2c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any-expected.txt
@@ -0,0 +1,644 @@
+This is a testharness.js-based test.
+Found 576 tests; 426 PASS, 150 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///tmp/mock/c:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///tmp/mock/c%7C////foo/bar.html"
+FAIL Parsing: <C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///tmp/mock/C%7C/foo/bar"
+FAIL Parsing: </C|\foo\bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///C%7C/foo/bar"
+FAIL Parsing: <//C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file://c%7C/foo/bar"
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <file:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <file:...> against <http://www.example.com/test>
+PASS Parsing: <file:..> against <http://www.example.com/test>
+PASS Parsing: <file:a> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+FAIL Parsing: <..> against <file:///C:/> assert_equals: href expected "file:///C:/" but got "file:///"
+PASS Parsing: <..> against <file:///>
+FAIL Parsing: </> against <file:///C:/a/b> assert_equals: href expected "file:///C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/a/b> assert_equals: href expected "file://h/" but got "file:///"
+FAIL Parsing: <//d:> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> assert_equals: href expected "file:////?fox" but got "file:///?fox"
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file:///#guppy"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file:///localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file:///mouse"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file://host/dir/C%7C"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file://host/D:/dir1/dir2/C%7C"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file://host/dir/C%7C#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file://host/dir/C%7C?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file://host/dir/C%7Ca"
+PASS Parsing: </c:/foo/bar> against <file:///c:/baz/qux>
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///c%7C/foo/bar"
+PASS Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux>
+PASS Parsing: </c:/foo/bar> against <file://host/path>
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
+FAIL Parsing: <file:/C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file:///C%7C/"
+FAIL Parsing: <file://C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file://c%7C/"
+PASS Parsing: <file:> against <about:blank>
+PASS Parsing: <file:?q=v> against <about:blank>
+PASS Parsing: <file:#frag> against <about:blank>
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+PASS Parsing: <\\\.\Y:> against <about:blank>
+PASS Parsing: <file:///y:> against <about:blank>
+PASS Parsing: <file:///y:/> against <about:blank>
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+PASS Parsing: <\\\.\y:> against <about:blank>
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file:///foo"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <file:///.//> against <file:////>
+PASS Parsing: <file:.//p> against <about:blank>
+PASS Parsing: <file:/.//p> against <about:blank>
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+PASS Parsing: <test-a-colon.html> against <a:>
+PASS Parsing: <test-a-colon-b.html> against <a:b>
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> Failed to construct 'URL': Invalid URL
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any.worker-expected.txt
new file mode 100644
index 0000000..e1cae2c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-constructor.any.worker-expected.txt
@@ -0,0 +1,644 @@
+This is a testharness.js-based test.
+Found 576 tests; 426 PASS, 150 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+PASS Parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///tmp/mock/c:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///tmp/mock/c%7C////foo/bar.html"
+FAIL Parsing: <C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///tmp/mock/C%7C/foo/bar"
+FAIL Parsing: </C|\foo\bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file:///C%7C/foo/bar"
+FAIL Parsing: <//C|/foo/bar> against <file:///tmp/mock/path> assert_equals: href expected "file:///C:/foo/bar" but got "file://c%7C/foo/bar"
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Parsing: <file:/example.com/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <file:...> against <http://www.example.com/test>
+PASS Parsing: <file:..> against <http://www.example.com/test>
+PASS Parsing: <file:a> against <http://www.example.com/test>
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+FAIL Parsing: <..> against <file:///C:/> assert_equals: href expected "file:///C:/" but got "file:///"
+PASS Parsing: <..> against <file:///>
+FAIL Parsing: </> against <file:///C:/a/b> assert_equals: href expected "file:///C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///"
+FAIL Parsing: </> against <file://h/a/b> assert_equals: href expected "file://h/" but got "file:///"
+FAIL Parsing: <//d:> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> Failed to construct 'URL': Invalid URL
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> assert_equals: href expected "file:////?fox" but got "file:///?fox"
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file:///#guppy"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file:///localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file:///mouse"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file://host/dir/C%7C"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file://host/D:/dir1/dir2/C%7C"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file://host/dir/C%7C#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file://host/dir/C%7C?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file://host/dir/C%7C/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file://host/dir/C%7Ca"
+PASS Parsing: </c:/foo/bar> against <file:///c:/baz/qux>
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///c%7C/foo/bar"
+PASS Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux>
+PASS Parsing: </c:/foo/bar> against <file://host/path>
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
+FAIL Parsing: <file:/C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file:///C%7C/"
+FAIL Parsing: <file://C|/> against <about:blank> assert_equals: href expected "file:///C:/" but got "file://c%7C/"
+PASS Parsing: <file:> against <about:blank>
+PASS Parsing: <file:?q=v> against <about:blank>
+PASS Parsing: <file:#frag> against <about:blank>
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+PASS Parsing: <\\\.\Y:> against <about:blank>
+PASS Parsing: <file:///y:> against <about:blank>
+PASS Parsing: <file:///y:/> against <about:blank>
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+PASS Parsing: <\\\.\y:> against <about:blank>
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file:///foo"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file:///one/two"
+PASS Parsing: <file:///.//> against <file:////>
+PASS Parsing: <file:.//p> against <about:blank>
+PASS Parsing: <file:/.//p> against <about:blank>
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+PASS Parsing: <test-a-colon.html> against <a:>
+PASS Parsing: <test-a-colon-b.html> against <a:b>
+PASS Parsing: <test-a-colon-slash.html> against <a:/>
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> Failed to construct 'URL': Invalid URL
+PASS Parsing: <test-a-colon-slash-b.html> against <a:/b>
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any-expected.txt
new file mode 100644
index 0000000..e6b9139
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 302 PASS, 7 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+PASS Origin parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any.worker-expected.txt
new file mode 100644
index 0000000..e6b9139
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/url/url-origin.any.worker-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 302 PASS, 7 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+PASS Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+PASS Origin parsing: <c:/foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt
new file mode 100644
index 0000000..64ff6c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt
@@ -0,0 +1,652 @@
+This is a testharness.js-based test.
+Found 576 tests; 409 PASS, 167 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+FAIL Parsing: <a:	 foo.com> against <http://example.org/foo/bar> assert_equals: href expected "a: foo.com" but got "file:///A:/%20foo.com"
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+FAIL Parsing: <c:/foo> against <http://example.org/foo/bar> assert_equals: href expected "c:/foo" but got "file:///C:/foo"
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <file:/example.com/> against <http://example.org/foo/bar> assert_equals: href expected "file:///example.com/" but got "file://example.com/"
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///C:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///C:////foo/bar.html"
+PASS Parsing: <C|/foo/bar> against <file:///tmp/mock/path>
+PASS Parsing: </C|\foo\bar> against <file:///tmp/mock/path>
+PASS Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+FAIL Parsing: <file:/example.com/> against <about:blank> assert_equals: href expected "file:///example.com/" but got "file://example.com/"
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+FAIL Parsing: <file:...> against <http://www.example.com/test> assert_equals: href expected "file:///..." but got "file://.../"
+FAIL Parsing: <file:..> against <http://www.example.com/test> assert_equals: href expected "file:///" but got "file://../"
+FAIL Parsing: <file:a> against <http://www.example.com/test> assert_equals: href expected "file:///a" but got "file://a/"
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+PASS Parsing: <..> against <file:///C:/>
+PASS Parsing: <..> against <file:///>
+PASS Parsing: </> against <file:///C:/a/b>
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/a/b>
+FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file://%23guppy/"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file://localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file://mouse/"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file:///C:"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file:///C:"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file:///C:#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file:///C:?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file:///C:/a"
+FAIL Parsing: </c:/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
+FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
+FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file:/C|/> against <about:blank>
+PASS Parsing: <file://C|/> against <about:blank>
+PASS Parsing: <file:> against <about:blank>
+FAIL Parsing: <file:?q=v> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <file:#frag> against <about:blank> assert_equals: href expected "file:///#frag" but got "file://%23frag/"
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+FAIL Parsing: <\\\.\Y:> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <file:///y:> against <about:blank> assert_equals: href expected "file:///y:" but got "file:///Y:"
+FAIL Parsing: <file:///y:/> against <about:blank> assert_equals: href expected "file:///y:/" but got "file:///Y:/"
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+FAIL Parsing: <\\\.\y:> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file://foo/"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file://one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file://one/two"
+PASS Parsing: <file:///.//> against <file:////>
+FAIL Parsing: <file:.//p> against <about:blank> assert_equals: href expected "file:////p" but got "file://.//p"
+FAIL Parsing: <file:/.//p> against <about:blank> assert_equals: href expected "file:////p" but got "file://.//p"
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+FAIL Parsing: <test-a-colon.html> against <a:> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <test-a-colon-b.html> against <a:b> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <test-a-colon-slash.html> against <a:/> assert_equals: href expected "a:/test-a-colon-slash.html" but got "file:///A:/test-a-colon-slash.html"
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> assert_equals: href expected "a:///test-a-colon-slash-slash.html" but got "file:///A://test-a-colon-slash-slash.html"
+FAIL Parsing: <test-a-colon-slash-b.html> against <a:/b> assert_equals: href expected "a:/test-a-colon-slash-b.html" but got "file:///A:/test-a-colon-slash-b.html"
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> assert_equals: href expected "a://b/test-a-colon-slash-slash-b.html" but got "file:///A://test-a-colon-slash-slash-b.html"
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt
new file mode 100644
index 0000000..64ff6c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt
@@ -0,0 +1,652 @@
+This is a testharness.js-based test.
+Found 576 tests; 409 PASS, 167 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Parsing: <https://test:@test> against <about:blank>
+PASS Parsing: <https://:@test> against <about:blank>
+FAIL Parsing: <non-special://test:@test/x> against <about:blank> assert_equals: href expected "non-special://test@test/x" but got "non-special://test:@test/x"
+FAIL Parsing: <non-special://:@test/x> against <about:blank> assert_equals: href expected "non-special://test/x" but got "non-special://:@test/x"
+PASS Parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Parsing: < foo.com  > against <http://example.org/foo/bar>
+FAIL Parsing: <a:	 foo.com> against <http://example.org/foo/bar> assert_equals: href expected "a: foo.com" but got "file:///A:/%20foo.com"
+PASS Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+FAIL Parsing: <lolscheme:x x#x x> against <about:blank> assert_equals: href expected "lolscheme:x x#x%20x" but got "lolscheme:x x#x x"
+PASS Parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:b/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f: /c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>
+PASS Parsing: <http://f:999999/c> against <http://example.org/foo/bar>
+FAIL Parsing: <non-special://f:999999/c> against <http://example.org/foo/bar> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>
+PASS Parsing: <> against <http://example.org/foo/bar>
+PASS Parsing: <  	> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <:> against <http://example.org/foo/bar>
+PASS Parsing: <:a> against <http://example.org/foo/bar>
+PASS Parsing: <:/> against <http://example.org/foo/bar>
+PASS Parsing: <:\> against <http://example.org/foo/bar>
+PASS Parsing: <:#> against <http://example.org/foo/bar>
+PASS Parsing: <#> against <http://example.org/foo/bar>
+PASS Parsing: <#/> against <http://example.org/foo/bar>
+PASS Parsing: <#\> against <http://example.org/foo/bar>
+PASS Parsing: <#;?> against <http://example.org/foo/bar>
+PASS Parsing: <?> against <http://example.org/foo/bar>
+PASS Parsing: </> against <http://example.org/foo/bar>
+PASS Parsing: <:23> against <http://example.org/foo/bar>
+PASS Parsing: </:23> against <http://example.org/foo/bar>
+PASS Parsing: <::> against <http://example.org/foo/bar>
+PASS Parsing: <::23> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://> against <http://example.org/foo/bar> assert_equals: pathname expected "" but got "//"
+PASS Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <foo://///////> against <http://example.org/foo/bar> assert_equals: pathname expected "///////" but got "/////////"
+FAIL Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> assert_equals: pathname expected "///////bar.com/" but got "/////////bar.com/"
+FAIL Parsing: <foo:////://///> against <http://example.org/foo/bar> assert_equals: pathname expected "//://///" but got "////://///"
+FAIL Parsing: <c:/foo> against <http://example.org/foo/bar> assert_equals: href expected "c:/foo" but got "file:///C:/foo"
+PASS Parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Parsing: <http://[1::2]:3:4> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+FAIL Parsing: <file:/example.com/> against <http://example.org/foo/bar> assert_equals: href expected "file:///example.com/" but got "file://example.com/"
+PASS Parsing: <file://example:1/> against <about:blank>
+PASS Parsing: <file://example:test/> against <about:blank>
+PASS Parsing: <file://example%/> against <about:blank>
+PASS Parsing: <file://[example]/> against <about:blank>
+PASS Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Parsing: <#β> against <http://example.org/foo/bar>
+PASS Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Parsing: <tel:1234567890> against <http://example.org/foo/bar>
+FAIL Parsing: <ssh://example.com/foo/bar.git> against <http://example.org/> assert_equals: host expected "example.com" but got ""
+FAIL Parsing: <file:c:\foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:/foo/bar.html" but got "file:///C:/foo/bar.html"
+FAIL Parsing: <  File:c|////foo\bar.html> against <file:///tmp/mock/path> assert_equals: href expected "file:///c:////foo/bar.html" but got "file:///C:////foo/bar.html"
+PASS Parsing: <C|/foo/bar> against <file:///tmp/mock/path>
+PASS Parsing: </C|\foo\bar> against <file:///tmp/mock/path>
+PASS Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>
+PASS Parsing: <//server/file> against <file:///tmp/mock/path>
+PASS Parsing: <\\server\file> against <file:///tmp/mock/path>
+PASS Parsing: </\server/file> against <file:///tmp/mock/path>
+PASS Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>
+PASS Parsing: <file:///home/me> against <file:///tmp/mock/path>
+PASS Parsing: <//> against <file:///tmp/mock/path>
+PASS Parsing: <///> against <file:///tmp/mock/path>
+PASS Parsing: <///test> against <file:///tmp/mock/path>
+PASS Parsing: <file://test> against <file:///tmp/mock/path>
+FAIL Parsing: <file://localhost> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/> against <file:///tmp/mock/path> assert_equals: href expected "file:///" but got "file://localhost/"
+FAIL Parsing: <file://localhost/test> against <file:///tmp/mock/path> assert_equals: href expected "file:///test" but got "file://localhost/test"
+PASS Parsing: <test> against <file:///tmp/mock/path>
+PASS Parsing: <file:test> against <file:///tmp/mock/path>
+PASS Parsing: <http://example.com/././foo> against <about:blank>
+PASS Parsing: <http://example.com/./.foo> against <about:blank>
+PASS Parsing: <http://example.com/foo/.> against <about:blank>
+PASS Parsing: <http://example.com/foo/./> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
+FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/%2e%2" but got "http://example.com/foo/.%2"
+FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/%2e.bar" but got "http://example.com/..bar"
+PASS Parsing: <http://example.com////../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Parsing: <http://example.com/foo> against <about:blank>
+PASS Parsing: <http://example.com/%20foo> against <about:blank>
+PASS Parsing: <http://example.com/foo%> against <about:blank>
+PASS Parsing: <http://example.com/foo%2> against <about:blank>
+PASS Parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Parsing: <http://example.com/foo%2©zbar> against <about:blank>
+FAIL Parsing: <http://example.com/foo%41%7a> against <about:blank> assert_equals: href expected "http://example.com/foo%41%7a" but got "http://example.com/fooAz"
+PASS Parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Parsing: <http://example.com/你好你好> against <about:blank>
+PASS Parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Parsing: <http://example.com//foo> against <about:blank>
+PASS Parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+FAIL Parsing: <data:test# »> against <about:blank> assert_equals: href expected "data:test#%20%C2%BB" but got "data:test# %C2%BB"
+PASS Parsing: <http://www.google.com> against <about:blank>
+PASS Parsing: <http://192.0x00A80001> against <about:blank>
+FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo%2Ehtml" but got "http://www/foo.html"
+PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Parsing: <http://user:pass@/> against <about:blank>
+PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Parsing: <http://foo:80/> against <about:blank>
+PASS Parsing: <http://foo:81/> against <about:blank>
+FAIL Parsing: <httpa://foo:80/> against <about:blank> assert_equals: host expected "foo:80" but got ""
+PASS Parsing: <http://foo:-80/> against <about:blank>
+PASS Parsing: <https://foo:443/> against <about:blank>
+PASS Parsing: <https://foo:80/> against <about:blank>
+PASS Parsing: <ftp://foo:21/> against <about:blank>
+PASS Parsing: <ftp://foo:80/> against <about:blank>
+FAIL Parsing: <gopher://foo:70/> against <about:blank> assert_equals: host expected "foo:70" but got ""
+FAIL Parsing: <gopher://foo:443/> against <about:blank> assert_equals: host expected "foo:443" but got ""
+PASS Parsing: <ws://foo:80/> against <about:blank>
+PASS Parsing: <ws://foo:81/> against <about:blank>
+PASS Parsing: <ws://foo:443/> against <about:blank>
+PASS Parsing: <ws://foo:815/> against <about:blank>
+PASS Parsing: <wss://foo:80/> against <about:blank>
+PASS Parsing: <wss://foo:81/> against <about:blank>
+PASS Parsing: <wss://foo:443/> against <about:blank>
+PASS Parsing: <wss://foo:815/> against <about:blank>
+PASS Parsing: <http:/example.com/> against <about:blank>
+PASS Parsing: <ftp:/example.com/> against <about:blank>
+PASS Parsing: <https:/example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:/example.com/> against <about:blank>
+FAIL Parsing: <file:/example.com/> against <about:blank> assert_equals: href expected "file:///example.com/" but got "file://example.com/"
+PASS Parsing: <ftps:/example.com/> against <about:blank>
+PASS Parsing: <gopher:/example.com/> against <about:blank>
+PASS Parsing: <ws:/example.com/> against <about:blank>
+PASS Parsing: <wss:/example.com/> against <about:blank>
+PASS Parsing: <data:/example.com/> against <about:blank>
+PASS Parsing: <javascript:/example.com/> against <about:blank>
+PASS Parsing: <mailto:/example.com/> against <about:blank>
+PASS Parsing: <http:example.com/> against <about:blank>
+PASS Parsing: <ftp:example.com/> against <about:blank>
+PASS Parsing: <https:example.com/> against <about:blank>
+PASS Parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Parsing: <ftps:example.com/> against <about:blank>
+PASS Parsing: <gopher:example.com/> against <about:blank>
+PASS Parsing: <ws:example.com/> against <about:blank>
+PASS Parsing: <wss:example.com/> against <about:blank>
+PASS Parsing: <data:example.com/> against <about:blank>
+PASS Parsing: <javascript:example.com/> against <about:blank>
+PASS Parsing: <mailto:example.com/> against <about:blank>
+PASS Parsing: <http:@www.example.com> against <about:blank>
+PASS Parsing: <http:/@www.example.com> against <about:blank>
+PASS Parsing: <http://@www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Parsing: <http://@pple.com> against <about:blank>
+PASS Parsing: <http::b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Parsing: <http://:b@www.example.com> against <about:blank>
+PASS Parsing: <http:/:@/www.example.com> against <about:blank>
+PASS Parsing: <http://user@/www.example.com> against <about:blank>
+PASS Parsing: <http:@/www.example.com> against <about:blank>
+PASS Parsing: <http:/@/www.example.com> against <about:blank>
+PASS Parsing: <http://@/www.example.com> against <about:blank>
+PASS Parsing: <https:@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http:/a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http://a:b@/www.example.com> against <about:blank>
+PASS Parsing: <http::@/www.example.com> against <about:blank>
+PASS Parsing: <http:a:@www.example.com> against <about:blank>
+PASS Parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Parsing: <http://a:@www.example.com> against <about:blank>
+PASS Parsing: <http://www.@pple.com> against <about:blank>
+PASS Parsing: <http:@:www.example.com> against <about:blank>
+PASS Parsing: <http:/@:www.example.com> against <about:blank>
+PASS Parsing: <http://@:www.example.com> against <about:blank>
+PASS Parsing: <http://:@www.example.com> against <about:blank>
+PASS Parsing: </> against <http://www.example.com/test>
+PASS Parsing: </test.txt> against <http://www.example.com/test>
+PASS Parsing: <.> against <http://www.example.com/test>
+PASS Parsing: <..> against <http://www.example.com/test>
+PASS Parsing: <test.txt> against <http://www.example.com/test>
+PASS Parsing: <./test.txt> against <http://www.example.com/test>
+PASS Parsing: <../test.txt> against <http://www.example.com/test>
+PASS Parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Parsing: <//www.example2.com> against <http://www.example.com/test>
+FAIL Parsing: <file:...> against <http://www.example.com/test> assert_equals: href expected "file:///..." but got "file://.../"
+FAIL Parsing: <file:..> against <http://www.example.com/test> assert_equals: href expected "file:///" but got "file://../"
+FAIL Parsing: <file:a> against <http://www.example.com/test> assert_equals: href expected "file:///a" but got "file://a/"
+PASS Parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+FAIL Parsing: <http://example example.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://[]> against <http://other.com/>
+PASS Parsing: <http://[:]> against <http://other.com/>
+FAIL Parsing: <http://GOO  goo.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Parsing: <http://﷐zyx.com> against <http://other.com/>
+PASS Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>
+PASS Parsing: <https://�> against <about:blank>
+PASS Parsing: <https://%EF%BF%BD> against <about:blank>
+PASS Parsing: <https://x/�?�#�> against <about:blank>
+PASS Parsing: <http://Go.com> against <http://other.com/>
+FAIL Parsing: <http://%41.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://%00.com> against <http://other.com/>
+PASS Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>
+PASS Parsing: <http://你好你好> against <http://other.com/>
+FAIL Parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: href expected "https://xn--fa-hia.example/" but got "https://fass.example/"
+FAIL Parsing: <sc://faß.ExAmPlE/> against <about:blank> assert_equals: host expected "fa%C3%9F.ExAmPlE" but got ""
+PASS Parsing: <http://%zz%66%a.com> against <http://other.com/>
+PASS Parsing: <http://%25> against <http://other.com/>
+PASS Parsing: <http://hello%00> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Parsing: <http://192.168.0.257> against <http://other.com/>
+PASS Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>
+FAIL Parsing: <http://192.168.0.1 hello> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <https://x x:12> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Parsing: <http://./> against <about:blank>
+PASS Parsing: <http://../> against <about:blank>
+PASS Parsing: <http://0..0x300/> against <about:blank>
+PASS Parsing: <http://[www.google.com]/> against <about:blank>
+PASS Parsing: <http://[google.com]> against <http://other.com/>
+PASS Parsing: <http://[::1.2.3.4x]> against <http://other.com/>
+FAIL Parsing: <http://[::1.2.3.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.2.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://[::1.]> against <http://other.com/> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Parsing: <#> against <test:test>
+PASS Parsing: <#x> against <mailto:x@x.com>
+PASS Parsing: <#x> against <data:,>
+PASS Parsing: <#x> against <about:blank>
+PASS Parsing: <#> against <test:test?test>
+PASS Parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Parsing: <http://host/?'> against <about:blank>
+FAIL Parsing: <notspecial://host/?'> against <about:blank> assert_equals: host expected "host" but got ""
+PASS Parsing: </some/path> against <http://user@example.org/smth>
+PASS Parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Parsing: <i> against <sc:sd>
+PASS Parsing: <i> against <sc:sd/sd>
+PASS Parsing: <i> against <sc:/pa/pa>
+FAIL Parsing: <i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/i" but got "///pa/i"
+PASS Parsing: <../i> against <sc:sd>
+PASS Parsing: <../i> against <sc:sd/sd>
+PASS Parsing: <../i> against <sc:/pa/pa>
+FAIL Parsing: <../i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <../i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: </i> against <sc:sd>
+PASS Parsing: </i> against <sc:sd/sd>
+PASS Parsing: </i> against <sc:/pa/pa>
+FAIL Parsing: </i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: </i> against <sc:///pa/pa> assert_equals: href expected "sc:///i" but got "sc:///pa/i"
+PASS Parsing: <?i> against <sc:sd>
+PASS Parsing: <?i> against <sc:sd/sd>
+PASS Parsing: <?i> against <sc:/pa/pa>
+FAIL Parsing: <?i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <?i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+PASS Parsing: <#i> against <sc:sd>
+PASS Parsing: <#i> against <sc:sd/sd>
+PASS Parsing: <#i> against <sc:/pa/pa>
+FAIL Parsing: <#i> against <sc://ho/pa> assert_equals: host expected "ho" but got ""
+FAIL Parsing: <#i> against <sc:///pa/pa> assert_equals: pathname expected "/pa/pa" but got "///pa/pa"
+FAIL Parsing: <about:/../> against <about:blank> assert_equals: href expected "about:/" but got "about:/../"
+FAIL Parsing: <data:/../> against <about:blank> assert_equals: href expected "data:/" but got "data:/../"
+FAIL Parsing: <javascript:/../> against <about:blank> assert_equals: href expected "javascript:/" but got "javascript:/../"
+FAIL Parsing: <mailto:/../> against <about:blank> assert_equals: href expected "mailto:/" but got "mailto:/../"
+FAIL Parsing: <sc://ñ.test/> against <about:blank> assert_equals: host expected "%C3%B1.test" but got ""
+FAIL Parsing: <sc://\0/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc:// /> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://%/> against <about:blank> assert_equals: host expected "%" but got ""
+FAIL Parsing: <sc://@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://te@s:t@/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://:12/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://[/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://\/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <sc://]/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Parsing: <sc:\../> against <about:blank>
+PASS Parsing: <sc::a@example.net> against <about:blank>
+PASS Parsing: <wow:%NBD> against <about:blank>
+PASS Parsing: <wow:%1G> against <about:blank>
+FAIL Parsing: <wow:￿> against <about:blank> assert_equals: href expected "wow:%EF%BF%BF" but got "wow:%EF%BF%BD"
+FAIL Parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <http://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <http://a^b> against <about:blank>
+FAIL Parsing: <non-special://a<b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a>b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <non-special://a^b> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank> assert_equals: host expected "%1F!\"$&'()*+,-.;=_`{|}~" but got ""
+PASS Parsing: <ftp://example.com%80/> against <about:blank>
+PASS Parsing: <ftp://example.com%A0/> against <about:blank>
+PASS Parsing: <https://example.com%80/> against <about:blank>
+PASS Parsing: <https://example.com%A0/> against <about:blank>
+PASS Parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Parsing: <https://%e2%98%83> against <about:blank>
+PASS Parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <http://example.org/foo/bar>
+PASS Parsing: <http:> against <https://example.org/foo/bar>
+PASS Parsing: <sc:> against <https://example.org/foo/bar>
+PASS Parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Parsing: <http://192.168.257> against <http://other.com/>
+PASS Parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Parsing: <http://256> against <http://other.com/>
+PASS Parsing: <http://256.com> against <http://other.com/>
+PASS Parsing: <http://999999999> against <http://other.com/>
+PASS Parsing: <http://999999999.com> against <http://other.com/>
+PASS Parsing: <http://10000000000> against <http://other.com/>
+PASS Parsing: <http://10000000000.com> against <http://other.com/>
+PASS Parsing: <http://4294967295> against <http://other.com/>
+PASS Parsing: <http://4294967296> against <http://other.com/>
+PASS Parsing: <http://0xffffffff> against <http://other.com/>
+PASS Parsing: <http://0xffffffff1> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256> against <http://other.com/>
+PASS Parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Parsing: <https://0x.0x.0> against <about:blank>
+PASS Parsing: <https://0x100000000/test> against <about:blank>
+PASS Parsing: <https://256.0.0.1/test> against <about:blank>
+PASS Parsing: <file:///C%3A/> against <about:blank>
+PASS Parsing: <file:///C%7C/> against <about:blank>
+PASS Parsing: <pix/submit.gif> against <file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html>
+PASS Parsing: <..> against <file:///C:/>
+PASS Parsing: <..> against <file:///>
+PASS Parsing: </> against <file:///C:/a/b>
+FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/a/b>
+FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
+FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
+PASS Parsing: <..> against <file:///ab:/>
+PASS Parsing: <..> against <file:///1:/>
+PASS Parsing: <> against <file:///test?test#test>
+PASS Parsing: <file:> against <file:///test?test#test>
+PASS Parsing: <?x> against <file:///test?test#test>
+PASS Parsing: <file:?x> against <file:///test?test#test>
+PASS Parsing: <#x> against <file:///test?test#test>
+PASS Parsing: <file:#x> against <file:///test?test#test>
+FAIL Parsing: <file:\\//> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\> against <about:blank> assert_equals: href expected "file:////" but got "file:///"
+FAIL Parsing: <file:\\\\?fox> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <file:\\\\#guppy> against <about:blank> assert_equals: href expected "file:////#guppy" but got "file://%23guppy/"
+PASS Parsing: <file://spider///> against <about:blank>
+FAIL Parsing: <file:\\localhost//> against <about:blank> assert_equals: href expected "file:////" but got "file://localhost//"
+PASS Parsing: <file:///localhost//cat> against <about:blank>
+FAIL Parsing: <file://\/localhost//cat> against <about:blank> assert_equals: href expected "file:////localhost//cat" but got "file://localhost//cat"
+FAIL Parsing: <file://localhost//a//../..//> against <about:blank> assert_equals: href expected "file://///" but got "file://localhost///"
+FAIL Parsing: </////mouse> against <file:///elephant> assert_equals: href expected "file://///mouse" but got "file://mouse/"
+PASS Parsing: <\//pig> against <file://lion/>
+FAIL Parsing: <\/localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+FAIL Parsing: <//localhost//pig> against <file://lion/> assert_equals: href expected "file:////pig" but got "file://localhost//pig"
+PASS Parsing: </..//localhost//pig> against <file://lion/>
+PASS Parsing: <file://> against <file://ape/>
+PASS Parsing: </rooibos> against <file://tea/>
+PASS Parsing: </?chai> against <file://tea/>
+FAIL Parsing: <C|> against <file://host/dir/file> assert_equals: href expected "file://host/C:" but got "file:///C:"
+FAIL Parsing: <C|> against <file://host/D:/dir1/dir2/file> assert_equals: href expected "file://host/C:" but got "file:///C:"
+FAIL Parsing: <C|#> against <file://host/dir/file> assert_equals: href expected "file://host/C:#" but got "file:///C:#"
+FAIL Parsing: <C|?> against <file://host/dir/file> assert_equals: href expected "file://host/C:?" but got "file:///C:?"
+FAIL Parsing: <C|/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+FAIL Parsing: <C|
+/> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+FAIL Parsing: <C|\> against <file://host/dir/file> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
+PASS Parsing: <C> against <file://host/dir/file>
+FAIL Parsing: <C|a> against <file://host/dir/file> assert_equals: href expected "file://host/dir/C|a" but got "file:///C:/a"
+FAIL Parsing: </c:/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
+FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
+FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
+FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file:/C|/> against <about:blank>
+PASS Parsing: <file://C|/> against <about:blank>
+PASS Parsing: <file:> against <about:blank>
+FAIL Parsing: <file:?q=v> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <file:#frag> against <about:blank> assert_equals: href expected "file:///#frag" but got "file://%23frag/"
+PASS Parsing: <file:///Y:> against <about:blank>
+PASS Parsing: <file:///Y:/> against <about:blank>
+PASS Parsing: <file:///./Y> against <about:blank>
+PASS Parsing: <file:///./Y:> against <about:blank>
+FAIL Parsing: <\\\.\Y:> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <file:///y:> against <about:blank> assert_equals: href expected "file:///y:" but got "file:///Y:"
+FAIL Parsing: <file:///y:/> against <about:blank> assert_equals: href expected "file:///y:/" but got "file:///Y:/"
+PASS Parsing: <file:///./y> against <about:blank>
+PASS Parsing: <file:///./y:> against <about:blank>
+FAIL Parsing: <\\\.\y:> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <file://localhost//a//../..//foo> against <about:blank> assert_equals: href expected "file://///foo" but got "file://localhost///foo"
+FAIL Parsing: <file://localhost////foo> against <about:blank> assert_equals: href expected "file://////foo" but got "file://localhost////foo"
+FAIL Parsing: <file:////foo> against <about:blank> assert_equals: href expected "file:////foo" but got "file://foo/"
+PASS Parsing: <file:///one/two> against <file:///>
+FAIL Parsing: <file:////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file://one/two"
+PASS Parsing: <//one/two> against <file:///>
+PASS Parsing: <///one/two> against <file:///>
+FAIL Parsing: <////one/two> against <file:///> assert_equals: href expected "file:////one/two" but got "file://one/two"
+PASS Parsing: <file:///.//> against <file:////>
+FAIL Parsing: <file:.//p> against <about:blank> assert_equals: href expected "file:////p" but got "file://.//p"
+FAIL Parsing: <file:/.//p> against <about:blank> assert_equals: href expected "file:////p" but got "file://.//p"
+PASS Parsing: <http://[1:0::]> against <http://example.net/>
+PASS Parsing: <http://[0:1:2:3:4:5:6:7:8]> against <http://example.net/>
+PASS Parsing: <https://[0::0::0]> against <about:blank>
+PASS Parsing: <https://[0:.0]> against <about:blank>
+PASS Parsing: <https://[0:0:]> against <about:blank>
+PASS Parsing: <https://[0:1:2:3:4:5:6:7.0.0.0.1]> against <about:blank>
+PASS Parsing: <https://[0:1.00.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.290.0.0.0]> against <about:blank>
+PASS Parsing: <https://[0:1.23.23]> against <about:blank>
+PASS Parsing: <http://?> against <about:blank>
+PASS Parsing: <http://#> against <about:blank>
+PASS Parsing: <http://f:4294967377/c> against <http://example.org/>
+PASS Parsing: <http://f:18446744073709551697/c> against <http://example.org/>
+PASS Parsing: <http://f:340282366920938463463374607431768211537/c> against <http://example.org/>
+FAIL Parsing: <sc://ñ> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ?x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <sc://ñ#x> against <about:blank> assert_equals: host expected "%C3%B1" but got ""
+FAIL Parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <sc://?> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <sc://#> against <about:blank> assert_equals: pathname expected "" but got "//"
+FAIL Parsing: <///> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////> against <sc://x/> Failed to construct 'URL': Invalid URL
+FAIL Parsing: <////x/> against <sc://x/> assert_equals: href expected "sc:////x/" but got "sc://x/"
+FAIL Parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank> assert_equals: host expected "foobar.com" but got ""
+FAIL Parsing: <telnet://user:pass@foobar.com:23/> against <about:blank> assert_equals: username expected "user" but got ""
+FAIL Parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank> assert_equals: host expected "10.10.10.10:7777" but got ""
+FAIL Parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <rsync://foo@host:911/sup> against <about:blank> assert_equals: username expected "foo" but got ""
+FAIL Parsing: <git://github.com/foo/bar.git> against <about:blank> assert_equals: host expected "github.com" but got ""
+FAIL Parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank> assert_equals: host expected "myserver.com:6999" but got ""
+FAIL Parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank> assert_equals: host expected "fw.example.org:9999" but got ""
+FAIL Parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank> assert_equals: host expected "localhost:389" but got ""
+FAIL Parsing: <git+https://github.com/foo/bar> against <about:blank> assert_equals: host expected "github.com" but got ""
+PASS Parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+FAIL Parsing: <non-spec:/.//> against <about:blank> assert_equals: pathname expected "//" but got "/.//"
+FAIL Parsing: <non-spec:/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/..//"
+FAIL Parsing: <non-spec:/a/..//> against <about:blank> assert_equals: href expected "non-spec:/.//" but got "non-spec:/a/..//"
+FAIL Parsing: <non-spec:/.//path> against <about:blank> assert_equals: pathname expected "//path" but got "/.//path"
+FAIL Parsing: <non-spec:/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <non-spec:/a/..//path> against <about:blank> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/a/..//path"
+FAIL Parsing: </.//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: </..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <a/..//path> against <non-spec:/p> assert_equals: href expected "non-spec:/.//path" but got "non-spec://path"
+FAIL Parsing: <> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//p" but got "non-spec:/..//p"
+FAIL Parsing: <path> against <non-spec:/..//p> assert_equals: href expected "non-spec:/.//path" but got "non-spec:/..//path"
+FAIL Parsing: <../path> against <non-spec:/.//p> assert_equals: href expected "non-spec:/path" but got "non-spec:/./path"
+FAIL Parsing: <non-special://%E2%80%A0/> against <about:blank> assert_equals: host expected "%E2%80%A0" but got ""
+FAIL Parsing: <non-special://H%4fSt/path> against <about:blank> assert_equals: host expected "H%4fSt" but got ""
+FAIL Parsing: <non-special://[1:2:0:0:5:0:0:0]/> against <about:blank> assert_equals: href expected "non-special://[1:2:0:0:5::]/" but got "non-special://[1:2:0:0:5:0:0:0]/"
+FAIL Parsing: <non-special://[1:2:0:0:0:0:0:3]/> against <about:blank> assert_equals: href expected "non-special://[1:2::3]/" but got "non-special://[1:2:0:0:0:0:0:3]/"
+FAIL Parsing: <non-special://[1:2::3]:80/> against <about:blank> assert_equals: host expected "[1:2::3]:80" but got ""
+FAIL Parsing: <non-special://[:80/> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <blob:https://example.com:443/> against <about:blank>
+PASS Parsing: <blob:d3958f5c-0777-0845-9dcf-2cb28783acaf> against <about:blank>
+PASS Parsing: <http://0177.0.0.0189> against <about:blank>
+PASS Parsing: <http://0x7f.0.0.0x7g> against <about:blank>
+PASS Parsing: <http://0X7F.0.0.0X7G> against <about:blank>
+PASS Parsing: <http://[::127.0.0.0.1]> against <about:blank>
+PASS Parsing: <http://[0:1:0:1:0:1:0:1]> against <about:blank>
+PASS Parsing: <http://[1:0:1:0:1:0:1:0]> against <about:blank>
+PASS Parsing: <http://example.org/test?"> against <about:blank>
+PASS Parsing: <http://example.org/test?#> against <about:blank>
+PASS Parsing: <http://example.org/test?<> against <about:blank>
+PASS Parsing: <http://example.org/test?>> against <about:blank>
+PASS Parsing: <http://example.org/test?⌣> against <about:blank>
+PASS Parsing: <http://example.org/test?%23%23> against <about:blank>
+PASS Parsing: <http://example.org/test?%GH> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%EF> against <about:blank>
+PASS Parsing: <http://example.org/test?a#%GH> against <about:blank>
+PASS Parsing: <a> against <about:blank>
+PASS Parsing: <a/> against <about:blank>
+PASS Parsing: <a//> against <about:blank>
+FAIL Parsing: <test-a-colon.html> against <a:> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <test-a-colon-b.html> against <a:b> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+FAIL Parsing: <test-a-colon-slash.html> against <a:/> assert_equals: href expected "a:/test-a-colon-slash.html" but got "file:///A:/test-a-colon-slash.html"
+FAIL Parsing: <test-a-colon-slash-slash.html> against <a://> assert_equals: href expected "a:///test-a-colon-slash-slash.html" but got "file:///A://test-a-colon-slash-slash.html"
+FAIL Parsing: <test-a-colon-slash-b.html> against <a:/b> assert_equals: href expected "a:/test-a-colon-slash-b.html" but got "file:///A:/test-a-colon-slash-b.html"
+FAIL Parsing: <test-a-colon-slash-slash-b.html> against <a://b> assert_equals: href expected "a://b/test-a-colon-slash-slash-b.html" but got "file:///A://test-a-colon-slash-slash-b.html"
+FAIL Parsing: <http://example.org/test?a#b\0c> against <about:blank> assert_equals: href expected "http://example.org/test?a#b%00c" but got "http://example.org/test?a#bc"
+FAIL Parsing: <non-spec://example.org/test?a#b\0c> against <about:blank> assert_equals: host expected "example.org" but got ""
+PASS Parsing: <non-spec:/test?a#b\0c> against <about:blank>
+PASS Parsing: <10.0.0.7:8080/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a!@$*=/foo.html> against <file:///some/dir/bar.html>
+PASS Parsing: <a1234567890-+.:foo/bar> against <http://example.com/dir/file>
+PASS Parsing: <file://a­b/p> against <about:blank>
+PASS Parsing: <file://a%C2%ADb/p> against <about:blank>
+PASS Parsing: <file://­/p> against <about:blank>
+PASS Parsing: <file://%C2%AD/p> against <about:blank>
+FAIL Parsing: <file://xn--/p> against <about:blank> assert_throws_js: function "function() {
+          bURL(expected.input, expected.base)
+        }" did not throw
+PASS Parsing: <#link> against <https://example.org/##link>
+PASS Parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any-expected.txt
new file mode 100644
index 0000000..e1d5a678
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 300 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+FAIL Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar> assert_equals: origin expected "null" but got "file://"
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+FAIL Origin parsing: <c:/foo> against <http://example.org/foo/bar> assert_equals: origin expected "null" but got "file://"
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any.worker-expected.txt
new file mode 100644
index 0000000..e1d5a678
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-origin.any.worker-expected.txt
@@ -0,0 +1,322 @@
+This is a testharness.js-based test.
+Found 309 tests; 300 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Loading data…
+PASS Origin parsing: <http://example	.
+org> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>
+PASS Origin parsing: <https://test:@test> against <about:blank>
+PASS Origin parsing: <https://:@test> against <about:blank>
+PASS Origin parsing: <non-special://test:@test/x> against <about:blank>
+PASS Origin parsing: <non-special://:@test/x> against <about:blank>
+PASS Origin parsing: <http:foo.com> against <http://example.org/foo/bar>
+PASS Origin parsing: <	   :foo.com   
+> against <http://example.org/foo/bar>
+PASS Origin parsing: < foo.com  > against <http://example.org/foo/bar>
+FAIL Origin parsing: <a:	 foo.com> against <http://example.org/foo/bar> assert_equals: origin expected "null" but got "file://"
+PASS Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:0/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://f:
+/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <> against <http://example.org/foo/bar>
+PASS Origin parsing: <  	> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:> against <http://example.org/foo/bar>
+PASS Origin parsing: <:a> against <http://example.org/foo/bar>
+PASS Origin parsing: <:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <:\> against <http://example.org/foo/bar>
+PASS Origin parsing: <:#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#> against <http://example.org/foo/bar>
+PASS Origin parsing: <#/> against <http://example.org/foo/bar>
+PASS Origin parsing: <#\> against <http://example.org/foo/bar>
+PASS Origin parsing: <#;?> against <http://example.org/foo/bar>
+PASS Origin parsing: <?> against <http://example.org/foo/bar>
+PASS Origin parsing: </> against <http://example.org/foo/bar>
+PASS Origin parsing: <:23> against <http://example.org/foo/bar>
+PASS Origin parsing: </:23> against <http://example.org/foo/bar>
+PASS Origin parsing: <::> against <http://example.org/foo/bar>
+PASS Origin parsing: <::23> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http::@c:29> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <foo:////://///> against <http://example.org/foo/bar>
+FAIL Origin parsing: <c:/foo> against <http://example.org/foo/bar> assert_equals: origin expected "null" but got "file://"
+PASS Origin parsing: <//foo/bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>
+PASS Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar>
+PASS Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <https:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <ws:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <wss:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/b/c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/ /c> against <http://example.org/foo/bar>
+PASS Origin parsing: </a%2fc> against <http://example.org/foo/bar>
+PASS Origin parsing: </a/%2f/c> against <http://example.org/foo/bar>
+PASS Origin parsing: <#β> against <http://example.org/foo/bar>
+PASS Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar>
+PASS Origin parsing: <tel:1234567890> against <http://example.org/foo/bar>
+PASS Origin parsing: <ssh://example.com/foo/bar.git> against <http://example.org/>
+PASS Origin parsing: <http://example.com/././foo> against <about:blank>
+PASS Origin parsing: <http://example.com/./.foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/.> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/./> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/..bar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/../../../ton> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
+PASS Origin parsing: <http://example.com////../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//../..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo/bar//..> against <about:blank>
+PASS Origin parsing: <http://example.com/foo> against <about:blank>
+PASS Origin parsing: <http://example.com/%20foo> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%2©zbar> against <about:blank>
+PASS Origin parsing: <http://example.com/foo%41%7a> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	‘%91> against <about:blank>
+FAIL Origin parsing: <http://example.com/foo%00%51> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank>
+PASS Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>
+PASS Origin parsing: <http://example.com/foo	bar> against <about:blank>
+PASS Origin parsing: <http://example.com\\foo\\bar> against <about:blank>
+PASS Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>
+PASS Origin parsing: <http://example.com/@asdf%40> against <about:blank>
+PASS Origin parsing: <http://example.com/你好你好> against <about:blank>
+PASS Origin parsing: <http://example.com/‥/foo> against <about:blank>
+PASS Origin parsing: <http://example.com//foo> against <about:blank>
+PASS Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>
+PASS Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>
+PASS Origin parsing: <data:test# »> against <about:blank>
+PASS Origin parsing: <http://www.google.com> against <about:blank>
+PASS Origin parsing: <http://192.0x00A80001> against <about:blank>
+PASS Origin parsing: <http://www/foo%2Ehtml> against <about:blank>
+PASS Origin parsing: <http://www/foo/%2E/html> against <about:blank>
+PASS Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
+PASS Origin parsing: <http:\\www.google.com\foo> against <about:blank>
+PASS Origin parsing: <http://foo:80/> against <about:blank>
+PASS Origin parsing: <http://foo:81/> against <about:blank>
+PASS Origin parsing: <httpa://foo:80/> against <about:blank>
+PASS Origin parsing: <https://foo:443/> against <about:blank>
+PASS Origin parsing: <https://foo:80/> against <about:blank>
+PASS Origin parsing: <ftp://foo:21/> against <about:blank>
+PASS Origin parsing: <ftp://foo:80/> against <about:blank>
+PASS Origin parsing: <gopher://foo:70/> against <about:blank>
+PASS Origin parsing: <gopher://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:80/> against <about:blank>
+PASS Origin parsing: <ws://foo:81/> against <about:blank>
+PASS Origin parsing: <ws://foo:443/> against <about:blank>
+PASS Origin parsing: <ws://foo:815/> against <about:blank>
+PASS Origin parsing: <wss://foo:80/> against <about:blank>
+PASS Origin parsing: <wss://foo:81/> against <about:blank>
+PASS Origin parsing: <wss://foo:443/> against <about:blank>
+PASS Origin parsing: <wss://foo:815/> against <about:blank>
+PASS Origin parsing: <http:/example.com/> against <about:blank>
+PASS Origin parsing: <ftp:/example.com/> against <about:blank>
+PASS Origin parsing: <https:/example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:/example.com/> against <about:blank>
+PASS Origin parsing: <ftps:/example.com/> against <about:blank>
+PASS Origin parsing: <gopher:/example.com/> against <about:blank>
+PASS Origin parsing: <ws:/example.com/> against <about:blank>
+PASS Origin parsing: <wss:/example.com/> against <about:blank>
+PASS Origin parsing: <data:/example.com/> against <about:blank>
+PASS Origin parsing: <javascript:/example.com/> against <about:blank>
+PASS Origin parsing: <mailto:/example.com/> against <about:blank>
+PASS Origin parsing: <http:example.com/> against <about:blank>
+PASS Origin parsing: <ftp:example.com/> against <about:blank>
+PASS Origin parsing: <https:example.com/> against <about:blank>
+PASS Origin parsing: <madeupscheme:example.com/> against <about:blank>
+PASS Origin parsing: <ftps:example.com/> against <about:blank>
+PASS Origin parsing: <gopher:example.com/> against <about:blank>
+PASS Origin parsing: <ws:example.com/> against <about:blank>
+PASS Origin parsing: <wss:example.com/> against <about:blank>
+PASS Origin parsing: <data:example.com/> against <about:blank>
+PASS Origin parsing: <javascript:example.com/> against <about:blank>
+PASS Origin parsing: <mailto:example.com/> against <about:blank>
+PASS Origin parsing: <http:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://@pple.com> against <about:blank>
+PASS Origin parsing: <http::b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http://:b@www.example.com> against <about:blank>
+PASS Origin parsing: <http:a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http:/a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://a:@www.example.com> against <about:blank>
+PASS Origin parsing: <http://www.@pple.com> against <about:blank>
+PASS Origin parsing: <http://:@www.example.com> against <about:blank>
+PASS Origin parsing: </> against <http://www.example.com/test>
+PASS Origin parsing: </test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <.> against <http://www.example.com/test>
+PASS Origin parsing: <..> against <http://www.example.com/test>
+PASS Origin parsing: <test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <./test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../aaa/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <../../test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <中/test.txt> against <http://www.example.com/test>
+PASS Origin parsing: <http://www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <//www.example2.com> against <http://www.example.com/test>
+PASS Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/>
+PASS Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/>
+PASS Origin parsing: <\0 http://example.com/ \r > against <about:blank>
+PASS Origin parsing: <http://www.foo。bar.com> against <http://other.com/>
+PASS Origin parsing: <https://x/�?�#�> against <about:blank>
+PASS Origin parsing: <http://Go.com> against <http://other.com/>
+PASS Origin parsing: <http://你好你好> against <http://other.com/>
+FAIL Origin parsing: <https://faß.ExAmPlE/> against <about:blank> assert_equals: origin expected "https://xn--fa-hia.example" but got "https://fass.example"
+PASS Origin parsing: <sc://faß.ExAmPlE/> against <about:blank>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>
+PASS Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>
+PASS Origin parsing: <http://0Xc0.0250.01> against <http://other.com/>
+PASS Origin parsing: <http://./> against <about:blank>
+PASS Origin parsing: <http://../> against <about:blank>
+PASS Origin parsing: <http://0..0x300/> against <about:blank>
+PASS Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/>
+PASS Origin parsing: <#> against <test:test>
+PASS Origin parsing: <#x> against <mailto:x@x.com>
+PASS Origin parsing: <#x> against <data:,>
+PASS Origin parsing: <#x> against <about:blank>
+PASS Origin parsing: <#> against <test:test?test>
+PASS Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/>
+PASS Origin parsing: <https://@@@example> against <http://doesnotmatter/>
+PASS Origin parsing: <http://`{}:`{}@h/`{}?`{}> against <http://doesnotmatter/>
+PASS Origin parsing: <http://host/?'> against <about:blank>
+PASS Origin parsing: <notspecial://host/?'> against <about:blank>
+PASS Origin parsing: </some/path> against <http://user@example.org/smth>
+PASS Origin parsing: <> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: </some/path> against <http://user:pass@example.org:21/smth>
+PASS Origin parsing: <i> against <sc:/pa/pa>
+PASS Origin parsing: <i> against <sc://ho/pa>
+PASS Origin parsing: <i> against <sc:///pa/pa>
+PASS Origin parsing: <../i> against <sc:/pa/pa>
+PASS Origin parsing: <../i> against <sc://ho/pa>
+PASS Origin parsing: <../i> against <sc:///pa/pa>
+PASS Origin parsing: </i> against <sc:/pa/pa>
+PASS Origin parsing: </i> against <sc://ho/pa>
+PASS Origin parsing: </i> against <sc:///pa/pa>
+PASS Origin parsing: <?i> against <sc:/pa/pa>
+PASS Origin parsing: <?i> against <sc://ho/pa>
+PASS Origin parsing: <?i> against <sc:///pa/pa>
+PASS Origin parsing: <#i> against <sc:sd>
+PASS Origin parsing: <#i> against <sc:sd/sd>
+PASS Origin parsing: <#i> against <sc:/pa/pa>
+PASS Origin parsing: <#i> against <sc://ho/pa>
+PASS Origin parsing: <#i> against <sc:///pa/pa>
+PASS Origin parsing: <about:/../> against <about:blank>
+PASS Origin parsing: <data:/../> against <about:blank>
+PASS Origin parsing: <javascript:/../> against <about:blank>
+PASS Origin parsing: <mailto:/../> against <about:blank>
+PASS Origin parsing: <sc://ñ.test/> against <about:blank>
+FAIL Origin parsing: <x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc:\../> against <about:blank>
+PASS Origin parsing: <sc::a@example.net> against <about:blank>
+PASS Origin parsing: <wow:%NBD> against <about:blank>
+PASS Origin parsing: <wow:%1G> against <about:blank>
+PASS Origin parsing: <wow:￿> against <about:blank>
+FAIL Origin parsing: <http://example.com/U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿?U+d800𐟾U+dfff﷐﷏﷯ﷰ￾￿> against <about:blank> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <http://!"$&'()*+,-.;=_`{|}~/> against <about:blank> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <sc://!"$&'()*+,-.;=_`{|}~/> against <about:blank>
+PASS Origin parsing: <ftp://%e2%98%83> against <about:blank>
+PASS Origin parsing: <https://%e2%98%83> against <about:blank>
+PASS Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank>
+PASS Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank>
+PASS Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank>
+PASS Origin parsing: <h	t
+t\rp://h	o
+s\rt:9	0
+0\r0/p	a
+t\rh?q	u
+e\rry#f	r
+a\rg> against <about:blank>
+PASS Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar>
+PASS Origin parsing: <http:> against <http://example.org/foo/bar>
+PASS Origin parsing: <sc:> against <https://example.org/foo/bar>
+PASS Origin parsing: <http://foo.bar/baz?qux#foobar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo"bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo<bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo>bar> against <about:blank>
+PASS Origin parsing: <http://foo.bar/baz?qux#foo`bar> against <about:blank>
+PASS Origin parsing: <http://192.168.257> against <http://other.com/>
+PASS Origin parsing: <http://192.168.257.com> against <http://other.com/>
+PASS Origin parsing: <http://256> against <http://other.com/>
+PASS Origin parsing: <http://256.com> against <http://other.com/>
+PASS Origin parsing: <http://999999999> against <http://other.com/>
+PASS Origin parsing: <http://999999999.com> against <http://other.com/>
+PASS Origin parsing: <http://10000000000.com> against <http://other.com/>
+PASS Origin parsing: <http://4294967295> against <http://other.com/>
+PASS Origin parsing: <http://0xffffffff> against <http://other.com/>
+PASS Origin parsing: <http://256.256.256.256.256> against <http://other.com/>
+PASS Origin parsing: <https://0x.0x.0> against <about:blank>
+PASS Origin parsing: <http://[1:0::]> against <http://example.net/>
+PASS Origin parsing: <sc://ñ> against <about:blank>
+PASS Origin parsing: <sc://ñ?x> against <about:blank>
+PASS Origin parsing: <sc://ñ#x> against <about:blank>
+FAIL Origin parsing: <#x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+FAIL Origin parsing: <?x> against <sc://ñ> Failed to construct 'URL': Invalid URL
+PASS Origin parsing: <tftp://foobar.com/someconfig;mode=netascii> against <about:blank>
+PASS Origin parsing: <telnet://user:pass@foobar.com:23/> against <about:blank>
+PASS Origin parsing: <ut2004://10.10.10.10:7777/Index.ut2> against <about:blank>
+PASS Origin parsing: <redis://foo:bar@somehost:6379/0?baz=bam&qux=baz> against <about:blank>
+PASS Origin parsing: <rsync://foo@host:911/sup> against <about:blank>
+PASS Origin parsing: <git://github.com/foo/bar.git> against <about:blank>
+PASS Origin parsing: <irc://myserver.com:6999/channel?passwd> against <about:blank>
+PASS Origin parsing: <dns://fw.example.org:9999/foo.bar.org?type=TXT> against <about:blank>
+PASS Origin parsing: <ldap://localhost:389/ou=People,o=JNDITutorial> against <about:blank>
+PASS Origin parsing: <git+https://github.com/foo/bar> against <about:blank>
+PASS Origin parsing: <urn:ietf:rfc:2648> against <about:blank>
+PASS Origin parsing: <tag:joe@example.org,2001:foo/bar> against <about:blank>
+PASS Origin parsing: <non-special:cannot-be-a-base-url-\0~€> against <about:blank>
+PASS Origin parsing: <https://www.example.com/path{path.html?query'=query#fragment<fragment> against <about:blank>
+PASS Origin parsing: <https://user:pass[@foo/bar> against <http://example.org>
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/README.md b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/README.md
new file mode 100644
index 0000000..91dba719
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/README.md
@@ -0,0 +1 @@
+# This suite runs tests with --enable-features=WebAppWindowControlsOverlay
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/README.txt b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/README.txt
new file mode 100644
index 0000000..ecd0a50
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/README.txt
@@ -0,0 +1,6 @@
+# This suite runs tests with --enable-features=WebAppWindowControlsOverlay
+
+We added a empty expected file so that when the virtual test suite runs, it'll use this empty expected
+file for the test run instead of the normal expected test file here:
+
+third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt
new file mode 100644
index 0000000..40dfc17
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/web-app-window-controls-overlay/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+PASS the windowControlsOverlay object should exist on the navigator object
+PASS visible should be a member of the windowControlsOverlay object
+PASS visible should be false
+PASS getBoundingClientRect should be a method of the windowControlsOverlay object
+PASS getBoundingClientRect return type should be DOMRect
+PASS getBoundingClientRect should return a empty DOMRect
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/README.md b/third_party/blink/web_tests/wpt_internal/origin-isolation/README.md
deleted file mode 100644
index 5b54cce..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Origin Isolation Origin Trial Tests
-
-These tests are for the [Origin Isolation][1] feature, and supplement those in
-`external/wpt` to specifically test Chromium origin trial mechanisms.
-
-The abbreviation `oiot` means "first the `Origin-Trial` header, then the
-`Origin-Isolation` header". Conversely, `otoi` means "first the
-`Origin-Isolation` header, then the `Origin-Trial` header.
-
-The tokens for the `Origin-Trial` header are generated using the commands
-
-    python tools/origin_trials/generate_token.py https://web-platform.test:8444 OriginIsolationHeader --expire-timestamp=2000000000
-    python tools/origin_trials/generate_token.py https://www.web-platform.test:8444 OriginIsolationHeader --expire-timestamp=2000000000
-
-[1]: https://github.com/WICG/origin-isolation
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html
deleted file mode 100644
index 2a288c7..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Origin-Trial header before Origin-Isolation header in parent; OT after OI in child</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<!-- This file is a modification of parent-yes-child-yes-subdomain.sub.https.html from the external WPT suite. -->
-
-<div id="log"></div>
-
-<script type="module">
-import { sendWasmModule, setBothDocumentDomains } from "/origin-isolation/resources/helpers.mjs";
-import { insertIframe } from "./resources/helpers.mjs";
-
-let frameWindow;
-promise_setup(async () => {
-  frameWindow = await insertIframe("{{hosts[][www]}}", "oiot");
-});
-
-// Both request isolation, so the parent ends up in one origin-keyed agent
-// cluster (the base domain's origin), and the child ends up in a different
-// origin-keyed agent cluster (the www subdomain's origin).
-
-promise_test(async () => {
-  const whatHappened = await sendWasmModule(frameWindow);
-
-  assert_equals(whatHappened, "messageerror");
-}, "messageerror event must occur");
-
-promise_test(async () => {
-  await setBothDocumentDomains(frameWindow);
-
-  assert_throws_dom("SecurityError", DOMException, () => {
-    frameWindow.document;
-  });
-}, "setting document.domain must not give sync access");
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html.headers b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html.headers
deleted file mode 100644
index 6265aa6..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-oiot.sub.https.html.headers
+++ /dev/null
@@ -1,2 +0,0 @@
-Origin-Agent-Cluster: ?1
-Origin-Trial: AkwBfk9Djiu2sKAuVhMLUQ3ldCM8nF0QD6eQpx7wWSnmhMs7udZelhv2iJfIjYuj5j77L3htLCv/dAuv/ttfUQEAAABmeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiT3JpZ2luSXNvbGF0aW9uSGVhZGVyIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html
deleted file mode 100644
index a691dc8..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Origin-Trial header before Origin-Isolation header in parent; OT after OI in child</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<!-- This file is a modification of parent-yes-child-yes-subdomain.sub.https.html from the external WPT suite. -->
-
-<div id="log"></div>
-
-<script type="module">
-import { sendWasmModule, setBothDocumentDomains } from "/origin-isolation/resources/helpers.mjs";
-import { insertIframe } from "./resources/helpers.mjs";
-
-let frameWindow;
-promise_setup(async () => {
-  frameWindow = await insertIframe("{{hosts[][www]}}", "otoi");
-});
-
-// Both request isolation, so the parent ends up in one origin-keyed agent
-// cluster (the base domain's origin), and the child ends up in a different
-// origin-keyed agent cluster (the www subdomain's origin).
-
-promise_test(async () => {
-  const whatHappened = await sendWasmModule(frameWindow);
-
-  assert_equals(whatHappened, "messageerror");
-}, "messageerror event must occur");
-
-promise_test(async () => {
-  await setBothDocumentDomains(frameWindow);
-
-  assert_throws_dom("SecurityError", DOMException, () => {
-    frameWindow.document;
-  });
-}, "setting document.domain must not give sync access");
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html.headers b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html.headers
deleted file mode 100644
index 6265aa6..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-oiot-child-otoi.sub.https.html.headers
+++ /dev/null
@@ -1,2 +0,0 @@
-Origin-Agent-Cluster: ?1
-Origin-Trial: AkwBfk9Djiu2sKAuVhMLUQ3ldCM8nF0QD6eQpx7wWSnmhMs7udZelhv2iJfIjYuj5j77L3htLCv/dAuv/ttfUQEAAABmeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiT3JpZ2luSXNvbGF0aW9uSGVhZGVyIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html
deleted file mode 100644
index 2a288c7..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Origin-Trial header before Origin-Isolation header in parent; OT after OI in child</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<!-- This file is a modification of parent-yes-child-yes-subdomain.sub.https.html from the external WPT suite. -->
-
-<div id="log"></div>
-
-<script type="module">
-import { sendWasmModule, setBothDocumentDomains } from "/origin-isolation/resources/helpers.mjs";
-import { insertIframe } from "./resources/helpers.mjs";
-
-let frameWindow;
-promise_setup(async () => {
-  frameWindow = await insertIframe("{{hosts[][www]}}", "oiot");
-});
-
-// Both request isolation, so the parent ends up in one origin-keyed agent
-// cluster (the base domain's origin), and the child ends up in a different
-// origin-keyed agent cluster (the www subdomain's origin).
-
-promise_test(async () => {
-  const whatHappened = await sendWasmModule(frameWindow);
-
-  assert_equals(whatHappened, "messageerror");
-}, "messageerror event must occur");
-
-promise_test(async () => {
-  await setBothDocumentDomains(frameWindow);
-
-  assert_throws_dom("SecurityError", DOMException, () => {
-    frameWindow.document;
-  });
-}, "setting document.domain must not give sync access");
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html.headers b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html.headers
deleted file mode 100644
index 468d0f2..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-oiot.sub.https.html.headers
+++ /dev/null
@@ -1,2 +0,0 @@
-Origin-Trial: AkwBfk9Djiu2sKAuVhMLUQ3ldCM8nF0QD6eQpx7wWSnmhMs7udZelhv2iJfIjYuj5j77L3htLCv/dAuv/ttfUQEAAABmeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiT3JpZ2luSXNvbGF0aW9uSGVhZGVyIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9
-Origin-Agent-Cluster: ?1
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html
deleted file mode 100644
index a691dc8..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Origin-Trial header before Origin-Isolation header in parent; OT after OI in child</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<!-- This file is a modification of parent-yes-child-yes-subdomain.sub.https.html from the external WPT suite. -->
-
-<div id="log"></div>
-
-<script type="module">
-import { sendWasmModule, setBothDocumentDomains } from "/origin-isolation/resources/helpers.mjs";
-import { insertIframe } from "./resources/helpers.mjs";
-
-let frameWindow;
-promise_setup(async () => {
-  frameWindow = await insertIframe("{{hosts[][www]}}", "otoi");
-});
-
-// Both request isolation, so the parent ends up in one origin-keyed agent
-// cluster (the base domain's origin), and the child ends up in a different
-// origin-keyed agent cluster (the www subdomain's origin).
-
-promise_test(async () => {
-  const whatHappened = await sendWasmModule(frameWindow);
-
-  assert_equals(whatHappened, "messageerror");
-}, "messageerror event must occur");
-
-promise_test(async () => {
-  await setBothDocumentDomains(frameWindow);
-
-  assert_throws_dom("SecurityError", DOMException, () => {
-    frameWindow.document;
-  });
-}, "setting document.domain must not give sync access");
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html.headers b/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html.headers
deleted file mode 100644
index 468d0f2..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/parent-otoi-child-otoi.sub.https.html.headers
+++ /dev/null
@@ -1,2 +0,0 @@
-Origin-Trial: AkwBfk9Djiu2sKAuVhMLUQ3ldCM8nF0QD6eQpx7wWSnmhMs7udZelhv2iJfIjYuj5j77L3htLCv/dAuv/ttfUQEAAABmeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiT3JpZ2luSXNvbGF0aW9uSGVhZGVyIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9
-Origin-Agent-Cluster: ?1
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/helpers.mjs b/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/helpers.mjs
deleted file mode 100644
index d82137f..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/helpers.mjs
+++ /dev/null
@@ -1,14 +0,0 @@
-export function insertIframe(hostname, headerOrder) {
-  const url = new URL("send-headers.py", import.meta.url);
-  url.hostname = hostname;
-  url.searchParams.set("headerOrder", headerOrder);
-
-  const iframe = document.createElement("iframe");
-  iframe.src = url.href;
-
-  return new Promise((resolve, reject) => {
-    iframe.onload = () => resolve(iframe.contentWindow);
-    iframe.onerror = () => reject(new Error(`Could not load ${iframe.src}`));
-    document.body.append(iframe);
-  });
-}
diff --git a/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/send-headers.py b/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/send-headers.py
deleted file mode 100644
index 87a7514..0000000
--- a/third_party/blink/web_tests/wpt_internal/origin-isolation/resources/send-headers.py
+++ /dev/null
@@ -1,44 +0,0 @@
-def main(request, response):
-    """Send a response with the Origin-Agent-Cluster and Origin-Trial headers, in
-    the order specified by the "headerOrder" query parameter, which can be
-    either "oiot" or "otoi" (see ../README.md).
-
-    The response will listen for message and messageerror events and echo them
-    back to the parent. See external/wpt's
-    /origin-isolation/resources/helpers.mjs for how these handlers are used.
-    """
-
-    token = "ArQvBL/jhDJ62HaUm/ak0dIUYDjZAfeCQTXwa92cOrHZbL7R+bhb3qrVO2pHWkgJPgvIzvLX5m3wfaUJfOKY0Q4AAABqeyJvcmlnaW4iOiAiaHR0cHM6Ly93d3cud2ViLXBsYXRmb3JtLnRlc3Q6ODQ0NCIsICJmZWF0dXJlIjogIk9yaWdpbklzb2xhdGlvbkhlYWRlciIsICJleHBpcnkiOiAyMDAwMDAwMDAwfQ=="
-
-    header_order = request.GET.first(b"headerOrder")
-    if header_order == b"otoi":
-        response.headers.set(b"Origin-Trial", token)
-        response.headers.set(b"Origin-Agent-Cluster", b"?1")
-    elif header_order == b"oiot":
-        response.headers.set(b"Origin-Agent-Cluster", b"?1")
-        response.headers.set(b"Origin-Trial", token)
-    else:
-        raise AssertionError("Invalid headerOrder")
-
-    response.headers.set(b"Content-Type", b"text/html")
-
-    return """
-    <!DOCTYPE html>
-    <meta charset="utf-8">
-    <title>Helper page for origin isolation tests</title>
-
-    <script type="module">
-    window.onmessage = e => {
-      if (e.data.constructor === WebAssembly.Module) {
-        parent.postMessage("WebAssembly.Module message received", "*");
-      } else if (e.data.command === "set document.domain") {
-        document.domain = e.data.newDocumentDomain;
-        parent.postMessage("document.domain is set", "*");
-      }
-    };
-
-    window.onmessageerror = () => {
-      parent.postMessage("messageerror", "*");
-    };
-    </script>
-    """
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index d1a7856..665364b 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-4-104-g0901a6f74
-Revision: 0901a6f74c707f4e631d810b9f3ac7f0c0d2042e
+Version: VER-2-10-4-105-g343155383
+Revision: 34315538364b2e1ab7fb17d70dd59bb451982c80
 CPEPrefix: cpe:/a:freetype:freetype:2.10.4
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
diff --git a/tools/binary_size/libsupersize/archive.py b/tools/binary_size/libsupersize/archive.py
index b2fa709..01e1775 100644
--- a/tools/binary_size/libsupersize/archive.py
+++ b/tools/binary_size/libsupersize/archive.py
@@ -8,6 +8,7 @@
 import bisect
 import calendar
 import collections
+import copy
 import datetime
 import gzip
 import itertools
@@ -52,7 +53,6 @@
 _OWNERS_FILE_PATH_REGEX = re.compile(r'^\s*file://(\S+)', re.MULTILINE)
 
 _UNCOMPRESSED_COMPRESSION_RATIO_THRESHOLD = 0.9
-_APKS_MAIN_APK = 'splits/base-master.apk'
 
 # Holds computation state that is live only when an output directory exists.
 _OutputDirectoryContext = collections.namedtuple('_OutputDirectoryContext', [
@@ -748,8 +748,8 @@
   return before_size_info, after_size_info
 
 
-def _CollectModuleSizes(minimal_apks_path):
-  sizes_by_module = collections.defaultdict(int)
+def _GetModuleInfoList(minimal_apks_path):
+  module_info_list = []
   with zipfile.ZipFile(minimal_apks_path) as z:
     for info in z.infolist():
       # E.g.:
@@ -760,7 +760,14 @@
       # TODO(agrieve): Might be worth measuring a non-en locale as well.
       m = re.match(r'splits/(.*)-master\.apk', info.filename)
       if m:
-        sizes_by_module[m.group(1)] += info.file_size
+        module_info_list.append((m.group(1), info.file_size))
+  return sorted(module_info_list)
+
+
+def _CollectModuleSizes(minimal_apks_path):
+  sizes_by_module = collections.defaultdict(int)
+  for module_name, file_size in _GetModuleInfoList(minimal_apks_path):
+    sizes_by_module[module_name] += file_size
   return sizes_by_module
 
 
@@ -834,14 +841,18 @@
     metadata[models.METADATA_MAP_FILENAME] = shorten_path(args.map_file)
 
   if args.minimal_apks_file:
-    sizes_by_module = _CollectModuleSizes(args.minimal_apks_file)
     metadata[models.METADATA_APK_FILENAME] = shorten_path(
         args.minimal_apks_file)
-    for name, size in sizes_by_module.items():
-      key = models.METADATA_APK_SIZE
-      if name != 'base':
-        key += '-' + name
-      metadata[key] = size
+    if args.split_name and args.split_name != 'base':
+      metadata[models.METADATA_APK_SPLIT_NAME] = args.split_name
+      metadata[models.METADATA_APK_SIZE] = os.path.getsize(args.apk_file)
+    else:
+      sizes_by_module = _CollectModuleSizes(args.minimal_apks_file)
+      for name, size in sizes_by_module.items():
+        key = models.METADATA_APK_SIZE
+        if name != 'base':
+          key += '-' + name
+        metadata[key] = size
   elif args.apk_file:
     metadata[models.METADATA_APK_FILENAME] = shorten_path(args.apk_file)
     metadata[models.METADATA_APK_SIZE] = os.path.getsize(args.apk_file)
@@ -1882,6 +1893,9 @@
       help='Include a padding field for each symbol, instead of rederiving '
       'from consecutive symbols on file load.')
 
+  # The split_name arg is used for bundles to identify DFMs.
+  parser.set_defaults(split_name=None)
+
 
 def AddArguments(parser):
   parser.add_argument('size_file', help='Path to output .size file.')
@@ -2076,14 +2090,7 @@
                                      on_config_error)
 
 
-def _ProcessContainerArgs(top_args, sub_args, main_file, on_config_error):
-  if hasattr(sub_args, 'name'):
-    container_name = sub_args.name
-  else:
-    container_name = os.path.basename(main_file)
-  if set(container_name) & set('<>'):
-    parser.error('Container name cannot have characters in "<>"')
-
+def _ProcessContainerArgs(top_args, sub_args, container_name, on_config_error):
   # Copy output_directory, tool_prefix, etc. into sub_args.
   for k, v in top_args.__dict__.items():
     sub_args.__dict__.setdefault(k, v)
@@ -2132,6 +2139,28 @@
           linker_name, size_info_prefix)
 
 
+def _IsOnDemand(apk_path):
+  # Check if the manifest specifies whether or not to extract native libs.
+  output = subprocess.check_output([
+      path_util.GetAapt2Path(), 'dump', 'xmltree', '--file',
+      'AndroidManifest.xml', apk_path
+  ]).decode('ascii')
+
+  def parse_attr(name):
+    # http://schemas.android.com/apk/res/android:isFeatureSplit(0x0101055b)=true
+    # http://schemas.android.com/apk/distribution:onDemand=true
+    m = re.search(name + r'(?:\(.*?\))?=(\w+)', output)
+    return m and m.group(1) == 'true'
+
+  is_feature_split = parse_attr('android:isFeatureSplit')
+  # Can use <dist:on-demand>, or <module dist:onDemand="true">.
+  on_demand = parse_attr(
+      'distribution:onDemand') or 'distribution:on-demand' in output
+  on_demand = bool(on_demand and is_feature_split)
+
+  return on_demand
+
+
 def _IterSubArgs(top_args, on_config_error):
   """Generates main paths (may be deduced) for each containers given by input.
 
@@ -2167,16 +2196,33 @@
   # Each element in |sub_args_list| specifies a container.
   for sub_args in sub_args_list:
     main_file = _IdentifyInputFile(sub_args, on_config_error)
+    if hasattr(sub_args, 'name'):
+      container_name = sub_args.name
+    else:
+      container_name = os.path.basename(main_file)
+    if set(container_name) & set('<>'):
+      parser.error('Container name cannot have characters in "<>"')
+
 
     # If needed, extract .apk file to a temp file and process that instead.
     if sub_args.minimal_apks_file:
-      with zip_util.UnzipToTemp(sub_args.minimal_apks_file,
-                                _APKS_MAIN_APK) as temp:
-        sub_args.apk_file = temp
-        yield _ProcessContainerArgs(top_args, sub_args, main_file,
-                                    on_config_error)
+      for module_name, _ in _GetModuleInfoList(sub_args.minimal_apks_file):
+        with zip_util.UnzipToTemp(
+            sub_args.minimal_apks_file,
+            'splits/{}-master.apk'.format(module_name)) as temp:
+          if _IsOnDemand(temp):
+            continue
+          module_sub_args = copy.copy(sub_args)
+          module_sub_args.apk_file = temp
+          module_sub_args.split_name = module_name
+          module_sub_args.name = '{}/{}.apk'.format(container_name, module_name)
+          if module_name != 'base':
+            # TODO(crbug.com/1143690): Fix native analysis for split APKs.
+            module_sub_args.map_file = None
+          yield _ProcessContainerArgs(top_args, module_sub_args,
+                                      module_sub_args.name, on_config_error)
     else:
-      yield _ProcessContainerArgs(top_args, sub_args, main_file,
+      yield _ProcessContainerArgs(top_args, sub_args, container_name,
                                   on_config_error)
 
 
diff --git a/tools/binary_size/libsupersize/integration_test.py b/tools/binary_size/libsupersize/integration_test.py
index 4f4b871..a24fe5f 100755
--- a/tools/binary_size/libsupersize/integration_test.py
+++ b/tools/binary_size/libsupersize/integration_test.py
@@ -40,10 +40,15 @@
 _TEST_ELF_FILE_BEGIN = os.path.join(_TEST_OUTPUT_DIR, 'elf.begin')
 _TEST_APK_LOCALE_PAK_PATH = os.path.join(_TEST_APK_ROOT_DIR, 'assets/en-US.pak')
 _TEST_APK_PAK_PATH = os.path.join(_TEST_APK_ROOT_DIR, 'assets/resources.pak')
+_TEST_ON_DEMAND_MANIFEST_PATH = os.path.join(_TEST_DATA_DIR,
+                                             'AndroidManifest_OnDemand.xml')
+_TEST_ALWAYS_INSTALLED_MANIFEST_PATH = os.path.join(
+    _TEST_DATA_DIR, 'AndroidManifest_AlwaysInstalled.xml')
 
 # The following files are dynamically created.
 _TEST_ELF_PATH = os.path.join(_TEST_OUTPUT_DIR, 'elf')
 _TEST_APK_PATH = os.path.join(_TEST_OUTPUT_DIR, 'test.apk')
+_TEST_OTHER_SPLIT_APK_PATH = os.path.join(_TEST_OUTPUT_DIR, 'other.apk')
 _TEST_MINIMAL_APKS_PATH = os.path.join(_TEST_OUTPUT_DIR, 'Bundle.minimal.apks')
 _TEST_SSARGS_PATH = os.path.join(_TEST_OUTPUT_DIR, 'test.ssargs')
 
@@ -80,11 +85,13 @@
   os.environ['PATH'] = _TEST_TOOL_PREFIX[:-1] + os.path.pathsep + prev_path
   os.environ['APK_ANALYZER'] = os.path.join(_TEST_SDK_DIR, 'tools', 'bin',
                                             'apkanalyzer')
+  os.environ['AAPT2'] = os.path.join(_TEST_SDK_DIR, 'tools', 'bin', 'aapt2')
   try:
     yield
   finally:
     os.environ['PATH'] = prev_path
     del os.environ['APK_ANALYZER']
+    del os.environ['AAPT2']
 
 
 def _RunApp(name, args, debug_measures=False):
@@ -145,19 +152,30 @@
       apk_file.writestr(
           _TEST_APK_DEX_PATH, IntegrationTest._CreateBlankData(23))
 
+    with zipfile.ZipFile(_TEST_OTHER_SPLIT_APK_PATH, 'w') as other_apk_zip:
+      other_apk_zip.write(_TEST_ALWAYS_INSTALLED_MANIFEST_PATH,
+                          'AndroidManifest.xml')
+
     with zipfile.ZipFile(_TEST_MINIMAL_APKS_PATH, 'w') as apk_file:
       apk_file.write(_TEST_APK_PATH, 'splits/base-master.apk')
       apk_file.writestr('splits/base-en.apk', 'x' * 10)
-      apk_file.writestr('splits/vr-master.apk', 'x' * 20)
+
+      with tempfile.NamedTemporaryFile(suffix='.apk') as vr_apk_file:
+        with zipfile.ZipFile(vr_apk_file.name, 'w') as vr_apk_zip:
+          vr_apk_zip.write(_TEST_ON_DEMAND_MANIFEST_PATH, 'AndroidManifest.xml')
+        apk_file.write(vr_apk_file.name, 'splits/vr-master.apk')
       apk_file.writestr('splits/vr-en.apk', 'x' * 40)
+
+      apk_file.write(_TEST_OTHER_SPLIT_APK_PATH, 'splits/other-master.apk')
       apk_file.writestr('toc.pb', 'x' * 80)
 
   @classmethod
   def tearDownClass(cls):
     IntegrationTest._SafeRemoveFiles([
-      _TEST_ELF_PATH,
-      _TEST_APK_PATH,
-      _TEST_MINIMAL_APKS_PATH,
+        _TEST_ELF_PATH,
+        _TEST_APK_PATH,
+        _TEST_OTHER_SPLIT_APK_PATH,
+        _TEST_MINIMAL_APKS_PATH,
     ])
 
   def _CreateTestArgs(self):
@@ -192,11 +210,13 @@
       apk_so_path = None
       size_info_prefix = None
       extracted_minimal_apk_path = None
+      container_name = ''
       if use_apk:
         args.apk_file = _TEST_APK_PATH
       elif use_minimal_apks:
         args.minimal_apks_file = _TEST_MINIMAL_APKS_PATH
         extracted_minimal_apk_path = _TEST_APK_PATH
+        container_name = 'Bundle.minimal.apks'
       if use_apk or use_minimal_apks:
         apk_so_path = _TEST_APK_SO_PATH
         if args.output_directory:
@@ -219,10 +239,13 @@
       with _AddMocksToPath():
         build_config = {}
         metadata = archive.CreateMetadata(args, linker_name, build_config)
+        container_list = []
+        raw_symbols_list = []
         container, raw_symbols = archive.CreateContainerAndSymbols(
             knobs=knobs,
             opts=opts,
-            container_name='',
+            container_name='{}/base.apk'.format(container_name)
+            if container_name else '',
             metadata=metadata,
             map_path=args.map_file,
             tool_prefix=args.tool_prefix,
@@ -235,8 +258,29 @@
             pak_info_file=pak_info_file,
             linker_name=linker_name,
             size_info_prefix=size_info_prefix)
+        container_list.append(container)
+        raw_symbols_list.append(raw_symbols)
+        if use_minimal_apks:
+          opts.analyze_native = False
+          args.split_name = 'other'
+          args.apk_file = _TEST_OTHER_SPLIT_APK_PATH
+          args.elf_file = None
+          args.map_file = None
+          metadata = archive.CreateMetadata(args, None, build_config)
+          container, raw_symbols = archive.CreateContainerAndSymbols(
+              knobs=knobs,
+              opts=opts,
+              container_name='{}/other.apk'.format(container_name),
+              metadata=metadata,
+              tool_prefix=args.tool_prefix,
+              output_directory=args.output_directory,
+              source_directory=args.source_directory,
+              apk_path=_TEST_OTHER_SPLIT_APK_PATH,
+              size_info_prefix=size_info_prefix)
+          container_list.append(container)
+          raw_symbols_list.append(raw_symbols)
         IntegrationTest.cached_size_info[cache_key] = archive.CreateSizeInfo(
-            build_config, [container], [raw_symbols])
+            build_config, container_list, raw_symbols_list)
     return copy.deepcopy(IntegrationTest.cached_size_info[cache_key])
 
   def _DoArchive(self,
@@ -321,9 +365,13 @@
 
     sym_strs = (repr(sym) for sym in size_info.symbols)
     stats = describe.DescribeSizeInfoCoverage(size_info)
-    assert len(size_info.containers) == 1
-    # If there's only one container, merge the its metadata into build_config.
-    merged_data_desc = describe.DescribeDict(size_info.metadata_legacy)
+    if len(size_info.containers) == 1:
+      # If there's only one container, merge the its metadata into build_config.
+      merged_data_desc = describe.DescribeDict(size_info.metadata_legacy)
+    else:
+      merged_data_desc = describe.DescribeDict(size_info.build_config)
+      for m in size_info.metadata:
+        merged_data_desc.extend(describe.DescribeDict(m))
     return itertools.chain(merged_data_desc, stats, sym_strs)
 
   @_CompareWithGolden()
diff --git a/tools/binary_size/libsupersize/models.py b/tools/binary_size/libsupersize/models.py
index dbaa383b..a1c78ee 100644
--- a/tools/binary_size/libsupersize/models.py
+++ b/tools/binary_size/libsupersize/models.py
@@ -54,6 +54,7 @@
 
 METADATA_APK_FILENAME = 'apk_file_name'  # Path relative to output_directory.
 METADATA_APK_SIZE = 'apk_size'  # File size of apk in bytes.
+METADATA_APK_SPLIT_NAME = 'apk_split_name'  # Name of the split if applicable.
 METADATA_ZIPALIGN_OVERHEAD = 'zipalign_padding'  # Overhead from zipalign.
 METADATA_SIGNING_BLOCK_SIZE = 'apk_signature_block_size'  # Size in bytes.
 METADATA_MAP_FILENAME = 'map_file_name'  # Path relative to output_directory.
diff --git a/tools/binary_size/libsupersize/path_util.py b/tools/binary_size/libsupersize/path_util.py
index e8e5e2f..da33b46 100644
--- a/tools/binary_size/libsupersize/path_util.py
+++ b/tools/binary_size/libsupersize/path_util.py
@@ -217,6 +217,12 @@
   return os.environ.get('APK_ANALYZER', default_path)
 
 
+def GetAapt2Path():
+  default_path = FromToolsSrcRootRelative(
+      os.path.join('third_party', 'android_build_tools', 'aapt2', 'aapt2'))
+  return os.environ.get('AAPT2', default_path)
+
+
 def GetJavaHome():
   return FromToolsSrcRootRelative(os.path.join('third_party', 'jdk', 'current'))
 
diff --git a/tools/binary_size/libsupersize/testdata/AndroidManifest_AlwaysInstalled.xml b/tools/binary_size/libsupersize/testdata/AndroidManifest_AlwaysInstalled.xml
new file mode 100644
index 0000000..9b2be40
--- /dev/null
+++ b/tools/binary_size/libsupersize/testdata/AndroidManifest_AlwaysInstalled.xml
@@ -0,0 +1,9 @@
+N: android=http://schemas.android.com/apk/res/android (line=2)
+  N: dist=http://schemas.android.com/apk/distribution (line=2)
+    E: manifest (line=2)
+      A: http://schemas.android.com/apk/res/android:isFeatureSplit(0x0101055b)=true
+        E: http://schemas.android.com/apk/distribution:module (line=8)
+          A: http://schemas.android.com/apk/distribution:onDemand=false
+            E: http://schemas.android.com/apk/distribution:fusing (line=9)
+              A: http://schemas.android.com/apk/distribution:include=true
+        E: application (line=12)
diff --git a/tools/binary_size/libsupersize/testdata/AndroidManifest_OnDemand.xml b/tools/binary_size/libsupersize/testdata/AndroidManifest_OnDemand.xml
new file mode 100644
index 0000000..4b61736
--- /dev/null
+++ b/tools/binary_size/libsupersize/testdata/AndroidManifest_OnDemand.xml
@@ -0,0 +1,9 @@
+N: android=http://schemas.android.com/apk/res/android (line=2)
+  N: dist=http://schemas.android.com/apk/distribution (line=2)
+    E: manifest (line=2)
+      A: http://schemas.android.com/apk/res/android:isFeatureSplit(0x0101055b)=true
+        E: http://schemas.android.com/apk/distribution:module (line=8)
+          A: http://schemas.android.com/apk/distribution:onDemand=true
+            E: http://schemas.android.com/apk/distribution:fusing (line=9)
+              A: http://schemas.android.com/apk/distribution:include=true
+        E: application (line=12)
diff --git a/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden b/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden
index 84ac568..def1dba 100644
--- a/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden
+++ b/tools/binary_size/libsupersize/testdata/Archive_MinimalApks.golden
@@ -1,18 +1,25 @@
+git_revision=abc123
+gn_args=var1=true var2="foo"
+linker_name=gold
+tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
 apk_file_name=Bundle.minimal.apks
 apk_signature_block_size=0
-apk_size-vr=20
+apk_size-other=696
+apk_size-vr=695
 apk_size=147858911
 elf_arch=arm
 elf_build_id=WhatAnAmazingBuildId
 elf_file_name=elf
 elf_mtime={redacted}
 elf_relocations_count=394087
-git_revision=abc123
-gn_args=var1=true var2="foo"
-linker_name=gold
 map_file_name=../../../test.map
-tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
 zipalign_padding=32
+apk_file_name=Bundle.minimal.apks
+apk_signature_block_size=0
+apk_size=696
+apk_split_name=other
+zipalign_padding=0
+Container <Bundle.minimal.apks/base.apk>
 Section .text: has 100.0% of 35982248 bytes accounted for from 22 symbols. 0 bytes are unaccounted for.
 * Padding accounts for 13808 bytes (0.0%)
 * 16 have source paths. Accounts for 73986 bytes (0.2%).
@@ -34,8 +41,8 @@
 * 0 symbols have shared ownership.
 * 2 symbols are from generated sources. Accounts for 21 bytes (0.0%).
 Large padding of 675992 between:
-  A) .rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-  B) .rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
+  A) <Bundle.minimal.apks/base.apk>.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+  B) <Bundle.minimal.apks/base.apk>.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
 Section .data.rel.ro: has 100.0% of 1065224 bytes accounted for from 4 symbols. 0 bytes are unaccounted for.
 * Padding accounts for 0 bytes (0.0%)
 * 3 have source paths. Accounts for 92 bytes (0.0%).
@@ -84,499 +91,555 @@
 * 22 placeholders exist (symbols that start with **). Accounts for 56448494 bytes (59.0%).
 * 0 symbols have shared ownership.
 * 1 symbols are from generated sources. Accounts for 4194304 bytes (4.4%).
-.text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
-.text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
-.text@28d948(size_without_padding=28,padding=0,full_name=_GLOBAL__sub_I_pacing_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
-.text@28d964(size_without_padding=38,padding=0,full_name=extFromUUseMapping(signed char, unsigned int, int),object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.text@28d98a(size_without_padding=32,padding=0,full_name=extFromUUseMapping(aj, int),object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.text@28f000(size_without_padding=0,padding=5718,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1,component=)
-.text@28f000(size_without_padding=448,padding=0,full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.text@28f1c8(size_without_padding=20,padding=8,full_name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={startup,gen},num_aliases=1,component=Internal>Android)
-.text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely,gen},num_aliases=1,component=Internal>Android)
-.text@2a0000(size_without_padding=16,padding=32,full_name=BazAlias(bool),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
-.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2,component=)
-.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4,component=Internal>Android)
-.text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4,component=Internal>Android)
-.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4,component=Internal>Android)
-.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4,component=Internal>Android)
-.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
-.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
-.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-.text@2a2020(size_without_padding=48,padding=0,full_name=aliasedWithOutlinedFunction(),object_path=,source_path=,flags={},num_aliases=2,component=)
-.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function * 2,object_path=,source_path=,flags={},num_aliases=2,component=)
-.text@2a2050(size_without_padding=35898456,padding=0,full_name=** .text (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
-.rodata@266e600(size_without_padding=5,padding=0,full_name="Str1",object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=2,component=Blink>Internal)
-.rodata@266e600(size_without_padding=5,padding=0,full_name="Str1",object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
-.rodata@266e605(size_without_padding=16,padding=0,full_name="String literal2",object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.rodata@266e630(size_without_padding=16,padding=27,full_name=** merge strings,object_path=,source_path=,flags={},num_aliases=1,component=)
-.rodata@284d600(size_without_padding=3425,padding=1961920,full_name=** merge constants,object_path=,source_path=,flags={},num_aliases=1,component=)
-.rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1,component=)
-.rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
-.rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
-.rodata@28f3484(size_without_padding=3286096,padding=0,full_name=** .rodata (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
-.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1,component=)
-.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1,component=)
-.data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1,component=Internal>Android)
-.data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.data.rel.ro@2cd855c(size_without_padding=1065132,padding=0,full_name=** .data.rel.ro (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
-.data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
-.data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
-.data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={rel},num_aliases=1,component=UI>Browser)
-.data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon},num_aliases=1,component=UI>Browser)
-.data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,rel.loc},num_aliases=1,component=UI>Browser)
-.data@2de70a8(size_without_padding=101600,padding=0,full_name=** .data (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
-.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
-.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
-.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
-.bss@2dffda0(size_without_padding=28,padding=0,full_name=g_chrome_content_browser_client,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.bss@2dffe80(size_without_padding=4,padding=196,full_name=SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jlongArray*> const&, int)::atomic_histogram_pointer,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.bss@2dffe84(size_without_padding=4,padding=0,full_name=g_AnimationFrameTimeHistogram_clazz,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={anon,gen},num_aliases=1,component=Internal>Android)
-.dex@0(size_without_padding=1792,padding=0,full_name=org,object_path=$APK/org,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=975347,padding=0,full_name=org.chromium,object_path=$APK/org/chromium,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=44714,padding=0,full_name=org.chromium.chrome,object_path=$APK/org/chromium/chrome,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=2522400,padding=0,full_name=org.chromium.chrome.browser,object_path=$APK/org/chromium/chrome/browser,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=111986,padding=0,full_name=org.chromium.chrome.browser.compositor,object_path=$APK/org/chromium/chrome/browser/compositor,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=58449,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts,object_path=$APK/org/chromium/chrome/browser/compositor/layouts,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=23896,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=7566,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimations: android.animation.Animator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimatorListener: android.animation.AnimatorListenerAdapter,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollAngleInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverscrollSlideInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mUnderScrollAngleInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#$assertionsDisabled: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mInSwipe: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsDying: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsStackForCurrentTabList: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mRecomputePosition: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeCanScroll: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeIsCancelable: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderLeftPadding: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTopPadding: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentSide: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentTop: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentScrollDirection: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardDirection: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutProgress: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutRate: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch0Offset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch1Offset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScroll: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollAngle: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollSlide: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxUnderScroll: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinScrollMotion: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinSpacing: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffsetForDyingTabs: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollTarget: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeBoundedScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeUnboundScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mWarpSize: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.DRAG_ANGLE_THRESHOLD: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentMode: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDragLock$7be2905e: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLongPressSelected: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollCounter: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollDerivative: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverviewAnimationType$5d025a5c: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch0TabIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch1TabIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mReferenceOrderIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSpacing: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastScrollUpdate: long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabAnimations: org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLayout: org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScroller: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mStackTabs: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabList: org.chromium.chrome.browser.tabmodel.TabList,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopOpaqueHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeightMinusBrowserControls: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mWidth: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mStack: org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$1,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzkB/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=104,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinished: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#DECELERATION_RATE: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrVelocity: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDeceleration: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFlingFriction: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mPhysicalCoeff: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_POSITION: float[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_TIME: float[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrentPosition: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDuration: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinal: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mOver: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDistance: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDuration: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStart: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mState: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mVelocity: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStartTime: long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex@0(size_without_padding=4616803,padding=0,full_name=** .dex (unattributed - includes string literals),object_path=,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<clinit>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#evenOutTabs(float,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#isDisplayable(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateCompositorAnimations(long,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateViewAnimation(long,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.allowOverscroll(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardAlpha(float,float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardScale(float,float,boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeOverscrollPercent(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getDefaultDiscardDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxScroll(boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxTabHeight(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMinScroll(boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getRange(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getScrollDimensionSize(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getStackScale(android.graphics.RectF): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#screenToScroll(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#scrollToScreen(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeSpacing(int): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getCount(): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabIndexAtPositon(float,float,float): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getVisibleCount(): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack): org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabAtPositon(float,float): org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#cleanupTabs(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#commitDiscard(long,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabClippingVisibilityHelper(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabOffsetHelper(android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabPosition(long,android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabScrollOffsetHelper(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabTiltHelper(long,android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabVisibilitySortingHelper(android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#contextChanged(android.content.Context): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#createStackTabs(boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#drag(long,float,float,float,float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimation(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimationsIfDone(long,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#fling(long,float,float,float,float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#notifySizeChanged$483d2f6e(int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpOrCancel(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#requestUpdate(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#resetInputActionIndices(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setScrollTarget(float,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setStackFocusInfo(float,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setWarpState(boolean,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#springBack(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$62adfb33(long,int,int,int,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$6848a047(long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$78b04ab8(long,int,int,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#stopScrollingMovement(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#swipeCancelled(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#tabClosingEffect(long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#updateOverscrollOffset(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getStaticTabPosition(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getToolbarOffsetToLineUpWithBorder(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$1#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzkB/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<clinit>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<init>(android.content.Context),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#continueWhenFinished(long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#springback(int,int,int,long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#update(long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineDeceleration(int): double,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineFlingDistance(int): double,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getDeceleration(int): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#adjustDuration(int,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#finish(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#fling(int,int,int,int,int,long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#onEdgeReached(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startScroll(int,int,long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startSpringback$4868d30e(int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#updateScroll(float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
-.pak.nontranslated@2f03(size_without_padding=502,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_PDF_COMPOSITOR_MANIFEST,object_path=,source_path=,flags={uncompressed},num_aliases=1,component=)
-.pak.nontranslated@2f04(size_without_padding=217,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_CHROME_RENDERER_SERVICE_MANIFEST,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.nontranslated@0(size_without_padding=0,padding=18,full_name=Overhead: assets/resources.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3ac6(size_without_padding=40,padding=0,full_name=../../components/app_modal_strings.grdp: IDS_BEFOREUNLOAD_MESSAGEBOX_MESSAGE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3d7c(size_without_padding=24,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_TYPE_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3d82(size_without_padding=25,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_LIST_ENTRY_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3d83(size_without_padding=41,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_SCHEMA_VALIDATION_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dd2(size_without_padding=51,padding=0,full_name=../../components/safe_browsing_strings.grdp: IDS_SB_UNDER_CONSTRUCTION,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3df8(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_TITLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3df9(size_without_padding=17,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dfa(size_without_padding=18,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dfb(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dfc(size_without_padding=44,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dfd(size_without_padding=226,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_PRIMARY_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dfe(size_without_padding=165,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3dff(size_without_padding=231,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e00(size_without_padding=165,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_PROCEED_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e01(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e02(size_without_padding=116,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e03(size_without_padding=156,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_SCOUT_REPORTING_AGREE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e08(size_without_padding=26,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e09(size_without_padding=253,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_PRIMARY_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0a(size_without_padding=155,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0b(size_without_padding=187,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_PROCEED_AND_REPORT_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0c(size_without_padding=32,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_WEBVIEW_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0d(size_without_padding=160,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_WEBVIEW_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0e(size_without_padding=32,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_WEBVIEW_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@3e0f(size_without_padding=147,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_WEBVIEW_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e85(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_CALENDAR_CLEAR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e86(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_CALENDAR_TODAY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e87(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_SUBMIT_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e89(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_RESET_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e8a(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_BUTTON_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e8b(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_MULTIPLE_FILES_BUTTON_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e8c(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_NO_FILE_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e8d(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_MULTIPLE_UPLOAD,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e8e(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_OTHER_COLOR_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e92(size_without_padding=8,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_DAY_OF_MONTH_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e93(size_without_padding=8,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_MONTH_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e94(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_YEAR_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e95(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_SELECT_MENU_LIST_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e96(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_THIS_MONTH_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e97(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_THIS_WEEK_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e98(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_WEEK_NUMBER_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e99(size_without_padding=32,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_MONTH_SELECTOR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9a(size_without_padding=21,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_NEXT_MONTH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9b(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_PREVIOUS_MONTH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9c(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_WEEK_DESCRIPTION,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9d(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ARTICLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9e(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BANNER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4e9f(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COMPLEMENTARY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea0(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CHECK_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea1(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CONTENT_INFO,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea2(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DEFINITION,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea4(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DESCRIPTION_TERM,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea5(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DISCLOSURE_TRIANGLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea6(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_FEED,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ea9(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_FOOTER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eac(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOGGLE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ead(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eae(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LINK,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eaf(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MAIN_CONTENT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb0(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MARK,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb1(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MATH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb2(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_NAVIGATIONAL_LINK,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb3(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_REGION,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb4(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SEARCH_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb5(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_STATUS,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb6(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SWITCH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb8(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ALERT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eb9(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ALERT_DIALOG,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eba(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_APPLICATION,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ebb(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BLOCKQUOTE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ebc(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ebd(size_without_padding=22,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BUTTON_DROP_DOWN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ebe(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CELL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ebf(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COLOR_WELL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec0(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COLUMN_HEADER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec2(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DATE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec3(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DATE_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec4(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DIALOG,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec5(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DIRECTORY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec6(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DOCUMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec7(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_EMBEDDED_OBJECT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec8(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_GRAPHIC,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ec9(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_HEADING_WITH_LEVEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eca(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_INPUT_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ecb(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LIST_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ecc(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LOG,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ecd(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MARQUEE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ece(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ecf(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_BAR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed0(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed1(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_ITEM,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed2(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_METER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed3(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_NOTE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed4(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_POP_UP_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed5(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_PROGRESS_INDICATOR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed6(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_RADIO,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed7(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_RADIO_GROUP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed8(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ROW_HEADER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ed9(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SCROLL_BAR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eda(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SEARCH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4edb(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SLIDER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4edc(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SPIN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4edd(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SPLITTER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ede(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4edf(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TABLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee0(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB_LIST,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee1(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB_PANEL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee2(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee3(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TIMER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee4(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOOLBAR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee5(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOOLTIP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee6(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee7(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE_GRID,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee8(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE_ITEM,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ee9(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_AM_PM_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eea(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_DAY_OF_MONTH_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eeb(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_HOUR_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eec(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_DEFAULT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eed(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_AUDIO_ELEMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eee(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_VIDEO_ELEMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eef(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_MUTE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef0(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_UNMUTE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef1(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PLAY_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef2(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PAUSE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef3(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CURRENT_TIME_DISPLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef4(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_TIME_REMAINING_DISPLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef5(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef6(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_EXIT_FULL_SCREEN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef7(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef8(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4ef9(size_without_padding=31,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CAST_OFF_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4efa(size_without_padding=33,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CAST_ON_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4efb(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_DOWNLOAD_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4efc(size_without_padding=30,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_OVERFLOW_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4eff(size_without_padding=22,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_MUTE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f00(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_UNMUTE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f01(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PLAY_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f02(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PAUSE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f03(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_AUDIO_SLIDER_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f04(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_VIDEO_SLIDER_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f05(size_without_padding=29,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CURRENT_TIME_DISPLAY_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f06(size_without_padding=42,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_TIME_REMAINING_DISPLAY_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f07(size_without_padding=36,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f09(size_without_padding=38,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f0a(size_without_padding=37,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f0d(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_OVERFLOW_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f0e(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MILLISECOND_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f0f(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MINUTE_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f10(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MONTH_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f11(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_SECOND_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f13(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_YEAR_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f14(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_INPUT_WEEK_TEMPLATE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f15(size_without_padding=38,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_MULTIPLE_FILE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f16(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f17(size_without_padding=45,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f18(size_without_padding=61,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY_DOMAIN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f19(size_without_padding=63,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY_LOCAL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1a(size_without_padding=63,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_DOMAIN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1b(size_without_padding=47,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_DOTS,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1c(size_without_padding=65,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_LOCAL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1d(size_without_padding=75,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_NO_AT_SIGN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1e(size_without_padding=61,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_MULTIPLE_EMAIL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f1f(size_without_padding=48,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_UNDERFLOW,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f20(size_without_padding=32,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_UNDERFLOW_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f21(size_without_padding=45,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_OVERFLOW,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f22(size_without_padding=34,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_OVERFLOW_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f23(size_without_padding=81,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_BAD_INPUT_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f24(size_without_padding=28,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_BAD_INPUT_NUMBER,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f25(size_without_padding=33,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f26(size_without_padding=51,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_CHECKBOX,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f27(size_without_padding=27,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_FILE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f28(size_without_padding=41,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_RADIO,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f29(size_without_padding=40,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_SELECT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2a(size_without_padding=36,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2b(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_URL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2c(size_without_padding=40,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_PATTERN_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2d(size_without_padding=77,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_STEP_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2e(size_without_padding=64,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_STEP_MISMATCH_CLOSE_TO_LIMIT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f2f(size_without_padding=96,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_LONG,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f30(size_without_padding=95,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_SHORT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f31(size_without_padding=97,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_SHORT_PLURAL,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f32(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CLOSED_CAPTIONS,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f33(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CLOSED_CAPTIONS_SUBMENU_TITLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f34(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CAST,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f35(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_ENTER_FULLSCREEN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f36(size_without_padding=21,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_EXIT_FULLSCREEN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f37(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_STOP_CAST,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f38(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_MUTE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f39(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_UNMUTE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3a(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_PLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3b(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_PAUSE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3c(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_DOWNLOAD,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3d(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_DISABLE_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3e(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_CAST_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f3f(size_without_padding=28,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_CAST_TO_UNKNOWN_DEVICE_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@4f40(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_NO_LABEL,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
-.pak.translations@4f41(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_OFF,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=2,component=Blink>Internal)
-.pak.translations@4f41(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_OFF,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
-.pak.translations@4f42(size_without_padding=27,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_PLUGIN_INITIALIZATION_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@5bd6(size_without_padding=27,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_NOT_AVAILABLE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@5bd7(size_without_padding=69,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_CAN_NOT_BE_LOADED,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@5bd8(size_without_padding=121,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_TEMPORARILY_DOWN,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@5bd9(size_without_padding=161,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_TEMPORARILY_DOWN_SUGGESTIONS,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@5bda(size_without_padding=80,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_PARENTAL_PERMISSION_NEEDED,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@6917(size_without_padding=23,padding=0,full_name=../../ui/strings/app_locale_settings.grd: IDS_WEB_FONT_FAMILY,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@6918(size_without_padding=9,padding=0,full_name=../../ui/strings/app_locale_settings.grd: IDS_WEB_FONT_SIZE,object_path=,source_path=,flags={},num_aliases=1,component=)
-.pak.translations@0(size_without_padding=0,padding=18,full_name=Overhead: assets/en-US.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=1048576,padding=0,full_name=assets/icudtl.dat,object_path=,source_path=third_party/icu/android/icudtl.dat,flags={},num_aliases=1,component=Internal>Android)
-.other@0(size_without_padding=1024,padding=0,full_name=res/drawable-v13/test.xml,object_path=,source_path=chrome/android/res/drawable/test.xml,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=4194304,padding=0,full_name=smalltest.so,object_path=,source_path=$APK/smalltest.so,flags={gen},num_aliases=1,component=)
-.other@0(size_without_padding=60,padding=0,full_name=** ELF Section: .ARM.attributes,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=1536456,padding=0,full_name=** ELF Section: .ARM.exidx,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=183632,padding=0,full_name=** ELF Section: .ARM.extab,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=304,padding=0,full_name=** ELF Section: .dynamic,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=4025,padding=0,full_name=** ELF Section: .dynstr,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=6496,padding=0,full_name=** ELF Section: .dynsym,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=8,padding=0,full_name=** ELF Section: .fini_array,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=812,padding=0,full_name=** ELF Section: .gnu.version,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=28,padding=0,full_name=** ELF Section: .gnu.version_d,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=96,padding=0,full_name=** ELF Section: .gnu.version_r,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=42956,padding=0,full_name=** ELF Section: .got,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=2684,padding=0,full_name=** ELF Section: .hash,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=8,padding=0,full_name=** ELF Section: .init_array,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=19,padding=0,full_name=** ELF Section: .interp,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=36,padding=0,full_name=** ELF Section: .note.gnu.build-id,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=28,padding=0,full_name=** ELF Section: .note.gnu.gold-version,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=4244,padding=0,full_name=** ELF Section: .plt,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=2655384,padding=0,full_name=** ELF Section: .rel.dyn,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=2816,padding=0,full_name=** ELF Section: .rel.plt,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=436,padding=0,full_name=** ELF Section: .shstrtab,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=34841854,padding=0,full_name=** ELF Section: .strtab,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=17166112,padding=0,full_name=** ELF Section: .symtab,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=0,padding=764,full_name=Overhead: APK file,object_path=,source_path=,flags={},num_aliases=1,component=)
-.other@0(size_without_padding=0,padding=33902635,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1,component=)
+
+Container <Bundle.minimal.apks/other.apk>
+Section .text: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .rodata: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 string literals exist. Accounts for 0 bytes (0.0%) padding is 0 bytes.
+* 0 symbols have shared ownership.
+Section .data.rel.ro: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .data: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .bss: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .dex: has 0.0% of 0 bytes accounted for from 0 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .dex.method: has 0.0% of 0 bytes accounted for from 0 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .pak.translations: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .pak.nontranslated: 0 bytes from 0 symbols.
+* Padding accounts for 0 bytes (0.0%)
+* 0 have source paths. Accounts for 0 bytes (0.0%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+Section .other: has 100.0% of 696 bytes accounted for from 2 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 136 bytes (19.5%)
+* 1 have source paths. Accounts for 560 bytes (80.5%).
+* 0 have a component assigned. Accounts for 0 bytes (0.0%).
+* 0 symbols have shared ownership.
+* 1 symbols are from generated sources. Accounts for 560 bytes (80.5%).
+<Bundle.minimal.apks/base.apk>.text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.text@28d948(size_without_padding=28,padding=0,full_name=_GLOBAL__sub_I_pacing_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.text@28d964(size_without_padding=38,padding=0,full_name=extFromUUseMapping(signed char, unsigned int, int),object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.text@28d98a(size_without_padding=32,padding=0,full_name=extFromUUseMapping(aj, int),object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.text@28f000(size_without_padding=0,padding=5718,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.text@28f000(size_without_padding=448,padding=0,full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@28f1c8(size_without_padding=20,padding=8,full_name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={startup,gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely,gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0000(size_without_padding=16,padding=32,full_name=BazAlias(bool),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2,component=)
+<Bundle.minimal.apks/base.apk>.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.text@2a2020(size_without_padding=48,padding=0,full_name=aliasedWithOutlinedFunction(),object_path=,source_path=,flags={},num_aliases=2,component=)
+<Bundle.minimal.apks/base.apk>.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function * 2,object_path=,source_path=,flags={},num_aliases=2,component=)
+<Bundle.minimal.apks/base.apk>.text@2a2050(size_without_padding=35898456,padding=0,full_name=** .text (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.rodata@266e600(size_without_padding=5,padding=0,full_name="Str1",object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=2,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.rodata@266e600(size_without_padding=5,padding=0,full_name="Str1",object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.rodata@266e605(size_without_padding=16,padding=0,full_name="String literal2",object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.rodata@266e630(size_without_padding=16,padding=27,full_name=** merge strings,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.rodata@284d600(size_without_padding=3425,padding=1961920,full_name=** merge constants,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.rodata@28f3484(size_without_padding=3286096,padding=0,full_name=** .rodata (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.data.rel.ro@2cd855c(size_without_padding=1065132,padding=0,full_name=** .data.rel.ro (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={rel},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,rel.loc},num_aliases=1,component=UI>Browser)
+<Bundle.minimal.apks/base.apk>.data@2de70a8(size_without_padding=101600,padding=0,full_name=** .data (unattributed),object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.bss@2dffda0(size_without_padding=28,padding=0,full_name=g_chrome_content_browser_client,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.bss@2dffe80(size_without_padding=4,padding=196,full_name=SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jlongArray*> const&, int)::atomic_histogram_pointer,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.bss@2dffe84(size_without_padding=4,padding=0,full_name=g_AnimationFrameTimeHistogram_clazz,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={anon,gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=1792,padding=0,full_name=org,object_path=$APK/org,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=975347,padding=0,full_name=org.chromium,object_path=$APK/org/chromium,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=44714,padding=0,full_name=org.chromium.chrome,object_path=$APK/org/chromium/chrome,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=2522400,padding=0,full_name=org.chromium.chrome.browser,object_path=$APK/org/chromium/chrome/browser,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=111986,padding=0,full_name=org.chromium.chrome.browser.compositor,object_path=$APK/org/chromium/chrome/browser/compositor,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=58449,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts,object_path=$APK/org/chromium/chrome/browser/compositor/layouts,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=23896,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=7566,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimations: android.animation.Animator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimatorListener: android.animation.AnimatorListenerAdapter,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollAngleInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverscrollSlideInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mUnderScrollAngleInterpolator: android.view.animation.Interpolator,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=12,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#$assertionsDisabled: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mInSwipe: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsDying: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mIsStackForCurrentTabList: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mRecomputePosition: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeCanScroll: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeIsCancelable: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderLeftPadding: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTopPadding: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentSide: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mBorderTransparentTop: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentScrollDirection: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardDirection: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutProgress: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mEvenOutRate: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch0Offset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastPinch1Offset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScroll: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollAngle: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxOverScrollSlide: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMaxUnderScroll: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinScrollMotion: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mMinSpacing: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollOffsetForDyingTabs: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollTarget: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeBoundedScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSwipeUnboundScrollOffset: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mWarpSize: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.DRAG_ANGLE_THRESHOLD: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mCurrentMode: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDragLock$7be2905e: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLongPressSelected: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollCounter: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverScrollDerivative: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mOverviewAnimationType$5d025a5c: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch0TabIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mPinch1TabIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mReferenceOrderIndex: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mSpacing: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLastScrollUpdate: long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabAnimations: org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mLayout: org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScroller: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mDiscardingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mScrollingTab: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mStackTabs: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mViewAnimationFactory: org.chromium.chrome.browser.compositor.layouts.phone.stack.StackViewAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#mTabList: org.chromium.chrome.browser.tabmodel.TabList,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mBorderTopOpaqueHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeight: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mHeightMinusBrowserControls: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mWidth: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#mStack: org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$1,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzkB/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0#$instance: Object,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=104,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinished: boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#DECELERATION_RATE: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=11,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrVelocity: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDeceleration: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFlingFriction: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mPhysicalCoeff: float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_POSITION: float[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#SPLINE_TIME: float[],object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mCurrentPosition: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mDuration: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mFinal: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mOver: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDistance: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mSplineDuration: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStart: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mState: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mVelocity: int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=10,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#mStartTime: long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex@0(size_without_padding=4616803,padding=0,full_name=** .dex (unattributed - includes string literals),object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<clinit>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=225,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#<init>(android.content.Context,org.chromium.chrome.browser.compositor.layouts.phone.StackLayout),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=446,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#evenOutTabs(float,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=96,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#isDisplayable(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=341,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateCompositorAnimations(long,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=101,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpdateViewAnimation(long,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=100,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.allowOverscroll(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#approxScreen(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardAlpha(float,float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=136,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeDiscardScale(float,float,boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=88,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeOverscrollPercent(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=84,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getDefaultDiscardDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxScroll(boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=113,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMaxTabHeight(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=196,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getMinScroll(boolean): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=105,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getRange(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=94,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getScrollDimensionSize(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=128,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getStackScale(android.graphics.RectF): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#screenToScroll(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=69,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#scrollToScreen(float): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=253,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeSpacing(int): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getCount(): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=360,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabIndexAtPositon(float,float,float): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getVisibleCount(): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=61,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack): org.chromium.chrome.browser.compositor.layouts.phone.StackLayout,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=87,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#getTabAtPositon(float,float): org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=64,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#cleanupTabs(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=261,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#commitDiscard(long,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=969,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabClippingVisibilityHelper(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=1512,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabOffsetHelper(android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=318,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabPosition(long,android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabScrollOffsetHelper(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=1008,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabTiltHelper(long,android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=560,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#computeTabVisibilitySortingHelper(android.graphics.RectF): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=322,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#contextChanged(android.content.Context): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=563,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#createStackTabs(boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=1521,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#drag(long,float,float,float,float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=813,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimation(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=223,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#finishAnimationsIfDone(long,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=503,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#fling(long,float,float,float,float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=400,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#notifySizeChanged$483d2f6e(int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=107,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#onUpOrCancel(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=68,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#requestUpdate(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#resetInputActionIndices(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=134,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setScrollTarget(float,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=121,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setStackFocusInfo(float,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=244,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#setWarpState(boolean,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=219,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#springBack(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=919,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$62adfb33(long,int,int,int,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=77,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$6848a047(long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=95,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#startAnimation$78b04ab8(long,int,int,boolean): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=137,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#stopScrollingMovement(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=142,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#swipeCancelled(long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=266,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#tabClosingEffect(long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=217,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack#updateOverscrollOffset(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/Stack.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=112,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=30,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=24,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=92,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getStaticTabPosition(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=67,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#getToolbarOffsetToLineUpWithBorder(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=1055,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createAnimatorSetForType$2fab410e$104f6ddb(int,org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,int,float,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=139,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=36,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=32,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=40,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested1$$Lambda$1#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested1$kjevdDQ8V2zqCrdieLqWLHzkB/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=35,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation$Nested2$$Lambda$0#<init>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/-$$Lambda$StackAnimation$Nested2$kjevdDQ8V2zqCrdieLqWLHzk/dex,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimation.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=82,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#<init>(org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack,float,float,float,float,float),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=52,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#isDefaultDiscardDirectionPositive(): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=79,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenPositionInScrollDirection(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=54,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#getScreenSizeInScrollDirection(): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=592,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createEnterStackAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=59,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createNewTabOpenedAnimatorSet$4078c09e(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[]): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=210,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createReachTopAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=961,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createTabFocusedAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int,int,float): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=256,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#createViewMoreAnimatorSet(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab[],int): org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=106,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimationLandscape#addTiltScrollAnimation(org.chromium.chrome.browser.compositor.layouts.ChromeAnimation,org.chromium.chrome.browser.compositor.layouts.components.LayoutTab,float,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackAnimationLandscape,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=471,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<clinit>(),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=146,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#<init>(android.content.Context),object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$000(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=65,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$002(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller,boolean): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=218,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#continueWhenFinished(long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=138,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#springback(int,int,int,long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=440,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#update(long): boolean,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=97,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineDeceleration(int): double,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=115,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getSplineFlingDistance(int): double,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$500(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=71,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#getDeceleration(int): float,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$100(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$200(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$400(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): int,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=62,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#access$300(org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller): long,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=176,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#adjustDuration(int,int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=66,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#finish(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=660,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#fling(int,int,int,int,int,long): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=220,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#onEdgeReached(): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=109,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startScroll(int,int,long,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=167,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#startSpringback$4868d30e(int,int): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.dex.method@0(size_without_padding=90,padding=0,full_name=org.chromium.chrome.browser.compositor.layouts.phone.stack.StackScroller$SplineStackScroller#updateScroll(float): void,object_path=$APK/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller$SplineStackScroller,source_path=chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/StackScroller.java,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.nontranslated@2f03(size_without_padding=502,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_PDF_COMPOSITOR_MANIFEST,object_path=,source_path=,flags={uncompressed},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.nontranslated@2f04(size_without_padding=217,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_CHROME_RENDERER_SERVICE_MANIFEST,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.nontranslated@0(size_without_padding=0,padding=18,full_name=Overhead: assets/resources.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3ac6(size_without_padding=40,padding=0,full_name=../../components/app_modal_strings.grdp: IDS_BEFOREUNLOAD_MESSAGEBOX_MESSAGE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3d7c(size_without_padding=24,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_TYPE_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3d82(size_without_padding=25,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_LIST_ENTRY_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3d83(size_without_padding=41,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_SCHEMA_VALIDATION_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dd2(size_without_padding=51,padding=0,full_name=../../components/safe_browsing_strings.grdp: IDS_SB_UNDER_CONSTRUCTION,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3df8(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_TITLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3df9(size_without_padding=17,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dfa(size_without_padding=18,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dfb(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dfc(size_without_padding=44,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dfd(size_without_padding=226,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_PRIMARY_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dfe(size_without_padding=165,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3dff(size_without_padding=231,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e00(size_without_padding=165,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_V3_PROCEED_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e01(size_without_padding=20,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e02(size_without_padding=116,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e03(size_without_padding=156,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_SAFE_BROWSING_SCOUT_REPORTING_AGREE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e08(size_without_padding=26,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e09(size_without_padding=253,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_PRIMARY_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0a(size_without_padding=155,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0b(size_without_padding=187,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_V4_PROCEED_AND_REPORT_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0c(size_without_padding=32,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_WEBVIEW_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0d(size_without_padding=160,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_MALWARE_WEBVIEW_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0e(size_without_padding=32,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_WEBVIEW_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@3e0f(size_without_padding=147,padding=0,full_name=../../components/security_interstitials_strings.grdp: IDS_PHISHING_WEBVIEW_EXPLANATION_PARAGRAPH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e85(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_CALENDAR_CLEAR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e86(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_CALENDAR_TODAY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e87(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_SUBMIT_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e89(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_RESET_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e8a(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_BUTTON_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e8b(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_MULTIPLE_FILES_BUTTON_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e8c(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_NO_FILE_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e8d(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_FILE_MULTIPLE_UPLOAD,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e8e(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_OTHER_COLOR_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e92(size_without_padding=8,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_DAY_OF_MONTH_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e93(size_without_padding=8,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_MONTH_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e94(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_PLACEHOLDER_FOR_YEAR_FIELD,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e95(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_SELECT_MENU_LIST_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e96(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_THIS_MONTH_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e97(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_THIS_WEEK_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e98(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_WEEK_NUMBER_LABEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e99(size_without_padding=32,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_MONTH_SELECTOR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9a(size_without_padding=21,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_NEXT_MONTH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9b(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_SHOW_PREVIOUS_MONTH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9c(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_CALENDAR_WEEK_DESCRIPTION,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9d(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ARTICLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9e(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BANNER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4e9f(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COMPLEMENTARY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea0(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CHECK_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea1(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CONTENT_INFO,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea2(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DEFINITION,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea4(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DESCRIPTION_TERM,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea5(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DISCLOSURE_TRIANGLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea6(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_FEED,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ea9(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_FOOTER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eac(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOGGLE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ead(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_HEADING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eae(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LINK,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eaf(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MAIN_CONTENT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb0(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MARK,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb1(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MATH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb2(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_NAVIGATIONAL_LINK,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb3(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_REGION,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb4(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SEARCH_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb5(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_STATUS,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb6(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SWITCH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb8(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ALERT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eb9(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ALERT_DIALOG,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eba(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_APPLICATION,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ebb(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BLOCKQUOTE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ebc(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ebd(size_without_padding=22,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_BUTTON_DROP_DOWN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ebe(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_CELL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ebf(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COLOR_WELL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec0(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_COLUMN_HEADER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec2(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DATE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec3(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DATE_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec4(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DIALOG,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec5(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DIRECTORY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec6(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_DOCUMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec7(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_EMBEDDED_OBJECT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec8(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_GRAPHIC,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ec9(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_HEADING_WITH_LEVEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eca(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_INPUT_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ecb(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LIST_BOX,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ecc(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_LOG,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ecd(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MARQUEE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ece(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ecf(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_BAR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed0(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed1(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_MENU_ITEM,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed2(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_METER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed3(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_NOTE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed4(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_POP_UP_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed5(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_PROGRESS_INDICATOR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed6(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_RADIO,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed7(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_RADIO_GROUP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed8(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_ROW_HEADER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ed9(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SCROLL_BAR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eda(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SEARCH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4edb(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SLIDER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4edc(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SPIN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4edd(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_SPLITTER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ede(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4edf(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TABLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee0(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB_LIST,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee1(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TAB_PANEL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee2(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee3(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TIMER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee4(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOOLBAR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee5(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TOOLTIP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee6(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee7(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE_GRID,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee8(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_ROLE_TREE_ITEM,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ee9(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_AM_PM_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eea(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_DAY_OF_MONTH_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eeb(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_HOUR_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eec(size_without_padding=19,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_DEFAULT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eed(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_AUDIO_ELEMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eee(size_without_padding=15,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_VIDEO_ELEMENT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eef(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_MUTE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef0(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_UNMUTE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef1(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PLAY_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef2(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PAUSE_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef3(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CURRENT_TIME_DISPLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef4(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_TIME_REMAINING_DISPLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef5(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef6(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_EXIT_FULL_SCREEN_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef7(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef8(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4ef9(size_without_padding=31,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CAST_OFF_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4efa(size_without_padding=33,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CAST_ON_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4efb(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_DOWNLOAD_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4efc(size_without_padding=30,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_OVERFLOW_BUTTON,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4eff(size_without_padding=22,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_MUTE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f00(size_without_padding=24,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_UNMUTE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f01(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PLAY_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f02(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_PAUSE_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f03(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_AUDIO_SLIDER_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f04(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_VIDEO_SLIDER_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f05(size_without_padding=29,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_CURRENT_TIME_DISPLAY_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f06(size_without_padding=42,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_TIME_REMAINING_DISPLAY_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f07(size_without_padding=36,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f09(size_without_padding=38,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f0a(size_without_padding=37,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f0d(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MEDIA_OVERFLOW_BUTTON_HELP,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f0e(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MILLISECOND_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f0f(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MINUTE_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f10(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_MONTH_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f11(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_SECOND_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f13(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_AX_YEAR_FIELD_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f14(size_without_padding=17,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_INPUT_WEEK_TEMPLATE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f15(size_without_padding=38,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_MULTIPLE_FILE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f16(size_without_padding=20,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f17(size_without_padding=45,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f18(size_without_padding=61,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY_DOMAIN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f19(size_without_padding=63,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_EMPTY_LOCAL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1a(size_without_padding=63,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_DOMAIN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1b(size_without_padding=47,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_DOTS,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1c(size_without_padding=65,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_INVALID_LOCAL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1d(size_without_padding=75,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL_NO_AT_SIGN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1e(size_without_padding=61,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_MULTIPLE_EMAIL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f1f(size_without_padding=48,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_UNDERFLOW,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f20(size_without_padding=32,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_UNDERFLOW_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f21(size_without_padding=45,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_OVERFLOW,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f22(size_without_padding=34,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_RANGE_OVERFLOW_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f23(size_without_padding=81,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_BAD_INPUT_DATETIME,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f24(size_without_padding=28,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_BAD_INPUT_NUMBER,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f25(size_without_padding=33,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f26(size_without_padding=51,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_CHECKBOX,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f27(size_without_padding=27,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_FILE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f28(size_without_padding=41,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_RADIO,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f29(size_without_padding=40,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_VALUE_MISSING_SELECT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2a(size_without_padding=36,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_EMAIL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2b(size_without_padding=25,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TYPE_MISMATCH_URL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2c(size_without_padding=40,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_PATTERN_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2d(size_without_padding=77,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_STEP_MISMATCH,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2e(size_without_padding=64,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_STEP_MISMATCH_CLOSE_TO_LIMIT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f2f(size_without_padding=96,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_LONG,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f30(size_without_padding=95,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_SHORT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f31(size_without_padding=97,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_FORM_VALIDATION_TOO_SHORT_PLURAL,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f32(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CLOSED_CAPTIONS,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f33(size_without_padding=13,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CLOSED_CAPTIONS_SUBMENU_TITLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f34(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_CAST,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f35(size_without_padding=16,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_ENTER_FULLSCREEN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f36(size_without_padding=21,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_EXIT_FULLSCREEN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f37(size_without_padding=18,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_STOP_CAST,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f38(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_MUTE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f39(size_without_padding=12,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_UNMUTE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3a(size_without_padding=10,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_PLAY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3b(size_without_padding=11,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_PAUSE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3c(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_OVERFLOW_MENU_DOWNLOAD,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3d(size_without_padding=26,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_DISABLE_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3e(size_without_padding=23,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_CAST_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f3f(size_without_padding=28,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_REMOTING_CAST_TO_UNKNOWN_DEVICE_TEXT,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f40(size_without_padding=14,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_NO_LABEL,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f41(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_OFF,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=2,component=Blink>Internal)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f41(size_without_padding=9,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_MEDIA_TRACKS_OFF,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.pak.translations@4f42(size_without_padding=27,padding=0,full_name=../../content/app/strings/content_strings.grd: IDS_PLUGIN_INITIALIZATION_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@5bd6(size_without_padding=27,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_NOT_AVAILABLE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@5bd7(size_without_padding=69,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_CAN_NOT_BE_LOADED,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@5bd8(size_without_padding=121,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_TEMPORARILY_DOWN,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@5bd9(size_without_padding=161,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_TEMPORARILY_DOWN_SUGGESTIONS,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@5bda(size_without_padding=80,padding=0,full_name=../../android_webview/ui/aw_strings.grd: IDS_AW_WEBPAGE_PARENTAL_PERMISSION_NEEDED,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@6917(size_without_padding=23,padding=0,full_name=../../ui/strings/app_locale_settings.grd: IDS_WEB_FONT_FAMILY,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@6918(size_without_padding=9,padding=0,full_name=../../ui/strings/app_locale_settings.grd: IDS_WEB_FONT_SIZE,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.pak.translations@0(size_without_padding=0,padding=18,full_name=Overhead: assets/en-US.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=1048576,padding=0,full_name=assets/icudtl.dat,object_path=,source_path=third_party/icu/android/icudtl.dat,flags={},num_aliases=1,component=Internal>Android)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=1024,padding=0,full_name=res/drawable-v13/test.xml,object_path=,source_path=chrome/android/res/drawable/test.xml,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=4194304,padding=0,full_name=smalltest.so,object_path=,source_path=$APK/smalltest.so,flags={gen},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=60,padding=0,full_name=** ELF Section: .ARM.attributes,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=1536456,padding=0,full_name=** ELF Section: .ARM.exidx,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=183632,padding=0,full_name=** ELF Section: .ARM.extab,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=304,padding=0,full_name=** ELF Section: .dynamic,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=4025,padding=0,full_name=** ELF Section: .dynstr,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=6496,padding=0,full_name=** ELF Section: .dynsym,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=8,padding=0,full_name=** ELF Section: .fini_array,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=812,padding=0,full_name=** ELF Section: .gnu.version,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=28,padding=0,full_name=** ELF Section: .gnu.version_d,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=96,padding=0,full_name=** ELF Section: .gnu.version_r,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=42956,padding=0,full_name=** ELF Section: .got,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=2684,padding=0,full_name=** ELF Section: .hash,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=8,padding=0,full_name=** ELF Section: .init_array,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=19,padding=0,full_name=** ELF Section: .interp,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=36,padding=0,full_name=** ELF Section: .note.gnu.build-id,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=28,padding=0,full_name=** ELF Section: .note.gnu.gold-version,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=4244,padding=0,full_name=** ELF Section: .plt,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=2655384,padding=0,full_name=** ELF Section: .rel.dyn,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=2816,padding=0,full_name=** ELF Section: .rel.plt,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=436,padding=0,full_name=** ELF Section: .shstrtab,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=34841854,padding=0,full_name=** ELF Section: .strtab,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=17166112,padding=0,full_name=** ELF Section: .symtab,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=0,padding=764,full_name=Overhead: APK file,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/base.apk>.other@0(size_without_padding=0,padding=33902635,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1,component=)
+<Bundle.minimal.apks/other.apk>.other@0(size_without_padding=560,padding=0,full_name=AndroidManifest.xml,object_path=,source_path=$APK/AndroidManifest.xml,flags={gen},num_aliases=1,component=)
+<Bundle.minimal.apks/other.apk>.other@0(size_without_padding=0,padding=136,full_name=Overhead: APK file,object_path=,source_path=,flags={},num_aliases=1,component=)
diff --git a/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/aapt2 b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/aapt2
new file mode 100755
index 0000000..a32eea4
--- /dev/null
+++ b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/aapt2
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# 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.
+
+base_dir=$(dirname "$0")
+exec python "$base_dir/mock_aapt2.py" "$@"
diff --git a/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_aapt2.py b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_aapt2.py
new file mode 100644
index 0000000..fa07129c
--- /dev/null
+++ b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_aapt2.py
@@ -0,0 +1,23 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+import zipfile
+
+
+def main():
+  apk_path = sys.argv[-1]
+  assert os.path.exists(apk_path), 'Apk does not exist: {}'.format(apk_path)
+  with zipfile.ZipFile(apk_path) as z:
+    try:
+      # The AndroidManifest.xml file will have the aapt2 output, and not XML.
+      with z.open('AndroidManifest.xml') as f:
+        sys.stdout.write(f.read())
+    except KeyError:
+      pass
+
+
+if __name__ == '__main__':
+  main()
diff --git a/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_apkanalyzer.py b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_apkanalyzer.py
index 79d149a7..aa8644cb 100644
--- a/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_apkanalyzer.py
+++ b/tools/binary_size/libsupersize/testdata/mock_sdk/tools/bin/mock_apkanalyzer.py
@@ -5,6 +5,7 @@
 
 import os
 import sys
+import zipfile
 
 
 _SCRIPT_DIR = os.path.dirname(__file__)
@@ -15,8 +16,12 @@
   # Without a proguard mapping file, the last argument is the apk_path.
   apk_path = sys.argv[-1]
   assert os.path.exists(apk_path), 'Apk does not exist: {}'.format(apk_path)
-  with open(_OUTPUT_FILE, 'r') as f:
-    sys.stdout.write(f.read())
+  with zipfile.ZipFile(apk_path) as z:
+    if any(n.endswith('.dex') for n in z.namelist()):
+      with open(_OUTPUT_FILE, 'r') as f:
+        sys.stdout.write(f.read())
+    else:
+      sys.stdout.write('P r 0   0       0       <TOTAL>')
 
 
 if __name__ == '__main__':
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 63d0e09..50dcd6f 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -1580,6 +1580,9 @@
 </enum>
 
 <enum name="AndroidDefaultBrowserPromoUserActionType">
+  <obsolete>
+    Removed Dec 2020; experiment is done and the data isn't useful.
+  </obsolete>
   <int value="0" label="Change Default"/>
   <int value="1" label="No Thanks"/>
 </enum>
@@ -6914,6 +6917,28 @@
   <int value="2" label="BLOCK_STATUS_ALL_DOMAINS_BLOCKED"/>
 </enum>
 
+<enum name="BluetoothAdapterConnectToServiceInsecurelyResult">
+  <int value="0" label="Success"/>
+  <int value="1" label="Error: Invalid arguments"/>
+  <int value="2" label="Error: Operation already in progress"/>
+  <int value="3" label="Error: Already exists"/>
+  <int value="4" label="Error: Operation is not supported"/>
+  <int value="5" label="Error: Not connected"/>
+  <int value="6" label="Error: Already connected"/>
+  <int value="7" label="Error: Operation currently not available"/>
+  <int value="8" label="Error: Does not exist"/>
+  <int value="9" label="Error: Operation not authorized"/>
+  <int value="10" label="Error: Not permitted"/>
+  <int value="11" label="Error: No such adapter"/>
+  <int value="12" label="Error: Agent not available"/>
+  <int value="13" label="Error: Resource not ready"/>
+  <int value="14" label="Error: Failed"/>
+  <int value="15" label="Error: Failed to create receiving Mojo pipe"/>
+  <int value="16" label="Error: Failed to create sending Mojo pipe"/>
+  <int value="17" label="Error: Could not connect to device"/>
+  <int value="18" label="Error: Unknown"/>
+</enum>
+
 <enum name="BluetoothAvailability">
   <int value="0" label="Unexpected error"/>
   <int value="1" label="Not available"/>
@@ -42824,6 +42849,8 @@
   <int value="-1497450774" label="TreatUnsafeDownloadsAsActive:disabled"/>
   <int value="-1497338981" label="disable-accelerated-overflow-scroll"/>
   <int value="-1496106797" label="IPH_PasswordsAccountStorage:enabled"/>
+  <int value="-1495973732"
+      label="ResamplingScrollEventsExperimentalPrediction:disabled"/>
   <int value="-1492934655" label="TabSwitcherOnReturn:enabled"/>
   <int value="-1492609320"
       label="TurnOffStreamingMediaCachingOnBattery:disabled"/>
@@ -43359,6 +43386,8 @@
   <int value="-1040000888" label="ContextMenuSearchWithGoogleLens:disabled"/>
   <int value="-1039889738" label="NativeNotifications:enabled"/>
   <int value="-1039555838" label="GamepadExtensions:enabled"/>
+  <int value="-1037950113"
+      label="ResamplingScrollEventsExperimentalPrediction:enabled"/>
   <int value="-1037128156" label="HomeLauncherGestures:disabled"/>
   <int value="-1035346097" label="SyncErrorInfoBarAndroid:enabled"/>
   <int value="-1035140982" label="ClientSideDetectionModelOnAndroid:enabled"/>
@@ -50300,6 +50329,22 @@
   <int value="5" label="Authentication Error"/>
 </enum>
 
+<enum name="MultiDeviceNearbyDisconnectionReason">
+  <int value="0" label="Disconnection requested by client"/>
+  <int value="1" label="Failed discovery"/>
+  <int value="2" label="Timeout during discovery"/>
+  <int value="3" label="Failed requesting connection"/>
+  <int value="4" label="Timeout during RequestConnection() call"/>
+  <int value="5" label="Failed accepting connection"/>
+  <int value="6" label="Timeout during AcceptConnection() call"/>
+  <int value="7" label="Connection rejected"/>
+  <int value="8" label="Timeout waiting for connection to be accepted"/>
+  <int value="9" label="SendMessage() failed"/>
+  <int value="10" label="Received unexpected payload type"/>
+  <int value="11" label="Connection lost"/>
+  <int value="12" label="Nearby process crash"/>
+</enum>
+
 <enum name="MultiDeviceNearbyMessageAction">
   <int value="0" label="Message Sent"/>
   <int value="1" label="Message Received"/>
@@ -52977,6 +53022,17 @@
   <int value="1" label="User Disconnect"/>
 </enum>
 
+<enum name="NetworkEligibilityStatus">
+  <int value="0" label="Network Is Eligible"/>
+  <int value="1" label="No Metedata"/>
+  <int value="2" label="Prohibited By Policy"/>
+  <int value="3" label="Invalid Password"/>
+  <int value="4" label="Not Connectable"/>
+  <int value="5" label="Not Configured By User"/>
+  <int value="6" label="Unsupported Security Type"/>
+  <int value="7" label="No Wifi Networks Available"/>
+</enum>
+
 <enum name="NetworkErrorType">
   <int value="0" label="Unknown"/>
   <int value="1" label="Portal"/>
@@ -66362,6 +66418,13 @@
   <int value="1" label="Launcher"/>
 </enum>
 
+<enum name="ScanJobFailureReason">
+  <int value="0" label="Unknown scanner error"/>
+  <int value="1" label="Scanner not found"/>
+  <int value="2" label="Unsupported Scan To path"/>
+  <int value="3" label="Save to disk failed"/>
+</enum>
+
 <enum name="ScheduledNavigationType">
   <obsolete>
     Deprecated August 2018
diff --git a/tools/metrics/histograms/histograms_xml/android/histograms.xml b/tools/metrics/histograms/histograms_xml/android/histograms.xml
index ca74d9a..d949677 100644
--- a/tools/metrics/histograms/histograms_xml/android/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/android/histograms.xml
@@ -499,6 +499,9 @@
 
 <histogram name="Android.DefaultBrowserPromo.DialogShown"
     enum="AndroidDefaultBrowserPromoType" expires_after="2021-05-30">
+  <obsolete>
+    Removed Dec 2020; experiment is done and the data isn't useful.
+  </obsolete>
   <owner>lazzzis@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <owner>pavely@chromium.org</owner>
@@ -563,6 +566,9 @@
 
 <histogram name="Android.DefaultBrowserPromo.UIDismissalReason.NoDefault"
     enum="AndroidDefaultBrowserPromoUserActionType" expires_after="2021-06-06">
+  <obsolete>
+    Removed Dec 2020; experiment is done and the data isn't useful.
+  </obsolete>
   <owner>lazzzis@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <owner>pavely@chromium.org</owner>
@@ -574,6 +580,9 @@
 
 <histogram name="Android.DefaultBrowserPromo.UIDismissalReason.OtherDefault"
     enum="AndroidDefaultBrowserPromoUserActionType" expires_after="2021-05-30">
+  <obsolete>
+    Removed Dec 2020; experiment is done and the data isn't useful.
+  </obsolete>
   <owner>lazzzis@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <owner>pavely@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
index f37e5e3..784c786 100644
--- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -2059,6 +2059,25 @@
   </summary>
 </histogram>
 
+<histogram name="Blink.UpdateViewportIntersection.UpdateTime"
+    units="microseconds" expires_after="2021-03-21">
+<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
+
+<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
+
+<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" -->
+
+  <owner>schenney@chromium.org</owner>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent computing geometry information about iframes from the perspective
+    of their embedding document. This time is also included in the
+    Blink.IntersectionObservation.UpdateTime metric.
+
+    This histogram only records metrics on machines with high-resolution clocks.
+  </summary>
+</histogram>
+
 <histogram name="Blink.UseCounter.AnimatedCSSProperties"
     enum="MappedCSSProperties" expires_after="never">
 <!-- expires-never: used by Chrome Platform Status dashboard -->
diff --git a/tools/metrics/histograms/histograms_xml/bluetooth/histograms.xml b/tools/metrics/histograms/histograms_xml/bluetooth/histograms.xml
index 35efe536e..c3611e7 100644
--- a/tools/metrics/histograms/histograms_xml/bluetooth/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/bluetooth/histograms.xml
@@ -215,6 +215,17 @@
   </summary>
 </histogram>
 
+<histogram name="Bluetooth.Linux.ConnectToServiceInsecurelyResult"
+    enum="BluetoothAdapterConnectToServiceInsecurelyResult"
+    expires_after="2022-01-01">
+  <owner>alainm@chromium.org</owner>
+  <owner>nearby-share-chromeos-eng@google.com</owner>
+  <summary>
+    Result of attempting a call to mojom::Adapter::ConnectToServiceInsecurely().
+    Emitted when function completes.
+  </summary>
+</histogram>
+
 <histogram base="true" name="Bluetooth.MacOS.Errors"
     enum="MacOSBluetoothOperationsResult" expires_after="2021-01-31">
 <!-- Name completed by histogram_suffixes name="WebBluetoothMacOSAPIs" -->
diff --git a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
index 8399607..e696a5f 100644
--- a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
@@ -22,8 +22,9 @@
 <histograms>
 
 <histogram name="GPU.AcceleratedSurfaceRefreshRate" units="hz"
-    expires_after="M85">
+    expires_after="M90">
   <owner>vmiura@chromium.org</owner>
+  <owner>graphics-dev@chromium.org</owner>
   <summary>
     Refresh rate of the display in Hz. This is recorded every time we present a
     frame.
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
index b7b66e30..d5fdf1a 100644
--- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -2007,6 +2007,7 @@
   <affected-histogram name="Blink.ScrollingCoordinator.UpdateTime"/>
   <affected-histogram name="Blink.Style.UpdateTime"/>
   <affected-histogram name="Blink.StyleAndLayout.UpdateTime"/>
+  <affected-histogram name="Blink.UpdateViewportIntersection.UpdateTime"/>
   <affected-histogram name="Blink.WaitForCommit.UpdateTime"/>
 </histogram_suffixes>
 
@@ -2034,6 +2035,7 @@
   <affected-histogram name="Blink.ScrollingCoordinator.UpdateTime"/>
   <affected-histogram name="Blink.Style.UpdateTime"/>
   <affected-histogram name="Blink.StyleAndLayout.UpdateTime"/>
+  <affected-histogram name="Blink.UpdateViewportIntersection.UpdateTime"/>
   <affected-histogram name="Blink.WaitForCommit.UpdateTime"/>
 </histogram_suffixes>
 
@@ -2061,6 +2063,7 @@
   <affected-histogram name="Blink.ScrollingCoordinator.UpdateTime"/>
   <affected-histogram name="Blink.Style.UpdateTime"/>
   <affected-histogram name="Blink.StyleAndLayout.UpdateTime"/>
+  <affected-histogram name="Blink.UpdateViewportIntersection.UpdateTime"/>
   <affected-histogram name="Blink.WaitForCommit.UpdateTime"/>
 </histogram_suffixes>
 
diff --git a/tools/metrics/histograms/histograms_xml/history/histograms.xml b/tools/metrics/histograms/histograms_xml/history/histograms.xml
index 525db1c..4b1679d 100644
--- a/tools/metrics/histograms/histograms_xml/history/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/history/histograms.xml
@@ -170,7 +170,7 @@
 </histogram>
 
 <histogram name="History.ClearBrowsingData.FailedTasksChrome"
-    enum="ChromeBrowsingDataRemoverTasks" expires_after="2021-02-01">
+    enum="ChromeBrowsingDataRemoverTasks" expires_after="2021-04-01">
   <owner>dullweber@chromium.org</owner>
   <owner>msramek@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml
index 18c3da7a..b743ca7e 100644
--- a/tools/metrics/histograms/histograms_xml/media/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -1996,7 +1996,7 @@
 </histogram>
 
 <histogram name="Media.GpuMemoryBufferVideoFramePool.UnsupportedFormat"
-    enum="VideoPixelFormatUnion" expires_after="M82">
+    enum="VideoPixelFormatUnion" expires_after="2022-01-06">
   <owner>dcastagna@chromium.org</owner>
   <owner>mcasas@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/multi_device/histograms.xml b/tools/metrics/histograms/histograms_xml/multi_device/histograms.xml
index 26634e90..4953a80 100644
--- a/tools/metrics/histograms/histograms_xml/multi_device/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/multi_device/histograms.xml
@@ -274,6 +274,21 @@
   </summary>
 </histogram>
 
+<histogram name="MultiDevice.SecureChannel.Nearby.DisconnectionReason"
+    enum="MultiDeviceNearbyDisconnectionReason" expires_after="2022-01-01">
+  <owner>khorimoto@chromium.org</owner>
+  <owner>better-together-dev@google.com</owner>
+  <summary>
+    Tracks reasons why a Nearby Connection established via SecureChannel ends up
+    disconnecting. Includes a &quot;Disconnection requested by client&quot;
+    value emitted during intentional disconnections as well as several error
+    enum values.
+
+    Emitted when a connection fails to become established, or emitted after it
+    is already established when it becomes disconnected.
+  </summary>
+</histogram>
+
 <histogram name="MultiDevice.SecureChannel.Nearby.EffectiveConnectionResult"
     enum="BooleanSuccess" expires_after="2021-11-30">
   <owner>khorimoto@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/network/histograms.xml b/tools/metrics/histograms/histograms_xml/network/histograms.xml
index 7ee4bdc..6ed2cb9 100644
--- a/tools/metrics/histograms/histograms_xml/network/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/network/histograms.xml
@@ -2050,6 +2050,18 @@
   </summary>
 </histogram>
 
+<histogram name="Network.Wifi.Synced.ZeroNetworksEligibleForSync.Reason"
+    enum="NetworkEligibilityStatus" expires_after="2021-11-01">
+  <owner>cvandermerwe@google.com</owner>
+  <owner>jonmann@chromium.org</owner>
+  <owner>better-together-dev@google.com</owner>
+  <summary>
+    Chrome OS metric logged for users who have the feature enabled but have zero
+    networks eligible for sync. Tracks the reasons why none of the networks are
+    eligible.
+  </summary>
+</histogram>
+
 <histogram name="NetworkService.ConcerningRequestHeader.AddedOnRedirect"
     enum="ConcerningHeaderPresent" expires_after="2019-11-01">
   <owner>mmenke@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml
index 46df97a6..cd9725c 100644
--- a/tools/metrics/histograms/histograms_xml/others/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -17594,6 +17594,18 @@
   <summary>Records the result of shortcut creation for PWA.</summary>
 </histogram>
 
+<histogram name="WebApp.Shortcuts.Deletion.Success" enum="BooleanSuccess"
+    expires_after="M93">
+  <owner>phillis@chromium.org</owner>
+  <owner>dmurph@chromium.org</owner>
+  <owner>sunggch@microsoft.com</owner>
+  <summary>
+    Records the result of shortcut deletion for a PWA. This occurs when an
+    installed PWA is uninstalled, which can be triggered by user, policy admin,
+    or sync system depending on the situation.
+  </summary>
+</histogram>
+
 <histogram name="Webapp.SyncInitiatedUninstallResult" enum="BooleanSuccess"
     expires_after="2022-01-01">
   <owner>alancutter@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/platform/histograms.xml b/tools/metrics/histograms/histograms_xml/platform/histograms.xml
index c4ffb88..31dc28d 100644
--- a/tools/metrics/histograms/histograms_xml/platform/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/platform/histograms.xml
@@ -1236,6 +1236,21 @@
   <summary>Records occurrences of legacy U2F commands sent to cr50.</summary>
 </histogram>
 
+<histogram name="Platform.UnaggregatedUsageTime" units="seconds"
+    expires_after="2022-01-08">
+  <owner>mutexlox@chromium.org</owner>
+  <owner>iby@chromium.org</owner>
+  <owner>cros-telemetry@google.com</owner>
+  <summary>
+    Use time (device ON and not asleep) in a particular period (approximately
+    every five minutes). To compute usage time in a given period (e.g. a day),
+    sum up all reported values of this metric for that period (day). As with
+    other UMA metrics on CrOS, this will be uploaded roughly every half-hour.
+    This will eventually supercede Platform.DailyUseTime, which has significant
+    limitations (e.g. it may not report on the right day).
+  </summary>
+</histogram>
+
 <histogram name="Platform.UncleanShutdownsDaily" units="count per day"
     expires_after="never">
 <!-- expires-never: Used to assess Chrome OS platform stability. -->
diff --git a/tools/metrics/histograms/histograms_xml/scanning/histograms.xml b/tools/metrics/histograms/histograms_xml/scanning/histograms.xml
index 26ae58a..eac8ed7 100644
--- a/tools/metrics/histograms/histograms_xml/scanning/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/scanning/histograms.xml
@@ -63,6 +63,14 @@
   </summary>
 </histogram>
 
+<histogram name="Scanning.ScanJobFailureReason" enum="ScanJobFailureReason"
+    expires_after="2021-12-04">
+  <owner>gavinwill@chromium.org</owner>
+  <owner>jschettler@chromium.org</owner>
+  <owner>cros-peripherals@google.com</owner>
+  <summary>Records the reason a scan job failed.</summary>
+</histogram>
+
 <histogram name="Scanning.ScanJobSuccessful" enum="Boolean"
     expires_after="2021-12-04">
   <owner>gavinwill@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 609aea1..febba32 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,16 +1,16 @@
 {
     "trace_processor_shell": {
         "win": {
-            "hash": "e966ca8bd8894222cc224f0256aa5b32aef94669",
-            "remote_path": "perfetto_binaries/trace_processor_shell/win/070ef598892aee3d5cfb628f577867217c863142/trace_processor_shell.exe"
+            "hash": "7344c14ec15956c2688ff8aac4ddc645404835e9",
+            "remote_path": "perfetto_binaries/trace_processor_shell/win/11e6cfe60a925078976c25536c42358ef3f7666c/trace_processor_shell.exe"
         },
         "mac": {
-            "hash": "e714905178b25795c55a9468c15a3aa0a4038d47",
-            "remote_path": "perfetto_binaries/trace_processor_shell/mac/070ef598892aee3d5cfb628f577867217c863142/trace_processor_shell"
+            "hash": "6f7e8527130f15e840fbc7a20e0d3e069c414327",
+            "remote_path": "perfetto_binaries/trace_processor_shell/mac/61125414310ae1df95fc378cd432071283783a81/trace_processor_shell"
         },
         "linux": {
-            "hash": "5417da4ae1c19ada86faeaba0e3d694c4ff3661b",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/3ce4e8ee1301d0102b3595187a93a3ba067b2a69/trace_processor_shell"
+            "hash": "fb9c4022762e5cdcfa36d7d23b457ec7f179bec2",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/61125414310ae1df95fc378cd432071283783a81/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/base/prediction/empty_predictor.cc b/ui/base/prediction/empty_predictor.cc
index 9859880..c1cacb3 100644
--- a/ui/base/prediction/empty_predictor.cc
+++ b/ui/base/prediction/empty_predictor.cc
@@ -30,7 +30,8 @@
 }
 
 std::unique_ptr<InputPredictor::InputData> EmptyPredictor::GeneratePrediction(
-    base::TimeTicks predict_time) const {
+    base::TimeTicks predict_time,
+    base::TimeDelta frame_interval) {
   if (!HasPrediction())
     return nullptr;
   return std::make_unique<InputData>(last_input_.value());
diff --git a/ui/base/prediction/empty_predictor.h b/ui/base/prediction/empty_predictor.h
index 408261b..ebb41b3 100644
--- a/ui/base/prediction/empty_predictor.h
+++ b/ui/base/prediction/empty_predictor.h
@@ -30,7 +30,8 @@
 
   // Returns the last_input_ for testing.
   std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks predict_time) const override;
+      base::TimeTicks predict_time,
+      base::TimeDelta frame_interval) override;
 
   // Returns kTimeInterval for testing.
   base::TimeDelta TimeInterval() const override;
diff --git a/ui/base/prediction/input_predictor.h b/ui/base/prediction/input_predictor.h
index 50b8a9c..a77491a 100644
--- a/ui/base/prediction/input_predictor.h
+++ b/ui/base/prediction/input_predictor.h
@@ -47,8 +47,12 @@
   virtual bool HasPrediction() const = 0;
 
   // Generate the prediction based on current points.
+  // It can use a latency based on the vsync refresh rate: `frame_interval`.
+  // TODO(crbug.com/1142061): Remove the `frame_interval` arg if the expriment
+  // concludes that a frame-dependent latency isn't better.
   virtual std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks predict_time) const = 0;
+      base::TimeTicks predict_time,
+      base::TimeDelta frame_interval = base::TimeDelta::FromSeconds(0)) = 0;
 
   // Returns the maximum of prediction available for resampling
   // before having side effects (jitter, wrong orientation, etc..)
diff --git a/ui/base/prediction/input_predictor_unittest_helpers.h b/ui/base/prediction/input_predictor_unittest_helpers.h
index db2dadf..2ce8fef 100644
--- a/ui/base/prediction/input_predictor_unittest_helpers.h
+++ b/ui/base/prediction/input_predictor_unittest_helpers.h
@@ -21,9 +21,9 @@
   InputPredictorTest();
   ~InputPredictorTest() override;
 
-  static base::TimeTicks FromMilliseconds(int64_t ms) {
+  static base::TimeTicks FromMilliseconds(double ms) {
     return test::PredictionUnittestHelpers::GetStaticTimeStampForTests() +
-           base::TimeDelta::FromMilliseconds(ms);
+           base::TimeDelta::FromMillisecondsD(ms);
   }
 
   void ValidatePredictor(const std::vector<double>& x,
diff --git a/ui/base/prediction/kalman_predictor.cc b/ui/base/prediction/kalman_predictor.cc
index df359f5d..2678cfe6 100644
--- a/ui/base/prediction/kalman_predictor.cc
+++ b/ui/base/prediction/kalman_predictor.cc
@@ -71,7 +71,8 @@
 }
 
 std::unique_ptr<InputPredictor::InputData> KalmanPredictor::GeneratePrediction(
-    base::TimeTicks predict_time) const {
+    base::TimeTicks predict_time,
+    base::TimeDelta frame_interval) {
   if (!HasPrediction())
     return nullptr;
 
diff --git a/ui/base/prediction/kalman_predictor.h b/ui/base/prediction/kalman_predictor.h
index 89d7b466b2..a748a1d 100644
--- a/ui/base/prediction/kalman_predictor.h
+++ b/ui/base/prediction/kalman_predictor.h
@@ -48,7 +48,8 @@
   // Generate the prediction based on stored points and given time_stamp.
   // Return false if no prediction available.
   std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks predict_time) const override;
+      base::TimeTicks predict_time,
+      base::TimeDelta frame_interval) override;
 
   // Return the filtered value of time intervals.
   base::TimeDelta TimeInterval() const override;
diff --git a/ui/base/prediction/least_squares_predictor.cc b/ui/base/prediction/least_squares_predictor.cc
index ab3c37c..ef3085b 100644
--- a/ui/base/prediction/least_squares_predictor.cc
+++ b/ui/base/prediction/least_squares_predictor.cc
@@ -82,7 +82,8 @@
 }
 
 std::unique_ptr<InputPredictor::InputData>
-LeastSquaresPredictor::GeneratePrediction(base::TimeTicks predict_time) const {
+LeastSquaresPredictor::GeneratePrediction(base::TimeTicks predict_time,
+                                          base::TimeDelta frame_interval) {
   if (!HasPrediction())
     return nullptr;
 
diff --git a/ui/base/prediction/least_squares_predictor.h b/ui/base/prediction/least_squares_predictor.h
index 12b9f1c..a846012 100644
--- a/ui/base/prediction/least_squares_predictor.h
+++ b/ui/base/prediction/least_squares_predictor.h
@@ -38,7 +38,8 @@
   // Generate the prediction based on stored points and given time_stamp.
   // Return false if no prediction available.
   std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks predict_time) const override;
+      base::TimeTicks predict_time,
+      base::TimeDelta frame_interval) override;
 
   // Return the averaged value of time intervals.
   base::TimeDelta TimeInterval() const override;
diff --git a/ui/base/prediction/linear_predictor.cc b/ui/base/prediction/linear_predictor.cc
index 9f85488..08a2ca5 100644
--- a/ui/base/prediction/linear_predictor.cc
+++ b/ui/base/prediction/linear_predictor.cc
@@ -81,7 +81,8 @@
 }
 
 std::unique_ptr<InputPredictor::InputData> LinearPredictor::GeneratePrediction(
-    base::TimeTicks predict_time) const {
+    base::TimeTicks predict_time,
+    base::TimeDelta frame_interval) {
   if (!HasPrediction())
     return nullptr;
 
diff --git a/ui/base/prediction/linear_predictor.h b/ui/base/prediction/linear_predictor.h
index 0f3bac5..9699735 100644
--- a/ui/base/prediction/linear_predictor.h
+++ b/ui/base/prediction/linear_predictor.h
@@ -42,7 +42,8 @@
   // Generate the prediction based on stored points and given time_stamp.
   // Return false if no prediction available.
   std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks predict_time) const override;
+      base::TimeTicks predict_time,
+      base::TimeDelta frame_interval) override;
 
   // Return the average time delta in the event queue.
   base::TimeDelta TimeInterval() const override;
diff --git a/ui/base/prediction/linear_resampling.cc b/ui/base/prediction/linear_resampling.cc
index 850e99c..92bd5f0 100644
--- a/ui/base/prediction/linear_resampling.cc
+++ b/ui/base/prediction/linear_resampling.cc
@@ -6,6 +6,8 @@
 
 #include <algorithm>
 
+#include <base/feature_list.h>
+#include "base/strings/string_number_conversions.h"
 #include "ui/base/ui_base_features.h"
 
 namespace ui {
@@ -22,7 +24,13 @@
 // resampling either doing interpolation or extrapolating a closer future time
 // so that resampled result is more accurate and has less noise. This adds some
 // latency during resampling but a few ms should be fine.
-constexpr auto kResampleLatency = base::TimeDelta::FromMilliseconds(5);
+constexpr auto kResampleLatency = base::TimeDelta::FromMilliseconds(-5);
+// The optimal prediction anticipation from experimentation: In the study
+// https://bit.ly/3iyQf8V we found that, on a machine with VSync at 60Hz, adding
+// 1/2 * frame_interval (on top of kResampleLatency) minimizes the Lag on touch
+// scrolling. + 1/2 * (1/60) - 5ms = 3.3ms.
+constexpr auto kResampleLatencyExperimental =
+    base::TimeDelta::FromMillisecondsD(3.3);
 
 // Get position at |sample_time| by linear interpolate/extrapolate a and b.
 inline gfx::PointF lerp(const InputPredictor::InputData& a,
@@ -71,11 +79,14 @@
 }
 
 std::unique_ptr<InputPredictor::InputData> LinearResampling::GeneratePrediction(
-    base::TimeTicks frame_time) const {
+    base::TimeTicks frame_time,
+    base::TimeDelta frame_interval) {
   if (!HasPrediction())
     return nullptr;
 
-  base::TimeTicks sample_time = frame_time - kResampleLatency;
+  base::TimeDelta resample_latency =
+      latency_calculator_.GetResampleLatency(frame_interval);
+  base::TimeTicks sample_time = frame_time + resample_latency;
 
   base::TimeDelta max_prediction =
       std::min(kResampleMaxPrediction, events_dt_ / 2.0);
@@ -94,4 +105,37 @@
   return kTimeInterval;
 }
 
+base::TimeDelta LinearResampling::LatencyCalculator::GetResampleLatency(
+    base::TimeDelta frame_interval) {
+  // Cache |resample_latency_| and recalculate only when |frame_interval|
+  // changes.
+  if (frame_interval != frame_interval_ || resample_latency_.is_zero()) {
+    frame_interval_ = frame_interval;
+    resample_latency_ = CalculateLatency();
+  }
+  return resample_latency_;
+}
+
+base::TimeDelta LinearResampling::LatencyCalculator::CalculateLatency() {
+  std::string prediction_type = GetFieldTrialParamValueByFeature(
+      ::features::kResamplingScrollEventsExperimentalPrediction, "mode");
+
+  if (prediction_type != ::features::kPredictionTypeTimeBased &&
+      prediction_type != ::features::kPredictionTypeFramesBased)
+    return kResampleLatency;
+
+  std::string latency_value = GetFieldTrialParamValueByFeature(
+      ::features::kResamplingScrollEventsExperimentalPrediction, "latency");
+  double latency;
+  if (base::StringToDouble(latency_value, &latency)) {
+    return prediction_type == ::features::kPredictionTypeTimeBased
+               ? base::TimeDelta::FromMillisecondsD(latency)
+               : latency * frame_interval_ + kResampleLatency;
+  }
+
+  return prediction_type == ::features::kPredictionTypeTimeBased
+             ? kResampleLatencyExperimental
+             : 0.5 * frame_interval_ + kResampleLatency;
+}
+
 }  // namespace ui
diff --git a/ui/base/prediction/linear_resampling.h b/ui/base/prediction/linear_resampling.h
index 4e44d44d..c100a754 100644
--- a/ui/base/prediction/linear_resampling.h
+++ b/ui/base/prediction/linear_resampling.h
@@ -38,12 +38,24 @@
   // Generate the prediction based on stored points and given frame_time.
   // Return false if no prediction available.
   std::unique_ptr<InputData> GeneratePrediction(
-      base::TimeTicks frame_time) const override;
+      base::TimeTicks frame_time,
+      base::TimeDelta frame_interval) override;
 
   // Return the average time delta in the event queue.
   base::TimeDelta TimeInterval() const override;
 
  private:
+  // Class to cache the Resample Latency to avoid its recalculation each frame.
+  class LatencyCalculator {
+   public:
+    base::TimeDelta GetResampleLatency(base::TimeDelta frame_interval);
+
+   private:
+    base::TimeDelta CalculateLatency();
+    base::TimeDelta resample_latency_;
+    base::TimeDelta frame_interval_;
+  };
+
   static constexpr size_t kNumEventsForResampling = 2;
 
   // Store the last events received
@@ -52,6 +64,8 @@
   // Store the current delta time between the last 2 events
   base::TimeDelta events_dt_;
 
+  LatencyCalculator latency_calculator_;
+
   DISALLOW_COPY_AND_ASSIGN(LinearResampling);
 };
 
diff --git a/ui/base/prediction/linear_resampling_unittest.cc b/ui/base/prediction/linear_resampling_unittest.cc
index 9ae3bda..9ab31aa8 100644
--- a/ui/base/prediction/linear_resampling_unittest.cc
+++ b/ui/base/prediction/linear_resampling_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "ui/base/prediction/linear_resampling.h"
 
+#include "base/test/scoped_feature_list.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/prediction/input_predictor_unittest_helpers.h"
 #include "ui/base/ui_base_features.h"
@@ -17,6 +18,51 @@
 
   void SetUp() override { predictor_ = std::make_unique<LinearResampling>(); }
 
+  void ValidatePredictorFrameBased(
+      const std::vector<double>& events_x,
+      const std::vector<double>& events_y,
+      const std::vector<double>& events_time_ms,
+      const std::vector<double>& prediction_time_ms,
+      const std::vector<double>& predicted_x,
+      const std::vector<double>& predicted_y,
+      const double vsync_frequency) {
+    // LinearResampling* predictor =
+    // dynamic_cast<LinearResampling*>(predictor_.get());
+    base::TimeDelta frame_interval =
+        base::TimeDelta::FromSecondsD(1.0f / vsync_frequency);
+
+    predictor_->Reset();
+    std::vector<double> computed_x;
+    std::vector<double> computed_y;
+    size_t current_prediction_index = 0;
+    for (size_t i = 0; i < events_time_ms.size(); i++) {
+      InputPredictor::InputData data = {gfx::PointF(events_x[i], events_y[i]),
+                                        FromMilliseconds(events_time_ms[i])};
+      predictor_->Update(data);
+
+      if (predictor_->HasPrediction()) {
+        auto result = predictor_->GeneratePrediction(
+            FromMilliseconds(prediction_time_ms[current_prediction_index]),
+            frame_interval);
+        EXPECT_TRUE(result);
+        computed_x.push_back(result->pos.x());
+        computed_y.push_back(result->pos.y());
+        EXPECT_GT(result->time_stamp, base::TimeTicks());
+        current_prediction_index++;
+      }
+    }
+
+    EXPECT_TRUE(computed_x.size() == predicted_x.size());
+    if (computed_x.size() == predicted_x.size()) {
+      for (size_t i = 0; i < predicted_x.size(); i++) {
+        EXPECT_NEAR(computed_x[i], predicted_x[i], kEpsilon);
+        EXPECT_NEAR(computed_y[i], predicted_y[i], kEpsilon);
+      }
+    }
+  }
+
+  base::test::ScopedFeatureList feature_list;
+
   DISALLOW_COPY_AND_ASSIGN(LinearResamplingTest);
 };
 
@@ -119,5 +165,95 @@
             base::TimeDelta::FromMilliseconds(t[1] - t[0]));
 }
 
+// Tests resampling with the experimental latency if +3.3ms instead of
+// the default -5ms.
+TEST_F(LinearResamplingTest, ResamplingValueWithExperimentalLatencyTimeBased) {
+  base::FieldTrialParams params;
+  params["mode"] = ::features::kPredictionTypeTimeBased;
+  feature_list.Reset();
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kResamplingScrollEventsExperimentalPrediction, params);
+
+  std::vector<double> x = {10, 20, 30};
+  std::vector<double> y = {5, 25, 35};
+  std::vector<double> t = {15, 24, 32};
+
+  // Resample at `frame_time` = 24.7 ms, `sample_time` = 24.7+3.3 = 28ms.
+  // Resample at `frame_time` = 32.7 ms, `sample_time` = 32.7+3.3 = 36ms.
+  std::vector<double> pred_ts = {24.7, 32.7};
+  std::vector<double> pred_x = {24.44, 35};
+  std::vector<double> pred_y = {33.89, 40};
+  ValidatePredictor(x, y, t, pred_ts, pred_x, pred_y);
+}
+
+// Tests resampling with the experimental latency if +1ms (using switch) instead
+// of the default -5ms.
+TEST_F(LinearResamplingTest,
+       ResamplingValueWithExperimentalLatencyTimeBasedSwitch) {
+  base::FieldTrialParams params;
+  params["mode"] = ::features::kPredictionTypeTimeBased;
+  params["latency"] = "1.0";
+  feature_list.Reset();
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kResamplingScrollEventsExperimentalPrediction, params);
+
+  std::vector<double> x = {10, 20, 30};
+  std::vector<double> y = {5, 25, 35};
+  std::vector<double> t = {15, 24, 32};
+
+  // Resample at `frame_time` = 27 ms, `sample_time` = 27+1 = 28ms.
+  // Resample at `frame_time` = 35 ms, `sample_time` = 35+1 = 36ms.
+  std::vector<double> pred_ts = {27, 35};
+  std::vector<double> pred_x = {24.44, 35};
+  std::vector<double> pred_y = {33.89, 40};
+  ValidatePredictor(x, y, t, pred_ts, pred_x, pred_y);
+}
+
+// Tests resampling with the experimental latency if +0.5*`frame_interval`
+// instead of the default -5ms.
+TEST_F(LinearResamplingTest, ResamplingValueWithExperimentalLatencyFrameBased) {
+  base::FieldTrialParams params;
+  params["mode"] = ::features::kPredictionTypeFramesBased;
+  feature_list.Reset();
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kResamplingScrollEventsExperimentalPrediction, params);
+
+  std::vector<double> x = {10, 20, 30};
+  std::vector<double> y = {5, 25, 35};
+  std::vector<double> t = {15, 24, 32};
+
+  // Using 100Hz frequency => `frame_interval` = 10ms
+  // Resample at `frame_time` = 33 ms, `sample_time` = 28-5+0.5*10 = 28ms.
+  // Resample at `frame_time` = 41 ms, `sample_time` = 36-5+0.5*10 = 36ms.
+  std::vector<double> pred_ts = {28, 36};
+  std::vector<double> pred_x = {24.44, 35};
+  std::vector<double> pred_y = {33.89, 40};
+  ValidatePredictorFrameBased(x, y, t, pred_ts, pred_x, pred_y, 100);
+}
+
+// Tests resampling with the experimental latency if +0.5*`frame_interval`
+// (using switch) instead of the default -5ms.
+TEST_F(LinearResamplingTest,
+       ResamplingValueWithExperimentalLatencyFrameBasedSwitch) {
+  base::FieldTrialParams params;
+  params["mode"] = ::features::kPredictionTypeFramesBased;
+  params["latency"] = "1.0";
+  feature_list.Reset();
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kResamplingScrollEventsExperimentalPrediction, params);
+
+  std::vector<double> x = {10, 20, 30};
+  std::vector<double> y = {5, 25, 35};
+  std::vector<double> t = {15, 24, 32};
+
+  // Using 200Hz frequency => `frame_interval` = 5ms
+  // Resample at `frame_time` = 33 ms, `sample_time` = 28-5+1*5 = 28ms.
+  // Resample at `frame_time` = 41 ms, `sample_time` = 36-5+1*5 = 36ms.
+  std::vector<double> pred_ts = {28, 36};
+  std::vector<double> pred_x = {24.44, 35};
+  std::vector<double> pred_y = {33.89, 40};
+  ValidatePredictorFrameBased(x, y, t, pred_ts, pred_x, pred_y, 200);
+}
+
 }  // namespace test
 }  // namespace ui
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc
index 6b60c00..2d5847dd 100644
--- a/ui/base/ui_base_features.cc
+++ b/ui/base/ui_base_features.cc
@@ -253,6 +253,10 @@
   return base::FeatureList::IsEnabled(kSynchronousPageFlipTesting);
 }
 
+const base::Feature kResamplingScrollEventsExperimentalPrediction{
+    "ResamplingScrollEventsExperimentalPrediction",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 #if defined(USE_X11) || defined(USE_OZONE)
 const base::Feature kUseOzonePlatform {
   "UseOzonePlatform",
@@ -292,6 +296,11 @@
 const char kFilterNameEmpty[] = "empty_filter";
 const char kFilterNameOneEuro[] = "one_euro_filter";
 
+const char kPredictionTypeTimeBased[] = "time";
+const char kPredictionTypeFramesBased[] = "frames";
+const char kPredictionTypeDefaultTime[] = "3.3";
+const char kPredictionTypeDefaultFramesRatio[] = "0.5";
+
 const base::Feature kSwipeToMoveCursor{"SwipeToMoveCursor",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h
index 7166d0a..4eeda91 100644
--- a/ui/base/ui_base_features.h
+++ b/ui/base/ui_base_features.h
@@ -138,6 +138,23 @@
 extern const char kPredictorNameLinearResampling[];
 COMPONENT_EXPORT(UI_BASE_FEATURES) extern const char kPredictorNameEmpty[];
 
+// Enables resampling of scroll events using an experimental latency of +3.3ms
+// instead of the original -5ms.
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+extern const base::Feature kResamplingScrollEventsExperimentalPrediction;
+
+// The type of prediction used. TimeBased uses a fixed timing, FramesBased uses
+// a ratio of the vsync refresh rate. The timing/ratio can be changed on the
+// command line through a `latency` param.
+COMPONENT_EXPORT(UI_BASE_FEATURES) extern const char kPredictionTypeTimeBased[];
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+extern const char kPredictionTypeFramesBased[];
+// The default values for `latency`
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+extern const char kPredictionTypeDefaultTime[];
+COMPONENT_EXPORT(UI_BASE_FEATURES)
+extern const char kPredictionTypeDefaultFramesRatio[];
+
 // The type of filter to use for filtering events. These values are used as the
 // 'filter' feature param for |blink::features::kFilteringScrollPrediction|.
 COMPONENT_EXPORT(UI_BASE_FEATURES) extern const char kFilterNameEmpty[];
diff --git a/ui/display/fake/fake_display_delegate.cc b/ui/display/fake/fake_display_delegate.cc
index c8f6251c..2932ce3 100644
--- a/ui/display/fake/fake_display_delegate.cc
+++ b/ui/display/fake/fake_display_delegate.cc
@@ -132,9 +132,9 @@
 void FakeDisplayDelegate::Configure(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
     ConfigureCallback callback) {
-  base::flat_map<int64_t, bool> statuses;
+  bool config_success = true;
   for (const auto& config : config_requests) {
-    bool configure_success = false;
+    bool request_success = false;
 
     if (config.mode.has_value()) {
       // Find display snapshot of display ID.
@@ -147,19 +147,20 @@
         // Check that config mode is appropriate for the display snapshot.
         for (const auto& existing_mode : snapshot->get()->modes()) {
           if (AreModesEqual(*existing_mode.get(), *config.mode.value().get())) {
-            configure_success = true;
+            request_success = true;
             break;
           }
         }
       }
     } else {
       // This is a request to turn off the display.
-      configure_success = true;
+      request_success = true;
     }
-    statuses.insert(std::make_pair(config.id, configure_success));
+    config_success &= request_success;
   }
 
-  configure_callbacks_.push(base::BindOnce(std::move(callback), statuses));
+  configure_callbacks_.push(
+      base::BindOnce(std::move(callback), config_success));
 
   // Start the timer if it's not already running. If there are multiple queued
   // configuration requests then ConfigureDone() will handle starting the
diff --git a/ui/display/manager/configure_displays_task.cc b/ui/display/manager/configure_displays_task.cc
index fb78ce8..ac146c8 100644
--- a/ui/display/manager/configure_displays_task.cc
+++ b/ui/display/manager/configure_displays_task.cc
@@ -113,15 +113,6 @@
   return width_idx * base::size(kDisplayResolutionSamples) + height_idx + 1;
 }
 
-std::__wrap_iter<const DisplayConfigureRequest*> GetRequestForDisplayId(
-    int64_t display_id,
-    const std::vector<DisplayConfigureRequest>& requests) {
-  return find_if(requests.begin(), requests.end(),
-                 [display_id](const DisplayConfigureRequest& request) {
-                   return request.display->display_id() == display_id;
-                 });
-}
-
 void UpdateResolutionAndRefreshRateUma(const DisplayConfigureRequest& request) {
   const bool internal =
       request.display->type() == DISPLAY_CONNECTION_TYPE_INTERNAL;
@@ -236,55 +227,37 @@
   std::move(callback_).Run(task_status_);
 }
 
-void ConfigureDisplaysTask::OnConfigured(
-    const base::flat_map<int64_t, bool>& statuses) {
-  bool config_success = true;
-  // Check if all displays are successfully configured.
-  for (const auto& status : statuses) {
-    int64_t display_id = status.first;
-    bool display_success = status.second;
-    config_success &= display_success;
+void ConfigureDisplaysTask::OnConfigured(bool config_success) {
+  bool should_reconfigure = false;
 
-    auto request = GetRequestForDisplayId(display_id, requests_);
-    DCHECK(request != requests_.end());
-
-    VLOG(2) << "Configured status=" << display_success
-            << " display=" << request->display->display_id()
-            << " origin=" << request->origin.ToString()
-            << " mode=" << (request->mode ? request->mode->ToString() : "null");
-
-    UpdateAttemptSucceededUma(request->display, display_success);
-  }
-
-  // Update displays upon success or prep |requests_| for reconfiguration.
-  if (config_success) {
-    for (auto& request : requests_) {
+  for (auto& request : requests_) {
+    // Update displays upon success or prep |requests_| for reconfiguration.
+    if (config_success) {
       request.display->set_current_mode(request.mode);
       request.display->set_origin(request.origin);
-    }
-  } else {
-    bool should_reconfigure = false;
-    // For the failing config, check if there is another mode to be requested.
-    // If there is one, attempt to reconfigure everything again.
-    for (const auto& status : statuses) {
-      int64_t display_id = status.first;
-      bool display_success = status.second;
-      if (!display_success) {
-        const DisplayConfigureRequest* request =
-            GetRequestForDisplayId(display_id, requests_).base();
-        const DisplayMode* next_mode =
-            FindNextMode(*request->display, request->mode);
-        if (next_mode) {
-          const_cast<DisplayConfigureRequest*>(request)->mode = next_mode;
-          should_reconfigure = true;
-        }
+    } else {
+      // For the failing config, check if there is another mode to be requested.
+      // If there is one, attempt to reconfigure everything again.
+      const DisplayMode* next_mode =
+          FindNextMode(*request.display, request.mode);
+      if (next_mode) {
+        request.mode = next_mode;
+        should_reconfigure = true;
       }
     }
-    if (should_reconfigure) {
-      task_status_ = PARTIAL_SUCCESS;
-      Run();
-      return;
-    }
+
+    VLOG(2) << "Configured status=" << config_success
+            << " display=" << request.display->display_id()
+            << " origin=" << request.origin.ToString()
+            << " mode=" << (request.mode ? request.mode->ToString() : "null");
+
+    UpdateAttemptSucceededUma(request.display, config_success);
+  }
+
+  if (should_reconfigure) {
+    task_status_ = PARTIAL_SUCCESS;
+    Run();
+    return;
   }
 
   // Update the final state.
diff --git a/ui/display/manager/configure_displays_task.h b/ui/display/manager/configure_displays_task.h
index 2c09b932..1b878f5 100644
--- a/ui/display/manager/configure_displays_task.h
+++ b/ui/display/manager/configure_displays_task.h
@@ -66,7 +66,7 @@
   void OnDisplaySnapshotsInvalidated() override;
 
  private:
-  void OnConfigured(const base::flat_map<int64_t, bool>& statuses);
+  void OnConfigured(bool config_status);
 
   NativeDisplayDelegate* delegate_;  // Not owned.
 
diff --git a/ui/display/manager/display_configurator_unittest.cc b/ui/display/manager/display_configurator_unittest.cc
index 38dc5eb..bd39310 100644
--- a/ui/display/manager/display_configurator_unittest.cc
+++ b/ui/display/manager/display_configurator_unittest.cc
@@ -1033,7 +1033,7 @@
   // This test should attempt to configure a mirror mode that will not succeed
   // and should end up in extended mode.
   native_display_delegate_->set_max_configurable_pixels(
-      modes[3]->size().GetArea());
+      modes[1]->size().GetArea());
   state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR);
   UpdateOutputs(2, true);
 
@@ -1046,17 +1046,32 @@
           GetCrtcAction(
               {outputs_[1]->display_id(), gfx::Point(0, 0), modes[0].get()})
               .c_str(),
-          // First mode tried is expected to fail and it will
-          // retry with the 4th mode in the list (for non-internal displays).
+          // First try is expected to fail and it will retry with the next
+          // largest mode in the list (for non-internal displays).since the
+          // internal display will always fail, the display configurator will
+          // attempt all of the external display's available modes before it
+          // gives up.
           GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
                          outputs_[0]->native_mode()})
               .c_str(),
           GetCrtcAction(
               {outputs_[1]->display_id(), gfx::Point(0, 0), modes[3].get()})
               .c_str(),
+          GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
+                         outputs_[0]->native_mode()})
+              .c_str(),
+          GetCrtcAction(
+              {outputs_[1]->display_id(), gfx::Point(0, 0), modes[2].get()})
+              .c_str(),
+          GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
+                         outputs_[0]->native_mode()})
+              .c_str(),
+          GetCrtcAction(
+              {outputs_[1]->display_id(), gfx::Point(0, 0), modes[1].get()})
+              .c_str(),
           // Since it was requested to go into mirror mode and the configured
           // modes were different, it should now try and setup a valid
-          // configurable extended mode.
+          // configurable extended mode in the same order described above.
           GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
                          outputs_[0]->native_mode()})
               .c_str(),
@@ -1073,6 +1088,22 @@
                                            DisplayConfigurator::kVerticalGap),
                          modes[3].get()})
               .c_str(),
+          GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
+                         outputs_[0]->native_mode()})
+              .c_str(),
+          GetCrtcAction({outputs_[1]->display_id(),
+                         gfx::Point(0, modes[0]->size().height() +
+                                           DisplayConfigurator::kVerticalGap),
+                         modes[2].get()})
+              .c_str(),
+          GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0),
+                         outputs_[0]->native_mode()})
+              .c_str(),
+          GetCrtcAction({outputs_[1]->display_id(),
+                         gfx::Point(0, modes[0]->size().height() +
+                                           DisplayConfigurator::kVerticalGap),
+                         modes[1].get()})
+              .c_str(),
           nullptr),
       log_->GetActionsAndClear());
 }
diff --git a/ui/display/manager/test/test_native_display_delegate.cc b/ui/display/manager/test/test_native_display_delegate.cc
index 9cacc22..f812f04 100644
--- a/ui/display/manager/test/test_native_display_delegate.cc
+++ b/ui/display/manager/test/test_native_display_delegate.cc
@@ -73,15 +73,15 @@
 void TestNativeDisplayDelegate::Configure(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
     ConfigureCallback callback) {
-  base::flat_map<int64_t, bool> statuses;
+  bool config_success = true;
   for (const auto& config : config_requests)
-    statuses.insert(std::make_pair(config.id, Configure(config)));
+    config_success &= Configure(config);
 
   if (run_async_) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), statuses));
+        FROM_HERE, base::BindOnce(std::move(callback), config_success));
   } else {
-    std::move(callback).Run(statuses);
+    std::move(callback).Run(config_success);
   }
 }
 
diff --git a/ui/display/types/native_display_delegate.h b/ui/display/types/native_display_delegate.h
index 56375f9..0c04497 100644
--- a/ui/display/types/native_display_delegate.h
+++ b/ui/display/types/native_display_delegate.h
@@ -25,8 +25,7 @@
 
 using GetDisplaysCallback =
     base::OnceCallback<void(const std::vector<DisplaySnapshot*>&)>;
-using ConfigureCallback =
-    base::OnceCallback<void(const base::flat_map<int64_t, bool>&)>;
+using ConfigureCallback = base::OnceCallback<void(bool)>;
 using GetHDCPStateCallback =
     base::OnceCallback<void(bool, HDCPState, ContentProtectionMethod)>;
 using SetHDCPStateCallback = base::OnceCallback<void(bool)>;
diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc
index 6d2748d..31dfdf5d 100644
--- a/ui/gfx/image/image_skia.cc
+++ b/ui/gfx/image/image_skia.cc
@@ -125,7 +125,7 @@
   //   one and rescale the image.
   // Right now only Windows uses 2 and other platforms use 1 by default.
   // TODO(mukai, oshima): abandon 1 code path and use 2 for every platforms.
-  std::vector<const ImageSkiaRep>::iterator FindRepresentation(
+  std::vector<ImageSkiaRep>::const_iterator FindRepresentation(
       float scale,
       bool fetch_new_image) const;
 
@@ -211,7 +211,7 @@
   return source_ && source_->HasRepresentationAtAllScales();
 }
 
-std::vector<const ImageSkiaRep>::iterator ImageSkiaStorage::FindRepresentation(
+std::vector<ImageSkiaRep>::const_iterator ImageSkiaStorage::FindRepresentation(
     float scale,
     bool fetch_new_image) const {
   auto closest_iter = image_reps_.end();
diff --git a/ui/ozone/demo/window_manager.cc b/ui/ozone/demo/window_manager.cc
index 611d6bff..686f88da 100644
--- a/ui/ozone/demo/window_manager.cc
+++ b/ui/ozone/demo/window_manager.cc
@@ -108,13 +108,10 @@
   }
 }
 
-void WindowManager::OnDisplayConfigured(
-    const int64_t display_id,
-    const gfx::Rect& bounds,
-    const base::flat_map<int64_t, bool>& statuses) {
-  DCHECK_EQ(statuses.size(), 1UL);
-
-  if (statuses.at(display_id)) {
+void WindowManager::OnDisplayConfigured(const int64_t display_id,
+                                        const gfx::Rect& bounds,
+                                        bool config_success) {
+  if (config_success) {
     std::unique_ptr<DemoWindow> window(
         new DemoWindow(this, renderer_factory_.get(), bounds));
     window->Start();
diff --git a/ui/ozone/demo/window_manager.h b/ui/ozone/demo/window_manager.h
index 0415b01..db65a5b 100644
--- a/ui/ozone/demo/window_manager.h
+++ b/ui/ozone/demo/window_manager.h
@@ -41,7 +41,7 @@
       const std::vector<display::DisplaySnapshot*>& displays);
   void OnDisplayConfigured(const int64_t display_id,
                            const gfx::Rect& bounds,
-                           const base::flat_map<int64_t, bool>& statuses);
+                           bool config_success);
 
   // display::NativeDisplayDelegate:
   void OnConfigurationChanged() override;
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
index 8fdb11a..3b1057b0 100644
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
@@ -166,9 +166,9 @@
     drm->DropMaster();
 }
 
-base::flat_map<int64_t, bool> DrmGpuDisplayManager::ConfigureDisplays(
+bool DrmGpuDisplayManager::ConfigureDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests) {
-  base::flat_map<int64_t, bool> statuses;
+  bool config_success = true;
   ScreenManager::ControllerConfigsList controllers_to_configure;
 
   for (const auto& config : config_requests) {
@@ -176,7 +176,7 @@
     DrmDisplay* display = FindDisplay(display_id);
     if (!display) {
       LOG(ERROR) << "There is no display with ID " << display_id;
-      statuses.insert(std::make_pair(display_id, false));
+      config_success = false;
       continue;
     }
 
@@ -185,7 +185,7 @@
     if (config.mode) {
       if (!FindModeForDisplay(mode_ptr.get(), *config.mode.value(),
                               display->modes(), displays_)) {
-        statuses.insert(std::make_pair(display_id, false));
+        config_success = false;
         continue;
       }
     }
@@ -206,22 +206,21 @@
   }
 
   if (controllers_to_configure.empty())
-    return statuses;
+    return config_success;
 
   if (clear_overlay_cache_callback_)
     clear_overlay_cache_callback_.Run();
 
-  auto config_statuses =
+  config_success &=
       screen_manager_->ConfigureDisplayControllers(controllers_to_configure);
-  for (const auto& status : config_statuses) {
-    int64_t display_id = status.first;
-    bool success = status.second;
+  for (const auto& controller : controllers_to_configure) {
+    int64_t display_id = controller.display_id;
     DrmDisplay* display = FindDisplay(display_id);
     auto config = std::find_if(
         config_requests.begin(), config_requests.end(),
         [display_id](const auto& request) { return request.id == display_id; });
 
-    if (success) {
+    if (config_success) {
       display->SetOrigin(config->origin);
     } else {
       if (config->mode) {
@@ -235,11 +234,9 @@
                 << " crtc=" << display->crtc();
       }
     }
-
-    statuses.insert(std::make_pair(display_id, success));
   }
 
-  return statuses;
+  return config_success;
 }
 
 bool DrmGpuDisplayManager::GetHDCPState(
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
index 2dbe2ba..5bbdc84 100644
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
@@ -52,7 +52,7 @@
   bool TakeDisplayControl();
   void RelinquishDisplayControl();
 
-  base::flat_map<int64_t, bool> ConfigureDisplays(
+  bool ConfigureDisplays(
       const std::vector<display::DisplayConfigurationParams>& config_requests);
   bool GetHDCPState(int64_t display_id,
                     display::HDCPState* state,
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc
index d77131c..1de5138 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread.cc
@@ -328,13 +328,11 @@
 
 void DrmThread::ConfigureNativeDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    base::OnceCallback<void(const base::flat_map<int64_t, bool>&)> callback) {
+    base::OnceCallback<void(bool)> callback) {
   TRACE_EVENT0("drm", "DrmThread::ConfigureNativeDisplays");
 
-  base::flat_map<int64_t, bool> statuses =
-      display_manager_->ConfigureDisplays(config_requests);
-
-  std::move(callback).Run(statuses);
+  bool config_success = display_manager_->ConfigureDisplays(config_requests);
+  std::move(callback).Run(config_success);
 }
 
 void DrmThread::TakeDisplayControl(base::OnceCallback<void(bool)> callback) {
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.cc b/ui/ozone/platform/drm/gpu/screen_manager.cc
index 62edc86..00279e2 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager.cc
@@ -101,12 +101,6 @@
   return controller->GetFormatModifiersForModesetting(fourcc_format);
 }
 
-bool AreAllStatusesTrue(base::flat_map<int64_t, bool>& display_statuses) {
-  auto it = find_if(display_statuses.begin(), display_statuses.end(),
-                    [](const auto status) { return status.second == false; });
-  return (it == display_statuses.end());
-}
-
 }  // namespace
 
 ScreenManager::ScreenManager() = default;
@@ -227,7 +221,7 @@
     UpdateControllerToWindowMapping();
 }
 
-base::flat_map<int64_t, bool> ScreenManager::ConfigureDisplayControllers(
+bool ScreenManager::ConfigureDisplayControllers(
     const ControllerConfigsList& controllers_params) {
   TRACE_EVENT0("drm", "ScreenManager::ConfigureDisplayControllers");
 
@@ -244,29 +238,17 @@
     displays_for_drm_devices[params.drm].emplace_back(params);
   }
 
-  base::flat_map<int64_t, bool> statuses;
+  bool config_success = true;
   // Perform display configurations together for the same DRM only.
   for (const auto& configs_on_drm : displays_for_drm_devices) {
-    auto display_statuses = TestAndModeset(configs_on_drm.second);
-    statuses.insert(display_statuses.begin(), display_statuses.end());
+    config_success &=
+        TestModeset(configs_on_drm.second) && Modeset(configs_on_drm.second);
   }
 
-  if (AreAllStatusesTrue(statuses))
+  if (config_success)
     UpdateControllerToWindowMapping();
 
-  return statuses;
-}
-
-base::flat_map<int64_t, bool> ScreenManager::TestAndModeset(
-    const ControllerConfigsList& controllers_params) {
-  if (!TestModeset(controllers_params)) {
-    base::flat_map<int64_t, bool> statuses;
-    for (const auto& params : controllers_params)
-      statuses.insert(std::make_pair(params.display_id, false));
-    return statuses;
-  }
-
-  return Modeset(controllers_params);
+  return config_success;
 }
 
 bool ScreenManager::TestModeset(
@@ -301,11 +283,10 @@
       DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET);
 }
 
-base::flat_map<int64_t, bool> ScreenManager::Modeset(
-    const ControllerConfigsList& controllers_params) {
+bool ScreenManager::Modeset(const ControllerConfigsList& controllers_params) {
   TRACE_EVENT0("drm", "ScreenManager::Modeset");
 
-  base::flat_map<int64_t, bool> statuses;
+  bool modeset_success = true;
 
   for (const auto& params : controllers_params) {
     // Commit one controller at a time.
@@ -339,10 +320,10 @@
       UpdateControllerStateAfterModeset(params, request_for_update, status);
     }
 
-    statuses.insert(std::make_pair(params.display_id, status));
+    modeset_success &= status;
   }
 
-  return statuses;
+  return modeset_success;
 }
 
 void ScreenManager::SetDisplayControllerForEnableAndGetProps(
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.h b/ui/ozone/platform/drm/gpu/screen_manager.h
index 16a868c..bf34b8f 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager.h
+++ b/ui/ozone/platform/drm/gpu/screen_manager.h
@@ -68,7 +68,7 @@
   void RemoveDisplayControllers(const CrtcsWithDrmList& controllers_to_remove);
 
   // Enables/Disables the display controller based on if a mode exists.
-  base::flat_map<int64_t, bool> ConfigureDisplayControllers(
+  bool ConfigureDisplayControllers(
       const ControllerConfigsList& controllers_params);
 
   // Returns a reference to the display controller configured to display within
@@ -105,13 +105,9 @@
       const scoped_refptr<DrmDevice>& drm,
       uint32_t crtc);
 
-  base::flat_map<int64_t, bool> TestAndModeset(
-      const ControllerConfigsList& controllers_params);
-
   bool TestModeset(const ControllerConfigsList& controllers_params);
 
-  base::flat_map<int64_t, bool> Modeset(
-      const ControllerConfigsList& controllers_params);
+  bool Modeset(const ControllerConfigsList& controllers_params);
 
   // Configures a display controller to be enabled. The display controller is
   // identified by (|crtc|, |connector|) and the controller is to be modeset
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
index 975da5c..3281843 100644
--- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc
+++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
@@ -237,15 +237,11 @@
 void DrmDisplayHostManager::ConfigureDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
     display::ConfigureCallback callback) {
-  base::flat_map<int64_t, bool> dummy_statuses;
-  bool is_any_dummy = false;
   for (auto& config : config_requests) {
-    is_any_dummy |= GetDisplay(config.id)->is_dummy();
-    dummy_statuses.insert(std::make_pair(config.id, true));
-  }
-  if (is_any_dummy) {
-    std::move(callback).Run(dummy_statuses);
-    return;
+    if (GetDisplay(config.id)->is_dummy()) {
+      std::move(callback).Run(true);
+      return;
+    }
   }
 
   proxy_->GpuConfigureNativeDisplays(config_requests, std::move(callback));
diff --git a/ui/ozone/platform/drm/host/host_drm_device.cc b/ui/ozone/platform/drm/host/host_drm_device.cc
index 1c6c2b9..9cd757c 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.cc
+++ b/ui/ozone/platform/drm/host/host_drm_device.cc
@@ -136,16 +136,11 @@
   if (IsConnected()) {
     drm_device_->ConfigureNativeDisplays(config_requests, std::move(callback));
   } else {
-    // If not connected, report failure to config.
-    base::flat_map<int64_t, bool> dummy_statuses;
-    for (const auto& config : config_requests)
-      dummy_statuses.insert(std::make_pair(config.id, false));
-
     // Post this task to protect the callstack from accumulating too many
     // recursive calls to ConfigureDisplaysTask::Run() in cases in which the GPU
     // process crashes repeatedly.
     base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), dummy_statuses));
+        FROM_HERE, base::BindOnce(std::move(callback), false));
   }
 }
 
diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn
index ac195b3..c8492d70 100644
--- a/ui/ozone/platform/wayland/BUILD.gn
+++ b/ui/ozone/platform/wayland/BUILD.gn
@@ -383,6 +383,8 @@
     "host/wayland_window_manager_unittests.cc",
     "host/wayland_window_unittest.cc",
     "host/wayland_zaura_shell_unittest.cc",
+    "test/wayland_drag_drop_test.cc",
+    "test/wayland_drag_drop_test.h",
     "test/wayland_test.cc",
     "test/wayland_test.h",
   ]
diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc
index f44eed4..860e66c 100644
--- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc
@@ -33,6 +33,7 @@
 #include "ui/ozone/platform/wayland/test/test_data_offer.h"
 #include "ui/ozone/platform/wayland/test/test_data_source.h"
 #include "ui/ozone/platform/wayland/test/test_wayland_server_thread.h"
+#include "ui/ozone/platform/wayland/test/wayland_drag_drop_test.h"
 #include "ui/ozone/platform/wayland/test/wayland_test.h"
 #include "ui/ozone/public/platform_clipboard.h"
 #include "ui/platform_window/platform_window_init_properties.h"
@@ -128,17 +129,13 @@
   int available_operations_ = ui::DragDropTypes::DRAG_NONE;
 };
 
-class WaylandDataDragControllerTest : public WaylandTest {
+class WaylandDataDragControllerTest : public WaylandDragDropTest {
  public:
   WaylandDataDragControllerTest() = default;
+  ~WaylandDataDragControllerTest() override = default;
 
   void SetUp() override {
-    WaylandTest::SetUp();
-
-    Sync();
-
-    data_device_manager_ = server_.data_device_manager();
-    DCHECK(data_device_manager_);
+    WaylandDragDropTest::SetUp();
 
     drag_handler_delegate_ = std::make_unique<MockDragHandlerDelegate>();
     drop_handler_ = std::make_unique<MockDropHandler>();
@@ -168,9 +165,14 @@
     return text;
   }
 
-  uint32_t NextSerial() const {
-    static uint32_t serial = 0;
-    return ++serial;
+  void RunDragLoopWithSampleData(WaylandWindow* origin_window, int operations) {
+    ASSERT_TRUE(origin_window);
+    OSExchangeData os_exchange_data;
+    os_exchange_data.SetString(sample_text_for_dnd());
+    origin_window->StartDrag(os_exchange_data, operations, /*cursor=*/{},
+                             /*can_grab_pointer=*/true,
+                             drag_handler_delegate_.get());
+    Sync();
   }
 
   std::unique_ptr<WaylandWindow> CreateTestWindow(
@@ -189,66 +191,6 @@
     return window;
   }
 
-  // TODO(crbug.com/1163544): Deduplicate DnD test helper code.
-  void SendDndEnter(WaylandWindow* window, const gfx::Point& location) {
-    EXPECT_TRUE(data_device_manager_->data_source());
-
-    auto* surface = server_.GetObject<wl::MockSurface>(
-        window->root_surface()->GetSurfaceId());
-
-    // Emulate server sending an wl_data_device::offer event.
-    auto* data_offer = data_device_manager_->data_device()->OnDataOffer();
-    data_offer->OnOffer(
-        kMimeTypeText, ToClipboardData(std::string(kSampleTextForDragAndDrop)));
-
-    // Emulate server sending an wl_data_device::enter event.
-    data_device_manager_->data_device()->OnEnter(
-        NextSerial(), surface->resource(), wl_fixed_from_int(location.x()),
-        wl_fixed_from_int(location.y()), data_offer);
-  }
-
-  void SendDndLeave() {
-    EXPECT_TRUE(data_device_manager_->data_source());
-    data_device_manager_->data_device()->OnLeave();
-  }
-
-  void SendDndCancelled() {
-    EXPECT_TRUE(data_device_manager_->data_source());
-    data_device_manager_->data_source()->OnCancelled();
-  }
-
-  void ReadDataWhenSourceIsReady() {
-    Sync();
-
-    if (!data_device_manager_->data_source()) {
-      // The data source is created asynchronously via the window's data drag
-      // controller.  If it is null now, it means that the task for that has not
-      // yet executed, and we have to come later.
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE,
-          base::BindOnce(
-              &WaylandDataDragControllerTest::ReadDataWhenSourceIsReady,
-              base::Unretained(this)));
-      return;
-    }
-
-    // Now the server can read the data and give it to our callback.
-    base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
-    auto callback = base::BindOnce(
-        [](base::RunLoop* loop, std::vector<uint8_t>&& data) {
-          std::string result(data.begin(), data.end());
-          EXPECT_EQ(kSampleTextForDragAndDrop, result);
-          loop->Quit();
-        },
-        &run_loop);
-    data_device_manager_->data_source()->ReadData(kMimeTypeTextUtf8,
-                                                  std::move(callback));
-    run_loop.Run();
-
-    data_device_manager_->data_source()->OnCancelled();
-    Sync();
-  }
-
   void ScheduleDragCancel() {
     ScheduleTestTask(base::BindOnce(
         [](WaylandDataDragControllerTest* self) {
@@ -265,29 +207,7 @@
         base::Unretained(this)));
   }
 
-  void ScheduleTestTask(base::OnceClosure test_task) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(&WaylandDataDragControllerTest::RunTestTask,
-                       base::Unretained(this), std::move(test_task)));
-  }
-
-  void RunTestTask(base::OnceClosure test_task) {
-    Sync();
-
-    // The data source is created asynchronously by the data drag controller. If
-    // it is null at this point, it means that the task for that has not yet
-    // executed, and we have to try again a bit later.
-    if (!data_device_manager_->data_source()) {
-      ScheduleTestTask(std::move(test_task));
-      return;
-    }
-
-    std::move(test_task).Run();
-  }
-
  protected:
-  wl::TestDataDeviceManager* data_device_manager_;
   std::unique_ptr<MockDropHandler> drop_handler_;
   std::unique_ptr<MockDragHandlerDelegate> drag_handler_delegate_;
 };
@@ -296,21 +216,31 @@
   const bool restored_focus = window_->has_pointer_focus();
   window_->SetPointerFocus(true);
 
-  // The client starts dragging.
-  ASSERT_EQ(PlatformWindowType::kWindow, window_->type());
-  OSExchangeData os_exchange_data;
-  os_exchange_data.SetString(sample_text_for_dnd());
+  auto test = [](WaylandDataDragControllerTest* self) {
+    // Now the server can read the data and give it to our callback.
+    base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
+    auto read_callback = base::BindOnce(
+        [](base::RunLoop* loop, std::vector<uint8_t>&& data) {
+          std::string result(data.begin(), data.end());
+          EXPECT_EQ(kSampleTextForDragAndDrop, result);
+          loop->Quit();
+        },
+        &run_loop);
+    self->ReadData(kMimeTypeTextUtf8, std::move(read_callback));
+    run_loop.Run();
 
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&WaylandDataDragControllerTest::ReadDataWhenSourceIsReady,
-                     base::Unretained(this)));
+    self->SendDndCancelled();
+    self->Sync();
+  };
 
-  window_->StartDrag(os_exchange_data,
-                     DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_MOVE, {},
-                     /*can_grab_pointer=*/true, drag_handler_delegate_.get());
-  Sync();
+  // Post test task to be performed asynchronously once the dnd-related protocol
+  // objects are ready.
+  ScheduleTestTask(base::BindOnce(test, base::Unretained(this)));
 
+  RunDragLoopWithSampleData(
+      window_.get(), DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_MOVE);
+
+  // Ensure drag delegate it properly reset when the drag loop quits.
   EXPECT_FALSE(data_device()->drag_delegate_);
 
   window_->SetPointerFocus(restored_focus);
@@ -564,13 +494,11 @@
   const bool restored_focus = window_->has_pointer_focus();
   window_->SetPointerFocus(true);
 
+  // Schedule a wl_data_source::cancelled event to be sent asynchronously
+  // once the drag session gets started.
   ScheduleDragCancel();
 
-  OSExchangeData os_exchange_data;
-  os_exchange_data.SetString(sample_text_for_dnd());
-  window_->StartDrag(os_exchange_data, DragDropTypes::DRAG_COPY, {},
-                     /*can_grab_pointer=*/true, drag_handler_delegate_.get());
-  Sync();
+  RunDragLoopWithSampleData(window_.get(), DragDropTypes::DRAG_COPY);
 
   window_->SetPointerFocus(restored_focus);
 }
@@ -616,9 +544,6 @@
   ASSERT_EQ(PlatformWindowType::kWindow, window_1->type());
 
   auto test = [](WaylandDataDragControllerTest* self) {
-    // Emulate server sending an dnd offer + enter events for |window_1|.
-    self->SendDndEnter(self->window(), gfx::Point(10, 10));
-
     // Init and open |target_window|.
     MockPlatformWindowDelegate delegate_2;
     auto window_2 = self->CreateTestWindow(PlatformWindowType::kWindow,
@@ -645,12 +570,8 @@
   // started.
   ScheduleTestTask(base::BindOnce(test, base::Unretained(this)));
 
-  // Request to start the drag session, which spins a nested run loop.
-  OSExchangeData os_exchange_data;
-  os_exchange_data.SetString(sample_text_for_dnd());
-  window_1->StartDrag(os_exchange_data, DragDropTypes::DRAG_COPY, {}, true,
-                      drag_handler_delegate_.get());
-  Sync();
+  RunDragLoopWithSampleData(window_.get(), DragDropTypes::DRAG_COPY);
+
   window_1->SetPointerFocus(restored_focus);
 }
 
@@ -662,29 +583,31 @@
 
   auto test = [](WaylandDataDragControllerTest* self,
                  PlatformWindowType window_type) {
-    // Emulate server sending an dnd offer + enter events for |origin_window|.
-    self->SendDndEnter(self->window(), gfx::Point(10, 10));
-    EXPECT_CALL(*self->drop_handler(), MockOnDragEnter()).Times(1);
-    EXPECT_CALL(*self->drop_handler(), MockDragMotion(_, _, _)).Times(1);
-    self->Sync();
-
     // Init and open |target_window|.
-    MockPlatformWindowDelegate delegate_2;
-    auto window_2 =
-        self->CreateTestWindow(window_type, gfx::Size(100, 40), &delegate_2);
+    MockPlatformWindowDelegate aux_window_delegate;
+    auto aux_window = self->CreateTestWindow(window_type, gfx::Size(100, 40),
+                                             &aux_window_delegate);
 
-    // Leave |origin_window| and enter non-toplevel |window_2|.
+    // Leave |origin_window| and enter non-toplevel |aux_window|.
     self->SendDndLeave();
     EXPECT_CALL(*self->drop_handler(), OnDragLeave).Times(1);
+    self->Sync();
 
-    self->SendDndEnter(window_2.get(), {});
+    self->SendDndEnter(aux_window.get(), {});
     EXPECT_CALL(*self->drop_handler(), MockOnDragEnter()).Times(1);
     EXPECT_CALL(*self->drop_handler(), MockDragMotion(_, _, _)).Times(1);
     self->Sync();
 
+    // Goes back to |origin_window|, as |aux_window| is going to get destroyed
+    // once this test task finishes.
     self->SendDndLeave();
     EXPECT_CALL(*self->drop_handler(), OnDragLeave).Times(1);
     self->Sync();
+
+    self->SendDndEnter(self->window(), {});
+    EXPECT_CALL(*self->drop_handler(), MockOnDragEnter()).Times(1);
+    EXPECT_CALL(*self->drop_handler(), MockDragMotion(_, _, _)).Times(1);
+    self->Sync();
   };
 
   // Post test tasks, for each non-toplevel window type, to be performed
@@ -700,11 +623,8 @@
   ScheduleDragCancel();
 
   // Request to start the drag session, which spins a nested run loop.
-  OSExchangeData os_exchange_data;
-  os_exchange_data.SetString(sample_text_for_dnd());
-  origin_window->StartDrag(os_exchange_data, DragDropTypes::DRAG_COPY, {}, true,
-                           drag_handler_delegate_.get());
-  Sync();
+  RunDragLoopWithSampleData(origin_window, DragDropTypes::DRAG_COPY);
+
   origin_window->SetPointerFocus(restored_focus);
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
index db39448..55e173de 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
@@ -30,7 +30,7 @@
 #include "ui/ozone/platform/wayland/test/test_data_offer.h"
 #include "ui/ozone/platform/wayland/test/test_data_source.h"
 #include "ui/ozone/platform/wayland/test/test_wayland_server_thread.h"
-#include "ui/ozone/platform/wayland/test/wayland_test.h"
+#include "ui/ozone/platform/wayland/test/wayland_drag_drop_test.h"
 #include "ui/ozone/test/mock_platform_window_delegate.h"
 #include "ui/platform_window/extensions/wayland_extension.h"
 #include "ui/platform_window/platform_window_delegate.h"
@@ -41,14 +41,14 @@
 
 namespace ui {
 
-class WaylandWindowDragControllerTest : public WaylandTest,
-                                        public wl::TestDataDevice::Delegate {
+class WaylandWindowDragControllerTest : public WaylandDragDropTest {
  public:
   WaylandWindowDragControllerTest() = default;
   ~WaylandWindowDragControllerTest() override = default;
 
   void SetUp() override {
-    WaylandTest::SetUp();
+    WaylandDragDropTest::SetUp();
+
     screen_ = std::make_unique<WaylandScreen>(connection_.get());
 
     wl_seat_send_capabilities(server_.seat()->resource(),
@@ -59,16 +59,6 @@
 
     EXPECT_FALSE(window_->has_pointer_focus());
     EXPECT_EQ(State::kIdle, drag_controller()->state());
-
-    data_device_manager_ = server_.data_device_manager();
-    DCHECK(data_device_manager_);
-
-    source_ = nullptr;
-    data_device_manager_->data_device()->set_delegate(this);
-  }
-
-  void TearDown() override {
-    data_device_manager_->data_device()->set_delegate(nullptr);
   }
 
   WaylandWindowDragController* drag_controller() const {
@@ -79,52 +69,9 @@
     return connection_->wayland_window_manager();
   }
 
-  uint32_t NextSerial() const {
-    static uint32_t serial = 0;
-    return ++serial;
-  }
-
-  uint32_t NextTime() const {
-    static uint32_t timestamp = 0;
-    return ++timestamp;
-  }
-
  protected:
   using State = WaylandWindowDragController::State;
 
-  // wl::TestDataDevice::Delegate:
-  void StartDrag(wl::TestDataSource* source,
-                 wl::MockSurface* origin,
-                 uint32_t serial) override {
-    EXPECT_FALSE(source_);
-    source_ = source;
-    OfferAndEnter(origin);
-  }
-
-  // Helper functions
-  void SendDndMotion(const gfx::Point& location) {
-    EXPECT_TRUE(source_);
-    wl_fixed_t x = wl_fixed_from_int(location.x());
-    wl_fixed_t y = wl_fixed_from_int(location.y());
-    data_device_manager_->data_device()->OnMotion(NextTime(), x, y);
-  }
-
-  void SendDndEnter(WaylandWindow* window) {
-    EXPECT_TRUE(window);
-    OfferAndEnter(server_.GetObject<wl::MockSurface>(
-        window->root_surface()->GetSurfaceId()));
-  }
-
-  void SendDndLeave() {
-    EXPECT_TRUE(source_);
-    data_device_manager_->data_device()->OnLeave();
-  }
-
-  void SendDndDrop() {
-    EXPECT_TRUE(source_);
-    source_->OnCancelled();
-  }
-
   void SendPointerEnter(WaylandWindow* window,
                         MockPlatformWindowDelegate* delegate) {
     auto* surface = server_.GetObject<wl::MockSurface>(
@@ -181,24 +128,17 @@
               screen_->GetLocalProcessWidgetAtPoint(location, {}));
   }
 
-  void OfferAndEnter(wl::MockSurface* surface) {
-    EXPECT_TRUE(source_);
-    auto* data_device = data_device_manager_->data_device();
-    auto* offer = data_device->OnDataOffer();
-    EXPECT_EQ(1u, source_->mime_types().size());
-    for (const auto& mime_type : source_->mime_types())
-      offer->OnOffer(mime_type, {});
-
-    wl_data_device_send_enter(data_device->resource(), NextSerial(),
-                              surface->resource(), 0, 0, offer->resource());
-  }
+  // For the context of window drag, "drop" is detected through
+  // wl_data_source::cancelled in the regular case. Unless extended-drag
+  // protocol is available.
+  //
+  // TODO(crbug.com/1116431): Support extended-drag in test compositor.
+  void SendDndDrop() { SendDndCancelled(); }
 
   // client objects
   std::unique_ptr<WaylandScreen> screen_;
 
   // server objects
-  wl::TestDataDeviceManager* data_device_manager_;
-  wl::TestDataSource* source_;
   wl::MockPointer* pointer_;
 };
 
@@ -471,7 +411,7 @@
 
         // Exit |source_window| and enter the |target_window|.
         SendDndLeave();
-        SendDndEnter(target_window);
+        SendDndEnter(target_window, {});
         test_step = kEnteredTarget;
       });
 
diff --git a/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc
new file mode 100644
index 0000000..259e8541
--- /dev/null
+++ b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc
@@ -0,0 +1,127 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/platform/wayland/test/wayland_drag_drop_test.h"
+
+#include <wayland-util.h>
+
+#include <cstdint>
+
+#include "base/callback.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/ozone/platform/wayland/host/wayland_window.h"
+#include "ui/ozone/platform/wayland/test/mock_surface.h"
+#include "ui/ozone/platform/wayland/test/test_data_device.h"
+#include "ui/ozone/platform/wayland/test/test_data_device_manager.h"
+#include "ui/ozone/platform/wayland/test/test_data_offer.h"
+#include "ui/ozone/platform/wayland/test/test_data_source.h"
+
+namespace ui {
+
+WaylandDragDropTest::WaylandDragDropTest() = default;
+
+void WaylandDragDropTest::SendDndEnter(WaylandWindow* window,
+                                       const gfx::Point& location) {
+  auto* surface = server_.GetObject<wl::MockSurface>(
+      window->root_surface()->GetSurfaceId());
+  OfferAndEnter(surface, location);
+}
+
+void WaylandDragDropTest::SendDndLeave() {
+  data_device_manager_->data_device()->OnLeave();
+}
+
+void WaylandDragDropTest::SendDndMotion(const gfx::Point& location) {
+  EXPECT_TRUE(data_source_);
+  wl_fixed_t x = wl_fixed_from_int(location.x());
+  wl_fixed_t y = wl_fixed_from_int(location.y());
+  data_device_manager_->data_device()->OnMotion(NextTime(), x, y);
+}
+
+void WaylandDragDropTest::SendDndCancelled() {
+  EXPECT_TRUE(data_source_);
+  data_source_->OnCancelled();
+}
+
+void WaylandDragDropTest::ReadData(
+    const std::string& mime_type,
+    wl::TestDataSource::ReadDataCallback callback) {
+  ASSERT_TRUE(data_source_);
+  data_source_->ReadData(mime_type, std::move(callback));
+}
+
+void WaylandDragDropTest::SetUp() {
+  WaylandTest::SetUp();
+  Sync();
+
+  data_device_manager_ = server_.data_device_manager();
+  ASSERT_TRUE(data_device_manager_);
+
+  data_source_ = nullptr;
+  data_device_manager_->data_device()->set_delegate(this);
+}
+
+void WaylandDragDropTest::TearDown() {
+  data_device_manager_->data_device()->set_delegate(nullptr);
+  data_device_manager_ = nullptr;
+}
+
+// wl::TestDataDevice::Delegate:
+void WaylandDragDropTest::StartDrag(wl::TestDataSource* source,
+                                    wl::MockSurface* origin,
+                                    uint32_t serial) {
+  EXPECT_FALSE(data_source_);
+  data_source_ = source;
+  OfferAndEnter(origin, {});
+}
+
+uint32_t WaylandDragDropTest::NextSerial() const {
+  static uint32_t serial = 0;
+  return ++serial;
+}
+
+uint32_t WaylandDragDropTest::NextTime() const {
+  static uint32_t timestamp = 0;
+  return ++timestamp;
+}
+
+void WaylandDragDropTest::OfferAndEnter(wl::MockSurface* surface,
+                                        const gfx::Point& location) {
+  ASSERT_TRUE(data_source_);
+  auto* data_device = data_device_manager_->data_device();
+
+  // Emulate server sending an wl_data_device::offer event.
+  auto* data_offer = data_device->OnDataOffer();
+  for (const auto& mime_type : data_source_->mime_types())
+    data_offer->OnOffer(mime_type, {});
+
+  // Emulate server sending an wl_data_device::enter event.
+  wl_data_device_send_enter(
+      data_device->resource(), NextSerial(), surface->resource(),
+      wl_fixed_from_int(location.x()), wl_fixed_from_int(location.y()),
+      data_offer->resource());
+}
+
+void WaylandDragDropTest::ScheduleTestTask(base::OnceClosure test_task) {
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(&WaylandDragDropTest::RunTestTask,
+                                base::Unretained(this), std::move(test_task)));
+}
+
+void WaylandDragDropTest::RunTestTask(base::OnceClosure test_task) {
+  Sync();
+
+  // The data source is created asynchronously by the drag controller. If it is
+  // null at this point, it means that the task for that has not yet executed,
+  // so try again a bit later.
+  if (!data_device_manager_->data_source()) {
+    ScheduleTestTask(std::move(test_task));
+    return;
+  }
+
+  std::move(test_task).Run();
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/wayland/test/wayland_drag_drop_test.h b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.h
new file mode 100644
index 0000000..3455909
--- /dev/null
+++ b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.h
@@ -0,0 +1,68 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_OZONE_PLATFORM_WAYLAND_TEST_WAYLAND_DRAG_DROP_TEST_H_
+#define UI_OZONE_PLATFORM_WAYLAND_TEST_WAYLAND_DRAG_DROP_TEST_H_
+
+#include "base/callback_forward.h"
+#include "ui/ozone/platform/wayland/test/test_data_device.h"
+#include "ui/ozone/platform/wayland/test/test_data_source.h"
+#include "ui/ozone/platform/wayland/test/wayland_test.h"
+
+namespace gfx {
+class Point;
+}
+
+namespace wl {
+class MockSurface;
+class TestDataDeviceManager;
+}  // namespace wl
+
+namespace ui {
+
+class WaylandWindow;
+
+// Base class for Wayland drag-and-drop tests. Public methods allow test code to
+// emulate dnd-related events from the test compositor and can be used in both
+// data and window dragging test cases.
+class WaylandDragDropTest : public WaylandTest,
+                            public wl::TestDataDevice::Delegate {
+ public:
+  WaylandDragDropTest();
+  WaylandDragDropTest(const WaylandDragDropTest&) = delete;
+  WaylandDragDropTest& operator=(const WaylandDragDropTest&) = delete;
+
+  // These are public for convenience, as they must be callable from lambda
+  // functions, usually posted to task queue while the drag loop runs.
+  void SendDndEnter(WaylandWindow* window, const gfx::Point& location);
+  void SendDndLeave();
+  void SendDndMotion(const gfx::Point& location);
+  void SendDndCancelled();
+  void ReadData(const std::string& mime_type,
+                wl::TestDataSource::ReadDataCallback callback);
+
+ protected:
+  // WaylandTest:
+  void SetUp() override;
+  void TearDown() override;
+
+  // wl::TestDataDevice::Delegate:
+  void StartDrag(wl::TestDataSource* source,
+                 wl::MockSurface* origin,
+                 uint32_t serial) override;
+
+  void OfferAndEnter(wl::MockSurface* surface, const gfx::Point& location);
+  uint32_t NextSerial() const;
+  uint32_t NextTime() const;
+  void ScheduleTestTask(base::OnceClosure test_task);
+  void RunTestTask(base::OnceClosure test_task);
+
+  // Server objects
+  wl::TestDataDeviceManager* data_device_manager_;
+  wl::TestDataSource* data_source_;
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_WAYLAND_TEST_WAYLAND_DRAG_DROP_TEST_H_
diff --git a/ui/ozone/public/mojom/drm_device.mojom b/ui/ozone/public/mojom/drm_device.mojom
index caf4a7e..cf0e17009 100644
--- a/ui/ozone/public/mojom/drm_device.mojom
+++ b/ui/ozone/public/mojom/drm_device.mojom
@@ -51,11 +51,11 @@
   // Instructs the GPU to abandon a DRM device.
   RemoveGraphicsDevice(mojo_base.mojom.FilePath path);
 
-  // Configures (Enables/Disables) DRM displays, returns a map: each configured
-  // display ID to its status, true on success.
+  // Configures (Enables/Disables) DRM displays, returns whether or not the
+  // configuration was successful.
   ConfigureNativeDisplays(
       array<display.mojom.DisplayConfigurationParams> config_requests) =>
-    (map<int64, bool> statuses);
+    (bool config_success);
 
   // Gets high-definition content protection (HDCP) (DRM as in
   // digital rights management) state.
diff --git a/ui/views/metadata/type_conversion.h b/ui/views/metadata/type_conversion.h
index cf770a3..0fc8eb0 100644
--- a/ui/views/metadata/type_conversion.h
+++ b/ui/views/metadata/type_conversion.h
@@ -45,10 +45,14 @@
                               const T&>::type;
 
 // General Type Conversion Template Functions ---------------------------------
-template <typename T>
-struct TypeConverter {
-  static constexpr bool is_serializable = std::is_enum<T>::value;
+template <bool serializable>
+struct BaseTypeConverter {
+  static constexpr bool is_serializable = serializable;
   static bool IsSerializable() { return is_serializable; }
+};
+
+template <typename T>
+struct TypeConverter : BaseTypeConverter<std::is_enum<T>::value> {
   static base::string16 ToString(ArgType<T> source_value);
   static base::Optional<T> FromString(const base::string16& source_value);
 };
@@ -116,9 +120,7 @@
 
 #define DECLARE_CONVERSIONS(T)                                               \
   template <>                                                                \
-  struct VIEWS_EXPORT TypeConverter<T> {                                     \
-    static constexpr bool is_serializable = true;                            \
-    static bool IsSerializable() { return is_serializable; }                 \
+  struct VIEWS_EXPORT TypeConverter<T> : BaseTypeConverter<true> {           \
     static base::string16 ToString(ArgType<T> source_value);                 \
     static base::Optional<T> FromString(const base::string16& source_value); \
   };
@@ -149,9 +151,8 @@
 VIEWS_EXPORT const base::string16& GetNullOptStr();
 
 template <typename T>
-struct TypeConverter<base::Optional<T>> {
-  static constexpr bool is_serializable = TypeConverter<T>::is_serializable;
-  static bool IsSerializable() { return is_serializable; }
+struct TypeConverter<base::Optional<T>>
+    : BaseTypeConverter<TypeConverter<T>::is_serializable> {
   static base::string16 ToString(ArgType<base::Optional<T>> source_value) {
     if (!source_value)
       return GetNullOptStr();
@@ -168,9 +169,7 @@
 };
 
 template <typename T>
-struct TypeConverter<std::unique_ptr<T>> {
-  static constexpr bool is_serializable = false;
-  static bool IsSerializable() { return is_serializable; }
+struct TypeConverter<std::unique_ptr<T>> : BaseTypeConverter<false> {
   static base::string16 ToString(const std::unique_ptr<T>& source_value);
   static base::Optional<std::unique_ptr<T>> FromString(
       const base::string16& source_value);
diff --git a/ui/views/views_features.cc b/ui/views/views_features.cc
index 83a10c4..827cae2 100644
--- a/ui/views/views_features.cc
+++ b/ui/views/views_features.cc
@@ -12,12 +12,6 @@
 
 // Please keep alphabetized.
 
-// Increase corner radius on Dialogs for the material design refresh.
-// TODO(tluk): Remove this feature flag when platform inconsistencies
-// have been fixed as recorded on: https://crbug.com/932970
-const base::Feature kEnableMDRoundedCornersOnDialogs{
-    "EnableMDRoundedCornersOnDialogs", base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Use a high-contrast style for ink drops when in platform high-contrast mode,
 // including full opacity and a high-contrast color
 const base::Feature kEnablePlatformHighContrastInkDrop{
diff --git a/ui/views/views_features.h b/ui/views/views_features.h
index f0f7715..9a042adc 100644
--- a/ui/views/views_features.h
+++ b/ui/views/views_features.h
@@ -14,7 +14,6 @@
 
 // Please keep alphabetized.
 
-VIEWS_EXPORT extern const base::Feature kEnableMDRoundedCornersOnDialogs;
 VIEWS_EXPORT extern const base::Feature kEnablePlatformHighContrastInkDrop;
 VIEWS_EXPORT extern const base::Feature kEnableViewPaintOptimization;
 VIEWS_EXPORT extern const base::Feature kTextfieldFocusOnTapUp;
diff --git a/ui/views/window/dialog_delegate.cc b/ui/views/window/dialog_delegate.cc
index 79b605daf..cf62e62 100644
--- a/ui/views/window/dialog_delegate.cc
+++ b/ui/views/window/dialog_delegate.cc
@@ -418,11 +418,14 @@
 }
 
 int DialogDelegate::GetCornerRadius() const {
-  return base::FeatureList::IsEnabled(
-             features::kEnableMDRoundedCornersOnDialogs)
-             ? LayoutProvider::Get()->GetCornerRadiusMetric(
-                   views::EMPHASIS_MEDIUM)
-             : 2;
+#if defined(OS_MAC)
+  // TODO(crbug.com/1116680): On Mac MODAL_TYPE_WINDOW is implemented using
+  // sheets which causes visual artifacts when corner radius is increased for
+  // modal types. Remove this after this issue has been addressed.
+  if (GetModalType() == ui::MODAL_TYPE_WINDOW)
+    return 2;
+#endif
+  return LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_MEDIUM);
 }
 
 std::unique_ptr<View> DialogDelegate::DisownFootnoteView() {
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
index 7aafd3f..b115d4c 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
@@ -43,6 +43,7 @@
 import org.chromium.weblayer.Tab;
 import org.chromium.weblayer.TabCallback;
 import org.chromium.weblayer.TabListCallback;
+import org.chromium.weblayer.WebLayer;
 import org.chromium.weblayer.shell.InstrumentationActivity;
 
 import java.io.ByteArrayInputStream;
@@ -90,8 +91,8 @@
                 Fragment fragment, Intent intent, int requestCode, Bundle options) {}
     }
 
-    private static class Callback extends NavigationCallback {
-        public static class NavigationCallbackHelper extends CallbackHelper {
+    private class Callback extends NavigationCallback {
+        public class NavigationCallbackHelper extends CallbackHelper {
             private Uri mUri;
             private boolean mIsSameDocument;
             private int mHttpStatusCode;
@@ -109,10 +110,15 @@
                 mRedirectChain = navigation.getRedirectChain();
                 mLoadError = navigation.getLoadError();
                 mNavigationState = navigation.getState();
-                mIsKnownProtocol = navigation.isKnownProtocol();
                 mIsPageInitiatedNavigation = navigation.isPageInitiated();
                 mIsServedFromBackForwardCache = navigation.isServedFromBackForwardCache();
                 notifyCalled();
+
+                int majorVersion = TestThreadUtils.runOnUiThreadBlockingNoException(
+                        () -> WebLayer.getSupportedMajorVersion(mActivityTestRule.getActivity()));
+                if (majorVersion >= 89) {
+                    mIsKnownProtocol = navigation.isKnownProtocol();
+                }
             }
 
             public void assertCalledWith(int currentCallCount, String uri) throws TimeoutException {
@@ -162,7 +168,7 @@
             }
         }
 
-        public static class UriCallbackHelper extends CallbackHelper {
+        public class UriCallbackHelper extends CallbackHelper {
             private Uri mUri;
 
             public void notifyCalled(Uri uri) {
@@ -175,7 +181,7 @@
             }
         }
 
-        public static class NavigationCallbackValueRecorder {
+        public class NavigationCallbackValueRecorder {
             private List<String> mObservedValues =
                     Collections.synchronizedList(new ArrayList<String>());
 
@@ -193,7 +199,7 @@
             }
         }
 
-        public static class FirstContentfulPaintCallbackHelper extends CallbackHelper {
+        public class FirstContentfulPaintCallbackHelper extends CallbackHelper {
             private long mNavigationStartMillis;
             private long mFirstContentfulPaintMs;
 
@@ -212,7 +218,7 @@
             }
         }
 
-        public static class LargestContentfulPaintCallbackHelper extends CallbackHelper {
+        public class LargestContentfulPaintCallbackHelper extends CallbackHelper {
             private long mNavigationStartMillis;
             private long mLargestContentfulPaintMs;