diff --git a/DEPS b/DEPS
index 68580b0..62219e6b 100644
--- a/DEPS
+++ b/DEPS
@@ -253,19 +253,19 @@
   # 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': 'e69791f92f11d12677b949b723cc9a5cffd0ce0d',
+  'skia_revision': 'd48eb476974ef37cbe91e76e3cebe25d8e984618',
   # 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': 'dbe4449b3e52cf1205dcf1ff05b721b0a180b638',
+  'v8_revision': 'a58f124b22e45cfe9cdacfb6275a4e61f556f17c',
   # 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': '240dcdff9af96217034f7500cfd91cecfa0691e2',
+  'angle_revision': '7f03fb5d8c18f802a91f494ce792204f06864508',
   # 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': '9f170f0717a7344a611c19fee90de258de02ecd5',
+  'swiftshader_revision': '5ff2f732f22209099eeb63d25255bc032513a650',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -328,7 +328,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': 'e0b260259c7e267f882df29d66e53cc5a35ee1f1',
+  'devtools_frontend_revision': '4704d83e802a322e5925559d2049d391de44dc34',
   # 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.
@@ -368,7 +368,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': '4570ab5ad89afa51bc03804d2817cf2b72380a60',
+  'dawn_revision': 'ec3e4b05108e5300d0ff29c09bc637489565df81',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -809,7 +809,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'GieEv_-3sedNB-zo_oCb-D8vQtqGAQQXNCUPPOaMfOkC',
+          'version': 'oni8Wvm2dTjItf51VDlIxZEmPbECRyHeX1a3JhVodasC',
         },
       ],
       'dep_type': 'cipd',
@@ -820,7 +820,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'Gh2Quj1nr_-cTYLaBjOyUNH5wrPIZoP5YDoAZhb1f9kC',
+          'version': 'LyPbNn2vg5b7A4Z1xmcWvgpMX_0G-N5mHr1HZUhjuz4C',
         },
       ],
       'dep_type': 'cipd',
@@ -831,7 +831,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': '9Bf521nO1zX9-06ZcpeDNxxS8WJ12cVFTbON07HYn4wC',
+          'version': 'tTQgln8do4tdqIPI8cJQPH1n-n3ka4dCMBoaYnwoqV0C',
         },
       ],
       'dep_type': 'cipd',
@@ -1111,7 +1111,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' + '@' + '74bef59f4d4a6b73a2f7c65c6c2ec6f2f79c9d2b',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'dbeb45aff9922aee365c2ae4deb3d545a6793787',
       'condition': 'checkout_chromeos',
   },
 
@@ -1514,7 +1514,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'dfc6cffca9b6a34068386915d50040c6bc142717',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '7a29efcb91ff562d9fbb61b9490ef8f71983b9f2',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1592,7 +1592,7 @@
       'packages': [
           {
               'package': 'fuchsia/third_party/android/aemu/release/linux-amd64',
-              'version': 'Mde3bAvPPgfbH8nF27RZ4aKV2maS_0kVpAc8TWSKIAwC'
+              'version': '5nrz36x1BPEiBNihW7PradI5DX-aYmpWseto1xMeFpIC'
           },
       ],
       'condition': 'host_os == "linux" and checkout_fuchsia',
@@ -1735,7 +1735,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '96e54a1b92e78f651941f64c703b98a34df37a1f',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'c5200da92e1c93607de0a971506ad1b805bb262a',
+    Var('webrtc_git') + '/src.git' + '@' + '83829687815e5d72234e24bf23b31140a8e830be',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1805,7 +1805,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d9acd22f3ada60fafc9275b128107b6779e4dc05',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@431c4a2d1aaca07f8f8309e7f195be161194f732',
     'condition': 'checkout_src_internal',
   },
 
@@ -1835,7 +1835,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'xTx6ADrfbR2KhfKdNyCXWFzpcpS8LBeN8Smu9f0HtHoC',
+        'version': '7fLyyb8B8zlEhVNI4DtXPtZ37Rg6EL5PsssGzoZ6eqYC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1846,7 +1846,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'msaID8S8XTD7AuEOJl8ayItNoDHDiFF0tq_AdvbMjMYC',
+        'version': 'rcu2CL1SgiT_yrypXhtVgKX4XjKQF-jDx9rD354PCg0C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1857,7 +1857,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': '_StlyGAyJnt1_sgg_-RTJMK2oAvMqolkCsAomi2THvQC',
+        'version': 'PYuNrTlHOcXoN756Ls6NheL3fUbyrEJpZssl-TB_13kC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/aw_contents_io_thread_client.cc b/android_webview/browser/aw_contents_io_thread_client.cc
index 2e1cfcd..d01cfbca 100644
--- a/android_webview/browser/aw_contents_io_thread_client.cc
+++ b/android_webview/browser/aw_contents_io_thread_client.cc
@@ -233,15 +233,15 @@
   IoThreadClientData client_data;
   bool found = RfhToIoThreadClientMap::GetInstance()->Get(render_frame_host_id,
                                                           &client_data);
-
-  if (!found || client_data.pending_association) {
-    return nullptr;
-  } else {
+  if (found) {
     JNIEnv* env = AttachCurrentThread();
     ScopedJavaLocalRef<jobject> java_delegate =
         client_data.io_thread_client.get(env);
-    return std::make_unique<AwContentsIoThreadClient>(java_delegate);
+    if (java_delegate) {
+      return std::make_unique<AwContentsIoThreadClient>(java_delegate);
+    }
   }
+  return nullptr;
 }
 
 std::unique_ptr<AwContentsIoThreadClient> AwContentsIoThreadClient::FromID(
@@ -249,15 +249,15 @@
   IoThreadClientData client_data;
   bool found = RfhToIoThreadClientMap::GetInstance()->Get(frame_tree_node_id,
                                                           &client_data);
-
-  if (!found || client_data.pending_association) {
-    return nullptr;
-  } else {
+  if (found) {
     JNIEnv* env = AttachCurrentThread();
     ScopedJavaLocalRef<jobject> java_delegate =
         client_data.io_thread_client.get(env);
-    return std::make_unique<AwContentsIoThreadClient>(java_delegate);
+    if (java_delegate) {
+      return std::make_unique<AwContentsIoThreadClient>(java_delegate);
+    }
   }
+  return nullptr;
 }
 
 // static
diff --git a/android_webview/browser/gfx/render_thread_manager.cc b/android_webview/browser/gfx/render_thread_manager.cc
index 64e5965a..1592d93 100644
--- a/android_webview/browser/gfx/render_thread_manager.cc
+++ b/android_webview/browser/gfx/render_thread_manager.cc
@@ -264,11 +264,6 @@
   root_frame_sink_getter_ = std::move(root_frame_sink_getter);
 }
 
-void RenderThreadManager::SetRootFrameSinkGetterForTesting(
-    RootFrameSinkGetter root_frame_sink_getter) {
-  root_frame_sink_getter_ = std::move(root_frame_sink_getter);
-}
-
 bool RenderThreadManager::HasFrameForHardwareRendererOnRT() const {
   base::AutoLock lock(lock_);
   return !child_frames_.empty();
diff --git a/android_webview/browser/gfx/render_thread_manager.h b/android_webview/browser/gfx/render_thread_manager.h
index 43aab8c..1570e7a 100644
--- a/android_webview/browser/gfx/render_thread_manager.h
+++ b/android_webview/browser/gfx/render_thread_manager.h
@@ -36,8 +36,6 @@
 
   ~RenderThreadManager() override;
 
-  void SetRootFrameSinkGetterForTesting(
-      RootFrameSinkGetter root_frame_sink_getter);
   // CompositorFrameConsumer methods.
   void SetCompositorFrameProducer(
       CompositorFrameProducer* compositor_frame_producer,
diff --git a/android_webview/browser/gfx/test/invalidate_test.cc b/android_webview/browser/gfx/test/invalidate_test.cc
index a638afb..6612b5f 100644
--- a/android_webview/browser/gfx/test/invalidate_test.cc
+++ b/android_webview/browser/gfx/test/invalidate_test.cc
@@ -123,14 +123,7 @@
   }
 
   viz::FrameTimingDetailsMap TakeFrameTimingDetails() {
-    for (const auto& feedback : support_->TakeFrameTimingDetailsMap()) {
-      DCHECK(!feedbacks_.contains(feedback.first));
-      feedbacks_[feedback.first] = feedback.second;
-    }
-
-    viz::FrameTimingDetailsMap result;
-    std::swap(result, feedbacks_);
-    return result;
+    return support_->TakeFrameTimingDetailsMap();
   }
 
   size_t frames_submitted() { return frames_submitted_; }
@@ -145,11 +138,8 @@
   }
   void OnBeginFrame(const viz::BeginFrameArgs& args,
                     const viz::FrameTimingDetailsMap& feedbacks) override {
-    for (const auto& feedback : feedbacks) {
-      DCHECK(!feedbacks_.contains(feedback.first));
-      feedbacks_[feedback.first] = feedback.second;
-    }
-
+    // We explicitly handle feedbacks after draw.
+    DCHECK(feedbacks.empty());
     DCHECK_GE(frame_interval_, args.interval);
 
     last_begin_frame_args_ = args;
@@ -194,7 +184,6 @@
 
   viz::BeginFrameArgs last_begin_frame_args_;
   base::TimeTicks last_submitted_time_;
-  viz::FrameTimingDetailsMap feedbacks_;
 };
 
 struct PerFrameFlag {
@@ -252,8 +241,9 @@
     DCHECK(context_);
 
     context_->MakeCurrent(surface_.get());
-    render_thread_manager_->SetRootFrameSinkGetterForTesting(
-        root_frame_sink_proxy_->GetRootFrameSinkCallback());
+    hardware_renderer_ = std::make_unique<HardwareRendererViz>(
+        render_thread_manager_.get(),
+        root_frame_sink_proxy_->GetRootFrameSinkCallback(), nullptr);
   }
 
   ~InvalidateTest() override {
@@ -263,18 +253,19 @@
                          // `client` leaves scope.
                        },
                        std::move(client_)));
-    render_thread_manager_->DestroyHardwareRendererOnRT(false, false);
   }
 
   // viz::ExternalBeginFrameSourceClient
   void OnNeedsBeginFrames(bool needs_begin_frames) override {
-    needs_begin_frames_ = needs_begin_frames;
     if (set_needs_begin_frames_closure_)
       std::move(set_needs_begin_frames_closure_).Run();
   }
 
   // RootFrameSinkProxyClient
-  void Invalidate() override { did_invalidate_ = true; }
+  void Invalidate() override {
+    DCHECK(inside_begin_frame_);
+    did_invalidate_ = true;
+  }
 
   void ReturnResourcesFromViz(
       viz::FrameSinkId frame_sink_id,
@@ -285,27 +276,7 @@
   }
 
  protected:
-  std::unique_ptr<ChildFrame> CreateChildFrame(
-      std::unique_ptr<content::SynchronousCompositor::Frame> frame,
-      const viz::BeginFrameArgs& args,
-      bool invalidated) {
-    auto future =
-        base::MakeRefCounted<content::SynchronousCompositor::FrameFuture>();
-    future->SetFrame(std::move(frame));
-
-    auto child_frame = std::make_unique<ChildFrame>(
-        future, kRootClientSinkId, kFrameSize, gfx::Transform(), false, 1.0f,
-        CopyOutputRequestQueue(), /*did_invalidate=*/invalidated);
-    return child_frame;
-  }
-
-  void DrawOnUI(std::unique_ptr<ChildFrame> frame) {
-    render_thread_manager_->SetFrameOnUI(std::move(frame));
-  }
-
-  void Sync() { render_thread_manager_->CommitFrameOnRT(); }
-
-  void DrawOnRT(const viz::BeginFrameArgs& args, bool invalidated) {
+  void Draw(const viz::BeginFrameArgs& args, bool invalidated) {
     HardwareRendererDrawParams params{.clip_left = 0,
                                       .clip_top = 0,
                                       .clip_right = 99,
@@ -318,9 +289,9 @@
     params.transform[15] = 1.0f;
     params.color_space = gfx::ColorSpace::CreateSRGB();
 
-    render_thread_manager_->DrawOnRT(/*save_restore=*/false, params,
-                                     OverlaysParams());
-
+    ScopedAppGLStateRestore state_restore(ScopedAppGLStateRestore::MODE_DRAW,
+                                          false);
+    hardware_renderer_->DrawAndSwap(params, OverlaysParams());
     if (invalidated)
       last_invalidated_draw_bf_ = args;
     UpdateFrameTimingDetails();
@@ -328,20 +299,12 @@
 
   bool BeginFrame(const viz::BeginFrameArgs& args) {
     DCHECK(!inside_begin_frame_);
-
-    if (needs_begin_frames_) {
-      inside_begin_frame_ = true;
-      begin_frame_source_->OnBeginFrame(args);
-      inside_begin_frame_ = false;
-    }
-
-    if (did_invalidate_)
-      invalidate_count_++;
-
-    bool result = did_invalidate_;
     did_invalidate_ = false;
+    inside_begin_frame_ = true;
+    begin_frame_source_->OnBeginFrame(args);
+    inside_begin_frame_ = false;
 
-    return result;
+    return did_invalidate_;
   }
 
   void SubmitFrameIfNeeded() {
@@ -366,9 +329,7 @@
       // We never should get ahead of hwui. If we have presentation feedback
       // newer then latest invalidated draw, then it must be failed.
       if (timing.first > last_invalidated_draw_bf_.frame_id.sequence_number) {
-        LOG_IF(FATAL, !timing.second.presentation_feedback.failed())
-            << "Rendered frame: " << timing.first << " ahead of "
-            << last_invalidated_draw_bf_.frame_id.sequence_number;
+        ASSERT_TRUE(timing.second.presentation_feedback.failed());
       }
       child_client_timings_[timing.first] = timing.second;
     }
@@ -407,8 +368,6 @@
             .Build();
     AppendSurfaceDrawQuad(*compositor_frame.render_pass_list.back(),
                           child_client_surface_id);
-    compositor_frame.metadata.referenced_surfaces.push_back(
-        viz::SurfaceRange(child_client_surface_id));
 
     auto frame = std::make_unique<content::SynchronousCompositor::Frame>();
     frame->layer_tree_frame_sink_id = 1;
@@ -418,18 +377,28 @@
     frame->local_surface_id =
         root_local_surface_id_allocator_.GetCurrentLocalSurfaceId();
 
+    auto future =
+        base::MakeRefCounted<content::SynchronousCompositor::FrameFuture>();
+    future->SetFrame(std::move(frame));
+
+    auto child_frame = std::make_unique<ChildFrame>(
+        future, kRootClientSinkId, kFrameSize, gfx::Transform(), false, 1.0f,
+        CopyOutputRequestQueue(), /*did_invalidate=*/true);
+    child_frame->WaitOnFutureIfNeeded();
+    hardware_renderer_->SetChildFrameForTesting(std::move(child_frame));
+
     BeginFrame(bf_args);
     SubmitFrameIfNeeded();
-
     // First draw is implicitly invalidated.
-    DrawOnUI(CreateChildFrame(std::move(frame), bf_args, /*invalidated=*/true));
-    Sync();
-    DrawOnRT(bf_args, /*invalidated=*/true);
+    Draw(bf_args, /*invalidated=*/true);
 
     // This draw must always succeed.
     ASSERT_EQ(child_client_timings_.size(), 1u);
     ASSERT_FALSE(
         child_client_timings_.begin()->second.presentation_feedback.failed());
+
+    // Clear the map, so this draw doesn't count later.
+    child_client_timings_.clear();
   }
 
   viz::BeginFrameArgs NextBeginFrameArgs() {
@@ -462,22 +431,16 @@
 
       // If we didn't draw last frame, now it's time.
       if (delayed_draw_args.IsValid()) {
-        DrawOnRT(delayed_draw_args, delayed_draw_invalidate);
+        Draw(delayed_draw_args, delayed_draw_invalidate);
         delayed_draw_args = viz::BeginFrameArgs();
       }
 
-      if (invalidate) {
-        DrawOnUI(CreateChildFrame(nullptr, args, /*invalidated=*/invalidate));
-      }
-
-      Sync();
-
       // If webview invalidated or other views requested to draw, try to draw.
       if (invalidate || always_draw) {
         // If this frame hwui is in "fast" mode (i.e RT is not a frame behind)
         // then draw a frame now.
         if (hwui_fast) {
-          DrawOnRT(args, invalidate);
+          Draw(args, invalidate);
           DCHECK(!delayed_draw_args.IsValid());
         } else {
           delayed_draw_args = args;
@@ -500,19 +463,13 @@
 
     // Finish draw if it's still pending
     if (delayed_draw_args.IsValid()) {
-      DrawOnRT(delayed_draw_args, delayed_draw_invalidate);
+      Draw(delayed_draw_args, delayed_draw_invalidate);
     }
+    Draw(args, invalidate);
 
-    if (invalidate) {
-      DrawOnUI(CreateChildFrame(nullptr, args, /*invalidated=*/invalidate));
-    }
-
-    Sync();
-
-    DrawOnRT(args, invalidate);
-
-    // Make sure we received all presentation feedback.
-    ASSERT_EQ(client_->frames_submitted(), child_client_timings_.size());
+    // Make sure we received all presentation feedback, ignoring first frame
+    // submitted during init.
+    ASSERT_EQ(client_->frames_submitted() - 1, child_client_timings_.size());
   }
 
   int CountDroppedFrames() {
@@ -531,6 +488,7 @@
   std::unique_ptr<RenderThreadManager> render_thread_manager_;
   scoped_refptr<gl::GLSurface> surface_;
   scoped_refptr<gl::GLContext> context_;
+  std::unique_ptr<HardwareRendererViz> hardware_renderer_;
 
   std::unique_ptr<VizClient> client_;
   viz::ParentLocalSurfaceIdAllocator root_local_surface_id_allocator_;
@@ -540,8 +498,6 @@
   base::TimeTicks begin_frame_time_ = base::TimeTicks::Now();
 
   viz::FrameTimingDetailsMap child_client_timings_;
-  int invalidate_count_ = 0;
-  bool needs_begin_frames_ = false;
 
   bool inside_begin_frame_ = false;
   bool did_invalidate_ = false;
@@ -580,7 +536,7 @@
     TestParamToString);
 
 TEST_P(InvalidateTest, LowFpsWithMaxFrame1) {
-  auto always_draw = testing::get<2>(GetParam());
+  const bool always_draw = testing::get<2>(GetParam());
   auto client_slow = testing::get<0>(GetParam());
   auto hwui_slow = testing::get<1>(GetParam());
 
@@ -597,19 +553,15 @@
   SetUpAndDrawFirstFrame(/*max_pending_frames=*/1, /*frame_rate=*/30);
   DrawLoop(client_slow, hwui_slow);
 
-  // Due to rounding error (1 / 60 * 2 < 1 / 30) we submit 29 frames instead
-  // of 30. Total 30 counting frame from first draw.
-  ASSERT_EQ(child_client_timings_.size(), 30u);
+  // Due to rounding error (1 / 60 * 2 < 1 / 30) we submit 39 frames instead
+  // of 30.
+  ASSERT_EQ(child_client_timings_.size(), 29u);
   EXPECT_EQ(CountDroppedFrames(), 0);
-
-  // If either client or hwui slow we currently invalidate more than we need.
-  if (client_slow.IsNever() || hwui_slow.IsNever())
-    EXPECT_LE(invalidate_count_, 31);
 }
 
 // Currently we can't reach 60fps with max pending frames 1.
 TEST_P(InvalidateTest, DISABLED_HighFpsWithMaxFrame1) {
-  auto always_draw = testing::get<2>(GetParam());
+  const bool always_draw = testing::get<2>(GetParam());
   auto client_slow = testing::get<0>(GetParam());
   auto hwui_slow = testing::get<1>(GetParam());
 
@@ -626,15 +578,14 @@
   SetUpAndDrawFirstFrame(/*max_pending_frames=*/1, /*frame_rate=*/60);
   DrawLoop(client_slow, hwui_slow);
 
-  // We should have submitted 60 frames + 1 from initial draw.
-  ASSERT_EQ(child_client_timings_.size(), 61u);
+  ASSERT_EQ(child_client_timings_.size(), 60u);
   EXPECT_EQ(CountDroppedFrames(), 0);
 }
 
 // Currently we can't reach 60fps with max pending frames 1.
 // Test is failing on Lollipop Phone Tester (crbug.com/1234442).
-TEST_P(InvalidateTest, HighFpsWithMaxFrame2) {
-  auto always_draw = testing::get<2>(GetParam());
+TEST_P(InvalidateTest, DISABLED_HighFpsWithMaxFrame2) {
+  const bool always_draw = testing::get<2>(GetParam());
   auto client_slow = testing::get<0>(GetParam());
   auto hwui_slow = testing::get<1>(GetParam());
 
@@ -651,8 +602,7 @@
   SetUpAndDrawFirstFrame(/*max_pending_frames=*/2, /*frame_rate=*/60);
   DrawLoop(client_slow, hwui_slow);
 
-  // We should have submitted 60 frames + 1 from initial draw.
-  ASSERT_EQ(child_client_timings_.size(), 61u);
+  ASSERT_EQ(child_client_timings_.size(), 60u);
 
   // Except the case when client is slower than hwui we currently drop first
   // frame always.
diff --git a/ash/display/mouse_cursor_event_filter.cc b/ash/display/mouse_cursor_event_filter.cc
index d7ec342..0782bf4c 100644
--- a/ash/display/mouse_cursor_event_filter.cc
+++ b/ash/display/mouse_cursor_event_filter.cc
@@ -46,6 +46,10 @@
   if (event->flags() & ui::EF_IS_SYNTHESIZED)
     return;
 
+  // Don't warp if the event specifically requests us not to.
+  if (event->flags() & ui::EF_NOT_SUITABLE_FOR_MOUSE_WARPING)
+    return;
+
   // Handle both MOVED and DRAGGED events here because when the mouse pointer
   // enters the other root window while dragging, the underlying window system
   // (at least X11) stops generating a ui::ET_MOUSE_MOVED event.
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 8574bec4..2733d13 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofoon</translation>
 <translation id="324366796737464147">Geraasvermindering</translation>
 <translation id="3249513730522716925">Venster <ph name="WINDOW_TITLE" /> is geskuif van lessenaar <ph name="ACTIVE_DESK" /> af na lessenaar <ph name="TARGET_DESK" /> toe</translation>
+<translation id="3252573918265662711">Stel op</translation>
 <translation id="3255483164551725916">Wat kan jy doen?</translation>
 <translation id="3269597722229482060">Regsklik</translation>
 <translation id="3289544412142055976">Linux-programme word nie tans gesteun nie</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 264f7af81..e59267b 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">ማይክሮፎን</translation>
 <translation id="324366796737464147">ጫጫታ ማስወገጃ</translation>
 <translation id="3249513730522716925">መስኮት <ph name="WINDOW_TITLE" /> ከዴስክ <ph name="ACTIVE_DESK" /> ወደ ዴስክ <ph name="TARGET_DESK" /> ይወሰዳል</translation>
+<translation id="3252573918265662711">አዋቅር</translation>
 <translation id="3255483164551725916">ምን ማድረግ ይችላሉ?</translation>
 <translation id="3269597722229482060">የቀኝ ጠቅታ</translation>
 <translation id="3289544412142055976">የሊኑክስ መተግበሪያዎች በአሁኑ ጊዜ አይደገፉም</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 315892b..fe4efbce 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -354,6 +354,7 @@
 <translation id="3227137524299004712">الميكروفون</translation>
 <translation id="324366796737464147">إلغاء الضجيج</translation>
 <translation id="3249513730522716925">تم نقل النافذة <ph name="WINDOW_TITLE" /> من سطح المكتب <ph name="ACTIVE_DESK" /> إلى سطح المكتب <ph name="TARGET_DESK" />.</translation>
+<translation id="3252573918265662711">الإعداد</translation>
 <translation id="3255483164551725916">ما الإجراء المطلوب؟</translation>
 <translation id="3269597722229482060">النقر بزر الماوس الأيمن</translation>
 <translation id="3289544412142055976">‏هذا الخيار غير متوفّر حاليًا لتطبيقات Linux.</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 0650583..b8d6bd3 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">মাইক্ৰ’ফ’ন</translation>
 <translation id="324366796737464147">অদৰকাৰী ধ্বনি নাশ</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ৱিণ্ড’খন <ph name="ACTIVE_DESK" /> ডেস্কৰ পৰা <ph name="TARGET_DESK" />লৈ স্থানান্তৰ কৰা হৈছে</translation>
+<translation id="3252573918265662711">ছেট আপ</translation>
 <translation id="3255483164551725916">আপুনি কি কৰিব পাৰে?</translation>
 <translation id="3269597722229482060">সোঁফালে ক্লিক কৰক</translation>
 <translation id="3289544412142055976">বৰ্তমান Linux এপ্‌সমূহ সমৰ্থিত নহয়</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 1aa3c94..2c79932 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Səs-küyün əngəllənməsi</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> pəncərəsi <ph name="ACTIVE_DESK" /> Masasından <ph name="TARGET_DESK" /> Masasına köçürüldü</translation>
+<translation id="3252573918265662711">Quraşdırma</translation>
 <translation id="3255483164551725916">Nə edə bilərsiniz?</translation>
 <translation id="3269597722229482060">Sağ düymə ilə toxunun</translation>
 <translation id="3289544412142055976">Linux tətbiqləri hazırda dəstəklənmir</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index 8a53f51..0dad61f 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Мікрафон</translation>
 <translation id="324366796737464147">Падаўленне шуму</translation>
 <translation id="3249513730522716925">Акно "<ph name="WINDOW_TITLE" />" было перанесена са Стала <ph name="ACTIVE_DESK" /> на Стол <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Наладка</translation>
 <translation id="3255483164551725916">Што ты ўмееш?</translation>
 <translation id="3269597722229482060">Націснуць правай кнопкай мышы</translation>
 <translation id="3289544412142055976">Праграмы Linux цяпер не падтрымліваюцца</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index bc8128c..5382471 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Потискане на шума</translation>
 <translation id="3249513730522716925">Прозорецът <ph name="WINDOW_TITLE" /> бе преместен от работен кът <ph name="ACTIVE_DESK" /> в работен кът <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Настройване</translation>
 <translation id="3255483164551725916">„What can you do?“ („Какво можеш да правиш?“)</translation>
 <translation id="3269597722229482060">Кликване с десния бутон</translation>
 <translation id="3289544412142055976">Понастоящем приложенията за Linux не се поддържат</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index f681417d..12cf511 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">মাইক্রোফোন</translation>
 <translation id="324366796737464147">অপ্রয়োজনীয় আওয়াজের বাতিলকরণ</translation>
 <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> ডেস্ক <ph name="ACTIVE_DESK" /> থেকে ডেস্ক <ph name="TARGET_DESK" />-এ সরানো হয়েছে</translation>
+<translation id="3252573918265662711">সেটআপ</translation>
 <translation id="3255483164551725916">আপনি কি করতে পারেন?</translation>
 <translation id="3269597722229482060">ডানদিকের বোতামে ক্লিক করুন</translation>
 <translation id="3289544412142055976">বর্তমানে Linux অ্যাপ ব্যবহারের সুবিধা নেই</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 372c35ed..ef2382a 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Poništavanje buke</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premješten s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Podešavanje</translation>
 <translation id="3255483164551725916">Šta sve možete uraditi?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutno nisu podržane</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 7e27c29..e7d6582 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micròfon</translation>
 <translation id="324366796737464147">Cancel·lació de soroll</translation>
 <translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> ha passat de l'escriptori <ph name="ACTIVE_DESK" /> a l'escriptori <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuració</translation>
 <translation id="3255483164551725916">Què pots fer?</translation>
 <translation id="3269597722229482060">Clic amb el botó dret</translation>
 <translation id="3289544412142055976">Actualment, les aplicacions de Linux no s'admeten</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index debd2f31..c90a98b 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Potlačení hluku</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> bylo přesunuto z plochy <ph name="ACTIVE_DESK" /> na plochu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Nastavení</translation>
 <translation id="3255483164551725916">Co umíš?</translation>
 <translation id="3269597722229482060">Kliknutí pravým tlačítkem</translation>
 <translation id="3289544412142055976">Linuxové aplikace v současné době nejsou podporovány</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 699b424..20ac6250 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Støjreducering</translation>
 <translation id="3249513730522716925">Vindue <ph name="WINDOW_TITLE" /> blev flyttet fra Skrivebord <ph name="ACTIVE_DESK" /> til Skrivebord <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Konfiguration</translation>
 <translation id="3255483164551725916">Hvad kan du gøre?</translation>
 <translation id="3269597722229482060">Højreklik</translation>
 <translation id="3289544412142055976">Linux-apps understøttes ikke i øjeblikket</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index fd6e6c9..ca6a0d4 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Geräuschunterdrückung</translation>
 <translation id="3249513730522716925">Das Fenster "<ph name="WINDOW_TITLE" />" wurde von Desktop <ph name="ACTIVE_DESK" /> zu Desktop <ph name="TARGET_DESK" /> verschoben</translation>
+<translation id="3252573918265662711">Einrichtung</translation>
 <translation id="3255483164551725916">Was kannst du alles tun?</translation>
 <translation id="3269597722229482060">Rechtsklick</translation>
 <translation id="3289544412142055976">Linux-Apps werden derzeit nicht unterstützt</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index c77f8c5d..28153f8 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Μικρόφωνο</translation>
 <translation id="324366796737464147">Εξουδετέρωση θορύβου</translation>
 <translation id="3249513730522716925">Η επιφάνεια εργασίας <ph name="WINDOW_TITLE" /> μετακινήθηκε από την επιφάνεια εργασίας <ph name="ACTIVE_DESK" /> στην επιφάνεια εργασίας <ph name="TARGET_DESK" />.</translation>
+<translation id="3252573918265662711">Ρυθμίσεις</translation>
 <translation id="3255483164551725916">Τι μπορείς να κάνεις;</translation>
 <translation id="3269597722229482060">Δεξί κλικ</translation>
 <translation id="3289544412142055976">Προς το παρόν, δεν υποστηρίζονται οι εφαρμογές Linux</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index e6cc5424..4cef824 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Microphone</translation>
 <translation id="324366796737464147">Noise cancellation</translation>
 <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> moved from Desk <ph name="ACTIVE_DESK" /> to Desk <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Set-up</translation>
 <translation id="3255483164551725916">What can you do?</translation>
 <translation id="3269597722229482060">Right-click</translation>
 <translation id="3289544412142055976">Linux apps aren’t currently supported</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index f8fd0df..dfa50a1 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micrófono</translation>
 <translation id="324366796737464147">Cancelación de ruido</translation>
 <translation id="3249513730522716925">La ventana <ph name="WINDOW_TITLE" /> se movió del escritorio <ph name="ACTIVE_DESK" /> al <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuración</translation>
 <translation id="3255483164551725916">¿Qué puedes hacer?</translation>
 <translation id="3269597722229482060">Hacer clic con el botón derecho</translation>
 <translation id="3289544412142055976">Por el momento, las apps de Linux no son compatibles</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index d27309b..dccfdf3f 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micrófono</translation>
 <translation id="324366796737464147">Cancelación de ruido</translation>
 <translation id="3249513730522716925">La ventana <ph name="WINDOW_TITLE" /> se ha movido del escritorio <ph name="ACTIVE_DESK" /> al escritorio <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configurar</translation>
 <translation id="3255483164551725916">¿Qué puedes hacer?</translation>
 <translation id="3269597722229482060">Clic derecho</translation>
 <translation id="3289544412142055976">Por el momento no se admiten aplicaciones de Linux</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index d0cadbdae..0e3471a 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Müra vähendamine</translation>
 <translation id="3249513730522716925">Aken <ph name="WINDOW_TITLE" /> teisaldati töölaualt <ph name="ACTIVE_DESK" /> töölauale <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Seadista</translation>
 <translation id="3255483164551725916">Mida sa teha oskad?</translation>
 <translation id="3269597722229482060">Paremklikk</translation>
 <translation id="3289544412142055976">Linuxi rakendusi praegu ei toetata</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 094ebd9..39cc4fba 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofonoa</translation>
 <translation id="324366796737464147">Zarata-murrizketa</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> leihoa <ph name="ACTIVE_DESK" /> lan-eremutik <ph name="TARGET_DESK" /> lan-eremura eraman da</translation>
+<translation id="3252573918265662711">Konfigurazioa</translation>
 <translation id="3255483164551725916">Zer egin dezakezu?</translation>
 <translation id="3269597722229482060">Egin klik eskuineko botoiarekin</translation>
 <translation id="3289544412142055976">Une honetan ez dira onartzen Linux-eko aplikazioak</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index d560a28c..248dece 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">میکروفن</translation>
 <translation id="324366796737464147">کاهش صدای محیط</translation>
 <translation id="3249513730522716925">پنجره <ph name="WINDOW_TITLE" /> از میز <ph name="ACTIVE_DESK" /> به میز <ph name="TARGET_DESK" /> منتقل شد</translation>
+<translation id="3252573918265662711">راه‌اندازی</translation>
 <translation id="3255483164551725916">‏What can you do?‎ (چه کاری می‌توانی انجام دهی؟)</translation>
 <translation id="3269597722229482060">کلیک راست</translation>
 <translation id="3289544412142055976">‏درحال‌حاضر از برنامه‌های Linux پشتیبانی نمی‌شود</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 500ff24..5e2e62b 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -352,6 +352,7 @@
 <translation id="3227137524299004712">Mikrofoni</translation>
 <translation id="324366796737464147">Taustahälyn vaimennus</translation>
 <translation id="3249513730522716925">Ikkuna <ph name="WINDOW_TITLE" /> siirretty työpöydältä <ph name="ACTIVE_DESK" /> työpöydälle <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Määritä</translation>
 <translation id="3255483164551725916">Mitä osaat tehdä?</translation>
 <translation id="3269597722229482060">Klikkaa kakkospainiketta</translation>
 <translation id="3289544412142055976">Linux-sovelluksia ei tällä hetkellä tueta</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 1f59d084..d530cbd 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikropono</translation>
 <translation id="324366796737464147">Pagkansela ng ingay</translation>
 <translation id="3249513730522716925">Inilipat ang Window na <ph name="WINDOW_TITLE" /> sa Desk na <ph name="TARGET_DESK" /> mula sa <ph name="ACTIVE_DESK" /></translation>
+<translation id="3252573918265662711">Pag-setup</translation>
 <translation id="3255483164551725916">Ano'ng maaari mong gawin?</translation>
 <translation id="3269597722229482060">Mag-right Click</translation>
 <translation id="3289544412142055976">Kasalukuyang hindi sinusuportahan ang mga Linux app.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 4fe2e973..91ba180 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Microphone</translation>
 <translation id="324366796737464147">Suppression du bruit</translation>
 <translation id="3249513730522716925">La fenêtre <ph name="WINDOW_TITLE" /> a passé du bureau <ph name="ACTIVE_DESK" /> au bureau <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuration</translation>
 <translation id="3255483164551725916">Que peux-tu faire?</translation>
 <translation id="3269597722229482060">Clic droit</translation>
 <translation id="3289544412142055976">Les applications Linux ne sont pas prises en charge actuellement</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 8bce8f55..b4465494 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micro</translation>
 <translation id="324366796737464147">Suppression du bruit</translation>
 <translation id="3249513730522716925">La fenêtre <ph name="WINDOW_TITLE" /> a été déplacée du Bureau <ph name="ACTIVE_DESK" /> au Bureau <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configurer</translation>
 <translation id="3255483164551725916">Que sais-tu faire ?</translation>
 <translation id="3269597722229482060">Clic droit</translation>
 <translation id="3289544412142055976">Les applis Linux ne sont pas compatibles actuellement</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 8d42755..296aee8 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micrófono</translation>
 <translation id="324366796737464147">Cancelación de ruído</translation>
 <translation id="3249513730522716925">A ventá <ph name="WINDOW_TITLE" /> moveuse do escritorio <ph name="ACTIVE_DESK" /> ao escritorio <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuración</translation>
 <translation id="3255483164551725916">Que podes facer?</translation>
 <translation id="3269597722229482060">Facer clic co botón dereito</translation>
 <translation id="3289544412142055976">As aplicación de Linux agora mesmo non son compatibles</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 954186f5..37a84eb 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">માઇક્રોફોન</translation>
 <translation id="324366796737464147">અવાજ રદ્દીકરણ</translation>
 <translation id="3249513730522716925">વિડો <ph name="WINDOW_TITLE" />ને ડેસ્ક <ph name="ACTIVE_DESK" />માંથી ડેસ્ક <ph name="TARGET_DESK" />માં ખસેડી</translation>
+<translation id="3252573918265662711">સેટઅપ</translation>
 <translation id="3255483164551725916">તમે શું કરી શકો?</translation>
 <translation id="3269597722229482060">રાઇટ ક્લિક કરો</translation>
 <translation id="3289544412142055976">હાલમાં Linux ઍપને સપોર્ટ કરવામાં આવતો નથી</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index b556d81..3c0ce2c 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">माइक्रोफ़ोन</translation>
 <translation id="324366796737464147">ग़ैर-ज़रूरी आवाज़ें कम करने की सुविधा</translation>
 <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> को डेस्क <ph name="ACTIVE_DESK" /> से डेस्क <ph name="TARGET_DESK" /> पर सेट कर दिया गया है</translation>
+<translation id="3252573918265662711">सेटअप</translation>
 <translation id="3255483164551725916">तुम क्या-क्या कर सकती हो?</translation>
 <translation id="3269597722229482060">दायां क्लिक करें</translation>
 <translation id="3289544412142055976">फ़िलहाल, Linux ऐप्लिकेशन के लिए यह सुविधा उपलब्ध नहीं है</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 98219d1..26ca5f24 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Uklanjanje buke</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> premješten je s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Postavi</translation>
 <translation id="3255483164551725916">Što možeš učiniti?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutačno nisu podržane</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 4219b36..255f94f1 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Zajszűrés</translation>
 <translation id="3249513730522716925">A(z) „<ph name="WINDOW_TITLE" />” ablak át lett helyezve a(z) „<ph name="ACTIVE_DESK" />” asztalról a(z) „<ph name="TARGET_DESK" />” asztalra</translation>
+<translation id="3252573918265662711">Beállítás</translation>
 <translation id="3255483164551725916">Mit lehet csinálni?</translation>
 <translation id="3269597722229482060">Kattintás jobb egérgombbal</translation>
 <translation id="3289544412142055976">A Linux-alkalmazások jelenleg nem támogatottak.</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index d55858f..0ecebcb 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Խոսափող</translation>
 <translation id="324366796737464147">Աղմուկի նվազեցում</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> պատուհանը տեղափոխվել է աշխատասեղան <ph name="ACTIVE_DESK" />-ից աշխատասեղան <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Կարգավորում</translation>
 <translation id="3255483164551725916">Ի՞նչ կարող ես անել:</translation>
 <translation id="3269597722229482060">Աջ սեղմում</translation>
 <translation id="3289544412142055976">Լինուքսի հավելվածները ներկայումս չեն աջակցվում</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 5acb0e8..4f57b98b 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Peredam bising</translation>
 <translation id="3249513730522716925">Jendela <ph name="WINDOW_TITLE" /> berpindah dari Desktop <ph name="ACTIVE_DESK" /> ke Desktop <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Penyiapan</translation>
 <translation id="3255483164551725916">Apa yang bisa kamu lakukan?</translation>
 <translation id="3269597722229482060">Klik Kanan</translation>
 <translation id="3289544412142055976">Aplikasi Linux saat ini tidak didukung</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index 531ea39..f15701a 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Hljóðnemi</translation>
 <translation id="324366796737464147">Hávaðavörn</translation>
 <translation id="3249513730522716925">Gluggi <ph name="WINDOW_TITLE" /> færður af skjáborði <ph name="ACTIVE_DESK" /> yfir á skjáborð <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Uppsetning</translation>
 <translation id="3255483164551725916">Hvað geturðu gert?</translation>
 <translation id="3269597722229482060">Hægrismella</translation>
 <translation id="3289544412142055976">Linux-forrit eru ekki studd eins og er</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index a37a72d..3db56453 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">Microfono</translation>
 <translation id="324366796737464147">Cancellazione del rumore</translation>
 <translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> è stata spostata dalla scrivania <ph name="ACTIVE_DESK" /> alla scrivania <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configura</translation>
 <translation id="3255483164551725916">Cosa sai fare?</translation>
 <translation id="3269597722229482060">Clic con il pulsante destro</translation>
 <translation id="3289544412142055976">Al momento le app Linux non sono supportate</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 46bc2131..b0e31b6 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">מיקרופון</translation>
 <translation id="324366796737464147">סינון רעשים</translation>
 <translation id="3249513730522716925">החלון <ph name="WINDOW_TITLE" /> הועבר משולחן העבודה <ph name="ACTIVE_DESK" /> אל שולחן העבודה <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">הגדרות</translation>
 <translation id="3255483164551725916">מה אפשר לעשות?</translation>
 <translation id="3269597722229482060">לחיצה ימנית</translation>
 <translation id="3289544412142055976">‏בשלב זה, אין תמיכה באפליקציות Linux</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 5018a558..9053d08b 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -334,6 +334,7 @@
 <translation id="3105917916468784889">スクリーンショットを撮る</translation>
 <translation id="3105990244222795498"><ph name="DEVICE_NAME" />(Bluetooth)</translation>
 <translation id="3113926042639749131">候補を削除</translation>
+<translation id="3120421559657122717">デバイスをシャットダウンしますか?</translation>
 <translation id="3126069444801937830">再起動して更新</translation>
 <translation id="3139942575505304791">デスク 1</translation>
 <translation id="315116470104423982">モバイル データ</translation>
@@ -352,8 +353,10 @@
 <translation id="3227137524299004712">マイク</translation>
 <translation id="324366796737464147">ノイズ キャンセル</translation>
 <translation id="3249513730522716925">ウィンドウ <ph name="WINDOW_TITLE" /> がデスク <ph name="ACTIVE_DESK" /> からデスク <ph name="TARGET_DESK" /> に移動されました</translation>
+<translation id="3252573918265662711">設定</translation>
 <translation id="3255483164551725916">何ができる?</translation>
 <translation id="3269597722229482060">右クリック</translation>
+<translation id="3289544412142055976">Linux アプリは現在サポートされていません</translation>
 <translation id="3289674678944039601">アダプター経由で充電しています</translation>
 <translation id="3290356915286466215">保護なし</translation>
 <translation id="3294437725009624529">ゲスト</translation>
@@ -705,6 +708,7 @@
 <translation id="5400461572260843123">クイック設定: 検索+左方向キーを押して、通知センターを開きます。</translation>
 <translation id="5426063383988017631">設定メニューは閉じています</translation>
 <translation id="5428899915242071344">選択を開始</translation>
+<translation id="5429993543155113935">シークレット ウィンドウは現在サポートされていません</translation>
 <translation id="5430931332414098647">インスタント テザリング</translation>
 <translation id="5431318178759467895">カラー</translation>
 <translation id="5433020815079095860">音声入力</translation>
@@ -847,6 +851,7 @@
 <translation id="6431865393913628856">画面録画</translation>
 <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> に「<ph name="ROUTE_TITLE" />」をキャスト中</translation>
 <translation id="6447111710783417522"><ph name="DATE" />、<ph name="NUMBER" /> 件の予定</translation>
+<translation id="6449483711453944360">Linux アプリとシークレット ウィンドウは現在サポートされていません</translation>
 <translation id="6452181791372256707">拒否</translation>
 <translation id="6453179446719226835">言語が変更されました</translation>
 <translation id="6459472438155181876"><ph name="DISPLAY_NAME" /> へ画面を拡張しています</translation>
@@ -946,6 +951,7 @@
 <translation id="7025533177575372252">スマートフォンを使って <ph name="DEVICE_NAME" /> を接続する</translation>
 <translation id="7026338066939101231">減らす</translation>
 <translation id="7029814467594812963">セッションを終了</translation>
+<translation id="7032161822340700104">使用できるテンプレートは 6 つまでです。新しいテンプレートを保存するには、既存のテンプレートを削除してください。</translation>
 <translation id="703425375924687388"><ph name="QUERY_NAME" />、Google アシスタント</translation>
 <translation id="7042322267639375032">ステータス領域を表示しない</translation>
 <translation id="7045033600005038336">テンプレートを置き換えますか?</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 9c6c786..67bc4b2 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">მიკროფონი</translation>
 <translation id="324366796737464147">ხმაურის შემცირება</translation>
 <translation id="3249513730522716925">ფანჯარა <ph name="WINDOW_TITLE" /> გადატანილია სამუშაო მაგიდიდან <ph name="ACTIVE_DESK" /> სამუშაო მაგიდაზე <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">დაყენება</translation>
 <translation id="3255483164551725916">რისი გაკეთება შეგიძლია?</translation>
 <translation id="3269597722229482060">მარჯვენა დაწკაპუნება</translation>
 <translation id="3289544412142055976">Linux აპები ამჟამად მხარდაუჭერელია</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index fce5e55..1a5ccd8e 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Шуды өшіру</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> терезесі <ph name="ACTIVE_DESK" /> үстелінен <ph name="TARGET_DESK" /> үстеліне көшірілді.</translation>
+<translation id="3252573918265662711">Орнату</translation>
 <translation id="3255483164551725916">Сен не істей аласың?</translation>
 <translation id="3269597722229482060">Тінтуірдің оң жақ түймесін басу</translation>
 <translation id="3289544412142055976">Linux қолданбаларына қазір қолдау көрсетілмейді.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index c17c834..8b90878 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">ម៉ៃក្រូហ្វូន</translation>
 <translation id="324366796737464147">ការកាត់បន្ថយ​សំឡេងរំខាន</translation>
 <translation id="3249513730522716925">បានផ្លាស់ទីផ្ទាំង <ph name="WINDOW_TITLE" /> ពីតុទី <ph name="ACTIVE_DESK" /> ទៅតុទី <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">ដំឡើង</translation>
 <translation id="3255483164551725916">តើអ្នក​អាច​ធ្វើអ្វី​បានខ្លះ?</translation>
 <translation id="3269597722229482060">ចុចកណ្ដុរខាងស្ដាំ</translation>
 <translation id="3289544412142055976">បច្ចុប្បន្ន មិនអាចប្រើកម្មវិធី Linux បានទេ</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 2af641e..da16526 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">ಮೈಕ್ರೋಫೋನ್</translation>
 <translation id="324366796737464147">ಗದ್ದಲ ನಿವಾರಣೆ</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ವಿಂಡೋವನ್ನು <ph name="ACTIVE_DESK" /> ಡೆಸ್ಕ್‌ನಿಂದ<ph name="TARGET_DESK" /> ಡೆಸ್ಕ್‌ಗೆ ಸರಿಸಲಾಗಿದೆ</translation>
+<translation id="3252573918265662711">ಸೆಟಪ್</translation>
 <translation id="3255483164551725916">ನೀವೇನು ಮಾಡಬಲ್ಲಿರಿ?</translation>
 <translation id="3269597722229482060">ಬಲ-ಕ್ಲಿಕ್</translation>
 <translation id="3289544412142055976">Linux ಆ್ಯಪ್‌ಗಳು ಪ್ರಸ್ತುತ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index dbf4e62..24ba9d6 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">마이크</translation>
 <translation id="324366796737464147">주변 소음 제거</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> 창이 <ph name="ACTIVE_DESK" /> 데스크에서 <ph name="TARGET_DESK" /> 데스크로 이동했습니다.</translation>
+<translation id="3252573918265662711">설정</translation>
 <translation id="3255483164551725916">무엇을 할 수 있어?</translation>
 <translation id="3269597722229482060">마우스 오른쪽 버튼 클릭</translation>
 <translation id="3289544412142055976">Linux 앱은 현재 지원되지 않습니다.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 77dec709..3229efb 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Чуу басар</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> терезеси <ph name="ACTIVE_DESK" /> иш тактасынан <ph name="TARGET_DESK" /> иш тактасына жылдырылды</translation>
+<translation id="3252573918265662711">Орнотуу</translation>
 <translation id="3255483164551725916">Эмне кыла аласыз?</translation>
 <translation id="3269597722229482060">Оң баскычын чыкылдатуу</translation>
 <translation id="3289544412142055976">Учурда Linux колдонмолору колдоого алынбайт</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 05850ebf..3f2fe01 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">ໄມໂຄຣໂຟນ</translation>
 <translation id="324366796737464147">ການຕັດສຽງລົບກວນ</translation>
 <translation id="3249513730522716925">ຍ້າຍໜ້າຈໍ <ph name="WINDOW_TITLE" /> ຈາກເດັສ <ph name="ACTIVE_DESK" /> ໄປຫາເດັສ <ph name="TARGET_DESK" /> ແລ້ວ</translation>
+<translation id="3252573918265662711">ຕັ້ງ</translation>
 <translation id="3255483164551725916">ທ່ານເຮັດຫຍັງໄດ້ແດ່?</translation>
 <translation id="3269597722229482060">ຄລິກຂວາ</translation>
 <translation id="3289544412142055976">ຕອນນີ້ບໍ່ຮອງຮັບແອັບ Linux ເທື່ອ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index c17c2e1..e8259ac 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofonas</translation>
 <translation id="324366796737464147">Triukšmo slopinimas</translation>
 <translation id="3249513730522716925">Langas „<ph name="WINDOW_TITLE" />“ perkeltas iš darbalaukio „<ph name="ACTIVE_DESK" />“ į darbalaukį „<ph name="TARGET_DESK" />“</translation>
+<translation id="3252573918265662711">Sąranka</translation>
 <translation id="3255483164551725916">„What can you do?“ (Ką gali atlikti?)</translation>
 <translation id="3269597722229482060">Spustelėti dešiniuoju klavišu</translation>
 <translation id="3289544412142055976">„Linux“ programos šiuo metu nepalaikomos</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 2f961827..a217c8f 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofons</translation>
 <translation id="324366796737464147">Trokšņu mazināšana</translation>
 <translation id="3249513730522716925">Logs <ph name="WINDOW_TITLE" /> pārvietots no darbvirsmas <ph name="ACTIVE_DESK" /> uz darbvirsmu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Iestatīšana</translation>
 <translation id="3255483164551725916">Iespējamās darbības</translation>
 <translation id="3269597722229482060">Noklikšķināt ar peles labo pogu</translation>
 <translation id="3289544412142055976">Linux lietotnes pašlaik netiek atbalstītas.</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index eebc4212..3808d1f8 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Исклучи бучава</translation>
 <translation id="3249513730522716925">Прозорецот <ph name="WINDOW_TITLE" /> се премести од работен простор <ph name="ACTIVE_DESK" /> на работен простор <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Поставување</translation>
 <translation id="3255483164551725916">Што можеш да направиш?</translation>
 <translation id="3269597722229482060">Десен клик</translation>
 <translation id="3289544412142055976">Апликациите на Linux не се поддржани во моментов</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index d105588..e9638a6 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">മൈക്രോഫോൺ</translation>
 <translation id="324366796737464147">നോയ്‌സ് റദ്ദാക്കൽ</translation>
 <translation id="3249513730522716925">വിൻഡോ <ph name="WINDOW_TITLE" /> ഡെസ്‌ക് <ph name="ACTIVE_DESK" />-ൽ നിന്ന് ഡെസ്‌ക് <ph name="TARGET_DESK" />-ലേക്ക് നീക്കി</translation>
+<translation id="3252573918265662711">സജ്ജമാക്കുക</translation>
 <translation id="3255483164551725916">നിങ്ങൾക്ക് എന്ത് ചെയ്യാനാവും?</translation>
 <translation id="3269597722229482060">വലത് ക്ലിക്ക്</translation>
 <translation id="3289544412142055976">Linux ആപ്പുകൾക്ക് നിലവിൽ പിന്തുണയില്ല</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index fb35b5b..6359c31 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Шуугиан хасалт</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> цонхыг <ph name="ACTIVE_DESK" /> дэлгэцээс <ph name="TARGET_DESK" /> дэлгэц рүү зөөсөн</translation>
+<translation id="3252573918265662711">Тохиргоо хийх.</translation>
 <translation id="3255483164551725916">Та юу хийх боломжтой вэ?</translation>
 <translation id="3269597722229482060">Баруун талыг товших</translation>
 <translation id="3289544412142055976">Linux аппуудыг одоогоор дэмждэггүй</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 3c20afa..5fda2e4 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">मायक्रोफोन</translation>
 <translation id="324366796737464147">नॉइझ कॅंसलेशन</translation>
 <translation id="3249513730522716925">विंडो <ph name="WINDOW_TITLE" /> डेस्क <ph name="ACTIVE_DESK" /> वरून डेस्क <ph name="TARGET_DESK" /> वर हलवली</translation>
+<translation id="3252573918265662711">सेटअप</translation>
 <translation id="3255483164551725916">तुला काय करता येते?</translation>
 <translation id="3269597722229482060">राइट क्लिक</translation>
 <translation id="3289544412142055976">Linux ॲप्सना सध्या सपोर्ट नाही</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index e0ba81b4..10cb16e 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Pembatalan hingar</translation>
 <translation id="3249513730522716925">Tetingkap <ph name="WINDOW_TITLE" /> dialihkan daripada Meja <ph name="ACTIVE_DESK" /> ke Meja <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Persediaan</translation>
 <translation id="3255483164551725916">Apakah yang boleh anda lakukan?</translation>
 <translation id="3269597722229482060">Klik Kanan</translation>
 <translation id="3289544412142055976">Apl Linux tidak disokong pada masa ini</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 9c91982..d2184b5 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">မိုက်ခရိုဖုန်း</translation>
 <translation id="324366796737464147">ဆူညံသံဖယ်ရှားခြင်း</translation>
 <translation id="3249513730522716925">ဝင်းဒိုး <ph name="WINDOW_TITLE" /> ကို 'မြင်ကွင်း <ph name="ACTIVE_DESK" />' မှ 'မြင်ကွင်း <ph name="TARGET_DESK" />' သို့ ရွှေ့ထားသည်</translation>
+<translation id="3252573918265662711">တပ်ဆင်ရန်</translation>
 <translation id="3255483164551725916">သင်ဘာလုပ်နိုင်သလဲ။</translation>
 <translation id="3269597722229482060">ညာဘက်ခလုတ်ကို နှိပ်ရန်</translation>
 <translation id="3289544412142055976">Linux အက်ပ်များကို လောလောဆယ် ပံ့ပိုးမထားပါ</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index e261552..543e8a4 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -349,6 +349,7 @@
 <translation id="3227137524299004712">माइक्रोफोन</translation>
 <translation id="324366796737464147">ध्वनि खारेजी</translation>
 <translation id="3249513730522716925">विन्डो सारेर <ph name="WINDOW_TITLE" /> डेस्क <ph name="ACTIVE_DESK" /> बाट <ph name="TARGET_DESK" /> डेस्कमा पुर्‍याइयो</translation>
+<translation id="3252573918265662711">सेटअप गर्नुहोस्</translation>
 <translation id="3255483164551725916">तपाईं के गर्न सक्नुहुन्छ?</translation>
 <translation id="3269597722229482060">दायाँ क्लिक गर्नुहोस्</translation>
 <translation id="3289544412142055976">Linux एपहरू हाल प्रयोग गर्न मिल्दैन</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 1d6d4051..dd0c331 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">Microfoon</translation>
 <translation id="324366796737464147">Ruisonderdrukking</translation>
 <translation id="3249513730522716925">Het venster <ph name="WINDOW_TITLE" /> is verplaatst van bureaublad <ph name="ACTIVE_DESK" /> naar bureaublad <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Instellen</translation>
 <translation id="3255483164551725916">Wat kun je doen?</translation>
 <translation id="3269597722229482060">Klikken met rechtermuisknop</translation>
 <translation id="3289544412142055976">Linux-apps worden momenteel niet ondersteund</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 250371f..9305d8b 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Støyreduksjon</translation>
 <translation id="3249513730522716925">Vinduet <ph name="WINDOW_TITLE" /> ble flyttet fra skrivebord <ph name="ACTIVE_DESK" /> til skrivebord <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Konfigurer</translation>
 <translation id="3255483164551725916">Hva kan du gjøre?</translation>
 <translation id="3269597722229482060">Høyreklikk</translation>
 <translation id="3289544412142055976">Linux-apper støttes ikke for øyeblikket</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index 3ae89a1..48f0db99 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">ମାଇକ୍ରୋଫୋନ୍</translation>
 <translation id="324366796737464147">ନଏଜ୍ ହ୍ରାସ</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ୱିଣ୍ଡୋ <ph name="ACTIVE_DESK" /> ଡେସ୍କରୁ <ph name="TARGET_DESK" />ଡେସ୍କକୁ ଘୁଞ୍ଚାଇ ଦିଆଯାଇଛି</translation>
+<translation id="3252573918265662711">ସେଟ୍‌ଅପ୍‌ କରନ୍ତୁ</translation>
 <translation id="3255483164551725916">ଆପଣ କ’ଣ କରିପାରିବେ?</translation>
 <translation id="3269597722229482060">ଡାହାଣ କ୍ଲିକ୍ କରନ୍ତୁ</translation>
 <translation id="3289544412142055976">Linux ଆପ୍ସ ବର୍ତ୍ତମାନ ସମର୍ଥିତ ନୁହେଁ</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index b3a031bd..44e412d 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">ਮਾਈਕ੍ਰੋਫੋਨ</translation>
 <translation id="324366796737464147">ਸ਼ੋਰ ਘਟਾਉਣਾ</translation>
 <translation id="3249513730522716925">ਵਿੰਡੋ <ph name="WINDOW_TITLE" /> ਨੂੰ ਡੈਸਕ <ph name="ACTIVE_DESK" /> ਤੋਂ ਡੈਸਕ <ph name="TARGET_DESK" /> 'ਤੇ ਲਿਜਾਇਆ ਗਿਆ</translation>
+<translation id="3252573918265662711">ਸੈੱਟਅੱਪ</translation>
 <translation id="3255483164551725916">ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ?</translation>
 <translation id="3269597722229482060">ਸੱਜਾ-ਕਲਿੱਕ</translation>
 <translation id="3289544412142055976">Linux ਐਪਾਂ ਫ਼ਿਲਹਾਲ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index f19a1a8d..99703b3 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Wyciszanie szumów</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> zostało przeniesione z biurka <ph name="ACTIVE_DESK" /> na biurko <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Konfiguracja</translation>
 <translation id="3255483164551725916">Co potrafisz?</translation>
 <translation id="3269597722229482060">Kliknij prawym</translation>
 <translation id="3289544412142055976">Aplikacje na Linuksa nie są obecnie obsługiwane</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 33288c7..c8554df9 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Microfone</translation>
 <translation id="324366796737464147">Cancelamento de ruído</translation>
 <translation id="3249513730522716925">A janela <ph name="WINDOW_TITLE" /> foi movida do espaço de trabalho <ph name="ACTIVE_DESK" /> para o <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuração</translation>
 <translation id="3255483164551725916">O que você pode fazer?</translation>
 <translation id="3269597722229482060">Clique com o botão direito do mouse</translation>
 <translation id="3289544412142055976">No momento, não há suporte para os apps do Linux</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index b016c1f..c03e2034 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Microfone</translation>
 <translation id="324366796737464147">Supressão de ruído</translation>
 <translation id="3249513730522716925">A janela <ph name="WINDOW_TITLE" /> foi movida do espaço de trabalho <ph name="ACTIVE_DESK" /> para o espaço de trabalho <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configuração</translation>
 <translation id="3255483164551725916">O que podes fazer?</translation>
 <translation id="3269597722229482060">Clicar com o botão direito do rato</translation>
 <translation id="3289544412142055976">De momento, as apps para Linux não são suportadas</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 59efc17..4cf0e29 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Microfon</translation>
 <translation id="324366796737464147">Anularea zgomotului</translation>
 <translation id="3249513730522716925">Fereastra <ph name="WINDOW_TITLE" /> a fost mutată de pe desktopul <ph name="ACTIVE_DESK" /> pe desktopul <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Configurează</translation>
 <translation id="3255483164551725916">Ce poți face?</translation>
 <translation id="3269597722229482060">Clic dreapta</translation>
 <translation id="3289544412142055976">Aplicațiile Linux nu sunt acceptate</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index ecd51d8..80de1fdb 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Шумоподавление</translation>
 <translation id="3249513730522716925">Окно "<ph name="WINDOW_TITLE" />" перемещено с рабочего стола "<ph name="ACTIVE_DESK" />" на рабочий стол "<ph name="TARGET_DESK" />".</translation>
+<translation id="3252573918265662711">Настройка</translation>
 <translation id="3255483164551725916">Что ты умеешь?</translation>
 <translation id="3269597722229482060">Правый клик</translation>
 <translation id="3289544412142055976">Приложения для Linux пока не поддерживаются</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 7db8091..545324d 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">මයික්‍රෆෝනය:</translation>
 <translation id="324366796737464147">අනවශ්‍ය ශබ්ද ඉවත් කිරීම</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> කවුළුව <ph name="ACTIVE_DESK" /> මේසයෙන් <ph name="TARGET_DESK" /> මේසයට ගියා</translation>
+<translation id="3252573918265662711">පිහිටුවන්න</translation>
 <translation id="3255483164551725916">ඔබට කළ හැක්කේ කුමක්ද?</translation>
 <translation id="3269597722229482060">දකුණු ක්ලික් කිරීම</translation>
 <translation id="3289544412142055976">Linux යෙදුම් දැනට සහාය නොදක්වයි</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 35fbf2d..2480197d 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofón</translation>
 <translation id="324366796737464147">Potlačenie šumu</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> bolo presunuté z plochy <ph name="ACTIVE_DESK" /> na plochu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Nastaviť</translation>
 <translation id="3255483164551725916">Čo dokážeš?</translation>
 <translation id="3269597722229482060">Kliknúť pravým tlačidlom</translation>
 <translation id="3289544412142055976">Aplikácie pre Linux nie sú momentálne podporované</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 8733302..72733ca 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Izločanje hrupa</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> je bilo premaknjeno iz namizja <ph name="ACTIVE_DESK" /> v namizje <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Nastavitev</translation>
 <translation id="3255483164551725916">Kakšne možnosti so na voljo?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289544412142055976">Aplikacije za Linux trenutno niso podprte.</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 684153a..73cfdb80 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofoni</translation>
 <translation id="324366796737464147">Anulimi i zhurmës</translation>
 <translation id="3249513730522716925">Dritarja <ph name="WINDOW_TITLE" /> u zhvendos nga tavolina e punës <ph name="ACTIVE_DESK" /> në tavolinën e punës <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Konfigurimi</translation>
 <translation id="3255483164551725916">Çfarë mund të bësh?</translation>
 <translation id="3269597722229482060">Kliko me butonin djathtas</translation>
 <translation id="3289544412142055976">Aplikacionet për Linux nuk mbështeten aktualisht</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 888392b3..57d6827 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Umanjivanje šuma</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premešten sa radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Podešavanje</translation>
 <translation id="3255483164551725916">Šta možeš da radiš?</translation>
 <translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289544412142055976">Linux aplikacije trenutno nisu podržane</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 024b92d..2e0c46ed 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Микрофон</translation>
 <translation id="324366796737464147">Умањивање шума</translation>
 <translation id="3249513730522716925">Прозор <ph name="WINDOW_TITLE" /> је премештен са радне површине <ph name="ACTIVE_DESK" /> на радну површину <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Подешавање</translation>
 <translation id="3255483164551725916">Шта можеш да радиш?</translation>
 <translation id="3269597722229482060">Десни клик</translation>
 <translation id="3289544412142055976">Linux апликације тренутно нису подржане</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index a3a10f0..c34cda9 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Brusreducering</translation>
 <translation id="3249513730522716925">Fönstret <ph name="WINDOW_TITLE" /> flyttades från skrivbordet <ph name="ACTIVE_DESK" /> till skrivbordet <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Konfiguration</translation>
 <translation id="3255483164551725916">Vad kan du göra?</translation>
 <translation id="3269597722229482060">Högerklicka</translation>
 <translation id="3289544412142055976">Linux-appar stöds inte för närvarande</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index 2e3ec1b..f38a7dd 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Maikrofoni</translation>
 <translation id="324366796737464147">Udhibiti wa kelele</translation>
 <translation id="3249513730522716925">Dirisha la <ph name="WINDOW_TITLE" /> limehamishwa kutoka Kiolesura cha <ph name="ACTIVE_DESK" /> hadi Kiolesura cha <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Usanidi</translation>
 <translation id="3255483164551725916">Unaweza kufanya nini?</translation>
 <translation id="3269597722229482060">Bofya Kulia</translation>
 <translation id="3289544412142055976">Programu za Linux haziwezi kutumika kwa sasa</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 7f4991bb..bd10edb 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -349,6 +349,7 @@
 <translation id="3227137524299004712">மைக்ரோஃபோன்</translation>
 <translation id="324366796737464147">இரைச்சலை நீக்குதல்</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> என்ற சாளரமானது டெஸ்க்<ph name="ACTIVE_DESK" />ல் இருந்து டெஸ்க் <ph name="TARGET_DESK" />க்கு நகர்த்தப்பட்டது</translation>
+<translation id="3252573918265662711">அமைவு</translation>
 <translation id="3255483164551725916">உன்னால் என்னவெல்லாம் செய்ய முடியும்?</translation>
 <translation id="3269597722229482060">வலது கிளிக்</translation>
 <translation id="3289544412142055976">Linux ஆப்ஸைத் தற்போது பயன்படுத்த முடியாது</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 8529206..e3c0f08 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">మైక్రోఫోన్</translation>
 <translation id="324366796737464147">నాయిస్ క్యాన్సిలేషన్</translation>
 <translation id="3249513730522716925">"<ph name="WINDOW_TITLE" />" విండో అన్నది "<ph name="ACTIVE_DESK" />" డెస్క్ నుండి "<ph name="TARGET_DESK" />" డెస్క్‌కు తరలించబడింది</translation>
+<translation id="3252573918265662711">సెటప్ చేయి</translation>
 <translation id="3255483164551725916">నువ్వు ఏమి చేయగలవు?</translation>
 <translation id="3269597722229482060">కుడి క్లిక్</translation>
 <translation id="3289544412142055976">ప్రస్తుతం Linux యాప్‌లు సపోర్ట్ చేయవు</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index d996369..2e23475 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">ไมโครโฟน</translation>
 <translation id="324366796737464147">การลดเสียงรบกวน</translation>
 <translation id="3249513730522716925">ย้ายหน้าต่าง <ph name="WINDOW_TITLE" /> จากเดสก์ <ph name="ACTIVE_DESK" /> ไปยังเดสก์ <ph name="TARGET_DESK" /> แล้ว</translation>
+<translation id="3252573918265662711">ตั้งค่า</translation>
 <translation id="3255483164551725916">เธอทำอะไรได้บ้าง</translation>
 <translation id="3269597722229482060">คลิกขวา</translation>
 <translation id="3289544412142055976">ขณะนี้ยังไม่รองรับแอป Linux</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 886caa3..346cebb 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Gürültü giderme</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> penceresi, Masa <ph name="ACTIVE_DESK" /> üzerinden Masa <ph name="TARGET_DESK" /> üzerine taşındı</translation>
+<translation id="3252573918265662711">Kurulum</translation>
 <translation id="3255483164551725916">Neler yapabilirsin?</translation>
 <translation id="3269597722229482060">Sağ Tıkla</translation>
 <translation id="3289544412142055976">Linux uygulamaları şu anda desteklenmiyor</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 7e2ed61..a3f8cc3c 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Мікрофон</translation>
 <translation id="324366796737464147">Заглушення шумів</translation>
 <translation id="3249513730522716925">Вікно "<ph name="WINDOW_TITLE" />" переміщено з робочого столу "<ph name="ACTIVE_DESK" />" на робочий стіл "<ph name="TARGET_DESK" />"</translation>
+<translation id="3252573918265662711">Налаштування</translation>
 <translation id="3255483164551725916">Що ти можеш?</translation>
 <translation id="3269597722229482060">Натиснути правою кнопкою миші</translation>
 <translation id="3289544412142055976">Додатки Linux наразі не підтримуються</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 33c6f37a..db89490 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">مائیکروفون</translation>
 <translation id="324366796737464147">شور کو کم کرنا</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ونڈو کو <ph name="ACTIVE_DESK" /> ڈیسک سے <ph name="TARGET_DESK" /> ڈیسک میں منتقل کر دیا گیا ہے</translation>
+<translation id="3252573918265662711">سیٹ اپ</translation>
 <translation id="3255483164551725916">آپ کیا کر سکتی ہیں؟</translation>
 <translation id="3269597722229482060">دائیں طرف کلک کریں</translation>
 <translation id="3289544412142055976">‏Linux ایپس فی الحال تعاون یافتہ نہیں ہیں</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index ff3ca579..d9e2ddb58 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Mikrofon</translation>
 <translation id="324366796737464147">Shovqinsizlantirish</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> oynasi <ph name="ACTIVE_DESK" /> ish stolidan <ph name="TARGET_DESK" /> ish stoliga koʻchirildi</translation>
+<translation id="3252573918265662711">Sozlash</translation>
 <translation id="3255483164551725916">Assistent nimalarga qodir?</translation>
 <translation id="3269597722229482060">Oʻng klik</translation>
 <translation id="3289544412142055976">Linux ilovalari hozirda ishlamaydi</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index c6abfb8..61db9b1 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Micrô</translation>
 <translation id="324366796737464147">Khử tiếng ồn</translation>
 <translation id="3249513730522716925">Đã di chuyển cửa sổ <ph name="WINDOW_TITLE" /> từ Không gian làm việc <ph name="ACTIVE_DESK" /> sang Không gian làm việc <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Thiết lập</translation>
 <translation id="3255483164551725916">Bạn có thể làm gì?</translation>
 <translation id="3269597722229482060">Nhấp chuột phải</translation>
 <translation id="3289544412142055976">Hiện không hỗ trợ ứng dụng Linux</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 791589a..7d6f14f 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">麦克风</translation>
 <translation id="324366796737464147">降噪</translation>
 <translation id="3249513730522716925">窗口“<ph name="WINDOW_TITLE" />”已由桌面 <ph name="ACTIVE_DESK" /> 移至桌面 <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">设置</translation>
 <translation id="3255483164551725916">你能做些什么?</translation>
 <translation id="3269597722229482060">右键点击</translation>
 <translation id="3289544412142055976">尚不支持 Linux 应用</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 2bc1fcb..2abf2a1 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">麥克風</translation>
 <translation id="324366796737464147">消噪</translation>
 <translation id="3249513730522716925">「<ph name="WINDOW_TITLE" />」視窗已從桌面 <ph name="ACTIVE_DESK" /> 移至桌面 <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">設定</translation>
 <translation id="3255483164551725916">你可以做咩嘢?</translation>
 <translation id="3269597722229482060">按滑鼠右鍵</translation>
 <translation id="3289544412142055976">目前不支援 Linux 應用程式</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index ad481ea..e2bb5fa 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -350,6 +350,7 @@
 <translation id="3227137524299004712">麥克風</translation>
 <translation id="324366796737464147">噪音消除</translation>
 <translation id="3249513730522716925">「<ph name="WINDOW_TITLE" />」視窗已從桌面 <ph name="ACTIVE_DESK" /> 移動到桌面 <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">設定</translation>
 <translation id="3255483164551725916">你會做些什麼?</translation>
 <translation id="3269597722229482060">按一下滑鼠右鍵</translation>
 <translation id="3289544412142055976">目前不支援 Linux 應用程式</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 14e414e..39cc413 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -353,6 +353,7 @@
 <translation id="3227137524299004712">Imakrofoni</translation>
 <translation id="324366796737464147">Ukukhansela umsindo</translation>
 <translation id="3249513730522716925">Iwindi <ph name="WINDOW_TITLE" /> lihanjisiwe kusuka kudeski <ph name="ACTIVE_DESK" /> kuya kudeski <ph name="TARGET_DESK" /></translation>
+<translation id="3252573918265662711">Ukumisa</translation>
 <translation id="3255483164551725916">Yini ongayenza?</translation>
 <translation id="3269597722229482060">Ukuchofoza Kwesokudla</translation>
 <translation id="3289544412142055976">Ama-app we-Linux apps okwamanje awasekelwe</translation>
diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h
index e54a9a4..53812b18 100644
--- a/base/allocator/partition_allocator/partition_alloc_constants.h
+++ b/base/allocator/partition_allocator/partition_alloc_constants.h
@@ -245,14 +245,14 @@
 constexpr size_t kMaxMemoryTaggingSize = 1024;
 
 #if defined(PA_HAS_MEMORY_TAGGING)
-// Returns whether the tag of a pointer/slot overflowed and slot needs to be
-// moved to quarantine.
-constexpr ALWAYS_INLINE bool HasOverflowTag(uintptr_t ptr) {
+// Returns whether the tag of |object| overflowed and the containing slot needs
+// to be moved to quarantine.
+ALWAYS_INLINE bool HasOverflowTag(void* object) {
   // The tag with which the slot is put to quarantine.
   constexpr uintptr_t kOverflowTag = 0x0f00000000000000uLL;
   static_assert((kOverflowTag & ~kMemTagUnmask) != 0,
                 "Overflow tag must be in tag bits");
-  return (ptr & ~kMemTagUnmask) == kOverflowTag;
+  return (reinterpret_cast<uintptr_t>(object) & ~kMemTagUnmask) == kOverflowTag;
 }
 #endif  // defined(PA_HAS_MEMORY_TAGGING)
 
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h
index 6e71c47..c2fb3542 100644
--- a/base/allocator/partition_allocator/partition_root.h
+++ b/base/allocator/partition_allocator/partition_root.h
@@ -562,15 +562,16 @@
     return quarantine_mode == QuarantineMode::kEnabled;
   }
 
-  ALWAYS_INLINE bool ShouldQuarantine(uintptr_t slot_start) const {
+  ALWAYS_INLINE bool ShouldQuarantine(void* object) const {
     if (UNLIKELY(quarantine_mode != QuarantineMode::kEnabled))
       return false;
 #if defined(PA_HAS_MEMORY_TAGGING)
     if (UNLIKELY(quarantine_always_for_testing))
       return true;
-    // If quarantine is enabled and tag overflows, move slot to quarantine, to
-    // prevent the attacker from exploiting a pointer that has old tag.
-    return HasOverflowTag(slot_start);
+    // If quarantine is enabled and the tag overflows, move the containing slot
+    // to quarantine, to prevent the attacker from exploiting a pointer that has
+    // an old tag.
+    return HasOverflowTag(object);
 #else
     return true;
 #endif
@@ -1090,11 +1091,11 @@
 #if defined(PA_HAS_MEMORY_TAGGING)
   const size_t slot_size = slot_span->bucket->slot_size;
   if (LIKELY(slot_size <= kMaxMemoryTaggingSize)) {
-    // Incrementing the memory range returns the true underlying tag, so
-    // RemaskPtr is not required here.
     // TODO(bartekn): |slot_start| shouldn't have MTE tag.
     slot_start = ::partition_alloc::internal::TagMemoryRangeIncrement(
         slot_start, slot_size);
+    // Incrementing the MTE-tag in the memory range invalidates the |object|'s
+    // tag, so it must be retagged.
     object = ::partition_alloc::internal::RemaskPtr(object);
   }
 #else
@@ -1114,7 +1115,7 @@
 
   // TODO(bikineev): Change the condition to LIKELY once PCScan is enabled by
   // default.
-  if (UNLIKELY(root->ShouldQuarantine(slot_start))) {
+  if (UNLIKELY(root->ShouldQuarantine(object))) {
     // PCScan safepoint. Call before potentially scheduling scanning task.
     PCScan::JoinScanIfNeeded();
     if (LIKELY(internal::IsManagedByNormalBuckets(slot_start))) {
diff --git a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc
index 7ab4035b..d3157cd 100644
--- a/base/allocator/partition_allocator/starscan/pcscan_unittest.cc
+++ b/base/allocator/partition_allocator/starscan/pcscan_unittest.cc
@@ -22,20 +22,6 @@
 
 namespace base {
 
-// In the MTE world, the upper bits of a pointer can be decorated with a tag,
-// thus allowing many versions of the same pointer to exist. These macros take
-// that into account when comparing.
-#define PA_EXPECT_PTR_EQ(ptr1, ptr2)                         \
-  {                                                          \
-    EXPECT_EQ(::partition_alloc::internal::UnmaskPtr(ptr1),  \
-              ::partition_alloc::internal::UnmaskPtr(ptr2)); \
-  }
-#define PA_EXPECT_PTR_NE(ptr1, ptr2)                         \
-  {                                                          \
-    EXPECT_NE(::partition_alloc::internal::UnmaskPtr(ptr1),  \
-              ::partition_alloc::internal::UnmaskPtr(ptr2)); \
-  }
-
 namespace internal {
 
 namespace {
@@ -102,10 +88,9 @@
 
   void FinishPCScanAsScanner() { PCScan::FinishScanForTesting(); }
 
-  bool IsInQuarantine(void* ptr) const {
-    uintptr_t address = ::partition_alloc::internal::UnmaskPtr(
-        reinterpret_cast<uintptr_t>(ptr));
-    return StateBitmapFromAddr(address)->IsQuarantined(address);
+  bool IsInQuarantine(void* object) const {
+    uintptr_t slot_start = root().ObjectToSlotStart(object);
+    return StateBitmapFromAddr(slot_start)->IsQuarantined(slot_start);
   }
 
   ThreadSafePartitionRoot& root() { return *allocator_.root(); }
@@ -161,8 +146,11 @@
 
   EXPECT_EQ(SlotSpan::FromSlotStart(first), SlotSpan::FromSlotStart(last));
   if (bucket.num_system_pages_per_slot_span == NumSystemPagesPerPartitionPage())
-    PA_EXPECT_PTR_EQ(first & PartitionPageBaseMask(),
-                     last & PartitionPageBaseMask());
+    // Pointers are expected to be in the same partition page, but have a
+    // different MTE-tag.
+    EXPECT_EQ(
+        ::partition_alloc::internal::UnmaskPtr(first & PartitionPageBaseMask()),
+        ::partition_alloc::internal::UnmaskPtr(last & PartitionPageBaseMask()));
   EXPECT_EQ(num_slots, bucket.active_slot_spans_head->num_allocated_slots);
   EXPECT_EQ(nullptr, bucket.active_slot_spans_head->get_freelist_head());
   EXPECT_TRUE(bucket.is_valid());
@@ -174,11 +162,13 @@
 }
 
 bool IsInFreeList(uintptr_t slot_start) {
-  slot_start = ::partition_alloc::internal::RemaskPtr(slot_start);
+  // slot_start isn't MTE-tagged, whereas pointers in the freelist are.
+  uintptr_t slot_start_tagged =
+      ::partition_alloc::internal::RemaskPtr(slot_start);
   auto* slot_span = SlotSpan::FromSlotStart(slot_start);
   for (auto* entry = slot_span->get_freelist_head(); entry;
        entry = entry->GetNext(slot_span->bucket->slot_size)) {
-    if (reinterpret_cast<uintptr_t>(entry) == slot_start)
+    if (reinterpret_cast<uintptr_t>(entry) == slot_start_tagged)
       return true;
   }
   return false;
@@ -252,12 +242,11 @@
 template <typename SourceList, typename ValueList>
 void TestDanglingReference(PartitionAllocPCScanTest& test,
                            SourceList* source,
-                           ValueList* value) {
-  auto* value_root = ThreadSafePartitionRoot::FromAddrInFirstSuperpage(
-      reinterpret_cast<uintptr_t>(value));
+                           ValueList* value,
+                           ThreadSafePartitionRoot& value_root) {
   {
     // Free |value| and leave the dangling reference in |source|.
-    ValueList::Destroy(*value_root, value);
+    ValueList::Destroy(value_root, value);
     // Check that |value| is in the quarantine now.
     EXPECT_TRUE(test.IsInQuarantine(value));
     // Run PCScan.
@@ -274,15 +263,14 @@
     // Check that the object is no longer in the quarantine.
     EXPECT_FALSE(test.IsInQuarantine(value));
     // Check that the object is in the freelist now.
-    EXPECT_TRUE(IsInFreeList(value_root->ObjectToSlotStart(value)));
+    EXPECT_TRUE(IsInFreeList(value_root.ObjectToSlotStart(value)));
   }
 }
 
 void TestDanglingReferenceNotVisited(PartitionAllocPCScanTest& test,
-                                     void* value) {
-  auto* value_root = ThreadSafePartitionRoot::FromAddrInFirstSuperpage(
-      reinterpret_cast<uintptr_t>(value));
-  value_root->Free(value);
+                                     void* value,
+                                     ThreadSafePartitionRoot& value_root) {
+  value_root.Free(value);
   // Check that |value| is in the quarantine now.
   EXPECT_TRUE(test.IsInQuarantine(value));
   // Run PCScan.
@@ -291,7 +279,7 @@
   // it was not scanned from the non-scannable partition.
   EXPECT_FALSE(test.IsInQuarantine(value));
   // Check that the object is in the freelist now.
-  EXPECT_TRUE(IsInFreeList(value_root->ObjectToSlotStart(value)));
+  EXPECT_TRUE(IsInFreeList(value_root.ObjectToSlotStart(value)));
 }
 
 }  // namespace
@@ -304,7 +292,7 @@
   auto* value = ValueList::Create(root(), nullptr);
   auto* source = SourceList::Create(root(), value);
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceDifferentBuckets) {
@@ -315,7 +303,7 @@
   auto* value = ValueList::Create(root(), nullptr);
   auto* source = SourceList::Create(root(), value);
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceDifferentBucketsAligned) {
@@ -333,13 +321,12 @@
   // Double check the setup -- make sure that exactly two slot spans were
   // allocated, within the same super page, with a gap in between.
   {
-    auto* value_root = ThreadSafePartitionRoot::FromAddrInFirstSuperpage(
-        reinterpret_cast<uintptr_t>(value));
-    ::partition_alloc::internal::ScopedGuard guard{value_root->lock_};
+    ::partition_alloc::internal::ScopedGuard guard{root().lock_};
 
-    auto super_page = reinterpret_cast<uintptr_t>(value) & kSuperPageBaseMask;
-    ASSERT_EQ(super_page,
-              reinterpret_cast<uintptr_t>(source) & kSuperPageBaseMask);
+    uintptr_t value_slot_start = root().ObjectToSlotStart(value);
+    uintptr_t source_slot_start = root().ObjectToSlotStart(source);
+    auto super_page = value_slot_start & kSuperPageBaseMask;
+    ASSERT_EQ(super_page, source_slot_start & kSuperPageBaseMask);
     size_t i = 0;
     uintptr_t first_slot_span_end = 0;
     uintptr_t second_slot_span_start = 0;
@@ -359,7 +346,7 @@
     ASSERT_GT(second_slot_span_start, first_slot_span_end);
   }
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest,
@@ -376,18 +363,20 @@
 
   // Assert that the first and the last objects are in the same slot span but on
   // different partition pages.
+  // Converting to slot start also takes care of the MTE-tag difference.
   ASSERT_EQ(SlotSpan::FromObject(full_slot_span.first),
             SlotSpan::FromObject(full_slot_span.last));
-  ASSERT_NE(
-      reinterpret_cast<size_t>(full_slot_span.first) & PartitionPageBaseMask(),
-      reinterpret_cast<size_t>(full_slot_span.last) & PartitionPageBaseMask());
+  uintptr_t first_slot_start = root().ObjectToSlotStart(full_slot_span.first);
+  uintptr_t last_slot_start = root().ObjectToSlotStart(full_slot_span.last);
+  ASSERT_NE(first_slot_start & PartitionPageBaseMask(),
+            last_slot_start & PartitionPageBaseMask());
 
   // Create two objects, on different partition pages.
   auto* value = new (full_slot_span.first) ValueList;
   auto* source = new (full_slot_span.last) SourceList;
   source->next = value;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceFromFullPage) {
@@ -396,27 +385,27 @@
 
   FullSlotSpanAllocation full_slot_span =
       GetFullSlotSpan(root(), sizeof(SourceList));
-  void* source_addr = full_slot_span.first;
+  void* source_buffer = full_slot_span.first;
   // This allocation must go through the slow path and call SetNewActivePage(),
   // which will flush the full page from the active page list.
-  void* value_addr =
+  void* value_buffer =
       root().AllocFlagsNoHooks(0, sizeof(ValueList), PartitionPageSize());
 
   // Assert that the first and the last objects are in different slot spans but
   // in the same bucket.
   SlotSpan* source_slot_span =
-      ThreadSafePartitionRoot::SlotSpan::FromObject(source_addr);
+      ThreadSafePartitionRoot::SlotSpan::FromObject(source_buffer);
   SlotSpan* value_slot_span =
-      ThreadSafePartitionRoot::SlotSpan::FromObject(value_addr);
+      ThreadSafePartitionRoot::SlotSpan::FromObject(value_buffer);
   ASSERT_NE(source_slot_span, value_slot_span);
   ASSERT_EQ(source_slot_span->bucket, value_slot_span->bucket);
 
   // Create two objects, where |source| is in a full detached page.
-  auto* value = new (value_addr) ValueList;
-  auto* source = new (source_addr) SourceList;
+  auto* value = new (value_buffer) ValueList;
+  auto* source = new (source_buffer) SourceList;
   source->next = value;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 namespace {
@@ -456,7 +445,7 @@
   auto* value = ValueList::Create(root());
   source->next = value->buffer2;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceFromSingleSlotSlotSpan) {
@@ -470,7 +459,7 @@
   auto* value = ValueList::Create(root());
   source->next = value;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingInterPartitionReference) {
@@ -505,7 +494,7 @@
   auto* value = ValueList::Create(value_root);
   source->next = value;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, value_root);
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceToNonScannablePartition) {
@@ -540,7 +529,7 @@
   auto* value = ValueList::Create(value_root);
   source->next = value;
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, value_root);
 }
 
 TEST_F(PartitionAllocPCScanTest, DanglingReferenceFromNonScannablePartition) {
@@ -575,7 +564,7 @@
   auto* value = ValueList::Create(value_root);
   source->next = value;
 
-  TestDanglingReferenceNotVisited(*this, value);
+  TestDanglingReferenceNotVisited(*this, value, value_root);
 }
 
 // Death tests misbehave on Android, http://crbug.com/643760.
@@ -593,12 +582,11 @@
 template <typename SourceList, typename ValueList>
 void TestDanglingReferenceWithSafepoint(PartitionAllocPCScanTest& test,
                                         SourceList* source,
-                                        ValueList* value) {
-  auto* value_root = ThreadSafePartitionRoot::FromAddrInFirstSuperpage(
-      reinterpret_cast<uintptr_t>(value));
+                                        ValueList* value,
+                                        ThreadSafePartitionRoot& value_root) {
   {
     // Free |value| and leave the dangling reference in |source|.
-    ValueList::Destroy(*value_root, value);
+    ValueList::Destroy(value_root, value);
     // Check that |value| is in the quarantine now.
     EXPECT_TRUE(test.IsInQuarantine(value));
     // Schedule PCScan but don't scan.
@@ -643,7 +631,7 @@
   auto* value = ValueList::Create(root());
   source->next = value;
 
-  TestDanglingReferenceWithSafepoint(*this, source, value);
+  TestDanglingReferenceWithSafepoint(*this, source, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, StackScanning) {
@@ -692,22 +680,29 @@
 TEST_F(PartitionAllocPCScanTest, DontScanUnusedRawSize) {
   using ValueList = List<8>;
 
-  // Make sure to commit more memory than requested and have slack for storing
+  // Make sure to commit more memory than requested to have slack for storing
   // dangling reference outside of the raw size.
   const size_t big_size = kMaxBucketed - SystemPageSize() + 1;
   void* ptr = root().Alloc(big_size, nullptr);
 
   auto* slot_span = SlotSpanMetadata<ThreadSafe>::FromObject(ptr);
+  ASSERT_TRUE(big_size + sizeof(void*) <=
+              root().AllocationCapacityFromPtr(ptr));
   ASSERT_TRUE(slot_span->CanStoreRawSize());
 
-  uintptr_t source_end =
-      root().ObjectToSlotStart(ptr) + slot_span->GetRawSize();
-
   auto* value = ValueList::Create(root());
 
+  uintptr_t slot_start = root().ObjectToSlotStart(ptr);
+  // This not only points past the object, but past all extras around it.
+  // However, there should be enough space between this and the end of slot, to
+  // store some data.
+  // Since we stripped the MTE-tag to get |slot_start|, we need to retag it.
+  uintptr_t source_end = ::partition_alloc::internal::RemaskPtr(
+      slot_start + slot_span->GetRawSize());
+  // Write the pointer.
   *reinterpret_cast<ValueList**>(source_end) = value;
 
-  TestDanglingReferenceNotVisited(*this, value);
+  TestDanglingReferenceNotVisited(*this, value, root());
 }
 
 TEST_F(PartitionAllocPCScanTest, PointersToGuardPages) {
@@ -722,10 +717,12 @@
   auto* const pointers = static_cast<Pointers*>(
       root().AllocFlagsNoHooks(0, sizeof(Pointers), PartitionPageSize()));
 
+  // Converting to slot start strips MTE tag.
   const uintptr_t super_page =
-      reinterpret_cast<uintptr_t>(pointers) & kSuperPageBaseMask;
+      root().ObjectToSlotStart(pointers) & kSuperPageBaseMask;
 
   // Initialize scannable pointers with addresses of guard pages and metadata.
+  // None of these point to an MTE-tagged area, so no need for retagging.
   pointers->super_page = reinterpret_cast<void*>(super_page);
   pointers->metadata_page =
       PartitionSuperPageToMetadataArea<ThreadSafe>(super_page);
@@ -776,6 +773,7 @@
 
   // Let the first object point past the end of the last one + some random
   // offset.
+  // It should fall within the same slot, so no need for MTE-retagging.
   static constexpr size_t kOffsetPastEnd = 7;
   *reinterpret_cast<uint8_t**>(full_slot_span.first) =
       reinterpret_cast<uint8_t*>(full_slot_span.last) +
@@ -802,11 +800,12 @@
 
   // Let the |source| object point to the unused area of |value| and expect
   // |value| to be nevertheless marked during scanning.
+  // It should fall within the same slot, so no need for MTE-retagging.
   static constexpr size_t kOffsetPastEnd = 7;
   source->next = reinterpret_cast<ListBase*>(
       reinterpret_cast<uint8_t*>(value + 1) + kOffsetPastEnd);
 
-  TestDanglingReference(*this, source, value);
+  TestDanglingReference(*this, source, value, root());
 }
 
 #if defined(PA_HAS_MEMORY_TAGGING)
@@ -823,8 +822,8 @@
     // The test relies on unrandomized freelist! If the slot was not moved to
     // quarantine, assert that the obj2 is the same as obj1 and the tags are
     // different.
-    if (!HasOverflowTag(reinterpret_cast<uintptr_t>(
-            ::partition_alloc::internal::RemaskPtr(obj1)))) {
+    // MTE-retag |obj1|, as the tag changed when freeing it.
+    if (!HasOverflowTag(::partition_alloc::internal::RemaskPtr(obj1))) {
       // Assert that the pointer is the same.
       ASSERT_EQ(::partition_alloc::internal::UnmaskPtr(obj1),
                 ::partition_alloc::internal::UnmaskPtr(obj2));
@@ -836,10 +835,10 @@
   for (size_t i = 0; i < 16; ++i) {
     auto* obj = ListType::Create(root());
     ListType::Destroy(root(), obj);
-    // Get the current tag of the slot.
+    // MTE-retag |obj|, as the tag changed when freeing it.
     obj = ::partition_alloc::internal::RemaskPtr(obj);
     // Check if the tag overflows. If so, the object must be in quarantine.
-    if (HasOverflowTag(reinterpret_cast<uintptr_t>(obj))) {
+    if (HasOverflowTag(obj)) {
       EXPECT_TRUE(IsInQuarantine(obj));
       EXPECT_FALSE(IsInFreeList(root().ObjectToSlotStart(obj)));
       return;
diff --git a/base/profiler/metadata_recorder.cc b/base/profiler/metadata_recorder.cc
index c51728f..d4c857f 100644
--- a/base/profiler/metadata_recorder.cc
+++ b/base/profiler/metadata_recorder.cc
@@ -13,9 +13,8 @@
 
 MetadataRecorder::Item::Item(uint64_t name_hash,
                              absl::optional<int64_t> key,
-                             absl::optional<PlatformThreadId> thread_id,
                              int64_t value)
-    : name_hash(name_hash), key(key), thread_id(thread_id), value(value) {}
+    : name_hash(name_hash), key(key), value(value) {}
 
 MetadataRecorder::Item::Item() : name_hash(0), value(0) {}
 
@@ -38,7 +37,6 @@
 
 void MetadataRecorder::Set(uint64_t name_hash,
                            absl::optional<int64_t> key,
-                           absl::optional<PlatformThreadId> thread_id,
                            int64_t value) {
   AutoLock lock(write_lock_);
 
@@ -51,8 +49,7 @@
   size_t item_slots_used = item_slots_used_.load(std::memory_order_relaxed);
   for (size_t i = 0; i < item_slots_used; ++i) {
     auto& item = items_[i];
-    if (item.name_hash == name_hash && item.key == key &&
-        item.thread_id == thread_id) {
+    if (item.name_hash == name_hash && item.key == key) {
       item.value.store(value, std::memory_order_relaxed);
 
       const bool was_active =
@@ -85,22 +82,18 @@
   auto& item = items_[item_slots_used];
   item.name_hash = name_hash;
   item.key = key;
-  item.thread_id = thread_id;
   item.value.store(value, std::memory_order_relaxed);
   item.is_active.store(true, std::memory_order_release);
   item_slots_used_.fetch_add(1, std::memory_order_release);
 }
 
-void MetadataRecorder::Remove(uint64_t name_hash,
-                              absl::optional<int64_t> key,
-                              absl::optional<PlatformThreadId> thread_id) {
+void MetadataRecorder::Remove(uint64_t name_hash, absl::optional<int64_t> key) {
   AutoLock lock(write_lock_);
 
   size_t item_slots_used = item_slots_used_.load(std::memory_order_relaxed);
   for (size_t i = 0; i < item_slots_used; ++i) {
     auto& item = items_[i];
-    if (item.name_hash == name_hash && item.key == key &&
-        item.thread_id == thread_id) {
+    if (item.name_hash == name_hash && item.key == key) {
       // A removed item will occupy its slot until that slot is reclaimed.
       const bool was_active =
           item.is_active.exchange(false, std::memory_order_relaxed);
@@ -113,21 +106,18 @@
 }
 
 MetadataRecorder::MetadataProvider::MetadataProvider(
-    MetadataRecorder* metadata_recorder,
-    PlatformThreadId thread_id)
+    MetadataRecorder* metadata_recorder)
     : metadata_recorder_(metadata_recorder),
-      thread_id_(thread_id),
       auto_lock_(metadata_recorder->read_lock_) {}
 
 MetadataRecorder::MetadataProvider::~MetadataProvider() = default;
 
 size_t MetadataRecorder::MetadataProvider::GetItems(
     ItemArray* const items) const {
-  return metadata_recorder_->GetItems(items, thread_id_);
+  return metadata_recorder_->GetItems(items);
 }
 
-size_t MetadataRecorder::GetItems(ItemArray* const items,
-                                  PlatformThreadId thread_id) const {
+size_t MetadataRecorder::GetItems(ItemArray* const items) const {
   // If a writer adds a new item after this load, it will be ignored.  We do
   // this instead of calling item_slots_used_.load() explicitly in the for loop
   // bounds checking, which would be expensive.
@@ -145,11 +135,9 @@
     const auto& item = items_[read_index];
     // Because we wait until |is_active| is set to consider an item active and
     // that field is always set last, we ignore half-created items.
-    if (item.is_active.load(std::memory_order_acquire) &&
-        (!item.thread_id.has_value() || item.thread_id == thread_id)) {
-      (*items)[write_index++] =
-          Item{item.name_hash, item.key, item.thread_id,
-               item.value.load(std::memory_order_relaxed)};
+    if (item.is_active.load(std::memory_order_acquire)) {
+      (*items)[write_index++] = Item{
+          item.name_hash, item.key, item.value.load(std::memory_order_relaxed)};
     }
   }
 
diff --git a/base/profiler/metadata_recorder.h b/base/profiler/metadata_recorder.h
index 50093b21ee..b1b7c5a 100644
--- a/base/profiler/metadata_recorder.h
+++ b/base/profiler/metadata_recorder.h
@@ -12,7 +12,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
 #include "base/thread_annotations.h"
-#include "base/threading/platform_thread.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace base {
@@ -130,10 +129,7 @@
   MetadataRecorder& operator=(const MetadataRecorder&) = delete;
 
   struct BASE_EXPORT Item {
-    Item(uint64_t name_hash,
-         absl::optional<int64_t> key,
-         absl::optional<PlatformThreadId> thread_id,
-         int64_t value);
+    Item(uint64_t name_hash, absl::optional<int64_t> key, int64_t value);
     Item();
 
     Item(const Item& other);
@@ -143,28 +139,20 @@
     uint64_t name_hash;
     // The key if specified when setting the item.
     absl::optional<int64_t> key;
-    // The thread_id is captured from the current thread for a thread-scoped
-    // item.
-    absl::optional<PlatformThreadId> thread_id;
     // The value of the metadata item.
     int64_t value;
   };
   static constexpr size_t MAX_METADATA_COUNT = 50;
   typedef std::array<Item, MAX_METADATA_COUNT> ItemArray;
 
-  // Sets a value for a (|name_hash|, |key|, |thread_id|) tuple, overwriting any
-  // value previously set for the tuple. Nullopt keys are treated as just
-  // another key state for the purpose of associating values.
-  void Set(uint64_t name_hash,
-           absl::optional<int64_t> key,
-           absl::optional<PlatformThreadId> thread_id,
-           int64_t value);
+  // Sets a value for a (|name_hash|, |key|) pair, overwriting any value
+  // previously set for the pair. Nullopt keys are treated as just another key
+  // state for the purpose of associating values.
+  void Set(uint64_t name_hash, absl::optional<int64_t> key, int64_t value);
 
   // Removes the item with the specified name hash and optional key. Has no
   // effect if such an item does not exist.
-  void Remove(uint64_t name_hash,
-              absl::optional<int64_t> key,
-              absl::optional<PlatformThreadId> thread_id);
+  void Remove(uint64_t name_hash, absl::optional<int64_t> key);
 
   // An object that provides access to a MetadataRecorder's items and holds the
   // necessary exclusive read lock until the object is destroyed. Reclaiming of
@@ -191,25 +179,22 @@
    public:
     // Acquires an exclusive read lock on the metadata recorder which is held
     // until the object is destroyed.
-    explicit MetadataProvider(MetadataRecorder* metadata_recorder,
-                              PlatformThreadId thread_id)
+    explicit MetadataProvider(MetadataRecorder* metadata_recorder)
         EXCLUSIVE_LOCK_FUNCTION(metadata_recorder_->read_lock_);
     ~MetadataProvider() UNLOCK_FUNCTION();
     MetadataProvider(const MetadataProvider&) = delete;
     MetadataProvider& operator=(const MetadataProvider&) = delete;
 
-    // Retrieves the first |available_slots| items in the metadata recorder for
-    // |thread_id| and copies them into |items|, returning the number of
-    // metadata items that were copied. To ensure that all items can be copied,
-    // |available slots| should be greater than or equal to
-    // |MAX_METADATA_COUNT|. Requires NO_THREAD_SAFETY_ANALYSIS because clang's
-    // analyzer doesn't understand the cross-class locking used in this class'
-    // implementation.
+    // Retrieves the first |available_slots| items in the metadata recorder and
+    // copies them into |items|, returning the number of metadata items that
+    // were copied. To ensure that all items can be copied, |available slots|
+    // should be greater than or equal to |MAX_METADATA_COUNT|. Requires
+    // NO_THREAD_SAFETY_ANALYSIS because clang's analyzer doesn't understand the
+    // cross-class locking used in this class' implementation.
     size_t GetItems(ItemArray* const items) const NO_THREAD_SAFETY_ANALYSIS;
 
    private:
     const raw_ptr<const MetadataRecorder> metadata_recorder_;
-    PlatformThreadId thread_id_;
     base::AutoLock auto_lock_;
   };
 
@@ -227,15 +212,14 @@
     // is marked as active.
     std::atomic<bool> is_active{false};
 
-    // Neither name_hash, key or thread_id require atomicity or memory order
-    // constraints because no reader will attempt to read them mid-write.
-    // Specifically, readers wait until |is_active| is true to read them.
-    // Because |is_active| is always stored with a memory_order_release fence,
-    // we're guaranteed that |name_hash|, |key| and |thread_id| will be finished
-    // writing before |is_active| is set to true.
+    // Neither name_hash or key require atomicity or memory order constraints
+    // because no reader will attempt to read them mid-write. Specifically,
+    // readers wait until |is_active| is true to read them. Because |is_active|
+    // is always stored with a memory_order_release fence, we're guaranteed that
+    // |name_hash| and |key| will be finished writing before |is_active| is set
+    // to true.
     uint64_t name_hash;
     absl::optional<int64_t> key;
-    absl::optional<PlatformThreadId> thread_id;
 
     // Requires atomic reads and writes to avoid word tearing when updating an
     // existing item unsynchronized. Does not require acquire/release semantics
@@ -256,10 +240,7 @@
       EXCLUSIVE_LOCKS_REQUIRED(write_lock_)
           EXCLUSIVE_LOCKS_REQUIRED(read_lock_);
 
-  // Retrieves items in the metadata recorder that are active for |thread_id|
-  // and copies them into |items|, returning the number of metadata items that
-  // were copied.
-  size_t GetItems(ItemArray* const items, PlatformThreadId thread_id) const
+  size_t GetItems(ItemArray* const items) const
       EXCLUSIVE_LOCKS_REQUIRED(read_lock_);
 
   // Metadata items that the recorder has seen. Rather than implementing the
diff --git a/base/profiler/metadata_recorder_unittest.cc b/base/profiler/metadata_recorder_unittest.cc
index 82a4e90f..078736dd 100644
--- a/base/profiler/metadata_recorder_unittest.cc
+++ b/base/profiler/metadata_recorder_unittest.cc
@@ -27,59 +27,49 @@
   MetadataRecorder recorder;
   MetadataRecorder::ItemArray items;
 
-  EXPECT_EQ(0u, MetadataRecorder::MetadataProvider(&recorder,
-                                                   PlatformThread::CurrentId())
-                    .GetItems(&items));
-  EXPECT_EQ(0u, MetadataRecorder::MetadataProvider(&recorder,
-                                                   PlatformThread::CurrentId())
-                    .GetItems(&items));
+  size_t item_count =
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
+
+  EXPECT_EQ(0u, item_count);
 }
 
 TEST(MetadataRecorderTest, Set_NewNameHash) {
   MetadataRecorder recorder;
 
-  recorder.Set(10, absl::nullopt, absl::nullopt, 20);
+  recorder.Set(10, absl::nullopt, 20);
 
   MetadataRecorder::ItemArray items;
   size_t item_count;
   {
-    item_count = MetadataRecorder::MetadataProvider(&recorder,
-                                                    PlatformThread::CurrentId())
-                     .GetItems(&items);
+    item_count = MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
     ASSERT_EQ(1u, item_count);
     EXPECT_EQ(10u, items[0].name_hash);
     EXPECT_FALSE(items[0].key.has_value());
-    EXPECT_FALSE(items[0].thread_id.has_value());
     EXPECT_EQ(20, items[0].value);
   }
 
-  recorder.Set(20, absl::nullopt, absl::nullopt, 30);
+  recorder.Set(20, absl::nullopt, 30);
 
   {
-    item_count = MetadataRecorder::MetadataProvider(&recorder,
-                                                    PlatformThread::CurrentId())
-                     .GetItems(&items);
+    item_count = MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
     ASSERT_EQ(2u, item_count);
     EXPECT_EQ(20u, items[1].name_hash);
     EXPECT_FALSE(items[1].key.has_value());
-    EXPECT_FALSE(items[1].thread_id.has_value());
     EXPECT_EQ(30, items[1].value);
   }
 }
 
 TEST(MetadataRecorderTest, Set_ExistingNameNash) {
   MetadataRecorder recorder;
-  recorder.Set(10, absl::nullopt, absl::nullopt, 20);
-  recorder.Set(10, absl::nullopt, absl::nullopt, 30);
+  recorder.Set(10, absl::nullopt, 20);
+  recorder.Set(10, absl::nullopt, 30);
 
   MetadataRecorder::ItemArray items;
   size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
   ASSERT_EQ(1u, item_count);
   EXPECT_EQ(10u, items[0].name_hash);
   EXPECT_FALSE(items[0].key.has_value());
-  EXPECT_FALSE(items[0].thread_id.has_value());
   EXPECT_EQ(30, items[0].value);
 }
 
@@ -88,20 +78,19 @@
   MetadataRecorder::ItemArray items;
   std::vector<MetadataRecorder::Item> expected;
   for (size_t i = 0; i < items.size(); ++i) {
-    expected.emplace_back(i, absl::nullopt, absl::nullopt, 0);
-    recorder.Set(i, absl::nullopt, absl::nullopt, 0);
+    expected.push_back(MetadataRecorder::Item{i, absl::nullopt, 0});
+    recorder.Set(i, absl::nullopt, 0);
   }
 
   // By removing an item from a full recorder, re-setting the same item, and
   // verifying that the item is returned, we can verify that the recorder is
   // reusing the inactive slot for the same name hash instead of trying (and
   // failing) to allocate a new slot.
-  recorder.Remove(3, absl::nullopt, absl::nullopt);
-  recorder.Set(3, absl::nullopt, absl::nullopt, 0);
+  recorder.Remove(3, absl::nullopt);
+  recorder.Set(3, absl::nullopt, 0);
 
   size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
   EXPECT_EQ(items.size(), item_count);
   EXPECT_THAT(expected, ::testing::UnorderedElementsAreArray(items));
 }
@@ -110,24 +99,22 @@
   MetadataRecorder recorder;
   MetadataRecorder::ItemArray items;
   for (size_t i = 0; i < items.size(); ++i) {
-    recorder.Set(i, absl::nullopt, absl::nullopt, 0);
+    recorder.Set(i, absl::nullopt, 0);
   }
 
   // This should fail silently.
-  recorder.Set(items.size(), absl::nullopt, absl::nullopt, 0);
+  recorder.Set(items.size(), absl::nullopt, 0);
 }
 
 TEST(MetadataRecorderTest, Set_NulloptKeyIsIndependentOfNonNulloptKey) {
   MetadataRecorder recorder;
 
-  recorder.Set(10, 100, absl::nullopt, 20);
+  recorder.Set(10, 100, 20);
 
   MetadataRecorder::ItemArray items;
   size_t item_count;
   {
-    item_count = MetadataRecorder::MetadataProvider(&recorder,
-                                                    PlatformThread::CurrentId())
-                     .GetItems(&items);
+    item_count = MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
     ASSERT_EQ(1u, item_count);
     EXPECT_EQ(10u, items[0].name_hash);
     ASSERT_TRUE(items[0].key.has_value());
@@ -135,12 +122,10 @@
     EXPECT_EQ(20, items[0].value);
   }
 
-  recorder.Set(10, absl::nullopt, absl::nullopt, 30);
+  recorder.Set(10, absl::nullopt, 30);
 
   {
-    item_count = MetadataRecorder::MetadataProvider(&recorder,
-                                                    PlatformThread::CurrentId())
-                     .GetItems(&items);
+    item_count = MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
     ASSERT_EQ(2u, item_count);
 
     EXPECT_EQ(10u, items[0].name_hash);
@@ -154,65 +139,16 @@
   }
 }
 
-TEST(MetadataRecorderTest, Set_ThreadIdIsScoped) {
-  MetadataRecorder recorder;
-
-  recorder.Set(10, absl::nullopt, PlatformThread::CurrentId(), 20);
-
-  MetadataRecorder::ItemArray items;
-  size_t item_count;
-  {
-    item_count = MetadataRecorder::MetadataProvider(&recorder,
-                                                    PlatformThread::CurrentId())
-                     .GetItems(&items);
-    ASSERT_EQ(1u, item_count);
-    EXPECT_EQ(10u, items[0].name_hash);
-    EXPECT_FALSE(items[0].key.has_value());
-    ASSERT_TRUE(items[0].thread_id.has_value());
-    EXPECT_EQ(PlatformThread::CurrentId(), *items[0].thread_id);
-    EXPECT_EQ(20, items[0].value);
-  }
-  {
-    item_count = MetadataRecorder::MetadataProvider(&recorder, kInvalidThreadId)
-                     .GetItems(&items);
-    EXPECT_EQ(0U, item_count);
-  }
-}
-
-TEST(MetadataRecorderTest, Set_NulloptThreadAndNonNulloptThread) {
-  MetadataRecorder recorder;
-
-  recorder.Set(10, absl::nullopt, PlatformThread::CurrentId(), 20);
-  recorder.Set(10, absl::nullopt, absl::nullopt, 30);
-
-  MetadataRecorder::ItemArray items;
-  size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
-  ASSERT_EQ(2u, item_count);
-  EXPECT_EQ(10u, items[0].name_hash);
-  EXPECT_FALSE(items[0].key.has_value());
-  ASSERT_TRUE(items[0].thread_id.has_value());
-  EXPECT_EQ(PlatformThread::CurrentId(), *items[0].thread_id);
-  EXPECT_EQ(20, items[0].value);
-
-  EXPECT_EQ(10u, items[1].name_hash);
-  EXPECT_FALSE(items[1].key.has_value());
-  EXPECT_FALSE(items[1].thread_id.has_value());
-  EXPECT_EQ(30, items[1].value);
-}
-
 TEST(MetadataRecorderTest, Remove) {
   MetadataRecorder recorder;
-  recorder.Set(10, absl::nullopt, absl::nullopt, 20);
-  recorder.Set(30, absl::nullopt, absl::nullopt, 40);
-  recorder.Set(50, absl::nullopt, absl::nullopt, 60);
-  recorder.Remove(30, absl::nullopt, absl::nullopt);
+  recorder.Set(10, absl::nullopt, 20);
+  recorder.Set(30, absl::nullopt, 40);
+  recorder.Set(50, absl::nullopt, 60);
+  recorder.Remove(30, absl::nullopt);
 
   MetadataRecorder::ItemArray items;
   size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
   ASSERT_EQ(2u, item_count);
   EXPECT_EQ(10u, items[0].name_hash);
   EXPECT_FALSE(items[0].key.has_value());
@@ -224,13 +160,12 @@
 
 TEST(MetadataRecorderTest, Remove_DoesntExist) {
   MetadataRecorder recorder;
-  recorder.Set(10, absl::nullopt, absl::nullopt, 20);
-  recorder.Remove(20, absl::nullopt, absl::nullopt);
+  recorder.Set(10, absl::nullopt, 20);
+  recorder.Remove(20, absl::nullopt);
 
   MetadataRecorder::ItemArray items;
   size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
   ASSERT_EQ(1u, item_count);
   EXPECT_EQ(10u, items[0].name_hash);
   EXPECT_FALSE(items[0].key.has_value());
@@ -240,15 +175,14 @@
 TEST(MetadataRecorderTest, Remove_NulloptKeyIsIndependentOfNonNulloptKey) {
   MetadataRecorder recorder;
 
-  recorder.Set(10, 100, absl::nullopt, 20);
-  recorder.Set(10, absl::nullopt, absl::nullopt, 30);
+  recorder.Set(10, 100, 20);
+  recorder.Set(10, absl::nullopt, 30);
 
-  recorder.Remove(10, absl::nullopt, absl::nullopt);
+  recorder.Remove(10, absl::nullopt);
 
   MetadataRecorder::ItemArray items;
   size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&items);
   ASSERT_EQ(1u, item_count);
   EXPECT_EQ(10u, items[0].name_hash);
   ASSERT_TRUE(items[0].key.has_value());
@@ -256,52 +190,31 @@
   EXPECT_EQ(20, items[0].value);
 }
 
-TEST(MetadataRecorderTest,
-     Remove_NulloptThreadIsIndependentOfNonNulloptThread) {
-  MetadataRecorder recorder;
-
-  recorder.Set(10, absl::nullopt, PlatformThread::CurrentId(), 20);
-  recorder.Set(10, absl::nullopt, absl::nullopt, 30);
-
-  recorder.Remove(10, absl::nullopt, absl::nullopt);
-
-  MetadataRecorder::ItemArray items;
-  size_t item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&items);
-  ASSERT_EQ(1u, item_count);
-  EXPECT_EQ(10u, items[0].name_hash);
-  EXPECT_FALSE(items[0].key.has_value());
-  ASSERT_TRUE(items[0].thread_id.has_value());
-  EXPECT_EQ(PlatformThread::CurrentId(), *items[0].thread_id);
-  EXPECT_EQ(20, items[0].value);
-}
-
 TEST(MetadataRecorderTest, ReclaimInactiveSlots) {
   MetadataRecorder recorder;
 
   std::set<MetadataRecorder::Item> items_set;
   // Fill up the metadata map.
   for (size_t i = 0; i < MetadataRecorder::MAX_METADATA_COUNT; ++i) {
-    recorder.Set(i, absl::nullopt, absl::nullopt, i);
-    items_set.insert(MetadataRecorder::Item{i, absl::nullopt, absl::nullopt,
-                                            static_cast<int64_t>(i)});
+    recorder.Set(i, absl::nullopt, i);
+    items_set.insert(
+        MetadataRecorder::Item{i, absl::nullopt, static_cast<int64_t>(i)});
   }
 
   // Remove every fourth entry to fragment the data.
   size_t entries_removed = 0;
   for (size_t i = 3; i < MetadataRecorder::MAX_METADATA_COUNT; i += 4) {
-    recorder.Remove(i, absl::nullopt, absl::nullopt);
+    recorder.Remove(i, absl::nullopt);
     ++entries_removed;
-    items_set.erase(MetadataRecorder::Item{i, absl::nullopt, absl::nullopt,
-                                           static_cast<int64_t>(i)});
+    items_set.erase(
+        MetadataRecorder::Item{i, absl::nullopt, static_cast<int64_t>(i)});
   }
 
   // Ensure that the inactive slots are reclaimed to make room for more entries.
   for (size_t i = 1; i <= entries_removed; ++i) {
-    recorder.Set(i * 100, absl::nullopt, absl::nullopt, i * 100);
-    items_set.insert(MetadataRecorder::Item{
-        i * 100, absl::nullopt, absl::nullopt, static_cast<int64_t>(i * 100)});
+    recorder.Set(i * 100, absl::nullopt, i * 100);
+    items_set.insert(MetadataRecorder::Item{i * 100, absl::nullopt,
+                                            static_cast<int64_t>(i * 100)});
   }
 
   MetadataRecorder::ItemArray items_arr;
@@ -309,8 +222,7 @@
 
   MetadataRecorder::ItemArray recorder_items;
   size_t recorder_item_count =
-      MetadataRecorder::MetadataProvider(&recorder, PlatformThread::CurrentId())
-          .GetItems(&recorder_items);
+      MetadataRecorder::MetadataProvider(&recorder).GetItems(&recorder_items);
   EXPECT_EQ(recorder_item_count, MetadataRecorder::MAX_METADATA_COUNT);
   EXPECT_THAT(recorder_items, ::testing::UnorderedElementsAreArray(items_arr));
 }
@@ -320,7 +232,7 @@
   HistogramTester histogram_tester;
 
   for (size_t i = 0; i < MetadataRecorder::MAX_METADATA_COUNT; ++i) {
-    recorder.Set(i * 10, absl::nullopt, absl::nullopt, i * 100);
+    recorder.Set(i * 10, absl::nullopt, i * 100);
   }
 
   EXPECT_THAT(
diff --git a/base/profiler/sample_metadata.cc b/base/profiler/sample_metadata.cc
index 6685a103..070ee6c 100644
--- a/base/profiler/sample_metadata.cc
+++ b/base/profiler/sample_metadata.cc
@@ -7,100 +7,71 @@
 #include "base/metrics/metrics_hashes.h"
 #include "base/no_destructor.h"
 #include "base/profiler/stack_sampling_profiler.h"
-#include "base/threading/thread_local.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace base {
 
-namespace {
-
-absl::optional<PlatformThreadId> GetPlatformThreadIdForScope(
-    SampleMetadataScope scope) {
-  if (scope == SampleMetadataScope::kProcess)
-    return absl::nullopt;
-  return PlatformThread::CurrentId();
-}
-
-}  // namespace
-
-SampleMetadata::SampleMetadata(StringPiece name, SampleMetadataScope scope)
-    : name_hash_(HashMetricName(name)), scope_(scope) {}
+SampleMetadata::SampleMetadata(StringPiece name)
+    : name_hash_(HashMetricName(name)) {}
 
 void SampleMetadata::Set(int64_t value) {
-  GetSampleMetadataRecorder()->Set(name_hash_, absl::nullopt,
-                                   GetPlatformThreadIdForScope(scope_), value);
+  GetSampleMetadataRecorder()->Set(name_hash_, absl::nullopt, value);
 }
 
 void SampleMetadata::Set(int64_t key, int64_t value) {
-  GetSampleMetadataRecorder()->Set(name_hash_, key,
-                                   GetPlatformThreadIdForScope(scope_), value);
+  GetSampleMetadataRecorder()->Set(name_hash_, key, value);
 }
 
 void SampleMetadata::Remove() {
-  GetSampleMetadataRecorder()->Remove(name_hash_, absl::nullopt,
-                                      GetPlatformThreadIdForScope(scope_));
+  GetSampleMetadataRecorder()->Remove(name_hash_, absl::nullopt);
 }
 
 void SampleMetadata::Remove(int64_t key) {
-  GetSampleMetadataRecorder()->Remove(name_hash_, key,
-                                      GetPlatformThreadIdForScope(scope_));
+  GetSampleMetadataRecorder()->Remove(name_hash_, key);
 }
 
-ScopedSampleMetadata::ScopedSampleMetadata(StringPiece name,
-                                           int64_t value,
-                                           SampleMetadataScope scope)
-    : name_hash_(HashMetricName(name)),
-      thread_id_(GetPlatformThreadIdForScope(scope)) {
-  GetSampleMetadataRecorder()->Set(name_hash_, absl::nullopt, thread_id_,
-                                   value);
+ScopedSampleMetadata::ScopedSampleMetadata(StringPiece name, int64_t value)
+    : name_hash_(HashMetricName(name)) {
+  GetSampleMetadataRecorder()->Set(name_hash_, absl::nullopt, value);
 }
 
 ScopedSampleMetadata::ScopedSampleMetadata(StringPiece name,
                                            int64_t key,
-                                           int64_t value,
-                                           SampleMetadataScope scope)
-    : name_hash_(HashMetricName(name)),
-      key_(key),
-      thread_id_(GetPlatformThreadIdForScope(scope)) {
-  GetSampleMetadataRecorder()->Set(name_hash_, key, thread_id_, value);
+                                           int64_t value)
+    : name_hash_(HashMetricName(name)), key_(key) {
+  GetSampleMetadataRecorder()->Set(name_hash_, key, value);
 }
 
 ScopedSampleMetadata::~ScopedSampleMetadata() {
-  GetSampleMetadataRecorder()->Remove(name_hash_, key_, thread_id_);
+  GetSampleMetadataRecorder()->Remove(name_hash_, key_);
 }
 
 // This function is friended by StackSamplingProfiler so must live directly in
 // the base namespace.
-void ApplyMetadataToPastSamplesImpl(
-    TimeTicks period_start,
-    TimeTicks period_end,
-    int64_t name_hash,
-    absl::optional<int64_t> key,
-    int64_t value,
-    absl::optional<PlatformThreadId> thread_id) {
-  StackSamplingProfiler::ApplyMetadataToPastSamples(
-      period_start, period_end, name_hash, key, value, thread_id);
+void ApplyMetadataToPastSamplesImpl(TimeTicks period_start,
+                                    TimeTicks period_end,
+                                    int64_t name_hash,
+                                    absl::optional<int64_t> key,
+                                    int64_t value) {
+  StackSamplingProfiler::ApplyMetadataToPastSamples(period_start, period_end,
+                                                    name_hash, key, value);
 }
 
 void ApplyMetadataToPastSamples(TimeTicks period_start,
                                 TimeTicks period_end,
                                 StringPiece name,
-                                int64_t value,
-                                SampleMetadataScope scope) {
+                                int64_t value) {
   return ApplyMetadataToPastSamplesImpl(
-      period_start, period_end, HashMetricName(name), absl::nullopt, value,
-      GetPlatformThreadIdForScope(scope));
+      period_start, period_end, HashMetricName(name), absl::nullopt, value);
 }
 
 void ApplyMetadataToPastSamples(TimeTicks period_start,
                                 TimeTicks period_end,
                                 StringPiece name,
                                 int64_t key,
-                                int64_t value,
-                                SampleMetadataScope scope) {
+                                int64_t value) {
   return ApplyMetadataToPastSamplesImpl(period_start, period_end,
-                                        HashMetricName(name), key, value,
-                                        GetPlatformThreadIdForScope(scope));
+                                        HashMetricName(name), key, value);
 }
 
 MetadataRecorder* GetSampleMetadataRecorder() {
diff --git a/base/profiler/sample_metadata.h b/base/profiler/sample_metadata.h
index 38788e6..57a6db4 100644
--- a/base/profiler/sample_metadata.h
+++ b/base/profiler/sample_metadata.h
@@ -7,7 +7,6 @@
 
 #include "base/profiler/metadata_recorder.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/platform_thread.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 // -----------------------------------------------------------------------------
@@ -16,8 +15,8 @@
 //
 // Overview:
 // These functions provide a means to control the metadata attached to samples
-// collected by the stack sampling profiler. SampleMetadataScope controls the
-// scope covered by the metadata (thread, process).
+// collected by the stack sampling profiler. Metadata state is shared between
+// all threads within a process.
 //
 // Any samples collected by the sampling profiler will include the active
 // metadata. This enables us to later analyze targeted subsets of samples
@@ -56,20 +55,10 @@
 
 class TimeTicks;
 
-enum class SampleMetadataScope {
-  // All threads in the current process will have the associated metadata
-  // attached to their samples.
-  kProcess,
-  // The metadata will only be attached to samples for the current thread.
-  kThread
-};
-
 class BASE_EXPORT SampleMetadata {
  public:
-  // Set the metadata value associated with |name| to be recorded for |scope|.
-  explicit SampleMetadata(
-      StringPiece name,
-      SampleMetadataScope scope = SampleMetadataScope::kProcess);
+  // Set the metadata value associated with |name|.
+  explicit SampleMetadata(StringPiece name);
 
   SampleMetadata(const SampleMetadata&) = default;
   ~SampleMetadata() = default;
@@ -107,32 +96,21 @@
 
  private:
   const uint64_t name_hash_;
-  // Scope is kept as-is instead of retrieving a PlatformThreadId in case
-  // Set()/Remove() is called on a thread different from where the object was
-  // constructed.
-  const SampleMetadataScope scope_;
 };
 
 class BASE_EXPORT ScopedSampleMetadata {
  public:
-  // Set the metadata value associated with |name| for |scope|.
-  ScopedSampleMetadata(
-      StringPiece name,
-      int64_t value,
-      SampleMetadataScope scope = SampleMetadataScope::kProcess);
+  // Set the metadata value associated with |name|.
+  ScopedSampleMetadata(StringPiece name, int64_t value);
 
-  // Set the metadata value associated with the pair (|name|, |key|) for
-  // |scope|. This constructor allows the metadata to be associated with an
-  // additional user-defined key. One might supply a key based on the frame id,
-  // for example, to distinguish execution in service of scrolling between
-  // different frames. Prefer the previous constructor if no user-defined
-  // metadata is required. Note: values specified for a name and key are stored
-  // separately from values specified with only a name.
-  ScopedSampleMetadata(
-      StringPiece name,
-      int64_t key,
-      int64_t value,
-      SampleMetadataScope scope = SampleMetadataScope::kProcess);
+  // Set the metadata value associated with the pair (|name|, |key|). This
+  // constructor allows the metadata to be associated with an additional
+  // user-defined key. One might supply a key based on the frame id, for
+  // example, to distinguish execution in service of scrolling between different
+  // frames. Prefer the previous constructor if no user-defined metadata is
+  // required. Note: values specified for a name and key are stored separately
+  // from values specified with only a name.
+  ScopedSampleMetadata(StringPiece name, int64_t key, int64_t value);
 
   ScopedSampleMetadata(const ScopedSampleMetadata&) = delete;
   ~ScopedSampleMetadata();
@@ -142,7 +120,6 @@
  private:
   const uint64_t name_hash_;
   absl::optional<int64_t> key_;
-  absl::optional<PlatformThreadId> thread_id_;
 };
 
 // Applies the specified metadata to samples already recorded between
@@ -154,19 +131,15 @@
 // metadata scope (i.e. because the start or end of execution was missed), at
 // the cost of missing execution that are longer than the profiling period, or
 // extend before or after it. |period_end| must be <= TimeTicks::Now().
-BASE_EXPORT void ApplyMetadataToPastSamples(
-    TimeTicks period_start,
-    TimeTicks period_end,
-    StringPiece name,
-    int64_t value,
-    SampleMetadataScope scope = SampleMetadataScope::kProcess);
-BASE_EXPORT void ApplyMetadataToPastSamples(
-    TimeTicks period_start,
-    TimeTicks period_end,
-    StringPiece name,
-    int64_t key,
-    int64_t value,
-    SampleMetadataScope scope = SampleMetadataScope::kProcess);
+BASE_EXPORT void ApplyMetadataToPastSamples(TimeTicks period_start,
+                                            TimeTicks period_end,
+                                            StringPiece name,
+                                            int64_t value);
+BASE_EXPORT void ApplyMetadataToPastSamples(TimeTicks period_start,
+                                            TimeTicks period_end,
+                                            StringPiece name,
+                                            int64_t key,
+                                            int64_t value);
 
 // Returns the process-global metadata recorder instance used for tracking
 // sampling profiler metadata.
diff --git a/base/profiler/sample_metadata_unittest.cc b/base/profiler/sample_metadata_unittest.cc
index 36efb79..7c76ce4e 100644
--- a/base/profiler/sample_metadata_unittest.cc
+++ b/base/profiler/sample_metadata_unittest.cc
@@ -5,87 +5,77 @@
 #include "base/profiler/sample_metadata.h"
 
 #include "base/metrics/metrics_hashes.h"
-#include "base/threading/platform_thread.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
 
 TEST(SampleMetadataTest, ScopedSampleMetadata) {
   MetadataRecorder::ItemArray items;
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 
   {
     ScopedSampleMetadata m("myname", 100);
 
-    ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(
-                      GetSampleMetadataRecorder(), PlatformThread::CurrentId())
-                      .GetItems(&items));
+    ASSERT_EQ(1u,
+              MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
+                  .GetItems(&items));
     EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
     EXPECT_FALSE(items[0].key.has_value());
     EXPECT_EQ(100, items[0].value);
   }
 
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 }
 
 TEST(SampleMetadataTest, ScopedSampleMetadataWithKey) {
   MetadataRecorder::ItemArray items;
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 
   {
     ScopedSampleMetadata m("myname", 10, 100);
 
-    ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(
-                      GetSampleMetadataRecorder(), PlatformThread::CurrentId())
-                      .GetItems(&items));
+    ASSERT_EQ(1u,
+              MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
+                  .GetItems(&items));
     EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
     ASSERT_TRUE(items[0].key.has_value());
     EXPECT_EQ(10, *items[0].key);
     EXPECT_EQ(100, items[0].value);
   }
 
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 }
 
 TEST(SampleMetadataTest, SampleMetadata) {
   MetadataRecorder::ItemArray items;
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 
   SampleMetadata metadata("myname");
   metadata.Set(100);
-  ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
   EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
   EXPECT_FALSE(items[0].key.has_value());
   EXPECT_EQ(100, items[0].value);
 
   metadata.Remove();
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 }
 
 TEST(SampleMetadataTest, SampleMetadataWithKey) {
   MetadataRecorder::ItemArray items;
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 
   SampleMetadata metadata("myname");
   metadata.Set(10, 100);
-  ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
   EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
   ASSERT_TRUE(items[0].key.has_value());
@@ -93,32 +83,7 @@
   EXPECT_EQ(100, items[0].value);
 
   metadata.Remove(10);
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
-                    .GetItems(&items));
-}
-
-TEST(SampleMetadataTest, SampleMetadataWithThreadId) {
-  MetadataRecorder::ItemArray items;
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
-                    .GetItems(&items));
-
-  SampleMetadata metadata("myname", SampleMetadataScope::kThread);
-  metadata.Set(100);
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   kInvalidThreadId)
-                    .GetItems(&items));
-  ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
-                    .GetItems(&items));
-  EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
-  EXPECT_FALSE(items[0].key.has_value());
-  EXPECT_EQ(100, items[0].value);
-
-  metadata.Remove();
-  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
-                                                   PlatformThread::CurrentId())
+  ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder())
                     .GetItems(&items));
 }
 
diff --git a/base/profiler/stack_sampler.h b/base/profiler/stack_sampler.h
index 4dca2e8..54d8ab2 100644
--- a/base/profiler/stack_sampler.h
+++ b/base/profiler/stack_sampler.h
@@ -67,8 +67,7 @@
 
   // Records a set of frames and returns them.
   virtual void RecordStackFrames(StackBuffer* stackbuffer,
-                                 ProfileBuilder* profile_builder,
-                                 PlatformThreadId thread_id) = 0;
+                                 ProfileBuilder* profile_builder) = 0;
 
  protected:
   StackSampler();
diff --git a/base/profiler/stack_sampler_impl.cc b/base/profiler/stack_sampler_impl.cc
index 72bb2d1..4dcdf75 100644
--- a/base/profiler/stack_sampler_impl.cc
+++ b/base/profiler/stack_sampler_impl.cc
@@ -108,8 +108,7 @@
 }
 
 void StackSamplerImpl::RecordStackFrames(StackBuffer* stack_buffer,
-                                         ProfileBuilder* profile_builder,
-                                         PlatformThreadId thread_id) {
+                                         ProfileBuilder* profile_builder) {
   DCHECK(stack_buffer);
 
   if (record_sample_callback_)
@@ -124,7 +123,7 @@
     // Make this scope as small as possible because |metadata_provider| is
     // holding a lock.
     MetadataRecorder::MetadataProvider metadata_provider(
-        GetSampleMetadataRecorder(), thread_id);
+        GetSampleMetadataRecorder());
     StackCopierDelegate delegate(&unwinders_, profile_builder,
                                  &metadata_provider);
     copy_stack_succeeded = stack_copier_->CopyStack(
diff --git a/base/profiler/stack_sampler_impl.h b/base/profiler/stack_sampler_impl.h
index 6bdf89f..7894d98 100644
--- a/base/profiler/stack_sampler_impl.h
+++ b/base/profiler/stack_sampler_impl.h
@@ -39,8 +39,7 @@
   void Initialize() override;
   void AddAuxUnwinder(std::unique_ptr<Unwinder> unwinder) override;
   void RecordStackFrames(StackBuffer* stack_buffer,
-                         ProfileBuilder* profile_builder,
-                         PlatformThreadId thread_id) override;
+                         ProfileBuilder* profile_builder) override;
 
   // Exposes the internal function for unit testing.
   static std::vector<Frame> WalkStackForTesting(
diff --git a/base/profiler/stack_sampler_impl_unittest.cc b/base/profiler/stack_sampler_impl_unittest.cc
index ad8bae3..19c83965 100644
--- a/base/profiler/stack_sampler_impl_unittest.cc
+++ b/base/profiler/stack_sampler_impl_unittest.cc
@@ -294,8 +294,7 @@
   std::unique_ptr<StackBuffer> stack_buffer =
       std::make_unique<StackBuffer>(stack.size() * sizeof(uintptr_t));
   TestProfileBuilder profile_builder(&module_cache);
-  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder,
-                                       PlatformThread::CurrentId());
+  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder);
 
   EXPECT_EQ(stack, stack_copy);
 }
@@ -317,8 +316,7 @@
   std::unique_ptr<StackBuffer> stack_buffer =
       std::make_unique<StackBuffer>(stack.size() * sizeof(uintptr_t));
   TestProfileBuilder profile_builder(&module_cache);
-  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder,
-                                       PlatformThread::CurrentId());
+  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder);
 
   EXPECT_EQ(timestamp, profile_builder.last_timestamp());
 }
@@ -335,8 +333,7 @@
 
   stack_sampler_impl.Initialize();
 
-  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder,
-                                       PlatformThread::CurrentId());
+  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder);
 
   EXPECT_TRUE(unwinder->on_stack_capture_was_invoked());
   EXPECT_TRUE(unwinder->update_modules_was_invoked());
@@ -357,8 +354,7 @@
   CallRecordingUnwinder* aux_unwinder = owned_aux_unwinder.get();
   stack_sampler_impl.AddAuxUnwinder(std::move(owned_aux_unwinder));
 
-  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder,
-                                       PlatformThread::CurrentId());
+  stack_sampler_impl.RecordStackFrames(stack_buffer.get(), &profile_builder);
 
   EXPECT_TRUE(aux_unwinder->on_stack_capture_was_invoked());
   EXPECT_TRUE(aux_unwinder->update_modules_was_invoked());
diff --git a/base/profiler/stack_sampling_profiler.cc b/base/profiler/stack_sampling_profiler.cc
index 2eec075..dc3a13d 100644
--- a/base/profiler/stack_sampling_profiler.cc
+++ b/base/profiler/stack_sampling_profiler.cc
@@ -120,13 +120,11 @@
   };
 
   struct CollectionContext {
-    CollectionContext(PlatformThreadId thread_id,
-                      const SamplingParams& params,
+    CollectionContext(const SamplingParams& params,
                       WaitableEvent* finished,
                       std::unique_ptr<StackSampler> sampler,
                       std::unique_ptr<ProfileBuilder> profile_builder)
         : collection_id(next_collection_id.GetNext()),
-          thread_id(thread_id),
           params(params),
           finished(finished),
           profile_builder(std::move(profile_builder)),
@@ -136,7 +134,6 @@
     // An identifier for this collection, used to uniquely identify the
     // collection to outside interests.
     const int collection_id;
-    const PlatformThreadId thread_id;  // Thread id of the sampled thread.
 
     const SamplingParams params;    // Information about how to sample.
     const raw_ptr<WaitableEvent>
@@ -181,8 +178,7 @@
                                   base::TimeTicks period_end,
                                   int64_t name_hash,
                                   absl::optional<int64_t> key,
-                                  int64_t value,
-                                  absl::optional<PlatformThreadId> thread_id);
+                                  int64_t value);
 
   // Removes an active collection based on its collection id, forcing it to run
   // its callback if any data has been collected. This can be called externally
@@ -235,13 +231,11 @@
   void AddCollectionTask(std::unique_ptr<CollectionContext> collection);
   void AddAuxUnwinderTask(int collection_id,
                           std::unique_ptr<Unwinder> unwinder);
-  void ApplyMetadataToPastSamplesTask(
-      base::TimeTicks period_start,
-      base::TimeTicks period_end,
-      int64_t name_hash,
-      absl::optional<int64_t> key,
-      int64_t value,
-      absl::optional<PlatformThreadId> thread_id);
+  void ApplyMetadataToPastSamplesTask(base::TimeTicks period_start,
+                                      base::TimeTicks period_end,
+                                      int64_t name_hash,
+                                      absl::optional<int64_t> key,
+                                      int64_t value);
   void RemoveCollectionTask(int collection_id);
   void RecordSampleTask(int collection_id);
   void ShutdownTask(int add_events);
@@ -408,8 +402,7 @@
     base::TimeTicks period_end,
     int64_t name_hash,
     absl::optional<int64_t> key,
-    int64_t value,
-    absl::optional<PlatformThreadId> thread_id) {
+    int64_t value) {
   ThreadExecutionState state;
   scoped_refptr<SingleThreadTaskRunner> task_runner = GetTaskRunner(&state);
   if (state != RUNNING)
@@ -418,7 +411,7 @@
   task_runner->PostTask(
       FROM_HERE, BindOnce(&SamplingThread::ApplyMetadataToPastSamplesTask,
                           Unretained(this), period_start, period_end, name_hash,
-                          key, value, thread_id));
+                          key, value));
 }
 
 void StackSamplingProfiler::SamplingThread::Remove(int collection_id) {
@@ -577,13 +570,10 @@
     base::TimeTicks period_end,
     int64_t name_hash,
     absl::optional<int64_t> key,
-    int64_t value,
-    absl::optional<PlatformThreadId> thread_id) {
+    int64_t value) {
   DCHECK_EQ(GetThreadId(), PlatformThread::CurrentId());
-  MetadataRecorder::Item item(name_hash, key, thread_id, value);
+  MetadataRecorder::Item item(name_hash, key, value);
   for (auto& id_collection_pair : active_collections_) {
-    if (thread_id && id_collection_pair.second->thread_id != thread_id)
-      continue;
     id_collection_pair.second->profile_builder->ApplyMetadataRetrospectively(
         period_start, period_end, item);
   }
@@ -652,8 +642,7 @@
 
   // Record a single sample.
   collection->sampler->RecordStackFrames(stack_buffer_.get(),
-                                         collection->profile_builder.get(),
-                                         collection->thread_id);
+                                         collection->profile_builder.get());
 
   // Schedule the next sample recording if there is one.
   if (++collection->sample_count < collection->params.samples_per_profile) {
@@ -789,10 +778,7 @@
     UnwindersFactory core_unwinders_factory,
     RepeatingClosure record_sample_callback,
     StackSamplerTestDelegate* test_delegate)
-    : StackSamplingProfiler(thread_token,
-                            params,
-                            std::move(profile_builder),
-                            std::unique_ptr<StackSampler>()) {
+    : StackSamplingProfiler(params, std::move(profile_builder), nullptr) {
   sampler_ =
       StackSampler::Create(thread_token, profile_builder_->GetModuleCache(),
                            std::move(core_unwinders_factory),
@@ -800,12 +786,10 @@
 }
 
 StackSamplingProfiler::StackSamplingProfiler(
-    SamplingProfilerThreadToken thread_token,
     const SamplingParams& params,
     std::unique_ptr<ProfileBuilder> profile_builder,
     std::unique_ptr<StackSampler> sampler)
-    : thread_token_(thread_token),
-      params_(params),
+    : params_(params),
       profile_builder_(std::move(profile_builder)),
       sampler_(std::move(sampler)),
       // The event starts "signaled" so code knows it's safe to start thread
@@ -868,7 +852,7 @@
   DCHECK_EQ(kNullProfilerId, profiler_id_);
   profiler_id_ = SamplingThread::GetInstance()->Add(
       std::make_unique<SamplingThread::CollectionContext>(
-          thread_token_.id, params_, &profiling_inactive_, std::move(sampler_),
+          params_, &profiling_inactive_, std::move(sampler_),
           std::move(profile_builder_)));
   DCHECK_NE(kNullProfilerId, profiler_id_);
 
@@ -903,10 +887,9 @@
     base::TimeTicks period_end,
     int64_t name_hash,
     absl::optional<int64_t> key,
-    int64_t value,
-    absl::optional<PlatformThreadId> thread_id) {
+    int64_t value) {
   SamplingThread::GetInstance()->ApplyMetadataToPastSamples(
-      period_start, period_end, name_hash, key, value, thread_id);
+      period_start, period_end, name_hash, key, value);
 }
 
 }  // namespace base
diff --git a/base/profiler/stack_sampling_profiler.h b/base/profiler/stack_sampling_profiler.h
index 2435b40..c36deb5 100644
--- a/base/profiler/stack_sampling_profiler.h
+++ b/base/profiler/stack_sampling_profiler.h
@@ -111,8 +111,7 @@
 
   // Same as above function, with custom |sampler| implementation. The sampler
   // on Android is not implemented in base.
-  StackSamplingProfiler(SamplingProfilerThreadToken thread_token,
-                        const SamplingParams& params,
+  StackSamplingProfiler(const SamplingParams& params,
                         std::unique_ptr<ProfileBuilder> profile_builder,
                         std::unique_ptr<StackSampler> sampler);
 
@@ -183,23 +182,19 @@
 
   // Friend the global function from sample_metadata.cc so that it can call into
   // the function below.
-  friend void ApplyMetadataToPastSamplesImpl(
-      TimeTicks period_start,
-      TimeTicks period_end,
-      int64_t name_hash,
-      absl::optional<int64_t> key,
-      int64_t value,
-      absl::optional<PlatformThreadId> thread_id);
+  friend void ApplyMetadataToPastSamplesImpl(TimeTicks period_start,
+                                             TimeTicks period_end,
+                                             int64_t name_hash,
+                                             absl::optional<int64_t> key,
+                                             int64_t value);
 
   // Apply metadata to already recorded samples. See the
   // ApplyMetadataToPastSamples() docs in sample_metadata.h.
-  static void ApplyMetadataToPastSamples(
-      TimeTicks period_start,
-      TimeTicks period_end,
-      int64_t name_hash,
-      absl::optional<int64_t> key,
-      int64_t value,
-      absl::optional<PlatformThreadId> thread_id);
+  static void ApplyMetadataToPastSamples(TimeTicks period_start,
+                                         TimeTicks period_end,
+                                         int64_t name_hash,
+                                         absl::optional<int64_t> key,
+                                         int64_t value);
 
   // The thread whose stack will be sampled.
   SamplingProfilerThreadToken thread_token_;
diff --git a/base/profiler/stack_sampling_profiler_test_util.cc b/base/profiler/stack_sampling_profiler_test_util.cc
index b00a2ab..975ee98 100644
--- a/base/profiler/stack_sampling_profiler_test_util.cc
+++ b/base/profiler/stack_sampling_profiler_test_util.cc
@@ -161,14 +161,6 @@
 
 TargetThread::~TargetThread() = default;
 
-void TargetThread::Start() {
-  EXPECT_TRUE(PlatformThread::Create(0, this, &target_thread_handle_));
-}
-
-void TargetThread::Join() {
-  PlatformThread::Join(target_thread_handle_);
-}
-
 void TargetThread::ThreadMain() {
   thread_token_ = GetSamplingProfilerCurrentThreadToken();
   std::move(to_run_).Run();
@@ -289,13 +281,16 @@
   TargetThread target_thread(
       BindLambdaForTesting([&]() { scenario->Execute(&events); }));
 
-  target_thread.Start();
+  PlatformThreadHandle target_thread_handle;
+  EXPECT_TRUE(PlatformThread::Create(0, &target_thread, &target_thread_handle));
+
   events.ready_for_sample.Wait();
 
   std::move(profile_callback).Run(target_thread.thread_token());
 
   events.sample_finished.Signal();
-  target_thread.Join();
+
+  PlatformThread::Join(target_thread_handle);
 }
 
 std::vector<Frame> SampleScenario(UnwindScenario* scenario,
diff --git a/base/profiler/stack_sampling_profiler_test_util.h b/base/profiler/stack_sampling_profiler_test_util.h
index 057921ce..c23200ec 100644
--- a/base/profiler/stack_sampling_profiler_test_util.h
+++ b/base/profiler/stack_sampling_profiler_test_util.h
@@ -26,16 +26,13 @@
 // A thread to target for profiling that will run the supplied closure.
 class TargetThread : public PlatformThread::Delegate {
  public:
-  explicit TargetThread(OnceClosure to_run);
+  TargetThread(OnceClosure to_run);
 
   TargetThread(const TargetThread&) = delete;
   TargetThread& operator=(const TargetThread&) = delete;
 
   ~TargetThread() override;
 
-  void Start();
-  void Join();
-
   // PlatformThread::Delegate:
   void ThreadMain() override;
 
@@ -44,7 +41,6 @@
  private:
   SamplingProfilerThreadToken thread_token_ = {0};
   OnceClosure to_run_;
-  PlatformThreadHandle target_thread_handle_;
 };
 
 // Addresses near the start and end of a function.
diff --git a/base/profiler/stack_sampling_profiler_unittest.cc b/base/profiler/stack_sampling_profiler_unittest.cc
index e85982b..7e5a145 100644
--- a/base/profiler/stack_sampling_profiler_unittest.cc
+++ b/base/profiler/stack_sampling_profiler_unittest.cc
@@ -310,7 +310,10 @@
   UnwindScenario::SampleEvents events;
   TargetThread target_thread(
       BindLambdaForTesting([&]() { scenario.Execute(&events); }));
-  target_thread.Start();
+
+  PlatformThreadHandle target_thread_handle;
+  EXPECT_TRUE(PlatformThread::Create(0, &target_thread, &target_thread_handle));
+
   events.ready_for_sample.Wait();
 
   WaitableEvent sampling_thread_completed(
@@ -344,7 +347,7 @@
   // Cause the target thread to finish, so that it's no longer executing code in
   // the library we're about to unload.
   events.sample_finished.Signal();
-  target_thread.Join();
+  PlatformThread::Join(target_thread_handle);
 
   // Unload the library now that it's not being used.
   if (wait_until_unloaded)
@@ -1130,14 +1133,19 @@
   UnwindScenario::SampleEvents events1;
   TargetThread target_thread1(
       BindLambdaForTesting([&]() { scenario1.Execute(&events1); }));
-  target_thread1.Start();
+  PlatformThreadHandle target_thread_handle1;
+  EXPECT_TRUE(
+      PlatformThread::Create(0, &target_thread1, &target_thread_handle1));
   events1.ready_for_sample.Wait();
 
   UnwindScenario scenario2(BindRepeating(&CallWithPlainFunction));
   UnwindScenario::SampleEvents events2;
   TargetThread target_thread2(
       BindLambdaForTesting([&]() { scenario2.Execute(&events2); }));
-  target_thread2.Start();
+
+  PlatformThreadHandle target_thread_handle2;
+  EXPECT_TRUE(
+      PlatformThread::Create(0, &target_thread2, &target_thread_handle2));
   events2.ready_for_sample.Wait();
 
   // Providing an initial delay makes it more likely that both will be
@@ -1193,8 +1201,8 @@
 
   events1.sample_finished.Signal();
   events2.sample_finished.Signal();
-  target_thread1.Join();
-  target_thread2.Join();
+  PlatformThread::Join(target_thread_handle1);
+  PlatformThread::Join(target_thread_handle2);
 }
 
 // A simple thread that runs a profiler on another thread.
@@ -1515,95 +1523,4 @@
   EXPECT_EQ(11, metadata2.item.value);
 }
 
-PROFILER_TEST_F(
-    StackSamplingProfilerTest,
-    ApplyMetadataToPastSamples_PassedToProfileBuilder_MultipleCollections) {
-  SamplingParams params;
-  params.sampling_interval = Milliseconds(10);
-  // 10,000 samples ensures the profiler continues running until manually
-  // stopped, after applying metadata.
-  params.samples_per_profile = 10000;
-
-  WaitableEvent profiler1_started;
-  WaitableEvent profiler2_started;
-  WaitableEvent profiler1_metadata_applied;
-  WaitableEvent profiler2_metadata_applied;
-
-  Profile profile1;
-  WaitableEvent sampling_completed1;
-  TargetThread target_thread1(BindLambdaForTesting([&]() {
-    StackSamplingProfiler profiler1(
-        target_thread1.thread_token(), params,
-        std::make_unique<TestProfileBuilder>(
-            module_cache(), BindLambdaForTesting([&](Profile result_profile) {
-              profile1 = std::move(result_profile);
-              sampling_completed1.Signal();
-            })),
-        CreateCoreUnwindersFactoryForTesting(module_cache()),
-        RepeatingClosure());
-    profiler1.Start();
-    profiler1_started.Signal();
-    profiler2_started.Wait();
-
-    // Record metadata on past samples only for this thread. The time range
-    // shouldn't affect the outcome, it should always be passed to the
-    // ProfileBuilder.
-    ApplyMetadataToPastSamples(TimeTicks(), TimeTicks::Now(), "TestMetadata1",
-                               10, 10, SampleMetadataScope::kThread);
-
-    profiler1_metadata_applied.Signal();
-    profiler2_metadata_applied.Wait();
-    profiler1.Stop();
-  }));
-  target_thread1.Start();
-
-  Profile profile2;
-  WaitableEvent sampling_completed2;
-  TargetThread target_thread2(BindLambdaForTesting([&]() {
-    StackSamplingProfiler profiler2(
-        target_thread2.thread_token(), params,
-        std::make_unique<TestProfileBuilder>(
-            module_cache(), BindLambdaForTesting([&](Profile result_profile) {
-              profile2 = std::move(result_profile);
-              sampling_completed2.Signal();
-            })),
-        CreateCoreUnwindersFactoryForTesting(module_cache()),
-        RepeatingClosure());
-    profiler2.Start();
-    profiler2_started.Signal();
-    profiler1_started.Wait();
-
-    // Record metadata on past samples only for this thread.
-    ApplyMetadataToPastSamples(TimeTicks(), TimeTicks::Now(), "TestMetadata2",
-                               20, 20, SampleMetadataScope::kThread);
-
-    profiler2_metadata_applied.Signal();
-    profiler1_metadata_applied.Wait();
-    profiler2.Stop();
-  }));
-  target_thread2.Start();
-
-  // Wait for the profile to be captured before checking expectations.
-  sampling_completed1.Wait();
-  sampling_completed2.Wait();
-
-  ASSERT_EQ(1u, profile1.retrospective_metadata.size());
-  ASSERT_EQ(1u, profile2.retrospective_metadata.size());
-
-  {
-    const RetrospectiveMetadata& metadata1 = profile1.retrospective_metadata[0];
-    EXPECT_EQ(HashMetricName("TestMetadata1"), metadata1.item.name_hash);
-    ASSERT_TRUE(metadata1.item.key.has_value());
-    EXPECT_EQ(10, *metadata1.item.key);
-    EXPECT_EQ(10, metadata1.item.value);
-  }
-  {
-    const RetrospectiveMetadata& metadata2 = profile2.retrospective_metadata[0];
-    EXPECT_EQ(HashMetricName("TestMetadata2"), metadata2.item.name_hash);
-    ASSERT_TRUE(metadata2.item.key.has_value());
-    EXPECT_EQ(20, *metadata2.item.key);
-    EXPECT_EQ(20, metadata2.item.value);
-  }
-}
-
 }  // namespace base
diff --git a/base/task/common/scoped_defer_task_posting.cc b/base/task/common/scoped_defer_task_posting.cc
index 1b023de..bb09ac1 100644
--- a/base/task/common/scoped_defer_task_posting.cc
+++ b/base/task/common/scoped_defer_task_posting.cc
@@ -11,6 +11,8 @@
 
 namespace {
 
+// Holds a thread-local pointer to the current scope or null when no
+// scope is active.
 ThreadLocalPointer<ScopedDeferTaskPosting>& GetScopedDeferTaskPostingTLS() {
   static NoDestructor<ThreadLocalPointer<ScopedDeferTaskPosting>> tls;
   return *tls;
diff --git a/base/task/deferred_sequenced_task_runner.cc b/base/task/deferred_sequenced_task_runner.cc
index 1c03161b..fb48b187 100644
--- a/base/task/deferred_sequenced_task_runner.cc
+++ b/base/task/deferred_sequenced_task_runner.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/task/deferred_sequenced_task_runner.h"
+#include "base/task/common/scoped_defer_task_posting.h"
 
 #include <utility>
 
@@ -40,6 +41,10 @@
 bool DeferredSequencedTaskRunner::PostDelayedTask(const Location& from_here,
                                                   OnceClosure task,
                                                   TimeDelta delay) {
+  // Do not process new PostTasks while we are handling a PostTask (tracing
+  // has to do this) as it can lead to a deadlock and defer it instead.
+  ScopedDeferTaskPosting disallow_task_posting;
+
   AutoLock lock(lock_);
   if (started_) {
     DCHECK(deferred_tasks_queue_.empty());
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index 4cce771..6470d87e 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -199,7 +199,7 @@
 }  // namespace content
 namespace cronet {
 class CronetPrefsManager;
-class CronetURLRequestContext;
+class CronetContext;
 }  // namespace cronet
 namespace crosapi {
 class LacrosThreadPriorityDelegate;
@@ -465,7 +465,7 @@
 #endif
   friend class content::WebContentsViewMac;
   friend class cronet::CronetPrefsManager;
-  friend class cronet::CronetURLRequestContext;
+  friend class cronet::CronetContext;
   friend class crosapi::LacrosThreadPriorityDelegate;
   friend class ios_web_view::WebViewBrowserState;
   friend class media::FileVideoCaptureDeviceFactory;
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 7b9ce01..bae94a39 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1546,6 +1546,13 @@
       if (enable_wmax_tokens) {
         cflags += [ "-Wmax-tokens" ]
       }
+
+      if (llvm_force_head_revision) {
+        cflags += [
+          # TODO(https://crbug.com/1300731) Clean up and enable.
+          "-Wno-unqualified-std-cast-call",
+        ]
+      }
     }
   }
 }
diff --git a/cc/input/main_thread_scrolling_reason.h b/cc/input/main_thread_scrolling_reason.h
index 38444ca..55522c655 100644
--- a/cc/input/main_thread_scrolling_reason.h
+++ b/cc/input/main_thread_scrolling_reason.h
@@ -33,6 +33,7 @@
     // Non-transient scrolling reasons. These are set on the ScrollNode.
     kHasBackgroundAttachmentFixedObjects = 1 << 1,
     kThreadedScrollingDisabled = 1 << 3,
+    kPopupNoThreadedInput = 1 << 26,
 
     // Style-related scrolling on main reasons. Subpixel (LCD) text rendering
     // requires blending glyphs with the background at a specific screen
@@ -59,7 +60,7 @@
     kWheelEventHandlerRegion = 1 << 24,
     kTouchEventHandlerRegion = 1 << 25,
 
-    kMainThreadScrollingReasonLast = 25,
+    kMainThreadScrollingReasonLast = 26,
   };
 
   static const uint32_t kNonCompositedReasons =
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index e5d3e35..996f0cd 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -259,8 +259,7 @@
       deps += [
         # On Linux, link the dependencies (libraries) that make up actual
         # Chromium functionality directly into the executable.
-        ":browser_dependencies",
-        ":child_dependencies",
+        ":dependencies",
 
         # For configuring PartitionAlloc
         "//base/allocator:buildflags",
@@ -370,9 +369,9 @@
     output_name = "chrome"
 
     deps = [
-      ":browser_dependencies",
       ":chrome_dll_manifest",
       ":chrome_dll_version",
+      ":dependencies",
       "//base/allocator:buildflags",
       "//chrome/app:chrome_dll_resources",
       "//chrome/app:command_ids",
@@ -386,7 +385,9 @@
       "//components/crash/core/app",
       "//components/policy:generated",
       "//content/app/resources",
+      "//content/public/app",
       "//crypto",
+      "//headless:headless_renderer",
       "//headless:headless_shell_browser_lib",
       "//net:net_resources",
       "//ppapi/buildflags",
@@ -401,12 +402,6 @@
     if (use_aura) {
       deps += [ "//ui/compositor" ]
     }
-
-    deps += [
-      ":child_dependencies",
-      "//content/public/app",
-      "//headless:headless_renderer",
-    ]
   }
 
   copy("copy_first_run") {
@@ -1182,8 +1177,7 @@
     ]
 
     deps = [
-      ":browser_dependencies",
-      ":child_dependencies",
+      ":dependencies",
       "//base/allocator:buildflags",
       "//build:chromeos_buildflags",
       "//chrome/app:command_ids",
@@ -1449,21 +1443,33 @@
   }
 }
 
-group("browser_dependencies") {
+group("dependencies") {
   public_deps = [
     "//build:branding_buildflags",
     "//build:chromeos_buildflags",
     "//chrome/browser",
     "//chrome/browser/policy:path_parser",
+    "//chrome/child",
     "//chrome/common",
+    "//chrome/gpu",
+    "//chrome/renderer",
+    "//chrome/utility",
     "//components/gwp_asan/buildflags",
     "//components/heap_profiling/in_process",
     "//components/power_scheduler",
+    "//components/services/heap_profiling",
     "//components/startup_metric_utils/browser",
     "//components/sync",
     "//components/upload_list:upload_list",
+    "//content/public/child",
+    "//pdf",
+    "//pdf:pdf_ppapi",
     "//services/tracing/public/cpp",
+    "//third_party/blink/public:blink_devtools_frontend_resources",
+    "//third_party/blink/public:blink_devtools_inspector_resources",
+    "//v8:v8_headers",
   ]
+
   if (enable_plugins) {
     public_deps += [ "//ppapi/host" ]
   }
@@ -1477,7 +1483,10 @@
   }
 
   if (enable_nacl) {
-    public_deps += [ "//components/nacl/browser" ]
+    public_deps += [
+      "//components/nacl/browser",
+      "//components/nacl/renderer/plugin:nacl_trusted_plugin",
+    ]
   }
 
   if (is_chromeos_ash || is_chromeos_lacros) {
@@ -1503,62 +1512,6 @@
   if (!is_fuchsia) {
     public_deps += [ "//components/crash/core/app" ]
   }
-
-  if (!is_component_build) {
-    assert_no_deps = [
-      # Blink should not be used in the browser process. In component build this
-      # is OK because all of content is linked into one library. Note that the
-      # blink_headers target is OK, so we can't do a wildcard for all blink
-      # targets.
-      "//third_party/blink/public:blink",
-    ]
-
-    if (is_win) {
-      assert_no_deps += [
-        # V8/Gin should not be used in the browser DLL on Windows.
-        "//gin",
-        "//v8",
-
-        # Ditto for PDFium.
-        "//third_party/pdfium",
-      ]
-    }
-  }
-}
-
-group("child_dependencies") {
-  public_deps = [
-    "//chrome/child",
-    "//chrome/common",
-    "//chrome/gpu",
-    "//chrome/renderer",
-    "//chrome/utility",
-    "//components/gwp_asan/buildflags",
-    "//components/services/heap_profiling",
-    "//content/public/child",
-    "//pdf",
-    "//pdf:pdf_ppapi",
-    "//services/tracing/public/cpp",
-    "//third_party/blink/public:blink_devtools_frontend_resources",
-    "//third_party/blink/public:blink_devtools_inspector_resources",
-    "//v8:v8_headers",
-  ]
-
-  if (enable_nacl) {
-    public_deps += [ "//components/nacl/renderer/plugin:nacl_trusted_plugin" ]
-  }
-
-  if (enable_gwp_asan) {
-    public_deps += [ "//components/gwp_asan/client" ]
-  }
-
-  if (!is_component_build) {
-    assert_no_deps = [
-      # Browser code should not be used in child processes. In component builds,
-      # this is OK because all of content is linked into one library.
-      "//content/browser",
-    ]
-  }
 }
 
 if (is_win) {
@@ -1770,8 +1723,7 @@
     ]
 
     deps = [
-      ":browser_dependencies",
-      ":child_dependencies",
+      ":dependencies",
       "//chrome/browser/ui",
       "//chrome/child",
       "//chrome/common",
diff --git a/chrome/VERSION b/chrome/VERSION
index 86d3c5b4..6f1d665 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=101
 MINOR=0
-BUILD=4910
+BUILD=4911
 PATCH=0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/share/OWNERS
index cf60ca9..4d6918b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/OWNERS
@@ -2,3 +2,4 @@
 
 per-file ShareDelegate*=file://components/send_tab_to_self/OWNERS
 per-file ShareButtonController*=file://components/send_tab_to_self/OWNERS
+per-file ShareRegistrationCoordinator*=file://components/send_tab_to_self/OWNERS
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 7340dab..a9236e4e 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-100.0.4896.12_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-100.0.4896.13_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/webapk/strings/translations/android_webapk_strings_es.xtb b/chrome/android/webapk/strings/translations/android_webapk_strings_es.xtb
index 482dbfe..02a9b42 100644
--- a/chrome/android/webapk/strings/translations/android_webapk_strings_es.xtb
+++ b/chrome/android/webapk/strings/translations/android_webapk_strings_es.xtb
@@ -5,7 +5,7 @@
 <translation id="1700971771753530690"><ph name="APP_NAME" /> requiere la siguiente aplicación:</translation>
 <translation id="2697679025356221813"><ph name="APP_NAME" /> requiere un navegador web</translation>
 <translation id="3858759029325727987">Selecciona un navegador compatible con esta aplicación:</translation>
-<translation id="4165986682804962316">Configuración de sitios</translation>
+<translation id="4165986682804962316">Configuración del sitio</translation>
 <translation id="6377677440246641805"><ph name="BROWSER_NAME" />\nNo compatible</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="8252328707312954493">CERRAR</translation>
diff --git a/chrome/app/app_management_strings.grdp b/chrome/app/app_management_strings.grdp
index 3354966..79b5e425 100644
--- a/chrome/app/app_management_strings.grdp
+++ b/chrome/app/app_management_strings.grdp
@@ -52,6 +52,9 @@
   <message name="IDS_APP_MANAGEMENT_RUN_ON_OS_LOGIN" desc="Label for toggling running on OS Login mode.">
     Start app when you sign in
   </message>
+  <message name="IDS_APP_MANAGEMENT_FILE_HANDLING_HEADER" desc="Main text for toggling running on OS Login mode.">
+    Suggest app when opening files on your computer
+  </message>
   <message name="IDS_APP_MANAGEMENT_POLICY_APP_POLICY_STRING" desc="Tooltip label explaining that an app cannot be uninstalled as it has been installed by an adminstrator.">
     This app has been installed by your administrator.
   </message>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index 3bba272..36784615 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -15,6 +15,9 @@
 <translation id="1553461853655228091">周囲の 3D マップを作成するには、Chromium にカメラの使用を許可する必要があります</translation>
 <translation id="1607715478322902680">{COUNT,plural, =0{管理者が、アップデートを適用するために Chromium を再起動するよう求めています}=1{管理者が、アップデートを適用するために Chromium を再起動するよう求めています。シークレット ウィンドウは、再起動後は自動的には開きません。}other{管理者が、アップデートを適用するために Chromium を再起動するよう求めています。現在開いている # 個のシークレット ウィンドウは、再起動後は自動的には開きません。}}</translation>
 <translation id="1625909126243026060">Chromium のプライバシーとセキュリティに関する重要な設定を確認します</translation>
+<translation id="1632539827495546968">このアカウントを 1 回だけ使用する場合は、Chromium ブラウザの<ph name="GUEST_LINK_BEGIN" />ゲストモード<ph name="GUEST_LINK_END" />を使用できます。他のユーザーのアカウントを追加する場合は、<ph name="DEVICE_TYPE" /> に<ph name="LINK_BEGIN" />新しいユーザーを追加<ph name="LINK_END" />します。
+
+これまでにウェブサイトやアプリに許可した権限がこのアカウントに適用される可能性があります。Google アカウントは [<ph name="SETTINGS_LINK_BEGIN" />設定<ph name="SETTINGS_LINK_END" />] で管理できます。</translation>
 <translation id="1708666629004767631">Chromium がさらに安全になりました。最新バージョンをぜひお試しください。</translation>
 <translation id="1774152462503052664">Chromium をバックグラウンドで実行する</translation>
 <translation id="1779356040007214683">Chromium をより安全にご利用いただくため、<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />で提供していない一部の拡張機能を無効にしました。これらは知らないうちに追加された可能性があります。</translation>
@@ -23,6 +26,9 @@
 <translation id="1881322772814446296">現在、管理対象アカウントでログインしており、あなたの Chromium プロフィールを管理者が制御できる状態になっています。あなたの Chromium データ(アプリ、ブックマーク、履歴、パスワードなどの設定)は永続的に <ph name="USER_NAME" /> に関連付けられます。このデータは Google アカウントのダッシュボードを介して削除できますが、このデータを別のアカウントに関連付けることはできなくなります。新しいプロフィールを作成して、既存の Chromium データを別に保管することができます。<ph name="LEARN_MORE" /></translation>
 <translation id="1911763535808217981">この設定を無効にすると、Chromium にログインすることなく Gmail などの Google サイトにログインできます</translation>
 <translation id="1929939181775079593">Chromium が応答しません。今すぐ再起動しますか?</translation>
+<translation id="1940680973325097484">このアカウントを 1 回だけ使用する場合は、Chromium ブラウザのゲストモードを使用できます。他のユーザーのアカウントを追加する場合は、<ph name="DEVICE_TYPE" /> に<ph name="LINK_BEGIN" />新しいユーザーを追加<ph name="LINK_END" />します。
+
+これまでにウェブサイトやアプリに許可した権限がこのアカウントに適用される可能性があります。Google アカウントは [<ph name="SETTINGS_LINK_BEGIN" />設定<ph name="SETTINGS_LINK_END" />] で管理できます。</translation>
 <translation id="1966382378801805537">Chromium では既定のブラウザを判定または設定できません</translation>
 <translation id="1981611865800294956">再起動して Chromium OS を更新(&amp;C)</translation>
 <translation id="2008474315282236005">このデバイスから 1 件の項目を削除します。後でデータを取得するには、<ph name="USER_EMAIL" /> として Chromium にログインしてください。</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 62fda1b..4e0964c 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1252,6 +1252,7 @@
 <translation id="2203088913459920044">Naam kan letters, syfers en spesiale karakters gebruik</translation>
 <translation id="220321590587754225">Kon nie koppel nie. Probeer weer.</translation>
 <translation id="2204034823255629767">Lees en verander enigiets wat jy invoer</translation>
+<translation id="2207115382329026341">Aktiveer programstrominginstellings van jou foon af.</translation>
 <translation id="220858061631308971">Voer hierdie PIN-kode op "<ph name="DEVICE_NAME" />" in.</translation>
 <translation id="2210462644007531147">Kon nie installering voltooi nie</translation>
 <translation id="2212565012507486665">Laat webkoekies toe</translation>
@@ -1445,6 +1446,7 @@
 <translation id="2367972762794486313">Wys programme</translation>
 <translation id="236939127352773362">Wanneer toestelle in die omtrek deel</translation>
 <translation id="2371076942591664043">Maak oop wanneer klaar is</translation>
+<translation id="237307274687369010">Kon nie <ph name="APP_NAME" /> bekendstel nie</translation>
 <translation id="2373666622366160481">Pas op papier</translation>
 <translation id="2375406435414127095">Koppel aan jou foon</translation>
 <translation id="2377588536920405462">Jy kan ligging afskakel deur die hoofligginginstelling op jou toestel af te skakel. Jy kan ook die gebruik van Wi-Fi, selnetwerke en sensors vir ligging in ligginginstellings afskakel.</translation>
@@ -2279,6 +2281,7 @@
 <translation id="3225319735946384299">Kode-ondertekening</translation>
 <translation id="3226487301970807183">Wissel linksbelynde kantpaneel</translation>
 <translation id="3227137524299004712">Mikrofoon</translation>
+<translation id="3232754137068452469">Webprogram</translation>
 <translation id="3233271424239923319">Rugsteun- Linux-programme en lêers</translation>
 <translation id="3238192140106069382">Koppel en verifieer tans</translation>
 <translation id="3239373508713281971">Tydlimiet vir <ph name="APP_NAME" /> is verwyder</translation>
@@ -2317,6 +2320,7 @@
 <translation id="3277691515294482687">Rugsteun my programme en lêers in My Lêers-vouer voordat Linux opgedateer word.</translation>
 <translation id="3278001907972365362">Jou Google-rekening(e) het aandag nodig</translation>
 <translation id="3278800075417428224">Bestuur tale in CloudReady 2.0-instellings</translation>
+<translation id="3278928434075969895">Hierdie profiel gebruik Chrome-bedryfstelsel se instaanbedienerinstellings.</translation>
 <translation id="3279092821516760512">Geselekteerde kontakte kan met jou deel wanneer hulle in die omtrek is. Oordragte sal nie begin voordat jy aanvaar het nie.</translation>
 <translation id="3279230909244266691">Hierdie proses kan 'n paar minute neem. Begin tans die virtuele masjien.</translation>
 <translation id="3280237271814976245">Stoor as …</translation>
@@ -4890,6 +4894,7 @@
 <translation id="5909379458939060601">Vee hierdie profiel en blaaierdata uit?</translation>
 <translation id="5910363049092958439">Stoor prent as …</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> is vanlyn</translation>
+<translation id="5911505723657992440">Gebruik Chrome-bedryfstelsel se instaanbedienerinstellings vir hierdie profiel.</translation>
 <translation id="5911533659001334206">Kortpadbekyker</translation>
 <translation id="5914724413750400082">Modulus (<ph name="MODULUS_NUM_BITS" /> bisse):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 2bd998f..c07200e 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -2273,6 +2273,7 @@
 <translation id="3225319735946384299">ኮድ መፈረም</translation>
 <translation id="3226487301970807183">በግራ የተሰለፈ የጎን ፓነልን ይቀያይሩ</translation>
 <translation id="3227137524299004712">ማይክሮፎን</translation>
+<translation id="3232754137068452469">የድር መተግበሪያ</translation>
 <translation id="3233271424239923319">Linux መተግበሪያዎችን እና ፋይሎችን በምትኬ ያስቀምጡ</translation>
 <translation id="3238192140106069382">በመገናኘት እና በማረጋገጥ ላይ</translation>
 <translation id="3239373508713281971">ለ<ph name="APP_NAME" /> የጊዜ ገደብ ተወግዷል</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 4f50bf9..cf260a3 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -2267,6 +2267,7 @@
 <translation id="3225319735946384299">التوقيع بالرمز</translation>
 <translation id="3226487301970807183">التبديل إلى اللوحة الجانبية التي تمت محاذاتها إلى اليسار</translation>
 <translation id="3227137524299004712">الميكروفون</translation>
+<translation id="3232754137068452469">تطبيق الويب</translation>
 <translation id="3233271424239923319">‏الاحتفاظ بنسخة احتياطية من تطبيقات وملفات Linux</translation>
 <translation id="3238192140106069382">جارٍ الاتصال والتحقق</translation>
 <translation id="3239373508713281971">تمت إزالة المهلة المحددّة لتطبيق <ph name="APP_NAME" />.</translation>
@@ -2306,6 +2307,7 @@
 <translation id="3277691515294482687">‏الاحتفاظ بنسخة احتياطية من التطبيقات والملفات الخاصة بي في مجلّد My Files (ملفاتي) قبل ترقية نظام التشغيل Linux.</translation>
 <translation id="3278001907972365362">‏حسابك (حساباتك) على Google تتطلب الانتباه</translation>
 <translation id="3278800075417428224">‏إدارة اللغات من خلال إعدادات نظام التشغيل CloudReady 2.0</translation>
+<translation id="3278928434075969895">‏هذا الملف الشخصي يستخدم إعدادات الخادم الوكيل في نظام التشغيل Chrome.</translation>
 <translation id="3279092821516760512">يمكن لجهات الاتصال المحدَّدة القريبة منك مشاركة الوسائط معك. ولن تبدأ عمليات النقل إلا عند موافقتك.</translation>
 <translation id="3279230909244266691">قد تستغرق هذه العملية بضع دقائق. جارٍ بدء الآلة الافتراضية.</translation>
 <translation id="3280237271814976245">الحفظ &amp;باسم...</translation>
@@ -4874,6 +4876,7 @@
 <translation id="5909379458939060601">هل تريد حذف هذا الملف الشخصي وبيانات التصفّح؟</translation>
 <translation id="5910363049092958439">حفظ ال&amp;صورة باسم...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> غير متصل</translation>
+<translation id="5911505723657992440">‏يمكنك استخدام إعدادات الخادم الوكيل في نظام التشغيل Chrome لهذا الملف الشخصي.</translation>
 <translation id="5911533659001334206">عارض الاختصارات</translation>
 <translation id="5914724413750400082">المعامل (<ph name="MODULUS_NUM_BITS" /> بت):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 17801ab66..05c16b98 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -2276,6 +2276,7 @@
 <translation id="3225319735946384299">ক’ড ছাইনিং</translation>
 <translation id="3226487301970807183">বাওঁফালে শাৰীবিন্যাস কৰা ছাইডৰ পেনেল ট’গল কৰক</translation>
 <translation id="3227137524299004712">মাইক্ৰ’ফ’ন</translation>
+<translation id="3232754137068452469">ৱেব এপ্‌</translation>
 <translation id="3233271424239923319">Linux এপ্‌ আৰু ফাইলসমূহ বেক আপ কৰক</translation>
 <translation id="3238192140106069382">সংযোগ আৰু সত্যাপন কৰি থকা হৈছে</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />ৰ বাবে সময়সীমা আঁতৰোৱা হৈছে</translation>
@@ -2343,6 +2344,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> ৰেহাই</translation>
 <translation id="3305389145870741612">ফর্মেট প্ৰক্ৰিয়া সম্পূর্ণ হ'বলৈ কিছু সময়ৰ প্ৰয়োজন হ'ব। অনুগ্ৰহ কৰি অপেক্ষা কৰক।</translation>
 <translation id="3305661444342691068">Preview এপত PDFটো খোলক</translation>
+<translation id="3307176291962384345"><ph name="MERCHANT_NAME" />ৰ বাবে ৰেহাই পাওক</translation>
 <translation id="3308116878371095290">এই পৃষ্ঠাটোক কুকী ছেট কৰা বাধা দিয়া হৈছে।</translation>
 <translation id="3308134619352333507">লুকুৱাবলৈ ব্যৱহাৰ কৰা বুটাম</translation>
 <translation id="3308852433423051161">Google Assistant ল'ড কৰি থকা হৈছে...</translation>
@@ -2821,6 +2823,7 @@
 <translation id="3761556954875533505">ছাইটটোক ফাইলসমূহ সম্পাদনা কৰিবলৈ দিবনে?</translation>
 <translation id="3764314093345384080">বিল্ডৰ সবিশেষ তথ্য</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB ডিভাইচটোৰ সৈতে যোগাযোগ কৰক}one{#টা USB ডিভাইচৰ সৈতে যোগাযোগ কৰক}other{#টা USB ডিভাইচৰ সৈতে যোগাযোগ কৰক}}</translation>
+<translation id="3764753550716962406">উপলব্ধ ৰেহাইসমূহ বিচাৰি পাবলৈ Googleক আপোনাৰ কার্টখন ব্যৱহাৰ কৰিবলৈ দিবনে?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="DEVICE_NAME" />লৈ <ph name="ATTACHMENTS" /> পঠিয়াই থকা হৈছে}one{<ph name="DEVICE_NAME" />লৈ <ph name="ATTACHMENTS" /> পঠিয়াই থকা হৈছে}other{<ph name="DEVICE_NAME" />লৈ <ph name="ATTACHMENTS" /> পঠিয়াই থকা হৈছে}}</translation>
 <translation id="3765246971671567135">অফলাইন ডেম’ ম’ডৰ নীতি পঢ়িব নোৱাৰিলে।</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> হাৰ্টজ</translation>
@@ -3255,6 +3258,7 @@
 <translation id="4194570336751258953">ক্লিক কৰিবলৈ টিপা সুবিধাটো সক্ষম কৰক</translation>
 <translation id="4195643157523330669">নতুন টেবত খোলক</translation>
 <translation id="4195814663415092787">আপুনি পূর্বতে এৰাৰ পৰা পুনৰ আৰম্ভ কৰক</translation>
+<translation id="4197917636330710075"><ph name="MERCHANT_NAME" /> আৰু <ph name="MERCHANT_NAME" />ৰ বাবে ৰেহাই পাওক</translation>
 <translation id="4198268995694216131">অতিৰিক্ত ছাইট</translation>
 <translation id="4200689466366162458">কাষ্টম শব্দ</translation>
 <translation id="4200983522494130825">নতুন &amp;টেব</translation>
@@ -4634,6 +4638,7 @@
 <translation id="5632566673632479864">আপোনাৰ একাউণ্ট <ph name="EMAIL" />ক প্ৰাথমিক একাউণ্ট হিচাপে আৰু ব্যৱহাৰ কৰিবলৈ অনুমতি দিয়া নহয়। কাৰণ এই একাউণ্টটো <ph name="DOMAIN" />এ পৰিচালনা কৰে, আপোনাৰ বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু অন্য ছেটিংসমূহ এই ডিভাইচৰ পৰা মচা হ’ব।</translation>
 <translation id="5632592977009207922">ডাউনল’ড কৰি থকা হৈছে, <ph name="PERCENT_REMAINING" />% বাকী আছে</translation>
 <translation id="563371367637259496">ম’বাইল</translation>
+<translation id="5634446357546764049">আপোনাৰ শেহতীয়া যাত্ৰাসমূহৰ স্মৃতি আৰু অধিক চাওক</translation>
 <translation id="5635312199252507107">নিৰ্দিষ্ট ছাইটসমূহত অনুমতি দিয়ক</translation>
 <translation id="563535393368633106">এক্সেছ কৰাৰ পূর্বে অনুমতি বিচাৰক (চুপাৰিছ কৰা হৈছে)</translation>
 <translation id="5636996382092289526">আপুনি <ph name="NETWORK_ID" /> ব্যৱহাৰ কৰিবলৈ প্ৰথমে <ph name="LINK_START" />নেটৱর্কৰ ছাইন ইন কৰা পৃষ্ঠালৈ যাব লগীয়া হ'ব পাৰে<ph name="LINK_END" />, যি পৃষ্ঠা কেই ছেকেণ্ডমানৰ ভিতৰত স্বয়ংক্ৰিয়ভাৱে খোল খাব। এনে নহ'লে নেটৱর্ক ব্যৱহাৰ কৰিব পৰা নাযায়।</translation>
@@ -4730,6 +4735,7 @@
 <translation id="5740709157181662145"><ph name="DEVICE_OS" />ৰ হাৰ্ডৱেৰ সম্পৰ্কীয় সহায়তা আৰু স্থিৰতা</translation>
 <translation id="574104302965107104">প্ৰতিবিম্বকৰণ দেখুৱাওক</translation>
 <translation id="574209121243317957">পিচ্চ</translation>
+<translation id="5745316408658560138">Chromeক আপোনাৰ কাৰ্টসমূহত ব্যক্তিগতকৃত ৰেহাই মূল্য সন্ধান কৰিবলৈ দিবনে?</translation>
 <translation id="5746169159649715125">PDF হিচাপে ছেভ কৰক</translation>
 <translation id="5747552184818312860">এই সময়ত ম্যাদ উকলিব</translation>
 <translation id="5747785204778348146">বিকাশকৰ্তা - বিকাশ সম্পূৰ্ণ হোৱা নাই</translation>
@@ -5357,6 +5363,7 @@
 <translation id="6370021412472292592">মেনিফেষ্ট ল’ড কৰিব পৰা নগ’ল।</translation>
 <translation id="6374077068638737855">আইচৱিজল</translation>
 <translation id="6374469231428023295">আকৌ চেষ্টা কৰক</translation>
+<translation id="6374635887697228982">ৰেহাই পাব বিচাৰেনে?</translation>
 <translation id="6377268785556383139">’<ph name="SEARCH_TEXT" />’ৰ বাবে পোৱা ১টা ফলাফল</translation>
 <translation id="6380143666419481200">গ্ৰহণ কৰি অব্যাহত ৰাখক</translation>
 <translation id="6382616130475191723"><ph name="SITE_NAME" /> পঢ়িবলৈ আৰু সলনি কৰিবলৈ অনুমতি দিয়া হৈছে</translation>
@@ -6922,6 +6929,7 @@
 <translation id="7956373551960864128">আপুনি ছেভ কৰি থোৱা প্ৰিণ্টাৰবোৰ</translation>
 <translation id="7957074856830851026">ক্ৰমিক নম্বৰ অথবা সম্পদৰ আইডিৰ দৰে ডিভাইচৰ তথ্য চাওক</translation>
 <translation id="7957615753207896812">কীব’র্ড ডিভাইচৰ ছেটিংসমূহ খোলক</translation>
+<translation id="7958437133377816580"><ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> আৰু অধিকৰ বাবে ৰেহাই পাওক</translation>
 <translation id="7959074893852789871">ফাইলটোত একাধিক প্ৰমাণপত্ৰ আছে আৰু তাৰে কেইখনমান আমদানি কৰা হোৱা নাই:</translation>
 <translation id="7959665254555683862">নতুন ইনক’গ্নিট’ টেব</translation>
 <translation id="7961015016161918242">কেতিয়াও নহয়</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index f12affd..6dd3e84 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1236,6 +1236,7 @@
 <translation id="2203088913459920044">Adda hərflər, rəqəmlər və xüsusi simvollar ola bilər</translation>
 <translation id="220321590587754225">Qoşulmaq mümkün olmadı. Yenə cəhd edin.</translation>
 <translation id="2204034823255629767">Oxuyun və yazdığınız istənilən şeyi dəyişin</translation>
+<translation id="2207115382329026341">Telefonunuzdan tətbiqlərin yayım ayarlarını aktiv edin.</translation>
 <translation id="220858061631308971">Bu PIN kodu "<ph name="DEVICE_NAME" />" cihazına daxil edin:</translation>
 <translation id="2210462644007531147">Quraşdırmanı tamamlamaq alınmadı</translation>
 <translation id="2212565012507486665">Kukilərə icazə verin</translation>
@@ -1429,6 +1430,7 @@
 <translation id="2367972762794486313">Tətbiqləri göstərin</translation>
 <translation id="236939127352773362">Cihazlar yaxınlıqda paylaşdıqda</translation>
 <translation id="2371076942591664043">Hazır olanda açın</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> tətbiqini işə salmaq mümkün olmadı</translation>
 <translation id="2373666622366160481">Kağıza sığdırın</translation>
 <translation id="2375406435414127095">Telefonunuzu qoşun</translation>
 <translation id="2377588536920405462">Cihazınızda əsas Məkan ayarını söndürərək Məkanı qeyri-aktiv edə bilərsiniz. Həmçinin məkan ayarlarında məkan üçün Wi-Fi, mobil şəbəkələr və sensorlardan istifadəni də söndürə bilərsiniz.</translation>
@@ -2262,6 +2264,7 @@
 <translation id="3225319735946384299">Kodu İmzalaması</translation>
 <translation id="3226487301970807183">Sol yan panelə keçin</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Veb Tətbiq</translation>
 <translation id="3233271424239923319">Linux tətbiq və fayllarını yedəkləyin</translation>
 <translation id="3238192140106069382">Qoşulur və doğrulanır</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> üçün vaxt limiti ləğv edilib</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index f086b94..661087fb 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -2266,6 +2266,7 @@
 <translation id="3225319735946384299">Падпісванне кода</translation>
 <translation id="3226487301970807183">Паказаць або схаваць бакавую панэль злева</translation>
 <translation id="3227137524299004712">Мікрафон</translation>
+<translation id="3232754137068452469">Вэб-праграма</translation>
 <translation id="3233271424239923319">Стварыць рэзервовую копію файлаў і праграм Linux</translation>
 <translation id="3238192140106069382">Ідзе падключэнне і спраўджанне</translation>
 <translation id="3239373508713281971">Абмежаванне часу выдалена для праграмы "<ph name="APP_NAME" />"</translation>
@@ -2333,6 +2334,7 @@
 <translation id="3304212451103136496">Скідка <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">Фармаціраванне можа заняць некалькі секунд. Пачакайце.</translation>
 <translation id="3305661444342691068">Адкрыць PDF у рэжыме перадпрагляду</translation>
+<translation id="3307176291962384345">Атрымлівайце скідкі ў краме "<ph name="MERCHANT_NAME" />"</translation>
 <translation id="3308116878371095290">Быў прадухілены запіс файлаў cookie гэтай старонкай.</translation>
 <translation id="3308134619352333507">Кнопка "Схаваць"</translation>
 <translation id="3308852433423051161">Загрузка Памочніка Google...</translation>
@@ -2811,6 +2813,7 @@
 <translation id="3761556954875533505">Дазволіць сайту змяняць файлы?</translation>
 <translation id="3764314093345384080">Падрабязныя звесткі пра зборку</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Абмен данымі з прыладай USB}one{Абмен данымі з # прыладай USB}few{Абмен данымі з # прыладамі USB}many{Абмен данымі з # прыладамі USB}other{Абмен данымі з # прылады USB}}</translation>
+<translation id="3764753550716962406">Дазволіць Google выкарыстоўваць інфармацыю пра тавары ў вашым кошыку для пошуку даступных скідак?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Ідзе адпраўка даных (<ph name="ATTACHMENTS" />) на прыладу "<ph name="DEVICE_NAME" />"}one{Ідзе адпраўка даных (<ph name="ATTACHMENTS" />) на прыладу "<ph name="DEVICE_NAME" />"}few{Ідзе адпраўка даных (<ph name="ATTACHMENTS" />) на прыладу "<ph name="DEVICE_NAME" />"}many{Ідзе адпраўка даных (<ph name="ATTACHMENTS" />) на прыладу "<ph name="DEVICE_NAME" />"}other{Ідзе адпраўка даных (<ph name="ATTACHMENTS" />) на прыладу "<ph name="DEVICE_NAME" />"}}</translation>
 <translation id="3765246971671567135">Не ўдалося прачытаць пазасеткавую палітыку дэманстрацыйнага рэжыму.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Гц</translation>
@@ -3246,6 +3249,7 @@
 <translation id="4194570336751258953">Уключыць націсканне дотыкам</translation>
 <translation id="4195643157523330669">Адкрыць у новай укладцы</translation>
 <translation id="4195814663415092787">Працягнуць з месца, дзе вы спыніліся</translation>
+<translation id="4197917636330710075">Атрымлівайце скідкі ў крамах "<ph name="MERCHANT_NAME" />" і "<ph name="MERCHANT_NAME" />"</translation>
 <translation id="4198268995694216131">Дадатковыя сайты</translation>
 <translation id="4200689466366162458">Словы, дададзеныя карыстальнікам</translation>
 <translation id="4200983522494130825">Новая &amp;ўкладка</translation>
@@ -4622,6 +4626,7 @@
 <translation id="5632566673632479864">Уліковы запіс <ph name="EMAIL" /> больш не дазволена выкарыстоўваць як асноўны. Гэты ўліковы запіс знаходзіцца пад кіраваннем дамена <ph name="DOMAIN" />, таму з прылады будуць выдалены вашы закладкі, гісторыя, паролі і іншыя налады.</translation>
 <translation id="5632592977009207922">Ідзе спампоўванне, засталося <ph name="PERCENT_REMAINING" /> %</translation>
 <translation id="563371367637259496">Мабільная сетка</translation>
+<translation id="5634446357546764049">Паказваць успаміны пра нядаўнія паездкі і не толькі</translation>
 <translation id="5635312199252507107">Дазволіць на канкрэтных сайтах</translation>
 <translation id="563535393368633106">Запытваць перад доступам (рэкамендуецца)</translation>
 <translation id="5636996382092289526">Каб выкарыстоўваць сетку "<ph name="NETWORK_ID" />", спачатку можа спатрэбіцца <ph name="LINK_START" />наведаць старонку ўваходу ў сетку<ph name="LINK_END" />, якая адкрыецца аўтаматычна праз некалькі секунд. Калі гэтага не адбылося, сетку выкарыстоўваць нельга.</translation>
@@ -4718,6 +4723,7 @@
 <translation id="5740709157181662145">Дапамагаць павышаць стабільнасць работы і паляпшаць падтрымку апаратнага забеспячэння ў <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Адлюстраванне дысплэя</translation>
 <translation id="574209121243317957">Вышыня голасу</translation>
+<translation id="5745316408658560138">Дазволіць Chrome шукаць персаналізаваныя скідкі на тавары ў вашых кошыках?</translation>
 <translation id="5746169159649715125">Захаваць як PDF</translation>
 <translation id="5747552184818312860">Тэрмін дзеяння:</translation>
 <translation id="5747785204778348146">Распрацоўшчык – нестабільны параметр</translation>
@@ -5345,6 +5351,7 @@
 <translation id="6370021412472292592">Не ўдалося загрузіць маніфест.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Паўтарыць спробу</translation>
+<translation id="6374635887697228982">Атрымліваць скідкі?</translation>
 <translation id="6377268785556383139">1 вынік па запыце "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Прыняць і працягнуць</translation>
 <translation id="6382616130475191723">Атрымалі дазвол на чытанне і змяненне сайта <ph name="SITE_NAME" /></translation>
@@ -6910,6 +6917,7 @@
 <translation id="7956373551960864128">Вашы захаваныя прынтары</translation>
 <translation id="7957074856830851026">Прагляд звестак пра прыладу (напрыклад, серыйнага нумара або ідэнтыфікатара аб'екта ўласнасці)</translation>
 <translation id="7957615753207896812">Адкрыць налады клавіятуры</translation>
+<translation id="7958437133377816580">Атрымлівайце скідкі ў крамах "<ph name="MERCHANT_NAME" />", "<ph name="MERCHANT_NAME" />" і не толькі</translation>
 <translation id="7959074893852789871">У файле было некалькі сертыфікатаў, некаторыя з якіх не імпартаваны:</translation>
 <translation id="7959665254555683862">Новая ўкладка ў рэжыме інкогніта</translation>
 <translation id="7961015016161918242">Ніколі</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 67568d9..e2b1045b 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -2275,6 +2275,7 @@
 <translation id="3225319735946384299">Подписване на код</translation>
 <translation id="3226487301970807183">Превключване на подравнения вляво страничен панел</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Уеб приложение</translation>
 <translation id="3233271424239923319">Създаване на резервно копие за приложенията и файловете на Linux</translation>
 <translation id="3238192140106069382">Установява се връзка и се потвърждава</translation>
 <translation id="3239373508713281971">Времевото ограничение за <ph name="APP_NAME" /> бе премахнато</translation>
@@ -2313,6 +2314,7 @@
 <translation id="3277691515294482687">Създаване на резервно копие на приложенията и файловете ми в папката „Моите файлове“, преди да се надстрои Linux.</translation>
 <translation id="3278001907972365362">Профилите ви в Google изискват внимание</translation>
 <translation id="3278800075417428224">Управление на езиците в настройките на CloudReady 2.0</translation>
+<translation id="3278928434075969895">Този потребителски профил използва настройките за прокси сървъра на Chrome OS.</translation>
 <translation id="3279092821516760512">Избраните контакти могат да споделят с вас, когато са в близост. Прехвърлянето няма да стартира, докато не се съгласите.</translation>
 <translation id="3279230909244266691">Това може да отнеме няколко минути. Виртуалната машина стартира.</translation>
 <translation id="3280237271814976245">&amp;Запазване като...</translation>
@@ -2342,6 +2344,7 @@
 <translation id="3304212451103136496">Отстъпка от <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">Форматирането може да отнеме няколко секунди. Моля, изчакайте.</translation>
 <translation id="3305661444342691068">Отваряне на визуализация на PDF</translation>
+<translation id="3307176291962384345">Получаване на отстъпки за <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Задаването на „бисквитки“ от тази страница е предотвратено.</translation>
 <translation id="3308134619352333507">Скриване на бутона</translation>
 <translation id="3308852433423051161">Google Асистент се зарежда...</translation>
@@ -2820,6 +2823,7 @@
 <translation id="3761556954875533505">Да се разреши ли на сайта да редактира файлове?</translation>
 <translation id="3764314093345384080">Подробна информация за компилацията</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Комуникация с USB устройство}other{Комуникация с # USB устройства}}</translation>
+<translation id="3764753550716962406">Да се разреши ли на Google да използва кошницата ви, за да намира налични отстъпки?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Изпращате <ph name="ATTACHMENTS" /> до <ph name="DEVICE_NAME" />}other{Изпращате <ph name="ATTACHMENTS" /> до <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Правилото за офлайн демонстрационен режим не можа да бъде прочетено.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Хц</translation>
@@ -3256,6 +3260,7 @@
 <translation id="4194570336751258953">Активиране на кликване с докосване</translation>
 <translation id="4195643157523330669">Отваряне в нов раздел</translation>
 <translation id="4195814663415092787">Продължаване оттам, откъдето сте прекъснали</translation>
+<translation id="4197917636330710075">Получаване на отстъпки за <ph name="MERCHANT_NAME" /> и <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Допълнителни сайтове</translation>
 <translation id="4200689466366162458">Персонализирани думи</translation>
 <translation id="4200983522494130825">Нов &amp;раздел</translation>
@@ -4636,6 +4641,7 @@
 <translation id="5632566673632479864">Профилът ви <ph name="EMAIL" /> вече не може да се използва като основен. Тъй като този профил се управлява от <ph name="DOMAIN" />, вашите отметки, история, пароли и други настройки ще бъдат изчистени от устройството.</translation>
 <translation id="5632592977009207922">Изтегля се, още<ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">Мобилна мрежа</translation>
+<translation id="5634446357546764049">Виждайте спомени за скорошните си пътувания и др.</translation>
 <translation id="5635312199252507107">Разрешаване за конкретни сайтове</translation>
 <translation id="563535393368633106">Извеждане на запитване преди осъществяване на достъп (препоръчително)</translation>
 <translation id="5636996382092289526">За да използвате „<ph name="NETWORK_ID" />“, може да се наложи първо <ph name="LINK_START" />да посетите страницата за вход в мрежата<ph name="LINK_END" />, която ще се отвори автоматично след няколко секунди. Ако това не се случи, мрежата не може да се ползва.</translation>
@@ -4732,6 +4738,7 @@
 <translation id="5740709157181662145">Поддръжка при проблеми с хардуера и стабилността на <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Дублиране на екрана</translation>
 <translation id="574209121243317957">Височина</translation>
+<translation id="5745316408658560138">Да се разреши ли на Chrome да намира персонализирани отстъпки в кошниците ви?</translation>
 <translation id="5746169159649715125">Запазване като PDF файл</translation>
 <translation id="5747552184818312860">Изтича на</translation>
 <translation id="5747785204778348146">За програмисти – нестабилен</translation>
@@ -4882,6 +4889,7 @@
 <translation id="5909379458939060601">Този потребителски профил и данните за сърфирането да се изтрият ли?</translation>
 <translation id="5910363049092958439">&amp;Запазване на изображението като...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> е офлайн</translation>
+<translation id="5911505723657992440">Използвайте настройките за прокси сървъра на Chrome OS за този потребителски профил.</translation>
 <translation id="5911533659001334206">Визуализатор на клавишните комбинации</translation>
 <translation id="5914724413750400082">Модули (<ph name="MODULUS_NUM_BITS" /> бита):
   <ph name="MODULUS_HEX_DUMP" />
@@ -5358,6 +5366,7 @@
 <translation id="6370021412472292592">Манифестът не можа да се зареди.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Нов опит</translation>
+<translation id="6374635887697228982">Искате ли да получавате отстъпки?</translation>
 <translation id="6377268785556383139">1 резултат за „<ph name="SEARCH_TEXT" />“</translation>
 <translation id="6380143666419481200">Приемам и продължавам</translation>
 <translation id="6382616130475191723">Има разрешение за четене и промяна на <ph name="SITE_NAME" /></translation>
@@ -6924,6 +6933,7 @@
 <translation id="7956373551960864128">Вашите запазени принтери</translation>
 <translation id="7957074856830851026">Преглед на информация за устройството, като например серийния номер или идентификатора на актива</translation>
 <translation id="7957615753207896812">Отваряне на настройките за клавиатурата</translation>
+<translation id="7958437133377816580">Получаване на отстъпки за <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> и др.</translation>
 <translation id="7959074893852789871">Файлът съдържаше няколко сертификата, някои от които не бяха импортирани:</translation>
 <translation id="7959665254555683862">Нов &amp;раздел „инкогнито“</translation>
 <translation id="7961015016161918242">Никога</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 8fdbecef..143a7a2 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -2281,6 +2281,7 @@
 <translation id="3225319735946384299">Code Signing</translation>
 <translation id="3226487301970807183">বাঁদিক বরাবর অ্যালাইন থাকা সাইড প্যানেল টগল করুন</translation>
 <translation id="3227137524299004712">মাইক্রোফোন</translation>
+<translation id="3232754137068452469">ওয়েব অ্যাপ</translation>
 <translation id="3233271424239923319">Linux অ্যাপ ও ফাইল ব্যাক-আপ করুন</translation>
 <translation id="3238192140106069382">কানেক্ট এবং যাচাই করা হচ্ছে</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ক্ষেত্রে প্রয়োগ করা সময়সীমা সরানো হয়েছে</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 59720ad5..171f96c 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1251,6 +1251,7 @@
 <translation id="2203088913459920044">Naziv može sadržavati slova, brojeve i posebne znakove</translation>
 <translation id="220321590587754225">Povezivanje nije uspjelo. Pokušajte ponovo.</translation>
 <translation id="2204034823255629767">ČItanje i mijenjanje svega što unesete</translation>
+<translation id="2207115382329026341">Omogućite postavke za prijenos aplikacija s telefona.</translation>
 <translation id="220858061631308971">Unesite ovaj PIN kod na "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Završavanje instalacije nije uspjelo</translation>
 <translation id="2212565012507486665">Dozvoli kolačiće</translation>
@@ -1444,6 +1445,7 @@
 <translation id="2367972762794486313">Prikaži aplikacije</translation>
 <translation id="236939127352773362">Kada uređaji dijele u blizini</translation>
 <translation id="2371076942591664043">Otvori kad bude &amp;gotovo</translation>
+<translation id="237307274687369010">Pokretanje aplikacije <ph name="APP_NAME" /> nije uspjelo</translation>
 <translation id="2373666622366160481">Prilagodi veličini papira</translation>
 <translation id="2375406435414127095">Povežite na telefon</translation>
 <translation id="2377588536920405462">Lokaciju možete isključiti ako na uređaju isključite glavnu postavku lokacije. U postavkama lokacije možete isključiti i korištenje WiFi-ja, mobilnih mreža i senzora za lokaciju.</translation>
@@ -2277,6 +2279,7 @@
 <translation id="3225319735946384299">Potpisivanje koda</translation>
 <translation id="3226487301970807183">Aktivirajte/deaktivirajte bočnu ploču poredanu nalijevo</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Web aplikacija</translation>
 <translation id="3233271424239923319">Napravite sigurnosnu kopiju Linux aplikacija i fajlova</translation>
 <translation id="3238192140106069382">Povezivanje i potvrđivanje</translation>
 <translation id="3239373508713281971">Uklonjeno je vremensko ograničenje za aplikaciju <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 30cc4d7..0a48a53d 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -650,7 +650,7 @@
 <translation id="1627408615528139100">Ja s'ha baixat</translation>
 <translation id="1628948239858170093">Vols escanejar el fitxer abans d'obrir-lo?</translation>
 <translation id="1629314197035607094">La contrasenya ha caducat</translation>
-<translation id="1629451755632656601">Vols permetre que Google cerqui descomptes personalitzats als teus carretons?</translation>
+<translation id="1629451755632656601">Vols permetre que Chrome cerqui descomptes personalitzats basats en els teus carretons?</translation>
 <translation id="163072119192489970">Amb permís per acabar d'enviar o de rebre dades</translation>
 <translation id="1630768113285622200">Reinicia i continua</translation>
 <translation id="1632082166874334883">Contrasenya emmagatzemada al Compte de Google</translation>
@@ -2263,6 +2263,7 @@
 <translation id="3225319735946384299">Signatura de codi</translation>
 <translation id="3226487301970807183">Commuta el tauler lateral alineat a l'esquerra</translation>
 <translation id="3227137524299004712">Micròfon</translation>
+<translation id="3232754137068452469">Aplicació web</translation>
 <translation id="3233271424239923319">Crea una còpia de seguretat dels fitxers i de les aplicacions de Linux</translation>
 <translation id="3238192140106069382">S'està connectant i verificant</translation>
 <translation id="3239373508713281971">S'ha suprimit el límit de temps per a <ph name="APP_NAME" /></translation>
@@ -2330,6 +2331,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> de descompte</translation>
 <translation id="3305389145870741612">El procés de format pot trigar uns quants segons. Espereu.</translation>
 <translation id="3305661444342691068">Obre la previsualització en PDF</translation>
+<translation id="3307176291962384345">Obtén descomptes per a <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">S'ha impedit que aquesta pàgina estableixi galetes.</translation>
 <translation id="3308134619352333507">Amaga el botó</translation>
 <translation id="3308852433423051161">S'està carregant l'Assistent de Google...</translation>
@@ -2808,6 +2810,7 @@
 <translation id="3761556954875533505">Vols permetre que el lloc web editi els fitxers?</translation>
 <translation id="3764314093345384080">Informació detallada de la compilació</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Es comunica amb un dispositiu USB}other{Es comunica amb # dispositius USB}}</translation>
+<translation id="3764753550716962406">Vols permetre que Google utilitzi el teu carretó per cercar descomptes disponibles?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{S'està enviant el contingut següent al dispositiu <ph name="DEVICE_NAME" />: <ph name="ATTACHMENTS" />}other{S'està enviant el contingut següent al dispositiu <ph name="DEVICE_NAME" />: <ph name="ATTACHMENTS" />}}</translation>
 <translation id="3765246971671567135">No s'ha pogut llegir la política del mode de demostració sense connexió.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3242,6 +3245,7 @@
 <translation id="4194570336751258953">Activa la funció de tocar per fer clic</translation>
 <translation id="4195643157523330669">Obre en una pestanya nova</translation>
 <translation id="4195814663415092787">Continua des d'on ho vaig deixar</translation>
+<translation id="4197917636330710075">Obtén descomptes per a <ph name="MERCHANT_NAME" /> i <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Llocs web addicionals</translation>
 <translation id="4200689466366162458">Paraules personalitzades</translation>
 <translation id="4200983522494130825">Pes&amp;tanya nova</translation>
@@ -4622,6 +4626,7 @@
 <translation id="5632566673632479864">Ja no es permet que <ph name="EMAIL" /> sigui el compte principal. Com que <ph name="DOMAIN" /> gestiona aquest compte, s'esborraran d'aquest dispositiu les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració.</translation>
 <translation id="5632592977009207922">S'està baixant. Queda un <ph name="PERCENT_REMAINING" />%.</translation>
 <translation id="563371367637259496">Mòbil</translation>
+<translation id="5634446357546764049">Consulta els records dels teus viatges recents i més</translation>
 <translation id="5635312199252507107">Permet en llocs web concrets</translation>
 <translation id="563535393368633106">Pregunta'm abans d'accedir (opció recomanada)</translation>
 <translation id="5636996382092289526">Per utilitzar <ph name="NETWORK_ID" />, és possible que abans calgui que <ph name="LINK_START" />visiteu la pàgina d'inici de sessió de la xarxa<ph name="LINK_END" />, que s'obrirà automàticament d'aquí a pocs segons. Si no s'obre, no podreu utilitzar la xarxa.</translation>
@@ -4718,6 +4723,7 @@
 <translation id="5740709157181662145">Compatibilitat i estabilitat del maquinari <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Projecció de la pantalla</translation>
 <translation id="574209121243317957">To</translation>
+<translation id="5745316408658560138">Vols permetre que Chrome cerqui descomptes personalitzats basats en els teus carretons?</translation>
 <translation id="5746169159649715125">Desa com a PDF</translation>
 <translation id="5747552184818312860">Caduca el dia</translation>
 <translation id="5747785204778348146">Desenvolupador: inestable</translation>
@@ -5345,6 +5351,7 @@
 <translation id="6370021412472292592">No s'ha pogut carregar el manifest.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Torna-ho a provar</translation>
+<translation id="6374635887697228982">Vols obtenir descomptes?</translation>
 <translation id="6377268785556383139">1 resultat per a "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Accepta i continua</translation>
 <translation id="6382616130475191723">S'ha donat permís per llegir i canviar <ph name="SITE_NAME" /></translation>
@@ -6911,6 +6918,7 @@
 <translation id="7956373551960864128">Les teves impressores desades</translation>
 <translation id="7957074856830851026">Mostra la informació del dispositiu, com ara el número de sèrie o l'identificador de recurs</translation>
 <translation id="7957615753207896812">Obre la configuració del teclat</translation>
+<translation id="7958437133377816580">Obtén descomptes per a <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> i més</translation>
 <translation id="7959074893852789871">El fitxer contenia certificats múltiples, però alguns no s'han importat:</translation>
 <translation id="7959665254555683862">Pestanya &amp;d'incògnit nova</translation>
 <translation id="7961015016161918242">Mai</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index a8e391a..f493551d 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -2265,6 +2265,7 @@
 <translation id="3225319735946384299">Podepisování kódu</translation>
 <translation id="3226487301970807183">Přepnout panel na levé straně</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Webová aplikace</translation>
 <translation id="3233271424239923319">Zálohovat aplikace a soubory systému Linux</translation>
 <translation id="3238192140106069382">Připojování a ověřování</translation>
 <translation id="3239373508713281971">U aplikace <ph name="APP_NAME" /> byl odstraněn časový limit</translation>
@@ -2303,6 +2304,7 @@
 <translation id="3277691515294482687">Před upgradováním Linuxu zálohovat mé aplikace a soubory do složky Moje soubory.</translation>
 <translation id="3278001907972365362">Váš účet Google vyžaduje pozornost</translation>
 <translation id="3278800075417428224">Spravovat jazyky v nastavení systému CloudReady 2.0</translation>
+<translation id="3278928434075969895">Tento profil používá nastavení proxy serveru Chrome OS.</translation>
 <translation id="3279092821516760512">Vybrané kontakty s vámi mohou sdílet obsah, když jsou v okolí. Přenosy nezačnou, dokud je nepotvrdíte.</translation>
 <translation id="3279230909244266691">Tento proces může trvat několik minut. Probíhá spouštění virtuálního počítače.</translation>
 <translation id="3280237271814976245">Uložit &amp;jako...</translation>
@@ -4873,6 +4875,7 @@
 <translation id="5909379458939060601">Smazat tento profil a údaje o prohlížení?</translation>
 <translation id="5910363049092958439">Uložit o&amp;brázek jako...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> je offline</translation>
+<translation id="5911505723657992440">Použít pro tento profil nastavení proxy serveru Chrome OS</translation>
 <translation id="5911533659001334206">Prohlížeč klávesových zkratek</translation>
 <translation id="5914724413750400082">Modul (<ph name="MODULUS_NUM_BITS" /> bitů):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 548f932..3dcb856 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -2280,6 +2280,7 @@
 <translation id="3225319735946384299">Kodesignering</translation>
 <translation id="3226487301970807183">Vis/skjul venstrejusteret sidepanel</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Webapp</translation>
 <translation id="3233271424239923319">Sikkerhedskopiér Linux-apps og -filer</translation>
 <translation id="3238192140106069382">Opretter forbindelse og verificerer</translation>
 <translation id="3239373508713281971">Tidsgrænsen blev fjernet for <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 7a05b756..d8c14c9 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -2261,6 +2261,7 @@
 <translation id="3225319735946384299">Codesignatur</translation>
 <translation id="3226487301970807183">Linke Seitenleiste ein-/ausblenden</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Web-App</translation>
 <translation id="3233271424239923319">Linux-Apps und -Dateien sichern</translation>
 <translation id="3238192140106069382">Verbindung wird hergestellt und geprüft</translation>
 <translation id="3239373508713281971">Zeitlimit entfernt für <ph name="APP_NAME" /></translation>
@@ -2328,6 +2329,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> Rabatt</translation>
 <translation id="3305389145870741612">Die Formatierung kann einige Sekunden dauern. Bitte warten...</translation>
 <translation id="3305661444342691068">PDF-Vorschau</translation>
+<translation id="3307176291962384345">Rabatte für <ph name="MERCHANT_NAME" /> erhalten</translation>
 <translation id="3308116878371095290">Diese Seite konnte keine Cookies setzen.</translation>
 <translation id="3308134619352333507">Schaltfläche ausblenden</translation>
 <translation id="3308852433423051161">Google Assistant wird geladen...</translation>
@@ -2806,6 +2808,7 @@
 <translation id="3761556954875533505">Website erlauben, Dateien zu bearbeiten?</translation>
 <translation id="3764314093345384080">Detaillierte Build-Informationen</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommunikation mit einem USB-Gerät}other{Kommunikation mit # USB-Geräten}}</translation>
+<translation id="3764753550716962406">Zulassen, dass Google Ihren Einkaufswagen verwendet, um verfügbare Rabatte zu finden?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> wird an <ph name="DEVICE_NAME" /> gesendet}other{<ph name="ATTACHMENTS" /> werden an <ph name="DEVICE_NAME" /> gesendet}}</translation>
 <translation id="3765246971671567135">Richtlinie für den Offlinedemomodus konnte nicht verarbeitet werden.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3241,6 +3244,7 @@
 <translation id="4194570336751258953">Touchpad-Klick aktivieren</translation>
 <translation id="4195643157523330669">In neuem Tab öffnen</translation>
 <translation id="4195814663415092787">Zuletzt angesehene Seiten öffnen</translation>
+<translation id="4197917636330710075">Rabatte für <ph name="MERCHANT_NAME" /> und <ph name="MERCHANT_NAME" /> erhalten</translation>
 <translation id="4198268995694216131">Zusätzliche Websites</translation>
 <translation id="4200689466366162458">Benutzerdefinierte Wörter</translation>
 <translation id="4200983522494130825">Neuer &amp;Tab</translation>
@@ -4617,6 +4621,7 @@
 <translation id="5632566673632479864">Ihr Konto <ph name="EMAIL" /> ist nicht mehr als primäres Konto zugelassen. Da dieses Konto von <ph name="DOMAIN" /> verwaltet wird, werden Ihr Verlauf sowie Ihre Lesezeichen, Passwörter und sonstigen Einstellungen von diesem Gerät gelöscht.</translation>
 <translation id="5632592977009207922">Wird heruntergeladen, <ph name="PERCENT_REMAINING" /> % verbleibend</translation>
 <translation id="563371367637259496">Mobil</translation>
+<translation id="5634446357546764049">Erinnerungen Ihrer letzten Reisen und mehr</translation>
 <translation id="5635312199252507107">Auf bestimmten Websites zulassen</translation>
 <translation id="563535393368633106">Vor dem Zugriff nachfragen (empfohlen)</translation>
 <translation id="5636996382092289526">Zur Verwendung von <ph name="NETWORK_ID" /> müssen Sie eventuell zuerst die <ph name="LINK_START" />Anmeldeseite des Netzwerks besuchen<ph name="LINK_END" />. Diese wird in einigen Sekunden automatisch geöffnet. Anderenfalls kann das Netzwerk nicht verwendet werden.</translation>
@@ -4713,6 +4718,7 @@
 <translation id="5740709157181662145">Hardware-Unterstützung und Stabilität von <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Displayspiegelung</translation>
 <translation id="574209121243317957">Tonhöhe</translation>
+<translation id="5745316408658560138">Zulassen, dass Chrome personalisierte Rabatte für Ihre Einkaufswagen findet?</translation>
 <translation id="5746169159649715125">Als PDF speichern</translation>
 <translation id="5747552184818312860">Ablaufdatum</translation>
 <translation id="5747785204778348146">Entwickler – instabil</translation>
@@ -5340,6 +5346,7 @@
 <translation id="6370021412472292592">Manifest konnte nicht geladen werden.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Erneut versuchen</translation>
+<translation id="6374635887697228982">Rabatte erhalten?</translation>
 <translation id="6377268785556383139">1 Ergebnis für "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Akzeptieren und fortfahren</translation>
 <translation id="6382616130475191723">Abrufen und Ändern von <ph name="SITE_NAME" /> genehmigt</translation>
@@ -6905,6 +6912,7 @@
 <translation id="7956373551960864128">Ihre gespeicherten Drucker</translation>
 <translation id="7957074856830851026">Geräteinformationen wie Seriennummer oder Asset-ID abrufen</translation>
 <translation id="7957615753207896812">Tastatureinstellungen öffnen</translation>
+<translation id="7958437133377816580">Rabatte für <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> und weitere Händler erhalten</translation>
 <translation id="7959074893852789871">Die Datei enthielt mehrere Zertifikate, von denen einige nicht importiert wurden:</translation>
 <translation id="7959665254555683862">Neuer Inkognito&amp;tab</translation>
 <translation id="7961015016161918242">Nie</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index f518a54e..9d90b4f3 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Υπογραφή κώδικα</translation>
 <translation id="3226487301970807183">Εναλλαγή πλαϊνού πλαισίου με στοίχιση στα αριστερά</translation>
 <translation id="3227137524299004712">Μικρόφωνο</translation>
+<translation id="3232754137068452469">Εφαρμογή ιστού</translation>
 <translation id="3233271424239923319">Δημιουργία αντιγράφων ασφαλείας για εφαρμογές και αρχεία Linux</translation>
 <translation id="3238192140106069382">Σύνδεση και επαλήθευση</translation>
 <translation id="3239373508713281971">Το χρονικό όριο για την εφαρμογή <ph name="APP_NAME" /> καταργήθηκε.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 0300624..04a5464 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -2281,6 +2281,7 @@
 <translation id="3225319735946384299">Code Signing</translation>
 <translation id="3226487301970807183">Toggle left-aligned side panel</translation>
 <translation id="3227137524299004712">Microphone</translation>
+<translation id="3232754137068452469">Web App</translation>
 <translation id="3233271424239923319">Backup Linux apps and files</translation>
 <translation id="3238192140106069382">Connecting and verifying</translation>
 <translation id="3239373508713281971">Time limit removed for <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index a932417..b20b461 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -2261,6 +2261,7 @@
 <translation id="3225319735946384299">Firma de código</translation>
 <translation id="3226487301970807183">Mover el panel lateral a la izquierda</translation>
 <translation id="3227137524299004712">Micrófono</translation>
+<translation id="3232754137068452469">Aplicación web</translation>
 <translation id="3233271424239923319">Crear una copia de seguridad de los archivos y apps de Linux</translation>
 <translation id="3238192140106069382">Conectando y verificando</translation>
 <translation id="3239373508713281971">Se quitó el límite de tiempo para <ph name="APP_NAME" /></translation>
@@ -2328,6 +2329,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> de descuento</translation>
 <translation id="3305389145870741612">El proceso de formato puede tardar algunos segundos. Espera.</translation>
 <translation id="3305661444342691068">Abrir PDF en vista previa</translation>
+<translation id="3307176291962384345">Obtener descuentos para <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Se impidió que esta página configure cookies.</translation>
 <translation id="3308134619352333507">Ocultar botón</translation>
 <translation id="3308852433423051161">Cargando el Asistente de Google…</translation>
@@ -2806,6 +2808,7 @@
 <translation id="3761556954875533505">¿Quieres permitir que el sitio edite archivos?</translation>
 <translation id="3764314093345384080">Información detallada sobre la compilación</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicarse con un dispositivo USB}other{Comunicarse con # dispositivos USB}}</translation>
+<translation id="3764753550716962406">¿Quieres que Google use tu carrito para buscar descuentos disponibles?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Enviando <ph name="ATTACHMENTS" /> a <ph name="DEVICE_NAME" />}other{Enviando <ph name="ATTACHMENTS" /> a <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">No se pudo leer la política del modo de demostración sin conexión.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3241,6 +3244,7 @@
 <translation id="4194570336751258953">Habilitar el punteo para hacer clic</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
 <translation id="4195814663415092787">Continuar la sesión desde donde la dejaste</translation>
+<translation id="4197917636330710075">Obtener descuentos para <ph name="MERCHANT_NAME" /> y <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Sitios adicionales</translation>
 <translation id="4200689466366162458">Palabras personalizadas</translation>
 <translation id="4200983522494130825">Nueva pes&amp;taña</translation>
@@ -4619,6 +4623,7 @@
 <translation id="5632566673632479864">Ya no es posible usar tu cuenta <ph name="EMAIL" /> como la principal. Como <ph name="DOMAIN" /> administra esta cuenta, se borrarán tus favoritos, historial, contraseñas y otras opciones de configuración de este dispositivo.</translation>
 <translation id="5632592977009207922">Descargando. Falta <ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">Móvil</translation>
+<translation id="5634446357546764049">Ver recuerdos de tus viajes recientes y más</translation>
 <translation id="5635312199252507107">Permitir en sitios específicos</translation>
 <translation id="563535393368633106">Preguntar antes de acceder (recomendado)</translation>
 <translation id="5636996382092289526">Para utilizar la red <ph name="NETWORK_ID" />, es posible que primero debas <ph name="LINK_START" />ingresar a la página de acceso a la red<ph name="LINK_END" />, que se abrirá de forma automática en unos segundos. Si no se abre, no podrás utilizar la red.</translation>
@@ -4715,6 +4720,7 @@
 <translation id="5740709157181662145">Asistencia y estabilidad del hardware de <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Duplicación de pantalla</translation>
 <translation id="574209121243317957">Tono</translation>
+<translation id="5745316408658560138">¿Quieres que Google busque descuentos personalizados en tus carritos?</translation>
 <translation id="5746169159649715125">Guardar como PDF</translation>
 <translation id="5747552184818312860">Caduca</translation>
 <translation id="5747785204778348146">Programador: versión inestable</translation>
@@ -5342,6 +5348,7 @@
 <translation id="6370021412472292592">No se pudo cargar el manifiesto.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Volver a intentar</translation>
+<translation id="6374635887697228982">¿Quieres obtener descuentos?</translation>
 <translation id="6377268785556383139">1 resultado para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Aceptar y continuar</translation>
 <translation id="6382616130475191723">Puede leer y cambiar los datos de <ph name="SITE_NAME" /></translation>
@@ -6908,6 +6915,7 @@
 <translation id="7956373551960864128">Tus impresoras guardadas</translation>
 <translation id="7957074856830851026">Ver información del dispositivo, como el número de serie o la ID del activo</translation>
 <translation id="7957615753207896812">Abrir configuración del teclado</translation>
+<translation id="7958437133377816580">Obtener descuentos para <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> y más</translation>
 <translation id="7959074893852789871">El archivo contenía múltiples certificados. Algunos fueron importados:</translation>
 <translation id="7959665254555683862">Nueva pestaña de incógnito</translation>
 <translation id="7961015016161918242">Nunca</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 8a352a4a..162c30d 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1523,7 +1523,7 @@
 <translation id="2471506181342525583">Acceso a la ubicación permitido</translation>
 <translation id="2473195200299095979">Traducir esta página</translation>
 <translation id="2475982808118771221">Se ha producido un error.</translation>
-<translation id="2476578072172137802">Configuración de sitios</translation>
+<translation id="2476578072172137802">Configuración del sitio</translation>
 <translation id="2476974672882258506">Apaga Windows para desinstalar <ph name="PARALLELS_DESKTOP" />.</translation>
 <translation id="2477065602824695373">Como has configurado varios interruptores, se ha desactivado la búsqueda automática.</translation>
 <translation id="2478176599153288112">Permisos de archivos multimedia para "<ph name="EXTENSION" />"</translation>
@@ -2264,6 +2264,7 @@
 <translation id="3225319735946384299">Code Signing</translation>
 <translation id="3226487301970807183">Activa el panel lateral alineado a la izquierda</translation>
 <translation id="3227137524299004712">Micrófono</translation>
+<translation id="3232754137068452469">Aplicación web</translation>
 <translation id="3233271424239923319">Copia de seguridad de las aplicaciones y archivos de Linux</translation>
 <translation id="3238192140106069382">Conectando y verificando</translation>
 <translation id="3239373508713281971">Se ha quitado el límite de tiempo de <ph name="APP_NAME" /></translation>
@@ -2331,6 +2332,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> de descuento</translation>
 <translation id="3305389145870741612">El proceso de formateo puede tardar unos segundos. Espera...</translation>
 <translation id="3305661444342691068">Vista previa de PDF</translation>
+<translation id="3307176291962384345">Obtener descuentos para <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Se ha evitado el uso de cookies en esta página.</translation>
 <translation id="3308134619352333507">Ocultar botón</translation>
 <translation id="3308852433423051161">Cargando el Asistente de Google...</translation>
@@ -2809,6 +2811,7 @@
 <translation id="3761556954875533505">¿Quieres permitir que el sitio web edite archivos?</translation>
 <translation id="3764314093345384080">Información detallada de compilación</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicarse con un dispositivo USB}other{Comunicarse con # dispositivos USB}}</translation>
+<translation id="3764753550716962406">¿Permitir que Google use tu carrito para buscar descuentos disponibles?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Enviando <ph name="ATTACHMENTS" /> a <ph name="DEVICE_NAME" />}other{Enviando <ph name="ATTACHMENTS" /> a <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">No se ha podido leer la política del modo demo sin conexión.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3243,6 +3246,7 @@
 <translation id="4194570336751258953">Habilitar la función Tocar para hacer clic</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
 <translation id="4195814663415092787">Abrir todo como estaba antes de cerrar</translation>
+<translation id="4197917636330710075">Obtener descuentos para <ph name="MERCHANT_NAME" /> y <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Más sitios</translation>
 <translation id="4200689466366162458">Palabras personalizadas</translation>
 <translation id="4200983522494130825">Nueva pes&amp;taña</translation>
@@ -3985,7 +3989,7 @@
 <translation id="496742804571665842">Inhabilitar perfiles de eSIM</translation>
 <translation id="496888482094675990">La aplicación Archivos permite acceder rápidamente a los archivos que has guardado en Google Drive, en un almacenamiento externo o en tu dispositivo Chrome OS.</translation>
 <translation id="4971412780836297815">Abrir al finalizar</translation>
-<translation id="4971735654804503942">Protección más rápida y proactiva frente a descargas, extensiones y sitios web peligrosos. Te advierte sobre quiebras de seguridad de contraseñas. Necesita enviar datos de navegación a Google.</translation>
+<translation id="4971735654804503942">Protección más rápida y proactiva frente a descargas, extensiones y sitios web peligrosos. Te advierte sobre quiebras de seguridad de contraseñas. Requiere enviar datos de navegación a Google.</translation>
 <translation id="4972129977812092092">Editar impresora</translation>
 <translation id="4972164225939028131">Contraseña incorrecta</translation>
 <translation id="4972737347717125191">Los sitios pueden solicitar permiso para utilizar datos y dispositivos de realidad virtual</translation>
@@ -4621,6 +4625,7 @@
 <translation id="5632566673632479864">Tu cuenta <ph name="EMAIL" /> ya no puede ser tu cuenta principal. Dado que <ph name="DOMAIN" /> administra esta cuenta, tus marcadores, tu historial, tus contraseñas y otros ajustes se borrarán de este dispositivo.</translation>
 <translation id="5632592977009207922">Descargando, queda un <ph name="PERCENT_REMAINING" /> %</translation>
 <translation id="563371367637259496">Móvil</translation>
+<translation id="5634446357546764049">Ver recuerdos de tus viajes recientes y más</translation>
 <translation id="5635312199252507107">Permitir en sitios específicos</translation>
 <translation id="563535393368633106">Preguntar antes de acceder (recomendado)</translation>
 <translation id="5636996382092289526">Para utilizar la red <ph name="NETWORK_ID" />, es posible que primero tengas que <ph name="LINK_START" />acceder a la página de inicio de sesión de la red<ph name="LINK_END" />, que se abrirá de forma automática en unos segundos. Si no se abre, no podrás utilizar esa red.</translation>
@@ -4717,6 +4722,7 @@
 <translation id="5740709157181662145">Estabilidad y asistencia de hardware de <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Proyección de pantalla</translation>
 <translation id="574209121243317957">Tono</translation>
+<translation id="5745316408658560138">¿Permitir que Chrome busque descuentos personalizados para tus carritos?</translation>
 <translation id="5746169159649715125">Guardar como PDF</translation>
 <translation id="5747552184818312860">Caduca</translation>
 <translation id="5747785204778348146">Desarrollador: versión inestable</translation>
@@ -5344,6 +5350,7 @@
 <translation id="6370021412472292592">No se ha podido cargar el archivo de manifiesto.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Reintentar</translation>
+<translation id="6374635887697228982">¿Obtener descuentos?</translation>
 <translation id="6377268785556383139">1 resultado para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Aceptar y continuar</translation>
 <translation id="6382616130475191723">Se ha permitido que lea y modifique <ph name="SITE_NAME" /></translation>
@@ -6267,7 +6274,7 @@
 <translation id="7339898014177206373">Nueva ventana</translation>
 <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> se muestra ahora en pantalla completa.</translation>
 <translation id="7340650977506865820">El sitio web está compartiendo tu pantalla</translation>
-<translation id="7340757554212515731">Envía automáticamente informes sobre fallos, así como datos de diagnóstico y uso a Google</translation>
+<translation id="7340757554212515731">Automáticamente envía informes sobre fallos, así como datos de diagnóstico y uso, a Google</translation>
 <translation id="7341834142292923918">Quiere acceder a este sitio web</translation>
 <translation id="7343372807593926528">Describe el problema antes de enviar tus comentarios.</translation>
 <translation id="7345706641791090287">Confirma tu contraseña</translation>
@@ -6910,6 +6917,7 @@
 <translation id="7956373551960864128">Tus impresoras guardadas</translation>
 <translation id="7957074856830851026">Ver información del dispositivo, como el número de serie o el ID de recurso</translation>
 <translation id="7957615753207896812">Abrir la configuración del teclado</translation>
+<translation id="7958437133377816580">Obtener descuentos para <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> y más</translation>
 <translation id="7959074893852789871">El archivo contenía varios certificados, pero algunos de ellos no se han importado:</translation>
 <translation id="7959665254555683862">Nueva pestaña de incógnito</translation>
 <translation id="7961015016161918242">Nunca</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d92a43e..4be5e109 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -2270,6 +2270,7 @@
 <translation id="3225319735946384299">Koodsigneerimine</translation>
 <translation id="3226487301970807183">Vasakule joondatud külgpaneeli kuvamine/peitmine</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Veebirakendus</translation>
 <translation id="3233271424239923319">Linuxi rakenduste ja failide varundamine</translation>
 <translation id="3238192140106069382">Ühendamine ja kinnitamine</translation>
 <translation id="3239373508713281971">Rakenduse <ph name="APP_NAME" /> ajapiirang eemaldati</translation>
@@ -2337,6 +2338,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> odavam</translation>
 <translation id="3305389145870741612">Vormindusprotsessile võib kuluda paar sekundit. Oodake.</translation>
 <translation id="3305661444342691068">Ava PDF-i eelvaade</translation>
+<translation id="3307176291962384345">Hankige kaupmehe <ph name="MERCHANT_NAME" /> juures allahindlusi</translation>
 <translation id="3308116878371095290">Sellel lehel takistati küpsiste seadistamine.</translation>
 <translation id="3308134619352333507">Nupp Peida</translation>
 <translation id="3308852433423051161">Google'i assistendi laadimine …</translation>
@@ -2815,6 +2817,7 @@
 <translation id="3761556954875533505">Kas lubada saidil faile muuta?</translation>
 <translation id="3764314093345384080">Üksikasjalik järguteave</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Ühendus USB-seadmega}other{Ühendus # USB-seadmega}}</translation>
+<translation id="3764753550716962406">Kas lubate Google'il kasutada teie ostukorvi sisu, et leida pakutavaid allahindlusi?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Andmete (<ph name="ATTACHMENTS" />) saatmine seadmesse <ph name="DEVICE_NAME" />}other{Andmete (<ph name="ATTACHMENTS" />) saatmine seadmesse <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Võrguühenduseta demorežiimi reeglit ei saanud lugeda.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3250,6 +3253,7 @@
 <translation id="4194570336751258953">Luba klõpsamine</translation>
 <translation id="4195643157523330669">Ava uuel vahelehel</translation>
 <translation id="4195814663415092787">Jätka sealt, kus pooleli jäin</translation>
+<translation id="4197917636330710075">Hankige kaupmeeste <ph name="MERCHANT_NAME" /> ja <ph name="MERCHANT_NAME" /> juures allahindlusi</translation>
 <translation id="4198268995694216131">Täiendavad saidid</translation>
 <translation id="4200689466366162458">Kohandatud sõnad</translation>
 <translation id="4200983522494130825">Uus &amp;vaheleht</translation>
@@ -4628,6 +4632,7 @@
 <translation id="5632566673632479864">Teie konto <ph name="EMAIL" /> ei ole enam peamise kontona lubatud. Kuna seda kontot haldab domeen <ph name="DOMAIN" />, kustutatakse sellest seadmest teie järjehoidjad, ajalugu, paroolid ja muud seaded.</translation>
 <translation id="5632592977009207922">Allalaadimine, <ph name="PERCENT_REMAINING" />% jäänud</translation>
 <translation id="563371367637259496">Mobiil</translation>
+<translation id="5634446357546764049">Vaadake mälestusi oma hiljutistest reisidest ja muust</translation>
 <translation id="5635312199252507107">Luba konkreetsetel saitidel</translation>
 <translation id="563535393368633106">Küsib enne juurdepääsu hankimist (soovitatav)</translation>
 <translation id="5636996382092289526">Võimalik, et võrgu <ph name="NETWORK_ID" /> kasutamiseks tuleb teil esmalt <ph name="LINK_START" />külastada võrgu sisselogimislehte<ph name="LINK_END" />, mis avaneb mõne sekundi pärast automaatselt. Kui see ei avane, ei saa võrku kasutada.</translation>
@@ -4724,6 +4729,7 @@
 <translation id="5740709157181662145">Seadme <ph name="DEVICE_OS" /> riistvaratugi ja stabiilsus</translation>
 <translation id="574104302965107104">Ekraanikuva peegeldamine</translation>
 <translation id="574209121243317957">Helikõrgus</translation>
+<translation id="5745316408658560138">Kas lubate Chrome'il teie ostukorvide sisu jaoks isikupärastatud allahindlusi otsida?</translation>
 <translation id="5746169159649715125">Salvesta PDF-ina</translation>
 <translation id="5747552184818312860">Aegub</translation>
 <translation id="5747785204778348146">Arendaja – ebastabiilne</translation>
@@ -5351,6 +5357,7 @@
 <translation id="6370021412472292592">Manifesti laadimine ebaõnnestus.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Proovi uuesti</translation>
+<translation id="6374635887697228982">Kas saada allahindlusi?</translation>
 <translation id="6377268785556383139">1 tulemus otsingule „<ph name="SEARCH_TEXT" />”</translation>
 <translation id="6380143666419481200">Nõustu ja jätka</translation>
 <translation id="6382616130475191723">Lubatud, et lugeda ja muuta saiti <ph name="SITE_NAME" /></translation>
@@ -6917,6 +6924,7 @@
 <translation id="7956373551960864128">Teie salvestatud printerid</translation>
 <translation id="7957074856830851026">Seadme teabe (nt seerianumbri või vara ID) vaatamine</translation>
 <translation id="7957615753207896812">Klaviatuuriseadme seadete avamine</translation>
+<translation id="7958437133377816580">Hankige kaupmeeste <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> ja teiste juures allahindlusi</translation>
 <translation id="7959074893852789871">Fail sisaldas mitut sertifikaati, mõnda neist ei imporditud:</translation>
 <translation id="7959665254555683862">Uus inkognito &amp;vaheleht</translation>
 <translation id="7961015016161918242">Mitte kunagi</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 54f7f37..fdb2e9a 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -2263,6 +2263,7 @@
 <translation id="3225319735946384299">Kode-sinadura</translation>
 <translation id="3226487301970807183">Erakutsi/Ezkutatu ezkerrean lerrokatutako alboko panela</translation>
 <translation id="3227137524299004712">Mikrofonoa</translation>
+<translation id="3232754137068452469">Sareko aplikazioa</translation>
 <translation id="3233271424239923319">Egin Linux aplikazioen eta fitxategien babeskopiak</translation>
 <translation id="3238192140106069382">Konektatzen eta egiaztatzen</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> aplikazioaren denbora-muga kendu da</translation>
@@ -2331,6 +2332,7 @@
 <translation id="3304212451103136496">Deskontua: <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">Formateatzeko prozesuak pare bat segundo har ditzake. Mesedez, itxaron.</translation>
 <translation id="3305661444342691068">Ireki PDF aurrebistan</translation>
+<translation id="3307176291962384345">Lortu <ph name="MERCHANT_NAME" /> saltzailearen deskontuak</translation>
 <translation id="3308116878371095290">Orriari cookieak ezartzeko aukera ukatu zaio.</translation>
 <translation id="3308134619352333507">Ezkutatu botoia</translation>
 <translation id="3308852433423051161">Google-ren Laguntzailea kargatzen…</translation>
@@ -2809,6 +2811,7 @@
 <translation id="3761556954875533505">Fitxategiak editatzeko baimena eman nahi diozu webguneari?</translation>
 <translation id="3764314093345384080">Konpilazioari buruzko informazio xehatua</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komunikatu USB bidezko gailu batekin}other{Komunikatu USB bidezko # gailurekin}}</translation>
+<translation id="3764753550716962406">Saskietan deskontu pertsonalizatuak bilatzen utzi nahi diozu Google-ri?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> <ph name="DEVICE_NAME" /> gailura bidaltzen}other{<ph name="ATTACHMENTS" /> <ph name="DEVICE_NAME" /> gailura bidaltzen}}</translation>
 <translation id="3765246971671567135">Ezin izan da irakurri konexiorik gabeko demo moduaren gidalerroa.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3244,6 +3247,7 @@
 <translation id="4194570336751258953">Gaitu sakatuta klik egiteko aukera</translation>
 <translation id="4195643157523330669">Ireki fitxa berri batean</translation>
 <translation id="4195814663415092787">Jarraitu utzi zenuen tokitik</translation>
+<translation id="4197917636330710075">Lortu <ph name="MERCHANT_NAME" /> eta <ph name="MERCHANT_NAME" /> saltzaileen deskontuak</translation>
 <translation id="4198268995694216131">Webgune gehigarriak</translation>
 <translation id="4200689466366162458">Hitz pertsonalizatuak</translation>
 <translation id="4200983522494130825">Fi&amp;txa berria</translation>
@@ -4622,6 +4626,7 @@
 <translation id="5632566673632479864"><ph name="EMAIL" /> kontua ezin da erabili jada kontu nagusi gisa. Kontu hau <ph name="DOMAIN" /> domeinuak kudeatzen duenez, kendu egingo dira gailutik laster-markak, historia, pasahitzak eta bestelako ezarpenak.</translation>
 <translation id="5632592977009207922">Deskargatzen; % <ph name="PERCENT_REMAINING" /> geratzen da</translation>
 <translation id="563371367637259496">Sare mugikorra</translation>
+<translation id="5634446357546764049">Ikusi berriki egindako bidaiei buruzko oroitzapenak eta beste gauza batzuk</translation>
 <translation id="5635312199252507107">Eman webgune jakin batzuetako datuak irakurri eta aldatzeko baimena</translation>
 <translation id="563535393368633106">Galdetu atzitu aurretik (gomendatua)</translation>
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> erabiltzeko, agian <ph name="LINK_START" />sarearen saio-hasierako orrira<ph name="LINK_END" /> joan beharko zara; segundo gutxi barru irekiko da hori automatikoki. Hala ez bada, ezin izango duzu sarea erabili.</translation>
@@ -4718,6 +4723,7 @@
 <translation id="5740709157181662145"><ph name="DEVICE_OS" /> sistemaren bateragarritasuna eta egonkortasuna</translation>
 <translation id="574104302965107104">Pantaila islatzeko modua</translation>
 <translation id="574209121243317957">Tonua</translation>
+<translation id="5745316408658560138">Saskietan deskontu pertsonalizatuak bilatzen utzi nahi diozu Chrome-ri?</translation>
 <translation id="5746169159649715125">Gorde PDF gisa</translation>
 <translation id="5747552184818312860">Iraungitze-data</translation>
 <translation id="5747785204778348146">Garatzailea; egoera ezegonkorra</translation>
@@ -5346,6 +5352,7 @@
 <translation id="6370021412472292592">Ezin izan da manifestua kargatu.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Saiatu berriro</translation>
+<translation id="6374635887697228982">Deskontuak lortu nahi dituzu?</translation>
 <translation id="6377268785556383139">"<ph name="SEARCH_TEXT" />" bilaketak emaitza bat du</translation>
 <translation id="6380143666419481200">Onartu eta jarraitu</translation>
 <translation id="6382616130475191723"><ph name="SITE_NAME" /> irakurtzeko eta aldatzeko baimena eman da</translation>
@@ -6911,6 +6918,7 @@
 <translation id="7956373551960864128">Gordetako inprimagailuak</translation>
 <translation id="7957074856830851026">Ikusi gailuaren informazioa, hala nola serie-zenbakia edo baliabidearen IDa</translation>
 <translation id="7957615753207896812">Ireki teklatuaren ezarpenak</translation>
+<translation id="7958437133377816580">Lortu <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> eta saltzaile gehiagoren deskontuak</translation>
 <translation id="7959074893852789871">Fitxategiak ziurtagiri bat baino gehiago ditu eta horietako batzuk inportatu dira:</translation>
 <translation id="7959665254555683862">Ezkutuko moduko beste fitxa bat</translation>
 <translation id="7961015016161918242">Inoiz ez</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 47ddd80..7fd4dff 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -2276,6 +2276,7 @@
 <translation id="3225319735946384299">امضای کد</translation>
 <translation id="3226487301970807183">پنهان/نمایان کردن پانل کناری ترازشده به‌چپ</translation>
 <translation id="3227137524299004712">میکروفن</translation>
+<translation id="3232754137068452469">برنامه وب</translation>
 <translation id="3233271424239923319">‏پشتیبان‌گیری برنامه‌ها و فایل‌های Linux</translation>
 <translation id="3238192140106069382">درحال اتصال و تأیید</translation>
 <translation id="3239373508713281971">محدودیت زمانی برای <ph name="APP_NAME" /> برداشته شده است</translation>
@@ -2314,6 +2315,7 @@
 <translation id="3277691515294482687">‏پیش از ارتقا دادن Linux، از برنامه‌ها و فایل‌های من در پوشه «فایل‌های من» پشتیبان‌گیری شود.</translation>
 <translation id="3278001907972365362">‏حساب(های) Google شما به توجه نیاز دارد</translation>
 <translation id="3278800075417428224">‏مدیریت زبان‌ها در تنظیمات CloudReady 2.0</translation>
+<translation id="3278928434075969895">‏این نمایه از تنظیمات پراکسی Chrome OS استفاده می‌کند.</translation>
 <translation id="3279092821516760512">وقتی مخاطبین انتخابی نزدیک شما باشند می‌توانند با شما هم‌رسانی کنند. تا درخواست را نپذیرید، انتقال شروع نخواهد شد.</translation>
 <translation id="3279230909244266691">این فرایند ممکن است چند دقیقه طول بکشد. درحال شروع دستگاه مجازی.</translation>
 <translation id="3280237271814976245">ذخیره &amp;بعنوان</translation>
@@ -4887,6 +4889,7 @@
 <translation id="5909379458939060601">این نمایه و داده‌های مرور حذف شود؟</translation>
 <translation id="5910363049092958439">ذ&amp;خیره فایل تصویری به‌عنوان...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> آفلاین است</translation>
+<translation id="5911505723657992440">‏استفاده از تنظیمات پراکسی Chrome OS برای این نمایه.</translation>
 <translation id="5911533659001334206">نمایشگر میان‌بر</translation>
 <translation id="5914724413750400082">مدول (<ph name="MODULUS_NUM_BITS" /> بیت):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 1eb0ba4c..8bf2b88e 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -2278,6 +2278,7 @@
 <translation id="3225319735946384299">Koodin allekirjoitus</translation>
 <translation id="3226487301970807183">Näytä/piilota vasemmalle tasattu sivupaneeli</translation>
 <translation id="3227137524299004712">Mikrofoni</translation>
+<translation id="3232754137068452469">Verkkosovellus</translation>
 <translation id="3233271424239923319">Varmuuskopioi Linux-sovellukset ja ‑tiedostot</translation>
 <translation id="3238192140106069382">Yhdistetään ja tarkistetaan</translation>
 <translation id="3239373508713281971">Aikaraja poistettu: <ph name="APP_NAME" /></translation>
@@ -2316,6 +2317,7 @@
 <translation id="3277691515294482687">Varmuuskopioi sovellukseni ja tiedostoni Omiin tiedostoihin ennen Linuxin päivittämistä.</translation>
 <translation id="3278001907972365362">Google-tilisi vaativat toimenpiteitä</translation>
 <translation id="3278800075417428224">Muokkaa kielivalintoja CloudReady 2.0:n asetuksissa</translation>
+<translation id="3278928434075969895">Tämä profiili käyttää Chrome-käyttöjärjestelmän välityspalvelimen asetuksia.</translation>
 <translation id="3279092821516760512">Valitut kontaktit voivat jakaa sinulle sisältöä ollessaan lähistöllä. Siirtoa ei aloiteta ilman hyväksyntääsi.</translation>
 <translation id="3279230909244266691">Tämä voi kestää muutaman minuutin. Käynnistetään virtuaalikonetta.</translation>
 <translation id="3280237271814976245">Tallenna &amp;nimellä...</translation>
@@ -4885,6 +4887,7 @@
 <translation id="5909379458939060601">Poistetaanko tämä profiili ja selausdata?</translation>
 <translation id="5910363049092958439">T&amp;allenna kuva nimellä...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> on offline-tilassa</translation>
+<translation id="5911505723657992440">Käytä Chrome-käyttöjärjestelmän välityspalvelimen asetuksia tässä profiilissa.</translation>
 <translation id="5911533659001334206">Pikanäppäimet</translation>
 <translation id="5914724413750400082">Modulus (<ph name="MODULUS_NUM_BITS" /> bittiä):
 <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index a499e83..58b77d6a 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -2280,6 +2280,7 @@
 <translation id="3225319735946384299">Pag-sign sa Code</translation>
 <translation id="3226487301970807183">I-toggle ang panel sa gilid na naka-align sa kaliwa</translation>
 <translation id="3227137524299004712">Mikropono</translation>
+<translation id="3232754137068452469">Web App</translation>
 <translation id="3233271424239923319">I-back up ang mga app at file ng Linux</translation>
 <translation id="3238192140106069382">Kumokonekta at nagve-verify</translation>
 <translation id="3239373508713281971">Inalis ang limitasyon sa oras para sa <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index a2c82af6..c5191bc1 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -2266,6 +2266,7 @@
 <translation id="3225319735946384299">Signature de code</translation>
 <translation id="3226487301970807183">Activer ou désactiver le panneau latéral aligné à gauche</translation>
 <translation id="3227137524299004712">Microphone</translation>
+<translation id="3232754137068452469">Application Web</translation>
 <translation id="3233271424239923319">Sauvegarder les applications et les fichiers Linux</translation>
 <translation id="3238192140106069382">Connexion et vérification en cours…</translation>
 <translation id="3239373508713281971">Limite de temps supprimée pour <ph name="APP_NAME" /></translation>
@@ -2333,6 +2334,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> de rabais</translation>
 <translation id="3305389145870741612">Le processus de formatage peut prendre quelques secondes. Veuillez patienter.</translation>
 <translation id="3305661444342691068">Ouvrir le PDF dans Aperçu</translation>
+<translation id="3307176291962384345">Obtenez des rabais pour <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Cette page a été empêchée d'enregistrer des témoins.</translation>
 <translation id="3308134619352333507">Bouton Masquer</translation>
 <translation id="3308852433423051161">Chargement de l'Assistant Google en cours…</translation>
@@ -2811,6 +2813,7 @@
 <translation id="3761556954875533505">Autoriser le site à modifier les fichiers?</translation>
 <translation id="3764314093345384080">Renseignements détaillés sur la version</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Communique avec un appareil USB}one{Communique avec # appareil USB}other{Communique avec # appareils USB}}</translation>
+<translation id="3764753550716962406">Laisser Google accéder à votre panier pour trouver des rabais?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Envoi de <ph name="ATTACHMENTS" /> à l'appareil <ph name="DEVICE_NAME" /> en cours…}one{Envoi de <ph name="ATTACHMENTS" /> à l'appareil <ph name="DEVICE_NAME" /> en cours…}other{Envoi de <ph name="ATTACHMENTS" /> à l'appareil <ph name="DEVICE_NAME" /> en cours…}}</translation>
 <translation id="3765246971671567135">Impossible de lire la politique du mode démo hors ligne.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3246,6 +3249,7 @@
 <translation id="4194570336751258953">Activer la fonction « Toucher l'écran pour cliquer »</translation>
 <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation>
 <translation id="4195814663415092787">Reprendre vos activités en ligne là où vous vous étiez arrêté</translation>
+<translation id="4197917636330710075">Obtenez des rabais pour <ph name="MERCHANT_NAME" /> et <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Sites supplémentaires</translation>
 <translation id="4200689466366162458">Mots personnalisés</translation>
 <translation id="4200983522494130825">Nouvel ongle&amp;t</translation>
@@ -4624,6 +4628,7 @@
 <translation id="5632566673632479864">Votre compte <ph name="EMAIL" /> n'est plus autorisé en tant que compte principal. Comme ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et d'autres paramètres seront effacés de cet appareil.</translation>
 <translation id="5632592977009207922">Téléchargement en cours, il reste <ph name="PERCENT_REMAINING" /> %…</translation>
 <translation id="563371367637259496">Cellulaire</translation>
+<translation id="5634446357546764049">Découvrez des souvenirs de vos voyages récents et plus encore</translation>
 <translation id="5635312199252507107">Autoriser sur des sites particuliers</translation>
 <translation id="563535393368633106">Demander avant d'accéder (recommandé)</translation>
 <translation id="5636996382092289526">Pour utiliser <ph name="NETWORK_ID" />, vous devez d'abord <ph name="LINK_START" />accéder à la page de connexion du réseau<ph name="LINK_END" />, qui s'ouvrira automatiquement dans quelques secondes. Dans le cas contraire, ce réseau ne pourra pas être utilisé pour la connexion Internet.</translation>
@@ -4720,6 +4725,7 @@
 <translation id="5740709157181662145">prise en charge et stabilité du matériel de <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Duplication d'écran</translation>
 <translation id="574209121243317957">Timbre de la voix</translation>
+<translation id="5745316408658560138">Laisser Chrome trouver des rabais personnalisés dans vos paniers?</translation>
 <translation id="5746169159649715125">Enregistrer au format PDF</translation>
 <translation id="5747552184818312860">Date d'expiration</translation>
 <translation id="5747785204778348146">Développeur (instable)</translation>
@@ -5347,6 +5353,7 @@
 <translation id="6370021412472292592">Échec de chargement du fichier manifeste.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Réessayer</translation>
+<translation id="6374635887697228982">Obtenir des rabais?</translation>
 <translation id="6377268785556383139">1 résultat trouvé pour « <ph name="SEARCH_TEXT" /> »</translation>
 <translation id="6380143666419481200">Accepter et continuer</translation>
 <translation id="6382616130475191723">Est autorisé à lire et à modifier <ph name="SITE_NAME" /></translation>
@@ -6913,6 +6920,7 @@
 <translation id="7956373551960864128">Vos imprimantes enregistrées</translation>
 <translation id="7957074856830851026">Consulter des renseignements sur l'appareil, comme son numéro de série ou son identifiant d'appareil</translation>
 <translation id="7957615753207896812">Ouvrir les paramètres du clavier de l'appareil</translation>
+<translation id="7958437133377816580">Obtenez des rabais pour <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> et plus encore</translation>
 <translation id="7959074893852789871">Le fichier contenait plusieurs certificats, dont certains n'ont pas été importés :</translation>
 <translation id="7959665254555683862">&amp;Nouvel onglet de navigation privée</translation>
 <translation id="7961015016161918242">Jamais</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index cb902ae..28ed01ff 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -2265,6 +2265,7 @@
 <translation id="3225319735946384299">Signature du code</translation>
 <translation id="3226487301970807183">Activer/désactiver le panneau latéral aligné à gauche</translation>
 <translation id="3227137524299004712">Micro</translation>
+<translation id="3232754137068452469">Application Web</translation>
 <translation id="3233271424239923319">Sauvegarder des applications et fichiers Linux</translation>
 <translation id="3238192140106069382">Connexion et validation…</translation>
 <translation id="3239373508713281971">Limite de temps supprimée pour <ph name="APP_NAME" /></translation>
@@ -2332,6 +2333,7 @@
 <translation id="3304212451103136496">- <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">Le processus de formatage peut prendre quelques secondes. Veuillez patienter.</translation>
 <translation id="3305661444342691068">Ouvrir le PDF dans Aperçu</translation>
+<translation id="3307176291962384345">Obtenir des remises pour <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Le stockage des cookies n'est pas autorisé pour cette page.</translation>
 <translation id="3308134619352333507">Masquer le bouton</translation>
 <translation id="3308852433423051161">Chargement de l'Assistant Google…</translation>
@@ -2810,6 +2812,7 @@
 <translation id="3761556954875533505">Autoriser le site à modifier les fichiers ?</translation>
 <translation id="3764314093345384080">Informations détaillées sur la version</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Communication avec un appareil USB}one{Communication avec # appareil USB}other{Communication avec # appareils USB}}</translation>
+<translation id="3764753550716962406">Autoriser Google à utiliser votre panier pour vous proposer les remises disponibles ?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Envoi de <ph name="ATTACHMENTS" /> à l'appareil "<ph name="DEVICE_NAME" />"}one{Envoi de <ph name="ATTACHMENTS" /> à l'appareil "<ph name="DEVICE_NAME" />"}other{Envoi de <ph name="ATTACHMENTS" /> à l'appareil "<ph name="DEVICE_NAME" />"}}</translation>
 <translation id="3765246971671567135">Impossible de lire la règle du mode de démonstration hors connexion.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3245,6 +3248,7 @@
 <translation id="4194570336751258953">Activer la fonction "Taper pour cliquer"</translation>
 <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation>
 <translation id="4195814663415092787">Reprendre où vous avez arrêté</translation>
+<translation id="4197917636330710075">Obtenir des remises pour <ph name="MERCHANT_NAME" /> et <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Autres sites</translation>
 <translation id="4200689466366162458">Mots personnalisés</translation>
 <translation id="4200983522494130825">Nouvel ongle&amp;t</translation>
@@ -4624,6 +4628,7 @@
 <translation id="5632566673632479864">Votre compte <ph name="EMAIL" /> n'est plus autorisé comme compte principal. Étant donné que ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et les autres paramètres seront effacés de cet appareil.</translation>
 <translation id="5632592977009207922">Téléchargement en cours, <ph name="PERCENT_REMAINING" /> % restant</translation>
 <translation id="563371367637259496">Mobile</translation>
+<translation id="5634446357546764049">Afficher les souvenirs de vos voyages récents et bien plus encore</translation>
 <translation id="5635312199252507107">Autoriser sur des sites spécifiques</translation>
 <translation id="563535393368633106">Demander l'autorisation avant d'accéder (recommandé)</translation>
 <translation id="5636996382092289526">Pour utiliser <ph name="NETWORK_ID" />, vous devez d'abord <ph name="LINK_START" />accéder à la page de connexion du réseau<ph name="LINK_END" />, qui s'ouvrira automatiquement dans quelques secondes. Dans le cas contraire, ce réseau ne pourra pas être utilisé pour la connexion Internet.</translation>
@@ -4720,6 +4725,7 @@
 <translation id="5740709157181662145">Compatibilité et stabilité du matériel <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Duplication d'écran</translation>
 <translation id="574209121243317957">Ton</translation>
+<translation id="5745316408658560138">Autoriser Chrome à vous proposer des remises personnalisées sur vos paniers ?</translation>
 <translation id="5746169159649715125">Enregistrer au format PDF</translation>
 <translation id="5747552184818312860">Date d'expiration</translation>
 <translation id="5747785204778348146">Développeur (instable)</translation>
@@ -5347,6 +5353,7 @@
 <translation id="6370021412472292592">Impossible de charger le fichier manifeste.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Réessayer</translation>
+<translation id="6374635887697228982">Obtenir des remises ?</translation>
 <translation id="6377268785556383139">1 résultat pour "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Accepter et continuer</translation>
 <translation id="6382616130475191723">Autorisées à consulter et modifier <ph name="SITE_NAME" /></translation>
@@ -6913,6 +6920,7 @@
 <translation id="7956373551960864128">Vos imprimantes enregistrées</translation>
 <translation id="7957074856830851026">Voir les informations sur l'appareil telles que son numéro de série ou son identifiant</translation>
 <translation id="7957615753207896812">Ouvrir les paramètres du clavier</translation>
+<translation id="7958437133377816580">Obtenir des remises pour <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> et d'autres</translation>
 <translation id="7959074893852789871">Le fichier contenait plusieurs certificats, dont certains n'ont pas été importés :</translation>
 <translation id="7959665254555683862">Nouvel ongle&amp;t de navigation privée</translation>
 <translation id="7961015016161918242">Jamais</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index ecb93e9..938a4bb 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -2262,6 +2262,7 @@
 <translation id="3225319735946384299">Sinatura de código</translation>
 <translation id="3226487301970807183">Activar/Desactivar panel lateral aliñado á esquerda</translation>
 <translation id="3227137524299004712">Micrófono</translation>
+<translation id="3232754137068452469">Aplicación web</translation>
 <translation id="3233271424239923319">Crea unha copia de seguranza das aplicacións e os ficheiros de Linux</translation>
 <translation id="3238192140106069382">Conectando e verificando</translation>
 <translation id="3239373508713281971">Quitouse o límite de tempo de <ph name="APP_NAME" /></translation>
@@ -2329,6 +2330,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> de desconto</translation>
 <translation id="3305389145870741612">O proceso de formatado pode tardar varios segundos. Agarda.</translation>
 <translation id="3305661444342691068">Abrir PDF en vista previa</translation>
+<translation id="3307176291962384345">Obter descontos para <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Impediuse que esta páxina establecese cookies.</translation>
 <translation id="3308134619352333507">Ocultar botón</translation>
 <translation id="3308852433423051161">Estase cargando o Asistente de Google...</translation>
@@ -2807,6 +2809,7 @@
 <translation id="3761556954875533505">Queres permitir que o sitio edite os ficheiros?</translation>
 <translation id="3764314093345384080">Información detallada da compilación</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicar cun dispositivo USB}other{Comunicar con # dispositivos USB}}</translation>
+<translation id="3764753550716962406">Queres permitir que Google use os artigos do teu carro para buscar descontos?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Enviando <ph name="ATTACHMENTS" /> a: <ph name="DEVICE_NAME" />}other{Enviando <ph name="ATTACHMENTS" /> a: <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Non se puido ler a política do modo de demostración sen conexión.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3242,6 +3245,7 @@
 <translation id="4194570336751258953">Activar a función de tocar para facer clic</translation>
 <translation id="4195643157523330669">Abrir en pestana nova</translation>
 <translation id="4195814663415092787">Continuar onde o deixaches</translation>
+<translation id="4197917636330710075">Obter descontos para <ph name="MERCHANT_NAME" /> e <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Máis sitios</translation>
 <translation id="4200689466366162458">Palabras personalizadas</translation>
 <translation id="4200983522494130825">Nova pes&amp;tana</translation>
@@ -4620,6 +4624,7 @@
 <translation id="5632566673632479864">A túa conta <ph name="EMAIL" /> xa non é a principal. Dado que a xestiona <ph name="DOMAIN" />, eliminaranse deste dispositivo os teus marcadores, historial, contrasinais e outras opcións de configuración.</translation>
 <translation id="5632592977009207922">Descargando, porcentaxe restante: <ph name="PERCENT_REMAINING" /> %</translation>
 <translation id="563371367637259496">Móbil</translation>
+<translation id="5634446357546764049">Mira as lembranzas das túas viaxes recentes e moito máis</translation>
 <translation id="5635312199252507107">Permitir en sitios específicos</translation>
 <translation id="563535393368633106">Preguntar antes de acceder (recomendado)</translation>
 <translation id="5636996382092289526">Para utilizar <ph name="NETWORK_ID" /> é posible que primeiro necesites <ph name="LINK_START" />visitar a páxina de inicio de sesión da rede<ph name="LINK_END" />, que se abrirá automaticamente dentro duns segundos. De non ser así, a rede non se poderá usar.</translation>
@@ -4716,6 +4721,7 @@
 <translation id="5740709157181662145">Compatibilidade e estabilidade do hardware (<ph name="DEVICE_OS" />)</translation>
 <translation id="574104302965107104">Proxección da pantalla</translation>
 <translation id="574209121243317957">Ton</translation>
+<translation id="5745316408658560138">Queres permitir que Chrome busque descontos personalizados para os artigos dos teus carros?</translation>
 <translation id="5746169159649715125">Gardar como PDF</translation>
 <translation id="5747552184818312860">Data de caducidade</translation>
 <translation id="5747785204778348146">Programador: inestable</translation>
@@ -5343,6 +5349,7 @@
 <translation id="6370021412472292592">Erro ao cargar o manifesto.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Tentar de novo</translation>
+<translation id="6374635887697228982">Queres obter descontos?</translation>
 <translation id="6377268785556383139">1 resultado para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Aceptar e continuar</translation>
 <translation id="6382616130475191723">Con permiso para ler e cambiar <ph name="SITE_NAME" /></translation>
@@ -6908,6 +6915,7 @@
 <translation id="7956373551960864128">As túas impresoras gardadas</translation>
 <translation id="7957074856830851026">Consultar información do dispositivo, como o seu número de serie ou código de identificación de recurso</translation>
 <translation id="7957615753207896812">Abrir a configuración do teclado do dispositivo</translation>
+<translation id="7958437133377816580">Obter descontos para <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> e máis</translation>
 <translation id="7959074893852789871">O ficheiro contiña varios certificados, algúns dos cales non se importaron:</translation>
 <translation id="7959665254555683862">Nova pestana do modo de incógni&amp;to</translation>
 <translation id="7961015016161918242">Nunca</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index baf5d8d..08141c0 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1237,6 +1237,7 @@
 <translation id="2203088913459920044">નામમાં અક્ષર, સંખ્યા અને વિશેષ વર્ણનો ઉપયોગ થઈ શકે છે</translation>
 <translation id="220321590587754225">કનેક્ટ કરી શકાયું નથી. ફરી પ્રયાસ કરો.</translation>
 <translation id="2204034823255629767">તમે જે કંઈ લખો છો તેને વાંચો અને બદલો</translation>
+<translation id="2207115382329026341">તમારા ફોન પરથી ઍપ સ્ટ્રીમિંગ સેટિંગ ચાલુ કરો.</translation>
 <translation id="220858061631308971">કૃપા કરીને "<ph name="DEVICE_NAME" />" પર આ પિન કોડ દાખલ કરો:</translation>
 <translation id="2210462644007531147">ઇન્સ્ટૉલેશન પૂર્ણ કરી શકાયું નથી</translation>
 <translation id="2212565012507486665">કુકીને મંજૂરી આપો</translation>
@@ -1428,6 +1429,7 @@
 <translation id="2367972762794486313">ઍપ્લિકેશનો બતાવો</translation>
 <translation id="236939127352773362">જ્યારે નજીકના ડિવાઇસ શેર કરી રહ્યાં હોય</translation>
 <translation id="2371076942591664043">&amp;પૂર્ણ થાય ત્યારે ખોલો</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> લૉન્ચ કરી શક્યા નથી</translation>
 <translation id="2373666622366160481">પેપરના કદ મુજબ પ્રિન્ટ કરો</translation>
 <translation id="2375406435414127095">તમારા ફોન સાથે કનેક્ટ કરો</translation>
 <translation id="2377588536920405462">તમે તમારા ડિવાઇસ પરનાં મુખ્ય સ્થાન સેટિંગને બંધ કરીને સ્થાન સેવાને બંધ કરી શકો છો. તમે સ્થાન સેટિંગમાં સ્થાન સેવા માટે વાઇ-ફાઇ, મોબાઇલ નેટવર્ક અને સેન્સરનો ઉપયોગ પણ બંધ કરી શકો છો.</translation>
@@ -2262,6 +2264,7 @@
 <translation id="3225319735946384299">કોડ સાઇનિંગ </translation>
 <translation id="3226487301970807183">ડાબેથી સંરેખિત બાજુની પૅનલ ટૉગલ કરો</translation>
 <translation id="3227137524299004712">માઇક્રોફોન</translation>
+<translation id="3232754137068452469">વેબ ઍપ</translation>
 <translation id="3233271424239923319">Linux ઍપ અને ફાઇલો</translation>
 <translation id="3238192140106069382">કનેક્ટ કરી રહ્યું છે અને ચકાસી રહ્યું છે</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> માટેની સમયમર્યાદા કાઢી નાખી</translation>
@@ -2300,6 +2303,7 @@
 <translation id="3277691515294482687">Linuxને અપગ્રેડ કરતાં પહેલાં મારી ઍપ અને ફાઇલોનું મારી ફાઇલો ફોલ્ડરમાં બૅકઅપ લો.</translation>
 <translation id="3278001907972365362">તમારા Google એકાઉન્ટ પર ધ્યાન આપવાની જરૂર છે</translation>
 <translation id="3278800075417428224">CloudReady 2.0 સેટિંગમાં ભાષાઓને મેનેજ કરો</translation>
+<translation id="3278928434075969895">આ પ્રોફાઇલ Chrome OS પ્રૉક્સી સેટિંગનો ઉપયોગ કરે છે.</translation>
 <translation id="3279092821516760512">નજીકમાં હોય ત્યારે પસંદ કરેલા સંપર્કો તમારી સાથે શેર કરી શકે છે. તમે સ્વીકારશો નહીં ત્યાં સુધી ટ્રાન્સફર શરૂ થઈ શકશે નહીં.</translation>
 <translation id="3279230909244266691">આ પ્રક્રિયામાં થોડો સમય લાગી શકે છે. વર્ચ્યુઅલ મશીન શરૂ કરી રહ્યાં છીએ.</translation>
 <translation id="3280237271814976245">આ રીતે સાચવો...</translation>
@@ -4872,6 +4876,7 @@
 <translation id="5909379458939060601">શું આ પ્રોફાઇલ અને બ્રાઉઝિંગ ડેટા ડિલીટ કરીએ?</translation>
 <translation id="5910363049092958439">છબીને આ રૂપે સા&amp;ચવો...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ઑફલાઇન છે</translation>
+<translation id="5911505723657992440">આ પ્રોફાઇલ માટે Chrome OS પ્રૉક્સી સેટિંગનો ઉપયોગ કરો.</translation>
 <translation id="5911533659001334206">શૉર્ટકટ દર્શક</translation>
 <translation id="5914724413750400082">મૉડ્યૂલ્સ (<ph name="MODULUS_NUM_BITS" /> બિટ્સ):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 0edb787f..20465bf 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1253,6 +1253,7 @@
 <translation id="2203088913459920044">नाम में अक्षर, संख्याएं, और विशेष वर्ण इस्तेमाल किए जा सकते हैं</translation>
 <translation id="220321590587754225">कनेक्ट नहीं किया जा सका. फिर से कोशिश करें.</translation>
 <translation id="2204034823255629767">आप जो कुछ भी लिखते हैं उसे पढ़ें और बदलें</translation>
+<translation id="2207115382329026341">फ़ोन पर ऐप्लिकेशन स्ट्रीमिंग की सेटिंग चालू करें.</translation>
 <translation id="220858061631308971">कृपया इस पिन कोड को "<ph name="DEVICE_NAME" />" पर दर्ज करें:</translation>
 <translation id="2210462644007531147">इंस्टॉल नहीं किया जा सका</translation>
 <translation id="2212565012507486665">कुकी की अनुमति दें</translation>
@@ -1446,6 +1447,7 @@
 <translation id="2367972762794486313">ऐप्स  दिखाएं</translation>
 <translation id="236939127352773362">जब आस-पास मौजूद डिवाइसों से फ़ाइलें शेयर की जा रही हों</translation>
 <translation id="2371076942591664043">&amp;पू्र्ण होने पर खोलें</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> को खोला नहीं जा सका</translation>
 <translation id="2373666622366160481">जिस कागज़ पर प्रिंट किया जाना है उसके आकार के हिसाब से फ़िट करें</translation>
 <translation id="2375406435414127095">अपने फ़ोन से जोड़ें</translation>
 <translation id="2377588536920405462">जगह की जानकारी देना बंद करने के लिए, आप डिवाइस की सेटिंग में जाकर 'जगह की सेटिंग' बंद कर सकते हैं. आप जगह की सेटिंग में जाकर वाई-फ़ाई, मोबाइल नेटवर्क, और जगह की जानकारी का पता लगाने वाले सेंसर का इस्तेमाल करना बंद भी कर सकते हैं.</translation>
@@ -2279,6 +2281,7 @@
 <translation id="3225319735946384299">कोड हस्ताक्षर</translation>
 <translation id="3226487301970807183">बाईं ओर अलाइन साइड पैनल को टॉगल करें</translation>
 <translation id="3227137524299004712">माइक्रोफ़ोन</translation>
+<translation id="3232754137068452469">वेब ऐप्लिकेशन</translation>
 <translation id="3233271424239923319">Linux ऐप्लिकेशन और फ़ाइलों का बैकअप लें</translation>
 <translation id="3238192140106069382">डिवाइस कनेक्ट कर रहा है और पुष्टि हो रही है</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> के लिए समयसीमा हटा दी गई है</translation>
@@ -2317,6 +2320,7 @@
 <translation id="3277691515294482687">Linux को बेहतर बनाने से पहले, 'मेरी फ़ाइलें' फ़ोल्डर में मेरे ऐप्लिकेशन और फ़ाइलों का बैक अप लें.</translation>
 <translation id="3278001907972365362">आपके Google खाता (खातों) पर ध्यान देना होगा</translation>
 <translation id="3278800075417428224">CloudReady 2.0 की सेटिंग में भाषाओं को मैनेज करें</translation>
+<translation id="3278928434075969895">इस प्रोफ़ाइल में, Chrome OS की प्रॉक्सी सेटिंग का इस्तेमाल किया जाता है.</translation>
 <translation id="3279092821516760512">चुने गए संपर्क, आस-पास होने पर आपके साथ शेयर कर सकते हैं. आपके स्वीकार करने तक ट्रांसफ़र शुरू नहीं होगा.</translation>
 <translation id="3279230909244266691">इस प्रोसेस में कुछ मिनट लग सकते हैं. वर्चुअल मशीन को शुरू किया जा रहा है.</translation>
 <translation id="3280237271814976245">इस रूप में सेव करें...</translation>
@@ -4888,6 +4892,7 @@
 <translation id="5909379458939060601">क्या इस प्रोफ़ाइल और ब्राउज़िंग डेटा को मिटाना है?</translation>
 <translation id="5910363049092958439">इमेज को इस रूप में सेव करें...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ऑफ़लाइन है</translation>
+<translation id="5911505723657992440">इस प्रोफ़ाइल के लिए, Chrome OS की प्रॉक्सी सेटिंग का इस्तेमाल करें.</translation>
 <translation id="5911533659001334206">शॉर्टकट व्यूअर</translation>
 <translation id="5914724413750400082">मापांक (<ph name="MODULUS_NUM_BITS" /> बिट):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 47abea8..264b4e5 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1242,6 +1242,7 @@
 <translation id="2203088913459920044">Za naziv se mogu upotrebljavati slova, brojke i posebni znakovi</translation>
 <translation id="220321590587754225">Povezivanje nije uspjelo. Pokušajte ponovo.</translation>
 <translation id="2204034823255629767">čitati i mijenjati sve što pišete</translation>
+<translation id="2207115382329026341">Omogućite postavke streama aplikacije s telefona.</translation>
 <translation id="220858061631308971">Unesite ovaj PIN kôd na uređaj "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Instaliranje nije uspjelo</translation>
 <translation id="2212565012507486665">Dopusti kolačiće</translation>
@@ -1433,6 +1434,7 @@
 <translation id="2367972762794486313">Prikaz aplikacija</translation>
 <translation id="236939127352773362">Kad uređaji dijele u blizini</translation>
 <translation id="2371076942591664043">Otvori nakon &amp;dovršetka</translation>
+<translation id="237307274687369010">Nije moguće pokrenuti aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="2373666622366160481">Prilagodi papiru</translation>
 <translation id="2375406435414127095">Povežite se s telefonom</translation>
 <translation id="2377588536920405462">Lokaciju možete isključiti tako što ćete isključiti glavnu postavku lokacije na svojem uređaju. U postavkama lokacije također možete isključiti upotrebu Wi‑Fija, mobilnih mreža i senzora za lokaciju.</translation>
@@ -2267,6 +2269,7 @@
 <translation id="3225319735946384299">Kodno potpisivanje</translation>
 <translation id="3226487301970807183">Uključivanje/isključivanje bočne ploče s lijevim poravnanjem</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Web-aplikacija</translation>
 <translation id="3233271424239923319">Sigurnosno kopiranje Linux aplikacija i datoteka</translation>
 <translation id="3238192140106069382">Povezivanje i potvrđivanje</translation>
 <translation id="3239373508713281971">Uklonjeno je vremensko ograničenje za aplikaciju <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 2634754b..2c094ad8 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -2277,6 +2277,7 @@
 <translation id="3225319735946384299">Kódaláírás</translation>
 <translation id="3226487301970807183">Kapcsoló balra igazított oldalsó panelje</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Internetes alkalmazás</translation>
 <translation id="3233271424239923319">Biztonsági másolat készítése a Linux-alkalmazásokról és -fájlokról</translation>
 <translation id="3238192140106069382">Csatlakozás és ellenőrzés</translation>
 <translation id="3239373508713281971">Időkorlát eltávolítva a következő alkalmazásnál: <ph name="APP_NAME" /></translation>
@@ -2315,6 +2316,7 @@
 <translation id="3277691515294482687">Alkalmazásaim és fájljaim biztonsági mentése a Saját fájlok mappába a Linux frissítése előtt.</translation>
 <translation id="3278001907972365362">Google-fiókjaival kapcsolatban teendői akadtak</translation>
 <translation id="3278800075417428224">Nyelvek kezelése a CloudReady 2.0 beállításai között</translation>
+<translation id="3278928434075969895">Ez a profil a Chrome OS-proxybeállításokat használja.</translation>
 <translation id="3279092821516760512">A kiválasztott ismerősök tartalmakat oszthatnak meg Önnel, amikor a közelben vannak. Az elfogadásig nem kezdődik meg az átküldés.</translation>
 <translation id="3279230909244266691">Ez a folyamat néhány percet is igénybe vehet. A virtuális gép indítása folyamatban van.</translation>
 <translation id="3280237271814976245">Mentés &amp;másként...</translation>
@@ -4888,6 +4890,7 @@
 <translation id="5909379458939060601">Törli ezt a profilt és a böngészési adatokat?</translation>
 <translation id="5910363049092958439">Ké&amp;p mentése másként...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> – offline</translation>
+<translation id="5911505723657992440">A Chrome OS-proxybeállítások használata ennél a profilnál.</translation>
 <translation id="5911533659001334206">Billentyűparancs-megjelenítő</translation>
 <translation id="5914724413750400082">Együttható (<ph name="MODULUS_NUM_BITS" /> bit):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 7c06b20a..2f647735 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -2265,6 +2265,7 @@
 <translation id="3225319735946384299">Կոդի ստորագրում</translation>
 <translation id="3226487301970807183">Ցուցադրել/թաքցնել կողային վահանակը ձախ կողմում</translation>
 <translation id="3227137524299004712">Խոսափող</translation>
+<translation id="3232754137068452469">Վեբ ծրագիր</translation>
 <translation id="3233271424239923319">Լինուքսի հավելվածների ու ֆայլերի պահուստավորում</translation>
 <translation id="3238192140106069382">Միացում և ստուգում</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> հավելվածի համար ժամանակի սահմանաչափը հեռացվել է</translation>
@@ -2303,6 +2304,7 @@
 <translation id="3277691515294482687">Նախքան Լինուքսի նոր տարբերակին անցնելը պահուստավորել իմ հավելվածներն ու ֆայլերը «Իմ ֆայլերը» պանակում։</translation>
 <translation id="3278001907972365362">Google հաշվի համար պահանջվում է գործողություն</translation>
 <translation id="3278800075417428224">Լեզուների կառավարում CloudReady 2.0-ի կարգավորումներում</translation>
+<translation id="3278928434075969895">Այս պրոֆիլի համար օգտագործվում են Chrome OS-ի պրոքսի սերվերի կարգավորումները</translation>
 <translation id="3279092821516760512">Նշված կոնտակտները կարող են կիսվել ձեզ հետ տվյալներով, երբ մոտակայքում են։ Տվյալների փոխանցումը չի սկսվի, մինչև դուք չհաստատեք։</translation>
 <translation id="3279230909244266691">Այս գործընթացը կարող է տևել մի քանի րոպե: Վիրտուալ մեքենան գործարկվում է:</translation>
 <translation id="3280237271814976245">Պահել &amp;որպես…</translation>
@@ -4877,6 +4879,7 @@
 <translation id="5909379458939060601">Ջնջե՞լ այս պրոֆիլը և այցելությունների պատմությունը</translation>
 <translation id="5910363049092958439">Պա&amp;հել պատկերը որպես…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> սարքը միացած չէ ինտերնետին</translation>
+<translation id="5911505723657992440">Օգտագործել Chrome OS-ի պրոքսի սերվերի կարգավորումներն այս պրոֆիլի համար</translation>
 <translation id="5911533659001334206">Դյուրանցումների դիտակ</translation>
 <translation id="5914724413750400082">Մոդուլը (<ph name="MODULUS_NUM_BITS" /> բիթ)՝
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 55bd82d..69da0a0 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Penandaan Kode</translation>
 <translation id="3226487301970807183">Aktifkan panel samping rata kiri</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Aplikasi Web</translation>
 <translation id="3233271424239923319">Cadangkan file dan aplikasi Linux</translation>
 <translation id="3238192140106069382">Menghubungkan dan memverifikasi</translation>
 <translation id="3239373508713281971">Batas waktu <ph name="APP_NAME" /> dihapus</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 9738c1f8..b8a0d5f 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Kóðaundirritun</translation>
 <translation id="3226487301970807183">Sýna/fela hliðarglugga sem er jafnaður til vinstri</translation>
 <translation id="3227137524299004712">Hljóðnemi</translation>
+<translation id="3232754137068452469">Vefforrit</translation>
 <translation id="3233271424239923319">Afrita Linux-forrit og -skrár</translation>
 <translation id="3238192140106069382">Tengist og staðfestir</translation>
 <translation id="3239373508713281971">Tímamörk fjarlægð fyrir <ph name="APP_NAME" /></translation>
@@ -2346,6 +2347,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> afsláttur</translation>
 <translation id="3305389145870741612">Nokkrar sekúndur getur tekið að sníða. Hinkraðu.</translation>
 <translation id="3305661444342691068">Opna PDF-skjal í forskoðun</translation>
+<translation id="3307176291962384345">Fá afslætti hjá <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Komið var í veg fyrir að þessi síða vistaði fótspor.</translation>
 <translation id="3308134619352333507">Hnappurinn Fela</translation>
 <translation id="3308852433423051161">Hleður Google hjálparann...</translation>
@@ -2824,6 +2826,7 @@
 <translation id="3761556954875533505">Viltu leyfa svæði að breyta skrám?</translation>
 <translation id="3764314093345384080">Ítarupplýsingar smíði</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Eiga samskipti við USB-tæki}one{Eiga samskipti við # USB-tæki}other{Eiga samskipti við # USB-tæki}}</translation>
+<translation id="3764753550716962406">Leyfa Google að nota körfuna þína til að finna tiltæka afslætti?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Sendir <ph name="ATTACHMENTS" /> í <ph name="DEVICE_NAME" />}one{Sendir <ph name="ATTACHMENTS" /> í <ph name="DEVICE_NAME" />}other{Sendir <ph name="ATTACHMENTS" /> í <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Ekki tókst að lesa reglu ónettengdrar prufustillingar.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3259,6 +3262,7 @@
 <translation id="4194570336751258953">Gera „ýta til að smella“ virkt</translation>
 <translation id="4195643157523330669">Opna í nýjum flipa</translation>
 <translation id="4195814663415092787">Halda áfram þaðan sem frá var horfið</translation>
+<translation id="4197917636330710075">Fá afslætti hjá <ph name="MERCHANT_NAME" /> og <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Önnur vefsvæði</translation>
 <translation id="4200689466366162458">Sérsniðin orð</translation>
 <translation id="4200983522494130825">Nýr flipi</translation>
@@ -4638,6 +4642,7 @@
 <translation id="5632566673632479864">Reikningurinn þinn <ph name="EMAIL" /> er ekki lengur leyfður sem aðalreikningur. Þar sem <ph name="DOMAIN" /> stýrir þessum reikningi verða bókamerkin þín, ferillinn, aðgangsorðin og aðrar stillingar hreinsuð úr tækinu.</translation>
 <translation id="5632592977009207922">Sækir, <ph name="PERCENT_REMAINING" />% eftir</translation>
 <translation id="563371367637259496">Farsímakerfi</translation>
+<translation id="5634446357546764049">Sjáðu minningar um nýlegar ferðir og fleira</translation>
 <translation id="5635312199252507107">Leyfa á tilteknum vefsvæðum</translation>
 <translation id="563535393368633106">Spyrja fyrir notkun (ráðlagt)</translation>
 <translation id="5636996382092289526">Til að nota <ph name="NETWORK_ID" /> þarftu hugsanlega fyrst að <ph name="LINK_START" />fara á innskráningarsíðu netsins<ph name="LINK_END" /> sem opnast sjálfkrafa eftir nokkrar sekúndur. Ef þetta gerist ekki er ekki hægt að nota netið.</translation>
@@ -4734,6 +4739,7 @@
 <translation id="5740709157181662145">Stuðningur við vélbúnað <ph name="DEVICE_OS" /> og aukinn stöðugleiki</translation>
 <translation id="574104302965107104">Skjáspeglun</translation>
 <translation id="574209121243317957">Tónhæð</translation>
+<translation id="5745316408658560138">Leyfa Chrome að finna sérsniðna afslætti fyrir körfurnar þínar?</translation>
 <translation id="5746169159649715125">Vista sem PDF</translation>
 <translation id="5747552184818312860">Rennur út</translation>
 <translation id="5747785204778348146">Forritari – óstöðugt</translation>
@@ -5361,6 +5367,7 @@
 <translation id="6370021412472292592">Ekki var hægt að hlaða upplýsingaskrá.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Reyna aftur</translation>
+<translation id="6374635887697228982">Fá afslætti?</translation>
 <translation id="6377268785556383139">Ein niðurstaða fyrir „<ph name="SEARCH_TEXT" />“</translation>
 <translation id="6380143666419481200">Samþykkja og halda áfram</translation>
 <translation id="6382616130475191723">Heimilað að lesa og gera breytingar á <ph name="SITE_NAME" /></translation>
@@ -6927,6 +6934,7 @@
 <translation id="7956373551960864128">Vistaðir prentarar þínir</translation>
 <translation id="7957074856830851026">Sjá upplýsingar um tæki, svo sem raðnúmer eða eignarauðkenni</translation>
 <translation id="7957615753207896812">Opna lyklaborðsstillingar tækisins</translation>
+<translation id="7958437133377816580">Fá afslætti hjá <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> og fleirum</translation>
 <translation id="7959074893852789871">Skráin innihélt mörg vottorð en sum þeirra voru ekki flutt inn:</translation>
 <translation id="7959665254555683862">Nýr huliðsflipi</translation>
 <translation id="7961015016161918242">Aldrei</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index e5460d3f..10effb6 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1241,6 +1241,7 @@
 <translation id="2203088913459920044">Il nome può contenere lettere, numeri e caratteri speciali</translation>
 <translation id="220321590587754225">Impossibile connettersi. Riprova.</translation>
 <translation id="2204034823255629767">Lettura e modifica del testo digitato</translation>
+<translation id="2207115382329026341">Attiva le impostazioni relative allo streaming di app dal telefono.</translation>
 <translation id="220858061631308971">Inserisci questo codice PIN su "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Impossibile completare l'installazione</translation>
 <translation id="2212565012507486665">Consenti cookie</translation>
@@ -1431,6 +1432,7 @@
 <translation id="2367972762794486313">Mostra app</translation>
 <translation id="236939127352773362">Quando i dispositivi stanno usando Condivisione nelle vicinanze</translation>
 <translation id="2371076942591664043">Apri al &amp;termine</translation>
+<translation id="237307274687369010">Impossibile avviare <ph name="APP_NAME" /></translation>
 <translation id="2373666622366160481">Adatta a dimensioni del foglio</translation>
 <translation id="2375406435414127095">Collegati al telefono</translation>
 <translation id="2377588536920405462">Puoi disabilitare la geolocalizzazione disattivando l'impostazione Posizione principale sul tuo dispositivo. Puoi anche disattivare l'uso di reti Wi-Fi e mobili e di sensori per la geolocalizzazione nelle impostazioni di geolocalizzazione.</translation>
@@ -2265,6 +2267,7 @@
 <translation id="3225319735946384299">Firma codice</translation>
 <translation id="3226487301970807183">Attiva/disattiva il riquadro laterale allineato a sinistra</translation>
 <translation id="3227137524299004712">Microfono</translation>
+<translation id="3232754137068452469">App web</translation>
 <translation id="3233271424239923319">Backup app e file Linux</translation>
 <translation id="3238192140106069382">Connessione e verifica in corso…</translation>
 <translation id="3239373508713281971">Limite di tempo per l'app <ph name="APP_NAME" /> rimosso</translation>
@@ -2303,6 +2306,7 @@
 <translation id="3277691515294482687">Effettua il backup di app e file nella cartella I miei file prima di eseguire l'upgrade di Linux.</translation>
 <translation id="3278001907972365362">I tuoi Account Google richiedono la tua attenzione</translation>
 <translation id="3278800075417428224">Gestisci le lingue nelle impostazioni di CloudReady 2.0</translation>
+<translation id="3278928434075969895">Questo profilo usa le impostazioni proxy di Chrome OS.</translation>
 <translation id="3279092821516760512">I contatti selezionati possono condividere contenuti con te quando sono nelle vicinanze. I trasferimenti non inizieranno finché non accetti.</translation>
 <translation id="3279230909244266691">Questa procedura potrebbe richiedere alcuni minuti. Avvio della macchina virtuale in corso.</translation>
 <translation id="3280237271814976245">Salva con &amp;nome...</translation>
@@ -4874,6 +4878,7 @@
 <translation id="5909379458939060601">Vuoi eliminare questo profilo e i dati di navigazione?</translation>
 <translation id="5910363049092958439">Sal&amp;va immagine con nome...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> è offline</translation>
+<translation id="5911505723657992440">Usa le impostazioni proxy di Chrome OS per questo profilo.</translation>
 <translation id="5911533659001334206">Visualizzatore scorciatoie</translation>
 <translation id="5914724413750400082">Modulo (<ph name="MODULUS_NUM_BITS" /> bit):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index d4c1409..4851d9a0 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">חתימת קוד</translation>
 <translation id="3226487301970807183">החלפת מצב לחלונית הצדדית משמאל</translation>
 <translation id="3227137524299004712">מיקרופון</translation>
+<translation id="3232754137068452469">אפליקציית אינטרנט</translation>
 <translation id="3233271424239923319">‏גיבוי קבצים ואפליקציות של Linux</translation>
 <translation id="3238192140106069382">מתבצעים התחברות ואימות</translation>
 <translation id="3239373508713281971">מגבלת הזמן של <ph name="APP_NAME" /> הוסרה</translation>
@@ -2347,6 +2348,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> הנחה</translation>
 <translation id="3305389145870741612">תהליך הפרמוט עשוי להימשך מספר שניות. יש להמתין.</translation>
 <translation id="3305661444342691068">‏פתיחת PDF בתצוגה מקדימה</translation>
+<translation id="3307176291962384345">קבלת הנחות על מוצרי <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">‏לא ניתן להגדיר קובצי Cookie לדף זה.</translation>
 <translation id="3308134619352333507">לחצן 'הסתרה'</translation>
 <translation id="3308852433423051161">‏טעינת Google Assistant מתבצעת...</translation>
@@ -2825,6 +2827,7 @@
 <translation id="3761556954875533505">האם לאפשר לאתר לערוך קבצים?</translation>
 <translation id="3764314093345384080">מידע מפורט על הגרסה</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏תקשורת עם מכשיר USB אחד}two{‏תקשורת עם # מכשירי USB}many{‏תקשורת עם # מכשירי USB}other{‏תקשורת עם # מכשירי USB}}</translation>
+<translation id="3764753550716962406">‏לאפשר ל-Google להשתמש בעגלת הקניות שלך כדי למצוא הנחות זמינות?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{המערכת שולחת <ph name="ATTACHMENTS" /> אל <ph name="DEVICE_NAME" />}two{המערכת שולחת <ph name="ATTACHMENTS" /> אל <ph name="DEVICE_NAME" />}many{המערכת שולחת <ph name="ATTACHMENTS" /> אל <ph name="DEVICE_NAME" />}other{המערכת שולחת <ph name="ATTACHMENTS" /> אל <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">לא ניתן לקרוא מדיניות של מצב הדגמה לא מקוון.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> הרץ</translation>
@@ -3260,6 +3263,7 @@
 <translation id="4194570336751258953">הפעלת האפשרות 'נגיעה קלה'</translation>
 <translation id="4195643157523330669">פתיחה בכרטיסייה חדשה</translation>
 <translation id="4195814663415092787">אני רוצה להמשיך מהמקום שבו הפסקתי</translation>
+<translation id="4197917636330710075">קבלת הנחות על המוצרים של <ph name="MERCHANT_NAME" /> ו-<ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">אתרים נוספים</translation>
 <translation id="4200689466366162458">מילים מותאמות אישית</translation>
 <translation id="4200983522494130825">&amp;כרטיסייה חדשה</translation>
@@ -4639,6 +4643,7 @@
 <translation id="5632566673632479864">הסתיימה ההרשאה של החשבון שלך <ph name="EMAIL" /> כחשבון ראשי. החשבון הזה מנוהל על ידי <ph name="DOMAIN" />, ולכן הסימניות, ההיסטוריה, הסיסמאות והגדרות אחרות יימחקו מהמכשיר הזה.</translation>
 <translation id="5632592977009207922">‏מתבצעת הורדה, נשארו ‎<ph name="PERCENT_REMAINING" />%‎</translation>
 <translation id="563371367637259496">נייד</translation>
+<translation id="5634446357546764049">הצגת זכרונות מהנסיעות האחרונות שלך ועוד</translation>
 <translation id="5635312199252507107">להרשות באתרים ספציפיים</translation>
 <translation id="563535393368633106">יש לשאול לפני גישה (מומלץ)</translation>
 <translation id="5636996382092289526">כדי להשתמש ב-<ph name="NETWORK_ID" /> ייתכן שראשית יהיה עליך <ph name="LINK_START" />להיכנס לדף הכניסה של הרשת<ph name="LINK_END" />, שייפתח אוטומטית בעוד כמה שניות. אם הוא לא נפתח, לא ניתן יהיה להשתמש ברשת.</translation>
@@ -4735,6 +4740,7 @@
 <translation id="5740709157181662145">יציבות ותמיכה בחומרה של <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">שיקוף מסך</translation>
 <translation id="574209121243317957">גובה צליל</translation>
+<translation id="5745316408658560138">‏לאפשר ל-Chrome למצוא הנחות בהתאמה אישית בעגלות הקניות שלך?</translation>
 <translation id="5746169159649715125">‏שמירה כקובץ PDF</translation>
 <translation id="5747552184818312860">מועד תפוגה</translation>
 <translation id="5747785204778348146">מפתח - לא יציב</translation>
@@ -5363,6 +5369,7 @@
 <translation id="6370021412472292592">לא ניתן היה לטעון את המניפסט.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">ניסיון נוסף</translation>
+<translation id="6374635887697228982">רוצה לקבל הנחות?</translation>
 <translation id="6377268785556383139">תוצאה אחת בשביל '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6380143666419481200">בסדר, מקובל עליי</translation>
 <translation id="6382616130475191723">יש הרשאה לעיין ב-<ph name="SITE_NAME" /> ולבצע בו שינויים</translation>
@@ -6928,6 +6935,7 @@
 <translation id="7956373551960864128">מדפסות שמורות</translation>
 <translation id="7957074856830851026">הצגה של פרטי המכשיר, כמו המספר הסידורי או מזהה הנכס שלו</translation>
 <translation id="7957615753207896812">פתיחת הגדרות המכשיר של המקלדת</translation>
+<translation id="7958437133377816580">קבלת הנחות על המוצרים של <ph name="MERCHANT_NAME" />, ‏<ph name="MERCHANT_NAME" /> ועוד</translation>
 <translation id="7959074893852789871">הקובץ הכיל אישורים מרובים, חלקם לא יובאו:</translation>
 <translation id="7959665254555683862">&amp;כרטיסיית מצב אנונימי חדשה</translation>
 <translation id="7961015016161918242">אף פעם</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 7a9a510..8c551606 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -163,6 +163,7 @@
 <translation id="1150490752229770117">この <ph name="DEVICE_TYPE" /> でソフトウェアとセキュリティの自動アップデートが行われるのは今回が最後です。今後もアップデートを取得するには、新しいモデルにアップグレードしてください。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="1150565364351027703">サングラス</translation>
 <translation id="1151917987301063366"><ph name="HOST" /> によるセンサーへのアクセスを常に許可する</translation>
+<translation id="1152181876167086799">すべての拡張機能に <ph name="SITE_NAME" /> の読み取りと変更を許可する</translation>
 <translation id="1152346050262092795">アカウントを確認するには、パスワードをもう一度入力してください。</translation>
 <translation id="1153356358378277386">ペア設定されたデバイス</translation>
 <translation id="1153636665119721804">Google の高度な保護機能プログラム</translation>
@@ -451,6 +452,9 @@
 <translation id="1442851588227551435">有効な Kerberos チケットの設定</translation>
 <translation id="1444628761356461360">この設定はデバイスの所有者 <ph name="OWNER_EMAIL" /> が管理しています。</translation>
 <translation id="144518587530125858">テーマの「<ph name="IMAGE_PATH" />」を読み込むことができませんでした。</translation>
+<translation id="1448264954024227422">このアカウントを Android アプリで使用できます。他のユーザーのアカウントを追加する場合は、<ph name="DEVICE_TYPE" /> に<ph name="LINK_BEGIN" />新しいユーザーを追加<ph name="LINK_END" />します。
+
+これまでにアプリに許可した権限がこのアカウントに適用される可能性があります。[<ph name="APPS_LINK_BEGIN" />アプリの設定<ph name="APPS_LINK_END" />] で Android アプリの権限を管理できます。</translation>
 <translation id="1448779317883494811">ブラシツール</translation>
 <translation id="1449191289887455076">割り当てを確定して<ph name="RESPONSE" />には、もう一度「<ph name="CURRENTKEY" />」キーを押してください</translation>
 <translation id="1451375123200651445">ウェブページ、1 つのファイル</translation>
@@ -1030,6 +1034,7 @@
 <translation id="2003130567827682533">「<ph name="NAME" />」データサービスを有効にするには、まず Wi-Fi ネットワークに接続してください</translation>
 <translation id="2004697686368036666">一部のサイトで機能を使用できなくなる可能性があります</translation>
 <translation id="2005199804247617997">他のプロフィール</translation>
+<translation id="2005967212456643969">拡張機能ごとに権限をカスタマイズする</translation>
 <translation id="2006638907958895361"><ph name="APP" /> でリンクを開く</translation>
 <translation id="2007404777272201486">問題の報告...</translation>
 <translation id="2009590708342941694">絵文字ツール</translation>
@@ -1234,6 +1239,7 @@
 <translation id="2203088913459920044">名前には文字、数字、特殊文字を使用できます</translation>
 <translation id="220321590587754225">接続できませんでした。もう一度お試しください。</translation>
 <translation id="2204034823255629767">すべての入力内容の読み取りと変更</translation>
+<translation id="2207115382329026341">スマートフォンからアプリ ストリーミング設定を有効にしてください。</translation>
 <translation id="220858061631308971">「<ph name="DEVICE_NAME" />」の PIN コードを入力してください:</translation>
 <translation id="2210462644007531147">インストールを完了できませんでした</translation>
 <translation id="2212565012507486665">Cookie を許可</translation>
@@ -1422,6 +1428,7 @@
 <translation id="2367972762794486313">アプリを表示</translation>
 <translation id="236939127352773362">コンテンツの送信を希望しているデバイスが近くにある場合に通知します</translation>
 <translation id="2371076942591664043">ダウンロードしたら開く(&amp;D)</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> を起動できませんでした</translation>
 <translation id="2373666622366160481">用紙に合わせる</translation>
 <translation id="2375406435414127095">スマートフォンに接続</translation>
 <translation id="2377588536920405462">位置情報の使用を無効にするには、お使いのデバイスでメインの位置情報の設定を無効にします。また、位置情報の設定で、Wi‑Fi、モバイル ネットワーク、センサーを現在地の特定に使用しないよう指定することもできます。</translation>
@@ -2098,6 +2105,7 @@
 <translation id="3039491566278747710">オフライン ポリシーをデバイスにインストールできませんでした。</translation>
 <translation id="3043218608271070212"><ph name="GROUP_NAME" /> - <ph name="GROUP_CONTENT_STRING" /></translation>
 <translation id="3043581297103810752"><ph name="ORIGIN" /> より</translation>
+<translation id="304499331062371949">すべての拡張機能に <ph name="SITE_NAME" /> の読み取りと変更を許可しない</translation>
 <translation id="3045447014237878114">このサイトで複数のファイルが自動的にダウンロードされました</translation>
 <translation id="3046178388369461825">Linux ディスクの空き容量が非常に少なくなっています</translation>
 <translation id="3046910703532196514">ウェブページ、完全</translation>
@@ -2255,6 +2263,7 @@
 <translation id="3225319735946384299">コード署名</translation>
 <translation id="3226487301970807183">左揃えのサイドパネルを切り替えます</translation>
 <translation id="3227137524299004712">マイク</translation>
+<translation id="3232754137068452469">ウェブアプリ</translation>
 <translation id="3233271424239923319">Linux のアプリとファイルをバックアップします</translation>
 <translation id="3238192140106069382">接続と認証を行っています</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> の使用時間制限が削除されました</translation>
@@ -2293,6 +2302,7 @@
 <translation id="3277691515294482687">Linux をアップグレードする前に、アプリとファイルを [マイファイル] フォルダにバックアップする。</translation>
 <translation id="3278001907972365362">お使いの Google アカウントは対応が必要です</translation>
 <translation id="3278800075417428224">CloudReady 2.0 の設定で言語を管理する</translation>
+<translation id="3278928434075969895">このプロフィールでは Chrome OS のプロキシ設定を使用します。</translation>
 <translation id="3279092821516760512">近くにいる選択した連絡先が共有できます。許可するまで転送は行われません。</translation>
 <translation id="3279230909244266691">この処理には数分かかることがあります。仮想マシンを起動します。</translation>
 <translation id="3280237271814976245">名前を付けて保存(&amp;A)...</translation>
@@ -3325,6 +3335,7 @@
 <translation id="4289540628985791613">概要</translation>
 <translation id="4289732974614035569">PIN の入力</translation>
 <translation id="4290791284969893584">ページを閉じると、開始したタスクが完了できなくなります</translation>
+<translation id="4291265871880246274">ログイン ダイアログ</translation>
 <translation id="4295072614469448764">アプリはお使いのデバイスでご利用いただけます。ランチャーにアイコンが追加されている可能性もあります。</translation>
 <translation id="4295979599050707005">もう一度ログインして、Chrome と Google Play のウェブサイト、アプリ、拡張機能でアカウント(<ph name="USER_EMAIL" />)を使用できることを確認してください。このアカウントを削除することも可能です。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="4297219207642690536">再起動してリセット</translation>
@@ -4541,6 +4552,7 @@
 <translation id="5571832155627049070">プロファイルのカスタマイズ</translation>
 <translation id="5572648434713976849">より関連性の高い候補がアドレスバーに表示されます</translation>
 <translation id="5572851009514199876">このサイトへのアクセス権があるかどうかを Chrome で確認できるように、Chrome を起動してログインしてください。</translation>
+<translation id="557506220935336383">他のサイトに対する拡張機能の権限を確認する</translation>
 <translation id="5575473780076478375">シークレット モード拡張機能: <ph name="EXTENSION_NAME" /></translation>
 <translation id="5575528586625653441">デモ登録リクエストで問題が発生しました。</translation>
 <translation id="557722062034137776">デバイスをリセットしても、お使いの Google アカウントや、これらのアカウントに同期されているデータには影響しません。ただし、デバイス上でローカルに保存されているすべてのファイルは削除されます。</translation>
@@ -4854,6 +4866,7 @@
 <translation id="5909379458939060601">このプロフィールと閲覧データを削除しますか?</translation>
 <translation id="5910363049092958439">名前を付けて画像を保存(&amp;V)...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> はオフラインです</translation>
+<translation id="5911505723657992440">このプロフィールで Chrome OS のプロキシ設定を使用する。</translation>
 <translation id="5911533659001334206">ショートカット ビューア</translation>
 <translation id="5914724413750400082">モジュール(<ph name="MODULUS_NUM_BITS" /> ビット):
   <ph name="MODULUS_HEX_DUMP" />
@@ -5540,6 +5553,7 @@
 <translation id="6586099239452884121">ゲスト ブラウジング</translation>
 <translation id="6586213706115310390">「OK Google」と話すとアシスタントにアクセスできます。</translation>
 <translation id="6586451623538375658">マウスのメイン ボタンを右にする</translation>
+<translation id="6587958707401001932">デフォルトの設定を選択</translation>
 <translation id="6588043302623806746">セキュア DNS を使用する</translation>
 <translation id="659005207229852190">安全確認が完了しました。</translation>
 <translation id="6590458744723262880">フォルダ名の変更</translation>
@@ -5563,6 +5577,7 @@
 <translation id="6606671997164410857">Google アシスタントは、すでに別のデバイスで設定済みのようです。このデバイスで [画面のコンテキスト] をオンにすれば、アシスタントをもっと活用していただけるようになります。</translation>
 <translation id="6607831829715835317">その他のツール(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> はすでに <ph name="DOMAIN" /> によって管理されています。別の Google アカウントで保護者による使用制限を設定するには、セットアップ後にログアウトしてから、ログイン画面で [ユーザーを追加] を選択します。</translation>
+<translation id="6608166463665411119">eSIM をリセット</translation>
 <translation id="6609478180749378879">ログインデータはシークレット モードの終了後にこのデバイスに保存されます。今後、このデバイスからこのウェブサイトにログインできるようになります。</translation>
 <translation id="6610002944194042868">翻訳オプション</translation>
 <translation id="6611972847767394631">ここからタブを確認できます</translation>
@@ -6164,6 +6179,7 @@
 <translation id="7243632151880336635">削除してログアウト</translation>
 <translation id="7245628041916450754"><ph name="WIDTH" />x<ph name="HEIGHT" />(最適)</translation>
 <translation id="7246230585855757313">セキュリティ キーを挿入し直して、もう一度お試しください</translation>
+<translation id="724835896049478274">Android アプリで使用できるアカウント</translation>
 <translation id="7249197363678284330">アドレスバーでこの設定を変更できます。</translation>
 <translation id="7250616558727237648">共有先のデバイスから応答がありませんでした。もう一度お試しください。</translation>
 <translation id="725109152065019550">このアカウントでの外部ストレージの使用は、管理者によって無効にされています。</translation>
@@ -6247,6 +6263,7 @@
 <translation id="7339898014177206373">新しいウィンドウ</translation>
 <translation id="7340431621085453413">現在 <ph name="FULLSCREEN_ORIGIN" /> は全画面表示です。</translation>
 <translation id="7340650977506865820">サイトで画面が共有されています</translation>
+<translation id="7340757554212515731">障害レポート、診断データ、使用状況データを自動的に Google に送信します</translation>
 <translation id="7341834142292923918">このサイトへのアクセス許可が必要です</translation>
 <translation id="7343372807593926528">問題の詳細を記入してからフィードバックを送信してください。</translation>
 <translation id="7345706641791090287">パスワードを再入力</translation>
@@ -8141,6 +8158,7 @@
 <translation id="93766956588638423">拡張機能を修復</translation>
 <translation id="938568644810664664">「OK Google, この曲はなに?」、「OK Google, 画面になにが表示されている?」のようにきいてみましょう。</translation>
 <translation id="939252827960237676">スクリーンショットを保存できませんでした</translation>
+<translation id="939401694733344652">これらのアカウントは現在、Android アプリで使用されていません。この Android アプリで使用するアカウントを選択した場合、そのアカウントは他の Android アプリでも使用できるようになります。Android アプリのアクセス権限は、<ph name="LINK_BEGIN" />[設定] &gt; [アカウント]<ph name="LINK_END" /> で変更できます。</translation>
 <translation id="939598580284253335">パスフレーズを入力</translation>
 <translation id="939736085109172342">新しいフォルダ</translation>
 <translation id="942532530371314860"><ph name="APP_NAME" /> が Chrome タブと音声を共有しています。</translation>
@@ -8197,6 +8215,7 @@
 <translation id="994289308992179865">ループ(&amp;L)</translation>
 <translation id="995782501881226248">YouTube</translation>
 <translation id="996250603853062861">安全な接続を確立しています...</translation>
+<translation id="996803490569799917">大好きな人たちとの思い出などを見る</translation>
 <translation id="99731366405731005">Wi-Fi 同期を使用するには <ph name="LINK1_BEGIN" />Chrome 同期<ph name="LINK1_END" />をオンにしてください。<ph name="LINK2_BEGIN" />詳細<ph name="LINK2_END" /></translation>
 <translation id="998747458861718449">検証(&amp;I)</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 574561f..352c9eb 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -2264,6 +2264,7 @@
 <translation id="3225319735946384299">კოდის ხელმოწერა</translation>
 <translation id="3226487301970807183">მარცხნივი სწორების გვერდითა პანელზე გადართვა</translation>
 <translation id="3227137524299004712">მიკროფონი</translation>
+<translation id="3232754137068452469">ვებ-აპი</translation>
 <translation id="3233271424239923319">Linux აპებისა და ფაილების სარეზერვო კოპირება</translation>
 <translation id="3238192140106069382">დაკავშირება და დადასტურება</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />-ისთვის დაყენებული დროის ლიმიტი გაუქმდა</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 5ca7e897..93d63d0 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1237,6 +1237,7 @@
 <translation id="2203088913459920044">Атауда әріптерді, сандарды және арнайы таңбаларды пайдалануға болады.</translation>
 <translation id="220321590587754225">Жалғанбады. Қайталап көріңіз.</translation>
 <translation id="2204034823255629767">Барлық тергендеріңізді оқу және өзгерту</translation>
+<translation id="2207115382329026341">Қолданбаны трансляциялау параметрлерін телефоннан қосыңыз.</translation>
 <translation id="220858061631308971">Бұл PIN кодын "<ph name="DEVICE_NAME" />" құрылғысына енгізіңіз:</translation>
 <translation id="2210462644007531147">Орнату аяқталмады.</translation>
 <translation id="2212565012507486665">Cookie файлдарына рұқсат беру</translation>
@@ -1427,6 +1428,7 @@
 <translation id="2367972762794486313">Қолданбаларды көрсету</translation>
 <translation id="236939127352773362">Маңайда құрылғылар мазмұн бөлісіп жатқанда</translation>
 <translation id="2371076942591664043">&amp;Дайын болғанда ашу</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> іске қосылмады</translation>
 <translation id="2373666622366160481">Қағаз өлшеміне сәйкестендіру</translation>
 <translation id="2375406435414127095">Телефоныңызға жалғаңыз</translation>
 <translation id="2377588536920405462">Құрылғыдағы негізгі орналасу параметрін өшіру арқылы орналасқан жердің анықталуын өшіруге болады. Сонымен қатар Wi‑Fi мен мобильдік желілердің және сенсорлардың орынды анықтау үшін қолданылуын геодерек параметрлерінен өшіре аласыз.</translation>
@@ -2260,6 +2262,7 @@
 <translation id="3225319735946384299">Кодты белгілеу</translation>
 <translation id="3226487301970807183">Сол жақ бүйірлік панельді көрсету/жасыру</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб-қолданба</translation>
 <translation id="3233271424239923319">Linux қолданбалары мен файлдарының сақтық көшірмесін жасау</translation>
 <translation id="3238192140106069382">Қосылуда және расталуда</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> үшін уақыт шектеуі алынды.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 12f682b8..6057e41 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">ការចុះហត្ថលេខាជាលេខកូដ</translation>
 <translation id="3226487301970807183">បិទ/បើកផ្ទាំងចំហៀង​ដែលតម្រឹមខាងឆ្វេង</translation>
 <translation id="3227137524299004712">ម៉ៃក្រូហ្វូន</translation>
+<translation id="3232754137068452469">កម្មវិធីបណ្តាញ</translation>
 <translation id="3233271424239923319">បម្រុងទុក​កម្មវិធី និង​ឯកសារ Linux</translation>
 <translation id="3238192140106069382">កំពុងភ្ជាប់ និងកំពុងផ្ទៀងផ្ទាត់</translation>
 <translation id="3239373508713281971">បានលុប​រយៈពេល​កំណត់​សម្រាប់ <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index db7c5d5..a9e65642 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1245,6 +1245,7 @@
 <translation id="2203088913459920044">ಹೆಸರಿನಲ್ಲಿ ಅಕ್ಷರಗಳು, ಸಂಖ್ಯೆಗಳು ಮತ್ತು ವಿಶೇಷ ಅಕ್ಷರಗಳನ್ನು ಬಳಸಬಹುದು</translation>
 <translation id="220321590587754225">ಕನೆಕ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="2204034823255629767">ನೀವು ಟೈಪ್‌ ಮಾಡುವ ಯಾವುದನ್ನಾದರೂ ಓದಿ ಮತ್ತು ಬದಲಿಸಿ</translation>
+<translation id="2207115382329026341">ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿರುವ ಆ್ಯಪ್‌ಗಳ ಸ್ಟ್ರೀಮಿಂಗ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="220858061631308971">ದಯವಿಟ್ಟು "<ph name="DEVICE_NAME" />" ಇದರಲ್ಲಿ ಈ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ :</translation>
 <translation id="2210462644007531147">ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುವುದನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="2212565012507486665">ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಿ</translation>
@@ -1438,6 +1439,7 @@
 <translation id="2367972762794486313">ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತೋರಿಸು</translation>
 <translation id="236939127352773362">ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳಿಂದ ಹಂಚಿಕೊಳ್ಳುವಾಗ</translation>
 <translation id="2371076942591664043">&amp;ಮುಗಿಸಿದಾಗ ತೆರೆಯಿರಿ</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="2373666622366160481">ಕಾಗದಕ್ಕೆ ಹೊಂದಿಸಿ</translation>
 <translation id="2375406435414127095">ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="2377588536920405462">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಮುಖ್ಯ ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆಫ್ ಮಾಡುವ ಮೂಲಕ ನೀವು ಸ್ಥಳವನ್ನು ಆಫ್ ಮಾಡಬಹುದು. ನೀವು ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ, ಸ್ಥಳಕ್ಕಾಗಿ ವೈ-ಫೈ, ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಮತ್ತು ಸೆನ್ಸರ್‌ಗಳ ಬಳಕೆಯನ್ನು ಸಹ ಆಫ್ ಮಾಡಬಹುದು.</translation>
@@ -2271,6 +2273,7 @@
 <translation id="3225319735946384299">ಕೋಡ್ ಸೈನ್ ಮಾಡುವಿಕೆ</translation>
 <translation id="3226487301970807183">ಎಡಕ್ಕೆ ಜೋಡಿಸಲಾದ ಪಾರ್ಶ್ವ ಫಲಕವನ್ನು ಟಾಗಲ್ ಮಾಡಿ</translation>
 <translation id="3227137524299004712">ಮೈಕ್ರೋಫೋನ್</translation>
+<translation id="3232754137068452469">ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್</translation>
 <translation id="3233271424239923319">Linux ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ</translation>
 <translation id="3238192140106069382">ಕನೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ ಮತ್ತು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ಆ್ಯಪ್‌ಗಾಗಿ ಇರುವ ಸಮಯದ ಮಿತಿಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation>
@@ -2309,6 +2312,7 @@
 <translation id="3277691515294482687">Linux ಅನ್ನು ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡುವ ಮೊದಲು, ನನ್ನ ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ನನ್ನ ಫೈಲ್‌ಗಳು ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಬ್ಯಾಕಪ್ ಮಾಡಿ.</translation>
 <translation id="3278001907972365362">ನಿಮ್ಮ Google ಖಾತೆಗಳ ಮೇಲೆ ಗಮನಹರಿಸಬೇಕಿದೆ</translation>
 <translation id="3278800075417428224">CloudReady 2.0 ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಭಾಷೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation>
+<translation id="3278928434075969895">ಈ ಪ್ರೊಫೈಲ್ Chrome OS ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸುತ್ತದೆ.</translation>
 <translation id="3279092821516760512">ಆಯ್ಕೆಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು ಸಮೀಪದಲ್ಲಿರುವಾಗ ನಿಮ್ಮ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಬಹುದು. ನೀವು ಸಮ್ಮತಿಸುವವರೆಗೆ ವರ್ಗಾವಣೆಗಳು ಪ್ರಾರಂಭವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="3279230909244266691">ಈ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ.</translation>
 <translation id="3280237271814976245">&amp;ಇದರಂತೆ ಉಳಿಸು</translation>
@@ -4883,6 +4887,7 @@
 <translation id="5909379458939060601">ಈ ಪ್ರೊಫೈಲ್ ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಅಳಿಸಬೇಕೆ?</translation>
 <translation id="5910363049092958439">ಇದರಂತೆ ಇಮೇಜ್ ಉ&amp;ಳಿಸಿ...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ಸಾಧನ ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿದೆ</translation>
+<translation id="5911505723657992440">ಈ ಪ್ರೊಫೈಲ್‌ಗಾಗಿ Chrome OS ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸಿ.</translation>
 <translation id="5911533659001334206">ಶಾರ್ಟ್‌ಕಟ್ ವೀಕ್ಷಕ</translation>
 <translation id="5914724413750400082">ಮಾಡ್ಯುಲಸ್ (<ph name="MODULUS_NUM_BITS" /> ಬಿಟ್‍ಗಳು):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index e1c4942..881e4f7 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">코드 서명</translation>
 <translation id="3226487301970807183">왼쪽 정렬 측면 패널 전환</translation>
 <translation id="3227137524299004712">마이크</translation>
+<translation id="3232754137068452469">웹 앱</translation>
 <translation id="3233271424239923319">Linux 앱 및 파일 백업</translation>
 <translation id="3238192140106069382">연결 및 확인 중</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />의 시간제한이 삭제되었습니다.</translation>
@@ -2317,6 +2318,7 @@
 <translation id="3277691515294482687">Linux를 업그레이드하기 전에 앱과 파일을 내 파일 폴더에 백업합니다.</translation>
 <translation id="3278001907972365362">Google 계정에 주의가 필요합니다.</translation>
 <translation id="3278800075417428224">CloudReady 2.0 설정에서 언어 관리</translation>
+<translation id="3278928434075969895">프로필이 Chrome OS 프록시 설정을 사용합니다.</translation>
 <translation id="3279092821516760512">선택한 연락처의 사용자가 근처에 있는 경우 나와 공유할 수 있습니다. 내가 수락하지 않으면 전송이 시작되지 않습니다.</translation>
 <translation id="3279230909244266691">이 과정은 몇 분 정도 소요될 수 있습니다. 가상 머신을 시작합니다.</translation>
 <translation id="3280237271814976245">다른 이름으로 저장(&amp;A)...</translation>
@@ -4886,6 +4888,7 @@
 <translation id="5909379458939060601">이 프로필과 인터넷 사용 기록을 삭제하시겠습니까?</translation>
 <translation id="5910363049092958439">이미지를 다른 이름으로 저장(&amp;V)...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> 기기가 오프라인 상태임</translation>
+<translation id="5911505723657992440">프로필에 Chrome OS 프록시 설정을 사용하세요.</translation>
 <translation id="5911533659001334206">바로가기 뷰어</translation>
 <translation id="5914724413750400082">모듈러스(<ph name="MODULUS_NUM_BITS" />비트):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index a6a2287..ed5ae24 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Код колтамгасы</translation>
 <translation id="3226487301970807183">Сол жактагы капталдагы тилкени өчүрүү/күйгүзүү</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб колдонмо</translation>
 <translation id="3233271424239923319">Linux колдонмолору менен файлдарынын камдык көчүрмөлөрүн сактоо</translation>
 <translation id="3238192140106069382">Туташууга жана текшерүүгө аракет кылып жатат</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> үчүн коюлган чектөө өчүрүлдү</translation>
@@ -2317,6 +2318,7 @@
 <translation id="3277691515294482687">Linux'ту жаңыртуудан мурда колдонмолор менен файлдардын камдык көчүрмөлөрү "Менин файлдарым" папкасына сакталсын.</translation>
 <translation id="3278001907972365362">Google аккаунттарыңызды карап чыгыңыз</translation>
 <translation id="3278800075417428224">CloudReady 2.0 жөндөөлөрүнөн тилдерди башкаруу</translation>
+<translation id="3278928434075969895">Бул профиль Chrome OS прокси жөндөөлөрүн колдонот.</translation>
 <translation id="3279092821516760512">Тандалган байланыштар жакын жерде болсо, сиз менен бөлүшө алышат. Маалымат сиздин макулдугуңуз менен гана өткөрүлө баштайт.</translation>
 <translation id="3279230909244266691">Бир нече мүнөткө созулушу мүмкүн. Виртуалдык машина иштетилип баштады.</translation>
 <translation id="3280237271814976245">&amp;Төмөнкүдөй сактоо…</translation>
@@ -4889,6 +4891,7 @@
 <translation id="5909379458939060601">Бул профилди жана серептөө дайындарын өчүрөсүзбү?</translation>
 <translation id="5910363049092958439">Сүрөттү төмөнкүдөй сак&amp;тоо…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> оффлайн режиминде</translation>
+<translation id="5911505723657992440">Бул профиль үчүн Chrome OS прокси жөндөөлөрү колдонулсун.</translation>
 <translation id="5911533659001334206">Тез баскычтарды карап чыгуу</translation>
 <translation id="5914724413750400082">Модуль (<ph name="MODULUS_NUM_BITS" /> бит):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 899fbe28a..a99b20b 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1249,6 +1249,7 @@
 <translation id="2203088913459920044">ຊື່ສາມາດໃຊ້ຕົວອັກສອນ, ຕົວເລກ ແລະ ຕົວອັກສອນພິເສດໄດ້</translation>
 <translation id="220321590587754225">ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້. ກະລຸນາລອງໃໝ່.</translation>
 <translation id="2204034823255629767">ອ່ານ​ ແລະ​​ປ່ຽນອັນໃດໜຶ່ງທີ່​ທ່ານ​ພິມ</translation>
+<translation id="2207115382329026341">ເປີດການນຳໃຊ້ການຕັ້ງຄ່າການສະຕຣີມແອັບຈາກໂທລະສັບຂອງທ່ານ.</translation>
 <translation id="220858061631308971">ກະລຸນາໃສ່ PIN ນີ້ຢູ່ໃນ "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">ບໍ່ສາມາດຕິດຕັ້ງໃຫ້ສຳເລັດໄດ້</translation>
 <translation id="2212565012507486665">ອະນຸຍາດຄຸກກີ້</translation>
@@ -1442,6 +1443,7 @@
 <translation id="2367972762794486313">ສະແດງແອັບ</translation>
 <translation id="236939127352773362">ເມື່ອອຸປະກອນກຳລັງແບ່ງປັນໃກ້ຄຽງ</translation>
 <translation id="2371076942591664043">ເປີດເມື່ອສໍາເລັດ</translation>
+<translation id="237307274687369010">ບໍ່ສາມາດເປີດໃຊ້ <ph name="APP_NAME" /> ໄດ້</translation>
 <translation id="2373666622366160481">ພໍດີກັບເຈ້ຍ</translation>
 <translation id="2375406435414127095">ເຊື່ອມຕໍ່ກັບໂທລະສັບຂອງທ່ານ</translation>
 <translation id="2377588536920405462">ທ່ານສາມາດປິດສະຖານທີ່ໄດ້ໂດຍການປິດການຕັ້ງຄ່າສະຖານທີ່ຫຼັກຢູ່ໃນອຸປະກອນຂອງທ່ານ. ນອກຈາກທ່ານຍັງສາມາດປິດການນຳໃຊ້ Wi‑Fi, ເຄືອຂ່າຍມືຖື ແລະ ເຊັນເຊີຕ່າງໆສຳລັບສະຖານທີ່ໄດ້ໃນການຕັ້ງຄ່າສະຖານທີ່.</translation>
@@ -2276,6 +2278,7 @@
 <translation id="3225319735946384299">ການເຊັນລະຫັດ</translation>
 <translation id="3226487301970807183">ສະຫຼັບແຜງຄວບຄຸມດ້ານຂ້າງຈັດຕຳແໜ່ງໄວ້ຊ້າຍ</translation>
 <translation id="3227137524299004712">ໄມໂຄຣໂຟນ</translation>
+<translation id="3232754137068452469">ແອັບຂອງເວັບ</translation>
 <translation id="3233271424239923319">ສຳຮອງແອັບ ແລະ ໄຟລ໌ Linux</translation>
 <translation id="3238192140106069382">ກຳລັງເຊື່ອມຕໍ່ ແລະ ຢັ້ງຢືນ</translation>
 <translation id="3239373508713281971">ລຶບຂີດຈຳກັດເວລາສຳລັບ <ph name="APP_NAME" /> ອອກແລ້ວ</translation>
@@ -2314,6 +2317,7 @@
 <translation id="3277691515294482687">ສຳຮອງຂໍ້ມູນແອັບ ແລະ ໄຟລ໌ຂອງຂ້ອຍໄວ້ໃນໂຟນເດີໄຟລ໌ຂອງຂ້ອຍກ່ອນທີ່ຈະອັບເກຣດ Linux.</translation>
 <translation id="3278001907972365362">ບັນຊີ Google ຂອງທ່ານຕ້ອງການການດຳເນີນການ</translation>
 <translation id="3278800075417428224">ຈັດການພາສາໃນການຕັ້ງຄ່າ CloudReady 2.0</translation>
+<translation id="3278928434075969895">ໂປຣໄຟລ໌ນີ້ໃຊ້ການຕັ້ງຄ່າພຣັອກຊີຂອງ Chrome OS.</translation>
 <translation id="3279092821516760512">ລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ເລືອກສາມາດແບ່ງປັນກັບທ່ານໄດ້ເມື່ອຢູ່ໃກ້ຄຽງ. ການໂອນຍ້າຍຈະບໍ່ເລີ່ມຂຶ້ນຈົນກວ່າທ່ານຍອມຮັບ.</translation>
 <translation id="3279230909244266691">ຂະບວນການນີ້ອາດຈະໃຊ້ເວລາສອງສາມນາທີ. ໂດຍເລີ່ມຈາກເຄື່ອງຈຳລອງສະເໝືອນຈິງ.</translation>
 <translation id="3280237271814976245">ບັນທຶກເປັນ...</translation>
@@ -4886,6 +4890,7 @@
 <translation id="5909379458939060601">ລຶບໂປຣໄຟລ໌ນີ້ ແລະ ຂໍ້ມູນການນຳໃຊ້ອອກບໍ?</translation>
 <translation id="5910363049092958439">ບັນທຶກຮູບເປັນ...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ອອບລາຍຢູ່</translation>
+<translation id="5911505723657992440">ໃຊ້ການຕັ້ງຄ່າພຣັອກຊີຂອງ Chrome OS ສຳລັບໂປຣໄຟລ໌ນີ້.</translation>
 <translation id="5911533659001334206">ຕົວສະແດງທາງລັດ</translation>
 <translation id="5914724413750400082">ໂມດູນລັດ (<ph name="MODULUS_NUM_BITS" /> ບິດທ໌):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index ba3ca21..208cf13c 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -2282,6 +2282,7 @@
 <translation id="3225319735946384299">Kodo pasirašymas</translation>
 <translation id="3226487301970807183">Perjunkite kairėje lygiuojamą šoninį skydelį</translation>
 <translation id="3227137524299004712">Mikrofonas</translation>
+<translation id="3232754137068452469">Žiniatinklio programa</translation>
 <translation id="3233271424239923319">Kurti atsarginę „Linux“ programų ir failų kopiją</translation>
 <translation id="3238192140106069382">Prisijungiama ir patvirtinama</translation>
 <translation id="3239373508713281971">Programos „<ph name="APP_NAME" />“ laiko apribojimas pašalintas</translation>
@@ -2320,6 +2321,7 @@
 <translation id="3277691515294482687">Prieš naujovinant „Linux“ sukurti programų ir failų atsarginę kopiją aplanke „Mano failai“.</translation>
 <translation id="3278001907972365362">Reikia atkreipti dėmesį į „Google“ paskyrą (-as)</translation>
 <translation id="3278800075417428224">Tvarkyti kalbas 2.0 versijos „CloudReady“ nustatymuose</translation>
+<translation id="3278928434075969895">Šiame profilyje naudojami „Chrome OS“ tarpinio serverio nustatymai.</translation>
 <translation id="3279092821516760512">Pasirinkti kontaktai gali bendrinti su jumis, kai būna netoliese. Perdavimai nebus pradėti, kol nesutiksite.</translation>
 <translation id="3279230909244266691">Šis procesas gali užtrukti kelias minutes. Paleidžiamas virtualus įrenginys.</translation>
 <translation id="3280237271814976245">Išsaugoti &amp;kaip...</translation>
@@ -2349,6 +2351,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> nuolaida</translation>
 <translation id="3305389145870741612">Formatavimas gali užtrukti kelias sekundes. Palaukite.</translation>
 <translation id="3305661444342691068">Atidaryti PDF peržiūros režimu</translation>
+<translation id="3307176291962384345">Gaukite nuolaidų parduotuvėje „<ph name="MERCHANT_NAME" />“</translation>
 <translation id="3308116878371095290">Šiame puslapyje neleidžiama nustatyti slapukų.</translation>
 <translation id="3308134619352333507">Paslėpti mygtuką</translation>
 <translation id="3308852433423051161">Įkeliamas „Google“ padėjėjas...</translation>
@@ -2827,6 +2830,7 @@
 <translation id="3761556954875533505">Leisti svetainei redaguoti failus?</translation>
 <translation id="3764314093345384080">Išsami versijos informacija</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Užmegzti ryšį su USB įrenginiu}one{Užmegzti ryšį su # USB įrenginiu}few{Užmegzti ryšį su # USB įrenginiais}many{Užmegzti ryšį su # USB įrenginio}other{Užmegzti ryšį su # USB įrenginių}}</translation>
+<translation id="3764753550716962406">Leisti „Google“ naudoti krepšelį pasiekiamoms nuolaidoms ieškoti?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Siunčiamas turinys (<ph name="ATTACHMENTS" />) į „<ph name="DEVICE_NAME" />“ įrenginį}one{Siunčiamas turinys (<ph name="ATTACHMENTS" />) į „<ph name="DEVICE_NAME" />“ įrenginį}few{Siunčiamas turinys (<ph name="ATTACHMENTS" />) į „<ph name="DEVICE_NAME" />“ įrenginį}many{Siunčiamas turinys (<ph name="ATTACHMENTS" />) į „<ph name="DEVICE_NAME" />“ įrenginį}other{Siunčiamas turinys (<ph name="ATTACHMENTS" />) į „<ph name="DEVICE_NAME" />“ įrenginį}}</translation>
 <translation id="3765246971671567135">Nepavyko nuskaityti neprisijungus pasiekiamos demonstracinio režimo politikos.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3262,6 +3266,7 @@
 <translation id="4194570336751258953">Įgalinti paspaudimą palietus</translation>
 <translation id="4195643157523330669">Atidaryti naujame skirtuke</translation>
 <translation id="4195814663415092787">Tęskite ten, kur baigėte</translation>
+<translation id="4197917636330710075">Gaukite nuolaidų parduotuvėse „<ph name="MERCHANT_NAME" />“ ir „<ph name="MERCHANT_NAME" />“</translation>
 <translation id="4198268995694216131">Papildomos svetainės</translation>
 <translation id="4200689466366162458">Tinkinti žodžiai</translation>
 <translation id="4200983522494130825">Naujas &amp;skirtukas</translation>
@@ -4642,6 +4647,7 @@
 <translation id="5632566673632479864">Jūsų paskyra <ph name="EMAIL" /> nebeleidžiama kaip pagrindinė paskyra. Kadangi ši paskyra tvarkoma <ph name="DOMAIN" />, jūsų žymės, istorija, slaptažodžiai ir kiti nustatymai bus išvalyti iš šio įrenginio.</translation>
 <translation id="5632592977009207922">Atsisiunčiama, liko <ph name="PERCENT_REMAINING" /> %</translation>
 <translation id="563371367637259496">Mobiliojo ryšio tinklas</translation>
+<translation id="5634446357546764049">Naujausių kelionių ir kitų prisiminimų peržiūra</translation>
 <translation id="5635312199252507107">Leisti konkrečiose svetainėse</translation>
 <translation id="563535393368633106">Klausti prieš pasiekiant (rekomenduojama)</translation>
 <translation id="5636996382092289526">Kad naudotumėte „<ph name="NETWORK_ID" />“, pirmiausia reikės <ph name="LINK_START" />apsilankyti tinklo prisijungimo puslapyje<ph name="LINK_END" />, kuris bus automatiškai atidarytas po kelių sekundžių. Jei taip nenutiks, negalėsite naudoti tinklo.</translation>
@@ -4738,6 +4744,7 @@
 <translation id="5740709157181662145">„<ph name="DEVICE_OS" />“ aparatinės palaikymas ir stabilumas</translation>
 <translation id="574104302965107104">Ekrano vaizdo bendrinimas</translation>
 <translation id="574209121243317957">Tonas</translation>
+<translation id="5745316408658560138">Leisti „Chrome“ ieškoti suasmenintų krepšeliams taikomų nuolaidų?</translation>
 <translation id="5746169159649715125">Išsaugoti kaip PDF</translation>
 <translation id="5747552184818312860">Galioja iki</translation>
 <translation id="5747785204778348146">Kūrėjas – nestabilus</translation>
@@ -4888,6 +4895,7 @@
 <translation id="5909379458939060601">Ištrinti šį profilį ir naršymo duomenis?</translation>
 <translation id="5910363049092958439">Iš&amp;saugoti vaizdą kaip...</translation>
 <translation id="5910726859585389579">„<ph name="DEVICE_TYPE" />“ ryšys išjungtas</translation>
+<translation id="5911505723657992440">Naudoti „Chrome OS“ tarpinio serverio nustatymus šiame profilyje.</translation>
 <translation id="5911533659001334206">Sparčiųjų klavišų peržiūros programa</translation>
 <translation id="5914724413750400082">Modulis (<ph name="MODULUS_NUM_BITS" /> bit.):
   <ph name="MODULUS_HEX_DUMP" />
@@ -5365,6 +5373,7 @@
 <translation id="6370021412472292592">Nepavyko įkelti aprašo.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Bandyti dar kartą</translation>
+<translation id="6374635887697228982">Gauti nuolaidų?</translation>
 <translation id="6377268785556383139">Rezultatų pagal užklausą „<ph name="SEARCH_TEXT" />“: 1</translation>
 <translation id="6380143666419481200">Sutikti ir tęsti</translation>
 <translation id="6382616130475191723">Leidžiama skaityti ir keisti <ph name="SITE_NAME" /></translation>
@@ -6931,6 +6940,7 @@
 <translation id="7956373551960864128">Išsaugoti spausdintuvai</translation>
 <translation id="7957074856830851026">Žr. įrenginio informaciją, pvz., jo serijos numerį ar ištekliaus ID</translation>
 <translation id="7957615753207896812">Atidaryti klaviatūros įrenginio nustatymus</translation>
+<translation id="7958437133377816580">Gaukite nuolaidų parduotuvėse „<ph name="MERCHANT_NAME" />“, „<ph name="MERCHANT_NAME" />“ ir kitur</translation>
 <translation id="7959074893852789871">Faile buvo keli sertifikatai; kai kurie iš jų nebuvo importuoti:</translation>
 <translation id="7959665254555683862">Naujas inkognito &amp;skirtukas</translation>
 <translation id="7961015016161918242">Niekada</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 11d9faa..a38374c 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -2266,6 +2266,7 @@
 <translation id="3225319735946384299">Koda parakstīšana</translation>
 <translation id="3226487301970807183">Pārvietot kreisās puses sānu paneli</translation>
 <translation id="3227137524299004712">Mikrofons</translation>
+<translation id="3232754137068452469">Tīmekļa lietotne</translation>
 <translation id="3233271424239923319">Dublēt Linux lietotnes un failus</translation>
 <translation id="3238192140106069382">Notiek savienojuma izveide un apstiprināšana</translation>
 <translation id="3239373508713281971">Lietotnei <ph name="APP_NAME" /> ir noņemts laika ierobežojums.</translation>
@@ -2333,6 +2334,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> atlaide</translation>
 <translation id="3305389145870741612">Formatēšanas process var ilgt pāris sekundes. Lūdzu, uzgaidiet.</translation>
 <translation id="3305661444342691068">Atvērt PDF priekšskatījumu</translation>
+<translation id="3307176291962384345">Iegūstiet atlaides tirgotājam <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Šai lapai netika atļauts saglabāt sīkfailus.</translation>
 <translation id="3308134619352333507">Slēpt pogu</translation>
 <translation id="3308852433423051161">Notiek Google asistenta ielāde…</translation>
@@ -2811,6 +2813,7 @@
 <translation id="3761556954875533505">Vai ļaut vietnei rediģēt failus?</translation>
 <translation id="3764314093345384080">Detalizēta informācija par versiju</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Saziņa ar USB ierīci}zero{Saziņa ar # USB ierīcēm}one{Saziņa ar # USB ierīci}other{Saziņa ar # USB ierīcēm}}</translation>
+<translation id="3764753550716962406">Vai atļaut uzņēmumam Google meklēt pieejamās atlaides, pamatojoties uz precēm, kas atrodas jūsu grozā?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Notiek satura (<ph name="ATTACHMENTS" />) sūtīšana uz ierīci <ph name="DEVICE_NAME" />}zero{Notiek satura (<ph name="ATTACHMENTS" />) sūtīšana uz ierīci <ph name="DEVICE_NAME" />}one{Notiek satura (<ph name="ATTACHMENTS" />) sūtīšana uz ierīci <ph name="DEVICE_NAME" />}other{Notiek satura (<ph name="ATTACHMENTS" />) sūtīšana uz ierīci <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Neizdevās nolasīt bezsaistes demonstrācijas režīma politiku.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3246,6 +3249,7 @@
 <translation id="4194570336751258953">Iespējot funkciju "pieskarties, lai noklikšķinātu"</translation>
 <translation id="4195643157523330669">Atvērt jaunā cilnē</translation>
 <translation id="4195814663415092787">Atsākt darbu no vietas, kur to beidzu</translation>
+<translation id="4197917636330710075">Iegūstiet atlaides tirgotājiem <ph name="MERCHANT_NAME" /> un <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Citas vietnes</translation>
 <translation id="4200689466366162458">Pielāgotie vārdi</translation>
 <translation id="4200983522494130825">Jauna cilne</translation>
@@ -4624,6 +4628,7 @@
 <translation id="5632566673632479864">Jūsu kontu <ph name="EMAIL" /> vairs nav atļauts izmantot kā primāro kontu. Šis konts tiek pārvaldīts domēnā <ph name="DOMAIN" />, tādēļ jūsu grāmatzīmes, vēsture, paroles un citi iestatījumi tiks dzēsti no šīs ierīces.</translation>
 <translation id="5632592977009207922">Notiek lejupielāde, atlikuši <ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">Mobilais</translation>
+<translation id="5634446357546764049">Skatiet atmiņas par saviem nesenajiem braucieniem un citus fotoattēlus</translation>
 <translation id="5635312199252507107">Atļaut konkrētās vietnēs</translation>
 <translation id="563535393368633106">Jautāt pirms piekļūšanas (ieteicams)</translation>
 <translation id="5636996382092289526">Lai izmantotu <ph name="NETWORK_ID" />, iespējams, jums vispirms būs <ph name="LINK_START" />jāapmeklē tīkla pierakstīšanās lapa<ph name="LINK_END" />, kas tiks automātiski atvērta pēc dažām sekundēm. Ja tā nenotiek, tīklu nevar izmantot.</translation>
@@ -4720,6 +4725,7 @@
 <translation id="5740709157181662145">Operētājsistēmas <ph name="DEVICE_OS" /> aparatūras atbalsts un stabilitāte</translation>
 <translation id="574104302965107104">Displeja spoguļošana</translation>
 <translation id="574209121243317957">Tonis</translation>
+<translation id="5745316408658560138">Vai atļaut pārlūkam Chrome meklēt personalizētas atlaides precēm, kas atrodas jūsu grozos?</translation>
 <translation id="5746169159649715125">Saglabāt kā PDF failu</translation>
 <translation id="5747552184818312860">Termiņš</translation>
 <translation id="5747785204778348146">Izstrādātāju — nav stabila</translation>
@@ -5347,6 +5353,7 @@
 <translation id="6370021412472292592">Nevarēja ielādēt manifestu.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Mēģināt vēlreiz</translation>
+<translation id="6374635887697228982">Vai iegūt atlaides?</translation>
 <translation id="6377268785556383139">1 rezultāts vaicājumam “<ph name="SEARCH_TEXT" />”</translation>
 <translation id="6380143666419481200">Apstiprināt un turpināt</translation>
 <translation id="6382616130475191723">Piešķirta atļauja lasīt un mainīt saturu vietnē <ph name="SITE_NAME" /></translation>
@@ -6912,6 +6919,7 @@
 <translation id="7956373551960864128">Jūsu saglabātie printeri</translation>
 <translation id="7957074856830851026">Skatīt informāciju par ierīci, piemēram, sērijas numuru vai īpašuma ID</translation>
 <translation id="7957615753207896812">Atvērt tastatūras ierīces iestatījumus</translation>
+<translation id="7958437133377816580">Iegūstiet atlaides tirgotājiem <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> u.c.</translation>
 <translation id="7959074893852789871">Failā bija iekļauti vairāki sertifikāti, no kuriem daži netika importēti:</translation>
 <translation id="7959665254555683862">Jauna inkognito &amp;cilne</translation>
 <translation id="7961015016161918242">Nekad</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 331ff22..dd91229 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -2280,6 +2280,7 @@
 <translation id="3225319735946384299">Потпишување шифра</translation>
 <translation id="3226487301970807183">Вклучете/исклучете ја левата странична табла</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб-апликација</translation>
 <translation id="3233271424239923319">Направете бекап на апликациите и датотеките на Linux</translation>
 <translation id="3238192140106069382">Поврзување и потврдување</translation>
 <translation id="3239373508713281971">Временското ограничување за <ph name="APP_NAME" /> е отстрането</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 9a53d119..751d5879 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1239,6 +1239,7 @@
 <translation id="2203088913459920044">പേരിൽ അക്ഷരങ്ങളും അക്കങ്ങളും പ്രത്യേക അക്ഷരങ്ങളും ഉപയോഗിക്കാം</translation>
 <translation id="220321590587754225">കണക്റ്റ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="2204034823255629767">നിങ്ങൾ ടൈപ്പുചെയ്യുന്നവയെല്ലാം വായിക്കുക, മാറ്റുക</translation>
+<translation id="2207115382329026341">നിങ്ങളുടെ ഫോണിലെ ആപ്പ് സ്‌ട്രീമിംഗ് ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുക.</translation>
 <translation id="220858061631308971">"<ph name="DEVICE_NAME" />" എന്നതിൽ PIN കോഡ് നൽകുക:</translation>
 <translation id="2210462644007531147">ഇൻസ്റ്റാൾ ചെയ്യൽ പൂർത്തിയാക്കാനായില്ല</translation>
 <translation id="2212565012507486665">കുക്കികൾ അനുവദിക്കുക</translation>
@@ -1429,6 +1430,7 @@
 <translation id="2367972762794486313">അപ്ലിക്കേഷനുകൾ കാണിക്കുക</translation>
 <translation id="236939127352773362">സമീപത്ത് ഉപകരണങ്ങൾ പങ്കിടുമ്പോൾ</translation>
 <translation id="2371076942591664043">ചെയ്തുകഴിയുമ്പോള്‍ &amp;തുറക്കുക</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> ലോഞ്ച് ചെയ്യാനായില്ല</translation>
 <translation id="2373666622366160481">പേപ്പറിന് അനുയോജ്യമാക്കുക</translation>
 <translation id="2375406435414127095">ഫോണിലേക്ക് കണക്‌റ്റ് ചെയ്യുക</translation>
 <translation id="2377588536920405462">നിങ്ങളുടെ ഉപകരണത്തിലെ പ്രധാന ലൊക്കേഷൻ ക്രമീകരണം ഓഫാക്കുക വഴി നിങ്ങൾക്ക് ലൊക്കേഷൻ ഓഫാക്കാവുന്നതാണ്. ലൊക്കേഷന് വേണ്ടിയുള്ള വൈഫൈ, മൊബൈൽ നെറ്റ്‌വർക്കുകൾ, സെൻസറുകൾ എന്നിവയുടെ ഉപയോഗവും ലൊക്കേഷൻ ക്രമീകരണത്തിൽ ഓഫാക്കാനാവും.</translation>
@@ -2263,6 +2265,7 @@
 <translation id="3225319735946384299">കോഡ് സൈനിംഗ്</translation>
 <translation id="3226487301970807183">ഇടത് വശത്ത് അലൈൻ ചെയ്തിരിക്കുന്ന സൈഡ് പാനൽ ടോഗിൾ ചെയ്യുക</translation>
 <translation id="3227137524299004712">മൈക്രോഫോൺ</translation>
+<translation id="3232754137068452469">വെബ് ആപ്പ്</translation>
 <translation id="3233271424239923319">Linux ആപ്പുകളും ഫയലുകളും ബാക്കപ്പെടുക്കുക</translation>
 <translation id="3238192140106069382">കണക്റ്റ് ചെയ്‌ത് പരിശോധിച്ചുറപ്പിക്കുന്നു</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> എന്നതിനുള്ള സമയപരിധി നീക്കം ചെയ്തു</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index d22730d6..86eb19df 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1248,6 +1248,7 @@
 <translation id="2203088913459920044">Нэр нь үсэг, тоо болон тусгай тэмдэгт ашиглах боломжтой</translation>
 <translation id="220321590587754225">Холбогдож чадсангүй. Дахин оролдоно уу.</translation>
 <translation id="2204034823255629767">Бичиж буй зүйлээ уншиж, өөрчлөх</translation>
+<translation id="2207115382329026341">Утаснаасаа аппуудын стримингийн тохиргоог идэвхжүүлнэ үү.</translation>
 <translation id="220858061631308971">"<ph name="DEVICE_NAME" />"-д дараах ПИН кодыг оруул. Үүнд:</translation>
 <translation id="2210462644007531147">Суулгалтыг дуусгаж чадсангүй</translation>
 <translation id="2212565012507486665">Күүкиг зөвшөөрөх</translation>
@@ -1441,6 +1442,7 @@
 <translation id="2367972762794486313">Аппликейшнүүдийг харуулах</translation>
 <translation id="236939127352773362">Төхөөрөмжүүд ойролцоо хуваалцаж байх үед</translation>
 <translation id="2371076942591664043">Татаж авч дууссаны дараа нээ</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" />-г эхлүүлж чадсангүй</translation>
 <translation id="2373666622366160481">Цаасанд багтаах</translation>
 <translation id="2375406435414127095">Утсандаа холбогдох</translation>
 <translation id="2377588536920405462">Та төхөөрөмжийнхөө үндсэн Байршлын тохиргоог унтрааснаар байршлыг унтраах боломжтой. Та мөн байршилд зориулж Wi-Fi, мобайл сүлжээ болон мэдрэгчийг ашиглахыг байршлын тохиргоонд унтраах боломжтой.</translation>
@@ -2275,6 +2277,7 @@
 <translation id="3225319735946384299">Код баталгаажуулалт</translation>
 <translation id="3226487301970807183">Зүүн талд зэрэгцүүлсэн хажуугийн самбарыг асаах/унтраах</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб Апп</translation>
 <translation id="3233271424239923319">Linux аппууд болон файлуудыг нөөцлөх</translation>
 <translation id="3238192140106069382">Холбогдож, баталгаажуулж байна</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />-н цагийн хязгаарыг устгалаа</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index d368f6b..99a0ba6 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -2278,6 +2278,7 @@
 <translation id="3225319735946384299">कोड साइनिंग</translation>
 <translation id="3226487301970807183">डाव्या बाजूला अलाइन केलेले साइड पॅनल टॉगल करा</translation>
 <translation id="3227137524299004712">मायक्रोफोन</translation>
+<translation id="3232754137068452469">वेब अ‍ॅप</translation>
 <translation id="3233271424239923319">Linux अ‍ॅप्स आणि फायलींचा बॅकअप घ्या</translation>
 <translation id="3238192140106069382">कनेक्ट करत आहे आणि पडताळणी करत आहे</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> साठी वेळ मर्यादा काढली</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index e63b273..e40e49e04 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Menandatangan Kod</translation>
 <translation id="3226487301970807183">Togol panel sisi yang dijajarkan ke kiri</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Apl Web</translation>
 <translation id="3233271424239923319">Sandarkan apl dan fail Linux</translation>
 <translation id="3238192140106069382">Menyambung dan mengesahkan</translation>
 <translation id="3239373508713281971">Had masa dialih keluar untuk <ph name="APP_NAME" /></translation>
@@ -2317,6 +2318,7 @@
 <translation id="3277691515294482687">Sandarkan apl dan fail saya pada folder Fail Saya sebelum meningkatkan Linux.</translation>
 <translation id="3278001907972365362">Akaun Google anda memerlukan perhatian</translation>
 <translation id="3278800075417428224">Urus bahasa dalam tetapan CloudReady 2.0</translation>
+<translation id="3278928434075969895">Profil ini menggunakan tetapan proksi Chrome OS.</translation>
 <translation id="3279092821516760512">Kenalan yang dipilih boleh berkongsi dengan anda apabila mereka berada berdekatan. Pemindahan tidak akan bermula sehinggalah anda menerima perkongsian.</translation>
 <translation id="3279230909244266691">Proses ini mungkin mengambil masa beberapa minit. Memulakan mesin maya.</translation>
 <translation id="3280237271814976245">Simpan &amp;sebagai...</translation>
@@ -4889,6 +4891,7 @@
 <translation id="5909379458939060601">Padamkan profil dan data semakan imbas ini?</translation>
 <translation id="5910363049092958439">Si&amp;mpan Imej Sebagai...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> di luar talian</translation>
+<translation id="5911505723657992440">Gunakan tetapan proksi Chrome OS untuk profil ini.</translation>
 <translation id="5911533659001334206">Paparan pintasan</translation>
 <translation id="5914724413750400082">Modulus (<ph name="MODULUS_NUM_BITS" /> bit):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 8356cf8a..84d5122 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -2277,6 +2277,7 @@
 <translation id="3225319735946384299">ကုဒ်ဖြင့် လက်မှတ်ထိုးရန်</translation>
 <translation id="3226487301970807183">ဘယ်ဘက်ညှိထားသော ဘေးအကန့် ပြောင်းရန်</translation>
 <translation id="3227137524299004712">မိုက်ခရိုဖုန်း</translation>
+<translation id="3232754137068452469">ဝဘ် အက်ပ်</translation>
 <translation id="3233271424239923319">Linux အက်ပ်နှင့် ဖိုင်များ အရန်သိမ်းသည်</translation>
 <translation id="3238192140106069382">ချိတ်ဆက်ပြီး စိစစ်နေသည်</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> အတွက် အချိန်ကန့်သတ်ချက် ဖယ်ရှားလိုက်သည်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 541edfd..72acc78 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -2254,6 +2254,7 @@
 <translation id="3225319735946384299">कोड साइनिङ</translation>
 <translation id="3226487301970807183">बायाँतिर एलाइन गरिएको साइड प्यानल टगल गर्नुहोस्</translation>
 <translation id="3227137524299004712">माइक्रोफोन</translation>
+<translation id="3232754137068452469">वेब एप</translation>
 <translation id="3233271424239923319">Linux एप र फाइलहरू ब्याकअप गर्नुहोस्</translation>
 <translation id="3238192140106069382">डिभाइस कनेक्ट हुँदै छ र पुष्टि गरिँदै छ</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> को समय सीमा हटाइयो</translation>
@@ -2291,6 +2292,7 @@
 <translation id="3275778913554317645">विन्डोको रूपमा खोल्नुहोस्</translation>
 <translation id="3277691515294482687">Linux अपग्रेड गर्नुअघि मेरा एप तथा फाइलहरू मेरा फाइलहरू नामक फोल्डरमा ब्याकअप गरियोस्।</translation>
 <translation id="3278001907972365362">तपाईंका Google खाता(हरू) मा ध्यान दिनु पर्ने हुन्छ</translation>
+<translation id="3278928434075969895">यो प्रोफाइलले Chrome OS को प्रोक्सीसम्बन्धी सेटिङ प्रयोग गर्छ।</translation>
 <translation id="3279092821516760512">तपाईंको वरपर हुँदा तपाईंसँग सामग्री सेयर गर्न सक्ने सम्पर्क सूचीमा भएका व्यक्तिहरू चयन गर्नुहोस्। तपाईंले सामग्री सार्ने निम्तो स्वीकार नगरेसम्म सामग्री सार्ने काम सुरु हुँदैन।</translation>
 <translation id="3279230909244266691">यो प्रक्रिया पूरा हुन केही बेर लाग्न सक्छ। भर्चुअल मेसिन सुरु गर्दै।</translation>
 <translation id="3280237271814976245">यसको &amp;रूपमा बचत गर्नुहोस्...</translation>
@@ -4824,6 +4826,7 @@
 <translation id="5909379458939060601">यो प्रोफाइल र ब्राउजिङ डेटा मेटाउने हो?</translation>
 <translation id="5910363049092958439">यस रूपमा छविलाई बच&amp;त गर्नुहोस्...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> अफलाइन छ</translation>
+<translation id="5911505723657992440">यो प्रोफाइलमा Chrome OS को प्रोक्सीसम्बन्धी सेटिङ प्रयोग गर्नुहोस्।</translation>
 <translation id="5911533659001334206">सर्टकटको दर्शक</translation>
 <translation id="5914724413750400082">मापांक (<ph name="MODULUS_NUM_BITS" /> बिटहरू): <ph name="MODULUS_HEX_DUMP" /> 
 सार्वजनिक प्रकाशक ( <ph name="PUBLIC_EXPONENT_NUM_BITS" /> बिट): 
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index c9abcc84..6290276 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1240,6 +1240,7 @@
 <translation id="2203088913459920044">De naam mag letters, cijfers en speciale tekens bevatten</translation>
 <translation id="220321590587754225">Kan geen verbinding maken. Probeer het opnieuw.</translation>
 <translation id="2204034823255629767">Alles lezen en wijzigen wat je typt</translation>
+<translation id="2207115382329026341">Zet instellingen voor het streamen van apps aan op je telefoon.</translation>
 <translation id="220858061631308971">Voer deze pincode in op '<ph name="DEVICE_NAME" />':</translation>
 <translation id="2210462644007531147">Kan de installatie niet afronden</translation>
 <translation id="2212565012507486665">Cookies toestaan</translation>
@@ -1430,6 +1431,7 @@
 <translation id="2367972762794486313">Apps bekijken</translation>
 <translation id="236939127352773362">Als apparaten in de buurt content delen</translation>
 <translation id="2371076942591664043">Openen wanneer geree&amp;d</translation>
+<translation id="237307274687369010">Kan <ph name="APP_NAME" /> niet starten</translation>
 <translation id="2373666622366160481">Aanpassen aan papierformaat</translation>
 <translation id="2375406435414127095">Verbinding maken met je telefoon</translation>
 <translation id="2377588536920405462">Je kunt Locatie uitzetten door de primaire instelling voor Locatie op je apparaat uit te zetten. Je kunt het gebruik van wifi, mobiele netwerken en sensoren voor locatie ook uitzetten via de locatie-instellingen.</translation>
@@ -2263,6 +2265,7 @@
 <translation id="3225319735946384299">Handtekening bij programmacode</translation>
 <translation id="3226487301970807183">Links uitgelijnd zijvenster schakelen</translation>
 <translation id="3227137524299004712">Microfoon</translation>
+<translation id="3232754137068452469">Webapp</translation>
 <translation id="3233271424239923319">Back-up maken van Linux-apps en -bestanden</translation>
 <translation id="3238192140106069382">Verbinden en verifiëren</translation>
 <translation id="3239373508713281971">Tijdslimiet verwijderd voor <ph name="APP_NAME" /></translation>
@@ -2301,6 +2304,7 @@
 <translation id="3277691515294482687">Een back-up van mijn apps en bestanden maken in de map 'Mijn bestanden' voordat Linux wordt geüpgraded.</translation>
 <translation id="3278001907972365362">Je Google-accounts vereisen aandacht</translation>
 <translation id="3278800075417428224">Talen beheren in de instellingen van CloudReady 2.0</translation>
+<translation id="3278928434075969895">Dit profiel gebruikt Chrome OS-proxyinstellingen.</translation>
 <translation id="3279092821516760512">Geselecteerde contacten kunnen met je delen als ze in de buurt zijn. Overdrachten worden pas gestart nadat je ze accepteert.</translation>
 <translation id="3279230909244266691">Dit proces kan enkele minuten duren. De virtuele machine wordt gestart.</translation>
 <translation id="3280237271814976245">Opslaan &amp;als...</translation>
@@ -4870,6 +4874,7 @@
 <translation id="5909379458939060601">Dit profiel en bijbehorende browsegegevens verwijderen?</translation>
 <translation id="5910363049092958439">Af&amp;beelding opslaan als...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> is offline</translation>
+<translation id="5911505723657992440">Chrome OS-proxyinstellingen gebruiken voor dit profiel.</translation>
 <translation id="5911533659001334206">Sneltoetsenviewer</translation>
 <translation id="5914724413750400082">Modulus (<ph name="MODULUS_NUM_BITS" />-bits):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index b8625df..4e96d37 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -2273,6 +2273,7 @@
 <translation id="3225319735946384299">Signering med kode</translation>
 <translation id="3226487301970807183">Slå av/på venstrejustert sidepanel</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Nettprogram</translation>
 <translation id="3233271424239923319">Sikkerhetskopiér Linux-apper og -filer</translation>
 <translation id="3238192140106069382">Kobler til og verifiserer</translation>
 <translation id="3239373508713281971">Tidsgrensen er fjernet for <ph name="APP_NAME" /></translation>
@@ -2311,6 +2312,7 @@
 <translation id="3277691515294482687">Sikkerhetskopiér appene og filene mine til Mine filer-mappen før Linux oppgraderes.</translation>
 <translation id="3278001907972365362">Sjekk Google-kontoen(e) din(e)</translation>
 <translation id="3278800075417428224">Administrer språk i CloudReady 2.0-innstillingene</translation>
+<translation id="3278928434075969895">Denne profilen bruker proxy-innstillingene i Chrome OS.</translation>
 <translation id="3279092821516760512">Kontakter du velger, kan dele med deg når de er i nærheten. Overføringer starter ikke før du godtar.</translation>
 <translation id="3279230909244266691">Denne prosessen kan ta noen minutter. Starter den virtuelle maskinen.</translation>
 <translation id="3280237271814976245">L&amp;agre som...</translation>
@@ -4879,6 +4881,7 @@
 <translation id="5909379458939060601">Vil du slette denne profilen og de tilhørende nettlesingsdataene?</translation>
 <translation id="5910363049092958439">Lagre &amp;bildet som</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> er uten nett</translation>
+<translation id="5911505723657992440">Bruk proxy-innstillingene i Chrome OS for denne profilen.</translation>
 <translation id="5911533659001334206">Snarveivisning</translation>
 <translation id="5914724413750400082">Modulus (<ph name="MODULUS_NUM_BITS" /> biters):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index c9a389a1..f26c2949 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -2262,6 +2262,7 @@
 <translation id="3225319735946384299">କୋଡ୍‌ ହସ୍ତାକ୍ଷର</translation>
 <translation id="3226487301970807183">ବାମକୁ ଆଲାଇନ୍ କରାଯାଇଥିବା ସାଇଡ୍ ପ୍ୟାନେଲକୁ ଟୋଗଲ୍ କରନ୍ତୁ</translation>
 <translation id="3227137524299004712">ମାଇକ୍ରୋଫୋନ୍</translation>
+<translation id="3232754137068452469">ୱେବ୍ ଆପ୍</translation>
 <translation id="3233271424239923319">Linux ଆପ୍ସ ଏବଂ ଫାଇଲ୍‌ଗୁଡ଼ିକର ବ୍ୟାକ୍‍ଅପ୍ ନିଅନ୍ତୁ</translation>
 <translation id="3238192140106069382">ସଂଯୋଗ ଓ ଯାଞ୍ଚ କରାଯାଉଛି</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ପାଇଁ ସମୟ ସୀମା କଢ଼ାଯାଇଛି</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index a0bece50..8df8662 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">ਕੋਡ ਸਾਈਨਿੰਗ</translation>
 <translation id="3226487301970807183">ਖੱਬੇ ਪਾਸੇ ਇਕਸਾਰ ਕੀਤੇ ਸਾਈਡ ਪੈਨਲ ਨੂੰ ਟੌਗਲ ਕਰੋ</translation>
 <translation id="3227137524299004712">ਮਾਈਕ੍ਰੋਫੋਨ</translation>
+<translation id="3232754137068452469">ਵੈੱਬ ਐਪ</translation>
 <translation id="3233271424239923319">Linux ਐਪਾਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲਓ</translation>
 <translation id="3238192140106069382">ਕਨੈਕਟ ਕੀਤਾ ਅਤੇ ਪੁਸ਼ਟੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ਲਈ ਸਮਾਂ ਸੀਮਾ ਹਟਾਈ ਗਈ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index cce1049..a78d122f 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1238,6 +1238,7 @@
 <translation id="2203088913459920044">Nazwa może zawierać litery, cyfry i znaki specjalne</translation>
 <translation id="220321590587754225">Nie udało się połączyć. Spróbuj ponownie.</translation>
 <translation id="2204034823255629767">Odczyt i zmiana wpisanego tekstu</translation>
+<translation id="2207115382329026341">Włącz na telefonie ustawienia strumieniowego przesyłania aplikacji.</translation>
 <translation id="220858061631308971">Wpisz ten kod PIN na urządzeniu „<ph name="DEVICE_NAME" />”:</translation>
 <translation id="2210462644007531147">Nie udało się ukończyć instalacji</translation>
 <translation id="2212565012507486665">Zezwalaj na pliki cookie</translation>
@@ -1428,6 +1429,7 @@
 <translation id="2367972762794486313">Pokaż aplikacje</translation>
 <translation id="236939127352773362">Gdy urządzenia w pobliżu udostępniają dane</translation>
 <translation id="2371076942591664043">Otwórz po &amp;zakończeniu</translation>
+<translation id="237307274687369010">Nie udało się uruchomić aplikacji <ph name="APP_NAME" /></translation>
 <translation id="2373666622366160481">Dopasuj do papieru</translation>
 <translation id="2375406435414127095">Połącz ze swoim telefonem</translation>
 <translation id="2377588536920405462">Aby wyłączyć lokalizację, wyłącz główne ustawienie Lokalizacja na swoim urządzeniu. W ustawieniach lokalizacji możesz też wyłączyć korzystanie z sieci Wi‑Fi, sieci komórkowych i czujników przy określaniu lokalizacji.</translation>
@@ -2261,6 +2263,7 @@
 <translation id="3225319735946384299">Podpisywanie kodu</translation>
 <translation id="3226487301970807183">Przełącz lewy panel boczny</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Aplikacja internetowa</translation>
 <translation id="3233271424239923319">Utwórz kopię zapasową aplikacji i plików Linuksa</translation>
 <translation id="3238192140106069382">Łączę i weryfikuję</translation>
 <translation id="3239373508713281971">Usunięto limit czasu dla aplikacji <ph name="APP_NAME" />.</translation>
@@ -2299,6 +2302,7 @@
 <translation id="3277691515294482687">Przed uaktualnieniem Linuksa utwórz kopię zapasową moich aplikacji i plików w folderze Moje pliki.</translation>
 <translation id="3278001907972365362">Musisz się zająć swoimi kontami Google</translation>
 <translation id="3278800075417428224">Zarządzaj językami w ustawieniach CloudReady 2.0</translation>
+<translation id="3278928434075969895">Ten profil korzysta z ustawień serwera proxy Chrome OS.</translation>
 <translation id="3279092821516760512">Wybrane kontakty mogą udostępniać Ci dane, gdy znajdują się w pobliżu. Przesyłanie danych nie rozpocznie się bez Twojej zgody.</translation>
 <translation id="3279230909244266691">Może to potrwać kilka minut. Uruchamiam maszynę wirtualną.</translation>
 <translation id="3280237271814976245">Zapisz &amp;jako...</translation>
@@ -4869,6 +4873,7 @@
 <translation id="5909379458939060601">Usunąć ten profil i dane przeglądania?</translation>
 <translation id="5910363049092958439">Zapisz gra&amp;fikę jako...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> jest offline</translation>
+<translation id="5911505723657992440">Używaj ustawień serwera proxy Chrome OS na tym profilu.</translation>
 <translation id="5911533659001334206">Przeglądarka skrótów</translation>
 <translation id="5914724413750400082">Modulo (<ph name="MODULUS_NUM_BITS" /> b):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 3207ecf7..b8cd9fb 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1253,6 +1253,7 @@
 <translation id="2203088913459920044">Os nomes podem usar letras, números e caracteres especiais</translation>
 <translation id="220321590587754225">Não foi possível conectar. Tente de novo.</translation>
 <translation id="2204034823255629767">Ler e alterar tudo o que você digitar</translation>
+<translation id="2207115382329026341">Ative as configurações de streaming de apps pelo smartphone.</translation>
 <translation id="220858061631308971">Digite este código PIN em "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Não foi possível concluir a instalação</translation>
 <translation id="2212565012507486665">Permitir cookies</translation>
@@ -1446,6 +1447,7 @@
 <translation id="2367972762794486313">Mostrar aplicativos</translation>
 <translation id="236939127352773362">Quando dispositivos estiverem compartilhando itens por perto</translation>
 <translation id="2371076942591664043">Abrir quando estiver &amp;concluído</translation>
+<translation id="237307274687369010">Falha ao abrir <ph name="APP_NAME" /></translation>
 <translation id="2373666622366160481">Ajustar à página</translation>
 <translation id="2375406435414127095">Conecte-se ao seu smartphone</translation>
 <translation id="2377588536920405462">Na configuração de localização principal do dispositivo é possível desativar esse recurso. Você também pode desativar o uso de Wi-Fi, redes móveis e sensores de local nessas configurações.</translation>
@@ -2280,6 +2282,7 @@
 <translation id="3225319735946384299">Assinatura do código</translation>
 <translation id="3226487301970807183">Ativar/desativar o painel lateral alinhado à esquerda</translation>
 <translation id="3227137524299004712">Microfone</translation>
+<translation id="3232754137068452469">App da Web</translation>
 <translation id="3233271424239923319">Fazer backup de apps e arquivos do Linux</translation>
 <translation id="3238192140106069382">Conectando e verificando</translation>
 <translation id="3239373508713281971">Tempo limite removido para <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index efccea4..edfbda1 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1241,6 +1241,7 @@
 <translation id="2203088913459920044">O nome pode utilizar letras, números e carateres especiais</translation>
 <translation id="220321590587754225">Não foi possível ligar. Tente novamente.</translation>
 <translation id="2204034823255629767">Ler e alterar tudo o que introduzir</translation>
+<translation id="2207115382329026341">Ative as definições de streaming de apps do telemóvel.</translation>
 <translation id="220858061631308971">Introduza este código PIN no "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Não foi possível concluir a instalação</translation>
 <translation id="2212565012507486665">Permitir cookies</translation>
@@ -1431,6 +1432,7 @@
 <translation id="2367972762794486313">Mostrar aplicações</translation>
 <translation id="236939127352773362">Quando existirem dispositivos a partilhar nas proximidades</translation>
 <translation id="2371076942591664043">Abrir quando estiver concluí&amp;do</translation>
+<translation id="237307274687369010">Não foi possível iniciar a app <ph name="APP_NAME" /></translation>
 <translation id="2373666622366160481">Ajustar à folha de papel</translation>
 <translation id="2375406435414127095">Associar ao seu telemóvel</translation>
 <translation id="2377588536920405462">Pode desativar a Localização ao desativar a definição de Localização principal no seu dispositivo. Também pode desativar a utilização das redes Wi-Fi, das redes móveis e dos sensores para fins de localização nas definições de localização.</translation>
@@ -2266,6 +2268,7 @@
 <translation id="3225319735946384299">Assinatura de código</translation>
 <translation id="3226487301970807183">Ative/desative o painel lateral alinhado à esquerda</translation>
 <translation id="3227137524299004712">Microfone</translation>
+<translation id="3232754137068452469">App Web</translation>
 <translation id="3233271424239923319">Fazer uma cópia de segurança de aplicações e ficheiros do Linux</translation>
 <translation id="3238192140106069382">A ligar e a validar…</translation>
 <translation id="3239373508713281971">Limite de tempo removido para a app <ph name="APP_NAME" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 67c0794..4872ef8 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -2265,6 +2265,7 @@
 <translation id="3225319735946384299">Semnarea codului</translation>
 <translation id="3226487301970807183">Activează / dezactivează panoul lateral aliniat la stânga</translation>
 <translation id="3227137524299004712">Microfon</translation>
+<translation id="3232754137068452469">Aplicație web</translation>
 <translation id="3233271424239923319">Fă backup pentru aplicațiile și fișierele Linux</translation>
 <translation id="3238192140106069382">Se conectează și se verifică</translation>
 <translation id="3239373508713281971">Limita de timp pentru <ph name="APP_NAME" /> a fost eliminată</translation>
@@ -2303,6 +2304,7 @@
 <translation id="3277691515294482687">Fă backup aplicațiilor și fișierelor în dosarul Fișierele mele înainte să faci upgrade la Linux.</translation>
 <translation id="3278001907972365362">Trebuie să te ocupi de Conturile Google.</translation>
 <translation id="3278800075417428224">Gestionează limbile în setările CloudReady 2.0</translation>
+<translation id="3278928434075969895">Acest profil folosește setările proxy din sistemul de operare Chrome.</translation>
 <translation id="3279092821516760512">Persoanele de contact selectate îți pot trimite fișiere când sunt în apropiere. Transferurile nu vor începe până când nu accepți.</translation>
 <translation id="3279230909244266691">Poate dura câteva minute. Se pornește mașina virtuală.</translation>
 <translation id="3280237271814976245">Salvează c&amp;a...</translation>
@@ -4874,6 +4876,7 @@
 <translation id="5909379458939060601">Ștergi profilul și datele de navigare?</translation>
 <translation id="5910363049092958439">Sal&amp;vează imaginea ca...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> este offline</translation>
+<translation id="5911505723657992440">Folosește setările proxy din sistemul de operare Chrome pentru acest profil.</translation>
 <translation id="5911533659001334206">Vizualizatorul de comenzi rapide</translation>
 <translation id="5914724413750400082">Modul (<ph name="MODULUS_NUM_BITS" /> (de) biți):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 3c3c52fe..08b01f6a 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1242,6 +1242,7 @@
 <translation id="2203088913459920044">В названии можно использовать буквы, цифры и специальные символы.</translation>
 <translation id="220321590587754225">Не удалось подключиться. Повторите попытку.</translation>
 <translation id="2204034823255629767">Просмотр и изменение вводимого текста</translation>
+<translation id="2207115382329026341">Включите настройки стриминга приложений на телефоне.</translation>
 <translation id="220858061631308971">Введите PIN-код для устройства "<ph name="DEVICE_NAME" />":</translation>
 <translation id="2210462644007531147">Установка не выполнена</translation>
 <translation id="2212565012507486665">Разрешить файлы cookie</translation>
@@ -1432,6 +1433,7 @@
 <translation id="2367972762794486313">Показать сервисы</translation>
 <translation id="236939127352773362">Когда устройства поблизости могут обмениваться контентом</translation>
 <translation id="2371076942591664043">Открыть по &amp;завершении</translation>
+<translation id="237307274687369010">Не удалось запустить приложение "<ph name="APP_NAME" />"</translation>
 <translation id="2373666622366160481">По размеру бумаги</translation>
 <translation id="2375406435414127095">Настройте подключение к телефону</translation>
 <translation id="2377588536920405462">Определение местоположения можно отключить в настройках устройства. Там же можно запретить использование датчиков, Wi‑Fi и мобильных сетей для уточнения местоположения.</translation>
@@ -2265,6 +2267,7 @@
 <translation id="3225319735946384299">Подписывание кода</translation>
 <translation id="3226487301970807183">Показать или скрыть боковую панель слева</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб-приложение</translation>
 <translation id="3233271424239923319">Выполнить резервное копирование приложений и файлов Linux</translation>
 <translation id="3238192140106069382">Подключение и проверка…</translation>
 <translation id="3239373508713281971">Для приложения "<ph name="APP_NAME" />" снято ограничение времени использования.</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 631fd47..64f33ea4 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -2267,6 +2267,7 @@
 <translation id="3225319735946384299">කේත අත්සන් කිරීම</translation>
 <translation id="3226487301970807183">වමට පෙළගැස්වූ පැති පැනලය ටොගල කරන්න</translation>
 <translation id="3227137524299004712">මයික්‍රෆෝනය:</translation>
+<translation id="3232754137068452469">වෙබ් යෙදුම</translation>
 <translation id="3233271424239923319">ලිනක්ස් යෙදුම් සහ ගොනු උපස්ථ කරන්න</translation>
 <translation id="3238192140106069382">සම්බන්ධ කරමින් සහ සත්‍යාපනය කරමින්</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> සඳහා වන කාල සීමාව</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 2e6c612..2c21e85 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -2266,6 +2266,7 @@
 <translation id="3225319735946384299">Podpisovanie kódu</translation>
 <translation id="3226487301970807183">Prepínač zarovnania bočného panela vľavo</translation>
 <translation id="3227137524299004712">Mikrofón</translation>
+<translation id="3232754137068452469">Webová aplikácia</translation>
 <translation id="3233271424239923319">Zálohovanie aplikácií a súborov pre Linux</translation>
 <translation id="3238192140106069382">Prebieha pripájanie a overovanie</translation>
 <translation id="3239373508713281971">Bol odstránený časový limit pre aplikáciu <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index fd8635f..0ea51129 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -2282,6 +2282,7 @@
 <translation id="3225319735946384299">Podpisovanje kode</translation>
 <translation id="3226487301970807183">Preklop levo poravnanega stranskega podokna</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Spletna aplikacija</translation>
 <translation id="3233271424239923319">Varnostno kopiranje aplikacij in datotek za Linux</translation>
 <translation id="3238192140106069382">Vzpostavljanje povezave in preverjanje</translation>
 <translation id="3239373508713281971">Časovna omejitev je odstranjena za aplikacijo <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index d68bf41..2099074 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -2261,6 +2261,7 @@
 <translation id="3225319735946384299">Nënshkrimi me kod</translation>
 <translation id="3226487301970807183">Kalo te paneli anësor i bashkërenditur majtas</translation>
 <translation id="3227137524299004712">Mikrofoni</translation>
+<translation id="3232754137068452469">Aplikacioni i uebit</translation>
 <translation id="3233271424239923319">Rezervo aplikacionet dhe skedarët Linux</translation>
 <translation id="3238192140106069382">Po lidh dhe po verifikon</translation>
 <translation id="3239373508713281971">Kufiri kohor u hoq për <ph name="APP_NAME" /></translation>
@@ -2328,6 +2329,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> ulje</translation>
 <translation id="3305389145870741612">Procesi i formatimit mund të zgjasë disa sekonda. Qëndro në pritje.</translation>
 <translation id="3305661444342691068">Hap PDF-në në pamjen paraprake</translation>
+<translation id="3307176291962384345">Merr zbritje për <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Kjo faqe u parandalua që të vendosë kuki.</translation>
 <translation id="3308134619352333507">Fshihe butonin</translation>
 <translation id="3308852433423051161">Po ngarkon "Asistentin e Google"...</translation>
@@ -2806,6 +2808,7 @@
 <translation id="3761556954875533505">Do ta lejosh sajtin të modifikojë skedarët?</translation>
 <translation id="3764314093345384080">Informacioni i detajuar i ndërtimit</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komuniko me një pajisje me USB}other{Komuniko me # pajisje me USB}}</translation>
+<translation id="3764753550716962406">Të lejohet që Google të përdorë grumbullin tënd të artikujve për të gjetur zbritjet që ofrohen?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{Po dërgohen <ph name="ATTACHMENTS" /> te <ph name="DEVICE_NAME" />}other{Po dërgohen <ph name="ATTACHMENTS" /> te <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Politika jashtë linje e modalitetit të demonstrimit nuk mund të lexohej.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3241,6 +3244,7 @@
 <translation id="4194570336751258953">Aktivizo "trokit për të klikuar"</translation>
 <translation id="4195643157523330669">Hape në një skedë të re</translation>
 <translation id="4195814663415092787">Vazhdo ku e ke lënë</translation>
+<translation id="4197917636330710075">Merr zbritje për <ph name="MERCHANT_NAME" /> dhe <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Sajte të tjera</translation>
 <translation id="4200689466366162458">Fjalët e personalizuara</translation>
 <translation id="4200983522494130825">&amp;Skedë e re</translation>
@@ -4619,6 +4623,7 @@
 <translation id="5632566673632479864">Llogaria jote <ph name="EMAIL" /> nuk lejohet më si llogari parësore. Duke qenë se kjo llogari menaxhohet nga <ph name="DOMAIN" />, faqeshënuesit, historiku, fjalëkalimet dhe cilësimet e tjera do të fshihen nga kjo pajisje.</translation>
 <translation id="5632592977009207922">Duke shkarkuar, <ph name="PERCENT_REMAINING" />% të mbetura</translation>
 <translation id="563371367637259496">Celulari</translation>
+<translation id="5634446357546764049">Shiko kujtimet nga udhëtimet e tua të fundit dhe të tjera</translation>
 <translation id="5635312199252507107">Lejo në sajte specifike</translation>
 <translation id="563535393368633106">Pyet para se të hysh (rekomandohet)</translation>
 <translation id="5636996382092289526">Për të përdorur <ph name="NETWORK_ID" /> së pari mund të të duhet të <ph name="LINK_START" />vizitosh faqen e identifikimit të rrjetit<ph name="LINK_END" />, e cila do të hapet automatikisht brenda disa sekondave. Nëse kjo nuk ndodh, rrjeti nuk mund të përdoret.</translation>
@@ -4715,6 +4720,7 @@
 <translation id="5740709157181662145">Mbështetja dhe qëndrueshmëria e harduerit të <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Pasqyrimi i ekranit</translation>
 <translation id="574209121243317957">Tonaliteti</translation>
+<translation id="5745316408658560138">Të lejohet që Chrome të gjejë zbritje të personalizuara në grumbujt e tu të artikujve?</translation>
 <translation id="5746169159649715125">Ruaj si PDF</translation>
 <translation id="5747552184818312860">Skadon</translation>
 <translation id="5747785204778348146">Programimi - i paqëndrueshëm</translation>
@@ -5342,6 +5348,7 @@
 <translation id="6370021412472292592">Manifesti nuk mund të ngarkohej.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Provo përsëri</translation>
+<translation id="6374635887697228982">Të merren zbritjet?</translation>
 <translation id="6377268785556383139">1 rezultat për "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Prano dhe vazhdo</translation>
 <translation id="6382616130475191723">Lejuar për të lexuar dhe për të ndryshuar <ph name="SITE_NAME" /></translation>
@@ -6906,6 +6913,7 @@
 <translation id="7956373551960864128">Printerët e tu të ruajtur</translation>
 <translation id="7957074856830851026">Të shikojë informacionet e pajisjes, të tilla si numri i serisë ose ID-ja e punës</translation>
 <translation id="7957615753207896812">Hap cilësimet e tastierës së pajisjes</translation>
+<translation id="7958437133377816580">Merr zbritje për <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> dhe të tjera</translation>
 <translation id="7959074893852789871">Skedari përmbante shumë certifikata, disa prej të cilave nuk u importuan:</translation>
 <translation id="7959665254555683862">Skedë &amp;e re "e fshehtë"</translation>
 <translation id="7961015016161918242">Asnjëherë</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index f925457..d8aaa29 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1239,6 +1239,7 @@
 <translation id="2203088913459920044">Slova, brojevi i specijalni znakovi mogu da se koriste u nazivu</translation>
 <translation id="220321590587754225">Povezivanje nije uspelo. Probajte ponovo.</translation>
 <translation id="2204034823255629767">Čitanje i menjanje svega što unosite</translation>
+<translation id="2207115382329026341">Omogućite podešavanja za strimovanje aplikacija sa telefona.</translation>
 <translation id="220858061631308971">Unesite ovaj PIN kôd na uređaju „<ph name="DEVICE_NAME" />“:</translation>
 <translation id="2210462644007531147">Dovršavanje instaliranja nije uspelo</translation>
 <translation id="2212565012507486665">Dozvoli kolačiće</translation>
@@ -1429,6 +1430,7 @@
 <translation id="2367972762794486313">Prikažite aplikacije</translation>
 <translation id="236939127352773362">Kada uređaji u blizini dele sadržaj</translation>
 <translation id="2371076942591664043">Otvori kad bude &amp;dovršeno</translation>
+<translation id="237307274687369010">Pokretanje aplikacije <ph name="APP_NAME" /> nije uspelo</translation>
 <translation id="2373666622366160481">Prilagodi papiru</translation>
 <translation id="2375406435414127095">Povežite se sa telefonom</translation>
 <translation id="2377588536920405462">Lokaciju možete da isključite ako isključite glavno podešavanje lokacije na uređaju. U podešavanjima lokacije možete da isključite korišćenje Wi‑Fi mreža i mobilnih mreža za lokaciju, kao i traženje Wi‑Fi mreža i Bluetooth uređaja.</translation>
@@ -2263,6 +2265,7 @@
 <translation id="3225319735946384299">Potpisivanje koda</translation>
 <translation id="3226487301970807183">Uključite/isključite bočnu tablu sa leve strane</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Veb-aplikacija</translation>
 <translation id="3233271424239923319">Napravite rezervne kopije Linux aplikacija i datoteka</translation>
 <translation id="3238192140106069382">Povezuje se i verifikuje</translation>
 <translation id="3239373508713281971">Vremensko ograničenje je uklonjeno za aplikaciju <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 00a4310..10fbb610 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1239,6 +1239,7 @@
 <translation id="2203088913459920044">Слова, бројеви и специјални знакови могу да се користе у називу</translation>
 <translation id="220321590587754225">Повезивање није успело. Пробајте поново.</translation>
 <translation id="2204034823255629767">Читање и мењање свега што уносите</translation>
+<translation id="2207115382329026341">Омогућите подешавања за стримовање апликација са телефона.</translation>
 <translation id="220858061631308971">Унесите овај PIN кôд на уређају „<ph name="DEVICE_NAME" />“:</translation>
 <translation id="2210462644007531147">Довршавање инсталирања није успело</translation>
 <translation id="2212565012507486665">Дозволи колачиће</translation>
@@ -1429,6 +1430,7 @@
 <translation id="2367972762794486313">Прикажите апликације</translation>
 <translation id="236939127352773362">Када уређаји у близини деле садржај</translation>
 <translation id="2371076942591664043">Отвори кад буде &amp;довршено</translation>
+<translation id="237307274687369010">Покретање апликације <ph name="APP_NAME" /> није успело</translation>
 <translation id="2373666622366160481">Прилагоди папиру</translation>
 <translation id="2375406435414127095">Повежите се са телефоном</translation>
 <translation id="2377588536920405462">Локацију можете да искључите ако искључите главно подешавање локације на уређају. У подешавањима локације можете да искључите коришћење Wi‑Fi мрежа и мобилних мрежа за локацију, као и тражење Wi‑Fi мрежа и Bluetooth уређаја.</translation>
@@ -2263,6 +2265,7 @@
 <translation id="3225319735946384299">Потписивање кода</translation>
 <translation id="3226487301970807183">Укључите/искључите бочну таблу са леве стране</translation>
 <translation id="3227137524299004712">Микрофон</translation>
+<translation id="3232754137068452469">Веб-апликација</translation>
 <translation id="3233271424239923319">Направите резервне копије Linux апликација и датотека</translation>
 <translation id="3238192140106069382">Повезује се и верификује</translation>
 <translation id="3239373508713281971">Временско ограничење је уклоњено за апликацију <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index ab21f8f..b4e30ee 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Kodsignering</translation>
 <translation id="3226487301970807183">Aktivera/inaktivera vänsterställd sidopanel</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Webbapp</translation>
 <translation id="3233271424239923319">Säkerhetskopiera Linux-appar och Linux-filer</translation>
 <translation id="3238192140106069382">Ansluter och verifierar</translation>
 <translation id="3239373508713281971">Tidsgränsen för <ph name="APP_NAME" /> har tagits bort</translation>
@@ -2346,6 +2347,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> i rabatt</translation>
 <translation id="3305389145870741612">Formateringen kan ta ett par sekunder. Vänta.</translation>
 <translation id="3305661444342691068">Öppna PDF i förhandsgranskning</translation>
+<translation id="3307176291962384345">Få rabatter på <ph name="MERCHANT_NAME" /></translation>
 <translation id="3308116878371095290">Den här sidan har förhindrats att ange cookies.</translation>
 <translation id="3308134619352333507">Dölj knapp</translation>
 <translation id="3308852433423051161">Google Assistent läses in …</translation>
@@ -2824,6 +2826,7 @@
 <translation id="3761556954875533505">Vill du låta webbplatsen redigera filer?</translation>
 <translation id="3764314093345384080">Detaljerad versionsinformation</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommunicera med en USB-enhet}other{Kommunicera med # USB-enheter}}</translation>
+<translation id="3764753550716962406">Vill du låta Google söka efter anpassade rabatter utifrån kundvagnen?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> skickas till <ph name="DEVICE_NAME" />}other{<ph name="ATTACHMENTS" /> skickas till <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Det gick inte att läsa in offlinepolicyn för demoläge.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3259,6 +3262,7 @@
 <translation id="4194570336751258953">Aktivera klick på styrplattan</translation>
 <translation id="4195643157523330669">Öppna i ny flik</translation>
 <translation id="4195814663415092787">Fortsätt där du slutade</translation>
+<translation id="4197917636330710075">Få rabatter på <ph name="MERCHANT_NAME" /> och <ph name="MERCHANT_NAME" /></translation>
 <translation id="4198268995694216131">Ytterligare webbplatser</translation>
 <translation id="4200689466366162458">Anpassade ord</translation>
 <translation id="4200983522494130825">Ny &amp;flik</translation>
@@ -4638,6 +4642,7 @@
 <translation id="5632566673632479864">Kontot <ph name="EMAIL" /> får inte längre användas som primärt konto. Eftersom kontot hanteras av <ph name="DOMAIN" /> raderas bokmärken, historik, lösenord och andra inställningar från enheten.</translation>
 <translation id="5632592977009207922">Laddar ned, <ph name="PERCENT_REMAINING" /> % återstår</translation>
 <translation id="563371367637259496">Mobilt</translation>
+<translation id="5634446357546764049">Se minnen från resor du gjort nyligen och mycket annat</translation>
 <translation id="5635312199252507107">Tillåt på vissa webbplatser</translation>
 <translation id="563535393368633106">Fråga innan informationen används (rekommenderas)</translation>
 <translation id="5636996382092289526">Om du vill använda <ph name="NETWORK_ID" /> kanske du först måste <ph name="LINK_START" />besöka nätverkets inloggningssida<ph name="LINK_END" />, som öppnas automatiskt om några sekunder. Om den inte öppnas går det inte att använda nätverket.</translation>
@@ -4734,6 +4739,7 @@
 <translation id="5740709157181662145">Maskinvarustöd och stabilitet för <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Skärmspegling</translation>
 <translation id="574209121243317957">Ton</translation>
+<translation id="5745316408658560138">Vill du låta Chrome söka efter anpassade rabatter för dina kundvagnar?</translation>
 <translation id="5746169159649715125">Spara som PDF</translation>
 <translation id="5747552184818312860">Upphör att gälla</translation>
 <translation id="5747785204778348146">Utvecklare – instabil</translation>
@@ -5361,6 +5367,7 @@
 <translation id="6370021412472292592">Det gick inte att läsa in manifestet.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Försök igen</translation>
+<translation id="6374635887697228982">Vill du få erbjudanden?</translation>
 <translation id="6377268785556383139">1 resultat för <ph name="SEARCH_TEXT" /></translation>
 <translation id="6380143666419481200">Godkänn och fortsätt</translation>
 <translation id="6382616130475191723">Har tillåtits att läsa och ändra <ph name="SITE_NAME" /></translation>
@@ -6927,6 +6934,7 @@
 <translation id="7956373551960864128">Dina sparade skrivare</translation>
 <translation id="7957074856830851026">Visa enhetsinformation, t.ex. serienummer eller tillgångs-id</translation>
 <translation id="7957615753207896812">Öppna tangentbordsinställningarna</translation>
+<translation id="7958437133377816580">Få rabatter på <ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> med flera</translation>
 <translation id="7959074893852789871">Filen innehöll flera certifikat och några av dem importerades inte:</translation>
 <translation id="7959665254555683862">Ny inkognitoflik</translation>
 <translation id="7961015016161918242">Aldrig</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index a5e5e7e..c582ab76 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -2275,6 +2275,7 @@
 <translation id="3225319735946384299">Utiaji Sahihi wa Misimbo</translation>
 <translation id="3226487301970807183">Onyesha au ufiche kidirisha cha pembeni kilichopangiliwa kushoto</translation>
 <translation id="3227137524299004712">Maikrofoni</translation>
+<translation id="3232754137068452469">Programu ya Wavuti</translation>
 <translation id="3233271424239923319">Hifadhi nakala za programu na faili za Linux</translation>
 <translation id="3238192140106069382">Inaunganisha na kuthibitisha</translation>
 <translation id="3239373508713281971">Kikomo cha muda kimeondolewa kwenye <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index b1d3ebb..a2b63d2 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -2271,6 +2271,7 @@
 <translation id="3225319735946384299">குறியீடு கையொப்பமிடல்</translation>
 <translation id="3226487301970807183">இடப்புறமாகச் சீரமைக்கப்பட்ட பக்கவாட்டுப் பேனலுக்கு மாறும்</translation>
 <translation id="3227137524299004712">மைக்ரோஃபோன்</translation>
+<translation id="3232754137068452469">இணைய ஆப்ஸ்</translation>
 <translation id="3233271424239923319">Linux ஆப்ஸ் காப்புப்பிரதிகளும் கோப்புகளும்</translation>
 <translation id="3238192140106069382">இணைக்கிறது &amp; சரிபார்க்கிறது</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />க்கான நேர வரம்பு அகற்றப்பட்டது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 2767387..10ff4fd 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -2278,6 +2278,7 @@
 <translation id="3225319735946384299">కోడ్ సైనింగ్</translation>
 <translation id="3226487301970807183">ఎడమవైపు అమర్చబడిన సైడ్ ప్యానెల్‌ను టోగుల్ చేయండి</translation>
 <translation id="3227137524299004712">మైక్రోఫోన్</translation>
+<translation id="3232754137068452469">వెబ్ యాప్‌</translation>
 <translation id="3233271424239923319">Linux యాప్‌లు, ఫైళ్లను బ్యాకప్ చేయండి</translation>
 <translation id="3238192140106069382">కనెక్ట్ చేయడానికి మరియు వెరిఫై చేయడానికి ట్రై చేస్తోంది</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />కు సెట్ చేసిన సమయ పరిమితి తీసివేయబడింది</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index d910279..42dbdba3 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -2263,6 +2263,7 @@
 <translation id="3225319735946384299">การรับรองโค้ด</translation>
 <translation id="3226487301970807183">เปิด/ปิดแผงด้านข้างแบบจัดข้อความชิดซ้าย</translation>
 <translation id="3227137524299004712">ไมโครโฟน</translation>
+<translation id="3232754137068452469">เว็บแอป</translation>
 <translation id="3233271424239923319">สำรองข้อมูลแอปและไฟล์ Linux</translation>
 <translation id="3238192140106069382">กำลังเชื่อมต่อและยืนยัน</translation>
 <translation id="3239373508713281971">นำการจำกัดเวลาสำหรับ <ph name="APP_NAME" /> ออกแล้ว</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 8ae4308..1d87b06 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -2262,6 +2262,7 @@
 <translation id="3225319735946384299">Kod İmzalama</translation>
 <translation id="3226487301970807183">Sola hizalı yan panele geçiş yap</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Web Uygulaması</translation>
 <translation id="3233271424239923319">Linux uygulamalarını ve dosyalarını yedekleme</translation>
 <translation id="3238192140106069382">Bağlanıyor ve doğrulanıyor</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> için zaman sınırlaması kaldırıldı</translation>
@@ -2329,6 +2330,7 @@
 <translation id="3304212451103136496"><ph name="DISCOUNT_AMOUNT" /> indirim</translation>
 <translation id="3305389145870741612">Biçimlendirme işlemi birkaç saniye sürebilir. Lütfen bekleyin.</translation>
 <translation id="3305661444342691068">PDF'yi Önizlemede Aç</translation>
+<translation id="3307176291962384345"><ph name="MERCHANT_NAME" /> satıcısından indirimli alışveriş yapın</translation>
 <translation id="3308116878371095290">Bu sayfanın çerezleri ayarlaması engellenmiştir.</translation>
 <translation id="3308134619352333507">Düğmeyi Gizle</translation>
 <translation id="3308852433423051161">Google Asistan yükleniyor...</translation>
@@ -2806,6 +2808,7 @@
 <translation id="3761556954875533505">Siteye dosyaları düzenleme izni verilsin mi?</translation>
 <translation id="3764314093345384080">Ayrıntılı derleme bilgileri</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Bir USB cihazla iletişim kurma}other{# USB cihazla iletişim kurma}}</translation>
+<translation id="3764753550716962406">Google'ın mevcut indirimleri bulmak için alışveriş sepetinizi kullanmasına izin verilsin mi?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="ATTACHMENTS" />, <ph name="DEVICE_NAME" /> adlı cihaza gönderiliyor}other{<ph name="ATTACHMENTS" />, <ph name="DEVICE_NAME" /> adlı cihaza gönderiliyor}}</translation>
 <translation id="3765246971671567135">Çevrimdışı demo modu politikası okunamadı.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation>
@@ -3241,6 +3244,7 @@
 <translation id="4194570336751258953">Tıklamak için hafifçe vur'u etkinleştir</translation>
 <translation id="4195643157523330669">Yeni sekmede aç</translation>
 <translation id="4195814663415092787">Kaldığım yerden devam et</translation>
+<translation id="4197917636330710075"><ph name="MERCHANT_NAME" /> ve <ph name="MERCHANT_NAME" /> satıcılarından indirimli alışveriş yapın</translation>
 <translation id="4198268995694216131">Ek siteler</translation>
 <translation id="4200689466366162458">Özel kelimeler</translation>
 <translation id="4200983522494130825">Y&amp;eni sekme</translation>
@@ -4620,6 +4624,7 @@
 <translation id="5632566673632479864"><ph name="EMAIL" /> hesabınızın artık birincil hesap olmasına izin verilmiyor. Bu hesap <ph name="DOMAIN" /> tarafından yönetildiğinden yer işaretleri, geçmiş, şifreler ve diğer ayarlarınız bu cihazdan silinecektir.</translation>
 <translation id="5632592977009207922">İndiriliyor, %<ph name="PERCENT_REMAINING" /> kaldı</translation>
 <translation id="563371367637259496">Mobil</translation>
+<translation id="5634446357546764049">Son seyahatlerinizden anılarınızı ve daha fazlasını görün</translation>
 <translation id="5635312199252507107">Belirli sitelerde izin ver</translation>
 <translation id="563535393368633106">Erişmeden önce sor (önerilir)</translation>
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ağını kullanabilmek için öncelikle <ph name="LINK_START" />ağın oturum açma sayfasını ziyaret etmeniz<ph name="LINK_END" /> gerekebilir. Söz konusu sayfa birkaç saniye içinde otomatik olarak açılacaktır. Açılmazsa, ağ kullanılamaz.</translation>
@@ -4716,6 +4721,7 @@
 <translation id="5740709157181662145"><ph name="DEVICE_OS" /> donanım desteği ve kararlılık</translation>
 <translation id="574104302965107104">Ekran yansıtma</translation>
 <translation id="574209121243317957">Ses Kalınlığı</translation>
+<translation id="5745316408658560138">Chrome'un alışveriş sepetlerinizde kişiselleştirilmiş indirimler bulmasına izin vermek istiyor musunuz?</translation>
 <translation id="5746169159649715125">PDF olarak kaydet</translation>
 <translation id="5747552184818312860">Süre sonu tarihi</translation>
 <translation id="5747785204778348146">Geliştirici - kararsız</translation>
@@ -5342,6 +5348,7 @@
 <translation id="6370021412472292592">Manifest yüklenemedi.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Tekrar Dene</translation>
+<translation id="6374635887697228982">İndirim alınsın mı?</translation>
 <translation id="6377268785556383139">"<ph name="SEARCH_TEXT" />" için bulunan 1 sonuç gösteriliyor</translation>
 <translation id="6380143666419481200">Kabul et ve devam et</translation>
 <translation id="6382616130475191723"><ph name="SITE_NAME" /> sitesini okuyup değiştirebilir</translation>
@@ -6907,6 +6914,7 @@
 <translation id="7956373551960864128">Kayıtlı yazıcılarınız</translation>
 <translation id="7957074856830851026">Seri numarası veya öğe kimliği gibi cihaz bilgilerini görüntüleyin</translation>
 <translation id="7957615753207896812">Klavye cihaz ayarlarını aç</translation>
+<translation id="7958437133377816580"><ph name="MERCHANT_NAME" />, <ph name="MERCHANT_NAME" /> ve diğer satıcılardan indirimli alışveriş yapın</translation>
 <translation id="7959074893852789871">Dosya birden çok sertifika içeriyordu, bunların bazıları içe aktarılmadı:</translation>
 <translation id="7959665254555683862">Yeni Gizli Sekme</translation>
 <translation id="7961015016161918242">Hiçbir Zaman</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index fbd565d1..96536488 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -2282,6 +2282,7 @@
 <translation id="3225319735946384299">Підписування коду</translation>
 <translation id="3226487301970807183">Показати чи сховати бічну панель зліва</translation>
 <translation id="3227137524299004712">Мікрофон</translation>
+<translation id="3232754137068452469">Веб-додаток</translation>
 <translation id="3233271424239923319">Створити резервну копію додатків і файлів Linux</translation>
 <translation id="3238192140106069382">Триває підключення та перевірка</translation>
 <translation id="3239373508713281971">Для додатка <ph name="APP_NAME" /> скасовано ліміт часу</translation>
@@ -2349,6 +2350,7 @@
 <translation id="3304212451103136496">Знижка <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">Процес форматування може зайняти декілька секунд. Зачекайте.</translation>
 <translation id="3305661444342691068">Відкрити файл PDF у вікні попереднього перегляду</translation>
+<translation id="3307176291962384345">Отримуйте знижки в магазині "<ph name="MERCHANT_NAME" />"</translation>
 <translation id="3308116878371095290">Цій сторінці було відмовлено в збереженні файлів cookie.</translation>
 <translation id="3308134619352333507">Кнопка "Сховати"</translation>
 <translation id="3308852433423051161">Завантажується Google Асистент…</translation>
@@ -2827,6 +2829,7 @@
 <translation id="3761556954875533505">Дозволити сайту змінювати файли?</translation>
 <translation id="3764314093345384080">Докладна інформація про складання</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Обмінюватися даними з пристроєм USB}one{Обмінюватися даними з # пристроєм USB}few{Обмінюватися даними з # пристроями USB}many{Обмінюватися даними з # пристроями USB}other{Обмінюватися даними з # пристрою USB}}</translation>
+<translation id="3764753550716962406">Дозволити Google використовувати ваш кошик, щоб шукати доступні знижки?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> надсилається на пристрій <ph name="DEVICE_NAME" />}one{<ph name="ATTACHMENTS" /> надсилається на пристрій <ph name="DEVICE_NAME" />}few{<ph name="ATTACHMENTS" /> надсилаються на пристрій <ph name="DEVICE_NAME" />}many{<ph name="ATTACHMENTS" /> надсилаються на пристрій <ph name="DEVICE_NAME" />}other{<ph name="ATTACHMENTS" /> надсилається на пристрій <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3765246971671567135">Не вдалося прочитати політику демо-режиму офлайн.</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Гц</translation>
@@ -3262,6 +3265,7 @@
 <translation id="4194570336751258953">Увімкнути функцію "торкнутися, щоб натиснути"</translation>
 <translation id="4195643157523330669">Відкрити в новій вкладці</translation>
 <translation id="4195814663415092787">Продовжити з місця зупинки</translation>
+<translation id="4197917636330710075">Отримуйте знижки в магазинах "<ph name="MERCHANT_NAME" />" і "<ph name="MERCHANT_NAME" />"</translation>
 <translation id="4198268995694216131">Інші сайти</translation>
 <translation id="4200689466366162458">Спеціальні слова</translation>
 <translation id="4200983522494130825">Нова &amp;вкладка</translation>
@@ -4641,6 +4645,7 @@
 <translation id="5632566673632479864">Обліковий запис <ph name="EMAIL" /> більше не можна використовувати як основний. Оскільки цей обліковий запис зареєстровано в домені <ph name="DOMAIN" />, з цього пристрою буде видалено ваші закладки, історію, паролі й інші налаштування.</translation>
 <translation id="5632592977009207922">Завантажується, залишилося <ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">Мобільна</translation>
+<translation id="5634446357546764049">Переглядайте спогади про останні поїздки тощо</translation>
 <translation id="5635312199252507107">Дозволити на певних сайтах</translation>
 <translation id="563535393368633106">Запитувати дозволу, перш ніж надавати доступ (рекомендується)</translation>
 <translation id="5636996382092289526">Щоб користуватися цією мережею (<ph name="NETWORK_ID" />), можливо, спершу потрібно буде <ph name="LINK_START" />перейти на сторінку входу мережі<ph name="LINK_END" />, яка автоматично відкриється за декілька секунд. Якщо цього не станеться, мережею користуватися не можна.</translation>
@@ -4737,6 +4742,7 @@
 <translation id="5740709157181662145">Технічна підтримка апаратного забезпечення та стабільність роботи <ph name="DEVICE_OS" /></translation>
 <translation id="574104302965107104">Дзеркалювання дисплея</translation>
 <translation id="574209121243317957">Тон</translation>
+<translation id="5745316408658560138">Дозволити Chrome знаходити персоналізовані знижки для ваших кошиків?</translation>
 <translation id="5746169159649715125">Зберегти у форматі PDF</translation>
 <translation id="5747552184818312860">Діє до</translation>
 <translation id="5747785204778348146">Для розробників (нестабільна)</translation>
@@ -5364,6 +5370,7 @@
 <translation id="6370021412472292592">Не вдалося завантажити маніфест.</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Повторити спробу</translation>
+<translation id="6374635887697228982">Отримувати знижки?</translation>
 <translation id="6377268785556383139">1 результат для запиту "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6380143666419481200">Прийняти та продовжити</translation>
 <translation id="6382616130475191723">Дозволено читання та зберігання для такого сайту: <ph name="SITE_NAME" /></translation>
@@ -6930,6 +6937,7 @@
 <translation id="7956373551960864128">Збережені принтери</translation>
 <translation id="7957074856830851026">Переглядати інформацію з пристрою, наприклад серійний номер або ідентифікатор об'єкта</translation>
 <translation id="7957615753207896812">Відкрити налаштування клавіатури</translation>
+<translation id="7958437133377816580">Отримуйте знижки в магазинах "<ph name="MERCHANT_NAME" />", "<ph name="MERCHANT_NAME" />" та інших</translation>
 <translation id="7959074893852789871">Файл містив декілька сертифікатів, деякі з яких не було імпортовано:</translation>
 <translation id="7959665254555683862">Нова анонімна вкладка</translation>
 <translation id="7961015016161918242">Ніколи</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 1d5e5d64..1b92c2fd 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1240,6 +1240,7 @@
 <translation id="2203088913459920044">نام میں حروف، نمبرز اور مخصوص حروف کا استعمال کیا جا سکتا ہے</translation>
 <translation id="220321590587754225">منسلک نہیں ہو سکا۔ دوبارہ کوشش کریں۔</translation>
 <translation id="2204034823255629767">آپ جو کچھ بھی ٹائپ کرتے ہیں اسے پڑھیں اور تبدیل کریں</translation>
+<translation id="2207115382329026341">اپنے فون سے ایپس کی سلسلہ بندی کی ترتیبات کو فعال کریں۔</translation>
 <translation id="220858061631308971">‏براہ کرم اس PIN کوڈ کو "<ph name="DEVICE_NAME" />" میں داخل کریں:</translation>
 <translation id="2210462644007531147">انسٹالیشن مکمل نہیں ہو سکی</translation>
 <translation id="2212565012507486665">کوکیز کی اجازت دیں</translation>
@@ -1430,6 +1431,7 @@
 <translation id="2367972762794486313">ایپس دکھائیں</translation>
 <translation id="236939127352773362">آلات کے قریب میں اشتراک کرنے پر</translation>
 <translation id="2371076942591664043">&amp;مکمل ہو جانے پر کھولیں</translation>
+<translation id="237307274687369010"><ph name="APP_NAME" /> کو شروع نہیں کیا جا سکا</translation>
 <translation id="2373666622366160481">کاغذ پر فٹ کریں</translation>
 <translation id="2375406435414127095">اپنے فون سے منسلک کریں</translation>
 <translation id="2377588536920405462">‏آپ اپنے آلے پر مقام کی بنیادی ترتیب آف کر کے مقام آف کر سکتے ہیں۔ آپ مقام کی ترتیبات میں مقام کے لیے Wi‑Fi، موبائل نیٹ ورکس اور سینسرز کے استعمال کو بھی آف کر سکتے ہیں۔</translation>
@@ -2263,6 +2265,7 @@
 <translation id="3225319735946384299">کوڈ سائن کرنا</translation>
 <translation id="3226487301970807183">بائیں جانب موافق کردہ سائیڈ پینل کو ٹوگل کریں</translation>
 <translation id="3227137524299004712">مائیکروفون</translation>
+<translation id="3232754137068452469">ویب ایپ</translation>
 <translation id="3233271424239923319">‏Linux کی ایپس اور فائلز کا بیک اپ لیں</translation>
 <translation id="3238192140106069382">منسلک ہونے اور تصدیق کرنے کی کوشش کر رہا ہے</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> کے لیے وقت کی حد ہٹا دی گئی</translation>
@@ -2301,6 +2304,7 @@
 <translation id="3277691515294482687">‏Linux اپ گریڈ کرنے سے پہلے میری ایپس اور فائلز کا میری فائلز فولڈر میں بیک اپ لیں۔</translation>
 <translation id="3278001907972365362">‏آپ کے Google اکاؤنٹ (اکاؤنٹس) کو توجہ کی ضرورت ہے</translation>
 <translation id="3278800075417428224">‏CloudReady 2.0 کی ترتیبات میں زبانوں کا نظم کریں</translation>
+<translation id="3278928434075969895">‏یہ پروفائل Chrome OS کی پراکسی ترتیبات کا استعمال کرتی ہے</translation>
 <translation id="3279092821516760512">منتخب رابطے قریب میں ہونے پر آپ کے ساتھ اشتراک کر سکتے ہیں۔ آپ کے قبول کئے بغیر منتقلیاں شروع نہیں ہوں گی۔</translation>
 <translation id="3279230909244266691">اس کارروائی میں کچھ منٹ لگ سکتے ہيں۔ ورچوئل مشین شروع ہو رہی ہے۔</translation>
 <translation id="3280237271814976245">محفوظ کریں &amp;بطور…</translation>
@@ -4872,6 +4876,7 @@
 <translation id="5909379458939060601">اس پروفائل اور براؤزنگ ڈیٹا کو حذف کریں؟</translation>
 <translation id="5910363049092958439">تصویر مح&amp;فوظ کریں بطور…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> آف لائن ہے</translation>
+<translation id="5911505723657992440">‏اس پروفائل کے لیے Chrome OS کی پراکسی ترتیبات کا استعمال کریں۔</translation>
 <translation id="5911533659001334206">شارٹ کٹ ناظر</translation>
 <translation id="5914724413750400082">ماڈیولس (<ph name="MODULUS_NUM_BITS" /> بٹس):
   <ph name="MODULUS_HEX_DUMP" />
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index fe65f4ac..1b1aac1 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -2268,6 +2268,7 @@
 <translation id="3225319735946384299">Kodni imzolash</translation>
 <translation id="3226487301970807183">Chapga tekislangan yon panelni almashtirish</translation>
 <translation id="3227137524299004712">Mikrofon</translation>
+<translation id="3232754137068452469">Veb-ilova</translation>
 <translation id="3233271424239923319">Linux ilova va fayllarini zaxiralash</translation>
 <translation id="3238192140106069382">Ulanmoqda va tekshirmoqda</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> uchun vaqt cheklovi olib tashlandi</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index c812de1..bbe50e9 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -2279,6 +2279,7 @@
 <translation id="3225319735946384299">Ký Mã</translation>
 <translation id="3226487301970807183">Bật/tắt bảng điều khiển bên đã căn trái</translation>
 <translation id="3227137524299004712">Micrô</translation>
+<translation id="3232754137068452469">Ứng dụng web</translation>
 <translation id="3233271424239923319">Sao lưu các ứng dụng và tệp Linux</translation>
 <translation id="3238192140106069382">Đang kết nối và xác minh</translation>
 <translation id="3239373508713281971">Đã xóa giới hạn thời gian đối với <ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 55665dd..f201123 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -2258,6 +2258,7 @@
 <translation id="3225319735946384299">代码签名</translation>
 <translation id="3226487301970807183">显示/隐藏靠左对齐的侧边栏</translation>
 <translation id="3227137524299004712">麦克风</translation>
+<translation id="3232754137068452469">网络应用</translation>
 <translation id="3233271424239923319">备份 Linux 应用和文件</translation>
 <translation id="3238192140106069382">正在连接并验证</translation>
 <translation id="3239373508713281971">“<ph name="APP_NAME" />”的使用时限已被移除</translation>
@@ -2325,6 +2326,7 @@
 <translation id="3304212451103136496">直降 <ph name="DISCOUNT_AMOUNT" /></translation>
 <translation id="3305389145870741612">格式化过程可能需要几秒钟的时间,请稍候。</translation>
 <translation id="3305661444342691068">使用预览程序打开 PDF</translation>
+<translation id="3307176291962384345">获取<ph name="MERCHANT_NAME" />的折扣</translation>
 <translation id="3308116878371095290">系统已禁止设置此网页的 Cookie。</translation>
 <translation id="3308134619352333507">隐藏按钮</translation>
 <translation id="3308852433423051161">正在加载 Google 助理…</translation>
@@ -2803,6 +2805,7 @@
 <translation id="3761556954875533505">允许此网站修改文件?</translation>
 <translation id="3764314093345384080">详细版本信息</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{可与 1 部 USB 设备通信}other{可与 # 部 USB 设备通信}}</translation>
+<translation id="3764753550716962406">要让 Google 根据购物车中的商品查找可用折扣吗?</translation>
 <translation id="3764974059056958214">{COUNT,plural, =1{正在将 <ph name="ATTACHMENTS" />发送到“<ph name="DEVICE_NAME" />”}other{正在将 <ph name="ATTACHMENTS" />发送到“<ph name="DEVICE_NAME" />”}}</translation>
 <translation id="3765246971671567135">无法读取离线演示模式政策。</translation>
 <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> 赫兹</translation>
@@ -3237,6 +3240,7 @@
 <translation id="4194570336751258953">启用点按单击</translation>
 <translation id="4195643157523330669">在新标签页中打开</translation>
 <translation id="4195814663415092787">继续浏览上次打开的网页</translation>
+<translation id="4197917636330710075">获取<ph name="MERCHANT_NAME" />和<ph name="MERCHANT_NAME" />的折扣</translation>
 <translation id="4198268995694216131">更多网站</translation>
 <translation id="4200689466366162458">自定义字词</translation>
 <translation id="4200983522494130825">打开新的标签页(&amp;T)</translation>
@@ -4615,6 +4619,7 @@
 <translation id="5632566673632479864">您的帐号 <ph name="EMAIL" /> 已无法再用作主帐号。该帐号由 <ph name="DOMAIN" /> 管理,因此您的书签、历史记录、密码及其他设置将从此设备中清除。</translation>
 <translation id="5632592977009207922">正在下载,还剩 <ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">移动网络</translation>
+<translation id="5634446357546764049">查看近期旅行等活动的回忆集锦</translation>
 <translation id="5635312199252507107">在特定网站上允许</translation>
 <translation id="563535393368633106">使用前先询问(推荐)</translation>
 <translation id="5636996382092289526">要使用“<ph name="NETWORK_ID" />”,您可能需要先<ph name="LINK_START" />访问该网络的登录页面<ph name="LINK_END" />,该页面会在几秒钟后自动打开。如果未打开,就表示该网络无法使用。</translation>
@@ -4711,6 +4716,7 @@
 <translation id="5740709157181662145"><ph name="DEVICE_OS" /> 硬件支持和稳定性</translation>
 <translation id="574104302965107104">显示屏镜像</translation>
 <translation id="574209121243317957">音高</translation>
+<translation id="5745316408658560138">让 Chome 查找您购物车中商品的个性化折扣信息?</translation>
 <translation id="5746169159649715125">另存为 PDF</translation>
 <translation id="5747552184818312860">到期时间</translation>
 <translation id="5747785204778348146">开发者版本 - 不稳定</translation>
@@ -5338,6 +5344,7 @@
 <translation id="6370021412472292592">无法加载清单。</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">重试</translation>
+<translation id="6374635887697228982">要获取折扣吗?</translation>
 <translation id="6377268785556383139">1 个与“<ph name="SEARCH_TEXT" />”相符的搜索结果</translation>
 <translation id="6380143666419481200">接受并继续</translation>
 <translation id="6382616130475191723">已获准读取和更改“<ph name="SITE_NAME" />”</translation>
@@ -6903,6 +6910,7 @@
 <translation id="7956373551960864128">已保存的打印机</translation>
 <translation id="7957074856830851026">查看设备信息,例如设备的序列号或资产 ID</translation>
 <translation id="7957615753207896812">打开键盘设备设置</translation>
+<translation id="7958437133377816580">获取<ph name="MERCHANT_NAME" />和<ph name="MERCHANT_NAME" />等商家的折扣</translation>
 <translation id="7959074893852789871">该文件包含多个证书,其中部分证书未导入:</translation>
 <translation id="7959665254555683862">打开新的无痕式标签页(&amp;T)</translation>
 <translation id="7961015016161918242">一律不</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 61954b1..98a7b18 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -2278,6 +2278,7 @@
 <translation id="3225319735946384299">代碼簽名</translation>
 <translation id="3226487301970807183">切換靠左對齊側邊面板</translation>
 <translation id="3227137524299004712">麥克風</translation>
+<translation id="3232754137068452469">網絡應用程式</translation>
 <translation id="3233271424239923319">備份 Linux 應用程式和檔案</translation>
 <translation id="3238192140106069382">正在連線及驗證</translation>
 <translation id="3239373508713281971">已移除 <ph name="APP_NAME" /> 的時間限制</translation>
@@ -4642,7 +4643,7 @@
 <translation id="5632566673632479864">您的帳戶 <ph name="EMAIL" /> 已無法用作主要帳戶。 由於此帳戶由 <ph name="DOMAIN" /> 管理,因此系統將會從此裝置中清除您的書籤、記錄、密碼和其他設定。</translation>
 <translation id="5632592977009207922">下載中,尚餘 <ph name="PERCENT_REMAINING" />%</translation>
 <translation id="563371367637259496">流動網絡</translation>
-<translation id="5634446357546764049">瀏覽近期旅行等活動的回憶集錦</translation>
+<translation id="5634446357546764049">查看近期旅行等活動的回憶</translation>
 <translation id="5635312199252507107">允許在特定網站上執行</translation>
 <translation id="563535393368633106">存取前先詢問 (建議)</translation>
 <translation id="5636996382092289526">如要使用 <ph name="NETWORK_ID" />,您必須先<ph name="LINK_START" />前往網絡的登入頁面<ph name="LINK_END" /> (該頁面將在數秒內自動開啟);如果沒有,表示您無法使用該網絡。</translation>
@@ -4739,7 +4740,7 @@
 <translation id="5740709157181662145"><ph name="DEVICE_OS" /> 硬件支援和穩定性</translation>
 <translation id="574104302965107104">螢幕鏡像</translation>
 <translation id="574209121243317957">音調</translation>
-<translation id="5745316408658560138">要讓 Chrome 根據購物車中的商品尋找個人專屬折扣嗎?</translation>
+<translation id="5745316408658560138">要讓 Chrome 根據購物車中的商品尋找個人化折扣嗎?</translation>
 <translation id="5746169159649715125">另存為 PDF</translation>
 <translation id="5747552184818312860">到期日</translation>
 <translation id="5747785204778348146">開發人員版 - 不穩定</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 83cac56..3dbd5fc 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -2263,6 +2263,7 @@
 <translation id="3225319735946384299">程式碼簽署</translation>
 <translation id="3226487301970807183">切換靠左對齊側邊面板</translation>
 <translation id="3227137524299004712">麥克風</translation>
+<translation id="3232754137068452469">網頁應用程式</translation>
 <translation id="3233271424239923319">備份 Linux 應用程式和檔案</translation>
 <translation id="3238192140106069382">正在連線及驗證</translation>
 <translation id="3239373508713281971">已解除「<ph name="APP_NAME" />」的時間限制</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 9e7d3c38..83f4acee 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -2278,6 +2278,7 @@
 <translation id="3225319735946384299">Ukusayina kwekhodi</translation>
 <translation id="3226487301970807183">Guqula ukuqondanisa ngakwesobunxele iphaneli eseceleni</translation>
 <translation id="3227137524299004712">Imakrofoni</translation>
+<translation id="3232754137068452469">Uhlelo lokusebenza lwewebhu</translation>
 <translation id="3233271424239923319">Yenza isipele izinhlelo zokusebenza namafayela e-Linux</translation>
 <translation id="3238192140106069382">Iyaxhuma futhi iyaqinisekisa</translation>
 <translation id="3239373508713281971">Umkhawulo wesikhathi ususelwe i-<ph name="APP_NAME" /></translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index d701c7b2..e55fab6 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -243,6 +243,9 @@
 <translation id="6989339256997917931">Google Chrome が更新されましたが、30 日間以上使用されていません。</translation>
 <translation id="700644001690392105">CloudReady 2.0 について</translation>
 <translation id="7025800014283535195">こちらで Chrome プロフィールを切り替えることができます</translation>
+<translation id="7036251913954633326">このアカウントを 1 回だけ使用する場合は、Chrome ブラウザの<ph name="GUEST_LINK_BEGIN" />ゲストモード<ph name="GUEST_LINK_END" />を使用できます。他のユーザーのアカウントを追加する場合は、<ph name="DEVICE_TYPE" /> に<ph name="LINK_BEGIN" />新しいユーザーを追加<ph name="LINK_END" />します。
+
+これまでにウェブサイトやアプリに許可した権限がこのアカウントに適用される可能性があります。Google アカウントは [<ph name="SETTINGS_LINK_BEGIN" />設定<ph name="SETTINGS_LINK_END" />] で管理できます。</translation>
 <translation id="7062128746136194023">保護者が Chrome の「サイト、アプリ、拡張機能の権限」をオフにしました。この <ph name="EXTENSION_TYPE_PARAMETER" /> を追加することはできません。</translation>
 <translation id="7085332316435785646">Chrome の履歴を含めて、Google サービスのパーソナライズに使用するかどうかを選択してください</translation>
 <translation id="7088681679121566888">Chrome は最新の状態です</translation>
@@ -256,6 +259,9 @@
 <translation id="7296210096911315575">使用と安全に関する重要事項</translation>
 <translation id="7308322188646931570">ファイルをダウンロードするには、Chrome でストレージへのアクセスを許可する必要があります</translation>
 <translation id="7339898014177206373">新しいウィンドウ</translation>
+<translation id="7388770099345495132">このアカウントを 1 回だけ使用する場合は、Chrome ブラウザのゲストモードを使用できます。他のユーザーのアカウントを追加する場合は、<ph name="DEVICE_TYPE" /> に<ph name="LINK_BEGIN" />新しいユーザーを追加<ph name="LINK_END" />します。
+
+これまでにウェブサイトやアプリに許可した権限がこのアカウントに適用される可能性があります。Google アカウントは [<ph name="SETTINGS_LINK_BEGIN" />設定<ph name="SETTINGS_LINK_END" />] で管理できます。</translation>
 <translation id="7398801000654795464">Chrome に <ph name="USER_EMAIL_ADDRESS" /> としてログインしていました。再度ログインするには同じアカウントを使用してください。</translation>
 <translation id="7408085963519505752">Chrome OS 利用規約</translation>
 <translation id="7419046106786626209">お使いのドメインでは同期を利用できないため、Chrome OS はデータを同期できませんでした。</translation>
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc
index 52adc94..51bec337 100644
--- a/chrome/browser/android/autofill_assistant/client_android.cc
+++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -22,9 +22,7 @@
 #include "chrome/android/features/autofill_assistant/jni_headers/AutofillAssistantDirectActionImpl_jni.h"
 #include "chrome/browser/android/autofill_assistant/annotate_dom_model_service_factory.h"
 #include "chrome/browser/android/autofill_assistant/ui_controller_android_utils.h"
-#include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/password_manager/password_change_success_tracker_factory.h"
-#include "chrome/common/channel_info.h"
 #include "components/autofill_assistant/browser/autofill_assistant_tts_controller.h"
 #include "components/autofill_assistant/browser/controller.h"
 #include "components/autofill_assistant/browser/display_strings_util.h"
@@ -536,7 +534,7 @@
 WebsiteLoginManager* ClientAndroid::GetWebsiteLoginManager() const {
   if (!website_login_manager_) {
     website_login_manager_ = std::make_unique<WebsiteLoginManagerImpl>(
-        ChromePasswordManagerClient::FromWebContents(GetWebContents()),
+        dependencies_->GetPasswordManagerClient(GetWebContents()),
         GetWebContents());
   }
   return website_login_manager_.get();
diff --git a/chrome/browser/android/autofill_assistant/dependencies.h b/chrome/browser/android/autofill_assistant/dependencies.h
index e7b7eb9..ad909085 100644
--- a/chrome/browser/android/autofill_assistant/dependencies.h
+++ b/chrome/browser/android/autofill_assistant/dependencies.h
@@ -11,6 +11,7 @@
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill_assistant/browser/assistant_field_trial_util.h"
 #include "components/autofill_assistant/content/browser/annotate_dom_model_service.h"
+#include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/variations/service/variations_service.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/web_contents.h"
@@ -42,6 +43,9 @@
 
   virtual autofill::PersonalDataManager* GetPersonalDataManager() const = 0;
 
+  virtual password_manager::PasswordManagerClient* GetPasswordManagerClient(
+      content::WebContents* web_contents) const = 0;
+
   virtual variations::VariationsService* GetVariationsService() const = 0;
 
   virtual std::string GetChromeSignedInEmailAddress(
diff --git a/chrome/browser/android/autofill_assistant/dependencies_chrome.cc b/chrome/browser/android/autofill_assistant/dependencies_chrome.cc
index 6b929e88..092b1f8 100644
--- a/chrome/browser/android/autofill_assistant/dependencies_chrome.cc
+++ b/chrome/browser/android/autofill_assistant/dependencies_chrome.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
@@ -21,9 +22,11 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/web_contents.h"
 
+using ::autofill::PersonalDataManager;
 using ::base::android::JavaParamRef;
 using ::base::android::ScopedJavaGlobalRef;
 using ::content::WebContents;
+using ::password_manager::PasswordManagerClient;
 using ::variations::VariationsService;
 
 namespace autofill_assistant {
@@ -47,17 +50,20 @@
   return std::make_unique<AssistantFieldTrialUtilChrome>();
 }
 
-variations::VariationsService* DependenciesChrome::GetVariationsService()
-    const {
+VariationsService* DependenciesChrome::GetVariationsService() const {
   return g_browser_process->variations_service();
 }
 
-autofill::PersonalDataManager* DependenciesChrome::GetPersonalDataManager()
-    const {
+PersonalDataManager* DependenciesChrome::GetPersonalDataManager() const {
   return autofill::PersonalDataManagerFactory::GetForProfile(
       ProfileManager::GetLastUsedProfile());
 }
 
+PasswordManagerClient* DependenciesChrome::GetPasswordManagerClient(
+    WebContents* web_contents) const {
+  return ChromePasswordManagerClient::FromWebContents(web_contents);
+}
+
 std::string DependenciesChrome::GetChromeSignedInEmailAddress(
     WebContents* web_contents) const {
   CoreAccountInfo account_info =
@@ -72,8 +78,7 @@
   return AnnotateDomModelServiceFactory::GetForBrowserContext(browser_context);
 }
 
-bool DependenciesChrome::IsCustomTab(
-    const content::WebContents& web_contents) const {
+bool DependenciesChrome::IsCustomTab(const WebContents& web_contents) const {
   auto* tab_android = TabAndroid::FromWebContents(&web_contents);
   if (!tab_android) {
     return false;
diff --git a/chrome/browser/android/autofill_assistant/dependencies_chrome.h b/chrome/browser/android/autofill_assistant/dependencies_chrome.h
index 4597689e..1ddca9c 100644
--- a/chrome/browser/android/autofill_assistant/dependencies_chrome.h
+++ b/chrome/browser/android/autofill_assistant/dependencies_chrome.h
@@ -12,6 +12,7 @@
 #include "components/autofill_assistant/browser/assistant_field_trial_util.h"
 #include "components/autofill_assistant/content/browser/annotate_dom_model_service.h"
 #include "components/metrics/metrics_service_accessor.h"
+#include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/variations/service/variations_service.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/web_contents.h"
@@ -33,6 +34,9 @@
 
   autofill::PersonalDataManager* GetPersonalDataManager() const override;
 
+  password_manager::PasswordManagerClient* GetPasswordManagerClient(
+      content::WebContents* web_contents) const override;
+
   std::string GetChromeSignedInEmailAddress(
       content::WebContents* web_contents) const override;
 
diff --git a/chrome/browser/android/autofill_assistant/starter_delegate_android.cc b/chrome/browser/android/autofill_assistant/starter_delegate_android.cc
index 33bdb5a..f91fae0 100644
--- a/chrome/browser/android/autofill_assistant/starter_delegate_android.cc
+++ b/chrome/browser/android/autofill_assistant/starter_delegate_android.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/android/autofill_assistant/client_android.h"
 #include "chrome/browser/android/autofill_assistant/trigger_script_bridge_android.h"
 #include "chrome/browser/android/autofill_assistant/ui_controller_android_utils.h"
-#include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "components/autofill_assistant/android/jni_headers_public/Starter_jni.h"
 #include "components/autofill_assistant/browser/assistant_field_trial_util.h"
 #include "components/autofill_assistant/browser/public/runtime_manager_impl.h"
@@ -53,7 +52,7 @@
     : content::WebContentsUserData<StarterDelegateAndroid>(*web_contents),
       dependencies_(std::move(dependencies)),
       website_login_manager_(std::make_unique<WebsiteLoginManagerImpl>(
-          ChromePasswordManagerClient::FromWebContents(web_contents),
+          dependencies_->GetPasswordManagerClient(web_contents),
           web_contents)) {
   // Create the AnnotateDomModelService when the browser starts, such that it
   // starts listening to model changes early enough.
diff --git a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
index d31c134..c365e2e6 100644
--- a/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
+++ b/chrome/browser/ash/android_sms/android_sms_app_setup_controller_impl_unittest.cc
@@ -209,7 +209,7 @@
     fake_externally_managed_app_manager_ =
         std::make_unique<web_app::FakeExternallyManagedAppManager>(&profile_);
     fake_externally_managed_app_manager_->SetSubsystems(
-        &controller().registrar(), nullptr, nullptr, nullptr);
+        &controller().registrar(), nullptr, nullptr, nullptr, nullptr);
     fake_externally_managed_app_manager_->SetHandleInstallRequestCallback(
         base::BindLambdaForTesting(
             [this](const web_app::ExternalInstallOptions& install_options) {
diff --git a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
index 2fbbe7e3..0eaef38 100644
--- a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
+++ b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
@@ -38,7 +38,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/image/image_skia_rep_default.h"
+#include "ui/gfx/image/image_skia_rep.h"
 #include "ui/message_center/public/cpp/notification.h"
 
 namespace ash {
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h
index aeb9d4aa..00ad1e5 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.h
+++ b/chrome/browser/ash/crosapi/crosapi_ash.h
@@ -290,6 +290,8 @@
     return structured_metrics_service_ash_.get();
   }
 
+  ScreenManagerAsh* screen_manager_ash() { return screen_manager_ash_.get(); }
+
   // Caller is responsible for ensuring that the pointer stays valid.
   void SetTestControllerForTesting(TestControllerReceiver* test_controller);
 
diff --git a/chrome/browser/ash/crosapi/dlp_ash.cc b/chrome/browser/ash/crosapi/dlp_ash.cc
index c75a855..5cf6202 100644
--- a/chrome/browser/ash/crosapi/dlp_ash.cc
+++ b/chrome/browser/ash/crosapi/dlp_ash.cc
@@ -7,6 +7,9 @@
 #include "ash/shell.h"
 #include "base/check.h"
 #include "base/logging.h"
+#include "chrome/browser/ash/crosapi/crosapi_ash.h"
+#include "chrome/browser/ash/crosapi/crosapi_manager.h"
+#include "chrome/browser/ash/crosapi/screen_manager_ash.h"
 #include "chrome/browser/ash/crosapi/window_util.h"
 #include "chrome/browser/ash/policy/dlp/dlp_content_manager_ash.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_content_restriction_set.h"
@@ -57,17 +60,28 @@
 
 content::DesktopMediaID AreaToDesktopMediaID(
     const mojom::ScreenShareAreaPtr& area) {
-  aura::Window* window = area->window_id.has_value()
-                             ? GetShellSurfaceWindow(area->window_id.value())
-                             : ash::Shell::GetPrimaryRootWindow();
+  // Fullscreen share.
+  if (!area->window_id.has_value() && area->snapshot_source_id == 0) {
+    return content::DesktopMediaID::RegisterNativeWindow(
+        content::DesktopMediaID::TYPE_SCREEN,
+        ash::Shell::GetPrimaryRootWindow());
+  }
+
+  aura::Window* window = nullptr;
+  if (area->window_id.has_value()) {
+    window = GetShellSurfaceWindow(area->window_id.value());
+  } else if (area->snapshot_source_id != 0) {
+    window = crosapi::CrosapiManager::Get()
+                 ->crosapi_ash()
+                 ->screen_manager_ash()
+                 ->GetWindowById(area->snapshot_source_id);
+  }
+
   if (!window)
     return content::DesktopMediaID();
 
-  const content::DesktopMediaID::Type media_type =
-      area->window_id.has_value() ? content::DesktopMediaID::TYPE_WINDOW
-                                  : content::DesktopMediaID::TYPE_SCREEN;
-
-  return content::DesktopMediaID::RegisterNativeWindow(media_type, window);
+  return content::DesktopMediaID::RegisterNativeWindow(
+      content::DesktopMediaID::TYPE_WINDOW, window);
 }
 
 }  // namespace
diff --git a/chrome/browser/ash/crosapi/screen_manager_ash.cc b/chrome/browser/ash/crosapi/screen_manager_ash.cc
index 5c8d49e..2f7737b 100644
--- a/chrome/browser/ash/crosapi/screen_manager_ash.cc
+++ b/chrome/browser/ash/crosapi/screen_manager_ash.cc
@@ -269,6 +269,13 @@
   CreateVideoCaptureDevice(std::move(receiver), id);
 }
 
+aura::Window* ScreenManagerAsh::GetWindowById(uint64_t id) const {
+  if (!window_capturer_impl_)
+    return nullptr;
+
+  return window_capturer_impl_->LookupWindow(id);
+}
+
 ScreenManagerAsh::ScreenCapturerImpl*
 ScreenManagerAsh::GetScreenCapturerImpl() {
   if (!screen_capturer_impl_)
diff --git a/chrome/browser/ash/crosapi/screen_manager_ash.h b/chrome/browser/ash/crosapi/screen_manager_ash.h
index ce9c184..4a3564b 100644
--- a/chrome/browser/ash/crosapi/screen_manager_ash.h
+++ b/chrome/browser/ash/crosapi/screen_manager_ash.h
@@ -47,6 +47,9 @@
       mojo::PendingReceiver<mojom::VideoCaptureDevice> receiver,
       uint64_t window_id) override;
 
+  // Returns window by ID if present.
+  aura::Window* GetWindowById(uint64_t id) const;
+
  private:
   class ScreenCapturerImpl;
   class WindowCapturerImpl;
diff --git a/chrome/browser/ash/dbus/fusebox_service_provider.cc b/chrome/browser/ash/dbus/fusebox_service_provider.cc
index c0d348f..dfbe5553 100644
--- a/chrome/browser/ash/dbus/fusebox_service_provider.cc
+++ b/chrome/browser/ash/dbus/fusebox_service_provider.cc
@@ -107,13 +107,13 @@
 // alive until these functions are called back.
 
 void ReplyToClose(scoped_refptr<storage::FileSystemContext> fs_context,
-                  dbus::MethodCall* method,
+                  dbus::MethodCall* method_call,
                   dbus::ExportedObject::ResponseSender sender,
                   base::File::Error error_code) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   writer.AppendInt32(static_cast<int32_t>(error_code));
@@ -122,13 +122,13 @@
 }
 
 void ReplyToOpenFailure(scoped_refptr<storage::FileSystemContext> fs_context,
-                        dbus::MethodCall* method,
+                        dbus::MethodCall* method_call,
                         dbus::ExportedObject::ResponseSender sender,
                         base::File::Error error_code) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   writer.AppendInt32(static_cast<int32_t>(error_code));
@@ -138,13 +138,13 @@
 }
 
 void ReplyToReadFailure(scoped_refptr<storage::FileSystemContext> fs_context,
-                        dbus::MethodCall* method,
+                        dbus::MethodCall* method_call,
                         dbus::ExportedObject::ResponseSender sender,
                         base::File::Error error_code) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   writer.AppendInt32(static_cast<int32_t>(error_code));
@@ -154,7 +154,7 @@
 }
 
 void ReplyToReadTypical(scoped_refptr<storage::FileSystemContext> fs_context,
-                        dbus::MethodCall* method,
+                        dbus::MethodCall* method_call,
                         dbus::ExportedObject::ResponseSender sender,
                         std::unique_ptr<storage::FileStreamReader> fs_reader,
                         scoped_refptr<net::IOBuffer> buffer,
@@ -162,7 +162,7 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   if (length < 0) {
@@ -189,7 +189,7 @@
 
 void ReadOnIOThread(scoped_refptr<storage::FileSystemContext> fs_context,
                     storage::FileSystemURL fs_url,
-                    dbus::MethodCall* method,
+                    dbus::MethodCall* method_call,
                     dbus::ExportedObject::ResponseSender sender,
                     int64_t offset,
                     int64_t length) {
@@ -200,7 +200,7 @@
   if (!fs_reader) {
     content::GetUIThreadTaskRunner({})->PostTask(
         FROM_HERE, base::BindOnce(&ReplyToReadFailure, std::move(fs_context),
-                                  method, std::move(sender),
+                                  method_call, std::move(sender),
                                   base::File::Error::FILE_ERROR_INVALID_URL));
     return;
   }
@@ -216,8 +216,8 @@
 
   auto pair = base::SplitOnceCallback(base::BindPostTask(
       content::GetUIThreadTaskRunner({}),
-      base::BindOnce(&ReplyToReadTypical, fs_context, method, std::move(sender),
-                     std::move(fs_reader), buffer)));
+      base::BindOnce(&ReplyToReadTypical, fs_context, method_call,
+                     std::move(sender), std::move(fs_reader), buffer)));
 
   int result =
       saved_fs_reader->Read(buffer.get(), length, std::move(pair.first));
@@ -227,14 +227,14 @@
 }
 
 void ReplyToStat(scoped_refptr<storage::FileSystemContext> fs_context,
-                 dbus::MethodCall* method,
+                 dbus::MethodCall* method_call,
                  dbus::ExportedObject::ResponseSender sender,
                  base::File::Error error_code,
                  const base::File::Info& info) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   writer.AppendInt32(static_cast<int32_t>(error_code));
@@ -289,14 +289,14 @@
 }
 
 void FuseBoxServiceProvider::Close(
-    dbus::MethodCall* method,
+    dbus::MethodCall* method_call,
     dbus::ExportedObject::ResponseSender sender) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  dbus::MessageReader reader(method);
+  dbus::MessageReader reader(method_call);
   auto common = ParseCommonDBusMethodArguments(&reader);
   if (common.error_code != base::File::Error::FILE_OK) {
-    ReplyToClose(std::move(common.fs_context), method, std::move(sender),
+    ReplyToClose(std::move(common.fs_context), method_call, std::move(sender),
                  common.error_code);
     return;
   }
@@ -304,33 +304,34 @@
   uint64_t handle = 0;
   if (!reader.PopUint64(&handle)) {
     LOG(ERROR) << "No Handle";
-    ReplyToClose(std::move(common.fs_context), method, std::move(sender),
+    ReplyToClose(std::move(common.fs_context), method_call, std::move(sender),
                  base::File::Error::FILE_ERROR_INVALID_OPERATION);
     return;
   }
 
   trackers_.erase(handle);
 
-  ReplyToClose(std::move(common.fs_context), method, std::move(sender),
+  ReplyToClose(std::move(common.fs_context), method_call, std::move(sender),
                base::File::Error::FILE_OK);
 }
 
-void FuseBoxServiceProvider::Open(dbus::MethodCall* method,
+void FuseBoxServiceProvider::Open(dbus::MethodCall* method_call,
                                   dbus::ExportedObject::ResponseSender sender) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  dbus::MessageReader reader(method);
+  dbus::MessageReader reader(method_call);
   auto common = ParseCommonDBusMethodArguments(&reader);
   if (common.error_code != base::File::Error::FILE_OK) {
-    ReplyToOpenFailure(std::move(common.fs_context), method, std::move(sender),
-                       common.error_code);
+    ReplyToOpenFailure(std::move(common.fs_context), method_call,
+                       std::move(sender), common.error_code);
     return;
   }
 
   int32_t flags = 0;
   if (!reader.PopInt32(&flags)) {
     LOG(ERROR) << "No Flags";
-    ReplyToOpenFailure(std::move(common.fs_context), method, std::move(sender),
+    ReplyToOpenFailure(std::move(common.fs_context), method_call,
+                       std::move(sender),
                        base::File::Error::FILE_ERROR_INVALID_OPERATION);
     return;
   }
@@ -350,8 +351,8 @@
   auto reply_to_open_typical = base::BindPostTask(
       base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&FuseBoxServiceProvider::ReplyToOpenTypical,
-                     weak_ptr_factory_.GetWeakPtr(), common.fs_context, method,
-                     std::move(sender)));
+                     weak_ptr_factory_.GetWeakPtr(), common.fs_context,
+                     method_call, std::move(sender)));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
@@ -364,7 +365,7 @@
 
 void FuseBoxServiceProvider::ReplyToOpenTypical(
     scoped_refptr<storage::FileSystemContext> fs_context,  // See (§) above.
-    dbus::MethodCall* method,
+    dbus::MethodCall* method_call,
     dbus::ExportedObject::ResponseSender sender,
     base::File file,
     base::OnceClosure on_close_callback) {
@@ -382,7 +383,7 @@
   }
 
   std::unique_ptr<dbus::Response> response =
-      dbus::Response::FromMethodCall(method);
+      dbus::Response::FromMethodCall(method_call);
   dbus::MessageWriter writer(response.get());
 
   writer.AppendInt32(static_cast<int32_t>(file.error_details()));
@@ -410,48 +411,50 @@
           std::move(file), tracker));
 }
 
-void FuseBoxServiceProvider::Read(dbus::MethodCall* method,
+void FuseBoxServiceProvider::Read(dbus::MethodCall* method_call,
                                   dbus::ExportedObject::ResponseSender sender) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  dbus::MessageReader reader(method);
+  dbus::MessageReader reader(method_call);
   auto common = ParseCommonDBusMethodArguments(&reader);
   if (common.error_code != base::File::Error::FILE_OK) {
-    ReplyToReadFailure(std::move(common.fs_context), method, std::move(sender),
-                       common.error_code);
+    ReplyToReadFailure(std::move(common.fs_context), method_call,
+                       std::move(sender), common.error_code);
     return;
   }
 
   int64_t offset = 0;
   if (!reader.PopInt64(&offset)) {
     LOG(ERROR) << "No Offset";
-    ReplyToReadFailure(std::move(common.fs_context), method, std::move(sender),
+    ReplyToReadFailure(std::move(common.fs_context), method_call,
+                       std::move(sender),
                        base::File::Error::FILE_ERROR_INVALID_OPERATION);
     return;
   }
   int32_t length = 0;
   if (!reader.PopInt32(&length)) {
     LOG(ERROR) << "No Length";
-    ReplyToReadFailure(std::move(common.fs_context), method, std::move(sender),
+    ReplyToReadFailure(std::move(common.fs_context), method_call,
+                       std::move(sender),
                        base::File::Error::FILE_ERROR_INVALID_OPERATION);
     return;
   }
 
   content::GetIOThreadTaskRunner({})->PostTask(
-      FROM_HERE,
-      base::BindOnce(&ReadOnIOThread, common.fs_context, common.fs_url, method,
-                     std::move(sender), offset, static_cast<int64_t>(length)));
+      FROM_HERE, base::BindOnce(&ReadOnIOThread, common.fs_context,
+                                common.fs_url, method_call, std::move(sender),
+                                offset, static_cast<int64_t>(length)));
 }
 
-void FuseBoxServiceProvider::Stat(dbus::MethodCall* method,
+void FuseBoxServiceProvider::Stat(dbus::MethodCall* method_call,
                                   dbus::ExportedObject::ResponseSender sender) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  dbus::MessageReader reader(method);
+  dbus::MessageReader reader(method_call);
   auto common = ParseCommonDBusMethodArguments(&reader);
   if (common.error_code != base::File::Error::FILE_OK) {
     base::File::Info info;
-    ReplyToStat(std::move(common.fs_context), method, std::move(sender),
+    ReplyToStat(std::move(common.fs_context), method_call, std::move(sender),
                 common.error_code, info);
     return;
   }
@@ -463,8 +466,8 @@
 
   auto callback =
       base::BindPostTask(base::SequencedTaskRunnerHandle::Get(),
-                         base::BindOnce(&ReplyToStat, common.fs_context, method,
-                                        std::move(sender)));
+                         base::BindOnce(&ReplyToStat, common.fs_context,
+                                        method_call, std::move(sender)));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
diff --git a/chrome/browser/ash/dbus/fusebox_service_provider.h b/chrome/browser/ash/dbus/fusebox_service_provider.h
index 33abac4f..41002a4 100644
--- a/chrome/browser/ash/dbus/fusebox_service_provider.h
+++ b/chrome/browser/ash/dbus/fusebox_service_provider.h
@@ -65,17 +65,17 @@
   // corresponds to the standard stat function described by "man 2 stat".
   //
   // TODO(nigeltao): add ReadDir, etc.
-  void Close(dbus::MethodCall* method,
+  void Close(dbus::MethodCall* method_call,
              dbus::ExportedObject::ResponseSender sender);
-  void Open(dbus::MethodCall* method,
+  void Open(dbus::MethodCall* method_call,
             dbus::ExportedObject::ResponseSender sender);
-  void Read(dbus::MethodCall* method,
+  void Read(dbus::MethodCall* method_call,
             dbus::ExportedObject::ResponseSender sender);
-  void Stat(dbus::MethodCall* method,
+  void Stat(dbus::MethodCall* method_call,
             dbus::ExportedObject::ResponseSender sender);
 
   void ReplyToOpenTypical(scoped_refptr<storage::FileSystemContext> fs_context,
-                          dbus::MethodCall* method,
+                          dbus::MethodCall* method_call,
                           dbus::ExportedObject::ResponseSender sender,
                           base::File file,
                           base::OnceClosure on_close_callback);
diff --git a/chrome/browser/ash/scoped_test_system_nss_key_slot_mixin.cc b/chrome/browser/ash/scoped_test_system_nss_key_slot_mixin.cc
index 3cc49db..612cc22 100644
--- a/chrome/browser/ash/scoped_test_system_nss_key_slot_mixin.cc
+++ b/chrome/browser/ash/scoped_test_system_nss_key_slot_mixin.cc
@@ -80,9 +80,9 @@
   crypto::ResetSystemSlotForTesting();
 
   if (slot_) {
-    SECStatus status = SECMOD_CloseUserDB(slot_.get());
+    SECStatus status = crypto::CloseSoftwareNSSDB(slot_.get());
     if (status != SECSuccess)
-      PLOG(ERROR) << "SECMOD_CloseUserDB failed: " << PORT_GetError();
+      PLOG(ERROR) << "CloseSoftwareNSSDB failed: " << PORT_GetError();
   }
 }
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
index 498c8011..8730ce56 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros.cc
@@ -18,6 +18,9 @@
 
 namespace {
 
+// Min version of DLP crosapi with |ScreenShareArea.snapshot_source_id| field.
+constexpr int kSnapshotSourceIdMinVersion = 3;
+
 crosapi::mojom::DlpRestrictionLevel ConvertLevelToMojo(
     DlpRulesManager::Level level) {
   switch (level) {
@@ -67,12 +70,15 @@
   }
   DCHECK_EQ(media_id.type, content::DesktopMediaID::Type::TYPE_WINDOW);
   aura::Window* window = content::DesktopMediaID::GetNativeWindowById(media_id);
-  // TODO(crbug.com/1293023): Should not normally happen when |window_id| will
-  // be correctly set.
-  if (media_id.window_id == 0 || !window) {
+  if (window) {
+    result->window_id = lacros_window_utility::GetRootWindowUniqueId(window);
+  } else if (chromeos::LacrosService::Get()->GetInterfaceVersion(
+                 crosapi::mojom::Dlp::Uuid_) < kSnapshotSourceIdMinVersion) {
+    // TODO(crbug.com/1273189): Should not normally happen when |window_id| will
+    // be correctly set.
     return nullptr;
   }
-  result->window_id = lacros_window_utility::GetRootWindowUniqueId(window);
+  result->snapshot_source_id = media_id.id;
   return result;
 }
 
diff --git a/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc b/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc
index 796c706..f713e57c 100644
--- a/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc
+++ b/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc
@@ -94,8 +94,8 @@
   if (!extra_params.empty())
     base::StringAppendF(&query, "&%s", extra_params.c_str());
 
-  url::Replacements<char> replacements;
-  replacements.SetQuery(query.c_str(), url::Component(0, query.length()));
+  GURL::Replacements replacements;
+  replacements.SetQueryStr(query);
   GURL url = settings_.authorization_endpoint.ReplaceComponents(replacements);
   web_view_->LoadInitialURL(url);
 }
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
index d47ea5f..e950417 100644
--- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
+++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
@@ -1124,6 +1124,62 @@
   }
 }
 
+// Tests the "requestDomains" and "excludedRequestDomains" properties of
+// declarativeNetRequest rule conditions.
+IN_PROC_BROWSER_TEST_P(DeclarativeNetRequestBrowserTest,
+                       BlockRequests_RequestDomains) {
+  struct {
+    size_t id;
+    std::vector<std::string> request_domains;
+    std::vector<std::string> excluded_request_domains;
+  } rules_data[] = {
+      {1, {"x.com", "y.com"}, {"a.x.com"}},
+      {2, {/* all domains */}, {"z.com", "a.x.com", "y.com"}},
+  };
+
+  std::vector<TestRule> rules;
+  for (const auto& rule_data : rules_data) {
+    TestRule rule = CreateGenericRule();
+    rule.condition->url_filter = "child_frame.html";
+    rule.id = rule_data.id;
+
+    // An empty list is not allowed for the "request_domains" property.
+    if (!rule_data.request_domains.empty())
+      rule.condition->request_domains = rule_data.request_domains;
+
+    rule.condition->excluded_request_domains =
+        rule_data.excluded_request_domains;
+    rule.condition->resource_types = std::vector<std::string>({"sub_frame"});
+    rules.push_back(rule);
+  }
+  ASSERT_NO_FATAL_FAILURE(LoadExtensionWithRules(rules));
+
+  GURL url = embedded_test_server()->GetURL(
+      "example.com",
+      "/request_domain_test.html?w.com,x.com,y.com,a.x.com,z.com");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
+  ASSERT_TRUE(WasFrameWithScriptLoaded(GetMainFrame()));
+  ASSERT_EQ(content::PAGE_TYPE_NORMAL, GetPageType());
+
+  struct {
+    std::string domain;
+    bool expect_frame_loaded;
+  } cases[] = {
+      {"x.com", false /* Rule 1 */}, {"a.x.com", true},
+      {"y.com", false /* Rule 1 */}, {"z.com", true},
+      {"w.com", false /* Rule 2 */},
+  };
+
+  for (const auto& test_case : cases) {
+    SCOPED_TRACE(
+        base::StringPrintf("Testing domain %s", test_case.domain.c_str()));
+
+    content::RenderFrameHost* child = GetFrameByName(test_case.domain);
+    EXPECT_TRUE(child);
+    EXPECT_EQ(test_case.expect_frame_loaded, WasFrameWithScriptLoaded(child));
+  }
+}
+
 // Tests the "domainType" property of a declarative rule condition.
 IN_PROC_BROWSER_TEST_P(DeclarativeNetRequestBrowserTest,
                        BlockRequests_DomainType) {
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
index 9ed77d1..0eeb2c2e 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
@@ -39,10 +39,6 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "url/url_constants.h"
 
-#if BUILDFLAG(IS_MAC)
-#include "base/mac/mac_util.h"
-#endif
-
 namespace extensions {
 
 namespace {
@@ -90,11 +86,6 @@
 
 // Tests API behaviors, including info queries, and constraints violations.
 IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, ApiTests) {
-  // This test flakes on the MacOS 10.12 builder (see crbug.com/1299873).
-#if BUILDFLAG(IS_MAC)
-  if (base::mac::IsOS10_12())
-    GTEST_SKIP();
-#endif
   AddExtensionToCommandLineAllowlist();
   ASSERT_TRUE(
       RunExtensionTest("tab_capture/api_tests", {.page_url = "api_tests.html"}))
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index e8c5ac5..b321abc 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1693,32 +1693,32 @@
   {
     "name": "enable-cros-ime-assist-autocorrect",
     "owners": [ "jopalmer", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-assist-emoji-enhanced",
     "owners": [ "myy", "curtismcmullan", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-assist-multi-word",
     "owners": [ "curtismcmullan", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-assist-multi-word-expanded",
     "owners": [ "curtismcmullan", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-assist-multi-word-lacros",
     "owners": [ "curtismcmullan", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-assist-personal-info",
     "owners": [ "jiwan", "essential-inputs-team@google.com" ],
-    "expiry_milestone": 100
+    "expiry_milestone": 110
   },
   {
     "name": "enable-cros-ime-mozc-proto",
@@ -2086,6 +2086,11 @@
     "expiry_milestone": -1
   },
   {
+      "name": "enable-favicon-passwords",
+      "owners": [ "veronguyen", "gambard" ],
+      "expiry_milestone": 105
+  },
+  {
     "name": "enable-fenced-frames",
     "owners": [ "dom", "shivanisha", "chrome-fenced-frames@google.com" ],
     "expiry_milestone": 110
@@ -4712,17 +4717,17 @@
   },
   {
     "name": "password-change-in-settings",
-    "owners": [ "kolos", "selakovic@google.com", "treib" ],
-    "expiry_milestone": 100
+    "owners": [ "kolos", "treib", "brunobraga" ],
+    "expiry_milestone": 112
   },
   {
     "name": "password-change-support",
-    "owners": [ "kolos", "selakovic@google.com", "treib" ],
-    "expiry_milestone": 100
+    "owners": [ "kolos", "treib", "brunobraga" ],
+    "expiry_milestone": 112
   },
   {
     "name": "password-domain-capabilities-fetching",
-    "owners": [ "vizcay", "treib" ],
+    "owners": [ "vizcay", "treib", "brunobraga" ],
     "expiry_milestone": 105
   },
   {
@@ -4734,8 +4739,8 @@
   },
   {
     "name": "password-scripts-fetching",
-    "owners": [ "kolos", "selakovic@google.com", "treib" ],
-    "expiry_milestone": 100
+    "owners": [ "kolos", "selakovic@google.com", "treib", "brunobraga" ],
+    "expiry_milestone": 105
   },
   {
     "name": "passwords-account-storage-revised-opt-in-flow",
diff --git a/chrome/browser/lacros/cert_db_initializer_browsertest.cc b/chrome/browser/lacros/cert_db_initializer_browsertest.cc
new file mode 100644
index 0000000..9b8f0ad95
--- /dev/null
+++ b/chrome/browser/lacros/cert_db_initializer_browsertest.cc
@@ -0,0 +1,177 @@
+
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/files/file_util.h"
+#include "base/path_service.h"
+#include "base/run_loop.h"
+#include "base/test/bind.h"
+#include "base/test/test_future.h"
+#include "chrome/browser/lacros/cert_db_initializer.h"
+#include "chrome/browser/lacros/cert_db_initializer_factory.h"
+#include "chrome/browser/net/nss_service.h"
+#include "chrome/browser/net/nss_service_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/common/chrome_constants.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/storage_partition.h"
+#include "content/public/test/browser_test.h"
+#include "net/cert/nss_cert_database.h"
+#include "net/cert/x509_certificate.h"
+#include "net/cert/x509_util_nss.h"
+#include "net/test/cert_test_util.h"
+#include "services/network/public/mojom/network_context.mojom.h"
+
+namespace {
+
+constexpr char kRootCaCert[] = "root_ca_cert.pem";
+// A PEM-encoded certificate which was signed by the Authority specified in
+// |kRootCaCert|.
+constexpr char kServerCert[] = "ok_cert.pem";
+
+base::FilePath GetTestCertsPath() {
+  base::FilePath test_data_dir;
+  EXPECT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir));
+
+  base::FilePath test_certs_path =
+      test_data_dir.AppendASCII("policy").AppendASCII("test_certs");
+  base::ScopedAllowBlockingForTesting allow_io;
+  EXPECT_TRUE(base::DirectoryExists(test_certs_path));
+  return test_certs_path;
+}
+
+void WaitUnitCertDbReady(Profile* profile) {
+  base::RunLoop run_loop;
+  CertDbInitializer* initializer =
+      CertDbInitializerFactory::GetInstance()->GetForBrowserContext(profile);
+  ASSERT_TRUE(initializer);
+  auto subscription = initializer->WaitUntilReady(run_loop.QuitClosure());
+  run_loop.Run();
+}
+
+void ImportCaCertWithDb(base::OnceClosure done_callback,
+                        net::NSSCertDatabase* nss_db) {
+  ASSERT_TRUE(nss_db);
+
+  std::string cert_bytes;
+  {
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    ASSERT_TRUE(base::ReadFileToString(
+        GetTestCertsPath().AppendASCII(kRootCaCert), &cert_bytes));
+  }
+
+  auto cert = net::x509_util::CreateCERTCertificateListFromBytes(
+      cert_bytes.data(), cert_bytes.size(), net::X509Certificate::FORMAT_AUTO);
+
+  net::NSSCertDatabase::ImportCertFailureList failure_list;
+  nss_db->ImportCACerts(std::move(cert),
+                        /*trust_bits=*/net::NSSCertDatabase::TRUSTED_SSL,
+                        &failure_list);
+
+  if (!failure_list.empty()) {
+    for (const auto& failure : failure_list) {
+      LOG(ERROR) << "Failed to import CA cert: " << failure.net_error;
+    }
+    ASSERT_TRUE(false);
+  }
+
+  std::move(done_callback).Run();
+}
+
+void GetNssDatabase(base::OnceClosure done_callback,
+                    NssCertDatabaseGetter nss_getter) {
+  auto on_got_db = base::SplitOnceCallback(
+      base::BindOnce(&ImportCaCertWithDb, std::move(done_callback)));
+  net::NSSCertDatabase* nss_db =
+      std::move(nss_getter).Run(std::move(on_got_db.first));
+  if (nss_db) {
+    std::move(on_got_db.second).Run(nss_db);
+  }
+}
+
+void ImportCaCert(Profile* profile) {
+  base::RunLoop run_loop;
+
+  NssService* nss_service =
+      NssServiceFactory::GetInstance()->GetForContext(profile);
+
+  content::GetIOThreadTaskRunner({})->PostTask(
+      FROM_HERE,
+      base::BindOnce(&GetNssDatabase, run_loop.QuitClosure(),
+                     nss_service->CreateNSSCertDatabaseGetterForIOThread()));
+
+  run_loop.Run();
+}
+
+[[nodiscard]] int VerifyServerCert(Profile* profile) {
+  base::FilePath server_cert_path = GetTestCertsPath().AppendASCII(kServerCert);
+  scoped_refptr<net::X509Certificate> server_cert = net::ImportCertFromFile(
+      server_cert_path.DirName(), server_cert_path.BaseName().value());
+  EXPECT_TRUE(server_cert);
+
+  base::test::TestFuture<int> future;
+  profile->GetDefaultStoragePartition()
+      ->GetNetworkContext()
+      ->VerifyCertificateForTesting(
+          server_cert, "127.0.0.1", /*ocsp_response=*/std::string(),
+          /*sct_list=*/std::string(), future.GetCallback());
+  return future.Get();
+}
+
+class CertDbInitializerTest : public InProcessBrowserTest {
+ public:
+  void SetUp() override {
+    CertDbInitializerFactory::GetInstance()
+        ->SetCreateWithBrowserContextForTesting(
+            /*should_create=*/true);
+    InProcessBrowserTest::SetUp();
+  }
+};
+
+// TODO(b/219968355): At the moment Lacros browser tests don't clear user
+// directory in Ash in between tests. Because of that, these tests interfere
+// with each other (because they import certs into the software nss database
+// that is stored there) and fail when run all in the same batch. They can be
+// run one a time for semi-manual testing and should be re-enabled when the bug
+// is fixed.
+
+// Tests that CertDbInitializer eventually reports that cert database is ready
+// for the main profile.
+IN_PROC_BROWSER_TEST_F(CertDbInitializerTest, DISABLED_EventuallyReady) {
+  EXPECT_TRUE(browser()->profile()->IsMainProfile());
+  WaitUnitCertDbReady(browser()->profile());
+}
+
+// Tests that a CA certificate can be imported and used for cert verification.
+IN_PROC_BROWSER_TEST_F(CertDbInitializerTest, DISABLED_CanImportCaCert) {
+  WaitUnitCertDbReady(browser()->profile());
+  ImportCaCert(browser()->profile());
+  EXPECT_EQ(net::OK, VerifyServerCert(browser()->profile()));
+}
+
+// Tests that without importing a CA certificate, Chrome rejects unknown server
+// certs.
+IN_PROC_BROWSER_TEST_F(CertDbInitializerTest, DISABLED_CertRejectedByDefault) {
+  WaitUnitCertDbReady(browser()->profile());
+  EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID,
+            VerifyServerCert(browser()->profile()));
+}
+
+// Imports a CA certs that will be available in ImmediatelyAfterLaunch test.
+IN_PROC_BROWSER_TEST_F(CertDbInitializerTest,
+                       DISABLED_PRE_ImmediatelyAfterLaunch) {
+  WaitUnitCertDbReady(browser()->profile());
+  ImportCaCert(browser()->profile());
+}
+
+// Tests that Chrome waits until certs are initialized and the imported CA cert
+// from the PRE_ test is available before verifying server certs.
+IN_PROC_BROWSER_TEST_F(CertDbInitializerTest, DISABLED_ImmediatelyAfterLaunch) {
+  EXPECT_EQ(net::OK, VerifyServerCert(browser()->profile()));
+}
+
+}  // namespace
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index 86cb596..0a0efbc 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -109,6 +109,7 @@
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chrome/browser/lacros/cert_db_initializer_factory.h"
 #include "chrome/browser/lacros/client_cert_store_lacros.h"
+#include "chromeos/lacros/lacros_service.h"
 #endif
 
 namespace {
@@ -890,6 +891,22 @@
   }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
+  // Configure cert verifier to use the same software NSS database as Chrome is
+  // currently using (secondary profiles don't have their own databases at the
+  // moment).
+  cert_verifier_creation_params->nss_full_path.reset();
+  if (profile_->IsMainProfile()) {
+    DCHECK(chromeos::LacrosService::Get());
+    DCHECK(chromeos::LacrosService::Get()->init_params());
+    const crosapi::mojom::DefaultPathsPtr& default_paths =
+        chromeos::LacrosService::Get()->init_params()->default_paths;
+    // `default_paths` can be nullptr in tests.
+    if (default_paths && default_paths->user_nss_database.has_value()) {
+      cert_verifier_creation_params->nss_full_path =
+          default_paths->user_nss_database.value();
+    }
+  }
+
   PopulateInitialAdditionalCerts(relative_partition_path,
                                  network_context_params);
 #endif
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn
index 72395aa..9182adf 100644
--- a/chrome/browser/password_manager/android/BUILD.gn
+++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -7,6 +7,7 @@
 java_cpp_enum("android_backend_java_enums_srcjar") {
   sources = [
     "android_backend_error.h",
+    "chromesync_status_code.h",
     "password_store_operation_target.h",
   ]
 }
diff --git a/chrome/browser/password_manager/android/chromesync_status_code.h b/chrome/browser/password_manager/android/chromesync_status_code.h
new file mode 100644
index 0000000..4b2d509
--- /dev/null
+++ b/chrome/browser/password_manager/android/chromesync_status_code.h
@@ -0,0 +1,50 @@
+// Copyright 2022 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_PASSWORD_MANAGER_ANDROID_CHROMESYNC_STATUS_CODE_H_
+#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_CHROMESYNC_STATUS_CODE_H_
+
+namespace password_manager {
+
+// TODO(crbug.com/1300837): Remove once GMS definition will be exposed.
+// Status codes redefinition for the GMS ChromeSync API.
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.password_manager
+enum class ChromeSyncStatusCode {
+  // We need user to retrieve their passphrase in order to decrypt the data.
+  kPassphraseRequired = 11000,
+
+  // Happens when user enters the wrong custom passphrase.
+  kWrongPassphrase = 11001,
+
+  // Happens when trying to retrieve / modify the data that is not being
+  // subscribed by any subscribers.
+  kDataNotSubscribed = 11002,
+
+  // Happens when the execution of a ChromeSync service operation fails due to
+  // the request/response data exceeding the binder size limit. Also see
+  // https://developer.android.com/reference/android/os/TransactionTooLargeException
+  kTransactionTooLarge = 11003,
+
+  // Happens when the package of the calling application package name is not
+  // allowlisted via the flag "first_party_api_allow_list".
+  kAccessDenied = 11004,
+
+  // Happens when the account is not authenticated and the issue is resolvable
+  // by the user.
+  kAuthErrorResolvable = 11005,
+
+  // Happens when the account is not authenticated, but the issue is not
+  // resolvable by the user.
+  kAuthErrorUnresolvable = 11006,
+
+  // The 0P API has some operations that don't support local accounts. If they
+  // are called for local accounts, this status code is provided.
+  kLocalAccountNotSupported = 11007,
+
+  kMaxValue = kLocalAccountNotSupported,
+};
+
+}  // namespace password_manager
+
+#endif  // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_CHROMESYNC_STATUS_CODE_H_
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
index 565c2d9..c81f91fc 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
@@ -127,9 +127,11 @@
             api_error_code = ((ApiException) exception).getStatusCode();
 
             if (ChromeFeatureList.isEnabled(UNIFIED_PASSWORD_MANAGER_ANDROID)
-                    && exception instanceof ResolvableApiException) {
+                    && exception instanceof ResolvableApiException
+                    && api_error_code != ChromeSyncStatusCode.AUTH_ERROR_RESOLVABLE) {
                 // Backend error is user-recoverable, launch pending intent to allow the user to
-                // resolve it.
+                // resolve it. Resolution for the authentication errors is not launched as
+                // user is requested to reauthenticate by Google services and Sync in Chrome.
                 ResolvableApiException resolvableApiException = (ResolvableApiException) exception;
                 PendingIntent pendingIntent = resolvableApiException.getResolution();
                 try {
diff --git a/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
index ec820e7..336349f3 100644
--- a/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
+++ b/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
@@ -820,19 +820,11 @@
   EXPECT_TRUE(GetOverlayWindow()->video_layer_for_testing()->visible());
 }
 
-// TODO(crbug.com/1290823): Test failed on Mac.
-#if BUILDFLAG(IS_MAC)
-#define MAYBE_ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened \
-  DISABLED_ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened
-#else
-#define MAYBE_ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened \
-  ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened
-#endif
 // Tests that changing video src to media stream when video is in
 // Picture-in-Picture session keep Picture-in-Picture window opened.
 IN_PROC_BROWSER_TEST_F(
     VideoPictureInPictureWindowControllerBrowserTest,
-    MAYBE_ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened) {
+    ChangeVideoSrcToMediaStreamKeepsPictureInPictureWindowOpened) {
   LoadTabAndEnterPictureInPicture(
       browser(), base::FilePath(kPictureInPictureWindowSizePage));
 
diff --git a/chrome/browser/resources/app_settings/app.html b/chrome/browser/resources/app_settings/app.html
index cb2e19a6..5836d851 100644
--- a/chrome/browser/resources/app_settings/app.html
+++ b/chrome/browser/resources/app_settings/app.html
@@ -78,9 +78,15 @@
             permission-type="kMicrophone">
         </app-management-permission-item>
       </div>
+    </div>
+    <app-management-file-handling-item
+        class="permission-card-row separated-row"
+        file-handling-header="$i18n{appManagementFileHandlingHeader}"
+        app="[[app_]]">
+    </app-management-file-handling-item>
+    <app-management-more-permissions-item
+        class="permission-card-row separated-row" app="[[app_]]"
+        more-permissions-label="$i18n{appManagementMorePermissionsLabel}">
+    </app-management-more-permissions-item>
   </div>
-  <app-management-more-permissions-item
-      class="permission-card-row separated-row" app="[[app_]]"
-      more-permissions-label="$i18n{appManagementMorePermissionsLabel}">
-  </app-management-more-permissions-item>
 </div>
diff --git a/chrome/browser/resources/app_settings/app.ts b/chrome/browser/resources/app_settings/app.ts
index 99517b4..f40d432 100644
--- a/chrome/browser/resources/app_settings/app.ts
+++ b/chrome/browser/resources/app_settings/app.ts
@@ -4,6 +4,7 @@
 
 import './strings.m.js';
 import 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar.js';
+import 'chrome://resources/cr_components/app_management/file_handling_item.js';
 import 'chrome://resources/cr_components/app_management/more_permissions_item.js';
 import 'chrome://resources/cr_components/app_management/run_on_os_login_item.js';
 import 'chrome://resources/cr_components/app_management/permission_item.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
index c1f29e0..7f37d88 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
@@ -109,6 +109,7 @@
       hideResizeLocked: true,
       supportedLinks: [],
       runOnOsLogin: null,
+      fileHandlingState: null,
     };
 
     if (optConfig) {
@@ -315,6 +316,14 @@
 
   /**
    * @param {string} appId
+   * @param {boolean} fileHandlingEnabled
+   */
+  setFileHandlingEnabled(appId, fileHandlingEnabled) {
+    assertNotReached();
+  }
+
+  /**
+   * @param {string} appId
    * @return {!Promise<{ appIds: !Array<!string> }>}
    */
   async getOverlappingPreferredApps(appId) {
diff --git a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
index 4c7d9a3..880337c 100644
--- a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
+++ b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
@@ -1415,17 +1415,9 @@
   base::test::ScopedFeatureList feature_list_;
 };
 
-// TODO(crbug.com/1290823): Test failed on Mac.
-#if BUILDFLAG(IS_MAC)
-#define MAYBE_UserActivationBrowserVerificationSameOriginSite \
-  DISABLED_UserActivationBrowserVerificationSameOriginSite
-#else
-#define MAYBE_UserActivationBrowserVerificationSameOriginSite \
-  UserActivationBrowserVerificationSameOriginSite
-#endif
 // Test mouse down activation notification with browser verification.
 IN_PROC_BROWSER_TEST_F(ChromeSitePerProcessTestWithVerifiedUserActivation,
-                       MAYBE_UserActivationBrowserVerificationSameOriginSite) {
+                       UserActivationBrowserVerificationSameOriginSite) {
   // Start on a page a.com with same-origin iframe on a.com and cross-origin
   // iframe b.com.
   GURL main_url(embedded_test_server()->GetURL(
diff --git a/chrome/browser/sync/test/integration/bookmarks_helper.cc b/chrome/browser/sync/test/integration/bookmarks_helper.cc
index 67bd3bfb..bc1f067 100644
--- a/chrome/browser/sync/test/integration/bookmarks_helper.cc
+++ b/chrome/browser/sync/test/integration/bookmarks_helper.cc
@@ -6,7 +6,6 @@
 
 #include <stddef.h>
 
-#include <algorithm>
 #include <functional>
 #include <memory>
 #include <set>
@@ -19,6 +18,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/rand_util.h"
+#include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
@@ -1446,8 +1446,7 @@
   };
 
   for (auto& [parent_id, children_guids] : guids_grouped_by_parent_id) {
-    std::sort(children_guids.begin(), children_guids.end(),
-              sort_by_position_fn);
+    base::ranges::sort(children_guids, sort_by_position_fn);
   }
   return guids_grouped_by_parent_id;
 }
diff --git a/chrome/browser/sync/test/integration/sessions_helper.cc b/chrome/browser/sync/test/integration/sessions_helper.cc
index 5b1a627..d09f80c 100644
--- a/chrome/browser/sync/test/integration/sessions_helper.cc
+++ b/chrome/browser/sync/test/integration/sessions_helper.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
+#include "base/ranges/algorithm.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -323,7 +324,7 @@
 }
 
 void SortSyncedSessions(SyncedSessionVector* sessions) {
-  std::sort(sessions->begin(), sessions->end(), CompareSyncedSessions);
+  base::ranges::sort(*sessions, CompareSyncedSessions);
 }
 
 bool NavigationEquals(const sessions::SerializedNavigationEntry& expected,
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index 0468018..08f0a53 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -165,6 +165,54 @@
        kColorTabForegroundInactiveFrameActive},
       {TP::COLOR_TAB_FOREGROUND_INACTIVE_FRAME_INACTIVE,
        kColorTabForegroundInactiveFrameInactive},
+      // The colors used for tab groups in the tabstrip.
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_BLUE,
+       kColorTabGroupTabStripFrameActiveBlue},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_CYAN,
+       kColorTabGroupTabStripFrameActiveCyan},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_GREEN,
+       kColorTabGroupTabStripFrameActiveGreen},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_GREY,
+       kColorTabGroupTabStripFrameActiveGrey},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_ORANGE,
+       kColorTabGroupTabStripFrameActiveOrange},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_PINK,
+       kColorTabGroupTabStripFrameActivePink},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_PURPLE,
+       kColorTabGroupTabStripFrameActivePurple},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_RED,
+       kColorTabGroupTabStripFrameActiveRed},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_YELLOW,
+       kColorTabGroupTabStripFrameActiveYellow},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_BLUE,
+       kColorTabGroupTabStripFrameInactiveBlue},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_CYAN,
+       kColorTabGroupTabStripFrameInactiveCyan},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_GREEN,
+       kColorTabGroupTabStripFrameInactiveGreen},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_GREY,
+       kColorTabGroupTabStripFrameInactiveGrey},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_ORANGE,
+       kColorTabGroupTabStripFrameInactiveOrange},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_PINK,
+       kColorTabGroupTabStripFrameInactivePink},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_PURPLE,
+       kColorTabGroupTabStripFrameInactivePurple},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_RED,
+       kColorTabGroupTabStripFrameInactiveRed},
+      {TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_YELLOW,
+       kColorTabGroupTabStripFrameInactiveYellow},
+      // The colors used for tab groups in the bubble dialog view.
+      {TP::COLOR_TAB_GROUP_DIALOG_BLUE, kColorTabGroupDialogBlue},
+      {TP::COLOR_TAB_GROUP_DIALOG_CYAN, kColorTabGroupDialogCyan},
+      {TP::COLOR_TAB_GROUP_DIALOG_GREEN, kColorTabGroupDialogGreen},
+      {TP::COLOR_TAB_GROUP_DIALOG_GREY, kColorTabGroupDialogGrey},
+      {TP::COLOR_TAB_GROUP_DIALOG_ORANGE, kColorTabGroupDialogOrange},
+      {TP::COLOR_TAB_GROUP_DIALOG_PINK, kColorTabGroupDialogPink},
+      {TP::COLOR_TAB_GROUP_DIALOG_PURPLE, kColorTabGroupDialogPurple},
+      {TP::COLOR_TAB_GROUP_DIALOG_RED, kColorTabGroupDialogRed},
+      {TP::COLOR_TAB_GROUP_DIALOG_YELLOW, kColorTabGroupDialogYellow},
+      // The colors used for tab groups in the context submenu.
       {TP::COLOR_TAB_GROUP_CONTEXT_MENU_BLUE, kColorTabGroupContextMenuBlue},
       {TP::COLOR_TAB_GROUP_CONTEXT_MENU_CYAN, kColorTabGroupContextMenuCyan},
       {TP::COLOR_TAB_GROUP_CONTEXT_MENU_GREEN, kColorTabGroupContextMenuGreen},
@@ -177,6 +225,20 @@
       {TP::COLOR_TAB_GROUP_CONTEXT_MENU_RED, kColorTabGroupContextMenuRed},
       {TP::COLOR_TAB_GROUP_CONTEXT_MENU_YELLOW,
        kColorTabGroupContextMenuYellow},
+      // The colors used for saved tab group chips on the bookmark bar.
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_BLUE, kColorTabGroupBookmarkBarBlue},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_CYAN, kColorTabGroupBookmarkBarCyan},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_GREEN, kColorTabGroupBookmarkBarGreen},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_GREY, kColorTabGroupBookmarkBarGrey},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_ORANGE,
+       kColorTabGroupBookmarkBarOrange},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_PINK, kColorTabGroupBookmarkBarPink},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_PURPLE,
+       kColorTabGroupBookmarkBarPurple},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_RED, kColorTabGroupBookmarkBarRed},
+      {TP::COLOR_TAB_GROUP_BOOKMARK_BAR_YELLOW,
+       kColorTabGroupBookmarkBarYellow},
+      // Toolbar and associated colors.
       {TP::COLOR_TOOLBAR, kColorToolbar},
       {TP::COLOR_TOOLBAR_BUTTON_BACKGROUND, kColorToolbarButtonBackground},
       {TP::COLOR_TOOLBAR_BUTTON_BORDER, kColorToolbarButtonBorder},
diff --git a/chrome/browser/themes/theme_service_unittest.cc b/chrome/browser/themes/theme_service_unittest.cc
index 3620f44..48a32cd 100644
--- a/chrome/browser/themes/theme_service_unittest.cc
+++ b/chrome/browser/themes/theme_service_unittest.cc
@@ -809,7 +809,8 @@
 #endif
 TEST_P(ThemeProviderRedirectedEquivalenceTest, MAYBE_GetColor) {
   static constexpr const auto kTolerances = base::MakeFixedFlatMap<int, int>(
-      {{ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE, 1}});
+      {{ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE, 1},
+       {ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_ORANGE, 1}});
   auto get_tolerance = [](int id) {
     auto* it = kTolerances.find(id);
     if (it != kTolerances.end())
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 335fd766..28c8573b 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Jy bekyk tans 'n voorskou van hierdie bladsy</translation>
 <translation id="3690369331356918524">Waarsku jou as wagwoorde in 'n dataskending blootgestel is</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> aflaai het misluk omdat die bergingligging nie bereik kan word nie.</translation>
+<translation id="3699022356773522638">Laai lêer af?</translation>
 <translation id="371230970611282515">Voorspel en waarsku jou teen gevaarlike gevalle voordat hulle plaasvind.</translation>
 <translation id="3714981814255182093">Maak die Vindbalk oop</translation>
 <translation id="3716182511346448902">Hierdie bladsy gebruik te veel berging en daarom het Chrome dit laat wag.</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 4fc1e35..883a14d 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Bu səhifənin önizləməsinə baxırsınız</translation>
 <translation id="3690369331356918524">Data pozulması halında parolların ələ keçirilib-keçirilmədiyini Sizə bildirir</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> endirməsi alınmadı çünki yaddaş məkanı əlçatan deyil.</translation>
+<translation id="3699022356773522638">Fayl endirilsin?</translation>
 <translation id="371230970611282515">Təhlükəli hadisələr baş vermədən əvvəl onları proqnozlaşdırır və sizə xəbərdarlıq edir.</translation>
 <translation id="3714981814255182093">Tapma Barını açın</translation>
 <translation id="3716182511346448902">Bu səhifə həddindən çox yaddaş istifadə etdiyinə görə Chrome tərəfindən dayandırıldı.</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 91938d2..0e8fa30 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Prikazan vam je pregled ove stranice</translation>
 <translation id="3690369331356918524">Upozorava vas ako su lozinke izložene prilikom narušavanja podataka</translation>
 <translation id="3692944402865947621">Preuzimanje fajla <ph name="FILE_NAME" /> nije uspjelo jer je lokacija arhiviranja nedostupna.</translation>
+<translation id="3699022356773522638">Preuzeti fajl?</translation>
 <translation id="371230970611282515">Predviđa opasne događaje i upozorava vas na njih prije nego što nastupe.</translation>
 <translation id="3714981814255182093">Otvori u traci za traženje</translation>
 <translation id="3716182511346448902">Ova stranica koristi previše memorije tako da ju je Chrome pauzirao.</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 bfbf8590..64e39e1 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
@@ -462,7 +462,7 @@
 <translation id="3687645719033307815">Estás viendo una vista previa de esta página</translation>
 <translation id="3690369331356918524">Te avisa si tus contraseñas se ven expuestas en una quiebra de seguridad de datos</translation>
 <translation id="3692944402865947621">No se ha podido descargar <ph name="FILE_NAME" /> porque no se puede acceder a la ubicación del almacenamiento.</translation>
-<translation id="371230970611282515">Predice y te advierte sobre eventos peligrosos cuando ocurren.</translation>
+<translation id="371230970611282515">Predice y te advierte de eventos peligrosos antes de que se produzcan.</translation>
 <translation id="3714981814255182093">Abre la barra de búsqueda</translation>
 <translation id="3716182511346448902">Esta página utiliza demasiada memoria y Chrome la ha pausado.</translation>
 <translation id="3721119614952978349">Google y tú</translation>
@@ -531,7 +531,7 @@
 <translation id="4137746084635924146">Idioma actual del dispositivo</translation>
 <translation id="4141536112466364990">Información sobre Chrome</translation>
 <translation id="4162867837470729563">Lista de opciones para compartir abierta a altura completa.</translation>
-<translation id="4165986682804962316">Configuración de sitios</translation>
+<translation id="4165986682804962316">Configuración del sitio</translation>
 <translation id="4170011742729630528">El servicio no está disponible. Vuelve a intentarlo más tarde.</translation>
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
@@ -674,7 +674,7 @@
 <translation id="4950924971025849764">Cuando inicies sesión con la misma cuenta de Google, otros dispositivos podrán usar este teléfono como llave de seguridad.</translation>
 <translation id="4957722034734105353">Más información...</translation>
 <translation id="4961107849584082341">Traduce esta página a cualquier idioma</translation>
-<translation id="4971735654804503942">Protección más rápida y proactiva frente a descargas, extensiones y sitios web peligrosos. Te advierte sobre quiebras de seguridad de contraseñas. Necesita enviar datos de navegación a Google.</translation>
+<translation id="4971735654804503942">Protección más rápida y proactiva frente a descargas, extensiones y sitios web peligrosos. Te advierte sobre quiebras de seguridad de contraseñas. Requiere enviar datos de navegación a Google.</translation>
 <translation id="497421865427891073">Avanzar</translation>
 <translation id="4987271110129728827">No se puede encontrar la página. Comprueba que la hayas escrito bien o prueba a hacer una búsqueda web.</translation>
 <translation id="4988526792673242964">Páginas</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 0a2ff32..544e412 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">તમે આ પેજનો પ્રીવ્યૂ જોઈ રહ્યાં છો</translation>
 <translation id="3690369331356918524">જો ડેટા ઉલ્લંઘનમાં પાસવર્ડ જાહેર થાય તો તમને ચેતવણી આપવામાં આવે છે</translation>
 <translation id="3692944402865947621">સ્ટોરેજ સ્થાન સુધી પહોંચી ન શકવાને કારણે <ph name="FILE_NAME" />નું ડાઉનલોડ નિષ્ફળ થયું.</translation>
+<translation id="3699022356773522638">ફાઇલ ડાઉનલોડ કરીએ?</translation>
 <translation id="371230970611282515">જોખમકારક ઇવેન્ટ થાય તે પહેલાં તેનું અનુમાન લગાવીને તેના વિશે તમને ચેતવણી આપે છે.</translation>
 <translation id="3714981814255182093">શોધો બાર ખોલો</translation>
 <translation id="3716182511346448902">આ પેજ ઘણી વધુ મેમરીનો ઉપયોગ કરે છે, તેથી Chromeએ તેને થોભાવ્યું છે.</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 4ab8290..9c04ae7e 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">आप इस पेज की झलक देख रहे हैं</translation>
 <translation id="3690369331356918524">अगर डेटा का गलत इस्तेमाल होने पर आपके पासवर्ड बिना अनुमति के सार्वजनिक हो जाते हैं, तो आपको चेतावनी मिलती है</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> डाउनलोड नहीं हो सकी क्योंकि स्टोर करने की जगह नहीं मिली.</translation>
+<translation id="3699022356773522638">फ़ाइल डाउनलोड करें?</translation>
 <translation id="371230970611282515">नुकसान पहुंचाने वाली घटनाओं का पहले से अंदाज़ा लगाता है. साथ ही, उनके बारे में आपको चेतावनी देता है.</translation>
 <translation id="3714981814255182093">ढूंढें बार खोलें</translation>
 <translation id="3716182511346448902">यह पेज बहुत ज़्यादा स्टोरेज का इस्तेमाल करता है, इसलिए Chrome ने इसे रोक दिया है.</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 9c9f53e..b646a25 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Gledate pregled ove stranice</translation>
 <translation id="3690369331356918524">Upozorava ako su zaporke ugrožene zbog povrede podataka</translation>
 <translation id="3692944402865947621">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo jer lokacija pohrane nije dostupna.</translation>
+<translation id="3699022356773522638">Preuzeti datoteku?</translation>
 <translation id="371230970611282515">Predviđa opasne događaje i upozorava vas na njih prije nego što se dogode.</translation>
 <translation id="3714981814255182093">Otvaranje Trake za traženje</translation>
 <translation id="3716182511346448902">Ova stranica upotrebljava previše memorije, pa ju je Chrome pauzirao.</translation>
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 b471cc6..0bf7f6aa 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">È visualizzata un'anteprima di questa pagina</translation>
 <translation id="3690369331356918524">Ricevi un avviso se le password sono esposte a violazione dei dati</translation>
 <translation id="3692944402865947621">Download di <ph name="FILE_NAME" /> non riuscito perché non è possibile trovare il percorso di archiviazione.</translation>
+<translation id="3699022356773522638">Vuoi scaricare il file?</translation>
 <translation id="371230970611282515">Prevede e ti avvisa quando stanno per verificarsi eventi pericolosi.</translation>
 <translation id="3714981814255182093">Apri la barra Trova</translation>
 <translation id="3716182511346448902">Questa pagina è stata messa in pausa da Chromium perché utilizza troppa memoria.</translation>
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 69cb5df..8ae9c9d7 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">このページのプレビューを表示しています</translation>
 <translation id="3690369331356918524">データ侵害によりパスワードが漏洩した場合に警告します</translation>
 <translation id="3692944402865947621">保存場所にアクセスできないため、<ph name="FILE_NAME" /> をダウンロードできませんでした。</translation>
+<translation id="3699022356773522638">ファイルをダウンロードしますか?</translation>
 <translation id="371230970611282515">危険なイベントの発生を予測して警告します。</translation>
 <translation id="3714981814255182093">検索バーを開く</translation>
 <translation id="3716182511346448902">このページは大量のメモリを使用しているため、Chrome により一時停止されました。</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 a6dc8f04..c92fce2 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Беттің алдын ала көрінісі шығады.</translation>
 <translation id="3690369331356918524">Құпия сөздер қолды болған жағдайда, сізге бұл туралы хабарлайды.</translation>
 <translation id="3692944402865947621"><ph name="FILE_NAME" /> жүктеп алынбады, себебі оны сақтайтын орын жоқ.</translation>
+<translation id="3699022356773522638">Файлды жүктеп алу керек пе?</translation>
 <translation id="371230970611282515">Қауіпті іс-шараларды болжайды және хабарлайды.</translation>
 <translation id="3714981814255182093">Іздеу жолағын ашу</translation>
 <translation id="3716182511346448902">Бұл парақша тым көп жадты пайдаланатындықтан, Chromе оны тоқтатып қойды.</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 ddb9e59..48404ca 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">ಈ ಪುಟದ ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ನೀವು ನೋಡುತ್ತಿರುವಿರಿ</translation>
 <translation id="3690369331356918524">ಡೇಟಾ ಉಲ್ಲಂಘನೆಯ ಮೂಲಕ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಬಹಿರಂಗವಾದರೆ, ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ</translation>
 <translation id="3692944402865947621">ಸಂಗ್ರಹಣೆ ಸ್ಥಳವನ್ನು ತಲುಪಲು ಸಾಧ್ಯವಾಗದ ಕಾರಣ <ph name="FILE_NAME" /> ಅನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.</translation>
+<translation id="3699022356773522638">ಫೈಲ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕೆ?</translation>
 <translation id="371230970611282515">ಅಪಾಯಕಾರಿ ಘಟನೆಗಳು ಸಂಭವಿಸುವ ಮೊದಲೇ, ಅವುಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ ಮತ್ತು ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ.</translation>
 <translation id="3714981814255182093">ಹುಡುಕು ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="3716182511346448902">ಈ ಪುಟವು ಅತಿ ಹೆಚ್ಚು ಮೆಮೊರಿಯನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ, ಆದ್ದರಿಂದ Chrome ಇದನ್ನು ವಿರಾಮಗೊಳಿಸಿದೆ.</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 07ebf484..fbbdd09 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">ທ່ານກຳລັງເບິ່ງຕົວຢ່າງຂອງໜ້ານີ້</translation>
 <translation id="3690369331356918524">ເຕືອນບອກທ່ານຖ້າລະຫັດຜ່ານຮົ່ວໄຫຼໃນການລະເມີດຂໍ້ມູນ</translation>
 <translation id="3692944402865947621">ການດາວໂຫຼດ <ph name="FILE_NAME" /> ບໍ່ສຳເລັດ ເນື່ອງຈາກບໍ່ສາມາດຕິດຕໍ່ຫາບ່ອນຈັດເກັບຂໍ້ມູນໄດ້.</translation>
+<translation id="3699022356773522638">ດາວໂຫຼດໄຟລ໌ບໍ?</translation>
 <translation id="371230970611282515">ຄາດເດົາ ແລະ ເຕືອນທ່ານກ່ຽວກັບເຫດການອັນຕະລາຍກ່ອນທີ່ພວກມັນຈະເກີດຂຶ້ນ.</translation>
 <translation id="3714981814255182093">ເປີດແຖບຊອກຫາ</translation>
 <translation id="3716182511346448902">ໜ້ານີ້ໃຊ້ຄວາມຈຳຫຼາຍເກີນໄປ, ສະນັ້ນ Chrome ໄດ້ຢຸດມັນໄວ້ແລ້ວ.</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 43b77de..5f7d1f1 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">നിങ്ങൾ ഈ പേജിന്റെ പ്രിവ്യൂ ആണ് കാണുന്നത്</translation>
 <translation id="3690369331356918524">പാസ്‌വേഡുകൾ, ഡാറ്റാ ലംഘനത്തിന്റെ ഭാഗമായി വെളിപ്പെട്ടാൽ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകുന്നു</translation>
 <translation id="3692944402865947621">സ്റ്റോറേജ് ലൊക്കേഷൻ കണ്ടെത്താനാകാത്തതിനാൽ <ph name="FILE_NAME" /> ഡൗൺലോഡ് ചെയ്യുന്നത് പരാജയപ്പെട്ടു.</translation>
+<translation id="3699022356773522638">ഫയൽ ഡൗൺലോഡ് ചെയ്യണോ?</translation>
 <translation id="371230970611282515">അപകടകരമായ ഇവന്റുകൾ നടക്കുന്നതിന് മുമ്പ് അവ പ്രവചിക്കുകയും നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകുകയും ചെയ്യുന്നു.</translation>
 <translation id="3714981814255182093">കണ്ടെത്തൽ ബാർ തുറക്കുക</translation>
 <translation id="3716182511346448902">ഈ പേജ് ഒരുപാട് മെമ്മറി ഉപയോഗിക്കുന്നു, അതിനാൽ Chrome ഇത് താൽക്കാലികമായി അവസാനിപ്പിച്ചു.</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 85444ea..8b126e1 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
@@ -310,7 +310,7 @@
 <translation id="2818669890320396765">Хавчуургаа бүх төхөөрөмждөө авахын тулд нэвтрээд синкийг асаана уу</translation>
 <translation id="2827278682606527653">Feed card menu half height</translation>
 <translation id="2830783625999891985">Түр санх ойн контентуудыг нуусан</translation>
-<translation id="2838367486340230368">Нууцлалын хөтчийн тайлбарыг тал өндөртэйгээр нээсэн</translation>
+<translation id="2838367486340230368">Нууцлалын хөтчийн тайлбарыг тал хэмжээгээр нээсэн</translation>
 <translation id="2839327205551510876"><ph name="SITE_NAME" />-г дагахаа больсон</translation>
 <translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> нууцлалтай табыг хаана}other{<ph name="TAB_COUNT_MANY" /> нууцлалтай табыг хаана}}</translation>
 <translation id="2841216154655874070">{NUM_DAYS,plural, =1{1 хоногийн өмнө шалгасан}other{# хоногийн өмнө шалгасан}}</translation>
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Та энэ хуудасны урьдчилан үзэлтийг үзэж байна</translation>
 <translation id="3690369331356918524">Өгөгдлийн зөрчлийн улмаас нууц үгийг задруулсан бол танд анхааруулга өгдөг</translation>
 <translation id="3692944402865947621">Сангийн байршил олдоогүй тул <ph name="FILE_NAME" />-г татаж чадсангүй.</translation>
+<translation id="3699022356773522638">Файл татах уу?</translation>
 <translation id="371230970611282515">Аюултай үйл явдлын тухай урьдчилан таамаглаж, тохиолдохоос нь өмнө танд анхааруулга өгдөг.</translation>
 <translation id="3714981814255182093">Find Bar-г нээх</translation>
 <translation id="3716182511346448902">Энэ хуудас хэт их хэмжээний санах ой ашиглаж байгаа тул үүнийг Chrome түр зогсоосон болно.</translation>
@@ -1067,7 +1068,7 @@
 <translation id="7187993566681480880">Таныг нэвтэрсэн үед Chrome дээр таны аюулгүй байдлыг хангадаг бөгөөд Google-н бусад апп дахь таны аюулгүй байдлыг сайжруулахын тулд ашиглагдах боломжтой.</translation>
 <translation id="718926126787620637">Бүтэн хэмжээтэйгээр нээсэн хавчуурганы фолдерын жагсаалт</translation>
 <translation id="7191430249889272776">Арын дэвсгэр дээр нээсэн цонх.</translation>
-<translation id="7196215469483532480">Нууцлалын хөтчийн тайлбарыг бүтэн өндөртэйгээр нээсэн</translation>
+<translation id="7196215469483532480">Нууцлалын хөтчийн тайлбарыг бүтэн хэмжээгээр нээсэн</translation>
 <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 таталт хүлээгдэж байна}other{# таталт хүлээгдэж байна}}</translation>
 <translation id="7237045078887540010">Chrome-г ашигласнаар та <ph name="BEGIN_TOS_LINK" />Google-н үйлчилгээний нөхцөл<ph name="END_TOS_LINK" /> болон <ph name="BEGIN_ATOS_LINK" />Google Chrome, Chrome үйлдлийн системийн үйлчилгээний нэмэлт нөхцөлийг<ph name="END_ATOS_LINK" /> зөвшөөрч байна. <ph name="BEGIN_PRIVACY_LINK" />Нууцлалын бодлого<ph name="END_PRIVACY_LINK" /> мөн хэрэгжинэ.</translation>
 <translation id="7242755609445462077">Стильжүүлсэн тодруулга <ph name="CURRENT_DATE" /></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 90602cce..802aac5 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Je bekijkt een voorbeeld van deze pagina</translation>
 <translation id="3690369331356918524">Waarschuwt als je wachtwoorden zijn gelekt bij een gegevenslek</translation>
 <translation id="3692944402865947621">Downloaden van <ph name="FILE_NAME" /> mislukt omdat de opslaglocatie niet bereikbaar is.</translation>
+<translation id="3699022356773522638">Bestand downloaden?</translation>
 <translation id="371230970611282515">Voorspelt en waarschuwt je voor gevaarlijke gebeurtenissen voordat deze plaatsvinden.</translation>
 <translation id="3714981814255182093">De zoekbalk openen</translation>
 <translation id="3716182511346448902">Omdat deze pagina te veel geheugen gebruikt, heeft Chrome de pagina onderbroken.</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 2c6907d..2c9b49b7 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Widzisz podgląd strony</translation>
 <translation id="3690369331356918524">Ostrzega, jeśli wskutek naruszenia bezpieczeństwa danych doszło do ujawnienia haseł</translation>
 <translation id="3692944402865947621">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu niedostępności pamięci.</translation>
+<translation id="3699022356773522638">Pobrać plik?</translation>
 <translation id="371230970611282515">Przewiduje niebezpieczne zdarzenia i ostrzega Cię przed nimi, zanim nastąpią.</translation>
 <translation id="3714981814255182093">Otwórz pasek wyszukiwania</translation>
 <translation id="3716182511346448902">Ta strona używa zbyt dużo pamięci, dlatego została wstrzymana w Chrome.</translation>
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 a171bc8..0d11c730 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Esta é uma visualização dessa página</translation>
 <translation id="3690369331356918524">Avisa caso suas senhas sejam expostas em uma violação de dados</translation>
 <translation id="3692944402865947621">Falha no download do arquivo <ph name="FILE_NAME" /> porque não foi possível acessar o local do armazenamento.</translation>
+<translation id="3699022356773522638">Fazer o download do arquivo?</translation>
 <translation id="371230970611282515">Prevê e avisa sobre eventos perigosos antes que eles aconteçam.</translation>
 <translation id="3714981814255182093">Abrir a barra Localizar</translation>
 <translation id="3716182511346448902">Como esta página usa muita memória, o Chrome a pausou.</translation>
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 b972342c..8cf3957 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Está a ver uma pré-visualização desta página.</translation>
 <translation id="3690369331356918524">Envia-lhe um aviso se as palavras-passe forem expostas numa violação de dados.</translation>
 <translation id="3692944402865947621">A transferência de <ph name="FILE_NAME" /> falhou porque o local de armazenamento está fora do alcance.</translation>
+<translation id="3699022356773522638">Transferir ficheiro?</translation>
 <translation id="371230970611282515">Prevê e envia-lhe avisos sobre eventos perigosos antes da sua ocorrência.</translation>
 <translation id="3714981814255182093">Abrir a barra Localizar</translation>
 <translation id="3716182511346448902">Esta página utiliza demasiada memória, pelo que o Chrome a colocou em pausa.</translation>
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 a3b9343..d5177bf 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Эта страница показывается в режиме предварительного просмотра.</translation>
 <translation id="3690369331356918524">Сообщает, если пароли были раскрыты в результате утечки данных.</translation>
 <translation id="3692944402865947621">Не удалось скачать файл <ph name="FILE_NAME" />, так как хранилище недоступно.</translation>
+<translation id="3699022356773522638">Скачать файл?</translation>
 <translation id="371230970611282515">Предсказывает опасные события и предупреждает вас до того, как они происходят.</translation>
 <translation id="3714981814255182093">Открыть панель поиска</translation>
 <translation id="3716182511346448902">Эта страница расходовала слишком много памяти, поэтому работа ее скриптов была приостановлена.</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 0b616fe..28bf6f82 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Pregledate ovu stranicu</translation>
 <translation id="3690369331356918524">Upozorava vas ako su lozinke otkrivene pri upadu u podatke</translation>
 <translation id="3692944402865947621">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspelo zato što lokacija memorijskog prostora nije dostupna.</translation>
+<translation id="3699022356773522638">Želite da preuzmete fajl?</translation>
 <translation id="371230970611282515">Otkriva opasne događaje pre nego što se dogode i upozorava vas na njih.</translation>
 <translation id="3714981814255182093">Otvaranje trake za traženje</translation>
 <translation id="3716182511346448902">Ova stranica koristi previše memorije, pa ju je Chrome pauzirao.</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 a26ea3e5..867bbbf7 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">Прегледате ову страницу</translation>
 <translation id="3690369331356918524">Упозорава вас ако су лозинке откривене при упаду у податке</translation>
 <translation id="3692944402865947621">Преузимање датотеке <ph name="FILE_NAME" /> није успело зато што локација меморијског простора није доступна.</translation>
+<translation id="3699022356773522638">Желите да преузмете фајл?</translation>
 <translation id="371230970611282515">Открива опасне догађаје пре него што се догоде и упозорава вас на њих.</translation>
 <translation id="3714981814255182093">Отварање траке за тражење</translation>
 <translation id="3716182511346448902">Ова страница користи превише меморије, па ју је Chrome паузирао.</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 eb88988..33ccfd5 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
@@ -462,6 +462,7 @@
 <translation id="3687645719033307815">آپ اس صفحہ کا پیش منظر دیکھ رہے ہیں</translation>
 <translation id="3690369331356918524">اگر پاس ورڈز ڈیٹا کی خلاف ورزی میں افشاء ہوتے ہیں تو آپ کو متنبہ کرتی ہے</translation>
 <translation id="3692944402865947621">اسٹوریج کا مقام ناقابل رسائی ہونے کے سبب <ph name="FILE_NAME" /> ڈاؤن لوڈ کرنا ناکام ہو گیا۔</translation>
+<translation id="3699022356773522638">فائل ڈاؤن لوڈ کریں؟</translation>
 <translation id="371230970611282515">خطرناک ایونٹس ہونے سے پہلے ان کی پیشین گوئی کرتا ہے اور آپ کو ان کے بارے میں متنبہ کرتا ہے۔</translation>
 <translation id="3714981814255182093">تلاش کریں بار کھولیں</translation>
 <translation id="3716182511346448902">‏یہ صفحہ بہت زیادہ میموری استعمال کرتا ہے، لہذا Chrome نے اسے موقوف کر دیا۔</translation>
diff --git a/chrome/browser/ui/cocoa/color_panel_cocoa_unittest.mm b/chrome/browser/ui/cocoa/color_panel_cocoa_unittest.mm
index b0fbb41a..7dcc615a 100644
--- a/chrome/browser/ui/cocoa/color_panel_cocoa_unittest.mm
+++ b/chrome/browser/ui/cocoa/color_panel_cocoa_unittest.mm
@@ -33,8 +33,7 @@
   base::test::TaskEnvironment task_environment_;
 };
 
-// TODO(https://crbug.com/1296023): Re-enable once flakes are fixed.
-TEST_F(ColorPanelCocoaTest, DISABLED_ClearTargetOnEnd) {
+TEST_F(ColorPanelCocoaTest, ClearTargetOnEnd) {
   NSColorPanel* nscolor_panel = [NSColorPanel sharedColorPanel];
   @autoreleasepool {
     ASSERT_TRUE([nscolor_panel respondsToSelector:@selector(__target)]);
@@ -55,8 +54,7 @@
   }
 }
 
-// TODO(https://crbug.com/1296023): Re-enable once flakes are fixed.
-TEST_F(ColorPanelCocoaTest, DISABLED_SetColor) {
+TEST_F(ColorPanelCocoaTest, SetColor) {
   // Set the NSColor panel up with an initial color.
   NSColor* blue_color = [NSColor blueColor];
   NSColorPanel* nscolor_panel = [NSColorPanel sharedColorPanel];
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h
index 7b52b97..8167192 100644
--- a/chrome/browser/ui/color/chrome_color_id.h
+++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -106,6 +106,57 @@
   E_CPONLY(kColorTabForegroundActiveFrameInactive) \
   E_CPONLY(kColorTabForegroundInactiveFrameActive) \
   E_CPONLY(kColorTabForegroundInactiveFrameInactive) \
+  /* The colors used for tab groups in the tabstrip. */ \
+  E(kColorTabGroupTabStripFrameActiveGrey, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_GREY) \
+  E(kColorTabGroupTabStripFrameActiveBlue, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_BLUE) \
+  E(kColorTabGroupTabStripFrameActiveRed, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_RED) \
+  E(kColorTabGroupTabStripFrameActiveYellow, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_YELLOW) \
+  E(kColorTabGroupTabStripFrameActiveGreen, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_GREEN) \
+  E(kColorTabGroupTabStripFrameActivePink, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_PINK) \
+  E(kColorTabGroupTabStripFrameActivePurple, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_PURPLE) \
+  E(kColorTabGroupTabStripFrameActiveCyan, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_CYAN) \
+  E(kColorTabGroupTabStripFrameActiveOrange, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_ORANGE) \
+  E(kColorTabGroupTabStripFrameInactiveGrey, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_GREY) \
+  E(kColorTabGroupTabStripFrameInactiveBlue, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_BLUE) \
+  E(kColorTabGroupTabStripFrameInactiveRed, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_RED) \
+  E(kColorTabGroupTabStripFrameInactiveYellow, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_YELLOW) \
+  E(kColorTabGroupTabStripFrameInactiveGreen, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_GREEN) \
+  E(kColorTabGroupTabStripFrameInactivePink, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_PINK) \
+  E(kColorTabGroupTabStripFrameInactivePurple, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_PURPLE) \
+  E(kColorTabGroupTabStripFrameInactiveCyan, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_CYAN) \
+  E(kColorTabGroupTabStripFrameInactiveOrange, \
+    ThemeProperties::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_ORANGE) \
+  /* The colors used for tab groups in the bubble dialog view. */ \
+  E(kColorTabGroupDialogGrey, ThemeProperties::COLOR_TAB_GROUP_DIALOG_GREY) \
+  E(kColorTabGroupDialogBlue, ThemeProperties::COLOR_TAB_GROUP_DIALOG_BLUE) \
+  E(kColorTabGroupDialogRed, ThemeProperties::COLOR_TAB_GROUP_DIALOG_RED) \
+  E(kColorTabGroupDialogYellow, \
+    ThemeProperties::COLOR_TAB_GROUP_DIALOG_YELLOW) \
+  E(kColorTabGroupDialogGreen, ThemeProperties::COLOR_TAB_GROUP_DIALOG_GREEN) \
+  E(kColorTabGroupDialogPink, ThemeProperties::COLOR_TAB_GROUP_DIALOG_PINK) \
+  E(kColorTabGroupDialogPurple, \
+    ThemeProperties::COLOR_TAB_GROUP_DIALOG_PURPLE) \
+  E(kColorTabGroupDialogCyan, ThemeProperties::COLOR_TAB_GROUP_DIALOG_CYAN) \
+  E(kColorTabGroupDialogOrange, \
+    ThemeProperties::COLOR_TAB_GROUP_DIALOG_ORANGE) \
+  /* The colors used for tab groups in the context submenu. */ \
   E(kColorTabGroupContextMenuBlue, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_BLUE) \
   E(kColorTabGroupContextMenuCyan, \
@@ -114,16 +165,35 @@
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_GREEN) \
   E(kColorTabGroupContextMenuGrey, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_GREY) \
+  E(kColorTabGroupContextMenuOrange, \
+    ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_ORANGE) \
   E(kColorTabGroupContextMenuPink, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_PINK) \
   E(kColorTabGroupContextMenuPurple, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_PURPLE) \
-  E(kColorTabGroupContextMenuOrange, \
-    ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_ORANGE) \
   E(kColorTabGroupContextMenuRed, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_RED) \
   E(kColorTabGroupContextMenuYellow, \
     ThemeProperties::COLOR_TAB_GROUP_CONTEXT_MENU_YELLOW) \
+  /* The colors used for saved tab group chips on the bookmark bar. */ \
+  E(kColorTabGroupBookmarkBarGrey, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_GREY) \
+  E(kColorTabGroupBookmarkBarBlue, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_BLUE) \
+  E(kColorTabGroupBookmarkBarRed, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_RED) \
+  E(kColorTabGroupBookmarkBarYellow, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_YELLOW) \
+  E(kColorTabGroupBookmarkBarGreen, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_GREEN) \
+  E(kColorTabGroupBookmarkBarPink, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_PINK) \
+  E(kColorTabGroupBookmarkBarPurple, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_PURPLE) \
+  E(kColorTabGroupBookmarkBarCyan, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_CYAN) \
+  E(kColorTabGroupBookmarkBarOrange, \
+    ThemeProperties::COLOR_TAB_GROUP_BOOKMARK_BAR_ORANGE) \
   /* Toolbar colors. */ \
   E(kColorToolbar, ThemeProperties::COLOR_TOOLBAR) \
   E(kColorToolbarButtonBackground, \
diff --git a/chrome/browser/ui/color/chrome_color_mixer.cc b/chrome/browser/ui/color/chrome_color_mixer.cc
index 7060c21..9d98e3a 100644
--- a/chrome/browser/ui/color/chrome_color_mixer.cc
+++ b/chrome/browser/ui/color/chrome_color_mixer.cc
@@ -73,6 +73,58 @@
                              std::move(dark_extreme), std::move(light_extreme));
 }
 
+// This differs from ui::SelectColorBasedOnInput in that we're checking if the
+// input transform is *not* dark under the assumption that the background color
+// *is* dark from a potential custom theme. Additionally, if the mode is
+// explicitly dark just select the correct color for that mode.
+ui::ColorTransform SelectColorBasedOnDarkInputOrMode(
+    bool dark_mode,
+    ui::ColorTransform input_transform,
+    ui::ColorTransform dark_mode_color_transform,
+    ui::ColorTransform light_mode_color_transform) {
+  const auto generator = [](bool dark_mode, ui::ColorTransform input_transform,
+                            ui::ColorTransform dark_mode_color_transform,
+                            ui::ColorTransform light_mode_color_transform,
+                            SkColor input_color, const ui::ColorMixer& mixer) {
+    const SkColor transform_color = input_transform.Run(input_color, mixer);
+    const SkColor dark_mode_color =
+        dark_mode_color_transform.Run(input_color, mixer);
+    const SkColor light_mode_color =
+        light_mode_color_transform.Run(input_color, mixer);
+    const SkColor result_color =
+        dark_mode || !color_utils::IsDark(transform_color) ? dark_mode_color
+                                                           : light_mode_color;
+    DVLOG(2) << "ColorTransform SelectColorBasedOnDarkColorOrMode:"
+             << " Dark Mode: " << dark_mode
+             << " Transform Color: " << ui::SkColorName(transform_color)
+             << " Dark Mode Color: " << ui::SkColorName(dark_mode_color)
+             << " Light Mode Color: " << ui::SkColorName(light_mode_color)
+             << " Result Color: " << ui::SkColorName(result_color);
+    return result_color;
+  };
+  return base::BindRepeating(generator, dark_mode, std::move(input_transform),
+                             std::move(dark_mode_color_transform),
+                             std::move(light_mode_color_transform));
+}
+
+// Flat version of dark mode colors used in bookmarks bar to fill
+// the buttons.
+constexpr SkColor kFlatGrey = SkColorSetRGB(0x5D, 0x5E, 0x62);
+constexpr SkColor kFlatBlue = SkColorSetRGB(0x49, 0x54, 0x68);
+constexpr SkColor kFlatRed = SkColorSetRGB(0x62, 0x4A, 0x4B);
+constexpr SkColor kFlatGreen = SkColorSetRGB(0x47, 0x59, 0x50);
+constexpr SkColor kFlatYellow = SkColorSetRGB(0x65, 0x5C, 0x44);
+constexpr SkColor kFlatCyan = SkColorSetRGB(0x45, 0x5D, 0x65);
+constexpr SkColor kFlatPurple = SkColorSetRGB(0x58, 0x4A, 0x68);
+constexpr SkColor kFlatPink = SkColorSetRGB(0x65, 0x4A, 0x5D);
+
+// Default toolbar colors.
+constexpr SkColor kDarkToolbarColor = SkColorSetRGB(0x35, 0x36, 0x3A);
+constexpr SkColor kLightToolbarColor = SK_ColorWHITE;
+
+// Alpha of 61 = 24%. From GetTabGroupColors() in theme_helper.cc.
+constexpr SkAlpha tab_group_chip_alpha = 61;
+
 }  // namespace
 
 void AddChromeColorMixer(ui::ColorProvider* provider,
@@ -147,26 +199,103 @@
   mixer[kColorOmniboxText] =
       ui::GetColorWithMaxContrast(kColorOmniboxBackground);
   mixer[kColorReadLaterButtonHighlight] = {kColorAvatarButtonHighlightNormal};
-  mixer[kColorTabGroupContextMenuBlue] = {dark_mode ? gfx::kGoogleBlue300
-                                                    : gfx::kGoogleBlue600};
-  mixer[kColorTabGroupContextMenuCyan] = {dark_mode ? gfx::kGoogleCyan300
-                                                    : gfx::kGoogleCyan900};
-  mixer[kColorTabGroupContextMenuGreen] = {dark_mode ? gfx::kGoogleGreen300
-                                                     : gfx::kGoogleGreen700};
-  mixer[kColorTabGroupContextMenuGrey] = {dark_mode ? gfx::kGoogleGrey300
-                                                    : gfx::kGoogleGrey700};
-  mixer[kColorTabGroupContextMenuOrange] = {dark_mode ? gfx::kGoogleOrange300
-                                                      : gfx::kGoogleOrange400};
-  mixer[kColorTabGroupContextMenuPink] = {dark_mode ? gfx::kGooglePink300
-                                                    : gfx::kGooglePink700};
-  mixer[kColorTabGroupContextMenuPurple] = {dark_mode ? gfx::kGooglePurple300
-                                                      : gfx::kGooglePurple500};
-  mixer[kColorTabGroupContextMenuRed] = {dark_mode ? gfx::kGoogleRed300
-                                                   : gfx::kGoogleRed600};
-  mixer[kColorTabGroupContextMenuYellow] = {dark_mode ? gfx::kGoogleYellow300
-                                                      : gfx::kGoogleYellow600};
-  mixer[kColorToolbar] = {dark_mode ? SkColorSetRGB(0x35, 0x36, 0x3A)
-                                    : SK_ColorWHITE};
+
+  ui::ColorTransform input_transform = {kColorTabBackgroundInactiveFrameActive};
+  mixer[kColorTabGroupTabStripFrameActiveBlue] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleBlue300}, {gfx::kGoogleBlue600});
+  mixer[kColorTabGroupTabStripFrameActiveCyan] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleCyan300}, {gfx::kGoogleCyan900});
+  mixer[kColorTabGroupTabStripFrameActiveGreen] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleGreen300}, {gfx::kGoogleGreen700});
+  mixer[kColorTabGroupTabStripFrameActiveGrey] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleGrey300}, {gfx::kGoogleGrey700});
+  mixer[kColorTabGroupTabStripFrameActiveOrange] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleOrange300}, {gfx::kGoogleOrange400});
+  mixer[kColorTabGroupTabStripFrameActivePink] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGooglePink300}, {gfx::kGooglePink700});
+  mixer[kColorTabGroupTabStripFrameActivePurple] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGooglePurple300}, {gfx::kGooglePurple500});
+  mixer[kColorTabGroupTabStripFrameActiveRed] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleRed300}, {gfx::kGoogleRed600});
+  mixer[kColorTabGroupTabStripFrameActiveYellow] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleYellow300}, {gfx::kGoogleYellow600});
+
+  input_transform = {kColorTabBackgroundInactiveFrameInactive};
+  mixer[kColorTabGroupTabStripFrameInactiveBlue] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleBlue300}, {gfx::kGoogleBlue600});
+  mixer[kColorTabGroupTabStripFrameInactiveCyan] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleCyan300}, {gfx::kGoogleCyan900});
+  mixer[kColorTabGroupTabStripFrameInactiveGreen] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleGreen300}, {gfx::kGoogleGreen700});
+  mixer[kColorTabGroupTabStripFrameInactiveGrey] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleGrey300}, {gfx::kGoogleGrey700});
+  mixer[kColorTabGroupTabStripFrameInactiveOrange] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleOrange300}, {gfx::kGoogleOrange400});
+  mixer[kColorTabGroupTabStripFrameInactivePink] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGooglePink300}, {gfx::kGooglePink700});
+  mixer[kColorTabGroupTabStripFrameInactivePurple] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGooglePurple300}, {gfx::kGooglePurple500});
+  mixer[kColorTabGroupTabStripFrameInactiveRed] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleRed300}, {gfx::kGoogleRed600});
+  mixer[kColorTabGroupTabStripFrameInactiveYellow] = ui::SelectBasedOnDarkInput(
+      input_transform, {gfx::kGoogleYellow300}, {gfx::kGoogleYellow600});
+
+  mixer[kColorTabGroupDialogBlue] = {kColorTabGroupContextMenuBlue};
+  mixer[kColorTabGroupDialogCyan] = {kColorTabGroupContextMenuCyan};
+  mixer[kColorTabGroupDialogGreen] = {kColorTabGroupContextMenuGreen};
+  mixer[kColorTabGroupDialogGrey] = {kColorTabGroupContextMenuGrey};
+  mixer[kColorTabGroupDialogOrange] = {kColorTabGroupContextMenuOrange};
+  mixer[kColorTabGroupDialogPink] = {kColorTabGroupContextMenuPink};
+  mixer[kColorTabGroupDialogPurple] = {kColorTabGroupContextMenuPurple};
+  mixer[kColorTabGroupDialogRed] = {kColorTabGroupContextMenuRed};
+  mixer[kColorTabGroupDialogYellow] = {kColorTabGroupContextMenuYellow};
+
+  input_transform = {kColorBookmarkBarForeground};
+  mixer[kColorTabGroupContextMenuBlue] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleBlue300}, {gfx::kGoogleBlue600});
+  mixer[kColorTabGroupContextMenuCyan] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleCyan300}, {gfx::kGoogleCyan900});
+  mixer[kColorTabGroupContextMenuGreen] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleGreen300},
+      {gfx::kGoogleGreen700});
+  mixer[kColorTabGroupContextMenuGrey] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleGrey300}, {gfx::kGoogleGrey700});
+  mixer[kColorTabGroupContextMenuOrange] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleOrange300},
+      {gfx::kGoogleOrange400});
+  mixer[kColorTabGroupContextMenuPink] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGooglePink300}, {gfx::kGooglePink700});
+  mixer[kColorTabGroupContextMenuPurple] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGooglePurple300},
+      {gfx::kGooglePurple500});
+  mixer[kColorTabGroupContextMenuRed] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleRed300}, {gfx::kGoogleRed600});
+  mixer[kColorTabGroupContextMenuYellow] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {gfx::kGoogleYellow300},
+      {gfx::kGoogleYellow600});
+
+  mixer[kColorTabGroupBookmarkBarBlue] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatBlue}, {gfx::kGoogleBlue050});
+  mixer[kColorTabGroupBookmarkBarCyan] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatCyan}, {gfx::kGoogleCyan050});
+  mixer[kColorTabGroupBookmarkBarGreen] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatGreen}, {gfx::kGoogleGreen050});
+  mixer[kColorTabGroupBookmarkBarGrey] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatGrey}, {gfx::kGoogleGrey100});
+  mixer[kColorTabGroupBookmarkBarPink] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatPink}, {gfx::kGooglePink050});
+  mixer[kColorTabGroupBookmarkBarPurple] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatPurple}, {gfx::kGooglePurple050});
+  mixer[kColorTabGroupBookmarkBarRed] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatRed}, {gfx::kGoogleRed050});
+  mixer[kColorTabGroupBookmarkBarYellow] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, {kFlatYellow}, {gfx::kGoogleYellow050});
+  auto flat_orange = ui::AlphaBlend({gfx::kGoogleOrange300},
+                                    {kDarkToolbarColor}, tab_group_chip_alpha);
+  mixer[kColorTabGroupBookmarkBarOrange] = SelectColorBasedOnDarkInputOrMode(
+      dark_mode, input_transform, flat_orange, {gfx::kGoogleOrange050});
+
+  mixer[kColorToolbar] = {dark_mode ? kDarkToolbarColor : kLightToolbarColor};
   mixer[kColorToolbarButtonBackground] =
       ui::GetColorWithMaxContrast(kColorToolbarButtonText);
   mixer[kColorToolbarButtonBorder] = ui::SetAlpha(kColorToolbarInkDrop, 0x20);
diff --git a/chrome/browser/ui/views/user_education/help_bubble_view.cc b/chrome/browser/ui/views/user_education/help_bubble_view.cc
index 9cc1db8..455ee48c 100644
--- a/chrome/browser/ui/views/user_education/help_bubble_view.cc
+++ b/chrome/browser/ui/views/user_education/help_bubble_view.cc
@@ -553,6 +553,9 @@
 
   views::Widget* widget = views::BubbleDialogDelegateView::CreateBubble(this);
 
+  // This gets reset to the platform default when we call CreateBubble(), so we
+  // have to change it afterwards:
+  set_adjust_if_offscreen(true);
   auto* const frame_view = GetBubbleFrameView();
   frame_view->SetCornerRadius(
       ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
diff --git a/chrome/browser/ui/webui/app_management/app_management_page_handler.cc b/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
index 7950e72..cd87ad1 100644
--- a/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
+++ b/chrome/browser/ui/webui/app_management/app_management_page_handler.cc
@@ -17,6 +17,9 @@
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_provider.h"
+#include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/app_constants/constants.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
 #include "components/services/app_service/public/cpp/app_types.h"
@@ -144,6 +147,14 @@
       &apps::AppServiceProxyFactory::GetForProfile(profile_)
            ->AppRegistryCache());
   preferred_apps_list_handle_observer_.Observe(&preferred_apps_list_handle_);
+
+  // On Chrome OS, file handler updates are already plumbed through
+  // `OnAppUpdate()` since the change will also affect the intent filters.
+  // There's no need to update twice.
+#if !BUILDFLAG(IS_CHROMEOS)
+  auto* provider = web_app::WebAppProvider::GetForWebApps(profile_);
+  registrar_observation_.Observe(&provider->registrar());
+#endif
 }
 
 AppManagementPageHandler::~AppManagementPageHandler() {}
@@ -303,6 +314,32 @@
 #endif
 }
 
+void AppManagementPageHandler::SetFileHandlingEnabled(const std::string& app_id,
+                                                      bool enabled) {
+  web_app::PersistFileHandlersUserChoice(profile_, app_id, enabled,
+                                         base::DoNothing());
+}
+
+void AppManagementPageHandler::OnWebAppFileHandlerApprovalStateChanged(
+    const web_app::AppId& app_id) {
+#if BUILDFLAG(IS_CHROMEOS)
+  NOTREACHED();
+#endif
+  app_management::mojom::AppPtr app;
+
+  apps::AppServiceProxyFactory::GetForProfile(profile_)
+      ->AppRegistryCache()
+      .ForOneApp(app_id, [this, &app](const apps::AppUpdate& update) {
+        if (update.Readiness() == apps::Readiness::kReady)
+          app = CreateUIAppPtr(update);
+      });
+
+  if (!app)
+    return;
+
+  page_->OnAppChanged(std::move(app));
+}
+
 app_management::mojom::AppPtr AppManagementPageHandler::CreateUIAppPtr(
     const apps::AppUpdate& update) {
   base::flat_map<apps::mojom::PermissionType, apps::mojom::PermissionPtr>
@@ -348,6 +385,27 @@
   app->supported_links = GetSupportedLinks(profile_, app->id);
   app->run_on_os_login = update.RunOnOsLogin();
 
+// TODO(crbug/1245293): implement on Chrome OS.
+#if !BUILDFLAG(IS_CHROMEOS)
+  if (update.AppType() == apps::mojom::AppType::kWeb) {
+    auto* provider = web_app::WebAppProvider::GetForWebApps(profile_);
+    const bool fh_enabled =
+        !provider->registrar().IsAppFileHandlerPermissionBlocked(app->id);
+    std::string file_handling_types;
+    if (provider->os_integration_manager().IsFileHandlingAPIAvailable(
+            app->id) &&
+        !provider->registrar().GetAppFileHandlers(app->id)->empty()) {
+      // TODO(crbug/1245293): elide types and add clickable link.
+      file_handling_types = base::UTF16ToUTF8(
+          web_app::GetFileTypeAssociationsHandledByWebAppForDisplay(profile_,
+                                                                    app->id));
+    }
+    // TODO(crbug/1252505): add file handling policy support.
+    app->file_handling_state = app_management::mojom::FileHandlingState::New(
+        fh_enabled, /*is_managed=*/false, file_handling_types);
+  }
+#endif
+
   return app;
 }
 
diff --git a/chrome/browser/ui/webui/app_management/app_management_page_handler.h b/chrome/browser/ui/webui/app_management/app_management_page_handler.h
index d4258d08..358ff20f 100644
--- a/chrome/browser/ui/webui/app_management/app_management_page_handler.h
+++ b/chrome/browser/ui/webui/app_management/app_management_page_handler.h
@@ -9,6 +9,8 @@
 #include "base/scoped_observation.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.h"
+#include "chrome/browser/web_applications/app_registrar_observer.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
 #include "components/services/app_service/public/cpp/preferred_apps_list_handle.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -20,10 +22,10 @@
 
 class Profile;
 
-class AppManagementPageHandler
-    : public app_management::mojom::PageHandler,
-      public apps::AppRegistryCache::Observer,
-      public apps::PreferredAppsListHandle::Observer {
+class AppManagementPageHandler : public app_management::mojom::PageHandler,
+                                 public apps::AppRegistryCache::Observer,
+                                 public apps::PreferredAppsListHandle::Observer,
+                                 public web_app::AppRegistrarObserver {
  public:
   //  Handles platform specific tasks.
   class Delegate {
@@ -73,6 +75,11 @@
   void SetRunOnOsLoginMode(
       const std::string& app_id,
       apps::mojom::RunOnOsLoginMode run_on_os_login_mode) override;
+  void SetFileHandlingEnabled(const std::string& app_id, bool enabled) override;
+
+  // web_app::AppRegistrarObserver:
+  void OnWebAppFileHandlerApprovalStateChanged(
+      const web_app::AppId& app_id) override;
 
  private:
   app_management::mojom::AppPtr CreateUIAppPtr(const apps::AppUpdate& update);
@@ -109,6 +116,10 @@
   base::ScopedObservation<apps::PreferredAppsListHandle,
                           apps::PreferredAppsListHandle::Observer>
       preferred_apps_list_handle_observer_{this};
+
+  base::ScopedObservation<web_app::WebAppRegistrar,
+                          web_app::AppRegistrarObserver>
+      registrar_observation_{this};
 };
 
 #endif  // CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_PAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/app_settings/web_app_settings_ui.cc b/chrome/browser/ui/webui/app_settings/web_app_settings_ui.cc
index f754170..7109ea9c 100644
--- a/chrome/browser/ui/webui/app_settings/web_app_settings_ui.cc
+++ b/chrome/browser/ui/webui/app_settings/web_app_settings_ui.cc
@@ -29,6 +29,8 @@
       {"title", IDS_WEB_APP_SETTINGS_TITLE},
       {"appManagementAppInstalledByPolicyLabel",
        IDS_APP_MANAGEMENT_POLICY_APP_POLICY_STRING},
+      {"appManagementFileHandlingHeader",
+       IDS_APP_MANAGEMENT_FILE_HANDLING_HEADER},
       {"appManagementNotificationsLabel", IDS_APP_MANAGEMENT_NOTIFICATIONS},
       {"appManagementPermissionsLabel", IDS_APP_MANAGEMENT_PERMISSIONS},
       {"appManagementLocationPermissionLabel", IDS_APP_MANAGEMENT_LOCATION},
diff --git a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
index e3c0a319..b83a8ba 100644
--- a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
+++ b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
@@ -330,7 +330,7 @@
     controller().SetUp(profile());
 
     externally_managed_app_manager().SetSubsystems(&app_registrar(), nullptr,
-                                                   nullptr, nullptr);
+                                                   nullptr, nullptr, nullptr);
     externally_managed_app_manager().SetHandleInstallRequestCallback(
         base::BindLambdaForTesting(
             [this](const ExternalInstallOptions& install_options) {
diff --git a/chrome/browser/web_applications/externally_managed_app_manager.cc b/chrome/browser/web_applications/externally_managed_app_manager.cc
index 246a4d1..229716f 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager.cc
@@ -68,11 +68,13 @@
     WebAppRegistrar* registrar,
     WebAppUiManager* ui_manager,
     WebAppInstallFinalizer* finalizer,
-    WebAppInstallManager* install_manager) {
+    WebAppInstallManager* install_manager,
+    WebAppSyncBridge* sync_bridge) {
   registrar_ = registrar;
   ui_manager_ = ui_manager;
   finalizer_ = finalizer;
   install_manager_ = install_manager;
+  sync_bridge_ = sync_bridge;
 }
 
 void ExternallyManagedAppManager::SynchronizeInstalledApps(
@@ -90,8 +92,18 @@
   DCHECK(!base::Contains(synchronize_requests_, install_source));
 
   std::vector<GURL> installed_urls;
-  for (auto apps_it : registrar_->GetExternallyInstalledApps(install_source))
-    installed_urls.push_back(apps_it.second);
+  for (auto apps_it : registrar_->GetExternallyInstalledApps(install_source)) {
+    // TODO: Remove this check once we cleanup ExternallyInstalledWebAppPrefs on
+    // external app uninstall.
+    // https://crbug.com/1300382
+    bool has_same_external_source =
+        registrar_->GetAppById(apps_it.first)
+            ->GetSources()
+            .test(InferSourceFromMetricsInstallSource(
+                ConvertExternalInstallSourceToInstallSource(install_source)));
+    if (has_same_external_source)
+      installed_urls.push_back(apps_it.second);
+  }
 
   std::sort(installed_urls.begin(), installed_urls.end());
 
diff --git a/chrome/browser/web_applications/externally_managed_app_manager.h b/chrome/browser/web_applications/externally_managed_app_manager.h
index 422038b..7cfe87f 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager.h
+++ b/chrome/browser/web_applications/externally_managed_app_manager.h
@@ -28,6 +28,7 @@
 class WebAppInstallFinalizer;
 class WebAppInstallManager;
 class WebAppUiManager;
+class WebAppSyncBridge;
 
 enum class RegistrationResultCode { kSuccess, kAlreadyRegistered, kTimeout };
 
@@ -90,7 +91,8 @@
   void SetSubsystems(WebAppRegistrar* registrar,
                      WebAppUiManager* ui_manager,
                      WebAppInstallFinalizer* finalizer,
-                     WebAppInstallManager* install_manager);
+                     WebAppInstallManager* install_manager,
+                     WebAppSyncBridge* sync_bridge);
 
   // Queues an installation operation with the highest priority. Essentially
   // installing the app immediately if there are no ongoing operations or
@@ -160,6 +162,7 @@
   WebAppUiManager* ui_manager() { return ui_manager_; }
   WebAppInstallFinalizer* finalizer() { return finalizer_; }
   WebAppInstallManager* install_manager() { return install_manager_; }
+  WebAppSyncBridge* sync_bridge() { return sync_bridge_; }
 
   virtual void OnRegistrationFinished(const GURL& launch_url,
                                       RegistrationResultCode result);
@@ -199,6 +202,7 @@
   raw_ptr<WebAppUiManager> ui_manager_ = nullptr;
   raw_ptr<WebAppInstallFinalizer> finalizer_ = nullptr;
   raw_ptr<WebAppInstallManager> install_manager_ = nullptr;
+  raw_ptr<WebAppSyncBridge> sync_bridge_ = nullptr;
 
   base::flat_map<ExternalInstallSource, SynchronizeRequest>
       synchronize_requests_;
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
index 4b772f9b..71d662ba 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl.cc
@@ -15,10 +15,13 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/externally_managed_app_registration_task.h"
+#include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
+#include "chrome/browser/web_applications/web_app_registry_update.h"
+#include "chrome/browser/web_applications/web_app_sync_bridge.h"
 #include "chrome/browser/web_applications/web_app_ui_manager.h"
 #include "chrome/common/chrome_features.h"
 #include "components/webapps/browser/install_result_code.h"
@@ -193,7 +196,16 @@
         return;
       }
 
-      // Otherwise no need to do anything.
+      // Otherwise add install source before returning the result.
+      // TODO: Investigate re-install of the app instead at all times.
+      // https://crbug.com/1300321
+      {
+        ScopedRegistryUpdate update(sync_bridge());
+        WebApp* app_to_update = update->UpdateApp(app_id.value());
+        app_to_update->AddSource(InferSourceFromMetricsInstallSource(
+            ConvertExternalInstallSourceToInstallSource(
+                install_options.install_source)));
+      }
       std::move(front->callback)
           .Run(install_options.install_url,
                ExternallyManagedAppManager::InstallResult(
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
index e6f49b99..f6625e64 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_browsertest.cc
@@ -533,4 +533,56 @@
       .AwaitNextRegistration(url, RegistrationResultCode::kTimeout);
 }
 
+IN_PROC_BROWSER_TEST_F(ExternallyManagedAppManagerImplBrowserTest,
+                       ReinstallPolicyAppWithLocallyInstalledApp) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url(embedded_test_server()->GetURL("/banners/manifest_test_page.html"));
+
+  // Install user app
+  auto web_application_info = std::make_unique<WebAppInstallInfo>();
+  web_application_info->start_url = url;
+  web_application_info->title = u"Test user app";
+  AppId app_id =
+      test::InstallWebApp(profile(), std::move(web_application_info));
+  ASSERT_TRUE(registrar().WasInstalledByUser(app_id));
+  ASSERT_FALSE(registrar().HasExternalApp(app_id));
+
+  // Install policy app
+  ExternalInstallOptions install_options(
+      url, DisplayMode::kStandalone, ExternalInstallSource::kExternalPolicy);
+  InstallApp(install_options);
+  ASSERT_EQ(webapps::InstallResultCode::kSuccessNewInstall,
+            result_code_.value());
+  absl::optional<AppId> policy_app_id =
+      ExternallyInstalledWebAppPrefs(profile()->GetPrefs()).LookupAppId(url);
+  ASSERT_TRUE(policy_app_id.has_value());
+  ASSERT_EQ(policy_app_id.value(), app_id);
+  ASSERT_TRUE(registrar().GetAppById(app_id)->IsPolicyInstalledApp());
+
+  // Uninstall policy app
+  std::vector<ExternalInstallOptions> desired_apps_install_options;
+  base::RunLoop run_loop;
+  externally_managed_app_manager().SynchronizeInstalledApps(
+      std::move(desired_apps_install_options),
+      ExternalInstallSource::kExternalPolicy,
+      base::BindLambdaForTesting(
+          [&run_loop, &url](
+              std::map<GURL, ExternallyManagedAppManager::InstallResult>
+                  install_results,
+              std::map<GURL, bool> uninstall_results) {
+            EXPECT_TRUE(install_results.empty());
+            EXPECT_EQ(uninstall_results.size(), 1U);
+            EXPECT_EQ(uninstall_results[url], true);
+            run_loop.Quit();
+          }));
+  run_loop.Run();
+  ASSERT_FALSE(registrar().GetAppById(app_id)->IsPolicyInstalledApp());
+
+  // Reinstall policy app
+  InstallApp(install_options);
+  ASSERT_EQ(webapps::InstallResultCode::kSuccessAlreadyInstalled,
+            result_code_.value());
+  ASSERT_TRUE(registrar().GetAppById(app_id)->IsPolicyInstalledApp());
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
index a40ce51..ee1e441 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
@@ -34,6 +34,7 @@
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
+#include "chrome/browser/web_applications/web_app_sync_bridge.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -424,7 +425,8 @@
     ui_manager_ = std::make_unique<FakeWebAppUiManager>();
 
     externally_managed_app_manager_impl().SetSubsystems(
-        &registrar(), &ui_manager(), &install_finalizer(), &install_manager());
+        &registrar(), &ui_manager(), &install_finalizer(), &install_manager(),
+        &sync_bridge());
 
     controller().Init();
   }
@@ -536,6 +538,8 @@
 
   WebAppRegistrar& registrar() { return controller().registrar(); }
 
+  WebAppSyncBridge& sync_bridge() { return controller().sync_bridge(); }
+
   FakeWebAppRegistryController& controller() {
     return *fake_registry_controller_;
   }
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
index 032cc47..47e1023 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
@@ -38,7 +38,7 @@
         std::make_unique<FakeExternallyManagedAppManager>(profile());
 
     externally_managed_app_manager().SetSubsystems(&app_registrar(), nullptr,
-                                                   nullptr, nullptr);
+                                                   nullptr, nullptr, nullptr);
     externally_managed_app_manager().SetHandleInstallRequestCallback(
         base::BindLambdaForTesting(
             [this](const ExternalInstallOptions& install_options)
diff --git a/chrome/browser/web_applications/os_integration/web_app_shortcut_manager.cc b/chrome/browser/web_applications/os_integration/web_app_shortcut_manager.cc
index 376378d..cfb45fd 100644
--- a/chrome/browser/web_applications/os_integration/web_app_shortcut_manager.cc
+++ b/chrome/browser/web_applications/os_integration/web_app_shortcut_manager.cc
@@ -29,7 +29,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "third_party/re2/src/re2/re2.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/image/image_skia_rep_default.h"
+#include "ui/gfx/image/image_skia_rep.h"
 
 namespace web_app {
 
diff --git a/chrome/browser/web_applications/policy/web_app_policy_manager.cc b/chrome/browser/web_applications/policy/web_app_policy_manager.cc
index 4e3172a..b80947b 100644
--- a/chrome/browser/web_applications/policy/web_app_policy_manager.cc
+++ b/chrome/browser/web_applications/policy/web_app_policy_manager.cc
@@ -354,6 +354,9 @@
   ExternalInstallOptions install_options{
       install_gurl, user_display_mode, ExternalInstallSource::kExternalPolicy};
 
+  // TODO(dmurph): Store expected os integration state in the database so
+  // this doesn't re-apply when we already have it done.
+  // https://crbug.com/1295044
   install_options.add_to_applications_menu = true;
   install_options.add_to_desktop =
       create_desktop_shortcut ? create_desktop_shortcut->GetBool() : false;
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc
index 5bca480d..6d5dd9c 100644
--- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc
+++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc
@@ -167,7 +167,7 @@
 
     externally_managed_app_manager().SetSubsystems(
         &controller().registrar(), &ui_manager(), &install_finalizer(),
-        &install_manager());
+        &install_manager(), &controller().sync_bridge());
 
     web_app_policy_manager().SetSubsystems(
         &externally_managed_app_manager(), &controller().registrar(),
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index 7e1b844..a81b7a1 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -322,7 +322,7 @@
       sync_bridge_.get());
   externally_managed_app_manager_->SetSubsystems(
       registrar_.get(), ui_manager_.get(), install_finalizer_.get(),
-      install_manager_.get());
+      install_manager_.get(), sync_bridge_.get());
   preinstalled_web_app_manager_->SetSubsystems(
       registrar_.get(), ui_manager_.get(),
       externally_managed_app_manager_.get());
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index abaec4ee..515bee2 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1645768781-49befff043bd9e3516398aa4f22b62a6ba4d412a.profdata
+chrome-mac-arm-main-1645790211-0110073c69833eb15f293788b3addf72d7d467eb.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 990fe8f..696ee02 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1645757816-6e56a6556841fa3052b891b0f2c64671736c3537.profdata
+chrome-win32-main-1645779392-17dbc3a8d1365a6bf7bcaa2c3f5c9d21d5b5469e.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index eed3419..092928f 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1645747137-6f25eb0b2ebd939ae2f91205eecc6053bb478302.profdata
+chrome-win64-main-1645790211-6309a201572799e1dea980224c96c604e4019e1a.profdata
diff --git a/chrome/installer/OWNERS b/chrome/installer/OWNERS
index dd0306f..22d164a 100644
--- a/chrome/installer/OWNERS
+++ b/chrome/installer/OWNERS
@@ -1,2 +1,4 @@
 gab@chromium.org
+ganesh@chromium.org
 grt@chromium.org
+waffles@chromium.org
diff --git a/chrome/installer/mac/BUILD.gn b/chrome/installer/mac/BUILD.gn
index 4fe91b44..77e9fc6 100644
--- a/chrome/installer/mac/BUILD.gn
+++ b/chrome/installer/mac/BUILD.gn
@@ -113,10 +113,14 @@
       "//chrome/app/theme/google_chrome/mac/document_beta.icns",
       "//chrome/app/theme/google_chrome/mac/document_canary.icns",
       "//chrome/app/theme/google_chrome/mac/document_dev.icns",
-      "internal/Google_Chrome.provisionprofile",
-      "internal/Google_Chrome_Beta.provisionprofile",
-      "internal/Google_Chrome_Canary.provisionprofile",
-      "internal/Google_Chrome_Dev.provisionprofile",
+      "internal/Google_Chrome.765bb3620a0f7a33500da39b20122b1cec41140f.provisionprofile",
+      "internal/Google_Chrome.c9a99324ca3fcb23dbcc36bd5fd4f9753305130a.provisionprofile",
+      "internal/Google_Chrome_Beta.765bb3620a0f7a33500da39b20122b1cec41140f.provisionprofile",
+      "internal/Google_Chrome_Beta.c9a99324ca3fcb23dbcc36bd5fd4f9753305130a.provisionprofile",
+      "internal/Google_Chrome_Canary.765bb3620a0f7a33500da39b20122b1cec41140f.provisionprofile",
+      "internal/Google_Chrome_Canary.c9a99324ca3fcb23dbcc36bd5fd4f9753305130a.provisionprofile",
+      "internal/Google_Chrome_Dev.765bb3620a0f7a33500da39b20122b1cec41140f.provisionprofile",
+      "internal/Google_Chrome_Dev.c9a99324ca3fcb23dbcc36bd5fd4f9753305130a.provisionprofile",
       "internal/chrome_beta_dmg_dsstore",
       "internal/chrome_beta_dmg_icon.icns",
       "internal/chrome_canary_dmg_dsstore",
diff --git a/chrome/installer/mac/signing/model.py b/chrome/installer/mac/signing/model.py
index a5d3c40..1cfeb552 100644
--- a/chrome/installer/mac/signing/model.py
+++ b/chrome/installer/mac/signing/model.py
@@ -7,6 +7,36 @@
 """
 
 import os.path
+import re
+import string
+
+from . import commands
+
+
+def _get_identity_hash(identity):
+    """Returns a string of the SHA-1 hash of a specified keychain identity.
+
+    Args:
+        identity: A string specifying the identity.
+
+    Returns:
+        A string with the hash, with a-f in lower case.
+
+    Raises:
+        ValueError: If the identity cannot be found.
+    """
+    if len(identity) == 40 and all(ch in string.hexdigits for ch in identity):
+        return identity.lower()
+
+    command = ['security', 'find-certificate', '-a', '-c', identity, '-Z']
+    output = commands.run_command_output(command)
+
+    hash_match = re.search(
+        b'^SHA-1 hash: ([0-9A-Fa-f]{40})$', output, flags=re.MULTILINE)
+    if not hash_match:
+        raise ValueError('Cannot find identity', identity)
+
+    return hash_match.group(1).decode('utf-8').lower()
 
 
 class CodeSignedProduct(object):
@@ -284,10 +314,19 @@
 
             @property
             def provisioning_profile_basename(self):
-                profile = base_config.provisioning_profile_basename
-                if profile and this.channel_customize:
-                    return '{}_{}'.format(profile, this.app_name_fragment)
-                return profile
+                profile_basename = base_config.provisioning_profile_basename
+                if not profile_basename:
+                    return profile_basename
+
+                if this.channel_customize:
+                    profile_basename = '{}_{}'.format(profile_basename,
+                                                      this.app_name_fragment)
+                if base_config.identity:
+                    profile_basename = '{}.{}'.format(
+                        profile_basename,
+                        _get_identity_hash(base_config.identity))
+
+                return profile_basename
 
             @property
             def packaging_basename(self):
diff --git a/chrome/installer/mac/signing/model_test.py b/chrome/installer/mac/signing/model_test.py
index e5cf9cd..647846d4 100644
--- a/chrome/installer/mac/signing/model_test.py
+++ b/chrome/installer/mac/signing/model_test.py
@@ -5,9 +5,18 @@
 import os.path
 import unittest
 
-from . import model
+from . import model, test_common
 from .test_config import TestConfig
 
+mock = test_common.import_mock()
+
+
+def _get_identity_hash(i):
+    if i == '[IDENTITY]':
+        return 'identity'
+
+    raise
+
 
 class TestCodeSignedProduct(unittest.TestCase):
 
@@ -67,6 +76,7 @@
         self.assertFalse(model.VerifyOptions.valid(['--whatever']))
 
 
+@mock.patch('signing.model._get_identity_hash', _get_identity_hash)
 class TestDistribution(unittest.TestCase):
 
     def test_no_options(self):
@@ -75,7 +85,7 @@
         self.assertEqual(base_config, config.base_config)
         self.assertEqual(base_config.app_product, config.app_product)
         self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
-        self.assertEqual(base_config.provisioning_profile_basename,
+        self.assertEqual('provisiontest.identity',
                          config.provisioning_profile_basename)
         self.assertEqual(base_config.packaging_basename,
                          config.packaging_basename)
@@ -87,7 +97,7 @@
         self.assertEqual(base_config.app_product, config.app_product)
         self.assertEqual(base_config.product, config.product)
         self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
-        self.assertEqual(base_config.provisioning_profile_basename,
+        self.assertEqual('provisiontest.identity',
                          config.provisioning_profile_basename)
         self.assertEqual(base_config.packaging_basename,
                          config.packaging_basename)
@@ -103,7 +113,7 @@
         self.assertEqual('App Product Beta', config.app_product)
         self.assertEqual(base_config.product, config.product)
         self.assertEqual('test.signing.bundle_id.beta', config.base_bundle_id)
-        self.assertEqual('provisiontest_Beta',
+        self.assertEqual('provisiontest_Beta.identity',
                          config.provisioning_profile_basename)
         self.assertEqual('AppProductBeta-99.0.9999.99',
                          config.packaging_basename)
@@ -115,7 +125,7 @@
         self.assertEqual(base_config, config.base_config)
         self.assertEqual(base_config.app_product, config.app_product)
         self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
-        self.assertEqual(base_config.provisioning_profile_basename,
+        self.assertEqual('provisiontest.identity',
                          config.provisioning_profile_basename)
         self.assertEqual('AppProduct-99.0.9999.99-Canary',
                          config.packaging_basename)
@@ -132,7 +142,7 @@
         self.assertEqual('App Product Dev', config.app_product)
         self.assertEqual('Product', config.product)
         self.assertEqual('test.signing.bundle_id.dev', config.base_bundle_id)
-        self.assertEqual('provisiontest_Dev',
+        self.assertEqual('provisiontest_Dev.identity',
                          config.provisioning_profile_basename)
         self.assertEqual('AppProductDev-99.0.9999.99-Dev',
                          config.packaging_basename)
diff --git a/chrome/installer/mac/signing/parts_test.py b/chrome/installer/mac/signing/parts_test.py
index 69854a2..94f1e98 100644
--- a/chrome/installer/mac/signing/parts_test.py
+++ b/chrome/installer/mac/signing/parts_test.py
@@ -9,6 +9,13 @@
 mock = test_common.import_mock()
 
 
+def _get_identity_hash(i):
+    if i == '[IDENTITY]':
+        return 'identity'
+
+    raise
+
+
 class TestGetParts(unittest.TestCase):
 
     def test_get_parts_no_base(self):
@@ -127,6 +134,7 @@
     m: mock.DEFAULT
     for m in ('copy_files', 'move_file', 'make_dir', 'run_command')
 })
+@mock.patch('signing.model._get_identity_hash', _get_identity_hash)
 class TestSignChrome(unittest.TestCase):
 
     def setUp(self):
@@ -149,7 +157,7 @@
         # Test that the provisioning profile is copied.
         self.assertEqual(kwargs['copy_files'].mock_calls, [
             mock.call.copy_files(
-                '/$I/Product Packaging/provisiontest.provisionprofile',
+                '/$I/Product Packaging/provisiontest.identity.provisionprofile',
                 '/$W/App Product.app/Contents/embedded.provisionprofile')
         ])
 
@@ -230,7 +238,7 @@
         # Test that the provisioning profile is copied.
         self.assertEqual(kwargs['copy_files'].mock_calls, [
             mock.call.copy_files(
-                '/$I/Product Packaging/provisiontest.provisionprofile',
+                '/$I/Product Packaging/provisiontest.identity.provisionprofile',
                 '/$W/App Product.app/Contents/embedded.provisionprofile')
         ])
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 05774730..914751b8 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4253,6 +4253,7 @@
       "../browser/chromeos/policy/dlp/dlp_content_manager_test_helper.h",
       "../browser/lacros/browser_test_util.cc",
       "../browser/lacros/browser_test_util.h",
+      "../browser/lacros/cert_db_initializer_browsertest.cc",
       "../browser/lacros/device_attributes_lacros_browsertest.cc",
 
       # download_controller_client_lacros_browsertest.cc should become a unit
@@ -5364,8 +5365,7 @@
     "//base:base_stack_sampling_profiler_test_util",
     "//base/test:test_support",
     "//build:chromeos_buildflags",
-    "//chrome:browser_dependencies",
-    "//chrome:child_dependencies",
+    "//chrome:dependencies",
     "//chrome:resources",
     "//chrome:strings",
     "//chrome/app:command_ids",
@@ -10110,8 +10110,7 @@
 
       # On Linux, link the dependencies (libraries) that make up actual
       # Chromium functionality directly into the executable.
-      "//chrome:browser_dependencies",
-      "//chrome:child_dependencies",
+      "//chrome:dependencies",
 
       # For the sampling profiler.
       # The way it's currently implemented requires us to keep it, but from a
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 1eb99cf3..2a0dc13 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -325,6 +325,10 @@
   launch_browser_for_testing_ =
       std::make_unique<ash::full_restore::ScopedLaunchBrowserForTesting>();
 #endif
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  CertDbInitializerFactory::GetInstance()
+      ->SetCreateWithBrowserContextForTesting(/*should_create=*/false);
+#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
 }
 
 InProcessBrowserTest::~InProcessBrowserTest() = default;
@@ -420,11 +424,6 @@
   ChromeNetworkDelegate::EnableAccessToAllFilesForTesting(true);
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  CertDbInitializerFactory::GetInstance()
-      ->SetCreateWithBrowserContextForTesting(/*should_create=*/false);
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   // Device sync (for multidevice "Better Together") is ash specific.
   chromeos::device_sync::DeviceSyncImpl::Factory::SetCustomFactory(
diff --git a/chrome/test/data/extensions/declarative_net_request/request_domain_test.html b/chrome/test/data/extensions/declarative_net_request/request_domain_test.html
new file mode 100644
index 0000000..04113240
--- /dev/null
+++ b/chrome/test/data/extensions/declarative_net_request/request_domain_test.html
@@ -0,0 +1,29 @@
+<html>
+
+<head>
+  <script src="subresources/script.js"></script>
+</head>
+
+<body>
+  <script type="text/javascript">
+    // The location's query string contains a comma delimited list of domains.
+    // For each domain, create an iframe in order to perform a request to that
+    // domain.
+
+    const domains = window.location.search.substr(1).split(",");
+
+    for (const domain of domains) {
+      const url = new URL(window.location.href);
+      url.hostname = domain;
+      url.search = "";
+      url.pathname = "/child_frame.html"
+
+      const iframe = document.createElement("iframe");
+      iframe.src = url.href;
+      iframe.name = domain;
+      document.body.appendChild(iframe);
+    }
+  </script>
+</body>
+
+</html>
diff --git a/chrome/test/data/webui/app_settings/app_test.ts b/chrome/test/data/webui/app_settings/app_test.ts
index bf110b8..dafdece 100644
--- a/chrome/test/data/webui/app_settings/app_test.ts
+++ b/chrome/test/data/webui/app_settings/app_test.ts
@@ -35,6 +35,8 @@
       hideResizeLocked: true,
       supportedLinks: [],
       runOnOsLogin: {loginMode: RunOnOsLoginMode.kNotRun, isManaged: false},
+      fileHandlingState:
+          {enabled: false, isManaged: false, userVisibleTypes: 'TXT'},
     };
 
     const permissionTypes = [
@@ -91,6 +93,19 @@
         runOnOsLoginItem.app.runOnOsLogin!.loginMode, RunOnOsLoginMode.kNotRun);
   });
 
+  test('Toggle File Handling', function() {
+    const fileHandlingItem = appSettingsApp.shadowRoot!.querySelector(
+        'app-management-file-handling-item')!;
+    assertTrue(!!fileHandlingItem);
+    assertEquals(fileHandlingItem.app.fileHandlingState!.enabled, false);
+
+    fileHandlingItem.click();
+    assertEquals(fileHandlingItem.app.fileHandlingState!.enabled, true);
+
+    fileHandlingItem.click();
+    assertEquals(fileHandlingItem.app.fileHandlingState!.enabled, false);
+  });
+
   test('Toggle window mode', function() {
     const windowModeItem =
         appSettingsApp.shadowRoot!.querySelector('app-management-window-mode-item')!;
diff --git a/chrome/test/data/webui/app_settings/test_app_management_browser_proxy.ts b/chrome/test/data/webui/app_settings/test_app_management_browser_proxy.ts
index b8c6ca2..b4c1d46 100644
--- a/chrome/test/data/webui/app_settings/test_app_management_browser_proxy.ts
+++ b/chrome/test/data/webui/app_settings/test_app_management_browser_proxy.ts
@@ -60,6 +60,11 @@
     this.app_.runOnOsLogin!.loginMode = loginMode;
     this.page_.onAppChanged(this.app_);
   }
+
+  setFileHandlingEnabled(_appId: string, fileHandlingEnabled: boolean) {
+    this.app_.fileHandlingState!.enabled = fileHandlingEnabled;
+    this.page_.onAppChanged(this.app_);
+  }
 }
 
 export class TestAppManagementBrowserProxy implements BrowserProxy {
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 93db8cc..c384845d 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -642,8 +642,7 @@
 ].forEach(test => registerTest(...test));
 
 // Timeout on Linux dbg bots: https://crbug.com/1133412
-// Fails on Mac bots: https://crbug.com/1222886
-GEN('#if !((BUILDFLAG(IS_LINUX) && !defined(NDEBUG)) || BUILDFLAG(IS_MAC))');
+GEN('#if !(BUILDFLAG(IS_LINUX) && !defined(NDEBUG))');
 [['SecurityPage', 'security_page_test.js'],
 ].forEach(test => registerTest(...test));
 GEN('#endif');
diff --git a/chrome/updater/win/task_scheduler.cc b/chrome/updater/win/task_scheduler.cc
index 7337d6a3..cee1943f 100644
--- a/chrome/updater/win/task_scheduler.cc
+++ b/chrome/updater/win/task_scheduler.cc
@@ -48,11 +48,6 @@
 const wchar_t kFifteenMinutesText[] = L"PT15M";
 const wchar_t kOneDayText[] = L"P1D";
 
-// Names of the folders used to group the scheduled tasks in.
-const wchar_t kTaskCompanyFolder[] = L"\\" COMPANY_SHORTNAME_STRING;
-const wchar_t kTaskSubfolderName[] =
-    L"\\" COMPANY_SHORTNAME_STRING L"\\" PRODUCT_FULLNAME_STRING;
-
 const size_t kNumDeleteTaskRetry = 3;
 const size_t kDeleteRetryDelayInMs = 100;
 
@@ -139,6 +134,20 @@
   return task_service;
 }
 
+// Name of the company folder used to group the scheduled tasks in. System task
+// folders have a "System" suffix, and User task folders have a "User" suffix.
+std::wstring GetTaskCompanyFolder(UpdaterScope scope) {
+  return base::StrCat({L"\\" COMPANY_SHORTNAME_STRING,
+                       scope == UpdaterScope::kSystem ? L"System " : L"User "});
+}
+
+// Name of the sub-folder that the scheduled tasks are created in, prefixed with
+// the company folder `GetTaskCompanyFolder`.
+std::wstring GetTaskSubfolderName(UpdaterScope scope) {
+  return base::StrCat(
+      {GetTaskCompanyFolder(scope), L"\\" PRODUCT_FULLNAME_STRING});
+}
+
 // A task scheduler class uses the V2 API of the task scheduler.
 class TaskSchedulerV2 final : public TaskScheduler {
  public:
@@ -369,8 +378,8 @@
     DCHECK(!IsTaskRegistered(task_name));
 
     // Try to delete \\Company\Product first and \\Company second
-    if (DeleteFolderIfEmpty(kTaskSubfolderName))
-      DeleteFolderIfEmpty(kTaskCompanyFolder);
+    if (DeleteFolderIfEmpty(GetTaskSubfolderName(GetUpdaterScope())))
+      DeleteFolderIfEmpty(GetTaskCompanyFolder(GetUpdaterScope()));
 
     return true;
   }
@@ -994,15 +1003,16 @@
 
     // Try to find the folder first.
     Microsoft::WRL::ComPtr<ITaskFolder> folder;
-    base::win::ScopedBstr company_folder_name(kTaskSubfolderName);
-    hr = root_task_folder->GetFolder(company_folder_name.Get(), &folder);
+    base::win::ScopedBstr task_subfolder_name(
+        GetTaskSubfolderName(GetUpdaterScope()));
+    hr = root_task_folder->GetFolder(task_subfolder_name.Get(), &folder);
 
     // Try creating the folder it wasn't there.
     if (FAILED(hr) && (hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) ||
                        hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))) {
       // Use default SDDL.
       hr = root_task_folder->CreateFolder(
-          company_folder_name.Get(), base::win::ScopedVariant::kEmptyVariant,
+          task_subfolder_name.Get(), base::win::ScopedVariant::kEmptyVariant,
           &folder);
 
       if (FAILED(hr)) {
@@ -1051,7 +1061,7 @@
 
   // If the task folder specified by |folder_name| is empty, try to delete it.
   // Ignore failures. Returns true if the folder is successfully deleted.
-  bool DeleteFolderIfEmpty(const wchar_t* folder_name) {
+  bool DeleteFolderIfEmpty(const std::wstring& folder_name) {
     // Try deleting if empty. Race conditions here should be handled by the API.
     Microsoft::WRL::ComPtr<ITaskFolder> root_task_folder;
     HRESULT hr = task_service_->GetFolder(base::win::ScopedBstr(L"\\").Get(),
diff --git a/chrome/updater/win/task_scheduler_unittest.cc b/chrome/updater/win/task_scheduler_unittest.cc
index 574aed5..69b76d83 100644
--- a/chrome/updater/win/task_scheduler_unittest.cc
+++ b/chrome/updater/win/task_scheduler_unittest.cc
@@ -65,7 +65,6 @@
  public:
   void SetUp() override {
     DeleteLogFile();
-    InitLogging(GetTestScope(), FILE_PATH_LITERAL("updater.log"));
 
     task_scheduler_ = TaskScheduler::CreateInstance();
     EXPECT_TRUE(task_scheduler_->DeleteTask(kTaskName1));
@@ -129,6 +128,10 @@
     return command_line;
   }
 
+  static void SetUpTestCase() {
+    InitLogging(GetTestScope(), FILE_PATH_LITERAL("updater.log"));
+  }
+
  protected:
   std::unique_ptr<TaskScheduler> task_scheduler_;
 };
@@ -366,7 +369,11 @@
   EXPECT_EQ(kTaskName1, info.name);
 
   EXPECT_TRUE(task_scheduler_->HasTaskFolder(
-      L"\\" COMPANY_SHORTNAME_STRING L"\\" PRODUCT_FULLNAME_STRING));
+      base::StrCat(
+          {L"\\" COMPANY_SHORTNAME_STRING,
+           GetTestScope() == UpdaterScope::kSystem ? L"System " : L"User ",
+           L"\\" PRODUCT_FULLNAME_STRING})
+          .c_str()));
 
   EXPECT_TRUE(task_scheduler_->DeleteTask(kTaskName1));
 }
diff --git a/chromeos/crosapi/mojom/dlp.mojom b/chromeos/crosapi/mojom/dlp.mojom
index 4b0f3cd..d7246e6 100644
--- a/chromeos/crosapi/mojom/dlp.mojom
+++ b/chromeos/crosapi/mojom/dlp.mojom
@@ -37,7 +37,10 @@
 [Stable, Extensible]
 struct ScreenShareArea {
   // All root windows if |window_id| is null.
-  string? window_id;
+  string? window_id@0;
+
+  // Unique identifier for a window from SnapshotSource in screen_manager.mojom.
+  [MinVersion=3] uint64 snapshot_source_id@1 = 0;
 };
 
 // Callback to control the state (pause/resume) of a remote screen share.
@@ -54,7 +57,7 @@
 // Interface to communicate from Lacros DLP layer to Ash. Used to notify Ash
 // about changes in restrictions applied to web content in Lacros.
 //
-// Next MinVersion: 3
+// Next MinVersion: 4
 // Next ID: 4
 [Stable, Uuid="793ee9c6-3873-4ea8-a541-894412ddfc0b"]
 interface Dlp {
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt
index e37ba70..60e752a6 100644
--- a/chromeos/profiles/atom.afdo.newest.txt
+++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-atom-100-4880.0-1645442860-benchmark-100.0.4896.12-r1-redacted.afdo.xz
+chromeos-chrome-amd64-atom-100-4880.0-1645442860-benchmark-100.0.4896.13-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index eae4db7..e5ccefc 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-100-4880.0-1645439876-benchmark-100.0.4896.12-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-100-4880.0-1645439876-benchmark-100.0.4896.13-r1-redacted.afdo.xz
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index bc5b7ee6..33346f76 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Brandmuur word vermoed</translation>
 <translation id="4691278870498629773">Gestop – laai ontbreek</translation>
 <translation id="469379815867856270">Seinsterkte</translation>
-<translation id="4707579418881001319">L2TP/IPSec + gebruikersertifikaat</translation>
 <translation id="4731797938093519117">Ouertoegang</translation>
 <translation id="473775607612524610">Dateer op</translation>
 <translation id="4744944742468440486">Inligting wat met jou keuse verband hou</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Laat loop geheuetoets</translation>
 <translation id="9173638680043580060">Minder as 'n minuut oor</translation>
 <translation id="917720651393141712">Toets</translation>
-<translation id="9190063653747922532">L2TP/IPsec + voorafgedeelde sleutel</translation>
 <translation id="9204237731135241582">Kan nie die deurgang van Android-programme af kontak nie</translation>
 <translation id="9211490828691860325">Alle lessenaars</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index bb3519f..9a9c682 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ኬላ ተጠርጥሯል</translation>
 <translation id="4691278870498629773">ቆሟል - መሳቢያ ይጎድላል</translation>
 <translation id="469379815867856270">የሲግናል ጥንካሬ</translation>
-<translation id="4707579418881001319">L2TP/IPsec + የተጠቃሚ እውቅና ማረጋገጫ</translation>
 <translation id="4731797938093519117">የወላጅ መዳረሻ</translation>
 <translation id="473775607612524610">አዘምን</translation>
 <translation id="4744944742468440486">ከእርስዎ ምርጫ ጋር የተዛመደ መረጃ</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">የማህደረ ትውስታ ሙከራን አሂድ</translation>
 <translation id="9173638680043580060">ከአንድ ደቂቃ በታች ይቀራል</translation>
 <translation id="917720651393141712">ሙከራ</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ቅድሚያ የተጋራ ቁልፍ</translation>
 <translation id="9204237731135241582">ከAndroid መተግበሪያዎች አግባቢ ፍኖትን ማነጋገር አልተቻለም</translation>
 <translation id="9211490828691860325">ሁሉም ዴስኮች</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index 875c945..b909a23a 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">تم الاشتباه في جدار ناري.</translation>
 <translation id="4691278870498629773">توقّفت الطابعة - دُرج الورق غير متوفّر</translation>
 <translation id="469379815867856270">قوة الإشارة</translation>
-<translation id="4707579418881001319">‏L2TP/IPSec + شهادة المستخدم</translation>
 <translation id="4731797938093519117">وصول أحد الوالدين</translation>
 <translation id="473775607612524610">تحديث</translation>
 <translation id="4744944742468440486">معلومات ذات صلة باختيارك</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">تشغيل اختبار الذاكرة</translation>
 <translation id="9173638680043580060">يتبقى أقل من دقيقة.</translation>
 <translation id="917720651393141712">اختبار</translation>
-<translation id="9190063653747922532">‏L2TP/IPSec + المفتاح المشترك مسبقًا</translation>
 <translation id="9204237731135241582">‏تعذَّر الاتصال بالبوابة من خلال تطبيقات Android.</translation>
 <translation id="9211490828691860325">جميع أسطح المكتب</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb
index 396a5df..0929ceb7 100644
--- a/chromeos/strings/chromeos_strings_as.xtb
+++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">প’ৰ্টেল</translation>
 <translation id="4521826082652183069">বিষয়ৰ বিকল্প নামৰ সৈতে মিলা</translation>
 <translation id="4536864596629708641">আইপি কনফিগাৰেশ্বন</translation>
+<translation id="4546131424594385779">এটা লুপ কৰা ভিডিঅ' সৃষ্টি কৰক</translation>
 <translation id="4548483925627140043">ছিগনেল পোৱা নগ’ল</translation>
 <translation id="4556753742174065117">আপোনাৰ ফাৰ্মৱেৰ আপ টু ডে’ট হৈ আছে</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" />mAh বেটাৰী</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">ফায়াৰৱালৰ সন্দেহ কৰা হৈছে</translation>
 <translation id="4691278870498629773">বন্ধ হৈছে - ট্ৰে’ উপলব্ধ নহয়</translation>
 <translation id="469379815867856270">ছিগনেলৰ ক্ষমতা</translation>
-<translation id="4707579418881001319">L2TP/IPsec + ব্যৱহাৰকাৰীৰ প্ৰমাণপত্ৰ</translation>
 <translation id="4731797938093519117">অভিভাৱকৰ এক্সেছ</translation>
 <translation id="473775607612524610">আপডে'ট কৰক</translation>
 <translation id="4744944742468440486">আপুনি কৰা বাছনি সম্পৰ্কীয় তথ্য</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">একাধিক পৃষ্ঠাৰ স্কেন</translation>
 <translation id="6574762126505704998">সম্পূৰ্ণ স্ক্ৰীনজুৰি</translation>
 <translation id="6575134580692778371">কনফিগাৰ কৰা হোৱা নাই</translation>
+<translation id="6579509898032828423">এই ফট'খন ব্যৱহাৰ কৰক</translation>
 <translation id="6596816719288285829">আইপি ঠিকনা</translation>
 <translation id="6618744767048954150">চলি আছে</translation>
 <translation id="6620487321149975369">প্ৰিণ্টিঙৰ কামসমূহ মেনুৱেলভাৱে আঁতৰাই নিদিয়ালৈকে সেইসমূহ ইতিহাসত দেখা পোৱা যাব</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS ৰিজ’লিউশ্বনটোত অধিক বিলম্বতা আছে</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ব্লুটুথ</translation>
+<translation id="9082718469794970195">এই ভিডিঅ'টো ব্যৱহাৰ কৰক</translation>
 <translation id="9087578468327036362">এই প্ৰশ্নটোৰ অভিযোগ দিয়ক</translation>
 <translation id="9088306295921699330">এতিয়ালৈকে কৰা ব্যৱহাৰৰ পৰিমাণ</translation>
 <translation id="9095415590198785865">ডিভাইচটো একেগৰাকী মালিকৰ ওচৰলৈ যাব</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">মেম’ৰি পৰীক্ষা চলাওক</translation>
 <translation id="9173638680043580060">এক মিনিটতকৈ কম সময় বাকী আছে</translation>
 <translation id="917720651393141712">পৰীক্ষা কৰক</translation>
-<translation id="9190063653747922532">L2TP/IPsec + পূৰ্বে শ্বেয়াৰ কৰা কী</translation>
 <translation id="9204237731135241582">Android এপৰ পৰা গে’টৱে’ সংযোগ কৰিব নোৱাৰি</translation>
 <translation id="9211490828691860325">আটাইবোৰ ডেস্ক</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index b638f82d..c2a8ec2 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Qoruyucu divar şübhəsi var</translation>
 <translation id="4691278870498629773">Dayanıb - Altlıq yoxdur</translation>
 <translation id="469379815867856270">Siqnal Gücü</translation>
-<translation id="4707579418881001319">L2TP/IPsec + istifadəçi sertifikatı</translation>
 <translation id="4731797938093519117">Valideyn girişi</translation>
 <translation id="473775607612524610">Güncəlləşdirin</translation>
 <translation id="4744944742468440486">Seçiminizlə əlaqəli məlumat</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">Yaddaş Testi icra edin</translation>
 <translation id="9173638680043580060">Bir dəqiqədən az qalıb</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + öncədən paylaşılmış açar</translation>
 <translation id="9204237731135241582">Android tətbiqlərindən giriş ilə əlaqə saxlamaq olmur</translation>
 <translation id="9211490828691860325">Bütün masalar</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb
index 25643e4..3b058c94 100644
--- a/chromeos/strings/chromeos_strings_be.xtb
+++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Партал</translation>
 <translation id="4521826082652183069">Супадзенне па альтэрнатыўным імені суб'екта</translation>
 <translation id="4536864596629708641">Канфігурацыя IP-адраса</translation>
+<translation id="4546131424594385779">Запісаць зацыкленае відэа</translation>
 <translation id="4548483925627140043">Сігнал не знойдзены</translation>
 <translation id="4556753742174065117">Усё ўбудаванае праграмнае забеспячэнне абноўлена</translation>
 <translation id="455835558791489930">Магутнасць акумулятара: <ph name="CHARGE_VALUE" /> мА·г</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Магчыма, уключаны брандмаўар</translation>
 <translation id="4691278870498629773">Спынена: няма латка</translation>
 <translation id="469379815867856270">Магутнасць сігналу</translation>
-<translation id="4707579418881001319">L2TP/IPsec + сертыфікат карыстальніка</translation>
 <translation id="4731797938093519117">Бацькоўскі доступ</translation>
 <translation id="473775607612524610">Абнавіць</translation>
 <translation id="4744944742468440486">Інфармацыя, звязаная з вылучаным вамі фрагментам</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Шматстаронкавае сканіраванне</translation>
 <translation id="6574762126505704998">Запоўніць</translation>
 <translation id="6575134580692778371">Не наладжана</translation>
+<translation id="6579509898032828423">Выкарыстоўваць гэта фота</translation>
 <translation id="6596816719288285829">IP-адрас</translation>
 <translation id="6618744767048954150">Выконваецца</translation>
 <translation id="6620487321149975369">Заданні друку будуць паказвацца ў гісторыі, пакуль яны не будуць выдалены ўручную</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS-пераўтварэнне мае вялікую затрымку</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Выкарыстоўваць гэта відэа</translation>
 <translation id="9087578468327036362">Паскардзіцца на гэты запыт</translation>
 <translation id="9088306295921699330">Бягучае выкарыстанне</translation>
 <translation id="9095415590198785865">Прылада застанецца ў ранейшага ўладальніка</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Выканаць праверку памяці</translation>
 <translation id="9173638680043580060">Застаецца менш за хвіліну</translation>
 <translation id="917720651393141712">Праверыць</translation>
-<translation id="9190063653747922532">L2TP/IPsec з папярэдне абагуленым ключом</translation>
 <translation id="9204237731135241582">Не ўдалося звязацца са шлюзам з праграм для Android</translation>
 <translation id="9211490828691860325">Усе працоўныя сталы</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index c042816..af6c006 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Портал</translation>
 <translation id="4521826082652183069">Съответствие на алтернативното име на субекта</translation>
 <translation id="4536864596629708641">Конфигурация на IP адреса</translation>
+<translation id="4546131424594385779">Създаване на видеоклип с повтаряне</translation>
 <translation id="4548483925627140043">Не бе открит сигнал</translation>
 <translation id="4556753742174065117">Фърмуерът е актуален</translation>
 <translation id="455835558791489930">Батерия с капацитет от <ph name="CHARGE_VALUE" /> мАч</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Предполага се наличие на защитна стена</translation>
 <translation id="4691278870498629773">Спряло – липсваща тава</translation>
 <translation id="469379815867856270">Сила на сигнала</translation>
-<translation id="4707579418881001319">L2TP/IPsec с потребителски сертификат</translation>
 <translation id="4731797938093519117">Достъп на родител</translation>
 <translation id="473775607612524610">Актуализиране</translation>
 <translation id="4744944742468440486">Информация за избраното от вас</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Сканиране на няколко страници</translation>
 <translation id="6574762126505704998">Запълване</translation>
 <translation id="6575134580692778371">Не е конфигурирано</translation>
+<translation id="6579509898032828423">Използване на тази снимка</translation>
 <translation id="6596816719288285829">IP адрес</translation>
 <translation id="6618744767048954150">В ход</translation>
 <translation id="6620487321149975369">Заданията за отпечатване ще се показват в историята, освен ако не ги премахнете ръчно</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">Голямо забавяне при преобразуването от DNS</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Използване на този видеоклип</translation>
 <translation id="9087578468327036362">Подаване на сигнал за тази заявка</translation>
 <translation id="9088306295921699330">Текущо използване</translation>
 <translation id="9095415590198785865">Устройството остава в същия собственик</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Тестване на паметта</translation>
 <translation id="9173638680043580060">Остава по-малко от минута</translation>
 <translation id="917720651393141712">Тест</translation>
-<translation id="9190063653747922532">L2TP/IPSec с предварително споделен ключ</translation>
 <translation id="9204237731135241582">Не може да бъде установена връзка с шлюза от приложения за Android</translation>
 <translation id="9211490828691860325">Всички работни кътове</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index 272a691..84af558 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ফায়ারওয়াল রয়েছে বলে মনে হচ্ছে</translation>
 <translation id="4691278870498629773">বন্ধ হয়ে গেছে - ট্রে লাগানো নেই</translation>
 <translation id="469379815867856270">সিগন্যালের ক্ষমতা</translation>
-<translation id="4707579418881001319">L2TP/IPসেকে + ব্যবহারকারীর সার্টিফিকেট</translation>
 <translation id="4731797938093519117">অভিভাবকীয় অ্যাক্সেস</translation>
 <translation id="473775607612524610">আপডেট করুন</translation>
 <translation id="4744944742468440486">আপনার বেছে নেওয়া কন্টেন্টের ব্যাপারে তথ্য</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">মেমরি টেস্ট করুন</translation>
 <translation id="9173638680043580060">এক মিনিটেরও কম সময় বাকি আছে</translation>
 <translation id="917720651393141712">পরীক্ষা করুন</translation>
-<translation id="9190063653747922532">L2TP/IPসেকে + পূর্বে-শেয়ার করা কী</translation>
 <translation id="9204237731135241582">Android অ্যাপ থেকে গেটওয়েতে যোগাযোগ করা যাচ্ছে না</translation>
 <translation id="9211490828691860325">সব ডেক্স</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index a6873b2..c42a3ca 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Sumnja na zaštitni zid</translation>
 <translation id="4691278870498629773">Zaustavljeno – nedostaje ladica za papir</translation>
 <translation id="469379815867856270">Jačina signala</translation>
-<translation id="4707579418881001319">L2TP/IPsec + korisnički certifikat</translation>
 <translation id="4731797938093519117">Pristup roditelja</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4744944742468440486">Informacije u vezi s vašim odabirom</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Pokreni test memorije</translation>
 <translation id="9173638680043580060">Preostalo je manje od minute</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + unaprijed dijeljeni ključ</translation>
 <translation id="9204237731135241582">Nije moguće kontaktirati pristupnika iz Android aplikacija</translation>
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 62d9b3f..089f958 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Nom alternatiu d'assumpte coincident</translation>
 <translation id="4536864596629708641">Configuració de la IP</translation>
+<translation id="4546131424594385779">Crea un vídeo en bucle</translation>
 <translation id="4548483925627140043">No s'ha trobat el senyal</translation>
 <translation id="4556753742174065117">Tot el microprogramari està actualitzat</translation>
 <translation id="455835558791489930">Bateria de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Possible tallafoc</translation>
 <translation id="4691278870498629773">S'ha aturat: no es troba la safata</translation>
 <translation id="469379815867856270">Intensitat del senyal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certificat d'usuari</translation>
 <translation id="4731797938093519117">Accés parental</translation>
 <translation id="473775607612524610">Actualitza</translation>
 <translation id="4744944742468440486">Informació relacionada amb la teva selecció</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Cerca en diverses pàgines</translation>
 <translation id="6574762126505704998">Emplena</translation>
 <translation id="6575134580692778371">No configurat</translation>
+<translation id="6579509898032828423">Utilitza aquesta foto</translation>
 <translation id="6596816719288285829">Adreça IP</translation>
 <translation id="6618744767048954150">Comprovació en curs</translation>
 <translation id="6620487321149975369">Les tasques d'impressió es mostraran a l'historial tret que se suprimeixin manualment</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">La resolució de DNS té una latència alta</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Utilitza aquest vídeo</translation>
 <translation id="9087578468327036362">Informa d'aquesta consulta</translation>
 <translation id="9088306295921699330">Ús actual</translation>
 <translation id="9095415590198785865">El dispositiu es retornarà al mateix propietari</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Executa la prova de memòria</translation>
 <translation id="9173638680043580060">Queda menys d'un minut</translation>
 <translation id="917720651393141712">Prova</translation>
-<translation id="9190063653747922532">L2TP/IPsec + clau precompartida</translation>
 <translation id="9204237731135241582">No es pot contactar amb la passarel·la des d'aplicacions d'Android</translation>
 <translation id="9211490828691860325">Tots els escriptoris</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index 9914367..5480126 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Podezření na Firewall</translation>
 <translation id="4691278870498629773">Zastaveno – chybí zásobník</translation>
 <translation id="469379815867856270">Síla signálu</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certifikát uživatele</translation>
 <translation id="4731797938093519117">Rodičovský přístup</translation>
 <translation id="473775607612524610">Aktualizovat</translation>
 <translation id="4744944742468440486">Informace související s vaším výběrem</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Spustit test paměti</translation>
 <translation id="9173638680043580060">Zbývá méně než minuta</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + předsdílený klíč</translation>
 <translation id="9204237731135241582">Z aplikací pro Android nelze kontaktovat bránu</translation>
 <translation id="9211490828691860325">Všechny plochy</translation>
 <translation id="939519157834106403">Identifikátor SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 17444992..788be1d 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Der er muligvis en firewall</translation>
 <translation id="4691278870498629773">Stoppet – Bakke mangler</translation>
 <translation id="469379815867856270">Signalstyrke</translation>
-<translation id="4707579418881001319">L2TP/IPSec + brugercertifikat</translation>
 <translation id="4731797938093519117">Forældreadgang</translation>
 <translation id="473775607612524610">Opdater</translation>
 <translation id="4744944742468440486">Oplysninger relateret til det, du har markeret</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">Kør hukommelsestest</translation>
 <translation id="9173638680043580060">Mindre end ét minut tilbage</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + forhåndsdelt nøgle</translation>
 <translation id="9204237731135241582">Gateway kan ikke kontaktes fra Android-apps</translation>
 <translation id="9211490828691860325">Alle skriveborde</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 7b54455..a467d0b 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Alternativer Name für Betreff stimmt überein</translation>
 <translation id="4536864596629708641">IP-Konfiguration</translation>
+<translation id="4546131424594385779">Videoschleife erstellen</translation>
 <translation id="4548483925627140043">Signal nicht gefunden</translation>
 <translation id="4556753742174065117">Die Firmware ist auf dem neuesten Stand</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" />-mAh-Akku</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Verdacht auf Firewall</translation>
 <translation id="4691278870498629773">Angehalten – Fach fehlt</translation>
 <translation id="469379815867856270">Signalstärke</translation>
-<translation id="4707579418881001319">L2TP/IPSec + Nutzerzertifikat</translation>
 <translation id="4731797938093519117">Elternzugang</translation>
 <translation id="473775607612524610">Aktualisieren</translation>
 <translation id="4744944742468440486">Informationen in Bezug auf Ihre Auswahl</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Mehrseitiger Scan</translation>
 <translation id="6574762126505704998">Ausfüllen</translation>
 <translation id="6575134580692778371">Nicht konfiguriert</translation>
+<translation id="6579509898032828423">Dieses Foto verwenden</translation>
 <translation id="6596816719288285829">IP-Adresse</translation>
 <translation id="6618744767048954150">Läuft</translation>
 <translation id="6620487321149975369">Druckaufträge erscheinen im Verlauf, solange sie nicht manuell gelöscht werden</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS-Auflösung hat eine hohe Latenz</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Dieses Video verwenden</translation>
 <translation id="9087578468327036362">Diese Anfrage melden</translation>
 <translation id="9088306295921699330">Aktuelle Nutzung</translation>
 <translation id="9095415590198785865">Eigentümer des Geräts ändert sich nicht</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Speichertest ausführen</translation>
 <translation id="9173638680043580060">Nur noch wenige Sekunden</translation>
 <translation id="917720651393141712">Testen</translation>
-<translation id="9190063653747922532">L2TP/IPSec + vorinstallierter Schlüssel</translation>
 <translation id="9204237731135241582">Gateway kann von Android-Apps aus nicht kontaktiert werden</translation>
 <translation id="9211490828691860325">Alle Desktops</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index b26f8f9..78794d6 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Πιθανή ύπαρξη τείχους προστασίας</translation>
 <translation id="4691278870498629773">Διακοπή - Λείπει δίσκος</translation>
 <translation id="469379815867856270">Ισχύς σήματος</translation>
-<translation id="4707579418881001319">L2TP/IPsec + πιστοποιητικό χρήστη</translation>
 <translation id="4731797938093519117">Γονική πρόσβαση</translation>
 <translation id="473775607612524610">Ενημέρωση</translation>
 <translation id="4744944742468440486">Πληροφορίες που σχετίζονται με την επιλογή σας</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Εκτέλεση δοκιμής μνήμης</translation>
 <translation id="9173638680043580060">Απομένει λιγότερο από ένα λεπτό</translation>
 <translation id="917720651393141712">Δοκιμή</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ήδη κοινόχρηστο κλειδί</translation>
 <translation id="9204237731135241582">Δεν είναι δυνατή η επικοινωνία με την πύλη από εφαρμογές Android.</translation>
 <translation id="9211490828691860325">Όλα τα γραφεία</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index 280c3d6..d4f903c 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Firewall suspected</translation>
 <translation id="4691278870498629773">Stopped – tray missing</translation>
 <translation id="469379815867856270">Signal strength</translation>
-<translation id="4707579418881001319">L2TP/IPsec + user certificate</translation>
 <translation id="4731797938093519117">Parent access</translation>
 <translation id="473775607612524610">Update</translation>
 <translation id="4744944742468440486">Info related to your selection</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Run memory test</translation>
 <translation id="9173638680043580060">Less than a minute remaining</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPSec + Preshared key</translation>
 <translation id="9204237731135241582">Can't contact the gateway from Android apps</translation>
 <translation id="9211490828691860325">All desks</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index d37cc8e..c942536b 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Coincidencia del nombre alternativo del sujeto</translation>
 <translation id="4536864596629708641">Configuración de IP</translation>
+<translation id="4546131424594385779">Crear un video en bucle</translation>
 <translation id="4548483925627140043">no se encontró la señal</translation>
 <translation id="4556753742174065117">Todo el firmware está actualizado</translation>
 <translation id="455835558791489930">Batería de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Posible firewall</translation>
 <translation id="4691278870498629773">Se detuvo: falta la bandeja</translation>
 <translation id="469379815867856270">Intensidad de la señal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certificado de usuario</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="4744944742468440486">Información sobre el texto seleccionado</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Escaneo de múltiples páginas</translation>
 <translation id="6574762126505704998">Completar</translation>
 <translation id="6575134580692778371">No está configurado</translation>
+<translation id="6579509898032828423">Usar esta foto</translation>
 <translation id="6596816719288285829">Dirección IP</translation>
 <translation id="6618744767048954150">En ejecución</translation>
 <translation id="6620487321149975369">Los trabajos de impresión aparecerán en el historial, a menos que se quiten manualmente</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">La resolución de DNS tiene alta latencia</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Usar este video</translation>
 <translation id="9087578468327036362">Denuncia esta búsqueda</translation>
 <translation id="9088306295921699330">Uso actual</translation>
 <translation id="9095415590198785865">El dispositivo no cambiará de propietario</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Ejecutar prueba de memoria</translation>
 <translation id="9173638680043580060">Queda menos de un minuto</translation>
 <translation id="917720651393141712">Probar</translation>
-<translation id="9190063653747922532">L2TP/IPsec + clave previamente compartida</translation>
 <translation id="9204237731135241582">No se puede establecer contacto con la puerta de enlace desde apps para Android</translation>
 <translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index 6bdfee8..04a54ca 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Coincidencia de nombre alternativo del sujeto</translation>
 <translation id="4536864596629708641">Configuración de IP</translation>
+<translation id="4546131424594385779">Crear vídeo en bucle</translation>
 <translation id="4548483925627140043">Señal no encontrada</translation>
 <translation id="4556753742174065117">Todo el firmware está actualizado</translation>
 <translation id="455835558791489930">Batería de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">posible cortafuegos</translation>
 <translation id="4691278870498629773">Detenido: falta la bandeja</translation>
 <translation id="469379815867856270">Intensidad de la señal</translation>
-<translation id="4707579418881001319">L2TP/IPSec + Certificado de usuario</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="4744944742468440486">Información relacionada con tu selección</translation>
@@ -449,6 +449,7 @@
 <translation id="6566314079205407217">Escaneado multipágina</translation>
 <translation id="6574762126505704998">Rellenar</translation>
 <translation id="6575134580692778371">Sin configurar</translation>
+<translation id="6579509898032828423">Usar esta foto</translation>
 <translation id="6596816719288285829">Dirección IP</translation>
 <translation id="6618744767048954150">En curso</translation>
 <translation id="6620487321149975369">Los trabajos de impresión aparecerán en el historial a menos que se quiten de forma manual</translation>
@@ -649,6 +650,7 @@
 <translation id="9062831201344759865">La resolución de DNS tiene una latencia alta</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Usar este vídeo</translation>
 <translation id="9087578468327036362">Denunciar esta consulta</translation>
 <translation id="9088306295921699330">Uso actual</translation>
 <translation id="9095415590198785865">El dispositivo no cambiará de propietario</translation>
@@ -662,7 +664,6 @@
 <translation id="9149391708638971077">Realizar prueba de memoria</translation>
 <translation id="9173638680043580060">Queda menos de 1 minuto</translation>
 <translation id="917720651393141712">Prueba</translation>
-<translation id="9190063653747922532">L2TP/IPsec + Clave precompartida</translation>
 <translation id="9204237731135241582">No se puede contactar con la pasarela desde aplicaciones Android</translation>
 <translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index 78ee246..67dfca5 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portaal</translation>
 <translation id="4521826082652183069">Teema alternatiivse nime vaste</translation>
 <translation id="4536864596629708641">IP seadistamine</translation>
+<translation id="4546131424594385779">Loo video kordustsükkel</translation>
 <translation id="4548483925627140043">Signaali ei leitud</translation>
 <translation id="4556753742174065117">Kõik püsivara on ajakohane</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh aku</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Kahtlustatakse tulemüüri</translation>
 <translation id="4691278870498629773">Peatatud – salv on puudu</translation>
 <translation id="469379815867856270">Signaali tugevus</translation>
-<translation id="4707579418881001319">L2TP/IPSec + kasutaja sertifikaat</translation>
 <translation id="4731797938093519117">Vanema juurdepääs</translation>
 <translation id="473775607612524610">Värskenda</translation>
 <translation id="4744944742468440486">Teie valikuga seotud teave</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Mitme lehe skannimine</translation>
 <translation id="6574762126505704998">Täida</translation>
 <translation id="6575134580692778371">Ei ole konfigureeritud</translation>
+<translation id="6579509898032828423">Kasuta seda fotot</translation>
 <translation id="6596816719288285829">IP-aadress</translation>
 <translation id="6618744767048954150">Pooleli</translation>
 <translation id="6620487321149975369">Prinditööd kuvatakse ajaloos, kui neid käsitsi ei eemaldata</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS-i eraldusvõimel on pikk latentsusaeg</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Kasuta seda videot</translation>
 <translation id="9087578468327036362">Teatage sellest päringust</translation>
 <translation id="9088306295921699330">Praegune kasutus</translation>
 <translation id="9095415590198785865">Seade antakse samale omanikule</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Käita mälutest</translation>
 <translation id="9173638680043580060">Jäänud on alla minuti</translation>
 <translation id="917720651393141712">Testi</translation>
-<translation id="9190063653747922532">L2TP/IPSec + eeljagatud võti</translation>
 <translation id="9204237731135241582">Ei saa Androidi rakendustest lüüsiga ühendust</translation>
 <translation id="9211490828691860325">Kõik töölauad</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index 16797db..8cef76f 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Ataria</translation>
 <translation id="4521826082652183069">Gaiaren ordezko izenaren bat-etortzea</translation>
 <translation id="4536864596629708641">IParen konfigurazioa</translation>
+<translation id="4546131424594385779">Sortu errepikatzen den bideo bat</translation>
 <translation id="4548483925627140043">Ez da aurkitu seinalea</translation>
 <translation id="4556753742174065117">Firmwarea eguneratuta dago</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh-ko bateria</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">suebaki bat dagoela dirudi</translation>
 <translation id="4691278870498629773">Geldituta: erretilua falta da</translation>
 <translation id="469379815867856270">Seinalearen indarra</translation>
-<translation id="4707579418881001319">L2TP/IPsec + erabiltzaile-ziurtagiria</translation>
 <translation id="4731797938093519117">Gurasoen sarbidea</translation>
 <translation id="473775607612524610">Eguneratu</translation>
 <translation id="4744944742468440486">Zure hautapenarekin erlazionatutako informazioa</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Hainbat orritako eskaneatzea</translation>
 <translation id="6574762126505704998">Bete</translation>
 <translation id="6575134580692778371">Konfiguratu gabe</translation>
+<translation id="6579509898032828423">Erabili argazkia</translation>
 <translation id="6596816719288285829">IP helbidea</translation>
 <translation id="6618744767048954150">Abian</translation>
 <translation id="6620487321149975369">Inprimatze-lanak historian agertuko dira, eskuz kendu ezean</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS bidezko ebazpenak latentzia handia dauka</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth-a</translation>
+<translation id="9082718469794970195">Erabili bideoa</translation>
 <translation id="9087578468327036362">Salatu kontsulta</translation>
 <translation id="9088306295921699330">Oraingo erabilera</translation>
 <translation id="9095415590198785865">Gailuak jabe bera izaten jarraituko du</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Egin memoriaren proba</translation>
 <translation id="9173638680043580060">Minutu bat baino gutxiago geratzen da</translation>
 <translation id="917720651393141712">Proba</translation>
-<translation id="9190063653747922532">L2TP/IPsec + aurrez partekatutako gakoa</translation>
 <translation id="9204237731135241582">Ezin da jarri harremanetan atebidearekin Android-erako aplikazioetatik</translation>
 <translation id="9211490828691860325">Lan-eremu guztiak</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 36ab48d..cee7885 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">احتمال وجود مشکل در دیوار آتش</translation>
 <translation id="4691278870498629773">متوقف شد - سینی موجود نیست</translation>
 <translation id="469379815867856270">قدرت سیگنال</translation>
-<translation id="4707579418881001319">‏L2TP/IPSec + گواهی کاربر</translation>
 <translation id="4731797938093519117">دسترسی ولی</translation>
 <translation id="473775607612524610">به‌روزرسانی</translation>
 <translation id="4744944742468440486">اطلاعات مرتبط با انتخاب شما</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">اجرای آزمایش حافظه</translation>
 <translation id="9173638680043580060">کمتر از یک دقیقه باقیمانده است</translation>
 <translation id="917720651393141712">آزمایش کردن</translation>
-<translation id="9190063653747922532">‏L2TP/IPSec + کلید از قبل مشترک شده</translation>
 <translation id="9204237731135241582">‏نمی‌توان از برنامه‌های Android با دروازه تماس گرفت</translation>
 <translation id="9211490828691860325">همه میزکارها</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 82ed4bf..6ea3760 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Mahdollinen palomuuri</translation>
 <translation id="4691278870498629773">Pysähtynyt – Lokero puuttuu</translation>
 <translation id="469379815867856270">Signaalin voimakkuus</translation>
-<translation id="4707579418881001319">L2TP/IPsec + käyttäjävarmenne</translation>
 <translation id="4731797938093519117">Avaus vanhemmille</translation>
 <translation id="473775607612524610">Päivitä</translation>
 <translation id="4744944742468440486">Valintaasi liittyviä tietoja</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Suorita muistitesti</translation>
 <translation id="9173638680043580060">Alle minuutti jäljellä</translation>
 <translation id="917720651393141712">Testi</translation>
-<translation id="9190063653747922532">L2TP/IPsec + esijaettu avain</translation>
 <translation id="9204237731135241582">Yhdyskäytävään ei saada yhteyttä Android-sovelluksilla</translation>
 <translation id="9211490828691860325">Kaikki työpöydät</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index 1a16b96b..a13b236 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">May pinaghihinalaang firewall</translation>
 <translation id="4691278870498629773">Huminto - Walang tray</translation>
 <translation id="469379815867856270">Lakas ng Signal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certificate ng user</translation>
 <translation id="4731797938093519117">Pangunahing access</translation>
 <translation id="473775607612524610">I-update</translation>
 <translation id="4744944742468440486">Impormasyong nauugnay sa iyong pinili</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Patakbuhin ang pagsusuri sa Memory</translation>
 <translation id="9173638680043580060">Wala nang isang minuto ang natitira</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + paunang nakabahaging key</translation>
 <translation id="9204237731135241582">Hindi makaugnayan ang gateway mula sa mga Android app</translation>
 <translation id="9211490828691860325">Lahat ng desk</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index e978d8d..4c082c4 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portail</translation>
 <translation id="4521826082652183069">Correspondance du nom alternatif du sujet</translation>
 <translation id="4536864596629708641">Configuration de l'adresse IP</translation>
+<translation id="4546131424594385779">Créer une vidéo en boucle</translation>
 <translation id="4548483925627140043">Signal introuvable</translation>
 <translation id="4556753742174065117">Tous les micrologiciels sont à jour</translation>
 <translation id="455835558791489930">Pile de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Un pare-feu semble être présent</translation>
 <translation id="4691278870498629773">Tâche arrêtée : bac manquant</translation>
 <translation id="469379815867856270">Puissance du signal</translation>
-<translation id="4707579418881001319">L2TP/IPSec et certificat utilisateur</translation>
 <translation id="4731797938093519117">Accès parental</translation>
 <translation id="473775607612524610">Mise à jour</translation>
 <translation id="4744944742468440486">Renseignements concernant votre sélection</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Numérisation de plusieurs pages</translation>
 <translation id="6574762126505704998">Remplir</translation>
 <translation id="6575134580692778371">Non configuré</translation>
+<translation id="6579509898032828423">Utiliser cette photo</translation>
 <translation id="6596816719288285829">Adresse IP</translation>
 <translation id="6618744767048954150">En cours…</translation>
 <translation id="6620487321149975369">Les tâches d'impression s'afficheront dans l'historique, sauf si vous les retirez manuellement</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">La résolution DNS présente une latence élevée</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Utiliser cette vidéo</translation>
 <translation id="9087578468327036362">Signalez cette requête</translation>
 <translation id="9088306295921699330">Utilisation actuelle</translation>
 <translation id="9095415590198785865">L'appareil appartiendra au même propriétaire</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Exécuter le test de mémoire</translation>
 <translation id="9173638680043580060">Il reste moins d'une minute</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPSec + clé prépartagée</translation>
 <translation id="9204237731135241582">Impossible de communiquer avec la passerelle à partir d'applications Android</translation>
 <translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb
index 6628839..34520bbd 100644
--- a/chromeos/strings/chromeos_strings_fr.xtb
+++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portail</translation>
 <translation id="4521826082652183069">Correspondance de l'autre nom de l'objet</translation>
 <translation id="4536864596629708641">Configuration IP</translation>
+<translation id="4546131424594385779">Créer une vidéo en boucle</translation>
 <translation id="4548483925627140043">Signal introuvable</translation>
 <translation id="4556753742174065117">Tous les micrologiciels sont à jour</translation>
 <translation id="455835558791489930">Batterie de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Un pare-feu semble activé</translation>
 <translation id="4691278870498629773">Tâche suspendue - Bac manquant</translation>
 <translation id="469379815867856270">Force du signal</translation>
-<translation id="4707579418881001319">L2TP/IPSec + Certificat utilisateur</translation>
 <translation id="4731797938093519117">Accès parental</translation>
 <translation id="473775607612524610">Mettre à jour</translation>
 <translation id="4744944742468440486">Informations sur le texte sélectionné</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Analyse de plusieurs pages</translation>
 <translation id="6574762126505704998">Remplissage</translation>
 <translation id="6575134580692778371">Non configuré</translation>
+<translation id="6579509898032828423">Utiliser cette photo</translation>
 <translation id="6596816719288285829">Adresse IP</translation>
 <translation id="6618744767048954150">En cours</translation>
 <translation id="6620487321149975369">Les tâches d'impression seront incluses dans l'historique, sauf si vous les supprimez manuellement</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">Latence élevée pour la résolution DNS</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Utiliser cette vidéo</translation>
 <translation id="9087578468327036362">Signaler cette requête</translation>
 <translation id="9088306295921699330">Utilisation actuelle</translation>
 <translation id="9095415590198785865">L'appareil sera transféré au même propriétaire</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Lancer le test de mémoire</translation>
 <translation id="9173638680043580060">Moins d'une minute restante</translation>
 <translation id="917720651393141712">Tester</translation>
-<translation id="9190063653747922532">L2TP/IPSec + Clé pré-partagée</translation>
 <translation id="9204237731135241582">Impossible de contacter la passerelle depuis les applis Android</translation>
 <translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb
index db7af7f..b247226 100644
--- a/chromeos/strings/chromeos_strings_gl.xtb
+++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Coincidencia do nome alternativo do asunto</translation>
 <translation id="4536864596629708641">Configuración IP</translation>
+<translation id="4546131424594385779">Crear vídeo en bucle</translation>
 <translation id="4548483925627140043">Non se atopou o sinal</translation>
 <translation id="4556753742174065117">Todo o firmware está actualizado</translation>
 <translation id="455835558791489930">Batería de <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Posible firewall</translation>
 <translation id="4691278870498629773">Detívose (falta a bandexa)</translation>
 <translation id="469379815867856270">Intensidade do sinal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certificado de usuario</translation>
 <translation id="4731797938093519117">Acceso parental</translation>
 <translation id="473775607612524610">Actualizar</translation>
 <translation id="4744944742468440486">Información relacionada coa túa selección</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Escaneo de varias páxinas</translation>
 <translation id="6574762126505704998">Completar</translation>
 <translation id="6575134580692778371">Non configurado</translation>
+<translation id="6579509898032828423">Usar esta foto</translation>
 <translation id="6596816719288285829">Enderezo IP</translation>
 <translation id="6618744767048954150">En execución</translation>
 <translation id="6620487321149975369">Os traballos de impresión aparecerán no historial a menos que os quites de xeito manual</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">A resolución de DNS ten latencia alta</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Usar este vídeo</translation>
 <translation id="9087578468327036362">Informar desta consulta</translation>
 <translation id="9088306295921699330">En uso</translation>
 <translation id="9095415590198785865">Non vai cambiar a propiedade do dispositivo</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Realizar proba de memoria</translation>
 <translation id="9173638680043580060">Queda menos dun minuto</translation>
 <translation id="917720651393141712">Probar</translation>
-<translation id="9190063653747922532">L2TP/IPsec + clave precompartida</translation>
 <translation id="9204237731135241582">Non se puido establecer contacto coa pasarela desde aplicacións Android</translation>
 <translation id="9211490828691860325">Todos os ordenadores</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb
index 93ac702..54d03816 100644
--- a/chromeos/strings/chromeos_strings_gu.xtb
+++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ફાયરવૉલ હોવાની શક્યતા છે</translation>
 <translation id="4691278870498629773">બંધ - ટ્રે ખૂટે છે</translation>
 <translation id="469379815867856270">સિગ્નલની પ્રબળતા</translation>
-<translation id="4707579418881001319">L2TP/IPsec + વપરાશકર્તા પ્રમાણપત્ર</translation>
 <translation id="4731797938093519117">માતાપિતા માટે ઍક્સેસ</translation>
 <translation id="473775607612524610">અપડેટ કરો</translation>
 <translation id="4744944742468440486">તમારી પસંદગી સંબંધિત માહિતી</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">મેમરીનું પરીક્ષણ ચાલુ કરો</translation>
 <translation id="9173638680043580060">એક મિનિટ કરતાં ઓછો સમય બાકી છે</translation>
 <translation id="917720651393141712">પરીક્ષણ કરો</translation>
-<translation id="9190063653747922532">L2TP/IPsec + પૂર્વ-શેર કરેલી કી</translation>
 <translation id="9204237731135241582">Android ઍપથી ગેટવે સાથે સંપર્ક કરી શકતા નથી</translation>
 <translation id="9211490828691860325">તમામ ડેસ્ક</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index aad6a6c..d5ca711 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">फ़ायरवॉल हो सकता है</translation>
 <translation id="4691278870498629773">बंद हो गया - ट्रे नहीं है</translation>
 <translation id="469379815867856270">सिग्नल की क्षमता</translation>
-<translation id="4707579418881001319">L2TP/IPsec + उपयोगकर्ता प्रमाणपत्र</translation>
 <translation id="4731797938093519117">अभिभावक ऐक्सेस</translation>
 <translation id="473775607612524610">अपडेट करें</translation>
 <translation id="4744944742468440486">आपके चुने गए कॉन्टेंट से जुड़ी जानकारी</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">मेमोरी टेस्ट चलाएं</translation>
 <translation id="9173638680043580060">एक मिनट से कम बचा है</translation>
 <translation id="917720651393141712">टेस्ट</translation>
-<translation id="9190063653747922532">L2TP/IPsec + पूर्व-शेयर कुंजी</translation>
 <translation id="9204237731135241582">Android ऐप्लिकेशन से, गेटवे के साथ संपर्क नहीं किया जा सकता</translation>
 <translation id="9211490828691860325">सभी डेस्क</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index 3ed5393..138649d 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Moguć je vatrozid</translation>
 <translation id="4691278870498629773">Zaustavljeno – nema ladice</translation>
 <translation id="469379815867856270">Jakost signala</translation>
-<translation id="4707579418881001319">L2TP/IPsec + korisnički certifikat</translation>
 <translation id="4731797938093519117">Roditeljski pristup</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4744944742468440486">Informacije o vašem odabiru</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Pokreni test memorije</translation>
 <translation id="9173638680043580060">Preostalo je manje od minute</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + unaprijed dijeljeni ključ</translation>
 <translation id="9204237731135241582">Kontaktiranje pristupnika iz Android aplikacija nije uspjelo</translation>
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index 9f3a2a73..13e78d4 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Tűzfal valószínűsíthető</translation>
 <translation id="4691278870498629773">Leállt – Hiányzó tálca</translation>
 <translation id="469379815867856270">Jelerősség</translation>
-<translation id="4707579418881001319">L2TP/IPSec + felhasználói tanúsítvány</translation>
 <translation id="4731797938093519117">Szülői hozzáférés</translation>
 <translation id="473775607612524610">Frissítés</translation>
 <translation id="4744944742468440486">A kiválasztott elemhez kapcsolódó információ</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Memóriateszt futtatása</translation>
 <translation id="9173638680043580060">Kevesebb mint 1 perc van hátra</translation>
 <translation id="917720651393141712">Tesztmérkőzés</translation>
-<translation id="9190063653747922532">L2TP/IPSec + előre megosztott kulcs</translation>
 <translation id="9204237731135241582">Nem lehet csatlakozni az átjáróhoz androidos alkalmazásokról</translation>
 <translation id="9211490828691860325">Az összes asztal</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index 4bed9b3..a378fd5e 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Հնարավոր է, որ հրապատ կա</translation>
 <translation id="4691278870498629773">Դադարեցվել է – Դարակը բացակայում է</translation>
 <translation id="469379815867856270">Ազդանշանի հզորությունը</translation>
-<translation id="4707579418881001319">L2TP/IPsec + օգտատիրոջ վկայագիր</translation>
 <translation id="4731797938093519117">Ծնողի մուտք</translation>
 <translation id="473775607612524610">Թարմացնել</translation>
 <translation id="4744944742468440486">Տեղեկություններ ձեր ընտրության վերաբերյալ</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Փորձարկել հիշողությունը</translation>
 <translation id="9173638680043580060">Մնացել է մեկ րոպեից քիչ</translation>
 <translation id="917720651393141712">Ստուգում</translation>
-<translation id="9190063653747922532">L2TP/IPsec + հանրային բանալի</translation>
 <translation id="9204237731135241582">Չհաջողվեց կապ հաստատել անցախուցի հետ Android հավելվածներից</translation>
 <translation id="9211490828691860325">Բոլոր աշխատասեղանները</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index 4f1ca0b..ec1e5138 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Firewall dicurigai</translation>
 <translation id="4691278870498629773">Dihentikan - Tidak ada baki</translation>
 <translation id="469379815867856270">Kekuatan Sinyal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + sertifikat pengguna</translation>
 <translation id="4731797938093519117">Akses orang tua</translation>
 <translation id="473775607612524610">Perbarui</translation>
 <translation id="4744944742468440486">Info terkait pilihan Anda</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Jalankan pengujian Memori</translation>
 <translation id="9173638680043580060">Kurang dari satu menit lagi</translation>
 <translation id="917720651393141712">Uji</translation>
-<translation id="9190063653747922532">L2TP/IPSec + kunci yang dibagikan sebelumnya</translation>
 <translation id="9204237731135241582">Tidak dapat terhubung ke gateway dari aplikasi Android</translation>
 <translation id="9211490828691860325">Semua desktop</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb
index cc3a562d..1998ee3 100644
--- a/chromeos/strings/chromeos_strings_is.xtb
+++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Gátt</translation>
 <translation id="4521826082652183069">Samsvarandi auknefni viðfangs</translation>
 <translation id="4536864596629708641">IP-stilling</translation>
+<translation id="4546131424594385779">Búa til myndskeiðslúppu</translation>
 <translation id="4548483925627140043">Merki fannst ekki</translation>
 <translation id="4556753742174065117">Allur fastbúnaður er uppfærður</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh rafhlaða</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Grunur um eldvegg</translation>
 <translation id="4691278870498629773">Stöðvað – bakka vantar</translation>
 <translation id="469379815867856270">Sendistyrkur</translation>
-<translation id="4707579418881001319">L2TP/IPsec + notandavottorð</translation>
 <translation id="4731797938093519117">Foreldraaðgangur</translation>
 <translation id="473775607612524610">Uppfæra</translation>
 <translation id="4744944742468440486">Upplýsingar sem tengjast vali þínu</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Fjölsíðuskönnun</translation>
 <translation id="6574762126505704998">Fylling</translation>
 <translation id="6575134580692778371">Ekki stillt</translation>
+<translation id="6579509898032828423">Nota þessa mynd</translation>
 <translation id="6596816719288285829">IP-tala</translation>
 <translation id="6618744767048954150">Í gangi</translation>
 <translation id="6620487321149975369">Prentverk birtast í ferli nema þau séu fjarlægð handvirkt</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">Mikill biðtími á DNS-lausn</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Nota þetta myndskeið</translation>
 <translation id="9087578468327036362">Tilkynna þessa fyrirspurn</translation>
 <translation id="9088306295921699330">Núverandi notkun</translation>
 <translation id="9095415590198785865">Tækið verður afhent sama notanda</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Keyra minnispróf</translation>
 <translation id="9173638680043580060">Innan við mínúta eftir</translation>
 <translation id="917720651393141712">Prófa</translation>
-<translation id="9190063653747922532">L2TP/IPsec + PSK-lykill</translation>
 <translation id="9204237731135241582">Ekki er hægt að tengjast gátt úr Android forritum</translation>
 <translation id="9211490828691860325">Öll skrifborð</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index 714722e..c07d77d 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Il sistema sospetta la presenza di un firewall</translation>
 <translation id="4691278870498629773">Operazione interrotta - Vassoio mancante</translation>
 <translation id="469379815867856270">Intensità segnale</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certificato utente</translation>
 <translation id="4731797938093519117">Accesso genitore</translation>
 <translation id="473775607612524610">Aggiorna</translation>
 <translation id="4744944742468440486">Informazioni relative al testo selezionato</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Esegui test memoria</translation>
 <translation id="9173638680043580060">Manca meno di un minuto</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPSec + chiave precondivisa</translation>
 <translation id="9204237731135241582">Impossibile contattare il gateway da app Android</translation>
 <translation id="9211490828691860325">Tutte le scrivanie</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb
index 30b13572..921fcaa 100644
--- a/chromeos/strings/chromeos_strings_iw.xtb
+++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">פורטל</translation>
 <translation id="4521826082652183069">התאמה של שמות נושאים חלופיים</translation>
 <translation id="4536864596629708641">‏תצורת IP</translation>
+<translation id="4546131424594385779">יצירה של סרטון שחוזר על עצמו</translation>
 <translation id="4548483925627140043">לא אותר אות</translation>
 <translation id="4556753742174065117">הקושחה מעודכנת במלואה</translation>
 <translation id="455835558791489930">סוללה בהספק של <ph name="CHARGE_VALUE" /> מיליאמפר לשעה</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">חומת אש חשודה</translation>
 <translation id="4691278870498629773">הפסיקה – המגש חסר</translation>
 <translation id="469379815867856270">עוצמת אות</translation>
-<translation id="4707579418881001319">‏L2TP/‏IPSec + אישור משתמש</translation>
 <translation id="4731797938093519117">גישת הורים</translation>
 <translation id="473775607612524610">עדכון</translation>
 <translation id="4744944742468440486">מידע בקשר לבחירה שלך</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">סריקה של מספר דפים</translation>
 <translation id="6574762126505704998">מילוי המסך</translation>
 <translation id="6575134580692778371">לא הוגדר</translation>
+<translation id="6579509898032828423">שימוש בתמונה הזו</translation>
 <translation id="6596816719288285829">‏כתובת IP</translation>
 <translation id="6618744767048954150">הבדיקה מתבצעת עכשיו</translation>
 <translation id="6620487321149975369">משימות הדפסה יופיעו תחת היסטוריה אלא אם הן הוסרו ידנית</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">‏זמן האחזור של רזולוציית ה-DNS ארוך</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">שימוש בסרטון הזה</translation>
 <translation id="9087578468327036362">דיווח על השאילתה הזו</translation>
 <translation id="9088306295921699330">שימוש נוכחי</translation>
 <translation id="9095415590198785865">הבעלות על המכשיר לא תשתנה</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">הפעלה של בדיקת זיכרון</translation>
 <translation id="9173638680043580060">נותרה פחות מדקה</translation>
 <translation id="917720651393141712">בדיקה</translation>
-<translation id="9190063653747922532">‏L2TP/‏IPSec + מפתח משותף מראש</translation>
 <translation id="9204237731135241582">‏לא ניתן ליצור קשר עם השער מאפליקציות ל-Android</translation>
 <translation id="9211490828691860325">כל שולחנות העבודה הווירטואליים</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index 5d2cdb8..4df90f7d 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -236,6 +236,7 @@
 <translation id="4145784616224233563">HTTP ファイアウォール</translation>
 <translation id="4147897805161313378">Google フォト</translation>
 <translation id="4155551848414053977">スキャナの電源がオンになっていて、ネットワーク経由または直接接続して使用できることを確認してください</translation>
+<translation id="4170180284036919717">写真を撮る</translation>
 <translation id="4170700058716978431">失敗</translation>
 <translation id="4176463684765177261">停止中</translation>
 <translation id="4213104098953699324">USB キーボード</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">ファイアウォールの可能性があります</translation>
 <translation id="4691278870498629773">停止 - トレイなし</translation>
 <translation id="469379815867856270">電波強度</translation>
-<translation id="4707579418881001319">L2TP/IPSec + ユーザー証明書</translation>
 <translation id="4731797938093519117">保護者によるアクセス</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="4744944742468440486">選択した項目に関連する情報</translation>
@@ -665,7 +665,6 @@
 <translation id="9149391708638971077">メモリテストを実行</translation>
 <translation id="9173638680043580060">残り 1 分未満</translation>
 <translation id="917720651393141712">テスト</translation>
-<translation id="9190063653747922532">L2TP/IPSec + 事前共有鍵</translation>
 <translation id="9204237731135241582">Android アプリからゲートウェイにアクセスできません</translation>
 <translation id="9211490828691860325">すべてのデスク</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb
index 0e3f32d9..0f89f4a 100644
--- a/chromeos/strings/chromeos_strings_ka.xtb
+++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">სავარაუდოდ, გამოიყენება ქსელის დაცვა</translation>
 <translation id="4691278870498629773">გაჩერდა — ლანგარი აკლია</translation>
 <translation id="469379815867856270">სიგნალის სიძლიერე</translation>
-<translation id="4707579418881001319">L2TP/IPsec + მომხმარებლის სერტიფიკატი</translation>
 <translation id="4731797938093519117">მშობლის წვდომა</translation>
 <translation id="473775607612524610">განახლება</translation>
 <translation id="4744944742468440486">თქვენს არჩევანთან დაკავშირებული ინფორმაცია</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">მეხსიერების ტესტის გაშვება</translation>
 <translation id="9173638680043580060">დარჩენილია ერთ წუთზე ნაკლები</translation>
 <translation id="917720651393141712">შემოწმება</translation>
-<translation id="9190063653747922532">L2TP/IPsec + წინასწარ გაზიარებული გასაღები</translation>
 <translation id="9204237731135241582">გეითვეისთან დაკავშირება ვერ ხერხდება Android აპების მეშვეობით</translation>
 <translation id="9211490828691860325">ყველა სამუშაო მაგიდა</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 8b5cb1fe..2f6cee66 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Брандмауэр болуы мүмкін.</translation>
 <translation id="4691278870498629773">Тоқтатылды: науа жоқ</translation>
 <translation id="469379815867856270">Сигнал күші</translation>
-<translation id="4707579418881001319">L2TP/IPsec + пайдаланушы сертификаты</translation>
 <translation id="4731797938093519117">Ата-ананың кіру рұқсаты</translation>
 <translation id="473775607612524610">Жаңарту</translation>
 <translation id="4744944742468440486">Таңдауға қатысты ақпарат</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">Жад тексерісін іске қосу</translation>
 <translation id="9173638680043580060">Бір минутқа жетпейтін уақыт қалды.</translation>
 <translation id="917720651393141712">Тексеру</translation>
-<translation id="9190063653747922532">L2TP/IPsec + алдын ала бөлісілген кілт</translation>
 <translation id="9204237731135241582">Android қолданбаларынан шлюзге қосылу мүмкін емес.</translation>
 <translation id="9211490828691860325">Барлық жұмыс үстелдері</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index fcc9689..75ac0db 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">បានសន្មតថា​ជាជញ្ជាំងភ្លើង</translation>
 <translation id="4691278870498629773">បានឈប់ - បាត់ថាស​ដាក់ក្រដាស</translation>
 <translation id="469379815867856270">កម្លាំងរលកសញ្ញា</translation>
-<translation id="4707579418881001319">L2TP/IPsec + វិញ្ញាបនប័ត្រអ្នកប្រើ</translation>
 <translation id="4731797938093519117">សិទ្ធិចូលប្រើប្រាស់​សម្រាប់មាតាបិតា</translation>
 <translation id="473775607612524610">ធ្វើបច្ចុប្បន្នភាព</translation>
 <translation id="4744944742468440486">ព័ត៌មានពាក់ព័ន្ធនឹងការជ្រើសរើសរបស់អ្នក</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">ដំណើរការតេស្តអង្គចងចាំ</translation>
 <translation id="9173638680043580060">នៅសល់​តិច​ជាង​មួយ​នាទី</translation>
 <translation id="917720651393141712">ធ្វើតេស្ត</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ប៊ូតុង pre-shared</translation>
 <translation id="9204237731135241582">មិនអាចទាក់ទងច្រកពីកម្មវិធី Android បានទេ</translation>
 <translation id="9211490828691860325">តុនិម្មិត​ទាំងអស់</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index 5d676d4f9..133b2cb 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ಫೈರ್‌ವಾಲ್ ಇದೆ ಎಂಬ ಅನುಮಾನವಿದೆ</translation>
 <translation id="4691278870498629773">ನಿಲ್ಲಿಸಲಾಗಿದೆ - ಟ್ರೇ ಇಲ್ಲ</translation>
 <translation id="469379815867856270">ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ</translation>
-<translation id="4707579418881001319">L2TP/IPSec + ಬಳಕೆದಾರರ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="4731797938093519117">ಪೋಷಕ ಪ್ರವೇಶ ಬಟನ್‌</translation>
 <translation id="473775607612524610">ಅಪ್‌ಡೇಟ್‌‌</translation>
 <translation id="4744944742468440486">ನಿಮ್ಮ ಆಯ್ಕೆಗೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿ</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">ಮೆಮೊರಿ ಪರೀಕ್ಷೆ ರನ್ ಮಾಡಿ</translation>
 <translation id="9173638680043580060">ಒಂದು ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯ ಉಳಿದಿದೆ</translation>
 <translation id="917720651393141712">ಪರೀಕ್ಷೆ</translation>
-<translation id="9190063653747922532">L2TP/IPSec + ಪೂರ್ವ ಹಂಚಿತ ಕೀಲಿ</translation>
 <translation id="9204237731135241582">Android ಆ್ಯಪ್‌ಗಳ ಮೂಲಕ ಗೇಟ್‌ವೇ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ</translation>
 <translation id="9211490828691860325">ಎಲ್ಲಾ ಡೆಸ್ಕ್‌ಗಳು</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index fe3fb03..ce157ec 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">방화벽 의심됨</translation>
 <translation id="4691278870498629773">중지됨 - 배지대 없음</translation>
 <translation id="469379815867856270">신호 강도</translation>
-<translation id="4707579418881001319">L2TP/IPSec + 사용자 인증서</translation>
 <translation id="4731797938093519117">부모 액세스</translation>
 <translation id="473775607612524610">업데이트</translation>
 <translation id="4744944742468440486">선택 항목 관련 정보</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">메모리 테스트 실행</translation>
 <translation id="9173638680043580060">1분 미만 남음</translation>
 <translation id="917720651393141712">테스트</translation>
-<translation id="9190063653747922532">L2TP/IPSec + 사전 공유 키</translation>
 <translation id="9204237731135241582">Android 앱에서 게이트웨이에 접근할 수 없습니다.</translation>
 <translation id="9211490828691860325">모든 데스크</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index 5d51065..070e5ec 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Тармактык коргоо бар окшойт</translation>
 <translation id="4691278870498629773">Токтоду – Түпкүч жок</translation>
 <translation id="469379815867856270">Сигналдын күчү</translation>
-<translation id="4707579418881001319">L2TP/IPsec + колдонуучунун тастыктамасы</translation>
 <translation id="4731797938093519117">Ата-эненин кирүү уруксаты</translation>
 <translation id="473775607612524610">Жаңыртуу</translation>
 <translation id="4744944742468440486">Тандаган нерсеңизге тиешелүү маалымат</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Эстутумду сыноо</translation>
 <translation id="9173638680043580060">Бир мүнөткө жетпеген убакыт калды</translation>
 <translation id="917720651393141712">Сыноо</translation>
-<translation id="9190063653747922532">L2TP/IPsec + алдын-ала бөлүшүлгөн ачкыч</translation>
 <translation id="9204237731135241582">Android колдонмолорунан шлюзга туташпай жатат</translation>
 <translation id="9211490828691860325">Бардык иш такталар</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index 7f01d766..5b9ea59 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ສົງໄສວ່າເປັນ Firewall</translation>
 <translation id="4691278870498629773">ຢຸດພິມ, ບໍ່ມີຖາດເຈ້ຍ</translation>
 <translation id="469379815867856270">ຄວາມແຮງສັນຍານ</translation>
-<translation id="4707579418881001319">L2TP/IPsec + ໃບຢັ້ງຢືນຜູ້ໃຊ້</translation>
 <translation id="4731797938093519117">ສິດເຂົ້າເຖິງຂອງພໍ່ແມ່</translation>
 <translation id="473775607612524610">ອັບເດດ</translation>
 <translation id="4744944742468440486">ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການເລືອກຂອງທ່ານ</translation>
@@ -667,7 +666,6 @@
 <translation id="9149391708638971077">ດຳເນີນການທົດສອບຄວາມຈຳ</translation>
 <translation id="9173638680043580060">ເຫຼືອບໍ່ຮອດໜຶ່ງນາທີ</translation>
 <translation id="917720651393141712">ທົດສອບ</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ປຸ່ມແຊຣ໌ກ່ອນ</translation>
 <translation id="9204237731135241582">ບໍ່ສາມາດຕິດຕໍ່ຫາເກດເວຈາກແອັບ Android ໄດ້</translation>
 <translation id="9211490828691860325">ໂຕະທັງໝົດ</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 9606078..ef5785b 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portalas</translation>
 <translation id="4521826082652183069">Alternatyvaus subjekto pavadinimo atitiktis</translation>
 <translation id="4536864596629708641">IP konfigūracija</translation>
+<translation id="4546131424594385779">Sukurti vaizdo įrašo ciklą</translation>
 <translation id="4548483925627140043">Signalas nerastas</translation>
 <translation id="4556753742174065117">Visa programinė aparatinė įranga atnaujinta</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh akumuliatorius</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Įtariama užkarda</translation>
 <translation id="4691278870498629773">Sustabdyta – nėra dėklo</translation>
 <translation id="469379815867856270">Signalo stiprumas</translation>
-<translation id="4707579418881001319">L2TP / „IPsec“ ir naudotojo sertifikatas</translation>
 <translation id="4731797938093519117">Tėvų prieiga</translation>
 <translation id="473775607612524610">Atnaujinti</translation>
 <translation id="4744944742468440486">Informacija, susijusi su jūsų pasirinkimu</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Kelių puslapių nuskaitymas</translation>
 <translation id="6574762126505704998">Užpildyti</translation>
 <translation id="6575134580692778371">Nesukonfigūruota</translation>
+<translation id="6579509898032828423">Naudoti šią nuotrauką</translation>
 <translation id="6596816719288285829">IP adresas</translation>
 <translation id="6618744767048954150">Vykdoma</translation>
 <translation id="6620487321149975369">Spausdinimo užduotys bus rodomos istorijoje, nebent bus pašalintos neautomatiškai</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS pavadinimų konvertavimo delsa didelė</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Naudoti šį vaizdo įrašą</translation>
 <translation id="9087578468327036362">Pranešti apie šią užklausą</translation>
 <translation id="9088306295921699330">Dabartinis naudojimas</translation>
 <translation id="9095415590198785865">Įrenginys bus perduotas tam pačiam savininkui</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Vykdyti atminties bandymą</translation>
 <translation id="9173638680043580060">Liko mažiau nei minutė</translation>
 <translation id="917720651393141712">Bandyti</translation>
-<translation id="9190063653747922532">L2TP / „IPSec“ ir iš anksto bendrinamas raktas</translation>
 <translation id="9204237731135241582">Iš „Android“ programų prie tinklų sietuvo prisijungti nepavyko</translation>
 <translation id="9211490828691860325">Visi darbalaukiai</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb
index 901ab6d..33f7509 100644
--- a/chromeos/strings/chromeos_strings_lv.xtb
+++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portāls</translation>
 <translation id="4521826082652183069">Subjekta alternatīvā nosaukuma atbilstība</translation>
 <translation id="4536864596629708641">IP konfigurācija</translation>
+<translation id="4546131424594385779">Izveidot videoklipu, kas tiek atkārtots</translation>
 <translation id="4548483925627140043">Signāls nav atrasts</translation>
 <translation id="4556753742174065117">Visa aparātprogrammatūra ir atjaunināta</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh akumulators</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Aizdomas par ugunsmūri</translation>
 <translation id="4691278870498629773">Apturēts — trūkst paliktņa</translation>
 <translation id="469379815867856270">Signāla stiprums</translation>
-<translation id="4707579418881001319">L2TP/IPSec + lietotāja sertifikāts</translation>
 <translation id="4731797938093519117">Vecāku piekļuve</translation>
 <translation id="473775607612524610">Atjaunināt</translation>
 <translation id="4744944742468440486">Ar atlasīto saturu saistīta informācija</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Vairāku lapu skenēšana</translation>
 <translation id="6574762126505704998">Aizpildīt</translation>
 <translation id="6575134580692778371">Nav konfigurēts</translation>
+<translation id="6579509898032828423">Izmantot šo fotoattēlu</translation>
 <translation id="6596816719288285829">IP adrese</translation>
 <translation id="6618744767048954150">Notiek pārbaude</translation>
 <translation id="6620487321149975369">Drukas uzdevumi būs redzami vēsturē, ja vien tie netiks noņemti manuāli</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS atrisei ir augsts latentums</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Izmantot šo videoklipu</translation>
 <translation id="9087578468327036362">Ziņot par šo vaicājumu</translation>
 <translation id="9088306295921699330">Pašreizējais lietojums</translation>
 <translation id="9095415590198785865">Ierīcei būs tas pats īpašnieks</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Veikt atmiņas pārbaudi</translation>
 <translation id="9173638680043580060">Atlicis mazāk par minūti</translation>
 <translation id="917720651393141712">Testēt</translation>
-<translation id="9190063653747922532">L2TP/IPSec + iepriekš kopīgota atslēga</translation>
 <translation id="9204237731135241582">Nevar sazināties ar vārteju no Android lietotnēm</translation>
 <translation id="9211490828691860325">Visas darbvietas</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb
index 9b78a2c..6d6dd26 100644
--- a/chromeos/strings/chromeos_strings_mk.xtb
+++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Можеби има заштитен ѕид</translation>
 <translation id="4691278870498629773">Запрено - недостасува фиоката</translation>
 <translation id="469379815867856270">Јачина на сигналот</translation>
-<translation id="4707579418881001319">L2TP/IPsec + сертификат на корисник</translation>
 <translation id="4731797938093519117">Пристап за родители</translation>
 <translation id="473775607612524610">Ажурирај</translation>
 <translation id="4744944742468440486">Информации поврзани со вашиот избор</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Изврши тест за меморија</translation>
 <translation id="9173638680043580060">Преостанува помалку од една минута</translation>
 <translation id="917720651393141712">Тест</translation>
-<translation id="9190063653747922532">L2TP/IPsec + претходно споделен клуч</translation>
 <translation id="9204237731135241582">Не може да се стапи во контакт со портал од апликации на Android</translation>
 <translation id="9211490828691860325">Сите работни површини</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index 5bed22e9..e1ec5a6b 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ഫയർവാൾ ഉണ്ടെന്ന് സംശയിക്കുന്നു</translation>
 <translation id="4691278870498629773">പ്രിന്റ് ജോലി നിർത്തി - ട്രേ കാണുന്നില്ല</translation>
 <translation id="469379815867856270">സിഗ്‌നൽ ശക്തി</translation>
-<translation id="4707579418881001319">L2TP/IPSec + ഉപയോക്തൃ സർട്ടിഫിക്കറ്റ്</translation>
 <translation id="4731797938093519117">രക്ഷാകർതൃ ആക്‌സസ്</translation>
 <translation id="473775607612524610">അപ്ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="4744944742468440486">നിങ്ങളുടെ തിരഞ്ഞെടുപ്പുമായി ബന്ധപ്പെട്ട വിവരങ്ങൾ</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">മെമ്മറി ടെസ്റ്റ് റണ്‍ ചെയ്യുക</translation>
 <translation id="9173638680043580060">ഒരു മിനിറ്റിലും താഴെ ശേഷിക്കുന്നു</translation>
 <translation id="917720651393141712">ടെസ്‌റ്റ്</translation>
-<translation id="9190063653747922532">L2TP/IPsec + മുമ്പ് പങ്കിട്ട കീ</translation>
 <translation id="9204237731135241582">Android ആപ്പുകളിൽ നിന്ന് ഗേറ്റ്‌വേയുമായി ബന്ധപ്പെടാനാകുന്നില്ല</translation>
 <translation id="9211490828691860325">എല്ലാ ഡെസ്കുകളും</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index 8732be7..c4ea5df 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Галт хана байж магадгүй</translation>
 <translation id="4691278870498629773">Зогссон - Цаасны тэвш алга</translation>
 <translation id="469379815867856270">Дохионы хүч</translation>
-<translation id="4707579418881001319">L2TP/IPsec + хэрэглэгчийн гэрчилгээ</translation>
 <translation id="4731797938093519117">Эцэг эхийн хандалт</translation>
 <translation id="473775607612524610">Шинэчлэх</translation>
 <translation id="4744944742468440486">Таны сонголттой холбоотой мэдээлэл</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Санах ойн туршилтыг ажиллуулах</translation>
 <translation id="9173638680043580060">Минут хүрэхгүй хугацаа үлдлээ</translation>
 <translation id="917720651393141712">Шалгалт</translation>
-<translation id="9190063653747922532">L2TP/IPsec + урьдчилан хуваалцсан түлхүүр</translation>
 <translation id="9204237731135241582">Android аппуудаас гэйтвэйтэй холбогдох боломжгүй</translation>
 <translation id="9211490828691860325">Бүх дэлгэц</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 9df3733..3a5de6d 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">फायरवॉल असू शकते</translation>
 <translation id="4691278870498629773">थांबले - ट्रे गहाळ आहे</translation>
 <translation id="469379815867856270">सिग्नल क्षमता</translation>
-<translation id="4707579418881001319">L2TP/IPsec + वापरकर्ता सर्टिफिकेट</translation>
 <translation id="4731797938093519117">पालक अ‍ॅक्सेस</translation>
 <translation id="473775607612524610">अपडेट करा</translation>
 <translation id="4744944742468440486">तुमच्या निवडीशी संबंधित माहिती</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">मेमरी चाचणी रन करा</translation>
 <translation id="9173638680043580060">एका मिनिटापेक्षा कमी वेळ शिल्लक आहे</translation>
 <translation id="917720651393141712">चाचणी करा</translation>
-<translation id="9190063653747922532">L2TP/IPSec + पूर्व-शेअर की</translation>
 <translation id="9204237731135241582">Android अ‍ॅप्सवरून गेटवेशी संपर्क साधू शकत नाही</translation>
 <translation id="9211490828691860325">सर्व डेस्क</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index 78853cc2..b0683c8 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Disyaki tembok api</translation>
 <translation id="4691278870498629773">Dihentikan - Dulang tiada</translation>
 <translation id="469379815867856270">Kekuatan Isyarat</translation>
-<translation id="4707579418881001319">L2TP/IPsec + sijil pengguna</translation>
 <translation id="4731797938093519117">Akses ibu bapa</translation>
 <translation id="473775607612524610">Kemas kini</translation>
 <translation id="4744944742468440486">Maklumat yang berkaitan dengan pilihan anda</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Jalankan Ujian memori</translation>
 <translation id="9173638680043580060">Kurang seminit lagi</translation>
 <translation id="917720651393141712">Ujian</translation>
-<translation id="9190063653747922532">L2TP/IPsec + kekunci praperkongsian</translation>
 <translation id="9204237731135241582">Tidak dapat menghubungi get laluan daripada apl Android</translation>
 <translation id="9211490828691860325">Semua meja</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index c411fd6c..db9660ac 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Firewall ကို သံသယရှိသည်</translation>
 <translation id="4691278870498629773">ရပ်သွားသည် - ဗန်းမရှိပါ</translation>
 <translation id="469379815867856270">လိုင်းဆွဲအား</translation>
-<translation id="4707579418881001319">L2TP/IPsec + အသုံးပြုသူ လက်မှတ်</translation>
 <translation id="4731797938093519117">မိဘ သုံးခွင့်</translation>
 <translation id="473775607612524610">အပ်ဒိတ်လုပ်ရန်</translation>
 <translation id="4744944742468440486">သင်ရွေးထားသည့်အရာနှင့် သက်ဆိုင်သည့် အချက်အလက်များ</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">မှတ်ဉာဏ်စစ်ဆေးရန်</translation>
 <translation id="9173638680043580060">တစ်မိနစ်ပင် မကျန်တော့ပါ</translation>
 <translation id="917720651393141712">စမ်းသပ်မှု</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ကြိုတင်-မျှဝေထား သော့</translation>
 <translation id="9204237731135241582">Android အက်ပ်များမှ ဂိတ်ဝကို ဆက်သွယ်၍မရပါ</translation>
 <translation id="9211490828691860325">မျက်နှာပြင်နေရာအားလုံး</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 0a68e62..e868177 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -281,7 +281,6 @@
 <translation id="467715984478005772">फायरवालका कारणले हुन सक्छ</translation>
 <translation id="4691278870498629773">रोकियो - प्रिन्टरमा ट्रे छैन</translation>
 <translation id="469379815867856270">सिग्नलको क्षमता</translation>
-<translation id="4707579418881001319">L2TP/IPsec + प्रयोगकर्ता सर्टिफिकेट</translation>
 <translation id="4731797938093519117">अभिभावकको पहुँच</translation>
 <translation id="473775607612524610">अपडेट गर्नुहोस्</translation>
 <translation id="4744944742468440486">तपाईंले चयन गर्नुभएको पाठसम्बन्धी जानकारी</translation>
@@ -659,7 +658,6 @@
 <translation id="9149391708638971077">मेमोरीसम्बन्धी परीक्षण गर्नुहोस्</translation>
 <translation id="9173638680043580060">एक मिनेटभन्दा कम समय बाँकी छ</translation>
 <translation id="917720651393141712">परीक्षण</translation>
-<translation id="9190063653747922532">L2TP/IPsec + पहिले नै साझा गरिएको कुञ्जी</translation>
 <translation id="9204237731135241582">Android एपहरूबाट गेटवेमा सम्पर्क गर्न सकिएन</translation>
 <translation id="9211490828691860325">सबै डेस्कहरू</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index 9ac724b..bee24c0 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Vermoedelijke firewall</translation>
 <translation id="4691278870498629773">Gestopt: lade ontbreekt</translation>
 <translation id="469379815867856270">Signaalsterkte</translation>
-<translation id="4707579418881001319">L2TP/IPsec + gebruikerscertificaat</translation>
 <translation id="4731797938093519117">Toegang door ouders</translation>
 <translation id="473775607612524610">Updaten</translation>
 <translation id="4744944742468440486">Informatie met betrekking tot je selectie</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Geheugentest uitvoeren</translation>
 <translation id="9173638680043580060">Nog minder dan een minuut</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + eerder gedeelde sleutel</translation>
 <translation id="9204237731135241582">Kan geen verbinding maken met de gateway vanuit Android-apps</translation>
 <translation id="9211490828691860325">Alle bureaus</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index 0e5b169..18feed6 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Mistanke om brannmur</translation>
 <translation id="4691278870498629773">Stoppet – en skuff mangler</translation>
 <translation id="469379815867856270">Signalstyrke</translation>
-<translation id="4707579418881001319">L2TP/IPSec + brukersertifikat</translation>
 <translation id="4731797938093519117">Foreldretilgang</translation>
 <translation id="473775607612524610">Oppdater</translation>
 <translation id="4744944742468440486">Informasjon om det du har markert</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Kjør minnetest</translation>
 <translation id="9173638680043580060">Mindre enn et minutt igjen</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + forhåndsdelt nøkkel</translation>
 <translation id="9204237731135241582">Kan ikke kontakte gatewayen fra Android-apper</translation>
 <translation id="9211490828691860325">Alle skrivebord</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index 5c41f3a6..1c75f7ff 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ଫାୟାରୱାଲ୍ ଥିବାର ସନ୍ଦେହ କରାଯାଇଛି</translation>
 <translation id="4691278870498629773">ବନ୍ଦ ହୋଇଯାଇଛି - ଟ୍ରେ ଉପଲବ୍ଧ ନାହିଁ</translation>
 <translation id="469379815867856270">ସିଗନାଲର କ୍ଷମତା</translation>
-<translation id="4707579418881001319">L2TP/IPsec + ଉପଯୋଗକର୍ତ୍ତା ସାର୍ଟିଫିକେଟ୍</translation>
 <translation id="4731797938093519117">ମାତା-ପିତାଙ୍କର ଆକ୍ସେସ୍</translation>
 <translation id="473775607612524610">ଅପ୍‍‍ଡେଟ୍</translation>
 <translation id="4744944742468440486">ଆପଣଙ୍କ ଚୟନ ସମ୍ବନ୍ଧିତ ସୂଚନା</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">ମେମୋରୀ ଟେଷ୍ଟ ଚଲାନ୍ତୁ</translation>
 <translation id="9173638680043580060">ଗୋଟିଏ ମିନିଟରୁ କମ୍ ସମୟ ବାକି ଅଛି</translation>
 <translation id="917720651393141712">ପରୀକ୍ଷା କରନ୍ତୁ</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ପୂର୍ବରୁ-ସେୟାର୍ କରାଯାଇଥିବା କୀ</translation>
 <translation id="9204237731135241582">Android ଆପଗୁଡ଼ିକରୁ ଗେଟୱେ ସହ ଯୋଗାଯୋଗ କରାଯାଇପାରିବ ନାହିଁ</translation>
 <translation id="9211490828691860325">ସମସ୍ତ ଡେସ୍କ</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb
index 3d559e92..046f879 100644
--- a/chromeos/strings/chromeos_strings_pa.xtb
+++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ਫ਼ਾਇਰਵਾਲ 'ਤੇ ਸ਼ੱਕ ਹੈ</translation>
 <translation id="4691278870498629773">ਬੰਦ ਹੋ ਗਿਆ - ਟ੍ਰੇਅ ਮੌਜੂਦ ਨਹੀਂ ਹੈ</translation>
 <translation id="469379815867856270">ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ</translation>
-<translation id="4707579418881001319">L2TP/IPsec + ਵਰਤੋਂਕਾਰ ਪ੍ਰਮਾਣ-ਪੱਤਰ</translation>
 <translation id="4731797938093519117">ਮਾਂ-ਪਿਓ ਲਈ ਪਹੁੰਚ</translation>
 <translation id="473775607612524610">ਅੱਪਡੇਟ ਕਰੋ</translation>
 <translation id="4744944742468440486">ਤੁਹਾਡੀ ਚੋਣ ਨਾਲ ਸੰਬੰਧਿਤ ਜਾਣਕਾਰੀ</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">ਮੈਮੋਰੀ ਟੈਸਟ ਚਲਾਓ</translation>
 <translation id="9173638680043580060">ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ</translation>
 <translation id="917720651393141712">ਜਾਂਚ</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ਪ੍ਰੀ-ਸ਼ੇਅਰਡ ਕੁੰਜੀ</translation>
 <translation id="9204237731135241582">Android ਐਪਾਂ ਤੋਂ ਗੇਟਵੇ ਨਾਲ ਸੰਪਰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation>
 <translation id="9211490828691860325">ਸਾਰੇ ਡੈਸਕ</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index 2502fcf..25eaf98 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">przypuszczalnie zapora sieciowa</translation>
 <translation id="4691278870498629773">Zatrzymano – brak zasobnika</translation>
 <translation id="469379815867856270">Siła sygnału</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certyfikat użytkownika</translation>
 <translation id="4731797938093519117">Dostęp rodzica</translation>
 <translation id="473775607612524610">Aktualizuj</translation>
 <translation id="4744944742468440486">Informacje związane z zaznaczoną treścią</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Przeprowadź test pamięci</translation>
 <translation id="9173638680043580060">Jeszcze niecała minuta</translation>
 <translation id="917720651393141712">Przetestuj</translation>
-<translation id="9190063653747922532">L2TP/IPSec + klucz wstępny</translation>
 <translation id="9204237731135241582">Nie udało się połączyć z bramą w aplikacjach na Androida</translation>
 <translation id="9211490828691860325">Wszystkie biurka</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index 2eb1401..92d6d85 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Firewall suspeito</translation>
 <translation id="4691278870498629773">Parado (bandeja ausente)</translation>
 <translation id="469379815867856270">Intensidade do sinal</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certificado de usuário</translation>
 <translation id="4731797938093519117">Acesso do familiar responsável</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="4744944742468440486">Informações relacionadas à sua seleção</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Executar teste de memória</translation>
 <translation id="9173638680043580060">Menos de um minuto restante</translation>
 <translation id="917720651393141712">Testar</translation>
-<translation id="9190063653747922532">L2TP/IPSEC + chave pré-compartilhada</translation>
 <translation id="9204237731135241582">Não foi possível entrar em contato com o gateway em apps Android</translation>
 <translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 4939740..4e3c5ae 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Firewall suspeita</translation>
 <translation id="4691278870498629773">Parada – Tabuleiro em falta</translation>
 <translation id="469379815867856270">Intensidade do sinal</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certificado do utilizador</translation>
 <translation id="4731797938093519117">Acesso parental</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="4744944742468440486">Informações relacionadas com a sua seleção</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Executar teste de memória</translation>
 <translation id="9173638680043580060">Falta menos de um minuto</translation>
 <translation id="917720651393141712">Testar</translation>
-<translation id="9190063653747922532">L2TP/IPSec + chave pré-partilhada</translation>
 <translation id="9204237731135241582">Não é possível contactar o gateway a partir de apps Android</translation>
 <translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index ed5779c..5d484b1 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Posibil firewall</translation>
 <translation id="4691278870498629773">Oprită – Tavă lipsă</translation>
 <translation id="469379815867856270">Puterea semnalului</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certificat de utilizator</translation>
 <translation id="4731797938093519117">Acces pentru părinți</translation>
 <translation id="473775607612524610">Actualizează</translation>
 <translation id="4744944742468440486">Informații legate de selecția ta</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Rulează testul Memorie</translation>
 <translation id="9173638680043580060">A rămas mai puțin de un minut</translation>
 <translation id="917720651393141712">Testează</translation>
-<translation id="9190063653747922532">L2TP/IPSec + cheia predistribuită</translation>
 <translation id="9204237731135241582">Nu se poate contacta gateway-ul din aplicații pentru Android</translation>
 <translation id="9211490828691860325">Toate desktopurile</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 52b5193c..47e8873 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">потенциальный брандмауэр</translation>
 <translation id="4691278870498629773">Печать прервана: нет лотка для бумаги</translation>
 <translation id="469379815867856270">Уровень сигнала</translation>
-<translation id="4707579418881001319">L2TP/IPsec + сертификат пользователя</translation>
 <translation id="4731797938093519117">Родительский доступ</translation>
 <translation id="473775607612524610">Обновить</translation>
 <translation id="4744944742468440486">Информация на основе выделенного текста</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Запустить проверку памяти</translation>
 <translation id="9173638680043580060">Осталось меньше минуты…</translation>
 <translation id="917720651393141712">Проверить</translation>
-<translation id="9190063653747922532">L2TP/IPsec + общий ключ</translation>
 <translation id="9204237731135241582">Не удается связаться со шлюзом в приложениях для Android.</translation>
 <translation id="9211490828691860325">Все рабочие столы</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb
index 2c627c8..3097261 100644
--- a/chromeos/strings/chromeos_strings_si.xtb
+++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ෆයර්වෝලය සැක කරන ලදි</translation>
 <translation id="4691278870498629773">නැවතිණි - තැටිය අස්ථානගතව ඇත</translation>
 <translation id="469379815867856270">සංඥා ප්‍රබලතාව</translation>
-<translation id="4707579418881001319">L2TP/IPsec + භාවිත සහතිකය</translation>
 <translation id="4731797938093519117">මාපිය ප්‍රවේශය</translation>
 <translation id="473775607612524610">යාවත්කාලීනය</translation>
 <translation id="4744944742468440486">ඔබගේ තේරීමට අදාළ තොරතුරු</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">මතක පරීක්ෂණය ධාවනය කරන්න</translation>
 <translation id="9173638680043580060">මිනිත්තුවකට වඩා අඩුවෙන් ඉතිරිව ඇත</translation>
 <translation id="917720651393141712">පරීක්ෂාව</translation>
-<translation id="9190063653747922532">L2TP/IPsec + පෙර-හවුල්කළ යතුර</translation>
 <translation id="9204237731135241582">Android යෙදුම් වෙතින් වාහල සම්බන්ධ කර ගත නොහැකිය</translation>
 <translation id="9211490828691860325">සියලු වැඩතල</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 539dae7..154cb7b3 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Podozrenie na firewall</translation>
 <translation id="4691278870498629773">Zastavené – chýba zásobník</translation>
 <translation id="469379815867856270">Intenzita signálu</translation>
-<translation id="4707579418881001319">L2TP/IPSec + certifikát používateľa</translation>
 <translation id="4731797938093519117">Rodičovský prístup</translation>
 <translation id="473775607612524610">Aktualizovať</translation>
 <translation id="4744944742468440486">Informácie súvisiace s vaším výberom</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Spustiť test pamäte</translation>
 <translation id="9173638680043580060">Zostáva menej ako minúta</translation>
 <translation id="917720651393141712">Testovať</translation>
-<translation id="9190063653747922532">L2TP/IPSec + predzdieľaný kľúč</translation>
 <translation id="9204237731135241582">Brána sa nedá kontaktovať v aplikáciách pre Android</translation>
 <translation id="9211490828691860325">Všetky plochy</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 729f7b3..16390a4 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Sum na požarni zid</translation>
 <translation id="4691278870498629773">Ustavljeno – ni pladnja</translation>
 <translation id="469379815867856270">Moč signala</translation>
-<translation id="4707579418881001319">L2TP/IPsec + uporabniško potrdilo</translation>
 <translation id="4731797938093519117">Starševski dostop</translation>
 <translation id="473775607612524610">Posodobi</translation>
 <translation id="4744944742468440486">Podatki, povezani z vašim izborom</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Zaženi preizkus pomnilnika</translation>
 <translation id="9173638680043580060">Še manj kot minuta</translation>
 <translation id="917720651393141712">Preizkus</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ključ v vnaprejšnji skupni rabi</translation>
 <translation id="9204237731135241582">Iz aplikacij za Android ni mogoče vzpostaviti stika s prehodom.</translation>
 <translation id="9211490828691860325">Vsa namizja</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb
index 9a5cc19f..5433129 100644
--- a/chromeos/strings/chromeos_strings_sq.xtb
+++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Përputhje e emrit alternativ të subjektit</translation>
 <translation id="4536864596629708641">Konfigurimi i IP-së</translation>
+<translation id="4546131424594385779">Krijo një video me luajtje të përsëritur</translation>
 <translation id="4548483925627140043">Sinjali nuk u gjet</translation>
 <translation id="4556753742174065117">I gjithë firmueri është i përditësuar</translation>
 <translation id="455835558791489930">Bateria <ph name="CHARGE_VALUE" /> mAh</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Dyshohet për mur mbrojtës</translation>
 <translation id="4691278870498629773">Ndaloi - Tabakaja mungon</translation>
 <translation id="469379815867856270">Fuqia e sinjalit</translation>
-<translation id="4707579418881001319">L2TP/IPsec + certifikatë përdoruesi</translation>
 <translation id="4731797938093519117">Qasja e prindit</translation>
 <translation id="473775607612524610">Përditësoje</translation>
 <translation id="4744944742468440486">Informacion në lidhje me zgjedhjen tënde</translation>
@@ -449,6 +449,7 @@
 <translation id="6566314079205407217">Skanimi me shumë faqe</translation>
 <translation id="6574762126505704998">Mbush</translation>
 <translation id="6575134580692778371">I pakonfiguruar</translation>
+<translation id="6579509898032828423">Përdor këtë fotografi</translation>
 <translation id="6596816719288285829">Adresa e IP-së</translation>
 <translation id="6618744767048954150">Në ekzekutim</translation>
 <translation id="6620487321149975369">Printimet do të shfaqen te historiku, përveçse kur hiqen manualisht</translation>
@@ -649,6 +650,7 @@
 <translation id="9062831201344759865">Rezolucioni i DNS-së ka vonesë të lartë</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth-i</translation>
+<translation id="9082718469794970195">Përdor këtë video</translation>
 <translation id="9087578468327036362">Raportoje këtë kërkesë</translation>
 <translation id="9088306295921699330">Përdorimi aktual</translation>
 <translation id="9095415590198785865">Pajisja do të kalojë tek i njëjti zotërues</translation>
@@ -662,7 +664,6 @@
 <translation id="9149391708638971077">Ekzekuto testin e memories</translation>
 <translation id="9173638680043580060">Ka mbetur më pak se një minutë</translation>
 <translation id="917720651393141712">Provë</translation>
-<translation id="9190063653747922532">L2TP/IPsec + çelësi i ndarë paraprakisht</translation>
 <translation id="9204237731135241582">Portëkalimi nuk mund të kontaktohet nga aplikacionet për Android</translation>
 <translation id="9211490828691860325">Të gjitha tavolinat e punës</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index 475d355..acd65bb 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Sumnja se na zaštitni zid</translation>
 <translation id="4691278870498629773">Zaustavljeno – nedostaje posuda za odštampani materijal</translation>
 <translation id="469379815867856270">Jačina signala</translation>
-<translation id="4707579418881001319">L2TP/IPsec + sertifikat korisnika</translation>
 <translation id="4731797938093519117">Roditeljski pristup</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4744944742468440486">Informacije vezane za vaš izbor</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Pokreni test memorije</translation>
 <translation id="9173638680043580060">Preostalo je manje od minuta</translation>
 <translation id="917720651393141712">Testiraj</translation>
-<translation id="9190063653747922532">L2TP/IPsec + tajni ključ</translation>
 <translation id="9204237731135241582">Kontakt sa mrežnim prolazom ne uspeva iz Android aplikacija</translation>
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index 7726288..554e206 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Сумња се на заштитни зид</translation>
 <translation id="4691278870498629773">Заустављено – недостаје посуда за одштампани материјал</translation>
 <translation id="469379815867856270">Јачина сигнала</translation>
-<translation id="4707579418881001319">L2TP/IPsec + сертификат корисника</translation>
 <translation id="4731797938093519117">Родитељски приступ</translation>
 <translation id="473775607612524610">Ажурирај</translation>
 <translation id="4744944742468440486">Информације везане за ваш избор</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Покрени тест меморије</translation>
 <translation id="9173638680043580060">Преостало је мање од минута</translation>
 <translation id="917720651393141712">Тестирај</translation>
-<translation id="9190063653747922532">L2TP/IPsec + тајни кључ</translation>
 <translation id="9204237731135241582">Контакт са мрежним пролазом не успева из Android апликација</translation>
 <translation id="9211490828691860325">Све радне површине</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index 4673240..cd5f211 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Matchning av ämnets andra namn</translation>
 <translation id="4536864596629708641">IP-konfiguration</translation>
+<translation id="4546131424594385779">Skapa en video som spelas upp i en slinga</translation>
 <translation id="4548483925627140043">Ingen signal hittades</translation>
 <translation id="4556753742174065117">All firmware har uppdaterats</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh-batteri</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Misstänkt brandvägg</translation>
 <translation id="4691278870498629773">Har stoppats – fack saknas</translation>
 <translation id="469379815867856270">Signalstyrka</translation>
-<translation id="4707579418881001319">L2TP/IPSec + användarcertifikat</translation>
 <translation id="4731797938093519117">Föräldraåtkomst</translation>
 <translation id="473775607612524610">Uppdatera</translation>
 <translation id="4744944742468440486">Information om det som är markerat</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Skanning av flera sidor</translation>
 <translation id="6574762126505704998">Fyll</translation>
 <translation id="6575134580692778371">Inte konfigurerat</translation>
+<translation id="6579509898032828423">Använd det här fotot</translation>
 <translation id="6596816719288285829">IP-adress</translation>
 <translation id="6618744767048954150">Körs</translation>
 <translation id="6620487321149975369">Utskriftsjobb visas i historiken såvida de inte tas bort manuellt</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS-upplösningen har hög fördröjning</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Använd den här videon</translation>
 <translation id="9087578468327036362">Rapportera sökfrågan</translation>
 <translation id="9088306295921699330">Nuvarande användning</translation>
 <translation id="9095415590198785865">Samma ägare behåller enheten</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Kör minnestest</translation>
 <translation id="9173638680043580060">Mindre än en minut kvar</translation>
 <translation id="917720651393141712">Testa</translation>
-<translation id="9190063653747922532">L2TP/IPSec + i förväg delad nyckel</translation>
 <translation id="9204237731135241582">Det gick inte att kontakta gateway från Android-appar</translation>
 <translation id="9211490828691860325">Alla skrivbord</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index 4411b79..cd64060 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Inashukiwa kuna kinga mtandao</translation>
 <translation id="4691278870498629773">Imesimama - Trei haipo</translation>
 <translation id="469379815867856270">Uthabiti wa Mtandao</translation>
-<translation id="4707579418881001319">L2TP/IPsec + cheti cha mtumiaji</translation>
 <translation id="4731797938093519117">Idhini ya mzazi</translation>
 <translation id="473775607612524610">Sasisha</translation>
 <translation id="4744944742468440486">Maelezo yanayohusiana na chaguo lako</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">Tekeleza jaribio la Hifadhi</translation>
 <translation id="9173638680043580060">Imesalia chini ya dakika moja</translation>
 <translation id="917720651393141712">Jaribu</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ufunguo ulioshirikiwa awali</translation>
 <translation id="9204237731135241582">Imeshindwa kuwasiliana na lango kutoka kwenye programu za Android</translation>
 <translation id="9211490828691860325">Maeneokazi yote</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb
index c4f45eb..20ba1148 100644
--- a/chromeos/strings/chromeos_strings_ta.xtb
+++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -281,7 +281,6 @@
 <translation id="467715984478005772">ஃபயர்வால் இருப்பதுபோல் தெரிகிறது</translation>
 <translation id="4691278870498629773">பிரிண்டரில் டிரே இல்லாததால் அச்சிட முடியவில்லை</translation>
 <translation id="469379815867856270">சிக்னலின் வலிமை</translation>
-<translation id="4707579418881001319">L2TP/IPsec + பயனர் சான்றிதழ்</translation>
 <translation id="4731797938093519117">பெற்றோர் அணுகல்</translation>
 <translation id="473775607612524610">புதுப்பி</translation>
 <translation id="4744944742468440486">உங்கள் தேர்வுடன் தொடர்புடைய தகவல்கள்</translation>
@@ -660,7 +659,6 @@
 <translation id="9149391708638971077">நினைவகச் சோதனையை இயக்கு</translation>
 <translation id="9173638680043580060">ஒரு நிமிடத்திற்கும் குறைவான நேரமே மீதமுள்ளது</translation>
 <translation id="917720651393141712">சோதனை செய்</translation>
-<translation id="9190063653747922532">L2TP/IPsec + முன்பே-பகிர்ந்து கொள்ளப்பட்ட விசை</translation>
 <translation id="9204237731135241582">Android ஆப்ஸில் இருந்து கேட்வேயைத் தொடர்புகொள்ள முடியவில்லை</translation>
 <translation id="9211490828691860325">அனைத்து டெஸ்குகளும்</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index e3a2120..cd7bfa5 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">ఫైర్‌వాల్‌తో సమస్య ఉన్నట్టుగా ఉంది</translation>
 <translation id="4691278870498629773">ఆగిపోయింది - ట్రే అందుబాటులో లేదు</translation>
 <translation id="469379815867856270">సిగ్నల్ సామర్థ్యం</translation>
-<translation id="4707579418881001319">L2TP/IPsec + వినియోగదారు ప్రమాణపత్రం</translation>
 <translation id="4731797938093519117">తల్లి/తండ్రి యాక్సెస్</translation>
 <translation id="473775607612524610">అప్‌డేట్‌</translation>
 <translation id="4744944742468440486">మీ ఎంపికకు సంబంధించిన సమాచారం</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">మెమరీ పరీక్షను రన్ చేయండి</translation>
 <translation id="9173638680043580060">నిమిషం కంటే తక్కువ సమయం మిగిలి ఉంది</translation>
 <translation id="917720651393141712">టెస్ట్ చేయండి</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ముందుగా షేర్ చేసిన కీ</translation>
 <translation id="9204237731135241582">Android యాప్‌ల నుండి గేట్‌వేను సంప్రదించడం సాధ్యపడదు</translation>
 <translation id="9211490828691860325">అన్ని డెస్క్‌లు</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index ebe5157..6460d67 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">คาดว่าติดไฟร์วอลล์</translation>
 <translation id="4691278870498629773">หยุดพิมพ์ - ไม่มีถาด</translation>
 <translation id="469379815867856270">ความแรงของสัญญาณ</translation>
-<translation id="4707579418881001319">L2TP/IPsec + ใบรับรองผู้ใช้</translation>
 <translation id="4731797938093519117">การเข้าถึงของผู้ปกครอง</translation>
 <translation id="473775607612524610">อัปเดต</translation>
 <translation id="4744944742468440486">ข้อมูลที่เกี่ยวข้องกับสิ่งที่คุณเลือก</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">ทดสอบหน่วยความจำ</translation>
 <translation id="9173638680043580060">เหลืออีกไม่ถึง 1 นาที</translation>
 <translation id="917720651393141712">ทดสอบ</translation>
-<translation id="9190063653747922532">L2TP/IPsec + คีย์ที่แชร์ล่วงหน้า</translation>
 <translation id="9204237731135241582">ไม่สามารถติดต่อกับเกตเวย์จากแอป Android</translation>
 <translation id="9211490828691860325">เดสก์ทั้งหมด</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index bf4da19..ec01e203 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Portal</translation>
 <translation id="4521826082652183069">Alternatif konu adı eşleşmesi</translation>
 <translation id="4536864596629708641">IP Yapılandırması</translation>
+<translation id="4546131424594385779">Döngülü video oluştur</translation>
 <translation id="4548483925627140043">Sinyal bulunamadı</translation>
 <translation id="4556753742174065117">Donanım yazılımlarının tamamı güncel</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh Pil</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">Güvenlik duvarı olabilir</translation>
 <translation id="4691278870498629773">Durduruldu - Tepsi yok</translation>
 <translation id="469379815867856270">Sinyal Gücü</translation>
-<translation id="4707579418881001319">L2TP/IPSec + kullanıcı sertifikası</translation>
 <translation id="4731797938093519117">Ebeveyn erişimi</translation>
 <translation id="473775607612524610">Güncelle</translation>
 <translation id="4744944742468440486">Seçiminizle ilgili bilgi</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Çok sayfalı tarama</translation>
 <translation id="6574762126505704998">Tam kaplama</translation>
 <translation id="6575134580692778371">Yapılandırılmadı</translation>
+<translation id="6579509898032828423">Bu fotoğrafı kullan</translation>
 <translation id="6596816719288285829">IP Adresi</translation>
 <translation id="6618744767048954150">Çalışıyor</translation>
 <translation id="6620487321149975369">Yazdırma işleri, manuel olarak kaldırılmadığı sürece geçmişte görünür</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS çözümleme, yüksek gecikme süresine sahip</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Bu videoyu kullan</translation>
 <translation id="9087578468327036362">Bu sorguyu bildirir</translation>
 <translation id="9088306295921699330">Mevcut kullanım</translation>
 <translation id="9095415590198785865">Cihazın sahibi değişmez</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Bellek testini çalıştır</translation>
 <translation id="9173638680043580060">Bir dakikadan az kaldı</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + önceden paylaşılan anahtar</translation>
 <translation id="9204237731135241582">Android uygulamalarından ağ geçidiyle iletişim kurulamıyor</translation>
 <translation id="9211490828691860325">Tüm masalar</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb
index f61e0d3..2129296 100644
--- a/chromeos/strings/chromeos_strings_uk.xtb
+++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">Портал</translation>
 <translation id="4521826082652183069">Збіг з альтернативною назвою суб’єкта</translation>
 <translation id="4536864596629708641">Конфігурація IP-адрес</translation>
+<translation id="4546131424594385779">Створити зациклене відео</translation>
 <translation id="4548483925627140043">сигнал не знайдено</translation>
 <translation id="4556753742174065117">Мікропрограму оновлено</translation>
 <translation id="455835558791489930">Акумулятор ємністю <ph name="CHARGE_VALUE" /> мА·год</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">можливо, працює брандмауер</translation>
 <translation id="4691278870498629773">Зупинено – немає лотка</translation>
 <translation id="469379815867856270">Потужність сигналу</translation>
-<translation id="4707579418881001319">L2TP/IPSec + Сертифікат користувача</translation>
 <translation id="4731797938093519117">Батьківський доступ</translation>
 <translation id="473775607612524610">Оновити</translation>
 <translation id="4744944742468440486">Інформація, пов'язана з виділеним текстом</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">Сканування кількох сторінок</translation>
 <translation id="6574762126505704998">Заповнення</translation>
 <translation id="6575134580692778371">Не налаштовано</translation>
+<translation id="6579509898032828423">Використати цю фотографію</translation>
 <translation id="6596816719288285829">ІР-адреса</translation>
 <translation id="6618744767048954150">Виконується</translation>
 <translation id="6620487321149975369">Завдання друку відображатимуться в історії, доки ви не вилучите їх вручну</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">Велика затримка перетворення DNS</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9082718469794970195">Використати це відео</translation>
 <translation id="9087578468327036362">Повідомити про проблеми із запитом</translation>
 <translation id="9088306295921699330">Використовується</translation>
 <translation id="9095415590198785865">Власник пристрою не зміниться</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">Виконати перевірку пам'яті</translation>
 <translation id="9173638680043580060">Залишилося менше хвилини</translation>
 <translation id="917720651393141712">Перевірити</translation>
-<translation id="9190063653747922532">L2TP/IPSec + Спільний ключ</translation>
 <translation id="9204237731135241582">Не вдається зв’язатися зі шлюзом із додатків для Android</translation>
 <translation id="9211490828691860325">Усі робочі столи</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb
index 1c45480..e6e7d24 100644
--- a/chromeos/strings/chromeos_strings_ur.xtb
+++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">فائروال مشکوک ہے</translation>
 <translation id="4691278870498629773">رک گیا - ٹرے موجود نہیں ہے</translation>
 <translation id="469379815867856270">سگنل کی مضبوطی</translation>
-<translation id="4707579418881001319">‏L2TP/IPsec + صارف سرٹیفکیٹ</translation>
 <translation id="4731797938093519117">والدین کی رسائی</translation>
 <translation id="473775607612524610">اپ ڈيٹ کریں</translation>
 <translation id="4744944742468440486">آپ کے انتخاب سے متعلقہ معلومات</translation>
@@ -665,7 +664,6 @@
 <translation id="9149391708638971077">میموری ٹیسٹ چلائیں</translation>
 <translation id="9173638680043580060">ایک منٹ سے کم باقی ہے</translation>
 <translation id="917720651393141712">ٹیسٹ</translation>
-<translation id="9190063653747922532">‏‎L2TP/IPsec + پیشگی اشتراک کردہ کلید</translation>
 <translation id="9204237731135241582">‏Android ایپس سے گیٹ وے رابطے کو منسلک نہیں کیا جا سکتا</translation>
 <translation id="9211490828691860325">تمام ڈیسکس</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb
index aacd77ae..6e3f98dd 100644
--- a/chromeos/strings/chromeos_strings_uz.xtb
+++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Himoya devori aniqlandi</translation>
 <translation id="4691278870498629773">Toʻxtatildi - Tarnov joyida emas</translation>
 <translation id="469379815867856270">Signal darajasi</translation>
-<translation id="4707579418881001319">L2TP/IPSec + foydalanuvchi sertifikati</translation>
 <translation id="4731797938093519117">Ota-ona kirishi</translation>
 <translation id="473775607612524610">Yangilash</translation>
 <translation id="4744944742468440486">Tanlovga aloqador axborot</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Xotirani tekshirish</translation>
 <translation id="9173638680043580060">Bir daqiqadan kamroq vaqt qoldi</translation>
 <translation id="917720651393141712">Test</translation>
-<translation id="9190063653747922532">L2TP/IPsec + umumiy kalit</translation>
 <translation id="9204237731135241582">Android ilovalardan shlyuzga ulanish imkonsiz</translation>
 <translation id="9211490828691860325">Barcha ish stollari</translation>
 <translation id="939519157834106403">Tarmoq nomi (SSID)</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index 51239e0..785f206e 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Tin là có tường lửa</translation>
 <translation id="4691278870498629773">Đã dừng – Thiếu khay</translation>
 <translation id="469379815867856270">Cường độ tín hiệu</translation>
-<translation id="4707579418881001319">L2TP/IPsec + chứng chỉ người dùng</translation>
 <translation id="4731797938093519117">Quyền truy cập của cha mẹ</translation>
 <translation id="473775607612524610">Cập nhật</translation>
 <translation id="4744944742468440486">Thông tin liên quan đến nội dung bạn chọn</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Chạy quá trình Kiểm tra bộ nhớ</translation>
 <translation id="9173638680043580060">Còn chưa đầy 1 phút</translation>
 <translation id="917720651393141712">Kiểm tra</translation>
-<translation id="9190063653747922532">L2TP/IPsec + khóa chia sẻ trước</translation>
 <translation id="9204237731135241582">Không thể kết nối với cổng vào từ các ứng dụng Android</translation>
 <translation id="9211490828691860325">Tất cả các không gian làm việc</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index 0b0efe84..d04ab69f 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -267,6 +267,7 @@
 <translation id="4511264077854731334">门户网站</translation>
 <translation id="4521826082652183069">主题备用名称匹配</translation>
 <translation id="4536864596629708641">IP 配置</translation>
+<translation id="4546131424594385779">创建循环播放的视频</translation>
 <translation id="4548483925627140043">找不到信号</translation>
 <translation id="4556753742174065117">所有固件均为最新版本</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" />mAh 电池</translation>
@@ -283,7 +284,6 @@
 <translation id="467715984478005772">疑似存在防火墙</translation>
 <translation id="4691278870498629773">已停止 - 缺少送纸盘</translation>
 <translation id="469379815867856270">信号强度</translation>
-<translation id="4707579418881001319">L2TP/IPSec + 用户证书</translation>
 <translation id="4731797938093519117">家长访问</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="4744944742468440486">与您所选内容相关的信息</translation>
@@ -450,6 +450,7 @@
 <translation id="6566314079205407217">多页面扫描</translation>
 <translation id="6574762126505704998">填充</translation>
 <translation id="6575134580692778371">未配置</translation>
+<translation id="6579509898032828423">使用此照片</translation>
 <translation id="6596816719288285829">IP 地址</translation>
 <translation id="6618744767048954150">正在运行</translation>
 <translation id="6620487321149975369">打印任务如未被手动移除,将会显示在历史记录中,</translation>
@@ -650,6 +651,7 @@
 <translation id="9062831201344759865">DNS 解析延迟时间较长</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">蓝牙</translation>
+<translation id="9082718469794970195">使用此视频</translation>
 <translation id="9087578468327036362">报告此次查询</translation>
 <translation id="9088306295921699330">目前用量</translation>
 <translation id="9095415590198785865">设备将由原所有者使用</translation>
@@ -663,7 +665,6 @@
 <translation id="9149391708638971077">运行内存测试</translation>
 <translation id="9173638680043580060">还剩不到 1 分钟</translation>
 <translation id="917720651393141712">测试</translation>
-<translation id="9190063653747922532">L2TP/IPSec + 预共享密钥</translation>
 <translation id="9204237731135241582">无法从 Android 应用连接网关</translation>
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index 7952c23..5ef0a46 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -267,7 +267,7 @@
 <translation id="4511264077854731334">入口網站</translation>
 <translation id="4521826082652183069">主體替代名稱相符</translation>
 <translation id="4536864596629708641">IP 設定</translation>
-<translation id="4546131424594385779">建立循環播放的影片</translation>
+<translation id="4546131424594385779">建立循環播放影片</translation>
 <translation id="4548483925627140043">偵測不到訊號</translation>
 <translation id="4556753742174065117">所有韌體都是最新版本</translation>
 <translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh 電池</translation>
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">可能有防火牆</translation>
 <translation id="4691278870498629773">已停止 - 沒有紙匣</translation>
 <translation id="469379815867856270">訊號強度</translation>
-<translation id="4707579418881001319">L2TP/IPsec + 使用者憑證</translation>
 <translation id="4731797938093519117">家長存取</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="4744944742468440486">所揀內容嘅相關資料</translation>
@@ -652,7 +651,7 @@
 <translation id="9062831201344759865">DNS 解析延遲時間長</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">藍牙</translation>
-<translation id="9082718469794970195">使用這部影片</translation>
+<translation id="9082718469794970195">使用這段影片</translation>
 <translation id="9087578468327036362">報告此查詢</translation>
 <translation id="9088306295921699330">目前使用量</translation>
 <translation id="9095415590198785865">裝置的擁有者不會變更</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">執行記憶體測試</translation>
 <translation id="9173638680043580060">尚餘不到 1 分鐘</translation>
 <translation id="917720651393141712">測試</translation>
-<translation id="9190063653747922532">L2TP/IPsec + 預先共用金鑰</translation>
 <translation id="9204237731135241582">無法從 Android 應用程式連線至閘道</translation>
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index c246924..b32c6c27 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">可能有防火牆</translation>
 <translation id="4691278870498629773">已停止 - 缺少紙匣</translation>
 <translation id="469379815867856270">訊號強度</translation>
-<translation id="4707579418881001319">L2TP/IPsec + 使用者憑證</translation>
 <translation id="4731797938093519117">家長存取</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="4744944742468440486">所選內容的相關資訊</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">執行記憶體測試</translation>
 <translation id="9173638680043580060">還剩不到 1 分鐘</translation>
 <translation id="917720651393141712">測試</translation>
-<translation id="9190063653747922532">L2TP/IPsec + 預先共用金鑰</translation>
 <translation id="9204237731135241582">無法從 Android 應用程式連線至閘道</translation>
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="939519157834106403">SSID</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb
index e61487b9..3fa41b4 100644
--- a/chromeos/strings/chromeos_strings_zu.xtb
+++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -284,7 +284,6 @@
 <translation id="467715984478005772">Kusolwe uhlelo lokuvikela</translation>
 <translation id="4691278870498629773">Imile - Ithreyi alikho</translation>
 <translation id="469379815867856270">Amandla esiginali</translation>
-<translation id="4707579418881001319">I-L2TP/IPsec + isitifiketi somsebenzisi</translation>
 <translation id="4731797938093519117">Ukufinyelela komzali</translation>
 <translation id="473775607612524610">Buyekeza</translation>
 <translation id="4744944742468440486">Ulwazi oluhambisana nokukhethile</translation>
@@ -666,7 +665,6 @@
 <translation id="9149391708638971077">Qalia ukuhlolwa Kwenkumbulo</translation>
 <translation id="9173638680043580060">Ngaphansi kweminithi okusele</translation>
 <translation id="917720651393141712">Ukuhlolwa</translation>
-<translation id="9190063653747922532">L2TP/IPsec + ukhiye owabiwe ngaphambilini</translation>
 <translation id="9204237731135241582">Ayikwazi ukuxhumana nomasango ovela kuma-app we-Android</translation>
 <translation id="9211490828691860325">Wonke amatafula</translation>
 <translation id="939519157834106403">I-SSID</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
index 3b01205..9246358 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -125,7 +125,7 @@
 <translation id="4040330681741629921">Recibir una notificación cuando un sitio pueda mostrarse en vista simplificada</translation>
 <translation id="4046123991198612571">Pista siguiente</translation>
 <translation id="4149994727733219643">Vista simplificada de páginas web</translation>
-<translation id="4165986682804962316">Configuración de sitios</translation>
+<translation id="4165986682804962316">Configuración del sitio</translation>
 <translation id="4194328954146351878">Pregunta antes de permitir que los sitios vean y cambien la información de los dispositivos NFC (recomendado)</translation>
 <translation id="4200726100658658164">Abrir Ajustes de ubicación</translation>
 <translation id="4226663524361240545">Es posible que las notificaciones hagan que el dispositivo vibre</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index 8dc7c6f..bc4ea5b8c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -122,6 +122,7 @@
 <translation id="3991845972263764475"><ph name="BYTES_DOWNLOADED_WITH_UNITS" /> / ?</translation>
 <translation id="4002066346123236978">タイトル</translation>
 <translation id="4008040567710660924">特定のサイトの Cookie を許可します。</translation>
+<translation id="4040330681741629921">サイトを簡易表示できる場合に通知する</translation>
 <translation id="4046123991198612571">次のトラック</translation>
 <translation id="4149994727733219643">ウェブページの簡易表示</translation>
 <translation id="4165986682804962316">サイトの設定</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 7089c7c..46bfd7f 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "5.33",
-  "log_list_timestamp": "2022-02-24T01:34:07Z",
+  "version": "5.34",
+  "log_list_timestamp": "2022-02-25T01:36:56Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/cronet/BUILD.gn b/components/cronet/BUILD.gn
index 2db3d1f..61708d8 100644
--- a/components/cronet/BUILD.gn
+++ b/components/cronet/BUILD.gn
@@ -37,6 +37,8 @@
 # Cronet common implementation.
 source_set("cronet_common") {
   sources = [
+    "cronet_context.cc",
+    "cronet_context.h",
     "cronet_global_state.h",
     "cronet_prefs_manager.cc",
     "cronet_prefs_manager.h",
@@ -44,8 +46,6 @@
     "cronet_upload_data_stream.h",
     "cronet_url_request.cc",
     "cronet_url_request.h",
-    "cronet_url_request_context.cc",
-    "cronet_url_request_context.h",
     "host_cache_persistence_manager.cc",
     "host_cache_persistence_manager.h",
     "stale_host_resolver.cc",
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index a60928d5..07a46d5 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -152,13 +152,13 @@
   sources = [
     "//components/cronet/android/cronet_bidirectional_stream_adapter.cc",
     "//components/cronet/android/cronet_bidirectional_stream_adapter.h",
+    "//components/cronet/android/cronet_context_adapter.cc",
+    "//components/cronet/android/cronet_context_adapter.h",
     "//components/cronet/android/cronet_library_loader.cc",
     "//components/cronet/android/cronet_upload_data_stream_adapter.cc",
     "//components/cronet/android/cronet_upload_data_stream_adapter.h",
     "//components/cronet/android/cronet_url_request_adapter.cc",
     "//components/cronet/android/cronet_url_request_adapter.h",
-    "//components/cronet/android/cronet_url_request_context_adapter.cc",
-    "//components/cronet/android/cronet_url_request_context_adapter.h",
     "//components/cronet/android/io_buffer_with_byte_buffer.cc",
     "//components/cronet/android/io_buffer_with_byte_buffer.h",
     "//components/cronet/android/url_request_error.cc",
@@ -808,10 +808,9 @@
       # While "cronet_tests" cannot depend on "cronet_static", and hence cannot
       # call any Cronet functions, it can access fields of Cronet objects, so add
       # Cronet header files to facilitate accessing these fields.
+      "//components/cronet/android/cronet_context_adapter.h",
       "//components/cronet/android/cronet_url_request_adapter.h",
-      "//components/cronet/android/cronet_url_request_context_adapter.h",
       "//components/cronet/cronet_url_request.h",
-      "//components/cronet/cronet_url_request_context.h",
       "//components/cronet/url_request_context_config.h",
       "test/cronet_test_jni.cc",
       "test/cronet_test_util.cc",
@@ -836,6 +835,7 @@
       "//base",
       "//base:i18n",
       "//base/test:test_support",
+      "//components/cronet:cronet_common",
       "//components/cronet:cronet_version_header",
       "//components/cronet/testing:test_support",
       "//components/prefs",
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.cc b/components/cronet/android/cronet_bidirectional_stream_adapter.cc
index 08bfa576..5e3fe34 100644
--- a/components/cronet/android/cronet_bidirectional_stream_adapter.cc
+++ b/components/cronet/android/cronet_bidirectional_stream_adapter.cc
@@ -13,8 +13,8 @@
 #include "base/logging.h"
 #include "base/strings/abseil_string_conversions.h"
 #include "base/strings/string_number_conversions.h"
+#include "components/cronet/android/cronet_context_adapter.h"
 #include "components/cronet/android/cronet_jni_headers/CronetBidirectionalStream_jni.h"
-#include "components/cronet/android/cronet_url_request_context_adapter.h"
 #include "components/cronet/android/io_buffer_with_byte_buffer.h"
 #include "components/cronet/android/url_request_error.h"
 #include "components/cronet/metrics_util.h"
@@ -84,9 +84,8 @@
     jint jtraffic_stats_tag,
     jboolean jtraffic_stats_uid_set,
     jint jtraffic_stats_uid) {
-  CronetURLRequestContextAdapter* context_adapter =
-      reinterpret_cast<CronetURLRequestContextAdapter*>(
-          jurl_request_context_adapter);
+  CronetContextAdapter* context_adapter =
+      reinterpret_cast<CronetContextAdapter*>(jurl_request_context_adapter);
   DCHECK(context_adapter);
 
   CronetBidirectionalStreamAdapter* adapter =
@@ -100,7 +99,7 @@
 }
 
 CronetBidirectionalStreamAdapter::CronetBidirectionalStreamAdapter(
-    CronetURLRequestContextAdapter* context,
+    CronetContextAdapter* context,
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& jbidi_stream,
     bool send_request_headers_automatically,
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.h b/components/cronet/android/cronet_bidirectional_stream_adapter.h
index 70aee9a..53df8e6e 100644
--- a/components/cronet/android/cronet_bidirectional_stream_adapter.h
+++ b/components/cronet/android/cronet_bidirectional_stream_adapter.h
@@ -24,7 +24,7 @@
 
 namespace cronet {
 
-class CronetURLRequestContextAdapter;
+class CronetContextAdapter;
 class IOBufferWithByteBuffer;
 
 // Convenient wrapper to hold Java references and data to represent the pending
@@ -68,7 +68,7 @@
     : public net::BidirectionalStream::Delegate {
  public:
   CronetBidirectionalStreamAdapter(
-      CronetURLRequestContextAdapter* context,
+      CronetContextAdapter* context,
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& jbidi_stream,
       bool jsend_request_headers_automatically,
@@ -168,7 +168,7 @@
       const spdy::Http2HeaderBlock& header_block);
   // Helper method to report metrics to the Java layer.
   void MaybeReportMetrics();
-  const raw_ptr<CronetURLRequestContextAdapter> context_;
+  const raw_ptr<CronetContextAdapter> context_;
 
   // Java object that owns this CronetBidirectionalStreamAdapter.
   base::android::ScopedJavaGlobalRef<jobject> owner_;
diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_context_adapter.cc
similarity index 84%
rename from components/cronet/android/cronet_url_request_context_adapter.cc
rename to components/cronet/android/cronet_context_adapter.cc
index 6be1dac..c750465 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.cc
+++ b/components/cronet/android/cronet_context_adapter.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 "components/cronet/android/cronet_url_request_context_adapter.h"
+#include "components/cronet/android/cronet_context_adapter.h"
 
 #include <limits.h>
 #include <stddef.h>
@@ -81,31 +81,29 @@
 
 namespace cronet {
 
-CronetURLRequestContextAdapter::CronetURLRequestContextAdapter(
+CronetContextAdapter::CronetContextAdapter(
     std::unique_ptr<URLRequestContextConfig> context_config) {
   // Create context and pass ownership of |this| (self) to the context.
-  std::unique_ptr<CronetURLRequestContextAdapter> self(this);
+  std::unique_ptr<CronetContextAdapter> self(this);
 #if BUILDFLAG(INTEGRATED_MODE)
-  // Create CronetURLRequestContext running in integrated network task runner.
-  context_ =
-      new CronetURLRequestContext(std::move(context_config), std::move(self),
-                                  GetIntegratedModeNetworkTaskRunner());
+  // Create CronetContext running in integrated network task runner.
+  context_ = new CronetContext(std::move(context_config), std::move(self),
+                               GetIntegratedModeNetworkTaskRunner());
 #else
-  context_ =
-      new CronetURLRequestContext(std::move(context_config), std::move(self));
+  context_ = new CronetContext(std::move(context_config), std::move(self));
 #endif
 }
 
-CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() = default;
+CronetContextAdapter::~CronetContextAdapter() = default;
 
-void CronetURLRequestContextAdapter::InitRequestContextOnInitThread(
+void CronetContextAdapter::InitRequestContextOnInitThread(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller) {
   jcronet_url_request_context_.Reset(env, jcaller);
   context_->InitRequestContextOnInitThread();
 }
 
-void CronetURLRequestContextAdapter::ConfigureNetworkQualityEstimatorForTesting(
+void CronetContextAdapter::ConfigureNetworkQualityEstimatorForTesting(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller,
     jboolean use_local_host_requests,
@@ -116,39 +114,39 @@
       disable_offline_check == JNI_TRUE);
 }
 
-void CronetURLRequestContextAdapter::ProvideRTTObservations(
+void CronetContextAdapter::ProvideRTTObservations(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller,
     bool should) {
   context_->ProvideRTTObservations(should == JNI_TRUE);
 }
 
-void CronetURLRequestContextAdapter::ProvideThroughputObservations(
+void CronetContextAdapter::ProvideThroughputObservations(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller,
     bool should) {
   context_->ProvideThroughputObservations(should == JNI_TRUE);
 }
 
-void CronetURLRequestContextAdapter::OnInitNetworkThread() {
+void CronetContextAdapter::OnInitNetworkThread() {
   JNIEnv* env = base::android::AttachCurrentThread();
   Java_CronetUrlRequestContext_initNetworkThread(env,
                                                  jcronet_url_request_context_);
 }
 
-void CronetURLRequestContextAdapter::OnDestroyNetworkThread() {
+void CronetContextAdapter::OnDestroyNetworkThread() {
   // The |context_| is destroyed.
   context_ = nullptr;
 }
 
-void CronetURLRequestContextAdapter::OnEffectiveConnectionTypeChanged(
+void CronetContextAdapter::OnEffectiveConnectionTypeChanged(
     net::EffectiveConnectionType effective_connection_type) {
   Java_CronetUrlRequestContext_onEffectiveConnectionTypeChanged(
       base::android::AttachCurrentThread(), jcronet_url_request_context_,
       effective_connection_type);
 }
 
-void CronetURLRequestContextAdapter::OnRTTOrThroughputEstimatesComputed(
+void CronetContextAdapter::OnRTTOrThroughputEstimatesComputed(
     int32_t http_rtt_ms,
     int32_t transport_rtt_ms,
     int32_t downstream_throughput_kbps) {
@@ -157,7 +155,7 @@
       http_rtt_ms, transport_rtt_ms, downstream_throughput_kbps);
 }
 
-void CronetURLRequestContextAdapter::OnRTTObservation(
+void CronetContextAdapter::OnRTTObservation(
     int32_t rtt_ms,
     int32_t timestamp_ms,
     net::NetworkQualityObservationSource source) {
@@ -166,7 +164,7 @@
       rtt_ms, timestamp_ms, source);
 }
 
-void CronetURLRequestContextAdapter::OnThroughputObservation(
+void CronetContextAdapter::OnThroughputObservation(
     int32_t throughput_kbps,
     int32_t timestamp_ms,
     net::NetworkQualityObservationSource source) {
@@ -175,34 +173,33 @@
       throughput_kbps, timestamp_ms, source);
 }
 
-void CronetURLRequestContextAdapter::OnStopNetLogCompleted() {
+void CronetContextAdapter::OnStopNetLogCompleted() {
   Java_CronetUrlRequestContext_stopNetLogCompleted(
       base::android::AttachCurrentThread(), jcronet_url_request_context_);
 }
 
-void CronetURLRequestContextAdapter::Destroy(
-    JNIEnv* env,
-    const JavaParamRef<jobject>& jcaller) {
+void CronetContextAdapter::Destroy(JNIEnv* env,
+                                   const JavaParamRef<jobject>& jcaller) {
   // Deleting |context_| on client thread will post cleanup onto network thread,
   // which will in turn delete |this| on network thread.
   delete context_;
 }
 
-net::URLRequestContext* CronetURLRequestContextAdapter::GetURLRequestContext() {
+net::URLRequestContext* CronetContextAdapter::GetURLRequestContext() {
   return context_->GetURLRequestContext();
 }
 
-void CronetURLRequestContextAdapter::PostTaskToNetworkThread(
+void CronetContextAdapter::PostTaskToNetworkThread(
     const base::Location& posted_from,
     base::OnceClosure callback) {
   context_->PostTaskToNetworkThread(posted_from, std::move(callback));
 }
 
-bool CronetURLRequestContextAdapter::IsOnNetworkThread() const {
+bool CronetContextAdapter::IsOnNetworkThread() const {
   return context_->IsOnNetworkThread();
 }
 
-bool CronetURLRequestContextAdapter::StartNetLogToFile(
+bool CronetContextAdapter::StartNetLogToFile(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller,
     const JavaParamRef<jstring>& jfile_name,
@@ -212,7 +209,7 @@
   return context_->StartNetLogToFile(file_name, jlog_all == JNI_TRUE);
 }
 
-void CronetURLRequestContextAdapter::StartNetLogToDisk(
+void CronetContextAdapter::StartNetLogToDisk(
     JNIEnv* env,
     const JavaParamRef<jobject>& jcaller,
     const JavaParamRef<jstring>& jdir_name,
@@ -222,13 +219,12 @@
   context_->StartNetLogToDisk(dir_name, jlog_all == JNI_TRUE, jmax_size);
 }
 
-void CronetURLRequestContextAdapter::StopNetLog(
-    JNIEnv* env,
-    const JavaParamRef<jobject>& jcaller) {
+void CronetContextAdapter::StopNetLog(JNIEnv* env,
+                                      const JavaParamRef<jobject>& jcaller) {
   context_->StopNetLog();
 }
 
-int CronetURLRequestContextAdapter::default_load_flags() const {
+int CronetContextAdapter::default_load_flags() const {
   return context_->default_load_flags();
 }
 
@@ -332,14 +328,13 @@
   std::unique_ptr<URLRequestContextConfig> context_config(
       reinterpret_cast<URLRequestContextConfig*>(jconfig));
 
-  CronetURLRequestContextAdapter* context_adapter =
-      new CronetURLRequestContextAdapter(std::move(context_config));
+  CronetContextAdapter* context_adapter =
+      new CronetContextAdapter(std::move(context_config));
   return reinterpret_cast<jlong>(context_adapter);
 }
 
-static jint JNI_CronetUrlRequestContext_SetMinLogLevel(
-    JNIEnv* env,
-    jint jlog_level) {
+static jint JNI_CronetUrlRequestContext_SetMinLogLevel(JNIEnv* env,
+                                                       jint jlog_level) {
   jint old_log_level = static_cast<jint>(logging::GetMinLogLevel());
   // MinLogLevel is global, shared by all URLRequestContexts.
   logging::SetMinLogLevel(static_cast<int>(jlog_level));
diff --git a/components/cronet/android/cronet_url_request_context_adapter.h b/components/cronet/android/cronet_context_adapter.h
similarity index 83%
rename from components/cronet/android/cronet_url_request_context_adapter.h
rename to components/cronet/android/cronet_context_adapter.h
index bd1c2b73..e65fbb3 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.h
+++ b/components/cronet/android/cronet_context_adapter.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_
-#define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_
+#ifndef COMPONENTS_CRONET_ANDROID_CRONET_CONTEXT_ADAPTER_H_
+#define COMPONENTS_CRONET_ANDROID_CRONET_CONTEXT_ADAPTER_H_
 
 #include <jni.h>
 #include <stdint.h>
@@ -16,7 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread.h"
-#include "components/cronet/cronet_url_request_context.h"
+#include "components/cronet/cronet_context.h"
 #include "components/prefs/json_pref_store.h"
 #include "net/nqe/effective_connection_type.h"
 #include "net/nqe/effective_connection_type_observer.h"
@@ -34,19 +34,16 @@
 
 struct URLRequestContextConfig;
 
-// Adapter between Java CronetUrlRequestContext and CronetURLRequestContext.
-class CronetURLRequestContextAdapter
-    : public CronetURLRequestContext::Callback {
+// Adapter between Java CronetUrlRequestContext and CronetContext.
+class CronetContextAdapter : public CronetContext::Callback {
  public:
-  explicit CronetURLRequestContextAdapter(
+  explicit CronetContextAdapter(
       std::unique_ptr<URLRequestContextConfig> context_config);
 
-  CronetURLRequestContextAdapter(const CronetURLRequestContextAdapter&) =
-      delete;
-  CronetURLRequestContextAdapter& operator=(
-      const CronetURLRequestContextAdapter&) = delete;
+  CronetContextAdapter(const CronetContextAdapter&) = delete;
+  CronetContextAdapter& operator=(const CronetContextAdapter&) = delete;
 
-  ~CronetURLRequestContextAdapter() override;
+  ~CronetContextAdapter() override;
 
   // Called on init Java thread to initialize URLRequestContext.
   void InitRequestContextOnInitThread(
@@ -118,11 +115,9 @@
       const base::android::JavaParamRef<jobject>& jcaller,
       bool should);
 
-  CronetURLRequestContext* cronet_url_request_context() const {
-    return context_;
-  }
+  CronetContext* cronet_url_request_context() const { return context_; }
 
-  // CronetURLRequestContext::Callback
+  // CronetContext::Callback
   void OnInitNetworkThread() override;
   void OnDestroyNetworkThread() override;
   void OnEffectiveConnectionTypeChanged(
@@ -144,12 +139,12 @@
   friend class TestUtil;
 
   // Native Cronet URL Request Context.
-  raw_ptr<CronetURLRequestContext> context_;
+  raw_ptr<CronetContext> context_;
 
-  // Java object that owns this CronetURLRequestContextAdapter.
+  // Java object that owns this CronetContextAdapter.
   base::android::ScopedJavaGlobalRef<jobject> jcronet_url_request_context_;
 };
 
 }  // namespace cronet
 
-#endif  // COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_
+#endif  // COMPONENTS_CRONET_ANDROID_CRONET_ADAPTER_H_
diff --git a/components/cronet/android/cronet_url_request_adapter.cc b/components/cronet/android/cronet_url_request_adapter.cc
index d65ed58b..6a0e47a 100644
--- a/components/cronet/android/cronet_url_request_adapter.cc
+++ b/components/cronet/android/cronet_url_request_adapter.cc
@@ -11,8 +11,8 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "components/cronet/android/cronet_context_adapter.h"
 #include "components/cronet/android/cronet_jni_headers/CronetUrlRequest_jni.h"
-#include "components/cronet/android/cronet_url_request_context_adapter.h"
 #include "components/cronet/android/io_buffer_with_byte_buffer.h"
 #include "components/cronet/android/url_request_error.h"
 #include "components/cronet/metrics_util.h"
@@ -72,9 +72,8 @@
     jboolean jtraffic_stats_uid_set,
     jint jtraffic_stats_uid,
     jint jidempotency) {
-  CronetURLRequestContextAdapter* context_adapter =
-      reinterpret_cast<CronetURLRequestContextAdapter*>(
-          jurl_request_context_adapter);
+  CronetContextAdapter* context_adapter =
+      reinterpret_cast<CronetContextAdapter*>(jurl_request_context_adapter);
   DCHECK(context_adapter);
 
   GURL url(base::android::ConvertJavaStringToUTF8(env, jurl_string));
@@ -93,7 +92,7 @@
 }
 
 CronetURLRequestAdapter::CronetURLRequestAdapter(
-    CronetURLRequestContextAdapter* context,
+    CronetContextAdapter* context,
     JNIEnv* env,
     jobject jurl_request,
     const GURL& url,
diff --git a/components/cronet/android/cronet_url_request_adapter.h b/components/cronet/android/cronet_url_request_adapter.h
index a5141b5..f16a58f 100644
--- a/components/cronet/android/cronet_url_request_adapter.h
+++ b/components/cronet/android/cronet_url_request_adapter.h
@@ -27,7 +27,7 @@
 
 namespace cronet {
 
-class CronetURLRequestContextAdapter;
+class CronetContextAdapter;
 class TestUtil;
 
 // An adapter from Java CronetUrlRequest object to native CronetURLRequest.
@@ -43,7 +43,7 @@
   // causes connection migration to be disabled for this request if true. If
   // global connection migration flag is not enabled,
   // |jdisable_connection_migration| has no effect.
-  CronetURLRequestAdapter(CronetURLRequestContextAdapter* context,
+  CronetURLRequestAdapter(CronetContextAdapter* context,
                           JNIEnv* env,
                           jobject jurl_request,
                           const GURL& url,
@@ -158,7 +158,7 @@
   // Native Cronet URL Request that owns |this|.
   raw_ptr<CronetURLRequest> request_;
 
-  // Java object that owns this CronetURLRequestContextAdapter.
+  // Java object that owns this CronetContextAdapter.
   base::android::ScopedJavaGlobalRef<jobject> owner_;
 };
 
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
index 7a9da43..48f1f1a 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
@@ -727,32 +727,32 @@
         long createRequestContextAdapter(long urlRequestContextConfig);
         int setMinLogLevel(int loggingLevel);
         byte[] getHistogramDeltas();
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void destroy(long nativePtr, CronetUrlRequestContext caller);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         boolean startNetLogToFile(
                 long nativePtr, CronetUrlRequestContext caller, String fileName, boolean logAll);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void startNetLogToDisk(long nativePtr, CronetUrlRequestContext caller, String dirPath,
                 boolean logAll, int maxSize);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void stopNetLog(long nativePtr, CronetUrlRequestContext caller);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void initRequestContextOnInitThread(long nativePtr, CronetUrlRequestContext caller);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void configureNetworkQualityEstimatorForTesting(long nativePtr,
                 CronetUrlRequestContext caller, boolean useLocalHostRequests,
                 boolean useSmallerResponses, boolean disableOfflineCheck);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void provideRTTObservations(long nativePtr, CronetUrlRequestContext caller, boolean should);
 
-        @NativeClassQualifiedName("CronetURLRequestContextAdapter")
+        @NativeClassQualifiedName("CronetContextAdapter")
         void provideThroughputObservations(
                 long nativePtr, CronetUrlRequestContext caller, boolean should);
     }
diff --git a/components/cronet/android/test/cronet_test_util.cc b/components/cronet/android/test/cronet_test_util.cc
index d9f1e20..8065492 100644
--- a/components/cronet/android/test/cronet_test_util.cc
+++ b/components/cronet/android/test/cronet_test_util.cc
@@ -11,11 +11,11 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "components/cronet/android/cronet_context_adapter.h"
 #include "components/cronet/android/cronet_tests_jni_headers/CronetTestUtil_jni.h"
 #include "components/cronet/android/cronet_url_request_adapter.h"
-#include "components/cronet/android/cronet_url_request_context_adapter.h"
+#include "components/cronet/cronet_context.h"
 #include "components/cronet/cronet_url_request.h"
-#include "components/cronet/cronet_url_request_context.h"
 #include "net/socket/socket_test_util.h"
 #include "net/url_request/url_request.h"
 
@@ -39,23 +39,23 @@
 // static
 scoped_refptr<base::SingleThreadTaskRunner> TestUtil::GetTaskRunner(
     jlong jcontext_adapter) {
-  CronetURLRequestContextAdapter* context_adapter =
-      reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter);
+  CronetContextAdapter* context_adapter =
+      reinterpret_cast<CronetContextAdapter*>(jcontext_adapter);
   return context_adapter->context_->network_task_runner_;
 }
 
 // static
 net::URLRequestContext* TestUtil::GetURLRequestContext(jlong jcontext_adapter) {
-  CronetURLRequestContextAdapter* context_adapter =
-      reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter);
+  CronetContextAdapter* context_adapter =
+      reinterpret_cast<CronetContextAdapter*>(jcontext_adapter);
   return context_adapter->context_->network_tasks_->default_context_;
 }
 
 // static
 void TestUtil::RunAfterContextInitOnNetworkThread(jlong jcontext_adapter,
                                                   base::OnceClosure task) {
-  CronetURLRequestContextAdapter* context_adapter =
-      reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter);
+  CronetContextAdapter* context_adapter =
+      reinterpret_cast<CronetContextAdapter*>(jcontext_adapter);
   if (context_adapter->context_->network_tasks_
           ->is_default_context_initialized_) {
     std::move(task).Run();
diff --git a/components/cronet/cronet_url_request_context.cc b/components/cronet/cronet_context.cc
similarity index 83%
rename from components/cronet/cronet_url_request_context.cc
rename to components/cronet/cronet_context.cc
index 06bc8362..8e213bb 100644
--- a/components/cronet/cronet_url_request_context.cc
+++ b/components/cronet/cronet_context.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 "components/cronet/cronet_url_request_context.h"
+#include "components/cronet/cronet_context.h"
 
 #include <limits.h>
 #include <stddef.h>
@@ -180,7 +180,7 @@
 
 namespace cronet {
 
-CronetURLRequestContext::CronetURLRequestContext(
+CronetContext::CronetContext(
     std::unique_ptr<URLRequestContextConfig> context_config,
     std::unique_ptr<Callback> callback,
     scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
@@ -202,14 +202,14 @@
   }
 }
 
-CronetURLRequestContext::~CronetURLRequestContext() {
+CronetContext::~CronetContext() {
   DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
   GetNetworkTaskRunner()->DeleteSoon(FROM_HERE, network_tasks_.get());
 }
 
-CronetURLRequestContext::NetworkTasks::NetworkTasks(
+CronetContext::NetworkTasks::NetworkTasks(
     std::unique_ptr<URLRequestContextConfig> context_config,
-    std::unique_ptr<CronetURLRequestContext::Callback> callback)
+    std::unique_ptr<CronetContext::Callback> callback)
     : default_context_(nullptr),
       is_default_context_initialized_(false),
       context_config_(std::move(context_config)),
@@ -217,7 +217,7 @@
   DETACH_FROM_THREAD(network_thread_checker_);
 }
 
-CronetURLRequestContext::NetworkTasks::~NetworkTasks() {
+CronetContext::NetworkTasks::~NetworkTasks() {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   callback_->OnDestroyNetworkThread();
 
@@ -232,7 +232,7 @@
   }
 }
 
-void CronetURLRequestContext::InitRequestContextOnInitThread() {
+void CronetContext::InitRequestContextOnInitThread() {
   DCHECK(OnInitThread());
   // Cannot create this inside Initialize because Android requires this to be
   // created on the JNI thread.
@@ -241,16 +241,16 @@
   g_net_log.Get().EnsureInitializedOnInitThread();
   GetNetworkTaskRunner()->PostTask(
       FROM_HERE,
-      base::BindOnce(&CronetURLRequestContext::NetworkTasks::Initialize,
+      base::BindOnce(&CronetContext::NetworkTasks::Initialize,
                      base::Unretained(network_tasks_), GetNetworkTaskRunner(),
                      GetFileThread()->task_runner(),
                      std::move(proxy_config_service)));
 }
 
-void CronetURLRequestContext::NetworkTasks::
-    ConfigureNetworkQualityEstimatorForTesting(bool use_local_host_requests,
-                                               bool use_smaller_responses,
-                                               bool disable_offline_check) {
+void CronetContext::NetworkTasks::ConfigureNetworkQualityEstimatorForTesting(
+    bool use_local_host_requests,
+    bool use_smaller_responses,
+    bool disable_offline_check) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   network_quality_estimator_->SetUseLocalHostRequestsForTesting(
       use_local_host_requests);
@@ -260,20 +260,19 @@
       disable_offline_check);
 }
 
-void CronetURLRequestContext::ConfigureNetworkQualityEstimatorForTesting(
+void CronetContext::ConfigureNetworkQualityEstimatorForTesting(
     bool use_local_host_requests,
     bool use_smaller_responses,
     bool disable_offline_check) {
   PostTaskToNetworkThread(
       FROM_HERE,
-      base::BindOnce(&CronetURLRequestContext::NetworkTasks::
+      base::BindOnce(&CronetContext::NetworkTasks::
                          ConfigureNetworkQualityEstimatorForTesting,
                      base::Unretained(network_tasks_), use_local_host_requests,
                      use_smaller_responses, disable_offline_check));
 }
 
-void CronetURLRequestContext::NetworkTasks::ProvideRTTObservations(
-    bool should) {
+void CronetContext::NetworkTasks::ProvideRTTObservations(bool should) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   if (!network_quality_estimator_)
     return;
@@ -284,16 +283,14 @@
   }
 }
 
-void CronetURLRequestContext::ProvideRTTObservations(bool should) {
+void CronetContext::ProvideRTTObservations(bool should) {
   PostTaskToNetworkThread(
       FROM_HERE,
-      base::BindOnce(
-          &CronetURLRequestContext::NetworkTasks::ProvideRTTObservations,
-          base::Unretained(network_tasks_), should));
+      base::BindOnce(&CronetContext::NetworkTasks::ProvideRTTObservations,
+                     base::Unretained(network_tasks_), should));
 }
 
-void CronetURLRequestContext::NetworkTasks::ProvideThroughputObservations(
-    bool should) {
+void CronetContext::NetworkTasks::ProvideThroughputObservations(bool should) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   if (!network_quality_estimator_)
     return;
@@ -304,15 +301,15 @@
   }
 }
 
-void CronetURLRequestContext::ProvideThroughputObservations(bool should) {
+void CronetContext::ProvideThroughputObservations(bool should) {
   PostTaskToNetworkThread(
       FROM_HERE,
       base::BindOnce(
-          &CronetURLRequestContext::NetworkTasks::ProvideThroughputObservations,
+          &CronetContext::NetworkTasks::ProvideThroughputObservations,
           base::Unretained(network_tasks_), should));
 }
 
-void CronetURLRequestContext::NetworkTasks::InitializeNQEPrefs() const {
+void CronetContext::NetworkTasks::InitializeNQEPrefs() const {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   // Initializing |network_qualities_prefs_manager_| may post a callback to
   // |this|. So, |network_qualities_prefs_manager_| should be initialized after
@@ -322,7 +319,7 @@
 }
 
 std::unique_ptr<net::URLRequestContext>
-CronetURLRequestContext::NetworkTasks::BuildDefaultURLRequestContext(
+CronetContext::NetworkTasks::BuildDefaultURLRequestContext(
     std::unique_ptr<net::ProxyConfigService> proxy_config_service) {
   DCHECK(!network_quality_estimator_);
   DCHECK(!cronet_prefs_manager_);
@@ -393,7 +390,7 @@
 }
 
 std::unique_ptr<net::URLRequestContext>
-CronetURLRequestContext::NetworkTasks::BuildNetworkBoundURLRequestContext(
+CronetContext::NetworkTasks::BuildNetworkBoundURLRequestContext(
     net::NetworkChangeNotifier::NetworkHandle network) {
   net::URLRequestContextBuilder context_builder;
   SetSharedURLRequestContextBuilderConfig(&context_builder);
@@ -415,9 +412,8 @@
   return context;
 }
 
-void CronetURLRequestContext::NetworkTasks::
-    SetSharedURLRequestContextBuilderConfig(
-        net::URLRequestContextBuilder* context_builder) {
+void CronetContext::NetworkTasks::SetSharedURLRequestContextBuilderConfig(
+    net::URLRequestContextBuilder* context_builder) {
   context_builder->set_network_delegate(
       std::make_unique<BasicNetworkDelegate>());
   context_builder->set_net_log(g_net_log.Get().net_log());
@@ -432,7 +428,7 @@
   context_builder->SetCookieStore(nullptr);
 }
 
-void CronetURLRequestContext::NetworkTasks::SetSharedURLRequestContextConfig(
+void CronetContext::NetworkTasks::SetSharedURLRequestContextConfig(
     net::URLRequestContext* context) {
   context->set_check_cleartext_permitted(true);
   context->set_enable_brotli(context_config_->enable_brotli);
@@ -475,7 +471,7 @@
 #endif  // BUILDFLAG(ENABLE_REPORTING)
 }
 
-void CronetURLRequestContext::NetworkTasks::Initialize(
+void CronetContext::NetworkTasks::Initialize(
     scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
     scoped_refptr<base::SequencedTaskRunner> file_task_runner,
     std::unique_ptr<net::ProxyConfigService> proxy_config_service) {
@@ -507,9 +503,8 @@
     // thread and hope it executes before the one below does.
     network_task_runner_->PostTask(
         FROM_HERE,
-        base::BindOnce(
-            &CronetURLRequestContext::NetworkTasks::InitializeNQEPrefs,
-            base::Unretained(this)));
+        base::BindOnce(&CronetContext::NetworkTasks::InitializeNQEPrefs,
+                       base::Unretained(this)));
   }
 
   while (!tasks_waiting_for_context_.empty()) {
@@ -518,8 +513,7 @@
   }
 }
 
-net::URLRequestContext*
-CronetURLRequestContext::NetworkTasks::GetURLRequestContext(
+net::URLRequestContext* CronetContext::NetworkTasks::GetURLRequestContext(
     net::NetworkChangeNotifier::NetworkHandle network) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   DCHECK(is_default_context_initialized_);
@@ -533,11 +527,10 @@
   return contexts_[network].get();
 }
 
-// Request context getter for CronetURLRequestContext.
-class CronetURLRequestContext::ContextGetter
-    : public net::URLRequestContextGetter {
+// Request context getter for CronetContext.
+class CronetContext::ContextGetter : public net::URLRequestContextGetter {
  public:
-  explicit ContextGetter(CronetURLRequestContext* cronet_context)
+  explicit ContextGetter(CronetContext* cronet_context)
       : cronet_context_(cronet_context) {
     DCHECK(cronet_context_);
   }
@@ -558,33 +551,30 @@
   // Must be called on the network thread.
   ~ContextGetter() override { DCHECK(cronet_context_->IsOnNetworkThread()); }
 
-  // CronetURLRequestContext associated with this ContextGetter.
-  const raw_ptr<CronetURLRequestContext> cronet_context_;
+  // CronetContext associated with this ContextGetter.
+  const raw_ptr<CronetContext> cronet_context_;
 };
 
-net::URLRequestContextGetter*
-CronetURLRequestContext::CreateURLRequestContextGetter() {
+net::URLRequestContextGetter* CronetContext::CreateURLRequestContextGetter() {
   DCHECK(IsOnNetworkThread());
   return new ContextGetter(this);
 }
 
-net::URLRequestContext* CronetURLRequestContext::GetURLRequestContext(
+net::URLRequestContext* CronetContext::GetURLRequestContext(
     net::NetworkChangeNotifier::NetworkHandle network) {
   DCHECK(IsOnNetworkThread());
   return network_tasks_->GetURLRequestContext(network);
 }
 
-void CronetURLRequestContext::PostTaskToNetworkThread(
-    const base::Location& posted_from,
-    base::OnceClosure callback) {
+void CronetContext::PostTaskToNetworkThread(const base::Location& posted_from,
+                                            base::OnceClosure callback) {
   GetNetworkTaskRunner()->PostTask(
       posted_from,
-      base::BindOnce(
-          &CronetURLRequestContext::NetworkTasks::RunTaskAfterContextInit,
-          base::Unretained(network_tasks_), std::move(callback)));
+      base::BindOnce(&CronetContext::NetworkTasks::RunTaskAfterContextInit,
+                     base::Unretained(network_tasks_), std::move(callback)));
 }
 
-void CronetURLRequestContext::NetworkTasks::RunTaskAfterContextInit(
+void CronetContext::NetworkTasks::RunTaskAfterContextInit(
     base::OnceClosure task_to_run_after_context_init) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   if (is_default_context_initialized_) {
@@ -595,17 +585,17 @@
   tasks_waiting_for_context_.push(std::move(task_to_run_after_context_init));
 }
 
-bool CronetURLRequestContext::IsOnNetworkThread() const {
+bool CronetContext::IsOnNetworkThread() const {
   return GetNetworkTaskRunner()->BelongsToCurrentThread();
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
-CronetURLRequestContext::GetNetworkTaskRunner() const {
+CronetContext::GetNetworkTaskRunner() const {
   return network_task_runner_;
 }
 
-bool CronetURLRequestContext::StartNetLogToFile(const std::string& file_name,
-                                                bool log_all) {
+bool CronetContext::StartNetLogToFile(const std::string& file_name,
+                                      bool log_all) {
 #if BUILDFLAG(IS_WIN)
   base::FilePath file_path(base::FilePath::FromUTF8Unsafe(file_name));
 #else
@@ -618,34 +608,33 @@
   }
   PostTaskToNetworkThread(
       FROM_HERE,
-      base::BindOnce(&CronetURLRequestContext::NetworkTasks::StartNetLog,
+      base::BindOnce(&CronetContext::NetworkTasks::StartNetLog,
                      base::Unretained(network_tasks_), file_path, log_all));
   return true;
 }
 
-void CronetURLRequestContext::StartNetLogToDisk(const std::string& dir_name,
-                                                bool log_all,
-                                                int max_size) {
+void CronetContext::StartNetLogToDisk(const std::string& dir_name,
+                                      bool log_all,
+                                      int max_size) {
   PostTaskToNetworkThread(
       FROM_HERE,
-      base::BindOnce(
-          &CronetURLRequestContext::NetworkTasks::StartNetLogToBoundedFile,
-          base::Unretained(network_tasks_), dir_name, log_all, max_size));
+      base::BindOnce(&CronetContext::NetworkTasks::StartNetLogToBoundedFile,
+                     base::Unretained(network_tasks_), dir_name, log_all,
+                     max_size));
 }
 
-void CronetURLRequestContext::StopNetLog() {
+void CronetContext::StopNetLog() {
   DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
   PostTaskToNetworkThread(
-      FROM_HERE,
-      base::BindOnce(&CronetURLRequestContext::NetworkTasks::StopNetLog,
-                     base::Unretained(network_tasks_)));
+      FROM_HERE, base::BindOnce(&CronetContext::NetworkTasks::StopNetLog,
+                                base::Unretained(network_tasks_)));
 }
 
-int CronetURLRequestContext::default_load_flags() const {
+int CronetContext::default_load_flags() const {
   return default_load_flags_;
 }
 
-base::Thread* CronetURLRequestContext::GetFileThread() {
+base::Thread* CronetContext::GetFileThread() {
   DCHECK(OnInitThread());
   if (!file_thread_) {
     file_thread_ = std::make_unique<base::Thread>("Network File Thread");
@@ -654,13 +643,13 @@
   return file_thread_.get();
 }
 
-void CronetURLRequestContext::NetworkTasks::OnEffectiveConnectionTypeChanged(
+void CronetContext::NetworkTasks::OnEffectiveConnectionTypeChanged(
     net::EffectiveConnectionType effective_connection_type) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   callback_->OnEffectiveConnectionTypeChanged(effective_connection_type);
 }
 
-void CronetURLRequestContext::NetworkTasks::OnRTTOrThroughputEstimatesComputed(
+void CronetContext::NetworkTasks::OnRTTOrThroughputEstimatesComputed(
     base::TimeDelta http_rtt,
     base::TimeDelta transport_rtt,
     int32_t downstream_throughput_kbps) {
@@ -678,7 +667,7 @@
                                                 downstream_throughput_kbps);
 }
 
-void CronetURLRequestContext::NetworkTasks::OnRTTObservation(
+void CronetContext::NetworkTasks::OnRTTObservation(
     int32_t rtt_ms,
     const base::TimeTicks& timestamp,
     net::NetworkQualityObservationSource source) {
@@ -689,7 +678,7 @@
       source);
 }
 
-void CronetURLRequestContext::NetworkTasks::OnThroughputObservation(
+void CronetContext::NetworkTasks::OnThroughputObservation(
     int32_t throughput_kbps,
     const base::TimeTicks& timestamp,
     net::NetworkQualityObservationSource source) {
@@ -700,9 +689,8 @@
       (timestamp - base::TimeTicks::UnixEpoch()).InMilliseconds(), source);
 }
 
-void CronetURLRequestContext::NetworkTasks::StartNetLog(
-    const base::FilePath& file_path,
-    bool include_socket_bytes) {
+void CronetContext::NetworkTasks::StartNetLog(const base::FilePath& file_path,
+                                              bool include_socket_bytes) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
 
   // Do nothing if already logging to a file.
@@ -721,15 +709,16 @@
   net_log_file_observer_->StartObserving(g_net_log.Get().net_log());
 }
 
-void CronetURLRequestContext::NetworkTasks::StartNetLogToBoundedFile(
+void CronetContext::NetworkTasks::StartNetLogToBoundedFile(
     const std::string& dir_path,
     bool include_socket_bytes,
     int size) {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
 
   // Do nothing if already logging to a directory.
-  if (net_log_file_observer_)
+  if (net_log_file_observer_) {
     return;
+  }
 
   // TODO(eroman): The cronet API passes a directory here. But it should now
   // just pass a file path.
@@ -761,25 +750,24 @@
   net_log_file_observer_->StartObserving(g_net_log.Get().net_log());
 }
 
-void CronetURLRequestContext::NetworkTasks::StopNetLog() {
+void CronetContext::NetworkTasks::StopNetLog() {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
 
   if (!net_log_file_observer_)
     return;
   net_log_file_observer_->StopObserving(
       base::Value::ToUniquePtrValue(GetNetLogInfo()),
-      base::BindOnce(
-          &CronetURLRequestContext::NetworkTasks::StopNetLogCompleted,
-          base::Unretained(this)));
+      base::BindOnce(&CronetContext::NetworkTasks::StopNetLogCompleted,
+                     base::Unretained(this)));
   net_log_file_observer_.reset();
 }
 
-void CronetURLRequestContext::NetworkTasks::StopNetLogCompleted() {
+void CronetContext::NetworkTasks::StopNetLogCompleted() {
   DCHECK_CALLED_ON_VALID_THREAD(network_thread_checker_);
   callback_->OnStopNetLogCompleted();
 }
 
-base::Value CronetURLRequestContext::NetworkTasks::GetNetLogInfo() const {
+base::Value CronetContext::NetworkTasks::GetNetLogInfo() const {
   base::Value net_info(base::Value::Type::DICTIONARY);
   for (auto& iter : contexts_)
     net_info.SetKey(base::NumberToString(iter.first),
diff --git a/components/cronet/cronet_url_request_context.h b/components/cronet/cronet_context.h
similarity index 93%
rename from components/cronet/cronet_url_request_context.h
rename to components/cronet/cronet_context.h
index 276390ea..8fc71a3 100644
--- a/components/cronet/cronet_url_request_context.h
+++ b/components/cronet/cronet_context.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_CRONET_CRONET_URL_REQUEST_CONTEXT_H_
-#define COMPONENTS_CRONET_CRONET_URL_REQUEST_CONTEXT_H_
+#ifndef COMPONENTS_CRONET_CRONET_CONTEXT_H_
+#define COMPONENTS_CRONET_CRONET_CONTEXT_H_
 
 #include <stdint.h>
 
@@ -49,10 +49,10 @@
 struct URLRequestContextConfig;
 
 // Wrapper around net::URLRequestContext.
-class CronetURLRequestContext {
+class CronetContext {
  public:
-  // Callback implemented by CronetURLRequestContext() caller and owned by
-  // CronetURLRequestContext::NetworkTasks.
+  // Callback implemented by CronetContext() caller and owned by
+  // CronetContext::NetworkTasks.
   class Callback {
    public:
     virtual ~Callback() = default;
@@ -91,24 +91,23 @@
     virtual void OnStopNetLogCompleted() = 0;
   };
 
-  // Constructs CronetURLRequestContext using |context_config|. The |callback|
+  // Constructs CronetContext using |context_config|. The |callback|
   // is owned by |this| and is deleted on network thread.
   // All |callback| methods are invoked on network thread.
   // If the network_task_runner is not assigned, a network thread would be
   // created for network tasks. Otherwise the tasks would be running on the
   // assigned task runner.
-  CronetURLRequestContext(
-      std::unique_ptr<URLRequestContextConfig> context_config,
-      std::unique_ptr<Callback> callback,
-      scoped_refptr<base::SingleThreadTaskRunner> network_task_runner =
-          nullptr);
+  CronetContext(std::unique_ptr<URLRequestContextConfig> context_config,
+                std::unique_ptr<Callback> callback,
+                scoped_refptr<base::SingleThreadTaskRunner>
+                    network_task_runner = nullptr);
 
-  CronetURLRequestContext(const CronetURLRequestContext&) = delete;
-  CronetURLRequestContext& operator=(const CronetURLRequestContext&) = delete;
+  CronetContext(const CronetContext&) = delete;
+  CronetContext& operator=(const CronetContext&) = delete;
 
   // Releases all resources for the request context and deletes the object.
   // Blocks until network thread is destroyed after running all pending tasks.
-  virtual ~CronetURLRequestContext();
+  virtual ~CronetContext();
 
   // Called on init thread to initialize URLRequestContext.
   void InitRequestContextOnInitThread();
@@ -186,7 +185,7 @@
    public:
     // Invoked off the network thread.
     NetworkTasks(std::unique_ptr<URLRequestContextConfig> config,
-                 std::unique_ptr<CronetURLRequestContext::Callback> callback);
+                 std::unique_ptr<CronetContext::Callback> callback);
 
     NetworkTasks(const NetworkTasks&) = delete;
     NetworkTasks& operator=(const NetworkTasks&) = delete;
@@ -329,7 +328,7 @@
     scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 
     // Callback implemented by the client.
-    std::unique_ptr<CronetURLRequestContext::Callback> callback_;
+    std::unique_ptr<CronetContext::Callback> callback_;
 
     THREAD_CHECKER(network_thread_checker_);
   };
@@ -364,4 +363,4 @@
 
 }  // namespace cronet
 
-#endif  // COMPONENTS_CRONET_CRONET_URL_REQUEST_CONTEXT_H_
+#endif  // COMPONENTS_CRONET_CRONET_CONTEXT_H_
diff --git a/components/cronet/cronet_url_request.cc b/components/cronet/cronet_url_request.cc
index 5eca14e..cc0e2aad 100644
--- a/components/cronet/cronet_url_request.cc
+++ b/components/cronet/cronet_url_request.cc
@@ -11,7 +11,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "build/build_config.h"
-#include "components/cronet/cronet_url_request_context.h"
+#include "components/cronet/cronet_context.h"
 #include "net/base/idempotency.h"
 #include "net/base/load_flags.h"
 #include "net/base/load_states.h"
@@ -55,7 +55,7 @@
 
 }  // namespace
 
-CronetURLRequest::CronetURLRequest(CronetURLRequestContext* context,
+CronetURLRequest::CronetURLRequest(CronetContext* context,
                                    std::unique_ptr<Callback> callback,
                                    const GURL& url,
                                    net::RequestPriority priority,
@@ -275,7 +275,7 @@
 }
 
 void CronetURLRequest::NetworkTasks::Start(
-    CronetURLRequestContext* context,
+    CronetContext* context,
     const std::string& method,
     std::unique_ptr<net::HttpRequestHeaders> request_headers,
     std::unique_ptr<net::UploadDataStream> upload) {
diff --git a/components/cronet/cronet_url_request.h b/components/cronet/cronet_url_request.h
index a96c790..1edb712 100644
--- a/components/cronet/cronet_url_request.h
+++ b/components/cronet/cronet_url_request.h
@@ -27,7 +27,7 @@
 
 namespace cronet {
 
-class CronetURLRequestContext;
+class CronetContext;
 class TestUtil;
 
 // Wrapper around net::URLRequestContext.
@@ -139,7 +139,7 @@
   // causes connection migration to be disabled for this request if true. If
   // global connection migration flag is not enabled,
   // |disable_connection_migration| has no effect.
-  CronetURLRequest(CronetURLRequestContext* context,
+  CronetURLRequest(CronetContext* context,
                    std::unique_ptr<Callback> callback,
                    const GURL& url,
                    net::RequestPriority priority,
@@ -221,7 +221,7 @@
     ~NetworkTasks() override;
 
     // Starts the request.
-    void Start(CronetURLRequestContext* context,
+    void Start(CronetContext* context,
                const std::string& method,
                std::unique_ptr<net::HttpRequestHeaders> request_headers,
                std::unique_ptr<net::UploadDataStream> upload);
@@ -302,7 +302,7 @@
     THREAD_CHECKER(network_thread_checker_);
   };
 
-  raw_ptr<CronetURLRequestContext> context_;
+  raw_ptr<CronetContext> context_;
   // |network_tasks_| is invoked on network thread.
   NetworkTasks network_tasks_;
 
diff --git a/components/cronet/native/engine.cc b/components/cronet/native/engine.cc
index dae346479..8c11087 100644
--- a/components/cronet/native/engine.cc
+++ b/components/cronet/native/engine.cc
@@ -15,8 +15,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/no_destructor.h"
 #include "build/build_config.h"
+#include "components/cronet/cronet_context.h"
 #include "components/cronet/cronet_global_state.h"
-#include "components/cronet/cronet_url_request_context.h"
 #include "components/cronet/native/generated/cronet.idl_impl_struct.h"
 #include "components/cronet/native/include/cronet_c.h"
 #include "components/cronet/native/runnables.h"
@@ -189,20 +189,19 @@
             quic_hint.host, quic_hint.port, quic_hint.alternate_port));
   }
 
-  context_ = std::make_unique<CronetURLRequestContext>(
-      std::move(config), std::make_unique<Callback>(this));
+  context_ = std::make_unique<CronetContext>(std::move(config),
+                                             std::make_unique<Callback>(this));
 
   // TODO(mef): It'd be nice to remove the java code and this code, and get
-  // rid of CronetURLRequestContextAdapter::InitRequestContextOnInitThread.
-  // Could also make CronetURLRequestContext::InitRequestContextOnInitThread()
+  // rid of CronetContextAdapter::InitRequestContextOnInitThread.
+  // Could also make CronetContext::InitRequestContextOnInitThread()
   // private and mark CronetLibraryLoader.postToInitThread() as
   // @VisibleForTesting (as the only external use will be in a test).
 
   // Initialize context on the init thread.
   cronet::PostTaskToInitThread(
-      FROM_HERE,
-      base::BindOnce(&CronetURLRequestContext::InitRequestContextOnInitThread,
-                     base::Unretained(context_.get())));
+      FROM_HERE, base::BindOnce(&CronetContext::InitRequestContextOnInitThread,
+                                base::Unretained(context_.get())));
   return CheckResult(Cronet_RESULT_SUCCESS);
 }
 
@@ -367,9 +366,9 @@
   scoped_refptr<net::URLRequestContextGetter> context_getter_;
 };
 
-// Callback is owned by CronetURLRequestContext. It is invoked and deleted
+// Callback is owned by CronetContext. It is invoked and deleted
 // on the network thread.
-class Cronet_EngineImpl::Callback : public CronetURLRequestContext::Callback {
+class Cronet_EngineImpl::Callback : public CronetContext::Callback {
  public:
   explicit Callback(Cronet_EngineImpl* engine);
 
@@ -378,7 +377,7 @@
 
   ~Callback() override;
 
-  // CronetURLRequestContext::Callback implementation:
+  // CronetContext::Callback implementation:
   void OnInitNetworkThread() override LOCKS_EXCLUDED(engine_->lock_);
   void OnDestroyNetworkThread() override;
   void OnEffectiveConnectionTypeChanged(
diff --git a/components/cronet/native/engine.h b/components/cronet/native/engine.h
index 395a02e9..745bffd 100644
--- a/components/cronet/native/engine.h
+++ b/components/cronet/native/engine.h
@@ -23,9 +23,9 @@
 }
 
 namespace cronet {
-class CronetURLRequestContext;
+class CronetContext;
 
-// Implementation of Cronet_Engine that uses CronetURLRequestContext.
+// Implementation of Cronet_Engine that uses CronetContext.
 class Cronet_EngineImpl : public Cronet_Engine {
  public:
   Cronet_EngineImpl();
@@ -62,9 +62,7 @@
   // stream_engine is owned by |this| and is only valid until |this| shutdown.
   stream_engine* GetBidirectionalStreamEngine();
 
-  CronetURLRequestContext* cronet_url_request_context() const {
-    return context_.get();
-  }
+  CronetContext* cronet_url_request_context() const { return context_.get(); }
 
   // Returns true if there is a listener currently registered (using
   // AddRequestFinishedListener()), and false otherwise.
@@ -88,7 +86,7 @@
   // Synchronize access to member variables from different threads.
   base::Lock lock_;
   // Cronet URLRequest context used for all network operations.
-  std::unique_ptr<CronetURLRequestContext> context_;
+  std::unique_ptr<CronetContext> context_;
   // Signaled when |context_| initialization is done.
   base::WaitableEvent init_completed_;
 
diff --git a/components/cronet/native/upload_data_sink.h b/components/cronet/native/upload_data_sink.h
index 8028ff4..d01438b 100644
--- a/components/cronet/native/upload_data_sink.h
+++ b/components/cronet/native/upload_data_sink.h
@@ -10,9 +10,9 @@
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "components/cronet/cronet_context.h"
 #include "components/cronet/cronet_upload_data_stream.h"
 #include "components/cronet/cronet_url_request.h"
-#include "components/cronet/cronet_url_request_context.h"
 #include "components/cronet/native/generated/cronet.idl_impl_interface.h"
 
 namespace cronet {
diff --git a/components/cronet/native/url_request.h b/components/cronet/native/url_request.h
index f1732f9..0949385 100644
--- a/components/cronet/native/url_request.h
+++ b/components/cronet/native/url_request.h
@@ -13,8 +13,8 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/thread_annotations.h"
+#include "components/cronet/cronet_context.h"
 #include "components/cronet/cronet_url_request.h"
-#include "components/cronet/cronet_url_request_context.h"
 #include "components/cronet/native/generated/cronet.idl_impl_interface.h"
 
 namespace net {
@@ -26,7 +26,7 @@
 class Cronet_EngineImpl;
 class Cronet_UploadDataSinkImpl;
 
-// Implementation of Cronet_UrlRequest that uses CronetURLRequestContext.
+// Implementation of Cronet_UrlRequest that uses CronetContext.
 class Cronet_UrlRequestImpl : public Cronet_UrlRequest {
  public:
   Cronet_UrlRequestImpl();
diff --git a/components/dbus/menu/menu_property_list_unittest.cc b/components/dbus/menu/menu_property_list_unittest.cc
index 1f5ddff..5f83d8e3 100644
--- a/components/dbus/menu/menu_property_list_unittest.cc
+++ b/components/dbus/menu/menu_property_list_unittest.cc
@@ -20,7 +20,7 @@
 #include "ui/events/test/keyboard_layout.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/image/image_skia_rep_default.h"
+#include "ui/gfx/image/image_skia_rep.h"
 
 #if BUILDFLAG(IS_LINUX)
 #include "ui/ozone/public/ozone_platform.h"
diff --git a/components/metrics/call_stack_profile_builder_unittest.cc b/components/metrics/call_stack_profile_builder_unittest.cc
index 7a3c33e..fe564b78 100644
--- a/components/metrics/call_stack_profile_builder_unittest.cc
+++ b/components/metrics/call_stack_profile_builder_unittest.cc
@@ -111,11 +111,11 @@
   std::vector<base::Frame> frames1 = {frame1, frame2};
   std::vector<base::Frame> frames2 = {frame3};
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames1, base::TimeTicks());
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames2, base::TimeTicks());
   profile_builder->OnProfileCompleted(base::Milliseconds(500),
                                       base::Milliseconds(100));
@@ -213,11 +213,11 @@
 
   // Two stacks are completed with the same frames therefore they are deduped
   // to one.
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames, base::TimeTicks());
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames, base::TimeTicks());
 
   profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta());
@@ -254,11 +254,11 @@
   std::vector<base::Frame> frames2 = {frame2};
 
   // Two stacks are completed with the different frames therefore not deduped.
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames1, base::TimeTicks());
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames2, base::TimeTicks());
 
   profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta());
@@ -303,8 +303,8 @@
 
   std::vector<base::Frame> frames = {frame1, frame2};
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames, base::TimeTicks());
   profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta());
 
@@ -357,8 +357,8 @@
 
   std::vector<base::Frame> frames = {frame1, frame2};
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(frames, base::TimeTicks());
   profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta());
 
@@ -410,26 +410,26 @@
 
   // Id 0 means the message loop hasn't been started yet, so the sample should
   // not have continued_work set.
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
 
   // The second sample with the same id should have continued_work set.
   work_id_recorder.current_id = 1;
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
 
   // Ids are in general non-contiguous across multiple samples.
   work_id_recorder.current_id = 10;
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
 
   profile_builder->OnProfileCompleted(base::Milliseconds(500),
@@ -475,9 +475,9 @@
   base::TestModule module;
   base::Frame frame = {0x10, &module};
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, base::TimeTicks());
 
   profile_builder->OnProfileCompleted(base::Milliseconds(500),
@@ -513,22 +513,22 @@
   base::TimeTicks profile_start_time = base::TimeTicks::UnixEpoch();
   base::TimeDelta sample_time_delta = base::Seconds(1);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, profile_start_time);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame},
                                      profile_start_time + sample_time_delta);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(
       {frame}, profile_start_time + 2 * sample_time_delta);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(
       {frame}, profile_start_time + 3 * sample_time_delta);
 
@@ -536,7 +536,7 @@
   profile_builder->ApplyMetadataRetrospectively(
       profile_start_time + sample_time_delta,
       profile_start_time + sample_time_delta * 2,
-      base::MetadataRecorder::Item(3, 30, absl::nullopt, 300));
+      base::MetadataRecorder::Item(3, 30, 300));
 
   profile_builder->OnProfileCompleted(3 * sample_time_delta, sample_time_delta);
 
@@ -578,29 +578,29 @@
   base::TimeTicks profile_start_time = base::TimeTicks::UnixEpoch();
   base::TimeDelta sample_time_delta = base::Seconds(1);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame}, profile_start_time);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted({frame},
                                      profile_start_time + sample_time_delta);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(
       {frame}, profile_start_time + 2 * sample_time_delta);
 
-  profile_builder->RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  profile_builder->RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   profile_builder->OnSampleCompleted(
       {frame}, profile_start_time + 3 * sample_time_delta);
 
   profile_builder->ApplyMetadataRetrospectively(
       profile_start_time - base::Microseconds(1),
       profile_start_time + sample_time_delta,
-      base::MetadataRecorder::Item(3, 30, absl::nullopt, 300));
+      base::MetadataRecorder::Item(3, 30, 300));
 
   profile_builder->OnProfileCompleted(3 * sample_time_delta, sample_time_delta);
 
diff --git a/components/metrics/call_stack_profile_metadata_unittest.cc b/components/metrics/call_stack_profile_metadata_unittest.cc
index ccdab81..f1a0407 100644
--- a/components/metrics/call_stack_profile_metadata_unittest.cc
+++ b/components/metrics/call_stack_profile_metadata_unittest.cc
@@ -84,8 +84,8 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
 
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
@@ -99,9 +99,9 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -119,9 +119,9 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -135,40 +135,18 @@
   EXPECT_EQ(10, items[0].value());
 }
 
-TEST(CallStackProfileMetadataTest, MetadataRecorder_SetThreadItem) {
-  base::MetadataRecorder metadata_recorder;
-  CallStackProfileMetadata metadata;
-  google::protobuf::RepeatedField<uint64_t> name_hashes;
-
-  metadata_recorder.Set(100, absl::nullopt, base::PlatformThread::CurrentId(),
-                        10);
-  metadata_recorder.Set(100, absl::nullopt, base::kInvalidThreadId, 20);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
-  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
-      metadata.CreateSampleMetadata(&name_hashes);
-
-  ASSERT_EQ(1, name_hashes.size());
-  EXPECT_EQ(100u, name_hashes[0]);
-
-  ASSERT_EQ(1, items.size());
-  EXPECT_EQ(0, items[0].name_hash_index());
-  EXPECT_FALSE(items[0].has_key());
-  EXPECT_EQ(10, items[0].value());
-}
-
 TEST(CallStackProfileMetadataTest, MetadataRecorder_RepeatItem) {
   base::MetadataRecorder metadata_recorder;
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -183,13 +161,13 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -204,14 +182,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 11);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 11);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -228,14 +206,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 11);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 11);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -253,14 +231,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Set(101, absl::nullopt, absl::nullopt, 11);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(101, absl::nullopt, 11);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -278,14 +256,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Set(101, 50, absl::nullopt, 11);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(101, 50, 11);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -304,14 +282,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Remove(100, absl::nullopt, absl::nullopt);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Remove(100, absl::nullopt);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -328,14 +306,14 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Remove(100, 50, absl::nullopt);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Remove(100, 50);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -348,42 +326,16 @@
   EXPECT_FALSE(items[0].has_value());
 }
 
-TEST(CallStackProfileMetadataTest, MetadataRecorder_RemovedThreadItem) {
-  base::MetadataRecorder metadata_recorder;
-  CallStackProfileMetadata metadata;
-  google::protobuf::RepeatedField<uint64_t> name_hashes;
-
-  metadata_recorder.Set(100, absl::nullopt, base::PlatformThread::CurrentId(),
-                        10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
-  (void)metadata.CreateSampleMetadata(&name_hashes);
-
-  metadata_recorder.Remove(100, absl::nullopt,
-                           base::PlatformThread::CurrentId());
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
-  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
-      metadata.CreateSampleMetadata(&name_hashes);
-
-  EXPECT_EQ(1, name_hashes.size());
-
-  ASSERT_EQ(1, items.size());
-  EXPECT_EQ(0, items[0].name_hash_index());
-  EXPECT_FALSE(items[0].has_key());
-  EXPECT_FALSE(items[0].has_value());
-}
-
 TEST(CallStackProfileMetadataTest,
      MetadataRecorder_SetMixedUnkeyedAndKeyedItems) {
   base::MetadataRecorder metadata_recorder;
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 20);
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 20);
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -405,15 +357,15 @@
   CallStackProfileMetadata metadata;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  metadata_recorder.Set(100, absl::nullopt, absl::nullopt, 20);
-  metadata_recorder.Set(100, 50, absl::nullopt, 10);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(100, absl::nullopt, 20);
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   std::ignore = metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Remove(100, absl::nullopt, absl::nullopt);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Remove(100, absl::nullopt);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -434,7 +386,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
   metadata.ApplyMetadata(item, stack_samples.begin() + 1,
                          stack_samples.begin() + 4, &stack_samples,
                          &name_hashes);
@@ -467,8 +419,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(4, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(4, 30, 300);
   metadata.ApplyMetadata(item1, stack_samples.begin() + 1,
                          stack_samples.begin() + 4, &stack_samples,
                          &name_hashes);
@@ -504,10 +456,9 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 40, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item3(3, absl::nullopt, absl::nullopt,
-                                           300);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 40, 300);
+  const base::MetadataRecorder::Item item3(3, absl::nullopt, 300);
   metadata.ApplyMetadata(item1, stack_samples.begin() + 1,
                          stack_samples.begin() + 4, &stack_samples,
                          &name_hashes);
@@ -547,7 +498,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
   metadata.ApplyMetadata(item, stack_samples.begin() + 1,
                          stack_samples.begin() + 1, &stack_samples,
                          &name_hashes);
@@ -569,7 +520,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
   metadata.ApplyMetadata(item, stack_samples.begin() + 1, stack_samples.end(),
                          &stack_samples, &name_hashes);
 
@@ -587,8 +538,8 @@
   EXPECT_EQ(0, stack_samples[4].metadata_size());
 
   base::MetadataRecorder metadata_recorder;
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -605,27 +556,26 @@
       stack_samples;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(5, 50, absl::nullopt, 500);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(5, 50, 500);
 
   stack_samples.Add();
 
   // Apply then remove item1.
-  metadata_recorder.Set(item1.name_hash, *item1.key, item1.thread_id,
-                        item1.value);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(item1.name_hash, *item1.key, item1.value);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata_recorder.Remove(item1.name_hash, *item1.key, item1.thread_id);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Remove(item1.name_hash, *item1.key);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -669,24 +619,23 @@
       stack_samples;
   google::protobuf::RepeatedField<uint64_t> name_hashes;
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
   // Record item1 on an ongoing basis via RecordMetadata.
-  metadata_recorder.Set(item1.name_hash, *item1.key, item1.thread_id,
-                        item1.value);
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata_recorder.Set(item1.name_hash, *item1.key, item1.value);
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -706,8 +655,8 @@
   EXPECT_EQ(0, stack_samples[2].metadata_size());
 
   // The next recorded sample should have item1 applied since it's still active.
-  metadata.RecordMetadata(base::MetadataRecorder::MetadataProvider(
-      &metadata_recorder, base::PlatformThread::CurrentId()));
+  metadata.RecordMetadata(
+      base::MetadataRecorder::MetadataProvider(&metadata_recorder));
   *stack_samples.Add()->mutable_metadata() =
       metadata.CreateSampleMetadata(&name_hashes);
 
@@ -725,7 +674,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over two non-overlapping ranges.
   metadata.ApplyMetadata(item, stack_samples.begin(), stack_samples.begin() + 2,
@@ -764,7 +713,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over two ranges where the second starts on the same sample
   // that the first ends. This should result in one range covering both.
@@ -801,8 +750,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   metadata.ApplyMetadata(item1, stack_samples.begin(),
                          stack_samples.begin() + 2, &stack_samples,
@@ -841,7 +790,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   metadata.ApplyMetadata(item, stack_samples.begin(), stack_samples.begin() + 4,
                          &stack_samples, &name_hashes);
@@ -877,8 +826,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   // Apply metadata over a range, then over a range fully enclosed within the
   // first one.
@@ -920,7 +869,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over a range, then over a range that fully encloses the
   // first one.
@@ -958,8 +907,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   // Apply metadata over a range, then over a range that fully encloses the
   // first one.
@@ -997,7 +946,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over a range, then over a range that overlaps the beginning
   // (but not the end) of first one.
@@ -1036,8 +985,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   // Apply metadata over a range, then over a range that overlaps the beginning
   // (but not the end) of first one.
@@ -1077,7 +1026,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over a range, then over a range that overlaps the beginning
   // (but not the end) of first one.
@@ -1115,8 +1064,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   // Apply metadata over a range, then over a range that overlaps the beginning
   // (but not the end) of first one.
@@ -1155,7 +1104,7 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item(3, 30, absl::nullopt, 300);
+  const base::MetadataRecorder::Item item(3, 30, 300);
 
   // Apply metadata over the same range with one value, then a different value.
   metadata.ApplyMetadata(item, stack_samples.begin() + 1,
@@ -1192,8 +1141,8 @@
   for (int i = 0; i < 5; i++)
     stack_samples.Add();
 
-  const base::MetadataRecorder::Item item1(3, 30, absl::nullopt, 300);
-  const base::MetadataRecorder::Item item2(3, 30, absl::nullopt, 400);
+  const base::MetadataRecorder::Item item1(3, 30, 300);
+  const base::MetadataRecorder::Item item2(3, 30, 400);
 
   // Apply metadata over the same range with one value, then a different value.
   metadata.ApplyMetadata(item1, stack_samples.begin() + 1,
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 2ed6eddf..dbd0db7e 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -27,6 +27,10 @@
 #endif
 };
 
+// Enables favicons in Password Manager.
+const base::Feature kEnableFaviconForPasswords{
+    "EnableFaviconForPasswords", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables UI that allows the user to create a strong password even if the field
 // wasn't parsed as a new password field.
 // TODO(crbug/1181254): Remove once it's launched.
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h
index 266fa01..d45cba6d 100644
--- a/components/password_manager/core/common/password_manager_features.h
+++ b/components/password_manager/core/common/password_manager_features.h
@@ -21,6 +21,7 @@
 
 extern const base::Feature kBiometricTouchToFill;
 extern const base::Feature kDetectFormSubmissionOnFormClear;
+extern const base::Feature kEnableFaviconForPasswords;
 extern const base::Feature kEnableManualPasswordGeneration;
 extern const base::Feature kEnableOverwritingPlaceholderUsernames;
 extern const base::Feature kEnablePasswordsAccountStorage;
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index a3ef2d9..579b2540 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -6231,10 +6231,6 @@
 <translation id="8101381354936029836">Atomische Richtlinien-Gruppe:</translation>
 <translation id="8102913158860568230">Standardeinstellung für MediaStream</translation>
 <translation id="8104962233214241919">Client-Zertifikate für diese Websites automatisch auswählen</translation>
-<translation id="8111502498815410897">Mit dieser Richtlinie kann eine Aktivierung oder Deaktivierung des schnellen Pairings erzwungen werden.
-      Schnelles Pairing ist ein neuer Bluetooth-Kopplungsprozess, bei dem gekoppelte Peripheriegeräte mit einem GAIA-Konto verknüpft werden.
-      Dies ermöglicht Geräten unter Chrome OS (und Android), die im selben GAIA-Konto angemeldet sind, sich automatisch zu koppeln.
-      Wenn diese Richtlinie nicht aktiviert ist, nimmt „Schnelles Pairing“ das Standardverhalten unter Chrome OS an und ist aktiviert.</translation>
 <translation id="8114382167597081590">Eingeschränkten Modus auf YouTube nicht erzwingen</translation>
 <translation id="8117921351531866504">Mit dieser Richtlinie können Sie Websites erlauben zu prüfen, ob ein Nutzer Zahlungsmethoden gespeichert hat.
 
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 7438464a..64ec1db 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -788,6 +788,17 @@
 
       Consulta <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> para fijar apps a la barra de <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="186719019195685253">Acción a realizar si se alcanza la demora de inactividad mientras el dispositivo funciona con alimentación de corriente</translation>
+<translation id="1869688072690234823">Si estableces la política, controlarás qué factores de WebAuthn se pueden usar.
+
+      A fin de permitir lo siguiente:
+
+      * Para cada factor de WebAuthn factor, usa ["all"] (incluye los factores que se agreguen en el futuro).
+
+      * Para usar solo el PIN, usa ["PIN"].
+
+      * Para usar el PIN y la huella dactilar, usa ["PIN", "FINGERPRINT"].
+
+      Si no habilitas la política o la estableces como una lista vacía, no habrá factores de WebAuthn disponibles para dispositivos administrados.</translation>
 <translation id="1881649377321404593">
       Se quitó esta política en M80. Ya no es necesaria porque WebDriver ahora es compatible con todas las políticas existentes.
 
@@ -1551,6 +1562,7 @@
 <translation id="2664391398878045611">La página Nueva pestaña no mostrará la notificación del espacio del medio aunque esté disponible</translation>
 <translation id="2664682171745499686">Elimina advertencias de dominios similares en dominios</translation>
 <translation id="2665422249821137126">Habilita el cursor grande en la pantalla de acceso</translation>
+<translation id="2667894101494585925">Habilitar la recuperación de la guía de optimización</translation>
 <translation id="2672012807430078509">Controlar el uso de NTLM como protocolo de autenticación para las activaciones de archivos compartidos SMB</translation>
 <translation id="2678503605767349615">Certificados de cliente obligatorios en todo el dispositivo</translation>
 <translation id="268577405881275241">Habilitar la función del proxy de compresión de datos</translation>
@@ -1973,6 +1985,7 @@
       Esta función depende del tipo de datos de <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> que se habilite en <ph name="CHROME_SYNC_NAME" />. Si inhabilitas <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> en la política <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> o inhabilitas <ph name="CHROME_SYNC_NAME" /> en la política <ph name="SYNC_DISABLED_POLICY_NAME" />, no se habilitará esta función.
 
       Si no estableces esta política, los usuarios administrados no podrán sincronizar los ajustes de forma predeterminada.</translation>
+<translation id="3138514192363246220">Inhabilitar la recuperación de metadatos de la carga de páginas y de modelos de aprendizaje automático que mejoran la experiencia de navegación</translation>
 <translation id="3142410959002029864">Si estableces la política, se anulará el modo predeterminado de impresión doble. Si el modo no está disponible, se ignorará esta política.</translation>
 <translation id="3144173889708944482">Si eliges <ph name="PRINTERS_BLOCKLIST" /> para <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, la configuración de <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> especificará las impresoras que no podrán utilizar los usuarios. Los usuarios podrán acceder a todas las impresoras, excepto aquellas con los ID mencionados en esta política. Los ID deben coincidir con los valores de los campos <ph name="ID_FIELD" /> o <ph name="GUID_FIELD" /> en el archivo que se especifica en <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
 <translation id="3146711617256415776">No permitir las voces de texto a voz de la red mejorada cuando se utiliza Seleccionar para pronunciar</translation>
@@ -2075,6 +2088,8 @@
 <translation id="3219421230122020860">Modo incógnito disponible</translation>
 <translation id="3220624000494482595">Si la Aplicación de kiosko es una app de Android, esta no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si esta política se establece como <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Determinar la disponibilidad de las variaciones en el <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3229163415739929305">Si habilitas la política o no la estableces, se permitirá la recuperación de metadatos de la carga de páginas y de modelos de aprendizaje automático que mejoran la experiencia de navegación.
+      Si inhabilitas la política, es posible que algunas funciones no operen correctamente.</translation>
 <translation id="3231837273069128027">Si estableces la política, se configurará la disponibilidad y el comportamiento de las actualizaciones del firmware<ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Podrás especificar opciones de configuración específicas en las propiedades de JSON:
@@ -4026,6 +4041,7 @@
 <translation id="5586942249556966598">No hacer nada</translation>
 <translation id="5598417829613725146">Canvas (compatible a partir de la versión 90)</translation>
 <translation id="5599461642204007579">Configuración de la administración de <ph name="MS_AD_NAME" /></translation>
+<translation id="5601503069213153581">PIN</translation>
 <translation id="5614865701790130558">Registra eventos para las instalaciones de extensiones basadas en políticas</translation>
 <translation id="5618398258385745432">La configuración asociada se usó antes de implementar la reautenticación para ver contraseñas. A partir de ese momento, la configuración y, por lo tanto, esta política no tienen efecto en el comportamiento de Chrome. El comportamiento actual de Chrome es como si la política se hubiera establecido para no ver las contraseñas en texto claro en las páginas de configuración del administrador de contraseñas. Esto significa que la página de configuración contiene solo un marcador de posición y Chrome mostrará la contraseña después de que el usuario haga clic en "Mostrar" (e implemente la reautenticación, si corresponde). A continuación, se muestra la descripción original de la política.
 
@@ -4356,6 +4372,7 @@
        Valores admitidos: • 0 = Desactivada • 1 = Activada • 2 = Lupa fijada activada
 
           Nota: Si se especifica <ph name="DEVICE_LOGIN_SCREEN_SCREEN_MAGNIFIER_TYPE_POLICY_NAME" />, anulará esta política.</translation>
+<translation id="6011193465932186973">Huella dactilar</translation>
 <translation id="6011969832398368671">Permite que los sitios soliciten al usuario acceso de escritura a archivos y directorios</translation>
 <translation id="6012952794649558174">Usa el comportamiento predeterminado del navegador.</translation>
 <translation id="6015281292796053435">Esta política controla el envío de datos de la Navegación segura, lo que incluye la cantidad de advertencias generadas por esta función y las veces que se hace clic en ellas.
@@ -5747,6 +5764,7 @@
       Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se usan para configurar el mensaje que verá el usuario cuando se muestre una advertencia después de que un análisis determine una infracción de política. El campo del mensaje incluye el texto que se le mostrará al usuario. Este puede tener un máximo de 200 caracteres. El administrador puede incluir una URL en el campo learn_more_url a fin de que el usuario obtenga con un clic más información del cliente sobre los motivos para bloquear la acción. El campo del idioma es opcional. Indica el idioma del mensaje. Si el campo se deja vacío o con el valor "default", se utilizará el mensaje correspondiente cuando no haya ningún mensaje en el idioma del usuario. El campo de la etiqueta especifica para qué tipo de análisis se mostrará el mensaje. La lista custom_messages puede tener cero o más entradas, y cada una deberá tener completos los campos del mensaje y de la etiqueta.
 
       Esta política requiere configuración adicional para tener efecto. Visita https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting para obtener más información.</translation>
+<translation id="7482768039644066614">Habilitar la recuperación de metadatos de la carga de páginas y de modelos de aprendizaje automático para mejorar la experiencia de navegación</translation>
 <translation id="7485481791539008776">Normas de selección de la impresora predeterminada</translation>
 <translation id="7486205887492534734">Notificar cuando coinciden varios certificados en la pantalla de acceso</translation>
 <translation id="7491720878670299691">Es la tasa a la que se registran los datos de red y se buscan eventos. El mínimo permitido es 1 minuto.
@@ -6265,10 +6283,6 @@
 <translation id="8101381354936029836">Grupo atómico de la política:</translation>
 <translation id="8102913158860568230">Configuración de mediastream predeterminada</translation>
 <translation id="8104962233214241919">Seleccionar automáticamente certificados de clientes para estos sitios</translation>
-<translation id="8111502498815410897">Si estableces esta política, se habilitará o inhabilitará de manera automática la Vinculación rápida.
-      Esta función consiste en un nuevo flujo de vinculación por Bluetooth que asocia dispositivos periféricos vinculados con una cuenta de GAIA.
-      Así, otros dispositivos con Chrome OS (y Android) que hayan accedido con la misma cuenta de GAIA se vinculan de manera automática.
-      Si no estableces esta política, la Vinculación rápida utilizará la configuración predeterminada de Chrome OS, la cual estará habilitada.</translation>
 <translation id="8114382167597081590">No aplicar el modo restringido en YouTube</translation>
 <translation id="8117921351531866504">Te permite establecer si los sitios web están autorizados a verificar que el usuario tenga formas de pago guardadas.
 
@@ -6792,6 +6806,7 @@
       Si inhabilitas la política, se desactivará la autenticación NTLMv2.
 
       Todas las versiones recientes de los servidores <ph name="MS_WIN_NAME" /> y Samba admiten la autenticación NTLMv2. Esta política solo debe desactivarse para obtener retrocompatibilidad, ya que reduce la seguridad a la hora de autenticarse.</translation>
+<translation id="8605627672203601098">Configurar los factores de WebAuthn permitidos</translation>
 <translation id="8606263947930257189">Controla si <ph name="PRODUCT_NAME" /> puede inmovilizar pestañas que hayan estado en segundo plano por al menos 5 minutos.
 
       Si se establece la política como verdadera, es posible que las pestañas que hayan estado en segundo plano por al menos 5 minutos queden inmovilizadas. Cuando se inmovilizan las pestañas, se reduce el uso de la CPU, la batería y la memoria. <ph name="PRODUCT_NAME" /> utiliza heurísticas para evitar que se inmovilicen las pestañas que realizan tareas útiles en segundo plano (p. ej., muestran notificaciones de pantalla, reproducen sonidos o transmiten video). Los desarrolladores web también pueden inhabilitar la inmovilización en sus sitios (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 8da4f3ab..31b3f921 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -787,6 +787,17 @@
 
       Consulta <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> para fijar aplicaciones en la estantería de <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="186719019195685253">Acción a emprender si se alcanza el retraso de inactividad mientras el dispositivo está conectado a la red eléctrica</translation>
+<translation id="1869688072690234823">Si se define esta política, controlará qué factores de WebAuthn se pueden usar.
+
+      Se puede permitir lo siguiente:
+
+      * Todos los factores de WebAuthn. Para ello, usa ["all"] (esto incluye los factores que se añadan en el futuro).
+
+      * Solo PIN. Para ello, usa ["PIN"].
+
+      * PIN y huella digital. Para ello, usa ["PIN", "FINGERPRINT"].
+
+      Si esta política no se define o se le asigna una lista vacía, no se podrá usar ningún factor de WebAuthn en los dispositivos gestionados.</translation>
 <translation id="1881649377321404593">
       Esta política se eliminó en M80. No es necesaria porque ahora
       WebDriver es compatible con todas las políticas.
@@ -1554,6 +1565,7 @@
 <translation id="2664391398878045611">La página Nueva pestaña no mostrará el anuncio del espacio intermedio aunque esté disponible</translation>
 <translation id="2664682171745499686">Eliminar las advertencias de dominio similares en dominios</translation>
 <translation id="2665422249821137126">Habilitar el cursor grande en la pantalla de inicio de sesión</translation>
+<translation id="2667894101494585925">Habilitar la obtención de la guía de optimización</translation>
 <translation id="2672012807430078509">Controla la habilitación de NTLM como protocolo de autenticación para activaciones SMB.</translation>
 <translation id="2678503605767349615">Certificados de cliente de todo el dispositivo obligatorios</translation>
 <translation id="268577405881275241">Habilitar la función del proxy de compresión de datos</translation>
@@ -1979,6 +1991,7 @@
       Esta función depende de que se habilite el tipo de datos <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> en <ph name="CHROME_SYNC_NAME" />. Si se inhabilita <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> en la política <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> o se inhabilita <ph name="CHROME_SYNC_NAME" /> en la política <ph name="SYNC_DISABLED_POLICY_NAME" />, no se habilitará esta función.
 
       Si no se establece esta política, la opción predeterminada no estará disponible para los usuarios gestionados.</translation>
+<translation id="3138514192363246220">Inhabilitar la obtención de metadatos de carga de páginas y modelos de aprendizaje automático que mejoran la experiencia de navegación</translation>
 <translation id="3142410959002029864">Si se establece esta política, se anula el modo predeterminado de impresión por las dos caras. Si el modo no está disponible, se ignorará esta política.</translation>
 <translation id="3144173889708944482">Si se utiliza <ph name="PRINTERS_BLOCKLIST" /> para la política <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, al establecer la política <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" />, esta especifica qué impresoras no pueden utilizar los usuarios. Los usuarios podrán utilizar todas las impresoras, excepto aquellas con los ID indicados en la política. Los ID deben coincidir con los campos <ph name="ID_FIELD" /> o <ph name="GUID_FIELD" /> del archivo definido en la política <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
 <translation id="3146711617256415776">No permitir las voces de conversión de texto a voz de red mejorada al usar Enunciar selección</translation>
@@ -2081,6 +2094,8 @@
 <translation id="3219421230122020860">Modo de incógnito disponible</translation>
 <translation id="3220624000494482595">Si la aplicación de kiosco es una aplicación para Android, no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si se asigna el valor <ph name="TRUE" /> a esta política.</translation>
 <translation id="322359555555487980">Determinar la disponibilidad de variaciones en <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3229163415739929305">Si se habilita esta política o no se define, se habilitará la obtención de metadatos de carga de páginas y modelos de aprendizaje automático que mejoran la experiencia de navegación.
+      Si se inhabilita esta política, algunas funciones podrían no funcionar correctamente.</translation>
 <translation id="3231837273069128027">Si se define esta política, se configura la disponibilidad y el comportamiento de las actualizaciones de firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Especifica ajustes individuales en las propiedades archivo JSON:
@@ -2971,6 +2986,11 @@
       Esta opción la pueden utilizar los administradores que necesitan más tiempo para actualizar su sitio web interno afectado por esta nueva restricción. Esta política de Enterprise es temporal. Está previsto que se retire a partir de la versión 104 de <ph name="PRODUCT_NAME" />.
       </translation>
 <translation id="4268586991084547853">Más compatibles con las listas de sitios del modo empresarial de Microsoft IE/Edge.</translation>
+<translation id="4269798992490176617">Si se habilita, <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> puede ejecutar las solicitudes a la API WebAuthn que se originan en una sesión de navegador en un host remoto.
+
+      Si se inhabilita esta política o no se establece, se aplicará el comportamiento predeterminado.
+
+      Ten en cuenta que esta función solo es compatible dentro del entorno de red de Google.</translation>
 <translation id="4269859918103560644">Permitir que el usuario decida</translation>
 <translation id="4274691295133617461">Si se asigna el valor "3" a esta política, los sitios web podrán solicitar acceso de lectura a los archivos y directorios del sistema de archivos del sistema operativo del host a través de la API File System. Si se le asigna el valor "2", se denegará el acceso.
 
@@ -4038,6 +4058,7 @@
 <translation id="5586942249556966598">No hacer nada</translation>
 <translation id="5598417829613725146">Canvas (compatible a partir de la versión 90)</translation>
 <translation id="5599461642204007579">Configuración de administración de <ph name="MS_AD_NAME" /></translation>
+<translation id="5601503069213153581">PIN</translation>
 <translation id="5614865701790130558">Registrar eventos de instalación de extensiones basados en políticas</translation>
 <translation id="5618398258385745432">La opción asociada se utilizó antes de que se introdujese la nueva autenticación para ver las contraseñas. Desde entonces, la opción y, por lo tanto, esta política, no han afectado al comportamiento de Chrome. El comportamiento actual de Chrome es el mismo que si se hubiese establecido la política para inhabilitar la visualización de las contraseñas sin cifrar en la página de configuración del gestor de contraseñas. Esto significa que la página de configuración incluye un solo marcador de posición y Chrome solo muestra la contraseña cuando el usuario hace clic en "Mostrar"(y al volver a autenticarse, si procede). A continuación se muestra la descripción original de la política.
 
@@ -4368,6 +4389,7 @@
        Valores válidos: • 0 = desactivada • 1 = activada • 2 = lupa fijada activada
 
           Nota: <ph name="DEVICE_LOGIN_SCREEN_SCREEN_MAGNIFIER_TYPE_POLICY_NAME" /> anula esta política si se especifica la anterior.</translation>
+<translation id="6011193465932186973">Huella digital</translation>
 <translation id="6011969832398368671">Permitir que los sitios pidan al usuario que otorgue permiso de escritura a archivos y directorios</translation>
 <translation id="6012952794649558174">Usar el comportamiento predeterminado del navegador.</translation>
 <translation id="6015281292796053435">Esta política determina si se recoge información de Navegación segura, incluido el número de advertencias de esta función y el número de clics de destino después de las advertencias.
@@ -5385,6 +5407,7 @@
 <translation id="7063895219334505671">Permitir pop-ups en estos sitios</translation>
 <translation id="7066292150801784098">Inhabilitar la interacción de los usuarios remotos con ventanas con permisos de administrador en sesiones de asistencia remota</translation>
 <translation id="706669471845501145">Permitir que los sitios muestren notificaciones de escritorio</translation>
+<translation id="70681795425744184">No permitir que CRD ejecute las solicitudes a la API WebAuthn mediante un proxy desde un host remoto.</translation>
 <translation id="7070525176564511548">Es obligatorio introducir la contraseña cada semana (cada 168 horas)</translation>
 <translation id="7072208053150563108">Frecuencia de cambio de contraseña de dispositivo</translation>
 <translation id="7072567600438630966">Permite habilitar Mi teléfono.</translation>
@@ -5675,6 +5698,7 @@
 <translation id="7407441173422042771">Esta política controla la predicción de red en <ph name="PRODUCT_NAME" />. Permite controlar tanto la precarga de DNS como la conexión previa de SSL y TCP, así como la carga previa de páginas web.
 
       Si le asignas un valor a esta política, los usuarios no podrán cambiarlo. Si no se define, se habilita la predicción de red, pero el usuario puede cambiarlo.</translation>
+<translation id="7410074797376205571">Permitir que <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> ejecute las solicitudes a la API WebAuthn mediante un proxy desde un host remoto.</translation>
 <translation id="7412456346709338637">Habilita el acceso a datos desde periféricos Thunderbolt/USB4</translation>
 <translation id="7417438464912687020">Permitir conexiones de acceso remoto a este equipo</translation>
 <translation id="7417972229667085380">Porcentaje que permite ajustar el retraso de inactividad en el modo de presentación (política obsoleta)</translation>
@@ -5764,6 +5788,7 @@
       Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se usan para configurar un mensaje que se mostrará al usuario cuando aparezca una advertencia después de que un análisis detecte alguna infracción de políticas. El campo del mensaje contiene el texto que se va a mostrar al usuario y debe tener una longitud máxima de 200 caracteres. El campo learn_more_url contiene una URL proporcionada por el administrador a la que podrá acceder el usuario para consultar más información del cliente sobre las razones por las que se ha bloqueado la acción. El campo del idioma es opcional y contiene el idioma del mensaje. Si el campo del idioma está vacío o tiene el valor predeterminado, indica que el mensaje se usará cuando no exista un mensaje en el idioma del usuario. El campo de etiqueta especifica para qué tipo de análisis se muestra el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada debe tener un mensaje que no esté vacío y campos de etiquetas.
 
       Para que esta política tenga efecto, es necesario realizar una configuración adicional. Visita https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting para consultar más información.</translation>
+<translation id="7482768039644066614">Habilitar la obtención de metadatos de carga de páginas y modelos de aprendizaje automático para mejorar la experiencia de navegación</translation>
 <translation id="7485481791539008776">Reglas para la selección de la impresora predeterminada</translation>
 <translation id="7486205887492534734">Preguntar cuando coincidan varios certificados en la pantalla de inicio de sesión</translation>
 <translation id="7491720878670299691">Intervalo en el que se consultan los datos de red y se comprueba si hay eventos. El valor mínimo permitido es 1 minuto.
@@ -6288,10 +6313,6 @@
 <translation id="8101381354936029836">Grupo atómico de la política:</translation>
 <translation id="8102913158860568230">Opción predeterminada de MediaStream</translation>
 <translation id="8104962233214241919">Seleccionar automáticamente certificados de cliente de estos sitios</translation>
-<translation id="8111502498815410897">Si se establece esta política, se forzará a que se habilite o se inhabilite Emparejamiento rápido.
-      Emparejamiento rápido es un nuevo flujo de emparejamiento por Bluetooth que vincula periféricos emparejados con una cuenta de GAIA.
-      Esto permite que otros dispositivos Chrome OS (o Android) que hayan iniciado sesión con la misma cuenta de GAIA se emparejen automáticamente.
-      Si no se establece esta política, se aplicará la configuración predeterminada de Chrome OS a Emparejamiento rápido y, por tanto, se habilitará.</translation>
 <translation id="8114382167597081590">No aplicar el modo restringido en YouTube</translation>
 <translation id="8117921351531866504">Permite establecer si los sitios web pueden comprobar si el usuario tiene algún método de pago guardado.
 
@@ -6619,6 +6640,7 @@
        Si se inhabilita esta política, no se bloquearán.
 
        Esta política se eliminará en la versión 95 de <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8427466947904008809">Permitir que CRD ejecute las solicitudes a la API WebAuthn mediante un proxy desde un host remoto.</translation>
 <translation id="8433186206711564395">Configuración de red</translation>
 <translation id="8433769814000220721">Habilitar sugerencias de contenido</translation>
 <translation id="843609873781525167">Si se asigna el valor "Verdadero" a esta política, <ph name="PRODUCT_NAME" /> siempre comprobará al iniciarse si es el navegador predeterminado y, si es posible, se registrará a sí mismo automáticamente. Si se le asigna el valor "Falso", <ph name="PRODUCT_NAME" /> dejará de comprobar si es el navegador predeterminado y desactivará los controles del usuario correspondientes a esta opción.
@@ -6798,6 +6820,7 @@
       Si se le asigna el valor "Disabled", se desactivará la autenticación NTLMv2.
 
       Todas las versiones recientes de los servidores <ph name="MS_WIN_NAME" /> y Samba admiten la autenticación NTLMv2. Esta política solo debería desactivarse para obtener retrocompatibilidad, ya que reduce la seguridad a la hora de autenticarse.</translation>
+<translation id="8605627672203601098">Configurar factores de WebAuthn permitidos</translation>
 <translation id="8606263947930257189">Permite controlar si <ph name="PRODUCT_NAME" /> puede inmovilizar las pestañas que hayan estado en segundo plano durante un mínimo de 5 minutos.
 
       Si se asigna el valor "true" a esta política, las pestañas que hayan estado en segundo plano durante un mínimo de 5 minutos podrían inmovilizarse. Inmovilizar las pestañas reduce el consumo de CPU, batería y memoria. <ph name="PRODUCT_NAME" /> usa métodos heurísticos para evitar inmovilizar pestañas que realicen funciones útiles en segundo plano, como mostrar notificaciones, reproducir sonidos o emitir vídeos en streaming. Los desarrolladores web pueden inhabilitar la inmovilización en sus sitios web (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index dcf223a..c70d14bb 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -789,6 +789,17 @@
 
       Consultez la règle <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> pour épingler des applis à l'étagère <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="186719019195685253">Indique l'action à effectuer lorsque le délai d'inactivité est atteint en cas de fonctionnement sur une source d'alimentation CA.</translation>
+<translation id="1869688072690234823">Cette règle permet de contrôler les facteurs WebAuthn qui peuvent être utilisés.
+
+      Procédure à suivre :
+
+      * Pour autoriser tous les facteurs WebAuthn, utilisez ["all"] (cela inclut les facteurs ajoutés par la suite).
+
+      * Pour autoriser uniquement le déverrouillage par code, utilisez ["PIN"].
+
+      * Pour autoriser le déverrouillage par code et par empreinte digitale, utilisez ["PIN", "FINGERPRINT"].
+
+      Si cette règle n'est pas configurée ou qu'aucun facteur WebAuthn n'est indiqué dans la liste, cela signifie qu'aucun facteur WebAuthn n'est disponible pour les appareils gérés.</translation>
 <translation id="1881649377321404593">
       Cette règle a été retirée de la version M80, car elle n'est plus nécessaire
       depuis que WebDriver est compatible avec toutes les règles existantes.
@@ -1550,6 +1561,7 @@
 <translation id="2664391398878045611">La page "Nouvel onglet" n'affichera pas l'annonce d'espace intermédiaire, même si elle est disponible</translation>
 <translation id="2664682171745499686">Supprimer les avertissements concernant des domaines similaires</translation>
 <translation id="2665422249821137126">Activer le grand curseur sur l'écran de connexion</translation>
+<translation id="2667894101494585925">Activer l'optimisation du guide d'extraction</translation>
 <translation id="2672012807430078509">Contrôle l'activation du protocole d'authentification NTLM pour les installations SMB</translation>
 <translation id="2678503605767349615">Certificats clients requis au niveau de l'appareil</translation>
 <translation id="268577405881275241">Activer la fonctionnalité de proxy pour la compression de données</translation>
@@ -1974,6 +1986,7 @@
       Cette fonctionnalité dépend du type de données <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> activé pour <ph name="CHROME_SYNC_NAME" />. Si <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> est désactivé dans la règle <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" />, ou si <ph name="CHROME_SYNC_NAME" /> est désactivé dans la règle <ph name="SYNC_DISABLED_POLICY_NAME" />, cette fonctionnalité n'est pas activée.
 
       Si cette règle n'est pas configurée, l'option par défaut n'est pas autorisée pour les utilisateurs gérés.</translation>
+<translation id="3138514192363246220">Désactiver l'extraction des métadonnées de chargement de la page et les modèles de machine learning qui améliorent l'expérience de navigation</translation>
 <translation id="3142410959002029864">Lorsque cette règle est définie, le mode d'impression recto verso par défaut est ignoré. Si le mode est indisponible, cette règle est ignorée.</translation>
 <translation id="3144173889708944482">Si <ph name="PRINTERS_BLOCKLIST" /> est choisi pour <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, le fait de définir <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> indique les imprimantes indisponibles pour les utilisateurs. Toutes les imprimantes sont proposées aux utilisateurs, sauf celles dont les ID sont répertoriés dans cette règle. Ces ID doivent correspondre à ceux indiqués dans les champs <ph name="ID_FIELD" /> ou <ph name="GUID_FIELD" /> du fichier spécifié dans la règle <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
 <translation id="3146711617256415776">Ne pas autoriser la synthèse vocale améliorée via le réseau pour Sélectionner pour prononcer</translation>
@@ -2076,6 +2089,8 @@
 <translation id="3219421230122020860">Mode navigation privée disponible</translation>
 <translation id="3220624000494482595">Si l'application kiosque est une application Android, elle ne contrôlera pas la version <ph name="PRODUCT_OS_NAME" /> même si cette règle est définie sur "<ph name="TRUE" />".</translation>
 <translation id="322359555555487980">Déterminer la disponibilité des variantes de <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3229163415739929305">Si cette règle est activée, ou si elle n'est pas définie, l'extraction des métadonnées de chargement de la page et les modèles de machine learning qui améliorent l'expérience de navigation sont activés.
+      Si cette règle est désactivée, certaines fonctionnalités peuvent ne pas fonctionner correctement.</translation>
 <translation id="3231837273069128027">Cette règle permet de configurer la disponibilité et le comportement des mises à jour du micrologiciel <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Spécifiez les paramètres individuels dans les propriétés JSON :
@@ -4013,6 +4028,7 @@
 <translation id="5586942249556966598">Ne rien faire</translation>
 <translation id="5598417829613725146">Dessin (disponible depuis la version 90)</translation>
 <translation id="5599461642204007579">Paramètres de gestion de <ph name="MS_AD_NAME" /></translation>
+<translation id="5601503069213153581">Code</translation>
 <translation id="5614865701790130558">Enregistrer des événements pour les installations d'extensions basées sur des règles</translation>
 <translation id="5618398258385745432">Ce paramètre était utilisé avant la mise en œuvre de la règle impliquant une nouvelle authentification après consultation du mot de passe. Depuis lors, le paramètre et la règle correspondante sont sans effet sur le fonctionnement de Chrome. Chrome fonctionne actuellement comme si cette règle était définie sur la désactivation de l'affichage des mots de passe en texte clair dans la page des paramètres du gestionnaire de mots de passe. Cela signifie que la page des paramètres contient seulement un espace réservé, et que l'utilisateur doit cliquer sur "Afficher" (et saisir une nouvelle fois son mot de passe, si nécessaire) pour que Chrome affiche le mot de passe. La description initiale de la règle figure ci-dessous.
 
@@ -4342,6 +4358,7 @@
        Valeurs correctes : • 0 = Activée • 1 = Désactivée • 2 = Loupe ancrée activée
 
           Remarque : <ph name="DEVICE_LOGIN_SCREEN_SCREEN_MAGNIFIER_TYPE_POLICY_NAME" /> remplace cette règle si l'ancienne est définie.</translation>
+<translation id="6011193465932186973">Empreinte digitale</translation>
 <translation id="6011969832398368671">Autoriser les sites à demander aux utilisateurs l'accès en écriture aux fichiers et répertoires</translation>
 <translation id="6012952794649558174">Utiliser le comportement par défaut du navigateur.</translation>
 <translation id="6015281292796053435">Cette règle détermine si les informations de navigation sécurisée, y compris le nombre d'avertissements de navigation sécurisée et le nombre de clics sur les avertissements de navigation sécurisée, doivent être enregistrées.
@@ -5722,6 +5739,7 @@
       Les champs "<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />" permettent de configurer le message à montrer à l'utilisateur lorsqu'un avertissement s'affiche après une analyse dont le résultat révèle un problème. Le message saisi dans le champ ne doit pas comporter plus de 200 caractères. Le champ "learn_more_url" contient une URL fournie par l'administrateur sur laquelle l'utilisateur peut cliquer pour obtenir des informations indiquées par le client et savoir pourquoi l'action a été bloquée. Le champ "language" est facultatif. Il indique la langue dans laquelle est saisi le message. Si ce champ est vide ou contient la valeur "par défaut", un message est proposé par défaut. Le champ "tag" spécifie pour quel type d'analyses le message est affiché. Le champ "custom_messages" peut être vide ou contenir plusieurs entrées (les champs "message" et "tag" devant être renseignés pour chacune d'elles).
 
       Cette règle nécessite un réglage supplémentaire pour être appliquée. Pour en savoir plus, consultez la page https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting.</translation>
+<translation id="7482768039644066614">Activer l'extraction des métadonnées de chargement de la page et les modèles de machine learning pour améliorer l'expérience de navigation</translation>
 <translation id="7485481791539008776">Instructions de sélection de l'imprimante par défaut</translation>
 <translation id="7486205887492534734">Demander lorsque plusieurs certificats correspondent sur l'écran de connexion</translation>
 <translation id="7491720878670299691">Fréquence à laquelle les données du réseau sont interrogées pour vérifier la présence d'événements. La valeur minimale autorisée est de 1 minute.
@@ -6247,10 +6265,6 @@
 <translation id="8101381354936029836">Groupe atomique de la règle :</translation>
 <translation id="8102913158860568230">Paramètre MediaStream par défaut</translation>
 <translation id="8104962233214241919">Sélectionner automatiquement des certificats client pour ces sites</translation>
-<translation id="8111502498815410897">Cette règle permet de forcer l'activation ou la désactivation de l'Association express.
-      L'Association express est un nouveau flux d'association Bluetooth qui permet d'ajouter des appareils associés à un compte GAIA.
-      Grâce à cette règle, d'autres appareils Chrome OS (et Android) connectés avec le même compte GAIA peuvent être associés automatiquement.
-      Si cette règle n'est pas configurée, l'Association express applique la règle de Chrome OS, qui est activée par défaut.</translation>
 <translation id="8114382167597081590">Ne pas appliquer le mode restreint sur YouTube</translation>
 <translation id="8117921351531866504">Permet de définir si les sites Web sont autorisés à vérifier si l'utilisateur a enregistré des modes de paiement.
 
@@ -6748,6 +6762,7 @@
       Si cette règle est désactivée, l'authentification NTLMv2 l'est également.
 
       Toutes les versions récentes des serveurs Samba et <ph name="MS_WIN_NAME" /> acceptent cette authentification. Pour des raisons de sécurité, cette règle ne doit être désactivée qu'à des fins de rétrocompatibilité.</translation>
+<translation id="8605627672203601098">Configurer les facteurs WebAuthn autorisés</translation>
 <translation id="8606263947930257189">Permet de déterminer si <ph name="PRODUCT_NAME" /> peut figer ou non des onglets qui sont en arrière-plan depuis au moins cinq minutes.
 
       Si cette règle est définie sur "True", les onglets en arrière-plan depuis au moins cinq minutes peuvent être figés. En figeant ces onglets, vous sollicitez moins le processeur, la batterie et la mémoire. <ph name="PRODUCT_NAME" /> utilise des heuristiques pour ne pas figer les onglets qui exécutent une tâche utile en arrière-plan (par exemple, l'affichage de notifications, la lecture audio d'un contenu, la diffusion d'une vidéo en streaming). Notez que les développeurs Web peuvent également choisir de ne pas figer les pages de leur site (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index bd84120..3705410 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -6298,10 +6298,6 @@
 <translation id="8101381354936029836">Grup atom kebijakan:</translation>
 <translation id="8102913158860568230">Setelan streaming media default</translation>
 <translation id="8104962233214241919">Memilih sertifikat klien untuk situs ini secara otomatis</translation>
-<translation id="8111502498815410897">Menyetel kebijakan ini akan memaksa pengaktifan atau penonaktifan Sambungan Cepat.
-      Sambungan Cepat adalah alur penyambungan Bluetooth baru yang menautkan periferal yang disambungkan dengan akun GAIA.
-      Penyambungan ini memungkinkan perangkat Chrome OS (dan Android) lain yang login dengan akun GAIA yang sama untuk disambungkan secara otomatis.
-      Jika tidak disetel, Sambungan Cepat akan mengikuti setelan default Chrome OS, yaitu diaktifkan.</translation>
 <translation id="8114382167597081590">Jangan terapkan Mode Terbatas di YouTube</translation>
 <translation id="8117921351531866504">Memungkinkan Anda menentukan situs diizinkan atau tidak untuk memeriksa apakah pengguna telah menyimpan metode pembayaran.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index ff488b8..029f37a 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -2961,6 +2961,11 @@
       Questo criterio può essere utilizzato dagli amministratori che hanno bisogno di più tempo per aggiornare i siti web interni interessati da questa nuova limitazione. Questo criterio aziendale è temporaneo ed è destinato a essere rimosso dopo la versione 104 di <ph name="PRODUCT_NAME" />.
       </translation>
 <translation id="4268586991084547853">Più compatibilità con gli elenchi dei siti in modalità Enterprise di Microsoft IE/Edge</translation>
+<translation id="4269798992490176617">Se questo criterio viene impostato su Attivato, <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> potrebbe eseguire le richieste API WebAuthn provenienti da una sessione di navigazione su un host remoto.
+
+      Se viene impostato su Disattivato o se non viene configurato, viene applicato il comportamento predefinito.
+
+      Tieni presente che questa funzionalità è supportata soltanto nell'ambiente di rete interno di Google.</translation>
 <translation id="4269859918103560644">Consenti all'utente di decidere</translation>
 <translation id="4274691295133617461">Se il criterio viene impostato su 3, i siti web possono richiedere l'accesso di lettura di file e directory nel file system del sistema operativo host tramite l'API file system. Se il criterio viene impostato su 2, l'accesso viene negato.
 
@@ -5359,6 +5364,7 @@
 <translation id="7063895219334505671">Consenti popup su questi siti</translation>
 <translation id="7066292150801784098">Disattiva l'interazione degli utenti remoti con finestre con privilegi più elevati nelle sessioni di assistenza remota</translation>
 <translation id="706669471845501145">Consenti la visualizzazione di notifiche desktop da parte dei siti</translation>
+<translation id="70681795425744184">Non consentire a CRD di eseguire richieste API WebAuthn trasferite al proxy da un host remoto.</translation>
 <translation id="7070525176564511548">Richiedi l'inserimento della password ogni settimana (168 ore)</translation>
 <translation id="7072208053150563108">Frequenza di modifica della password del computer</translation>
 <translation id="7072567600438630966">Consenti l'attivazione di Phone Hub</translation>
@@ -5647,6 +5653,7 @@
 <translation id="7407441173422042771">Questo criterio consente di controllare la previsione di rete in <ph name="PRODUCT_NAME" />, il precaricamento DNS, le preconnessioni TCP e SSL e il prerendering delle pagine web.
 
       Se il criterio viene configurato, gli utenti non possono modificarlo. Se non viene configurato, la previsione di rete viene attivata, ma gli utenti possono modificarlo.</translation>
+<translation id="7410074797376205571">Consenti a <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> di eseguire richieste API WebAuthn trasferite al proxy da un host remoto.</translation>
 <translation id="7412456346709338637">Attiva accesso ai dati per le periferiche Thunderbolt/USB4</translation>
 <translation id="7417438464912687020">Consenti le connessioni di accesso remoto a questo computer</translation>
 <translation id="7417972229667085380">Percentuale di regolazione del ritardo di inattività in modalità di presentazione (obsoleta)</translation>
@@ -6256,10 +6263,6 @@
 <translation id="8101381354936029836">Gruppo atomico di criteri:</translation>
 <translation id="8102913158860568230">Impostazione stream multimediale predefinito</translation>
 <translation id="8104962233214241919">Seleziona automaticamente i certificati client per questi siti</translation>
-<translation id="8111502498815410897">Se questo criterio viene configurato, viene forzata l'attivazione o la disattivazione della funzionalità Accoppiamento rapido.
-      Accoppiamento rapido è un nuovo flusso di accoppiamento tramite Bluetooth che consente di collegare periferiche accoppiate a un account GAIA.
-      In questo modo possono essere accoppiati automaticamente altri dispositivi Chrome OS (e Android) su cui è stato eseguito l'accesso con lo stesso account GAIA.
-      Se il criterio non viene configurato, verrà usata l'impostazione predefinita di Chrome OS per l'Accoppiamento rapido, ossia funzionalità attiva.</translation>
 <translation id="8114382167597081590">Non imporre la Modalità con restrizioni su YouTube</translation>
 <translation id="8117921351531866504">Consente di stabilire se consentire o meno ai siti web di controllare se l'utente ha salvato dei metodi di pagamento.
 
@@ -6580,6 +6583,7 @@
        Se il criterio viene impostato su Disattivato, le finestre di dialogo JavaScript attivate da un frame secondario di origine diversa non verranno bloccate.
 
        Questo criterio verrà rimosso nella versione 95 di <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8427466947904008809">Consenti a CRD di eseguire richieste API WebAuthn trasferite al proxy da un host remoto.</translation>
 <translation id="8433186206711564395">Impostazioni di rete</translation>
 <translation id="8433769814000220721">Attiva contenuti suggeriti</translation>
 <translation id="843609873781525167">Se il criterio è impostato su True, all'avvio <ph name="PRODUCT_NAME" /> verifica sempre di essere il browser predefinito e, se possibile, si registra automaticamente. Se il criterio è impostato su False, <ph name="PRODUCT_NAME" /> non verifica mai di essere il browser predefinito e disattiva i controlli degli utenti per questa opzione.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 1f2137e..5bf33cea 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -100,6 +100,7 @@
 <translation id="1122089575901325963">このポリシーでは、<ph name="WILCO_NAME" /> の診断およびテレメトリー用コントローラ(DTC)を設定できます(デバイスで使用可能な場合)。設定のサイズは 1 MB(1,000,000 バイト)以下とし、JSON 形式にする必要があります。この処理は <ph name="WILCO_NAME" /> DTC が行います。ダウンロードの整合性の確認には暗号化ハッシュが使用されます。この設定はダウンロードされた後、キャッシュされ、URL またはハッシュに変更があった場合は再度ダウンロードされます。
 
       このポリシーを設定した場合、ユーザーは設定を変更できません。</translation>
+<translation id="1123650965531933634">すべてのサイトに対してウィンドウの配置に関する権限をデフォルトで自動的に拒否する</translation>
 <translation id="1133622335785078255">ユーザーに <ph name="LACROS_NAME" /> ブラウザでの予備のプロフィールの作成と使用、およびゲストモードの使用を許可する</translation>
 <translation id="1133814529606590009">このポリシーを有効に設定した場合、URL キーによる匿名化データの収集が常に有効になり、検索とブラウジングを改善するため、ユーザーがアクセスしたページの URL が Google に送信されます。
 
@@ -204,6 +205,7 @@
 <translation id="1240722269871366886">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> で、ユーザーが仮想または物理キーボードを使用してテキストを入力するときに、絵文字の候補を表示できるようにします。
       このポリシーを true に設定した場合、この機能は有効になり、ユーザーは設定を変更できます。
       このポリシーのデフォルトの設定は false で、絵文字の候補は表示されず、ユーザーがオーバーライドすることはできません。</translation>
+<translation id="1241536186320046498">サイトがウィンドウの配置に関する権限を要求するたびに確認する</translation>
 <translation id="1243570869342663665">セーフサイトのアダルト コンテンツの除外を制御する。</translation>
 <translation id="1244309789361056660">このポリシーは M87 で削除され、ホーム ディレクトリはログイン時に自動的に ext4 に移行されます。
       このポリシーでは、ユーザーのホーム ディレクトリが ecryptfs 暗号化で作成された場合に行う操作を指定できます。ecryptfs で暗号化されたホーム ディレクトリを ext4 暗号化に移行しない場合、Android アプリの実行が停止される可能性があります。
@@ -477,6 +479,11 @@
       このポリシーを無効に設定した場合、保護されていない HTTP リクエストで <ph name="BASIC_AUTH" /> 認証スキームの使用を禁止し、安全な HTTPS のみが許可されます。
 
       <ph name="AUTH_SCHEMES_POLICY_NAME" /> ポリシーが設定されていて、<ph name="BASIC_AUTH" /> が含まれていない場合、このポリシーの設定は無視されます(また、<ph name="BASIC_AUTH" /> は常に禁止されます)。</translation>
+<translation id="1573444493980402757">ウィンドウの配置に関する権限を自動的に拒否するサイトの URL パターンのリストを指定できます。デバイスの画面に関する情報の取得や、その情報を使用したウィンドウの表示と配置、特定の画面での全画面表示のリクエストといったサイトの機能が制限されます。
+
+      有効なサイトの URL パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。ワイルドカード(<ph name="WILDCARD_VALUE" />)を使用できます。このポリシーでは、オリジンのみが照合されるため、URL パターンのパスは無視されます。
+
+      このポリシーでサイトを指定しない場合は、<ph name="DEFAULT_WINDOW_PLACEMENT_SETTING_POLICY_NAME" /> のポリシーが適用されます。このポリシーでサイトを指定した場合は、ブラウザのデフォルトの権限設定が適用され、ユーザーはサイトごとに権限を選択できます。</translation>
 <translation id="1574258262373444557">ユーザー ストレージの暗号化で <ph name="AES_KL_NAME" /> を暗号化アルゴリズムとして使用しない</translation>
 <translation id="1575015449587326319">OnFileDownloaded Chrome Enterprise コネクタの設定ポリシー</translation>
 <translation id="1583248206450240930">デフォルトで <ph name="PRODUCT_FRAME_NAME" /> を使用する</translation>
@@ -2315,6 +2322,7 @@
       なお、このポリシーは <ph name="PRODUCT_NAME" /> バージョン 82 で削除される予定でしたが、バージョン 84 で削除されました。</translation>
 <translation id="3606571057705314194">起動時にプロフィール選択画面を有効にする</translation>
 <translation id="3608206578291537084">暗号化されたレポート パイプラインを有効にする</translation>
+<translation id="3612809274815536412">ウィンドウの配置に関する設定</translation>
 <translation id="3627678165642179114">スペルチェック ウェブ サービスを有効または無効にする</translation>
 <translation id="3628480121685794414">片面印刷を有効にする</translation>
 <translation id="3634125384445314047">スマートフォンで最近撮影した写真や動画にスマートフォン ハブ経由でアクセスすることを許可します。</translation>
@@ -2827,6 +2835,11 @@
 <translation id="4268014245533736105">Chrome はサンドボックス化された iframe 内で外部プロトコルへの移動をブロックします。https://chromestatus.com/features/5680742077038592 をご覧ください。True の場合は、該当する移動を Chrome がブロックできるようになります。False の場合は、該当する移動を Chrome がブロックするのを防ぎます。このデフォルトは True で、セキュリティ機能が有効になっています。このポリシーは、新しい制限の影響を受ける社内ウェブサイトの更新に時間がかかる場合に使用できます。このエンタープライズ ポリシーは一時的なものであり、<ph name="PRODUCT_NAME" /> バージョン 104 以降で削除される予定です。
       </translation>
 <translation id="4268586991084547853">Microsoft IE / Edge エンタープライズ モードのサイトリストとの互換性を高める。</translation>
+<translation id="4269798992490176617">有効に設定した場合、<ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> ではリモートホストのブラウジング セッションから送信された WebAuthn API リクエストを実行できます。
+
+      このポリシーを無効に設定するか未設定のままにした場合は、デフォルトの動作が適用されます。
+
+      この機能は Google の内部ネットワーク環境でのみサポートされています。</translation>
 <translation id="4269859918103560644">ユーザーが決定できるようにする</translation>
 <translation id="4274691295133617461">このポリシーを 3 に設定した場合、ウェブサイトは、ホスト オペレーティング システムのファイル システム内にあるファイルやディレクトリへの File System API を経由した読み取りアクセスを要求することが許可されます。このポリシーを 2 に設定した場合、アクセスは拒否されます。
 
@@ -2897,6 +2910,7 @@
       有効な <ph name="URL_LABEL" /> パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。このポリシーの値に「<ph name="WILDCARD_VALUE" />」は使用できません。</translation>
 <translation id="4389073105055031853">すべての証明書の管理をユーザーに許可する</translation>
 <translation id="4389091865841123886">TPM メカニズムを使用してリモート認証を設定します。</translation>
+<translation id="4397464099112037398">ウィンドウの配置に関する権限のデフォルトの設定</translation>
 <translation id="4401496838830169080"><ph name="PRODUCT_NAME" /> のセーフ ブラウジング機能を有効にするかどうかと、有効にする場合に使用するモードを管理できます。
 
       このポリシーを「NoProtection」(値 0)に設定した場合、セーフ ブラウジングは常に無効になります。
@@ -3190,6 +3204,7 @@
 <translation id="4812714598405913256">DeviceMinimumVersion ポリシー用の自動更新の有効期限に関するメッセージを設定する</translation>
 <translation id="4816674326202173458">企業ユーザーがメイン ユーザーとしてもセカンダリ ユーザーとしても操作できるようにする(管理対象ユーザー以外のユーザーに対するデフォルトの動作)</translation>
 <translation id="4820432864264617413">ユーザーに対して <ph name="BOREALIS_NAME" /> の実行をブロックする</translation>
+<translation id="4821987881803903281">ウィンドウの配置に関する権限を拒否するサイトを指定する</translation>
 <translation id="4826326557828204741">バッテリー電源での実行時、アイドル時間に到達したときに行う操作</translation>
 <translation id="482803100714220060">URL 全体を表示する</translation>
 <translation id="4832852360828533362">ユーザーとデバイスに関するレポートの送信</translation>
@@ -4291,6 +4306,14 @@
 <translation id="6144046700495610112">このポリシーを有効に設定した場合、初回実行時に以前の既定のブラウザから自動入力フォームのデータが読み込まれます。このポリシーを無効に設定するか未設定のままにした場合、初回実行時に自動入力フォームのデータは読み込まれません。
 
       ユーザーはインポート ダイアログを表示できます。このとき、自動入力フォームのデータのチェックボックスは、このポリシーの値に合わせてオンまたはオフになります。</translation>
+<translation id="614522356524762803">
+      Chrome のステータス レポートをアップロードする頻度を管理します。
+
+      この設定は、<ph name="CLOUD_REPORTING_ENABLED_POLICY_NAME" /> で有効にしたレポートにも適用されます。
+
+      このポリシーを設定しない場合、レポートは 24 時間ごとにアップロードされます。
+      このポリシーを設定した場合、レポートは指定した時間ごとにアップロードされます。
+      </translation>
 <translation id="614616930188030377">このリストに指定されたパターンは、リクエスト元 URL のセキュリティ オリジンと照合されます。
       一致するものが見つかった場合、または chrome://flags/#enable-webrtc-hide-local-ips-with-mdns が無効に設定されている場合は、WebRTC ICE の候補にローカル IP アドレスが表示されます。
       それ以外の場合、ローカル IP アドレスは mDNS のホスト名で隠されます。
@@ -5119,6 +5142,7 @@
 <translation id="7063895219334505671">これらのサイトのポップアップを許可する</translation>
 <translation id="7066292150801784098">リモート ユーザーがリモート アシスタンス セッションで権限昇格ウィンドウとやり取りできないようにする</translation>
 <translation id="706669471845501145">サイトに対してデスクトップ通知の表示を許可する</translation>
+<translation id="70681795425744184">CRD にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可しない。</translation>
 <translation id="7070525176564511548">週 1 回(168 時間ごとに)パスワードの入力を求める</translation>
 <translation id="7072208053150563108">パソコンのパスワードの変更頻度</translation>
 <translation id="7072567600438630966">スマートフォン ハブを有効にできるようにします。</translation>
@@ -5264,6 +5288,11 @@
       このポリシーが未設定または空白の場合、ユーザーは <ph name="PRODUCT_NAME" /> で、どの Google アカウントでもブラウザのメイン アカウントとして設定できます。</translation>
 <translation id="723103540848640830">ロック画面の PIN の最小桁数を設定する</translation>
 <translation id="7234280155140786597">禁止するネイティブ メッセージング ホストの名前(または、「*」ですべてを禁止)</translation>
+<translation id="723621412149834592">このポリシーを <ph name="BLOCK_WINDOW_PLACEMENT_POLICY_NAME" />(値 2)に設定した場合、サイトからウィンドウの配置に関する権限が要求されたときに、デフォルトで自動的に拒否します。デバイスの画面に関する情報の取得や、その情報を使用したウィンドウの表示と配置、特定の画面での全画面表示のリクエストといったサイトの機能が制限されます。
+
+      このポリシーを <ph name="ASK_WINDOW_PLACEMENT_POLICY_NAME" />(値 3)に設定した場合、ウィンドウの配置に関する権限が要求されたときに、デフォルトでユーザーに通知されます。ユーザーが権限を許可した場合、デバイスの画面に関する情報の取得や、その情報を使用したウィンドウの表示と配置、特定の画面での全画面表示のリクエストといったサイトの機能が有効になります。
+
+      このポリシーを未設定のままにした場合、<ph name="ASK_WINDOW_PLACEMENT_POLICY_NAME" /> ポリシーは適用されますが、ユーザーはこの設定を変更できます。</translation>
 <translation id="7246767840750730334">スマートフォン ハブの通知を有効にできるようにします。</translation>
 <translation id="7249828445670652637">ARC アプリで <ph name="PRODUCT_OS_NAME" /> の CA 証明書を使用できるようにする</translation>
 <translation id="7251825257294351251">システム通知の使用を許可する</translation>
@@ -5350,6 +5379,11 @@
 <translation id="7340034977315324840">デバイス操作時間を報告する</translation>
 <translation id="7343004974628511824">DNS 傍受チェックを行う</translation>
 <translation id="7343497214039883642">デバイスの企業プリンタ設定ファイル</translation>
+<translation id="7358012133037776875">ウィンドウの配置に関する権限を自動的に許可するサイトの URL パターンのリストを指定できます。これらのサイトでは、デバイスの画面に関する情報の取得や、その情報を使用したウィンドウの表示と配置、特定の画面での全画面表示のリクエストといった機能が有効になります。
+
+      有効なサイトの URL パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。ワイルドカード(<ph name="WILDCARD_VALUE" />)を使用できます。このポリシーでは、オリジンのみが照合されるため、URL パターンのパスは無視されます。
+
+      このポリシーでサイトを指定しない場合は、<ph name="DEFAULT_WINDOW_PLACEMENT_SETTING_POLICY_NAME" /> のポリシーが適用されます。このポリシーでサイトを指定した場合は、ブラウザのデフォルトの権限設定が適用され、ユーザーはサイトごとに権限を選択できます。</translation>
 <translation id="7358359585412734876"><ph name="LACROS_NAME" /> を有効にする</translation>
 <translation id="7358744897221281073">この設定が有効な場合、スマートフォン ハブをすでに有効にしているユーザーは、スマートフォンでのウェブページの閲覧などの作業を Chrome OS で継続できます。
 
@@ -5392,6 +5426,7 @@
 <translation id="7407441173422042771">このポリシーでは、<ph name="PRODUCT_NAME" /> でのネットワーク予測を制御します。DNS のプリフェッチ、TCP、SSL の事前接続、ウェブページの事前レンダリングを制御できます。
 
       このポリシーを設定した場合、ユーザーは設定を変更できません。設定しない場合、ネットワーク予測は有効になりますが、ユーザーはこの設定を変更できます。</translation>
+<translation id="7410074797376205571"><ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可します。</translation>
 <translation id="7412456346709338637">Thunderbolt/USB4 周辺機器のデータアクセスを有効にします</translation>
 <translation id="7417438464912687020">このパソコンへのリモート アクセス接続を許可する</translation>
 <translation id="7417972229667085380">プレゼンテーション モードでのアイドル時間に掛ける倍率(サポート終了)</translation>
@@ -5907,6 +5942,7 @@
           このポリシーを設定しない場合は、デフォルトの時間が使用されます。
 
           このポリシーの値はミリ秒単位とし、アイドル待ちの時間と同じかそれより短い時間を指定できます。</translation>
+<translation id="7992613144342460685">ウィンドウの配置に関する権限を許可するサイトを指定する</translation>
 <translation id="7995610550667275367">スキャン(バージョン 87 以降でサポート)</translation>
 <translation id="7999023147219236247">アプリへの権限付与のリクエストに関するポリシーです。PERMISSION_POLICY_UNSPECIFIED: ポリシーを指定しません。権限に関するポリシーがどのレベルでも指定されていなければ、デフォルトで「PROMPT」の動作が適用されます。PROMPT: 権限を付与するよう促すメッセージをユーザーに表示します。GRANT: 自動的に権限を付与します。DENY: 自動的に権限の付与を拒否します。</translation>
 <translation id="7999818120028621358">データ漏洩防止イベントのレポートを有効にする</translation>
@@ -5970,10 +6006,6 @@
 <translation id="8101381354936029836">ポリシーの最小単位グループ:</translation>
 <translation id="8102913158860568230">デフォルトのメディアストリームの設定</translation>
 <translation id="8104962233214241919">これらのサイトのクライアント証明書を自動的に選択する</translation>
-<translation id="8111502498815410897">このポリシーでは、ファスト ペアリングを強制的に有効または無効にできます。
-      ファスト ペアリングは、ペア設定済みの周辺機器と GAIA アカウントをリンクする新しい Bluetooth ペア設定フローです。
-      これにより、同じ GAIA アカウントでログインしている他の Chrome OS(および Android)デバイスを自動的にペア設定できるようになります。
-      未設定の場合、ファスト ペアリングは Chrome OS のデフォルトである有効に設定されます。</translation>
 <translation id="8114382167597081590">YouTube で制限モードを強制適用しない</translation>
 <translation id="8117921351531866504">保存されているお支払い方法の確認をウェブサイトに許可するかどうかを設定します。
 
@@ -6292,6 +6324,7 @@
 <translation id="8424255554404582727">再起動のたびにデフォルトのディスプレイ回転方法を再適用する</translation>
 <translation id="8426231401662877819">画面を時計回りに 90 度回転</translation>
 <translation id="8426819027631706846"><ph name="JS_ALERT" />、<ph name="JS_CONFIRM" />、<ph name="JS_PROMPT" /> によってトリガーされた JavaScript モード ダイアログは、トリガーしたサブフレームの生成元がメインフレームの生成元とは異なる場合に <ph name="PRODUCT_NAME" /> でブロックされます(参照: https://www.chromestatus.com/feature/5148698084376576)。このポリシーは前述の変更を許可します。このポリシーが有効に設定されている、または未設定の場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされます。ポリシーが無効に設定されている場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされません。このポリシーは <ph name="PRODUCT_NAME" /> バージョン 95 で削除されます。</translation>
+<translation id="8427466947904008809">CRD にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可する。</translation>
 <translation id="8433186206711564395">ネットワーク設定</translation>
 <translation id="8433769814000220721">おすすめのコンテンツを有効にする</translation>
 <translation id="843609873781525167">このポリシーを True に設定すると、<ph name="PRODUCT_NAME" /> で起動時にデフォルトのブラウザであるかが常に確認され、可能であれば自動的に登録されます。このポリシーを False に設定した場合、<ph name="PRODUCT_NAME" /> でデフォルトであるかどうかが確認されなくなり、このオプションに対するユーザー制御がオフになります。このポリシーを未設定のままにした場合は、<ph name="PRODUCT_NAME" /> でデフォルトに指定するかどうかをユーザーが制御でき、またデフォルトにしない場合はユーザー通知が表示されるかどうかを制御できます。注: <ph name="MS_WIN_NAME" /> 管理者の場合は、Windows 7 が稼働するマシンについてのみ、この設定をオンにできます。それ以後のバージョンについては、<ph name="PRODUCT_NAME" /> を <ph name="HTTPS_PROTOCOL" /> プロトコルと <ph name="HTTP_PROTOCOL" /> プロトコル(必要に応じて <ph name="FTP_PROTOCOL" /> プロトコルとその他のファイル形式)のハンドラにする、「デフォルトのアプリケーション関連付け」ファイルをデプロイする必要があります。Chrome ヘルプ(https://support.google.com/chrome?p=make_chrome_default_win)をご覧ください。</translation>
@@ -6719,6 +6752,7 @@
 <translation id="8892783613915541293">AC 電源での使用中、デバイスがアイドル状態になってからの待機時間とその後に行うアクション</translation>
 <translation id="8897796778265450949">SAML を使用せず GAIA 経由で認証されたユーザーがオフラインでログインできる時間を制限する</translation>
 <translation id="889814528399907891">ユーザーが <ph name="LACROS_NAME" /> を有効にするとともにメインのブラウザとして設定することを許可する</translation>
+<translation id="8900312706328930425">クラウド レポートの送信頻度(時間単位)</translation>
 <translation id="8903283771634816230">このポリシーを有効に設定した場合、<ph name="PRODUCT_NAME" /> では OS のデフォルト プリンタが印刷プレビューのデフォルトの印刷先として使用されます。
 
       このポリシーを無効に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> では、最後に使用されたプリンタが印刷プレビューのデフォルトの印刷先として使用されます。</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 2c49ba5..230fdc61 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -6288,10 +6288,6 @@
 <translation id="8101381354936029836">정책 전체 그룹:</translation>
 <translation id="8102913158860568230">기본 mediastream 설정</translation>
 <translation id="8104962233214241919">이 사이트에 대해 클라이언트 인증서를 자동으로 선택합니다.</translation>
-<translation id="8111502498815410897">정책을 설정하면 빠른 페어링이 강제로 사용 설정 또는 중지됩니다.
-      빠른 페어링은 새로운 블루투스 페어링 플로우로 페어링된 주변기기를 GAIA 계정과 연결합니다.
-      이를 사용하면 동일한 GAIA 계정으로 로그인된 다른 Chrome OS 및 Android 기기가 자동으로 페어링됩니다.
-      설정되지 않은 경우 빠른 페어링은 Chrome OS의 기본값인 사용 설정으로 지정됩니다.</translation>
 <translation id="8114382167597081590">YouTube에 제한 모드 사용 안함</translation>
 <translation id="8117921351531866504">웹사이트에서 사용자의 결제 수단 저장 여부를 확인하도록 허용할지 선택할 수 있습니다.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 30eb71d..5d5c4e8 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -2923,6 +2923,11 @@
       Dit kan worden gebruikt door beheerders die meer tijd nodig hebben om hun interne website te updaten waarop deze nieuwe beperking van invloed is. Dit zakelijke beleid is tijdelijk. Het is de bedoeling het te verwijderen na <ph name="PRODUCT_NAME" /> versie 104.
       </translation>
 <translation id="4268586991084547853">Meer compatibel met sitelijsten in de Microsoft IE-/Edge-bedrijfsmodus.</translation>
+<translation id="4269798992490176617">Als dit beleid wordt toegepast, kan <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> WebAuthn API-verzoeken uitvoeren die afkomstig zijn van een browsesessie op een externe host.
+
+      Als je het beleid niet toepast of niet instelt, is het standaardgedrag van toepassing.
+
+      Deze functie wordt alleen ondersteund binnen de interne netwerkomgeving van Google.</translation>
 <translation id="4269859918103560644">Toestaan dat gebruikers dit bepalen</translation>
 <translation id="4274691295133617461">Als je het beleid instelt op 3, kunnen websites leestoegang vragen tot bestanden en directory's in het bestandssysteem van het besturingssysteem van de host via de File System API. Als je het beleid instelt op 2, wordt toegang geblokkeerd.
 
@@ -5303,6 +5308,7 @@
 <translation id="7063895219334505671">Pop-ups toestaan ​​op deze sites</translation>
 <translation id="7066292150801784098">Externe gebruikers niet toestaan om vensters met verhoogde bevoegdheid te gebruiken tijdens een sessie voor support op afstand</translation>
 <translation id="706669471845501145">Sites toestaan bureaubladmeldingen te tonen</translation>
+<translation id="70681795425744184">Niet toestaan dat CRD WebAuthn API-verzoeken uitvoert die afkomstig zijn van een externe host.</translation>
 <translation id="7070525176564511548">Het wachtwoord moet elke week (168 uur) worden opgegeven</translation>
 <translation id="7072208053150563108">Wijzigingsfrequentie van computerwachtwoord</translation>
 <translation id="7072567600438630966">Toestaan dat Phone Hub wordt aangezet.</translation>
@@ -5593,6 +5599,7 @@
 <translation id="7407441173422042771">Met dit beleid wordt netwerkvoorspelling in <ph name="PRODUCT_NAME" /> beheerd. Hiermee worden DNS-prefetching, het vooraf verbinden met TCP en SSL en het vooraf renderen van webpagina's beheerd.
 
       Als je het beleid instelt, kunnen gebruikers het niet wijzigen. Als je het beleid niet instelt, wordt netwerkvoorspelling aangezet, maar kan de gebruiker dit wijzigen.</translation>
+<translation id="7410074797376205571">Toestaan dat <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> WebAuthn API-verzoeken uitvoert die afkomstig zijn van een externe host.</translation>
 <translation id="7412456346709338637">Gegevenstoegang voor Thunderbolt/USB4-randapparaten aanzetten</translation>
 <translation id="7417438464912687020">Verbindingen voor externe toegang tot deze machine toestaan</translation>
 <translation id="7417972229667085380">Het percentage waarmee je de inactieve vertraging in presentatiemodus kunt schalen (verouderd)</translation>
@@ -6204,10 +6211,6 @@
 <translation id="8101381354936029836">Beleid van atomische groep:</translation>
 <translation id="8102913158860568230">Standaardinstelling voor mediastreams</translation>
 <translation id="8104962233214241919">Clientcertificaten automatisch selecteren voor deze sites</translation>
-<translation id="8111502498815410897">Als je dit beleid instelt, wordt Snel koppelen geforceerd aan- of uitgezet.
-      Snel koppelen is een nieuw proces voor bluetooth-koppeling waarin gekoppelde randapparaten met een GAIA-account worden gekoppeld.
-      Andere Chrome OS- en Android-apparaten waarop je op hetzelfde GAIA-account ingelogd bent, worden automatisch gekoppeld.
-      Als je het niet instelt, staat Snel koppelen volgens de standaardinstelling van Chrome OS aan.</translation>
 <translation id="8114382167597081590">'Beperkte modus' niet afdwingen op YouTube</translation>
 <translation id="8117921351531866504">Hiermee kun je instellen of websites controleren of de gebruiker betaalmethoden heeft opgeslagen.
 
@@ -6528,6 +6531,7 @@
        Als je het beleid niet toepast, worden JavaScript-dialoogvensters niet geblokkeerd, zelfs niet als ze afkomstig zijn van een subframe met een andere oorsprong.
 
        Dit beleid wordt verwijderd in <ph name="PRODUCT_NAME" />-versie 95.</translation>
+<translation id="8427466947904008809">Toestaan dat CRD WebAuthn API-verzoeken uitvoert die afkomstig zijn van een externe host.</translation>
 <translation id="8433186206711564395">Netwerkinstellingen</translation>
 <translation id="8433769814000220721">Voorgestelde content aanzetten</translation>
 <translation id="843609873781525167">Als je het beleid instelt op True, checkt <ph name="PRODUCT_NAME" /> altijd of het de standaardbrowser is bij het opstarten en, indien mogelijk, registreert het zichzelf automatisch. Als je het beleid instelt op False, checkt <ph name="PRODUCT_NAME" /> niet of het de standaardbrowser is en worden de gebruikersmogelijkheden voor deze optie uitgezet.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index b25a05c..7a34f239 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -2974,6 +2974,11 @@
       Ela pode ser usada por administradores que precisam de mais tempo para atualizar os sites internos afetados pela nova restrição. A política corporativa é temporária e será removida após a versão 104 do <ph name="PRODUCT_NAME" />.
       </translation>
 <translation id="4268586991084547853">Mais compatível com as listas de sites do modo empresarial do Microsoft IE/Edge.</translation>
+<translation id="4269798992490176617">Se esta política for ativada, a <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> poderá executar solicitações de API do WebAuthn originadas de uma sessão de navegação em um host remoto.
+
+      Se a política for desativada ou deixada sem definição, o comportamento padrão será aplicado.
+
+      Observe que somente o ambiente da rede interna do Google tem suporte a esse recurso.</translation>
 <translation id="4269859918103560644">Permitir que o usuário decida</translation>
 <translation id="4274691295133617461">Se a política for definida como "3", os sites poderão pedir acesso de leitura de arquivos e diretórios no sistema de arquivos do sistema operacional do host com a API File System. Se for definida como "2", o acesso será negado.
 
@@ -5380,6 +5385,7 @@
 <translation id="7063895219334505671">Permitir pop-ups nestes sites</translation>
 <translation id="7066292150801784098">Desativar a interação de usuários remotos com janelas elevadas em sessões de assistência remota</translation>
 <translation id="706669471845501145">Permitir que os sites exibam notificações da área de trabalho</translation>
+<translation id="70681795425744184">Não permitir que a Área de trabalho remota do Google Chrome execute solicitações de API do WebAuthn transmitidas por proxy de um host remoto.</translation>
 <translation id="7070525176564511548">A senha precisa ser digitada uma vez por semana (a cada 168 horas).</translation>
 <translation id="7072208053150563108">Taxa de alteração da senha da máquina</translation>
 <translation id="7072567600438630966">Permitir a ativação do recurso "Seu smartphone".</translation>
@@ -5667,6 +5673,7 @@
 <translation id="7407441173422042771">Esta política controla a previsão de rede no <ph name="PRODUCT_NAME" />. Ela controla a pré-busca de DNS, a pré-conexão SSL e TCP e a pré-renderização das páginas da Web.
 
       Se você definir a política, os usuários não poderão mudá-la. Se ela não for definida, a previsão de rede será ativada, mas os usuários poderão mudar a configuração.</translation>
+<translation id="7410074797376205571">Permitir que a <ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" /> execute solicitações de API do WebAuthn transmitidas por proxy de um host remoto.</translation>
 <translation id="7412456346709338637">Ativar acesso a dados de periféricos Thunderbolt/USB4</translation>
 <translation id="7417438464912687020">Permitir conexões de acesso remoto a esta máquina</translation>
 <translation id="7417972229667085380">Percentual pelo qual calcular o intervalo de inatividade no modo de apresentação (uso suspenso)</translation>
@@ -6275,10 +6282,6 @@
 <translation id="8101381354936029836">Grupo atômico de políticas:</translation>
 <translation id="8102913158860568230">Configuração padrão mediastream</translation>
 <translation id="8104962233214241919">Selecionar certificados de cliente automaticamente para estes sites</translation>
-<translation id="8111502498815410897">A definição desta política forçará a ativação ou desativação do Pareamento rápido.
-      O Pareamento rápido é um novo fluxo de pareamento por Bluetooth que vincula periféricos pareados com uma conta do GAIA.
-      Isso permite que outros dispositivos do Chrome OS (e Android) conectados à mesma conta do GAIA sejam pareados automaticamente.
-      Se esta política não for definida, o Pareamento rápido seguirá o padrão do Chrome OS, que é a ativação.</translation>
 <translation id="8114382167597081590">Não aplicar o Modo restrito no YouTube</translation>
 <translation id="8117921351531866504">Permite que você defina se os sites têm permissão de verificar se os usuários salvaram formas de pagamento.
 
@@ -6600,6 +6603,7 @@
        Se ela for definida como "Disabled", as caixas de diálogo de JavaScript acionadas por um subframe de origem diferente não serão bloqueadas.
 
        Esta política será removida na versão 95 do <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8427466947904008809">Permitir que a Área de trabalho remota do Google Chrome execute solicitações de API do WebAuthn transmitidas por proxy de um host remoto.</translation>
 <translation id="8433186206711564395">Configurações de rede</translation>
 <translation id="8433769814000220721">Permitir conteúdo sugerido</translation>
 <translation id="843609873781525167">Se a política for definida como verdadeira, o <ph name="PRODUCT_NAME" /> precisará sempre verificar se é o navegador padrão na inicialização e, se possível, registrar-se automaticamente. Se a política for definida como falsa, o<ph name="PRODUCT_NAME" /> deixará de verificar se ele é o navegador padrão e os controles do usuário para essa opção serão desativados.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index fd0d325c..d7d5875 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2963,6 +2963,11 @@
       Это правило могут использовать администраторы, которым нужно больше времени, чтобы обновить внутренние сайты, затронутые этим новым ограничением. Это корпоративное правило введено на время и будет удалено после выхода <ph name="PRODUCT_NAME" /> версии 104.
       </translation>
 <translation id="4268586991084547853">Повышенная совместимость со списками сайтов в режиме предприятия Microsoft IE/Edge</translation>
+<translation id="4269798992490176617">Если правило включено, приложение "<ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" />" может выполнять запросы к WebAuthn API из сеансов на удаленных хостах.
+
+      Если правило отключено или не настроено, используется поведение по умолчанию.
+
+      Обратите внимание, что данная функция доступна только во внутренней сетевой среде Google.</translation>
 <translation id="4269859918103560644">Предоставить выбор пользователю</translation>
 <translation id="4274691295133617461">Если задано значение 3, сайтам будет разрешено запрашивать доступ для чтения к файлам и каталогам операционной системы хоста через File System API, а если задано значение 2, – запрещено.
 
@@ -5371,6 +5376,7 @@
 <translation id="7063895219334505671">Разрешить всплывающие окна на этих сайтах</translation>
 <translation id="7066292150801784098">Запретить пользователям взаимодействовать с привилегированными окнами во время удаленной поддержки</translation>
 <translation id="706669471845501145">Разрешить сайтам показывать уведомления</translation>
+<translation id="70681795425744184">Запретить Удаленному рабочему столу Chrome выполнять запросы к WebAuthn API из удаленных хостов.</translation>
 <translation id="7070525176564511548">Обязательный ввод пароля каждые 168 часов</translation>
 <translation id="7072208053150563108">Частота смены пароля на устройстве</translation>
 <translation id="7072567600438630966">Разрешить включать функцию "Управление телефоном"</translation>
@@ -5659,6 +5665,7 @@
 <translation id="7407441173422042771">Это правило позволяет настраивать предварительное определение сети в <ph name="PRODUCT_NAME" />. Оно управляет предзагрузкой DNS, предварительным подключением по протоколам TCP и SSL, а также предварительной визуализацией веб-страниц.
 
       Если правило настроено, пользователи не могут изменить его. Если правило не настроено, предварительное определение сети включено, но пользователи могут это изменить.</translation>
+<translation id="7410074797376205571">Разрешить приложению "<ph name="CHROME_REMOTE_DESKTOP_PRODUCT_NAME" />" выполнять запросы к WebAuthn API из удаленных хостов.</translation>
 <translation id="7412456346709338637">Включить доступ к данным для периферийных устройств, использующих Thunderbolt или USB4</translation>
 <translation id="7417438464912687020">Разрешить удаленные подключения к этому устройству</translation>
 <translation id="7417972229667085380">Коэффициент увеличения задержки перехода в ждущий режим в режиме презентации (больше не поддерживается)</translation>
@@ -6267,10 +6274,6 @@
 <translation id="8101381354936029836">Мини-группа правила:</translation>
 <translation id="8102913158860568230">Настройка MediaStream по умолчанию</translation>
 <translation id="8104962233214241919">Автоматический выбор клиентских сертификатов для сайтов</translation>
-<translation id="8111502498815410897">Это правило позволяет принудительно использовать или запрещать быстрое подключение.
-      Быстрое подключение – это новая функция для связывания периферийных устройств по Bluetooth с помощью аккаунта GAIA.
-      Благодаря этой функции устройства Chrome OS (и Android), где выполнен вход в один и тот же аккаунт GAIA, могут автоматически подключаться друг к другу.
-      Если правило не настроено, быстрое подключение будет разрешено по умолчанию, как и в Chrome OS.</translation>
 <translation id="8114382167597081590">Отключить обязательное использование Безопасного режима в YouTube</translation>
 <translation id="8117921351531866504">Определяет, могут ли сайты проверять наличие сохраненных способов оплаты.
 
@@ -6593,6 +6596,7 @@
        Если правило отключено, блокировка диалоговых окон JavaScript, запущенных из другого субфрейма, не выполняется.
 
        Это правило будет удалено в <ph name="PRODUCT_NAME" /> 95.</translation>
+<translation id="8427466947904008809">Разрешить Удаленному рабочему столу Chrome выполнять запросы к WebAuthn API из удаленных хостов.</translation>
 <translation id="8433186206711564395">Настройки сети</translation>
 <translation id="8433769814000220721">Включение рекомендованного контента</translation>
 <translation id="843609873781525167">Если для правила задано значение True, при запуске <ph name="PRODUCT_NAME" /> будет всегда проверять, является ли он браузером по умолчанию, и если нет, автоматически регистрироваться в качестве такового. Если задано значение False, <ph name="PRODUCT_NAME" /> не будет проверять, является ли он браузером по умолчанию, и запретит пользователям изменять этот параметр.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 4ebc625..9a18eef 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -6200,10 +6200,6 @@
 <translation id="8101381354936029836">กลุ่มขนาดเล็กของนโยบาย</translation>
 <translation id="8102913158860568230">การตั้งค่า mediastream เริ่มต้น</translation>
 <translation id="8104962233214241919">เลือกใบรับรองไคลเอ็นต์สำหรับไซต์เหล่านี้โดยอัตโนมัติ</translation>
-<translation id="8111502498815410897">การตั้งค่านโยบายนี้จะบังคับให้เปิดหรือปิดใช้การจับคู่ด่วน
-      การจับคู่ด่วนเป็นขั้นตอนการจับคู่แบบใหม่ของบลูทูธที่ลิงก์อุปกรณ์ต่อพ่วงที่จับคู่กับบัญชี GAIA
-      โดยช่วยให้อุปกรณ์ Chrome OS (และ Android) อื่นๆ ที่ลงชื่อเข้าใช้ด้วยบัญชี GAIA เดียวกันจับคู่โดยอัตโนมัติ
-      หากไม่ได้ตั้งค่า การจับคู่ด่วนจะเป็นไปตามค่าเริ่มต้นของ Chrome OS โดยจะเปิดใช้อยู่</translation>
 <translation id="8114382167597081590">ไม่บังคับใช้โหมดที่จำกัดใน YouTube</translation>
 <translation id="8117921351531866504">อนุญาตให้คุณตั้งค่าว่าจะอนุญาตให้เว็บไซต์ตรวจสอบว่าผู้ใช้บันทึกวิธีการชำระเงินไว้ได้หรือไม่
 
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 32d563f2..049fcae8 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -773,6 +773,17 @@
 
       Uygulamaları <ph name="PRODUCT_OS_NAME" /> rafına sabitlemek için <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" /> politikasına bakın.</translation>
 <translation id="186719019195685253">Cihaz AC güçle çalışırken boşta kalma süresine ulaşıldığında yapılacak işlem</translation>
+<translation id="1869688072690234823">Bu politika hangi WebAuthn faktörlerinin kullanılabileceğini kontrol eder.
+
+      Aşağıdaki kontroller kullanılabilir:
+
+      * Her WebAuthn faktörüne izin vermek için ["all"] öğesini kullanın (İleride eklenecek faktörlere de izin verilir).
+
+      * Yalnızca PIN'e izin vermek için ["PIN"] öğesini kullanın.
+
+      * PIN ve parmak iziyle kilidi açmaya izin vermek için ["PIN", "FINGERPRINT"] öğesini kullanın.
+
+      Politika ayarlanmaz veya boş listeye ayarlanırsa yönetilen cihazlarda WebAuthn faktörleri kullanılamaz.</translation>
 <translation id="1881649377321404593">
       WebDriver artık mevcut tüm politikalarla uyumlu olduğundan gerekliliğini yitiren
       bu politika, M80 sürümünde kaldırılmıştır.
@@ -1528,6 +1539,7 @@
 <translation id="2664391398878045611">Orta aralık duyurusu mevcut olsa bile yeni sekme sayfasında gösterilmez</translation>
 <translation id="2664682171745499686">Alan adlarında benzer alan adı uyarılarını gizle</translation>
 <translation id="2665422249821137126">Giriş ekranında büyük imleci etkinleştir</translation>
+<translation id="2667894101494585925">Optimizasyon Kılavuzunun Getirilmesini Etkinleştir</translation>
 <translation id="2672012807430078509">NTLM'nin SMB ekleme için kimlik doğrulama protokolü olarak etkinleştirilmesini kontrol eder</translation>
 <translation id="2678503605767349615">Cihaz genelinde gerekli İstemci Sertifikaları</translation>
 <translation id="268577405881275241">Veri sıkıştırma proxy özelliğini etkinleştir</translation>
@@ -1952,6 +1964,7 @@
       Bu özellik, <ph name="CHROME_SYNC_NAME" /> içerisindeki <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> veri türünün etkinleştirilmesine bağlıdır. <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> politikasında <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> devre dışı bırakılırsa veya <ph name="SYNC_DISABLED_POLICY_NAME" /> politikasında <ph name="CHROME_SYNC_NAME" /> devre dışı bırakılırsa bu özellik etkinleştirilmez.
 
       Bu politika ayarlanmadan bırakılırsa varsayılan olarak yönetilen kullanıcılara izin verilmez.</translation>
+<translation id="3138514192363246220">Göz atma deneyimini iyileştiren makine öğrenimi modellerinin ve sayfa yükleme meta verilerinin getirilmesini devre dışı bırak</translation>
 <translation id="3142410959002029864">Politika ayarlanırsa varsayılan dupleks yazdırma modu geçersiz kılınır. Mod kullanılamıyorsa bu politika yok sayılır.</translation>
 <translation id="3144173889708944482"><ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> için <ph name="PRINTERS_BLOCKLIST" /> seçiliyken <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> politikası ayarlanırsa kullanıcıların hangi yazıcıları kullanamayacağı belirlenir. Bu politikada listelenen kimlikler dışında kalan tüm yazıcılar kullanıcılara sağlanır. Kimliklerin, <ph name="DEVICE_PRINTERS_POLICY_NAME" /> politikasında belirtilen dosyadaki <ph name="ID_FIELD" /> veya <ph name="GUID_FIELD" /> alanlarına karşılık gelmesi gerekir.</translation>
 <translation id="3146711617256415776">Seç ve Dinle özelliğini kullanırken gelişmiş ağ metin okuma seslerine izin verme</translation>
@@ -2054,6 +2067,8 @@
 <translation id="3219421230122020860">Gizli mod kullanılabilir</translation>
 <translation id="3220624000494482595">Kiosk uygulaması bir Android uygulamasıysa bu politika <ph name="TRUE" /> seçeneğine ayarlansa dahi <ph name="PRODUCT_OS_NAME" /> sürümü üzerinde herhangi bir kontrolü olmaz.</translation>
 <translation id="322359555555487980"><ph name="PRODUCT_OS_NAME" /> üzerinde varyasyonların kullanılabilirliğini belirle</translation>
+<translation id="3229163415739929305">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa göz atma deneyimini iyileştiren makine öğrenimi modellerinin ve sayfa yükleme meta verilerinin getirilmesi etkinleştirilir.
+      Politika, Devre Dışı değerine ayarlanırsa bazı özellikler düzgün çalışmayabilir.</translation>
 <translation id="3231837273069128027">Politikayı ayarlamak <ph name="TPM_FIRMWARE_UPDATE_TPM" /> donanım yazılımı güncellemelerinin kullanılabilirliğini ve davranışını yapılandırır.
 
       Bağımsız ayarları JSON özelliklerinde belirtilir:
@@ -4003,6 +4018,7 @@
 <translation id="5586942249556966598">Hiçbir şey yapma</translation>
 <translation id="5598417829613725146">Tuval (90 sürümünden itibaren desteklenir)</translation>
 <translation id="5599461642204007579"><ph name="MS_AD_NAME" /> yönetim ayarları</translation>
+<translation id="5601503069213153581">PIN</translation>
 <translation id="5614865701790130558">Politika tabanlı eklenti yüklemeleriyle ilgili etkinlikleri günlüğe kaydetme</translation>
 <translation id="5618398258385745432">İlişkili ayar, şifrelerin görüntülenmesinde yeniden kimlik doğrulaması kullanılmaya başlamadan önce kullanılıyordu. O zamandan beri, bu ayarın ve dolayısıyla bu politikanın Chrome davranışı üzerinde herhangi bir etkisi olmadı. Şu anda Chrome'un geçerli davranışı, politikanın, şifre yöneticisi ayarları sayfasında şifreleri açık metin olarak göstermeyi devre dışı bırakacak şekilde ayarlanmasıyla aynıdır. Yani ayarlar sayfası, yalnızca bir yer tutucu içerir ve Chrome, yalnızca kullanıcının "Göster"i tıklamasıyla (ve uygulanıyorsa yeniden kimlik doğrulaması yapmasıyla) şifreyi gösterir. Politikanın asıl açıklaması aşağıda belirtilmiştir.
 
@@ -4323,6 +4339,7 @@
        Geçerli değerler: • 0 = Kapalı • 1 = Açık • 2 = Yerleşik büyüteç açık
 
           Not: <ph name="DEVICE_LOGIN_SCREEN_SCREEN_MAGNIFIER_TYPE_POLICY_NAME" /> belirtilmişse bu politikayı geçersiz kılar.</translation>
+<translation id="6011193465932186973">Parmak izi</translation>
 <translation id="6011969832398368671">Sitelerin kullanıcıdan dosya ve dizinlere yazma erişimi istemesine izin ver</translation>
 <translation id="6012952794649558174">Varsayılan tarayıcı davranışını kullan.</translation>
 <translation id="6015281292796053435">Bu politika, Güvenli Tarama uyarılarının sayısı ve güvenli tarama uyarılarının tıklama sayısı da dahil olmak üzere Güvenli Tarama bilgilerinin bildirilip bildirilmeyeceğini kontrol eder.
@@ -5716,6 +5733,7 @@
       <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> alanları, tarama sonucu net olmadığında görüntülenen uyarıdan sonra kullanıcıya gösterilen mesajı yapılandırmak için kullanılır. Mesaj alanında, en fazla 200 karakterden oluşması gereken metin bulunur. Learn_more_url (daha fazla bilgi edinin) alanı, yönetici tarafından sağlanan URL'yi içerir. Bu URL, işlemin neden engellendiği hakkında daha fazla müşteri tarafından sağlanan bilgi edinmek için kullanıcı tarafından tıklanabilir olur. Mesajın dilini içeren dil alanı isteğe bağlıdır. Dil alanının boş bırakılması veya "varsayılan" değerine ayarlanması, kullanıcının dilinde mesaj olmadığında kullanılacak mesajı gösterir. Etiket alanı, mesajın hangi tarama türleri için görüntüleneceğini belirtir. Custom_messages (özel mesajlar) listesi herhangi bir giriş içermeyebilir veya birden fazla giriş içerebilir. Her girişin boş olmayan mesajı ve etiket alanları olmalıdır.
 
       Bu politikanın yürürlüğe girmesi için ek kurulum gerekir. Daha fazla bilgi için lütfen https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting adresini ziyaret edin.</translation>
+<translation id="7482768039644066614">Göz atma deneyimini iyileştirmek için makine öğrenimi modellerinin ve sayfa yükleme meta verilerinin getirilmesini etkinleştir</translation>
 <translation id="7485481791539008776">Varsayılan yazıcı seçimi için kurallar</translation>
 <translation id="7486205887492534734">Oturum açma ekranında birden fazla sertifika eşleştiğinde sor</translation>
 <translation id="7491720878670299691">Ağ verilerinin etkinlikler için sorgulanma ve kontrol edilme hızı. İzin verilen minimum sıklık 1 dakikadır.
@@ -6240,10 +6258,6 @@
 <translation id="8101381354936029836">Politika atom grubu:</translation>
 <translation id="8102913158860568230">Varsayılan medya akışı ayarı</translation>
 <translation id="8104962233214241919">Bu siteler için istemci sertifikalarını otomatik olarak seç</translation>
-<translation id="8111502498815410897">Bu politika ayarlandığında, Hızlı Eşleme'yi etkinleştirmeye veya devre dışı bırakmaya zorlar.
-      Hızlı Eşleme, eşlenmiş çevre birimlerini GAIA hesabıyla bağlayan yeni bir Bluetooth eşleme akışıdır.
-      Bu şekilde aynı GAIA hesabıyla oturum açmış diğer Chrome OS (ve Android) cihazlar otomatik olarak eşlenebilir.
-      Politika ayarlanmadan bırakılırsa Hızlı Eşleme, Chrome OS'in etkin olan varsayılanına uyacaktır.</translation>
 <translation id="8114382167597081590">YouTube'da Kısıtlı Mod'u zorunlu kılma</translation>
 <translation id="8117921351531866504">Web sitelerinin kullanıcının kaydettiği ödeme yöntemleri olup olmadığını kontrol etmesine izin verilip verilmeyeceğini ayarlamanıza olanak sağlar.
 
@@ -6735,6 +6749,7 @@
       Politika Devre dışı değerine ayarlanırsa NTLMv2 kapanır.
 
       En son Samba ve <ph name="MS_WIN_NAME" /> sunucularının tamamı NTLMv2'yi desteklemektedir. Bu, kimlik doğrulamanın güvenliğini azalttığından yalnızca geriye dönük uyumluluk için kapatılmalıdır.</translation>
+<translation id="8605627672203601098">İzin verilen WebAuthn faktörlerini yapılandır</translation>
 <translation id="8606263947930257189"><ph name="PRODUCT_NAME" /> ürününün en az 5 dakikadır arka planda olan sekmeleri dondurup donduramayacağını kontrol eder.
 
       Politika true (doğru) değerine ayarlanırsa en az 5 dakikadır arka planda bulunan sekmeler dondurulabilir. Sekme dondurma işlemi CPU, pil ve bellek kullanımını azaltır. <ph name="PRODUCT_NAME" />, arka planda faydalı işler yapan sekmelerin (ör. bildirimleri görüntüleme, ses çalma, video yayınlama) dondurulmaması için sezgisel yöntemler kullanır. Web geliştiricileri, sitelerinin dondurma kapsamı dışında kalmasını seçebilir (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 6c3a684d..e1dc0d6 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -788,6 +788,17 @@
 
       Щоб закріпити додатки на панелі запуску <ph name="PRODUCT_OS_NAME" />, скористайтеся правилом <ph name="PINNED_LAUNCHER_APPS_POLICY_NAME" />.</translation>
 <translation id="186719019195685253">Дія, яка має виконуватися під час живлення від електромережі, коли виникає затримка через неактивність.</translation>
+<translation id="1869688072690234823">Це правило визначає, які фактори WebAuthn можуть використовуватися.
+
+      Щоб дозволити:
+
+      * усі фактори WebAuthn (зокрема ті, які буде додано пізніше), додайте запис ["all"];
+
+      * лише PIN-код, додайте запис ["PIN"];
+
+      * PIN-код і відбиток, додайте запис ["PIN", "FINGERPRINT"].
+
+      Якщо це правило не налаштувати або вказати для нього порожній список, фактори WebAuthn будуть недоступні для керованих пристроїв.</translation>
 <translation id="1881649377321404593">
       Це правило видалено в M80, тому що воно більше не потрібне.
       WebDriver тепер сумісний з усіма наявними правилами.
@@ -1554,6 +1565,7 @@
 <translation id="2664391398878045611">На сторінці нової вкладки не з’являтиметься оголошення в центрі, навіть якщо воно доступне</translation>
 <translation id="2664682171745499686">Блокувати попередження про схожі домени на сторінках певних доменів</translation>
 <translation id="2665422249821137126">Увімкнути великий курсор на екрані входу</translation>
+<translation id="2667894101494585925">Увімкнути отримання посібника з оптимізації</translation>
 <translation id="2672012807430078509">Указує, чи можна вмикати NTLM як протокол автентифікації для підключення SMB</translation>
 <translation id="2678503605767349615">Обов'язкові сертифікати клієнтів на рівні пристрою</translation>
 <translation id="268577405881275241">Увімкнути проксі-сервер стиснення даних</translation>
@@ -1977,6 +1989,7 @@
       Ця функція доступна, якщо в сервісі <ph name="CHROME_SYNC_NAME" /> увімкнено тип даних <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" />. Якщо тип даних <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> вимкнено в правилі <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> або сервіс <ph name="CHROME_SYNC_NAME" /> вимкнено в правилі <ph name="SYNC_DISABLED_POLICY_NAME" />, ця функція буде деактивована.
 
       Якщо це правило не налаштувати, за умовчанням синхронізація буде заборонена для керованих користувачів.</translation>
+<translation id="3138514192363246220">Вимкнути отримання метаданих про завантаження сторінки та моделі машинного навчання, що покращують веб-перегляд</translation>
 <translation id="3142410959002029864">Якщо ввімкнути це правило, воно замінить стандартні параметри двостороннього друку. Якщо такий режим недоступний, це правило ігнорується.</translation>
 <translation id="3144173889708944482">Якщо для правила <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> вибрано параметр <ph name="PRINTERS_BLOCKLIST" />, тоді налаштування <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> визначає, які принтери не можна використовувати. Користувачам недоступні лише принтери з переліченими в правилі ідентифікаторами. Ідентифікатори мають відповідати полю <ph name="ID_FIELD" /> або <ph name="GUID_FIELD" /> у файлі, указаному в правилі <ph name="DEVICE_PRINTERS_POLICY_NAME" />.</translation>
 <translation id="3146711617256415776">Заборонити покращені голоси для синтезу мовлення через мережу під час використання функції "Читання з екрана"</translation>
@@ -2079,6 +2092,8 @@
 <translation id="3219421230122020860">Режим анонімного перегляду доступний</translation>
 <translation id="3220624000494482595">Якщо додаток-термінал є додатком Android, він не зможе керувати версією <ph name="PRODUCT_OS_NAME" />, навіть якщо для правила встановлено значення "<ph name="TRUE" />".</translation>
 <translation id="322359555555487980">Визначити доступність варіантів у <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3229163415739929305">Якщо ввімкнути або не налаштувати це правило, буде активовано отримання метаданих про завантаження сторінки та моделі машинного навчання, що покращують веб-перегляд.
+      Якщо його вимкнути, деякі функції можуть працювати неналежним чином.</translation>
 <translation id="3231837273069128027">За допомогою цього правила можна налаштувати доступність і поведінку функції оновлення мікропрограми <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Окремі налаштування можна вказувати за допомогою властивостей JSON.
@@ -4034,6 +4049,7 @@
 <translation id="5586942249556966598">Нічого не робити</translation>
 <translation id="5598417829613725146">Canvas (підтримується з версії 90)</translation>
 <translation id="5599461642204007579">Параметри керування <ph name="MS_AD_NAME" /></translation>
+<translation id="5601503069213153581">PIN-код</translation>
 <translation id="5614865701790130558">Реєструвати в журналі події під час встановлень розширень, які активовано правилом</translation>
 <translation id="5618398258385745432">Пов’язане налаштування використовувалося, перш ніж ми запровадили повторну автентифікацію для перегляду паролів. Відтоді це налаштування, а отже й правило, не впливають на роботу Chrome. Зараз Chrome працює так, ніби це правило вимикає показ паролів як відкритого тексту на сторінці налаштувань диспетчера паролів. Це означає, що на сторінці налаштувань є тільки заповнювач, а Chrome показує пароль, лише коли користувач натискає "Показати" (і проходить повторну автентифікацію, якщо потрібно). Нижче наведено початковий опис правила.
 
@@ -4363,6 +4379,7 @@
        Дійсні значення: • 0 = вимкнено • 1 = увімкнено • 2 = закріплено лупу ввімкнено
 
           Примітка: якщо вказано правило <ph name="DEVICE_LOGIN_SCREEN_SCREEN_MAGNIFIER_TYPE_POLICY_NAME" />, воно замінює це правило.</translation>
+<translation id="6011193465932186973">Відбиток пальця</translation>
 <translation id="6011969832398368671">Дозволити сайтам запитувати в користувача дозвіл на редагування файлів і каталогів</translation>
 <translation id="6012952794649558174">Використовувати поведінку веб-переглядача за умовчанням.</translation>
 <translation id="6015281292796053435">Це правило визначає, чи повідомляти дані Безпечного перегляду, зокрема кількість попереджень і кількість кліків по них.
@@ -5754,6 +5771,7 @@
       Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> і <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> дають змогу налаштувати повідомлення для користувача про незадовільний результат перевірки. Поле message – це текст, який бачитиме користувач (довжиною не більше ніж 200 символів). Поле learn_more_url містить указану адміністратором URL-адресу, за якою користувач зможе перейти й дізнатися докладніше, чому дію заблоковано. Поле language – необов’язкове, у ньому вказано мову повідомлення. Порожнє поле language або значення за умовчанням указують, яке повідомлення буде відображатися, коли немає повідомлення мовою користувача. Поле tag визначає, для яких типів перевірки показується повідомлення. Список custom_messages може мати нуль або більше записів, і для кожного з них потрібно налаштувати поля message і tag.
 
       Щоб це правило почало діяти, його потрібно додатково налаштувати. Докладніше читайте на сторінці https://support.google.com/chrome/a?p=chrome_enterprise_connector_policies_setting.</translation>
+<translation id="7482768039644066614">Увімкнути отримання метаданих про завантаження сторінки та моделі машинного навчання, що покращують веб-перегляд</translation>
 <translation id="7485481791539008776">Правила вибору принтера за умовчанням</translation>
 <translation id="7486205887492534734">Запитувати на екрані входу, коли є кілька відповідних сертифікатів</translation>
 <translation id="7491720878670299691">Швидкість надсилання запиту даних мережі та перевірки їх на наявність подій. Мінімальне значення – 1 хвилина.
@@ -6273,10 +6291,6 @@
 <translation id="8101381354936029836">Елементарна група правила:</translation>
 <translation id="8102913158860568230">Налаштування потоку медіаданих за умовчанням</translation>
 <translation id="8104962233214241919">Автоматичний вибір сертифікатів клієнтів для цих сайтів</translation>
-<translation id="8111502498815410897">За допомогою цього правила можна примусово ввімкнути або вимкнути функцію "Швидка пара".
-      "Швидка пара" – це новий спосіб підключення через Bluetooth, який зв’язує підключені периферійні пристрої з обліковим записом GAIA.
-      Таким чином інші пристрої з ОС Chrome (і Android), де виконано вхід у той самий обліковий запис GAIA, можуть підключатись автоматично.
-      Якщо не налаштувати це правило, для функції "Швидка пара" застосовуватимуться параметри ОС Chrome за умовчанням (тобто її буде ввімкнено).</translation>
 <translation id="8114382167597081590">Не застосовувати безпечний режим на YouTube</translation>
 <translation id="8117921351531866504">Дозволяє вказати, чи можуть веб-сайти перевіряти, чи користувач має збережені способи оплати.
 
@@ -6785,6 +6799,7 @@
       Якщо це правило деактивовано, NTLMv2 буде вимкнено.
 
       Усі нещодавні сервери Samba та <ph name="MS_WIN_NAME" /> підтримують NTLMv2. Це правило потрібно вимикати лише для того, щоб забезпечити зворотну сумісність, оскільки в такому випадку послаблюється безпека автентифікації.</translation>
+<translation id="8605627672203601098">Налаштувати дозволені фактори WebAuthn</translation>
 <translation id="8606263947930257189">Указує, чи можуть вкладки в <ph name="PRODUCT_NAME" /> зависати, якщо вони були у фоновому режимі принаймні 5 хвилин.
 
       Якщо для цього правила вибрано значення true, вкладки, які були у фоновому режимі принаймні 5 хвилин, можуть зависати. Таким чином ЦП, акумулятор і пам'ять використовуються менше. За допомогою евристичних методів <ph name="PRODUCT_NAME" /> визначає вкладки, які виконують корисні завдання у фоновому режимі (як-от показують сповіщення, відтворюють звук, транслюють відео). Веб-розробники можуть вимкнути зависання для свого сайту (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index e79884f..c700c04 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -6280,10 +6280,6 @@
 <translation id="8101381354936029836">Nhóm chính sách không thể phân chia:</translation>
 <translation id="8102913158860568230">Cài đặt luồng truyền thông mặc định</translation>
 <translation id="8104962233214241919">Tự động chọn chứng chỉ ứng dụng khách cho các trang web này</translation>
-<translation id="8111502498815410897">Nếu bạn đặt chính sách này thì hệ thống sẽ buộc bật hoặc tắt tính năng Ghép nối nhanh.
-      Tính năng Ghép nối nhanh là một luồng ghép nối Bluetooth mới liên kết các thiết bị ngoại vi đã ghép nối với tài khoản GAIA.
-      Điều này cho phép các thiết bị Chrome OS (và Android) khác đã đăng nhập bằng cùng một tài khoản GAIA tự động ghép nối.
-      Nếu bạn không đặt chính sách này, thì tính năng Ghép nối nhanh sẽ tuân theo chế độ cài đặt được bật theo mặc định của Chrome OS.</translation>
 <translation id="8114382167597081590">Không buộc sử dụng Chế độ hạn chế trên YouTube</translation>
 <translation id="8117921351531866504">Giúp bạn thiết lập để cho phép hoặc không cho phép các trang web kiểm tra xem người dùng đã lưu phương thức thanh toán hay chưa.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 7fe3c0f6..ce7ac62 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -6199,10 +6199,6 @@
 <translation id="8101381354936029836">政策原子组:</translation>
 <translation id="8102913158860568230">默认 mediastream 设置</translation>
 <translation id="8104962233214241919">自动选择这些网站的客户端证书</translation>
-<translation id="8111502498815410897">设置此政策会强制启用或停用快速配对功能。
-      快速配对是一种新的蓝牙配对流程,用于将已配对的外围设备与 GAIA 帐号关联起来。
-      这样便能让使用同一 GAIA 帐号登录的其他 Chrome 操作系统(和 Android)设备自动配对。
-      如果此政策未设置,快速配对功能将遵循 Chrome 操作系统的默认设置(处于启用状态)。</translation>
 <translation id="8114382167597081590">不强制启用 YouTube 受限模式</translation>
 <translation id="8117921351531866504">该政策让您能够设置是否允许网站检查用户有无已保存的付款方式。
 
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index f318efdc..f11fe93 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -6172,10 +6172,6 @@
 <translation id="8101381354936029836">政策不可部分完成的群組:</translation>
 <translation id="8102913158860568230">預設媒體串流設定</translation>
 <translation id="8104962233214241919">自動為這些網站選取用戶端憑證</translation>
-<translation id="8111502498815410897">設定這項政策會導致系統強制啟用/停用快速配對功能。
-      快速配對是全新的藍牙配對流程,可連結配對的周邊裝置和 GAIA 帳戶。
-      這能讓其他以同一個 GAIA 帳戶登入的 Chrome OS (和 Android) 裝置自動進行配對。
-      如果不設定,快速配對功能會採用 Chrome OS 的預設設定 (啟用)。</translation>
 <translation id="8114382167597081590">不強制執行 YouTube 嚴格篩選模式</translation>
 <translation id="8117921351531866504">你可以設定網站是否能檢查使用者有沒有已儲存的付款方式。
 
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index f2124243..2631810d 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -1020,7 +1020,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Página 1}other{Página {COUNT}}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
 <translation id="4159784952369912983">Morado</translation>
-<translation id="4165986682804962316">Configuración de sitios</translation>
+<translation id="4165986682804962316">Configuración del sitio</translation>
 <translation id="4171400957073367226">La firma de verificación no es válida</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
 <translation id="4172051516777682613">Mostrar siempre</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 78aed75..c565370 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -1268,6 +1268,7 @@
 <translation id="4895877746940133817"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" /></translation>
 <translation id="4900217275619098670">ロール 9</translation>
 <translation id="4901778704868714008">保存...</translation>
+<translation id="4905659621780993806">デバイスは <ph name="DATE" /> <ph name="TIME" /> に管理者によって自動的に再起動されます。デバイスが再起動される前に、開いているすべてのアイテムを保存してください。</translation>
 <translation id="4913987521957242411">パンチ(左上)</translation>
 <translation id="4918221908152712722"><ph name="APP_NAME" /> をインストール(ダウンロードは不要です)</translation>
 <translation id="4923459931733593730">お支払い</translation>
@@ -1682,6 +1683,7 @@
 <translation id="6290238015253830360">おすすめの記事がここに表示されます</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
+<translation id="6300452962057769623">{0,plural, =0{デバイスは今すぐ再起動されます}=1{デバイスは 1 秒後に再起動されます}other{デバイスは # 秒後に再起動されます}}</translation>
 <translation id="6302269476990306341">Chrome の Google アシスタントを停止しています</translation>
 <translation id="6305205051461490394"><ph name="URL" /> にアクセスできません。</translation>
 <translation id="6312113039770857350">ウェブページへのアクセス不可</translation>
@@ -2006,6 +2008,7 @@
 <translation id="7378627244592794276">いいえ</translation>
 <translation id="7378810950367401542">/</translation>
 <translation id="7386364858855961704">対象外です</translation>
+<translation id="7388594495505979117">{0,plural, =1{デバイスは 1 分後に再起動されます}other{デバイスは # 分後に再起動されます}}</translation>
 <translation id="7390545607259442187">カードの確認</translation>
 <translation id="7392089738299859607">住所を更新</translation>
 <translation id="7399802613464275309">安全確認</translation>
@@ -2363,6 +2366,7 @@
 <translation id="8507227106804027148">コマンドライン</translation>
 <translation id="8508648098325802031">検索アイコン</translation>
 <translation id="8511402995811232419">Cookie を管理する</translation>
+<translation id="8519753333133776369">管理者が許可した HID デバイス</translation>
 <translation id="8522552481199248698">Chrome には Google アカウントの保護とパスワードの変更をサポートする機能があります。</translation>
 <translation id="8530813470445476232">Chrome の設定で閲覧履歴、Cookie、キャッシュなどを消去する</translation>
 <translation id="8533619373899488139">&lt;strong&gt;chrome://policy&lt;/strong&gt; で、ブロックされた URL のリストとシステム管理者が設定した他のポリシーを確認できます。</translation>
diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/components/subresource_filter/core/common/indexed_ruleset.cc
index 1d7dd12..34a4672 100644
--- a/components/subresource_filter/core/common/indexed_ruleset.cc
+++ b/components/subresource_filter/core/common/indexed_ruleset.cc
@@ -54,12 +54,12 @@
 
 // RulesetIndexer --------------------------------------------------------------
 
-const int RulesetIndexer::kIndexedFormatVersion = 34;
+const int RulesetIndexer::kIndexedFormatVersion = 35;
 
 // This static assert is meant to catch cases where
 // url_pattern_index::kUrlPatternIndexFormatVersion is incremented without
 // updating RulesetIndexer::kIndexedFormatVersion.
-static_assert(url_pattern_index::kUrlPatternIndexFormatVersion == 13,
+static_assert(url_pattern_index::kUrlPatternIndexFormatVersion == 14,
               "kUrlPatternIndexFormatVersion has changed, make sure you've "
               "also updated RulesetIndexer::kIndexedFormatVersion above.");
 
diff --git a/components/sync/base/unique_position_unittest.cc b/components/sync/base/unique_position_unittest.cc
index 8cecc77..a4675446 100644
--- a/components/sync/base/unique_position_unittest.cc
+++ b/components/sync/base/unique_position_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/hash/sha1.h"
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
+#include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "components/sync/protocol/unique_position.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -600,10 +601,10 @@
     original_ordering[i] = int64_ordering[i] = position_ordering[i] = i;
   }
 
-  std::sort(int64_ordering.begin(), int64_ordering.end(),
-            IndexedLessThan<int64_t>(kTestValues));
-  std::sort(position_ordering.begin(), position_ordering.end(),
-            IndexedLessThan<UniquePosition, PositionLessThan>(positions));
+  base::ranges::sort(int64_ordering, IndexedLessThan<int64_t>(kTestValues));
+  base::ranges::sort(
+      position_ordering,
+      IndexedLessThan<UniquePosition, PositionLessThan>(positions));
   EXPECT_NE(original_ordering, int64_ordering);
   EXPECT_EQ(int64_ordering, position_ordering);
 }
diff --git a/components/sync/model/client_tag_based_model_type_processor.cc b/components/sync/model/client_tag_based_model_type_processor.cc
index b3bb0d37..a88650b 100644
--- a/components/sync/model/client_tag_based_model_type_processor.cc
+++ b/components/sync/model/client_tag_based_model_type_processor.cc
@@ -896,10 +896,7 @@
                   << " for " << ModelTypeToDebugString(type_);
     }
 #endif  // DCHECK_IS_ON()
-    ProcessorEntity* entity = entity_tracker_->AddRemote(
-        storage_key, update.entity, update.response_version);
-    // TODO(crbug.com/1296159): Remove once create flow is refactored.
-    entity->RecordAcceptedRemoteUpdate(update);
+    ProcessorEntity* entity = entity_tracker_->AddRemote(storage_key, update);
     entity_data.push_back(
         EntityChange::CreateAdd(storage_key, std::move(update.entity)));
     if (!storage_key.empty())
diff --git a/components/sync/model/client_tag_based_remote_update_handler.cc b/components/sync/model/client_tag_based_remote_update_handler.cc
index 94082824..4784a2a 100644
--- a/components/sync/model/client_tag_based_remote_update_handler.cc
+++ b/components/sync/model/client_tag_based_remote_update_handler.cc
@@ -161,9 +161,7 @@
   if (entity == nullptr) {
     // Remote creation.
     DCHECK(!data.is_deleted());
-    entity = CreateEntity(data, update.response_version);
-    // TODO(crbug.com/1296159): Remove this call once create flow is updated.
-    entity->RecordAcceptedRemoteUpdate(update);
+    entity = CreateEntity(update);
     entity_changes->push_back(EntityChange::CreateAdd(
         entity->storage_key(), std::move(update.entity)));
   } else if (entity->IsUnsynced()) {
@@ -277,19 +275,19 @@
 }
 
 ProcessorEntity* ClientTagBasedRemoteUpdateHandler::CreateEntity(
-    const EntityData& data,
-    int64_t server_version) {
-  DCHECK(!data.client_tag_hash.value().empty());
+    const UpdateResponseData& update) {
+  DCHECK(!update.entity.client_tag_hash.value().empty());
   if (bridge_->SupportsGetClientTag()) {
-    DCHECK_EQ(data.client_tag_hash,
-              ClientTagHash::FromUnhashed(type_, bridge_->GetClientTag(data)));
+    DCHECK_EQ(update.entity.client_tag_hash,
+              ClientTagHash::FromUnhashed(
+                  type_, bridge_->GetClientTag(update.entity)));
   }
   std::string storage_key;
   if (bridge_->SupportsGetStorageKey()) {
-    storage_key = bridge_->GetStorageKey(data);
+    storage_key = bridge_->GetStorageKey(update.entity);
     DCHECK(!storage_key.empty());
   }
-  return entity_tracker_->AddRemote(storage_key, data, server_version);
+  return entity_tracker_->AddRemote(storage_key, update);
 }
 
 }  // namespace syncer
diff --git a/components/sync/model/client_tag_based_remote_update_handler.h b/components/sync/model/client_tag_based_remote_update_handler.h
index d2f641c8..3469a18 100644
--- a/components/sync/model/client_tag_based_remote_update_handler.h
+++ b/components/sync/model/client_tag_based_remote_update_handler.h
@@ -66,9 +66,9 @@
   ProcessorEntity* GetEntityForTagHash(const ClientTagHash& tag_hash);
 
   // Creates an entity in the entity tracker for |storage_key| queried from the
-  // bridge for the given |data|. Provided |storage_key| (if any, i.e. if
+  // bridge for the given |update|. Provided |storage_key| (if any, i.e. if
   // non-empty) must not exist in the entity tracker.
-  ProcessorEntity* CreateEntity(const EntityData& data, int64_t server_version);
+  ProcessorEntity* CreateEntity(const UpdateResponseData& update);
 
   // The model type this object syncs.
   const ModelType type_;
diff --git a/components/sync/model/processor_entity_tracker.cc b/components/sync/model/processor_entity_tracker.cc
index f894673..ae76d41 100644
--- a/components/sync/model/processor_entity_tracker.cc
+++ b/components/sync/model/processor_entity_tracker.cc
@@ -79,16 +79,19 @@
 
 ProcessorEntity* ProcessorEntityTracker::AddRemote(
     const std::string& storage_key,
-    const EntityData& data,
-    int64_t server_version) {
+    const UpdateResponseData& update_data) {
+  const EntityData& data = update_data.entity;
   DCHECK(!data.client_tag_hash.value().empty());
   DCHECK(!GetEntityForTagHash(data.client_tag_hash));
   DCHECK(!data.is_deleted());
   DCHECK(storage_key_to_tag_hash_.find(storage_key) ==
          storage_key_to_tag_hash_.end());
-  DCHECK(server_version != kUncommittedVersion);
+  DCHECK(update_data.response_version != kUncommittedVersion);
 
-  return AddInternal(storage_key, data, server_version);
+  ProcessorEntity* entity =
+      AddInternal(storage_key, data, update_data.response_version);
+  entity->RecordAcceptedRemoteUpdate(update_data);
+  return entity;
 }
 
 void ProcessorEntityTracker::RemoveEntityForClientTagHash(
diff --git a/components/sync/model/processor_entity_tracker.h b/components/sync/model/processor_entity_tracker.h
index db36417..1bb2eea3 100644
--- a/components/sync/model/processor_entity_tracker.h
+++ b/components/sync/model/processor_entity_tracker.h
@@ -57,8 +57,7 @@
   // Starts tracking new remotely-created entity (must not be deleted outside
   // current object).
   ProcessorEntity* AddRemote(const std::string& storage_key,
-                             const EntityData& data,
-                             int64_t server_version);
+                             const UpdateResponseData& update_data);
 
   // Removes item from |entities_| and |storage_key_to_tag_hash|. If entity does
   // not exist, does nothing.
diff --git a/components/sync/model/processor_entity_tracker_unittest.cc b/components/sync/model/processor_entity_tracker_unittest.cc
index f06b6d3e..b8fa8f4 100644
--- a/components/sync/model/processor_entity_tracker_unittest.cc
+++ b/components/sync/model/processor_entity_tracker_unittest.cc
@@ -65,6 +65,17 @@
   return entity_data;
 }
 
+UpdateResponseData GenerateUpdate(const std::string& storage_key,
+                                  const ClientTagHash& client_tag_hash,
+                                  int64_t response_version) {
+  auto entity = absl::make_unique<EntityData>(
+      GenerateEntityData(storage_key, client_tag_hash));
+  UpdateResponseData update;
+  update.entity = std::move(*entity);
+  update.response_version = response_version;
+  return update;
+}
+
 class ProcessorEntityTrackerTest : public ::testing::Test {
  public:
   ProcessorEntityTrackerTest()
@@ -150,27 +161,29 @@
 }
 
 TEST_F(ProcessorEntityTrackerTest, ShouldAddNewRemoteEntity) {
-  EntityData entity_data = GenerateEntityData(kStorageKey1, kClientTagHash1);
+  UpdateResponseData update =
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion);
   const ProcessorEntity* entity =
-      entity_tracker_.AddRemote(kStorageKey1, entity_data, kServerVersion);
+      entity_tracker_.AddRemote(kStorageKey1, update);
   ASSERT_THAT(entity, NotNull());
 
   EXPECT_EQ(1u, entity_tracker_.size());
   EXPECT_EQ(1u, entity_tracker_.CountNonTombstoneEntries());
   EXPECT_EQ(entity,
-            entity_tracker_.GetEntityForTagHash(entity_data.client_tag_hash));
+            entity_tracker_.GetEntityForTagHash(update.entity.client_tag_hash));
   EXPECT_EQ(entity, entity_tracker_.GetEntityForStorageKey(kStorageKey1));
   EXPECT_FALSE(entity_tracker_.HasLocalChanges());
   EXPECT_EQ(kStorageKey1, entity->storage_key());
   EXPECT_EQ(entity->metadata().client_tag_hash(),
-            entity_data.client_tag_hash.value());
+            update.entity.client_tag_hash.value());
   EXPECT_FALSE(entity->metadata().is_deleted());
 }
 
 TEST_F(ProcessorEntityTrackerTest, ShouldAddEntityWithoutStorageKey) {
-  EntityData entity_data = GenerateEntityData(kStorageKey1, kClientTagHash1);
+  UpdateResponseData update =
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion);
   const ProcessorEntity* entity =
-      entity_tracker_.AddRemote(kEmptyStorageKey, entity_data, kServerVersion);
+      entity_tracker_.AddRemote(kEmptyStorageKey, update);
   ASSERT_THAT(entity, NotNull());
 
   // The entity should be available by the client tag hash only.
@@ -184,7 +197,7 @@
   EXPECT_EQ(1u, entity_tracker_.size());
   EXPECT_EQ(1u, entity_tracker_.CountNonTombstoneEntries());
   EXPECT_EQ(entity->metadata().client_tag_hash(),
-            entity_data.client_tag_hash.value());
+            update.entity.client_tag_hash.value());
   EXPECT_FALSE(entity->metadata().is_deleted());
 
   // Check that tracker is waiting for the storage key to be populated.
@@ -200,8 +213,8 @@
 
 TEST_F(ProcessorEntityTrackerTest, ShouldClearStorageKeyForTombstone) {
   ProcessorEntity* entity = entity_tracker_.AddRemote(
-      kStorageKey1, GenerateEntityData(kStorageKey1, kClientTagHash1),
-      kServerVersion);
+      kStorageKey1,
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion));
   ASSERT_EQ(entity, entity_tracker_.GetEntityForStorageKey(kStorageKey1));
   ASSERT_EQ(kStorageKey1, entity->storage_key());
 
@@ -219,8 +232,8 @@
 
 TEST_F(ProcessorEntityTrackerTest, ShouldOverrideTombstone) {
   ProcessorEntity* entity = entity_tracker_.AddRemote(
-      kStorageKey1, GenerateEntityData(kStorageKey1, kClientTagHash1),
-      kServerVersion);
+      kStorageKey1,
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion));
   ASSERT_THAT(entity, NotNull());
   ASSERT_EQ(entity, entity_tracker_.GetEntityForStorageKey(kStorageKey1));
   ASSERT_EQ(kStorageKey1, entity->storage_key());
@@ -241,8 +254,8 @@
 
 TEST_F(ProcessorEntityTrackerTest, ShouldRemoveEntityForStorageKey) {
   const ProcessorEntity* entity = entity_tracker_.AddRemote(
-      kStorageKey1, GenerateEntityData(kStorageKey1, kClientTagHash1),
-      kServerVersion);
+      kStorageKey1,
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion));
   ASSERT_THAT(entity, NotNull());
   ASSERT_EQ(1u, entity_tracker_.size());
 
@@ -252,14 +265,14 @@
 
 TEST_F(ProcessorEntityTrackerTest, ShouldRemoveEntityForClientTagHash) {
   const ProcessorEntity* entity = entity_tracker_.AddRemote(
-      kStorageKey1, GenerateEntityData(kStorageKey1, kClientTagHash1),
-      kServerVersion);
+      kStorageKey1,
+      GenerateUpdate(kStorageKey1, kClientTagHash1, kServerVersion));
   ASSERT_THAT(entity, NotNull());
   ASSERT_EQ(entity, entity_tracker_.GetEntityForTagHash(kClientTagHash1));
 
   const ProcessorEntity* entity_no_key = entity_tracker_.AddRemote(
-      kEmptyStorageKey, GenerateEntityData(kStorageKey2, kClientTagHash2),
-      kServerVersion);
+      kEmptyStorageKey,
+      GenerateUpdate(kStorageKey2, kClientTagHash2, kServerVersion));
   ASSERT_THAT(entity_no_key, NotNull());
   ASSERT_EQ(entity_no_key,
             entity_tracker_.GetEntityForTagHash(kClientTagHash2));
diff --git a/components/sync/model/string_ordinal_unittest.cc b/components/sync/model/string_ordinal_unittest.cc
index c8ab190..b1099cb 100644
--- a/components/sync/model/string_ordinal_unittest.cc
+++ b/components/sync/model/string_ordinal_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/rand_util.h"
+#include "base/ranges/algorithm.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace syncer {
@@ -262,7 +263,7 @@
 
   std::vector<StringOrdinal> ordinals = sorted_ordinals;
   base::RandomShuffle(ordinals.begin(), ordinals.end());
-  std::sort(ordinals.begin(), ordinals.end(), StringOrdinal::LessThanFn());
+  base::ranges::sort(ordinals, StringOrdinal::LessThanFn());
   EXPECT_TRUE(std::equal(ordinals.begin(), ordinals.end(),
                          sorted_ordinals.begin(), StringOrdinal::EqualsFn()));
 }
diff --git a/components/sync_bookmarks/bookmark_model_merger.cc b/components/sync_bookmarks/bookmark_model_merger.cc
index 8622c1d..ad86f18 100644
--- a/components/sync_bookmarks/bookmark_model_merger.cc
+++ b/components/sync_bookmarks/bookmark_model_merger.cc
@@ -12,6 +12,7 @@
 #include "base/guid.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/trace_event/trace_event.h"
@@ -521,8 +522,7 @@
   }
 
   // Sort the children according to their unique position.
-  std::sort(node.children_.begin(), node.children_.end(),
-            UniquePositionLessThan);
+  base::ranges::sort(node.children_, UniquePositionLessThan);
 
   return node;
 }
diff --git a/components/sync_sessions/open_tabs_ui_delegate_impl.cc b/components/sync_sessions/open_tabs_ui_delegate_impl.cc
index ada40be6..415b2f8f 100644
--- a/components/sync_sessions/open_tabs_ui_delegate_impl.cc
+++ b/components/sync_sessions/open_tabs_ui_delegate_impl.cc
@@ -4,30 +4,13 @@
 
 #include "components/sync_sessions/open_tabs_ui_delegate_impl.h"
 
-#include <algorithm>
 #include <memory>
 
+#include "base/ranges/algorithm.h"
 #include "components/sync_sessions/sync_sessions_client.h"
 #include "components/sync_sessions/synced_session_tracker.h"
 
 namespace sync_sessions {
-namespace {
-
-// Comparator function for use with std::sort that will sort tabs by
-// descending timestamp (i.e., most recent first).
-bool TabsRecencyComparator(const sessions::SessionTab* t1,
-                           const sessions::SessionTab* t2) {
-  return t1->timestamp > t2->timestamp;
-}
-
-// Comparator function for use with std::sort that will sort sessions by
-// descending modified_time (i.e., most recent first).
-bool SessionsRecencyComparator(const SyncedSession* s1,
-                               const SyncedSession* s2) {
-  return s1->modified_time > s2->modified_time;
-}
-
-}  // namespace
 
 OpenTabsUIDelegateImpl::OpenTabsUIDelegateImpl(
     const SyncSessionsClient* sessions_client,
@@ -43,7 +26,9 @@
     std::vector<const SyncedSession*>* sessions) {
   *sessions = session_tracker_->LookupAllForeignSessions(
       SyncedSessionTracker::PRESENTABLE);
-  std::sort(sessions->begin(), sessions->end(), SessionsRecencyComparator);
+  base::ranges::sort(
+      *sessions, std::greater(),
+      [](const SyncedSession* session) { return session->modified_time; });
   return !sessions->empty();
 }
 
@@ -81,7 +66,9 @@
       tabs->push_back(tab.get());
     }
   }
-  std::stable_sort(tabs->begin(), tabs->end(), TabsRecencyComparator);
+  base::ranges::stable_sort(
+      *tabs, std::greater(),
+      [](const sessions::SessionTab* tab) { return tab->timestamp; });
   return true;
 }
 
diff --git a/components/url_pattern_index/flat/url_pattern_index.fbs b/components/url_pattern_index/flat/url_pattern_index.fbs
index 132683b..b5d76c0d 100644
--- a/components/url_pattern_index/flat/url_pattern_index.fbs
+++ b/components/url_pattern_index/flat/url_pattern_index.fbs
@@ -104,13 +104,15 @@
   anchor_left : AnchorType = NONE;
   anchor_right : AnchorType = NONE;
 
-  // The list of initiator domains to be included/excluded from the filter's
-  // affected set. Each should either be null or have at least a single
+  // The list of initiator and request domains to be included/excluded from the
+  // filter's affected set. Each should either be null or have at least a single
   // element. The domains should be in lower-case and kept sorted as defined by
   // url_pattern_index::CompareDomains. The entries must consist of only ascii
   // characters. Use punycode encoding for internationalized domains.
   initiator_domains_included : [string];
   initiator_domains_excluded : [string];
+  request_domains_included : [string];
+  request_domains_excluded : [string];
 
   // A URL pattern in the format defined by |url_pattern_type|.  This should
   // only consist of ascii characters, since it's matched against a url where
diff --git a/components/url_pattern_index/proto/rules.proto b/components/url_pattern_index/proto/rules.proto
index 279e9b7d..638ae45d 100644
--- a/components/url_pattern_index/proto/rules.proto
+++ b/components/url_pattern_index/proto/rules.proto
@@ -143,7 +143,8 @@
   // The rule applies only to subresources of documents loaded from included
   // domains (or subdomains thereof). If the list is empty, the rule is applied
   // on documents from all domains.
-  // If |domains| is empty or has exceptions only, the rule is called generic.
+  // If `initiator_domains` is empty or only contains exceptions, the rule is
+  // called generic.
   // Otherwise is it called domain specific, i.e. applies to a limited number of
   // domains.
   repeated DomainListItem initiator_domains = 5;
@@ -167,6 +168,11 @@
 
   // The URL pattern of the format prescribed by |url_pattern_type|.
   optional string url_pattern = 10;
+
+  // The rule applies only for requests to the included domains (or subdomains
+  // thereof). If the list is empty, the rule applies to requests to all
+  // domains.
+  repeated DomainListItem request_domains = 11;
 }
 
 // Element hiding rule based on a CSS selector. Corresponds to RULE_TYPE_CSS.
diff --git a/components/url_pattern_index/url_pattern.cc b/components/url_pattern_index/url_pattern.cc
index cc639bf..f20a42e 100644
--- a/components/url_pattern_index/url_pattern.cc
+++ b/components/url_pattern_index/url_pattern.cc
@@ -311,6 +311,12 @@
   return *lower_case_spec_cached_;
 }
 
+base::StringPiece UrlPattern::UrlInfo::GetStringHost() const {
+  if (host().len <= 0)
+    return base::StringPiece();
+  return base::StringPiece(&spec_[host().begin], host().len);
+}
+
 UrlPattern::UrlInfo::~UrlInfo() = default;
 
 UrlPattern::UrlPattern() = default;
diff --git a/components/url_pattern_index/url_pattern.h b/components/url_pattern_index/url_pattern.h
index 72984cf..06649ee 100644
--- a/components/url_pattern_index/url_pattern.h
+++ b/components/url_pattern_index/url_pattern.h
@@ -43,6 +43,7 @@
     base::StringPiece spec() const { return spec_; }
     base::StringPiece GetLowerCaseSpec() const;
     url::Component host() const { return host_; }
+    base::StringPiece GetStringHost() const;
 
    private:
     // The url spec.
diff --git a/components/url_pattern_index/url_pattern_index.cc b/components/url_pattern_index/url_pattern_index.cc
index 5dea5f49..8911cd6 100644
--- a/components/url_pattern_index/url_pattern_index.cc
+++ b/components/url_pattern_index/url_pattern_index.cc
@@ -25,6 +25,7 @@
 #include "url/gurl.h"
 #include "url/origin.h"
 #include "url/url_constants.h"
+#include "url/url_util.h"
 
 namespace url_pattern_index {
 
@@ -148,36 +149,21 @@
 
     FlatDomainsOffset initiator_domains_included_offset;
     FlatDomainsOffset initiator_domains_excluded_offset;
-    if (rule_.initiator_domains_size()) {
-      std::vector<FlatStringOffset> initiator_domains_included;
-      std::vector<FlatStringOffset> initiator_domains_excluded;
-      // Reserve only for `initiator_domains_included` because it is expected to
-      // be the one used more frequently.
-      initiator_domains_included.reserve(rule_.initiator_domains_size());
+    FlatDomainsOffset request_domains_included_offset;
+    FlatDomainsOffset request_domains_excluded_offset;
 
-      for (const auto& domain_list_item : rule_.initiator_domains()) {
-        const std::string& domain = domain_list_item.domain();
+    if (!PopulateIncludedAndExcludedDomains(
+            rule_.initiator_domains_size(), rule_.initiator_domains(), builder,
+            domain_map, &initiator_domains_included_offset,
+            &initiator_domains_excluded_offset)) {
+      return UrlRuleOffset();
+    }
 
-        // Non-ascii characters in domains are unsupported.
-        if (!base::IsStringASCII(domain))
-          return UrlRuleOffset();
-
-        // Note: This is not always correct. Chrome's URL parser uses upper-case
-        // for percent encoded hosts. E.g. https://,.com is encoded as
-        // https://%2C.com.
-        auto offset = builder->CreateSharedString(
-            HasNoUpperAscii(domain) ? domain : base::ToLowerASCII(domain));
-
-        if (domain_list_item.exclude())
-          initiator_domains_excluded.push_back(offset);
-        else
-          initiator_domains_included.push_back(offset);
-      }
-      // The domains are stored in sorted order to support fast matching.
-      initiator_domains_included_offset = SerializeDomainList(
-          std::move(initiator_domains_included), builder, domain_map);
-      initiator_domains_excluded_offset = SerializeDomainList(
-          std::move(initiator_domains_excluded), builder, domain_map);
+    if (!PopulateIncludedAndExcludedDomains(
+            rule_.request_domains_size(), rule_.request_domains(), builder,
+            domain_map, &request_domains_included_offset,
+            &request_domains_excluded_offset)) {
+      return UrlRuleOffset();
     }
 
     // Non-ascii characters in patterns are unsupported.
@@ -192,6 +178,7 @@
         *builder, options_, element_types_, flat::RequestMethod_ANY,
         activation_types_, url_pattern_type_, anchor_left_, anchor_right_,
         initiator_domains_included_offset, initiator_domains_excluded_offset,
+        request_domains_included_offset, request_domains_excluded_offset,
         url_pattern_offset);
   }
 
@@ -222,6 +209,51 @@
     return it->second;
   }
 
+  // Returns true on success, false on an invalid domain entry.
+  bool PopulateIncludedAndExcludedDomains(
+      int domains_size,
+      google::protobuf::RepeatedPtrField<
+          ::url_pattern_index::proto::DomainListItem> domain_list_items,
+      flatbuffers::FlatBufferBuilder* builder,
+      FlatDomainMap* domain_map,
+      FlatDomainsOffset* domains_included_offset,
+      FlatDomainsOffset* domains_excluded_offset) const {
+    if (domains_size == 0)
+      return true;
+
+    std::vector<FlatStringOffset> domains_included;
+    std::vector<FlatStringOffset> domains_excluded;
+    // Reserve only for `domains_included` because it is expected to
+    // be the one used more frequently.
+    domains_included.reserve(domains_size);
+
+    for (const auto& domain_list_item : domain_list_items) {
+      const std::string& domain = domain_list_item.domain();
+
+      // Non-ascii characters in domains are unsupported.
+      if (!base::IsStringASCII(domain))
+        return false;
+
+      // Note: This is not always correct. Chrome's URL parser uses upper-case
+      // for percent encoded hosts. E.g. https://,.com is encoded as
+      // https://%2C.com.
+      auto offset = builder->CreateSharedString(
+          HasNoUpperAscii(domain) ? domain : base::ToLowerASCII(domain));
+
+      if (domain_list_item.exclude())
+        domains_excluded.push_back(offset);
+      else
+        domains_included.push_back(offset);
+    }
+    // The domains are stored in sorted order to support fast matching.
+    *domains_included_offset =
+        SerializeDomainList(std::move(domains_included), builder, domain_map);
+    *domains_excluded_offset =
+        SerializeDomainList(std::move(domains_excluded), builder, domain_map);
+
+    return true;
+  }
+
   static bool ConvertAnchorType(proto::AnchorType anchor_type,
                                 flat::AnchorType* result) {
     switch (anchor_type) {
@@ -432,6 +464,14 @@
     for (auto* domain : *rule->initiator_domains_excluded())
       DCHECK(base::IsStringASCII(ToStringPiece(domain)));
   }
+  if (rule->request_domains_included()) {
+    for (auto* domain : *rule->request_domains_included())
+      DCHECK(base::IsStringASCII(ToStringPiece(domain)));
+  }
+  if (rule->request_domains_excluded()) {
+    for (auto* domain : *rule->request_domains_excluded())
+      DCHECK(base::IsStringASCII(ToStringPiece(domain)));
+  }
 
   // Case-insensitive patterns should be lower-cased.
   if (rule->options() & flat::OptionFlag_IS_CASE_INSENSITIVE)
@@ -523,39 +563,38 @@
 using FlatNGramIndex =
     flatbuffers::Vector<flatbuffers::Offset<flat::NGramToRules>>;
 
-// Returns the size of the longest (sub-)domain of |origin| matching one of the
-// |domains| in the list.
+// Returns the size of the longest (sub-)domain of `host` matching one of the
+// `domains` in the list.
 //
-// The |domains| should be sorted in descending order of their length, and
+// The `domains` should be sorted in descending order of their length, and
 // ascending alphabetical order within the groups of same-length domains.
-size_t GetLongestMatchingSubdomain(const url::Origin& origin,
+size_t GetLongestMatchingSubdomain(base::StringPiece host,
                                    const FlatDomains& domains) {
+  if (host.empty())
+    return 0;
+
   // If the |domains| list is short, then the simple strategy is usually faster.
   if (domains.size() <= 5) {
     for (auto* domain : domains) {
       const base::StringPiece domain_piece = ToStringPiece(domain);
-      if (origin.DomainIs(domain_piece))
+      if (url::DomainIs(host, domain_piece))
         return domain_piece.size();
     }
     return 0;
   }
-  // Otherwise look for each subdomain of the |origin| using binary search.
 
-  DCHECK(!origin.opaque());
-  base::StringPiece canonicalized_host(origin.host());
-  if (canonicalized_host.empty())
-    return 0;
+  // Otherwise look for each subdomain of the `host` using binary search.
 
   // If the host name ends with a dot, then ignore it.
-  if (canonicalized_host.back() == '.')
-    canonicalized_host.remove_suffix(1);
+  if (host.back() == '.')
+    host.remove_suffix(1);
 
   // The |left| bound of the search is shared between iterations, because
   // subdomains are considered in decreasing order of their lengths, therefore
   // each consecutive lower_bound will be at least as far as the previous.
   flatbuffers::uoffset_t left = 0;
   for (size_t position = 0;; ++position) {
-    const base::StringPiece subdomain = canonicalized_host.substr(position);
+    const base::StringPiece subdomain = host.substr(position);
 
     flatbuffers::uoffset_t right = domains.size();
     while (left + 1 < right) {
@@ -571,7 +610,7 @@
     if (ToStringPiece(domains[left]) == subdomain)
       return subdomain.size();
 
-    position = canonicalized_host.find('.', position);
+    position = host.find('.', position);
     if (position == base::StringPiece::npos)
       break;
   }
@@ -617,12 +656,16 @@
     if (!UrlPattern(*rule).MatchesUrl(url))
       continue;
 
-    if (DoesOriginMatchInitiatorDomainList(document_origin, *rule)) {
-      if (matched_rules)
-        matched_rules->push_back(rule);
-      else
-        return rule;
-    }
+    if (!DoesOriginMatchInitiatorDomainList(document_origin, *rule))
+      continue;
+
+    if (!DoesURLMatchRequestDomainList(url, *rule))
+      continue;
+
+    if (matched_rules)
+      matched_rules->push_back(rule);
+    else
+      return rule;
   }
 
   return nullptr;
@@ -731,29 +774,44 @@
   return !rule.initiator_domains_included();
 }
 
-bool DoesOriginMatchInitiatorDomainList(const url::Origin& origin,
-                                        const flat::UrlRule& rule) {
-  const bool is_generic = IsRuleGeneric(rule);
-  DCHECK(is_generic || rule.initiator_domains_included()->size());
-
-  // Unique `origin` matches lists of exception domains only.
-  if (origin.opaque())
-    return is_generic;
+bool DoesHostMatchDomainLists(
+    base::StringPiece host,
+    const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>*
+        domains_included,
+    const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>*
+        domains_excluded) {
+  DCHECK(!domains_included || domains_included->size());
 
   size_t longest_matching_included_domain_length = 1;
-  if (!is_generic) {
+  if (domains_included) {
     longest_matching_included_domain_length =
-        GetLongestMatchingSubdomain(origin, *rule.initiator_domains_included());
+        GetLongestMatchingSubdomain(host, *domains_included);
   }
-  if (longest_matching_included_domain_length &&
-      rule.initiator_domains_excluded()) {
-    return GetLongestMatchingSubdomain(origin,
-                                       *rule.initiator_domains_excluded()) <
+  if (longest_matching_included_domain_length && domains_excluded) {
+    return GetLongestMatchingSubdomain(host, *domains_excluded) <
            longest_matching_included_domain_length;
   }
   return !!longest_matching_included_domain_length;
 }
 
+bool DoesURLMatchRequestDomainList(const UrlPattern::UrlInfo& url,
+                                   const flat::UrlRule& rule) {
+  return DoesHostMatchDomainLists(url.GetStringHost(),
+                                  rule.request_domains_included(),
+                                  rule.request_domains_excluded());
+}
+
+bool DoesOriginMatchInitiatorDomainList(const url::Origin& origin,
+                                        const flat::UrlRule& rule) {
+  // Unique `origin` matches lists of exception domains only.
+  if (origin.opaque())
+    return IsRuleGeneric(rule);
+
+  return DoesHostMatchDomainLists(origin.host(),
+                                  rule.initiator_domains_included(),
+                                  rule.initiator_domains_excluded());
+}
+
 bool DoesRuleFlagsMatch(const flat::UrlRule& rule,
                         flat::ElementType element_type,
                         flat::ActivationType activation_type,
diff --git a/components/url_pattern_index/url_pattern_index.h b/components/url_pattern_index/url_pattern_index.h
index e26ca3b..03ebe82 100644
--- a/components/url_pattern_index/url_pattern_index.h
+++ b/components/url_pattern_index/url_pattern_index.h
@@ -18,6 +18,7 @@
 #include "components/url_pattern_index/flat/url_pattern_index_generated.h"
 #include "components/url_pattern_index/proto/rules.pb.h"
 #include "components/url_pattern_index/uint64_hasher.h"
+#include "components/url_pattern_index/url_pattern.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/flatbuffers/src/include/flatbuffers/flatbuffers.h"
 
@@ -85,7 +86,7 @@
 // Increase this value when introducing an incompatible change to the
 // UrlPatternIndex schema (flat/url_pattern_index.fbs). url_pattern_index
 // clients can use this as a signal to rebuild rulesets.
-constexpr int kUrlPatternIndexFormatVersion = 13;
+constexpr int kUrlPatternIndexFormatVersion = 14;
 
 // The class used to construct an index over the URL patterns of a set of URL
 // rules. The rules themselves need to be converted to FlatBuffers format by the
@@ -261,6 +262,12 @@
 bool DoesOriginMatchInitiatorDomainList(const url::Origin& origin,
                                         const flat::UrlRule& rule);
 
+// Returns whether the request URL matches the request domain list of the
+// `rule`. See `DoesOriginMatchInitiatorDomainList` for an explanation of the
+// matching logic.
+bool DoesURLMatchRequestDomainList(const UrlPattern::UrlInfo& url,
+                                   const flat::UrlRule& rule);
+
 // Returns whether the request matches flags of the specified `rule`. Takes into
 // account:
 //  - `element_type` of the requested resource, if not *_NONE.
diff --git a/components/url_pattern_index/url_pattern_index_unittest.cc b/components/url_pattern_index/url_pattern_index_unittest.cc
index 7d411e2..5f74e4b 100644
--- a/components/url_pattern_index/url_pattern_index_unittest.cc
+++ b/components/url_pattern_index/url_pattern_index_unittest.cc
@@ -402,12 +402,10 @@
   }
 }
 
-TEST_F(UrlPatternIndexTest, OneRuleWithInitiatorDomainList) {
-  constexpr const char* kUrl = "http://example.com";
-
+TEST_F(UrlPatternIndexTest, OneRuleWithDomainList) {
   const struct {
     std::vector<std::string> domains;
-    const char* document_origin;
+    base::StringPiece url_or_origin;
     bool expect_match;
   } kTestCases[] = {
       {std::vector<std::string>(), "", true},
@@ -497,11 +495,13 @@
        true},
   };
 
+  // Test initiator domain conditions.
+  constexpr const char* kUrl = "http://example.com";
   for (const auto& test_case : kTestCases) {
     SCOPED_TRACE(::testing::Message()
                  << "Initiator Domains: "
                  << ::testing::PrintToString(test_case.domains)
-                 << "; DocumentOrigin: " << test_case.document_origin);
+                 << "; DocumentOrigin: " << test_case.url_or_origin);
 
     auto rule = MakeUrlRule(UrlPattern(kUrl, kSubstring));
     testing::AddInitiatorDomains(test_case.domains, &rule);
@@ -509,7 +509,102 @@
     Finish();
 
     EXPECT_EQ(test_case.expect_match,
-              !!FindMatch(kUrl, test_case.document_origin));
+              !!FindMatch(kUrl, test_case.url_or_origin));
+    Reset();
+  }
+
+  // Test request domain conditions.
+  for (const auto& test_case : kTestCases) {
+    if (test_case.url_or_origin.empty())
+      continue;
+
+    SCOPED_TRACE(::testing::Message()
+                 << "Request Domains: "
+                 << ::testing::PrintToString(test_case.domains)
+                 << "; Request URL: " << test_case.url_or_origin);
+
+    auto rule = MakeUrlRule(UrlPattern(test_case.url_or_origin, kSubstring));
+    testing::AddRequestDomains(test_case.domains, &rule);
+    ASSERT_TRUE(AddUrlRule(rule));
+    Finish();
+
+    EXPECT_EQ(test_case.expect_match, !!FindMatch(test_case.url_or_origin));
+    Reset();
+  }
+}
+
+TEST_F(UrlPatternIndexTest, OneRuleWithInitiatorAndRequestDomainLists) {
+  const struct {
+    std::vector<std::string> initiator_domains;
+    std::vector<std::string> request_domains;
+    const char* request_url;
+    const char* document_origin;
+    bool expect_match;
+  } kTestCases[] = {
+      {{"initiator.com"},
+       {"request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       true},
+      {{"initiator.com"},
+       {"other-request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       false},
+      {{"other-initiator.com"},
+       {"request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       false},
+      {{"~initiator.com"},
+       {"request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       false},
+      {{"initiator.com"},
+       {"~request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       false},
+      {{"~initiator.com"},
+       {"~request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       false},
+      {{"~other-initiator.com"},
+       {"request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       true},
+      {{"initiator.com"},
+       {"~other-request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       true},
+      {{"~other-initiator.com"},
+       {"~other-request.com"},
+       "http://request.com/path",
+       "http://initiator.com",
+       true},
+  };
+
+  for (const auto& test_case : kTestCases) {
+    SCOPED_TRACE(::testing::Message()
+                 << "Initiator Domains: "
+                 << ::testing::PrintToString(test_case.initiator_domains)
+                 << "; Request Domains: "
+                 << ::testing::PrintToString(test_case.request_domains)
+                 << "; Request URL: " << test_case.request_url
+                 << "; Request Origin: " << test_case.document_origin);
+
+    auto rule = MakeUrlRule(UrlPattern(test_case.request_url, kSubstring));
+    testing::AddInitiatorDomains(test_case.initiator_domains, &rule);
+    testing::AddRequestDomains(test_case.request_domains, &rule);
+    ASSERT_TRUE(AddUrlRule(rule));
+    Finish();
+
+    EXPECT_EQ(test_case.expect_match,
+              !!FindMatch(test_case.request_url, test_case.document_origin));
     Reset();
   }
 }
diff --git a/components/url_pattern_index/url_rule_test_support.cc b/components/url_pattern_index/url_rule_test_support.cc
index 4a3189e..dc362a5 100644
--- a/components/url_pattern_index/url_rule_test_support.cc
+++ b/components/url_pattern_index/url_rule_test_support.cc
@@ -4,6 +4,8 @@
 
 #include "components/url_pattern_index/url_rule_test_support.h"
 
+#include "base/bind.h"
+#include "base/callback.h"
 #include "base/check.h"
 #include "base/strings/string_piece.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -29,11 +31,11 @@
   return rule;
 }
 
-void AddInitiatorDomains(const std::vector<std::string>& initiator_domains,
-                         proto::UrlRule* rule) {
-  for (std::string domain_pattern : initiator_domains) {
+void AddDomains(const std::vector<std::string>& domains,
+                base::RepeatingCallback<proto::DomainListItem*()> add_domain) {
+  for (std::string domain_pattern : domains) {
     DCHECK(!domain_pattern.empty());
-    auto* domain = rule->add_initiator_domains();
+    auto* domain = add_domain.Run();
     if (domain_pattern[0] == '~') {
       domain_pattern.erase(0, 1);
       domain->set_exclude(true);
@@ -42,6 +44,20 @@
   }
 }
 
+void AddInitiatorDomains(const std::vector<std::string>& initiator_domains,
+                         proto::UrlRule* rule) {
+  AddDomains(initiator_domains,
+             base::BindRepeating(&proto::UrlRule::add_initiator_domains,
+                                 base::Unretained(rule)));
+}
+
+void AddRequestDomains(const std::vector<std::string>& request_domains,
+                       proto::UrlRule* rule) {
+  AddDomains(request_domains,
+             base::BindRepeating(&proto::UrlRule::add_request_domains,
+                                 base::Unretained(rule)));
+}
+
 url::Origin GetOrigin(base::StringPiece origin_string) {
   return !origin_string.empty() ? url::Origin::Create(GURL(origin_string))
                                 : url::Origin();
diff --git a/components/url_pattern_index/url_rule_test_support.h b/components/url_pattern_index/url_rule_test_support.h
index e051575..5698904 100644
--- a/components/url_pattern_index/url_rule_test_support.h
+++ b/components/url_pattern_index/url_rule_test_support.h
@@ -63,6 +63,11 @@
 void AddInitiatorDomains(const std::vector<std::string>& initiator_domains,
                          proto::UrlRule* rule);
 
+// Parses `request_domains` and adds them to the request domain list of the
+// `rule`. See `AddInitiatorDomains`.
+void AddRequestDomains(const std::vector<std::string>& request_domains,
+                       proto::UrlRule* rule);
+
 // Returns the url::Origin parsed from |origin_string|, or the unique origin if
 // the string is empty.
 url::Origin GetOrigin(base::StringPiece origin_string);
diff --git a/components/web_package/mojom/web_bundle_parser.mojom b/components/web_package/mojom/web_bundle_parser.mojom
index 84abb18..f50d069 100644
--- a/components/web_package/mojom/web_bundle_parser.mojom
+++ b/components/web_package/mojom/web_bundle_parser.mojom
@@ -37,6 +37,13 @@
   // Reads up to |length| bytes starting with |offset|. Returns a non-null
   // buffer shorter than |length| iff the end of the stream is reached.
   Read(uint64 offset, uint64 length) => (array<uint8>? buffer);
+
+  // Returns the length of the stream if it is known, or a negative value on
+  // error.
+  Length() => (int64 length);
+
+  // Checks whether the stream is backed by a random-access context.
+  IsRandomAccessContext() => (bool is_random_access);
 };
 
 enum BundleParseErrorType {
diff --git a/components/web_package/web_bundle_parser.cc b/components/web_package/web_bundle_parser.cc
index f69ecb0..9e12288 100644
--- a/components/web_package/web_bundle_parser.cc
+++ b/components/web_package/web_bundle_parser.cc
@@ -31,6 +31,10 @@
 // 27, the argument's value is held in the following 8 bytes.
 constexpr uint64_t kMaxCBORItemHeaderSize = 9;
 
+// The number of bytes used to specify the length of the web bundle.
+// https://www.ietf.org/archive/id/draft-ietf-wpack-bundled-responses-01.html#name-trailing-length
+constexpr uint64_t kTrailingLengthNumBytes = 8;
+
 // The maximum size of the section-lengths CBOR item.
 constexpr uint64_t kMaxSectionLengthsCBORSize = 8192;
 
@@ -338,19 +342,88 @@
   ~MetadataParser() override { data_source_->RemoveObserver(this); }
 
   void Start() {
+    // First, check if the data source is backed by a random-access context to
+    // determine whether it is performant to read the trailing length field at
+    // the end of the web bundle file.
+    // https://www.ietf.org/archive/id/draft-ietf-wpack-bundled-responses-01.html#name-trailing-length
+    data_source_->IsRandomAccessContext(base::BindOnce(
+        &MetadataParser::OnIsRandomAccessContext, weak_factory_.GetWeakPtr()));
+  }
+
+ private:
+  void OnIsRandomAccessContext(const bool is_random_access_context) {
+    if (!is_random_access_context) {
+      // If the data source is not backed by a random-access context, assume
+      // that the web bundle starts at the very first byte of the file and
+      // ignore the trailing length field of the bundle.
+      ReadMagicBytes(0);
+    } else {
+      // Otherwise read the length of the file (not the web bundle).
+      data_source_->Length(base::BindOnce(&MetadataParser::OnFileLengthRead,
+                                          weak_factory_.GetWeakPtr()));
+    }
+  }
+  void OnFileLengthRead(const int64_t file_length) {
+    if (file_length < 0) {
+      RunErrorCallbackAndDestroy("Error reading bundle length.");
+      return;
+    }
+    if (static_cast<uint64_t>(file_length) < kTrailingLengthNumBytes) {
+      RunErrorCallbackAndDestroy("Error reading bundle length.");
+      return;
+    }
+
+    // Read the last 8 bytes of the file that correspond to the trailing length
+    // field of the web bundle.
+    data_source_->Read(file_length - kTrailingLengthNumBytes,
+                       kTrailingLengthNumBytes,
+                       base::BindOnce(&MetadataParser::ParseWebBundleLength,
+                                      weak_factory_.GetWeakPtr(), file_length));
+  }
+
+  void ParseWebBundleLength(const uint64_t file_length,
+                            const absl::optional<std::vector<uint8_t>>& data) {
+    if (!data.has_value()) {
+      RunErrorCallbackAndDestroy("Error reading bundle length.");
+      return;
+    }
+
+    // "Recipients loading the bundle in a random-access context SHOULD start by
+    // reading the last 8 bytes and seeking backwards by that many bytes to find
+    // the start of the bundle, instead of assuming that the start of the file
+    // is also the start of the bundle. This allows the bundle to be appended to
+    // another format such as a generic self-extracting executable."
+    // https://www.ietf.org/archive/id/draft-ietf-wpack-bundled-responses-01.html#section-4.1.1-3
+    InputReader input(*data);
+    uint64_t web_bundle_length;
+    if (!input.ReadBigEndian(&web_bundle_length)) {
+      RunErrorCallbackAndDestroy("Error reading bundle length.");
+      return;
+    }
+
+    if (web_bundle_length > file_length) {
+      RunErrorCallbackAndDestroy("Invalid bundle length.");
+      return;
+    }
+    const uint64_t web_bundle_offset = file_length - web_bundle_length;
+    ReadMagicBytes(web_bundle_offset);
+  }
+
+  void ReadMagicBytes(const uint64_t offset_in_stream) {
     // First, we will parse one byte at the very beginning to determine the size
     // of the CBOR top level array (hence the "1+"), then `magic` and `version`
     // bytes.
     const uint64_t length =
         1 + sizeof(kBundleMagicBytes) + sizeof(kVersionB1MagicBytes);
-    data_source_->Read(0, length,
-                       base::BindOnce(&MetadataParser::ParseMagicBytes,
-                                      weak_factory_.GetWeakPtr()));
+    data_source_->Read(
+        offset_in_stream, length,
+        base::BindOnce(&MetadataParser::ParseMagicBytes,
+                       weak_factory_.GetWeakPtr(), offset_in_stream));
   }
 
- private:
   // https://www.ietf.org/archive/id/draft-ietf-wpack-bundled-responses-01.html#name-top-level-structure
-  void ParseMagicBytes(const absl::optional<std::vector<uint8_t>>& data) {
+  void ParseMagicBytes(uint64_t offset_in_stream,
+                       const absl::optional<std::vector<uint8_t>>& data) {
     if (!data) {
       RunErrorCallbackAndDestroy("Error reading bundle magic bytes.");
       return;
@@ -393,6 +466,7 @@
       RunErrorCallbackAndDestroy("Cannot read version bytes.");
       return;
     }
+    offset_in_stream += input.CurrentOffset();
     if (bundle_version_is_b1_) {
       if (!std::equal(version->begin(), version->end(),
                       std::begin(kVersionB1MagicBytes),
@@ -404,9 +478,9 @@
         return;
       }
       data_source_->Read(
-          input.CurrentOffset(), kMaxCBORItemHeaderSize,
+          offset_in_stream, kMaxCBORItemHeaderSize,
           base::BindOnce(&MetadataParser::ReadCBORHeaderOfPrimaryURL,
-                         weak_factory_.GetWeakPtr(), input.CurrentOffset()));
+                         weak_factory_.GetWeakPtr(), offset_in_stream));
     } else {
       // The only other version we support is "b2", in case of a mismatch we
       // should return with "version error" later.
@@ -419,7 +493,7 @@
             mojom::BundleParseErrorType::kVersionError);
         return;
       }
-      ReadBundleHeader(input.CurrentOffset());
+      ReadBundleHeader(offset_in_stream);
     }
   }
 
@@ -1369,6 +1443,16 @@
   data_source_->Read(offset, length, std::move(callback));
 }
 
+void WebBundleParser::SharedBundleDataSource::Length(
+    mojom::BundleDataSource::LengthCallback callback) {
+  data_source_->Length(std::move(callback));
+}
+
+void WebBundleParser::SharedBundleDataSource::IsRandomAccessContext(
+    mojom::BundleDataSource::IsRandomAccessContextCallback callback) {
+  data_source_->IsRandomAccessContext(std::move(callback));
+}
+
 WebBundleParser::WebBundleParser(
     mojo::PendingReceiver<mojom::WebBundleParser> receiver,
     mojo::PendingRemote<mojom::BundleDataSource> data_source,
diff --git a/components/web_package/web_bundle_parser.h b/components/web_package/web_bundle_parser.h
index 890b064..12450b15 100644
--- a/components/web_package/web_bundle_parser.h
+++ b/components/web_package/web_bundle_parser.h
@@ -47,6 +47,11 @@
               uint64_t length,
               mojom::BundleDataSource::ReadCallback callback);
 
+    void Length(mojom::BundleDataSource::LengthCallback callback);
+
+    void IsRandomAccessContext(
+        mojom::BundleDataSource::IsRandomAccessContextCallback callback);
+
    private:
     friend class base::RefCounted<SharedBundleDataSource>;
 
diff --git a/components/web_package/web_bundle_parser_factory.cc b/components/web_package/web_bundle_parser_factory.cc
index 08b6d77..f4333de 100644
--- a/components/web_package/web_bundle_parser_factory.cc
+++ b/components/web_package/web_bundle_parser_factory.cc
@@ -38,6 +38,15 @@
     }
   }
 
+  void Length(LengthCallback callback) override {
+    const int64_t length = file_.GetLength();
+    std::move(callback).Run(length);
+  }
+
+  void IsRandomAccessContext(IsRandomAccessContextCallback callback) override {
+    std::move(callback).Run(true);
+  }
+
   mojo::Receiver<mojom::BundleDataSource> receiver_;
   base::File file_;
 };
diff --git a/components/web_package/web_bundle_parser_factory_unittest.cc b/components/web_package/web_bundle_parser_factory_unittest.cc
index 1b28b32..681dc01 100644
--- a/components/web_package/web_bundle_parser_factory_unittest.cc
+++ b/components/web_package/web_bundle_parser_factory_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
+#include "base/test/test_future.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
@@ -133,6 +134,18 @@
     run_loop.Run();
   }
   ASSERT_FALSE(result_data);
+
+  {
+    base::test::TestFuture<int64_t> future;
+    data_source->Length(future.GetCallback());
+    EXPECT_EQ(file_length, future.Get());
+  }
+
+  {
+    base::test::TestFuture<bool> future;
+    data_source->IsRandomAccessContext(future.GetCallback());
+    EXPECT_TRUE(future.Get());
+  }
 }
 
 TEST_F(WebBundleParserFactoryTest, GetParserForFile) {
@@ -146,14 +159,11 @@
 
   mojom::BundleMetadataPtr metadata;
   {
-    base::RunLoop run_loop;
-    parser->ParseMetadata(base::BindLambdaForTesting(
-        [&metadata, &run_loop](mojom::BundleMetadataPtr parsed_metadata,
-                               mojom::BundleMetadataParseErrorPtr error) {
-          metadata = std::move(parsed_metadata);
-          run_loop.QuitClosure().Run();
-        }));
-    run_loop.Run();
+    base::test::TestFuture<mojom::BundleMetadataPtr,
+                           mojom::BundleMetadataParseErrorPtr>
+        future;
+    parser->ParseMetadata(future.GetCallback());
+    metadata = std::get<0>(future.Take());
   }
   ASSERT_TRUE(metadata);
   ASSERT_EQ(metadata->requests.size(), 4u);
@@ -162,20 +172,16 @@
   for (const auto& item : metadata->requests) {
     ASSERT_TRUE(item.second->variants_value.empty());
     ASSERT_EQ(item.second->response_locations.size(), 1u);
-    base::RunLoop run_loop;
+    base::test::TestFuture<mojom::BundleResponsePtr,
+                           mojom::BundleResponseParseErrorPtr>
+        future;
     parser->ParseResponse(item.second->response_locations[0]->offset,
                           item.second->response_locations[0]->length,
-                          base::BindLambdaForTesting(
-                              [&item, &responses, &run_loop](
-                                  mojom::BundleResponsePtr response,
-                                  mojom::BundleResponseParseErrorPtr error) {
-                                ASSERT_TRUE(response);
-                                ASSERT_FALSE(error);
-                                responses[item.first.spec()] =
-                                    std::move(response);
-                                run_loop.QuitClosure().Run();
-                              }));
-    run_loop.Run();
+                          future.GetCallback());
+    auto [response, error] = future.Take();
+    ASSERT_TRUE(response);
+    ASSERT_FALSE(error);
+    responses[item.first.spec()] = std::move(response);
   }
   ASSERT_TRUE(responses["https://test.example.org/"]);
   EXPECT_EQ(responses["https://test.example.org/"]->response_code, 200);
diff --git a/components/web_package/web_bundle_parser_fuzzer.cc b/components/web_package/web_bundle_parser_fuzzer.cc
index 8d25b61..f8bbf35 100644
--- a/components/web_package/web_bundle_parser_fuzzer.cc
+++ b/components/web_package/web_bundle_parser_fuzzer.cc
@@ -21,33 +21,43 @@
 
 class DataSource : public web_package::mojom::BundleDataSource {
  public:
-  DataSource(const uint8_t* data, size_t size) : data_(data), size_(size) {}
+  DataSource(const bool is_random_access_context, const std::string& data)
+      : is_random_access_context_(is_random_access_context), data_(data) {}
 
   void Read(uint64_t offset, uint64_t length, ReadCallback callback) override {
-    if (offset >= size_) {
+    if (offset >= data_.size()) {
       std::move(callback).Run(absl::nullopt);
       return;
     }
-    const uint8_t* start = data_ + offset;
-    length = std::min(length, size_ - offset);
+    const auto start = data_.begin() + offset;
+    length = std::min(length, data_.size() - offset);
     std::move(callback).Run(std::vector<uint8_t>(start, start + length));
   }
 
+  void Length(LengthCallback callback) override {
+    std::move(callback).Run(data_.size());
+  }
+
+  void IsRandomAccessContext(IsRandomAccessContextCallback callback) override {
+    std::move(callback).Run(is_random_access_context_);
+  }
+
   void AddReceiver(
       mojo::PendingReceiver<web_package::mojom::BundleDataSource> receiver) {
     receivers_.Add(this, std::move(receiver));
   }
 
  private:
-  const uint8_t* data_;
-  size_t size_;
+  bool is_random_access_context_;
+  const std::string data_;
   mojo::ReceiverSet<web_package::mojom::BundleDataSource> receivers_;
 };
 
 class WebBundleParserFuzzer {
  public:
-  WebBundleParserFuzzer(const uint8_t* data, size_t size)
-      : data_source_(data, size) {}
+  WebBundleParserFuzzer(const bool is_random_access_context,
+                        const std::string& data)
+      : data_source_(is_random_access_context, data) {}
 
   void FuzzBundle(base::RunLoop* run_loop) {
     mojo::PendingRemote<web_package::mojom::BundleDataSource>
@@ -120,7 +130,10 @@
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   static Environment* env = new Environment();
 
-  WebBundleParserFuzzer fuzzer(data, size);
+  std::string web_bundle(reinterpret_cast<const char*>(data), size);
+  bool is_random_access_context = std::hash<std::string>()(web_bundle) & 1;
+
+  WebBundleParserFuzzer fuzzer(is_random_access_context, web_bundle);
   base::RunLoop run_loop;
   env->task_executor.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&WebBundleParserFuzzer::FuzzBundle,
diff --git a/components/web_package/web_bundle_parser_unittest.cc b/components/web_package/web_bundle_parser_unittest.cc
index f15ea5d..e4d68a8c 100644
--- a/components/web_package/web_bundle_parser_unittest.cc
+++ b/components/web_package/web_bundle_parser_unittest.cc
@@ -39,10 +39,14 @@
 
 class TestDataSource : public mojom::BundleDataSource {
  public:
-  explicit TestDataSource(const base::FilePath& path)
-      : data_(GetTestFileContents(path)) {}
-  explicit TestDataSource(const std::vector<uint8_t>& data)
-      : data_(reinterpret_cast<const char*>(data.data()), data.size()) {}
+  explicit TestDataSource(const base::FilePath& path,
+                          const bool is_random_access_context = false)
+      : data_(GetTestFileContents(path)),
+        is_random_access_context_(is_random_access_context) {}
+  explicit TestDataSource(const std::vector<uint8_t>& data,
+                          const bool is_random_access_context = false)
+      : data_(reinterpret_cast<const char*>(data.data()), data.size()),
+        is_random_access_context_(is_random_access_context) {}
 
   void Read(uint64_t offset, uint64_t length, ReadCallback callback) override {
     if (offset >= data_.size()) {
@@ -56,6 +60,15 @@
         std::vector<uint8_t>(start, start + available_length));
   }
 
+  void Length(LengthCallback callback) override {
+    EXPECT_TRUE(is_random_access_context_);
+    std::move(callback).Run(data_.size());
+  }
+
+  void IsRandomAccessContext(IsRandomAccessContextCallback callback) override {
+    std::move(callback).Run(is_random_access_context_);
+  }
+
   base::StringPiece GetPayload(const mojom::BundleResponsePtr& response) {
     return base::StringPiece(data_).substr(response->payload_offset,
                                            response->payload_length);
@@ -67,6 +80,7 @@
 
  private:
   std::string data_;
+  bool is_random_access_context_;
   mojo::ReceiverSet<mojom::BundleDataSource> receivers_;
 };
 
@@ -157,6 +171,14 @@
   return std::string(reinterpret_cast<const char*>(data.data()), data.size());
 }
 
+std::vector<uint8_t> CreateSmallBundle() {
+  web_package::WebBundleBuilder builder(kFallbackUrl, "" /* manifest_url */);
+  builder.AddExchange(kFallbackUrl,
+                      {{":status", "200"}, {"content-type", "text/plain"}},
+                      "payload");
+  return builder.CreateBundle();
+}
+
 }  // namespace
 
 class WebBundleParserTest : public testing::Test {
@@ -833,6 +855,68 @@
     EXPECT_EQ(data_source.GetPayload(response), "payload");
   }
 }
+
+TEST_F(WebBundleParserTest, RandomAccessContext) {
+  std::vector<uint8_t> bundle = CreateSmallBundle();
+  TestDataSource data_source(bundle, /*is_random_access_context=*/true);
+
+  mojom::BundleMetadataPtr metadata = ParseBundle(&data_source).first;
+  ASSERT_TRUE(metadata);
+
+  auto location = FindResponse(metadata, GURL("https://test.example.com/"));
+  ASSERT_TRUE(location);
+  auto response = ParseResponse(&data_source, location);
+  ASSERT_TRUE(response);
+  EXPECT_EQ(response->response_code, 200);
+  EXPECT_EQ(response->response_headers.size(), 1u);
+  EXPECT_EQ(response->response_headers["content-type"], "text/plain");
+  EXPECT_EQ(data_source.GetPayload(response), "payload");
+}
+
+TEST_F(WebBundleParserTest, RandomAccessContextPrependedData) {
+  std::vector<uint8_t> bundle = CreateSmallBundle();
+  bundle.insert(bundle.begin(),
+                {'o', 't', 'h', 'e', 'r', ' ', 'd', 'a', 't', 'a'});
+  TestDataSource data_source(bundle, /*is_random_access_context=*/true);
+
+  mojom::BundleMetadataPtr metadata = ParseBundle(&data_source).first;
+  ASSERT_TRUE(metadata);
+
+  auto location = FindResponse(metadata, GURL("https://test.example.com/"));
+  ASSERT_TRUE(location);
+  auto response = ParseResponse(&data_source, location);
+  ASSERT_TRUE(response);
+  EXPECT_EQ(response->response_code, 200);
+  EXPECT_EQ(response->response_headers.size(), 1u);
+  EXPECT_EQ(response->response_headers["content-type"], "text/plain");
+  EXPECT_EQ(data_source.GetPayload(response), "payload");
+}
+
+TEST_F(WebBundleParserTest, RandomAccessContextLengthSmallerThanWebBundle) {
+  std::vector<uint8_t> bundle = CreateSmallBundle();
+  std::vector<uint8_t> invalid_length = {0, 0, 0, 0, 0, 0, 0, 10};
+  std::copy(invalid_length.begin(), invalid_length.end(), bundle.end() - 8);
+  TestDataSource data_source(bundle, /*is_random_access_context=*/true);
+
+  ExpectFormatError(ParseBundle(&data_source));
+}
+
+TEST_F(WebBundleParserTest, RandomAccessContextFileSmallerThanLengthField) {
+  std::vector<uint8_t> bundle = {1, 2, 3, 4};
+  TestDataSource data_source(bundle, /*is_random_access_context=*/true);
+
+  ExpectFormatError(ParseBundle(&data_source));
+}
+
+TEST_F(WebBundleParserTest, RandomAccessContextLengthBiggerThanFile) {
+  std::vector<uint8_t> bundle = CreateSmallBundle();
+  std::vector<uint8_t> invalid_length = {0xff, 0, 0, 0, 0, 0, 0, 0};
+  std::copy(invalid_length.begin(), invalid_length.end(), bundle.end() - 8);
+  TestDataSource data_source(bundle, /*is_random_access_context=*/true);
+
+  ExpectFormatError(ParseBundle(&data_source));
+}
+
 // TODO(crbug.com/969596): Add a test case that loads a wbn file with variants,
 // once gen-bundle supports variants.
 
diff --git a/components/webrtc/thread_wrapper.cc b/components/webrtc/thread_wrapper.cc
index eae08b9..3789fc1 100644
--- a/components/webrtc/thread_wrapper.cc
+++ b/components/webrtc/thread_wrapper.cc
@@ -21,6 +21,7 @@
 #include "base/trace_event/trace_event.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/webrtc/rtc_base/physical_socket_server.h"
+#include "third_party/webrtc_overrides/metronome_source.h"
 
 namespace webrtc {
 namespace {
@@ -100,26 +101,22 @@
     g_jingle_thread_wrapper = LAZY_INSTANCE_INITIALIZER;
 
 // static
-void ThreadWrapper::EnsureForCurrentMessageLoop(
-    scoped_refptr<blink::MetronomeSource> metronome_source) {
+void ThreadWrapper::EnsureForCurrentMessageLoop() {
   if (ThreadWrapper::current() == nullptr) {
-    std::unique_ptr<ThreadWrapper> wrapper = ThreadWrapper::WrapTaskRunner(
-        metronome_source, base::ThreadTaskRunnerHandle::Get());
+    std::unique_ptr<ThreadWrapper> wrapper =
+        ThreadWrapper::WrapTaskRunner(base::ThreadTaskRunnerHandle::Get());
     base::CurrentThread::Get()->AddDestructionObserver(wrapper.release());
   }
 
   DCHECK_EQ(rtc::Thread::Current(), current());
-  DCHECK_EQ(current()->metronome_source_, metronome_source);
 }
 
 std::unique_ptr<ThreadWrapper> ThreadWrapper::WrapTaskRunner(
-    scoped_refptr<blink::MetronomeSource> metronome_source,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
   DCHECK(!ThreadWrapper::current());
   DCHECK(task_runner->BelongsToCurrentThread());
 
-  std::unique_ptr<ThreadWrapper> result(
-      new ThreadWrapper(std::move(metronome_source), task_runner));
+  std::unique_ptr<ThreadWrapper> result(new ThreadWrapper(task_runner));
   g_jingle_thread_wrapper.Get().Set(result.get());
   return result;
 }
@@ -137,12 +134,11 @@
 }
 
 ThreadWrapper::ThreadWrapper(
-    scoped_refptr<blink::MetronomeSource> metronome_source,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : Thread(std::make_unique<rtc::PhysicalSocketServer>()),
-      metronome_source_(std::move(metronome_source)),
       task_runner_(task_runner),
       send_allowed_(false),
+      use_metronome_(base::FeatureList::IsEnabled(kThreadWrapperUsesMetronome)),
       last_task_id_(0),
       pending_send_event_(base::WaitableEvent::ResetPolicy::MANUAL,
                           base::WaitableEvent::InitialState::NOT_SIGNALED) {
@@ -344,10 +340,10 @@
                                     uint32_t milliseconds) {
   base::TimeTicks target_time =
       base::TimeTicks::Now() + base::Milliseconds(milliseconds);
-  if (metronome_source_) {
+  if (use_metronome_) {
     // Coalesce tasks onto the metronome.
     base::TimeTicks snapped_target_time =
-        metronome_source_->GetTimeSnappedToNextMetronomeTick(target_time);
+        blink::MetronomeSource::TimeSnappedToNextTick(target_time);
     if (coalesced_tasks_.QueueDelayedTask(target_time, std::move(task),
                                           snapped_target_time)) {
       task_runner_->PostDelayedTaskAt(
diff --git a/components/webrtc/thread_wrapper.h b/components/webrtc/thread_wrapper.h
index 8d48e10..df5572f 100644
--- a/components/webrtc/thread_wrapper.h
+++ b/components/webrtc/thread_wrapper.h
@@ -23,7 +23,6 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/webrtc/rtc_base/thread.h"
 #include "third_party/webrtc_overrides/coalesced_tasks.h"
-#include "third_party/webrtc_overrides/metronome_source.h"
 
 namespace webrtc {
 
@@ -53,13 +52,11 @@
   // Create ThreadWrapper for the current thread if it hasn't been created
   // yet. The thread wrapper is destroyed automatically when the current
   // MessageLoop is destroyed.
-  static void EnsureForCurrentMessageLoop(
-      scoped_refptr<blink::MetronomeSource> metronome_source = nullptr);
+  static void EnsureForCurrentMessageLoop();
 
   // Creates ThreadWrapper for |task_runner| that runs tasks on the
   // current thread.
   static std::unique_ptr<ThreadWrapper> WrapTaskRunner(
-      scoped_refptr<blink::MetronomeSource> metronome_source,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
 
   // Returns thread wrapper for the current thread or nullptr if it doesn't
@@ -141,8 +138,8 @@
   struct PendingSend;
   class PostTaskLatencySampler;
 
-  ThreadWrapper(scoped_refptr<blink::MetronomeSource> metronome_source,
-                scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+  explicit ThreadWrapper(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
 
   void PostTaskInternal(const rtc::Location& posted_from,
                         int delay_ms,
@@ -172,15 +169,12 @@
   // |task_start_timestamp|.
   void FinalizeRunTask(absl::optional<base::TimeTicks> task_start_timestamp);
 
-  // TODO(https://crbug.com/1296138): When MetronomeSource is simplified,
-  // snapping to metronome ticks will be a static function, and we can remove
-  // this object reference.
-  const scoped_refptr<blink::MetronomeSource> metronome_source_;
   // Task runner used to execute messages posted on this thread.
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 
   bool send_allowed_;
 
+  const bool use_metronome_;
   // |lock_| must be locked when accessing |messages_|.
   base::Lock lock_;
   int last_task_id_;
@@ -190,9 +184,9 @@
   std::unique_ptr<PostTaskLatencySampler> latency_sampler_;
   SampledDurationCallback task_latency_callback_;
   SampledDurationCallback task_duration_callback_;
-  // If |metronome_source_| is used, low precision tasks are coalesced onto
-  // metronome ticks and stored in |coalesced_tasks_| until they are ready to
-  // run.
+  // If |kThreadWrapperUsesMetronome| is enabled, low precision tasks are
+  // coalesced onto metronome ticks and stored in |coalesced_tasks_| until they
+  // are ready to run.
   blink::CoalescedTasks coalesced_tasks_;
 
   base::WeakPtr<ThreadWrapper> weak_ptr_;
diff --git a/components/webrtc/thread_wrapper_unittest.cc b/components/webrtc/thread_wrapper_unittest.cc
index d620340..c7d0c15 100644
--- a/components/webrtc/thread_wrapper_unittest.cc
+++ b/components/webrtc/thread_wrapper_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -317,20 +318,23 @@
 // Provider needed for the MetronomeLikeTaskQueueTest suite.
 class ThreadWrapperProvider : public blink::MetronomeLikeTaskQueueProvider {
  public:
-  static constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
-
   void Initialize() override {
-    scoped_refptr<blink::MetronomeSource> metronome_source =
-        base::MakeRefCounted<blink::MetronomeSource>(base::TimeTicks::Now(),
-                                                     kMetronomeTick);
-    ThreadWrapper::EnsureForCurrentMessageLoop(std::move(metronome_source));
+    scoped_feature_list_.InitAndEnableFeature(kThreadWrapperUsesMetronome);
+    ThreadWrapper::EnsureForCurrentMessageLoop();
     thread_ = rtc::Thread::Current();
   }
 
-  base::TimeDelta MetronomeTick() const override { return kMetronomeTick; }
+  base::TimeDelta DeltaToNextTick() const override {
+    base::TimeTicks now = base::TimeTicks::Now();
+    return blink::MetronomeSource::TimeSnappedToNextTick(now) - now;
+  }
+  base::TimeDelta MetronomeTick() const override {
+    return blink::MetronomeSource::Tick();
+  }
   webrtc::TaskQueueBase* TaskQueue() const override { return thread_; }
 
  private:
+  base::test::ScopedFeatureList scoped_feature_list_;
   // ThreadWrapper destroys itself when |message_loop_| is destroyed.
   raw_ptr<rtc::Thread> thread_;
 };
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index c393d78..45e0c5ff 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -403,6 +403,8 @@
     "attribution_reporting/attribution_manager_impl.cc",
     "attribution_reporting/attribution_manager_impl.h",
     "attribution_reporting/attribution_observer.h",
+    "attribution_reporting/attribution_observer_types.cc",
+    "attribution_reporting/attribution_observer_types.h",
     "attribution_reporting/attribution_page_metrics.cc",
     "attribution_reporting/attribution_page_metrics.h",
     "attribution_reporting/attribution_policy.cc",
diff --git a/content/browser/attribution_reporting/attribution_internals_browsertest.cc b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
index 52bf699..065e220 100644
--- a/content/browser/attribution_reporting/attribution_internals_browsertest.cc
+++ b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
@@ -37,8 +38,6 @@
 
 namespace {
 
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 using ::testing::_;
 using ::testing::ElementsAre;
 using ::testing::IsNull;
@@ -402,49 +401,49 @@
                .SetReportTime(now)
                .SetPriority(13)
                .Build()}));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kPriorityTooLow,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(1))
           .SetPriority(11)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kDroppedForNoise,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(2))
           .SetPriority(12)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kExcessiveAttributions,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(6))
           .SetPriority(-3)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kExcessiveReportingOrigins,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(7))
           .SetPriority(-4)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kDeduplicated,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(8))
           .SetPriority(-5)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kNoCapacityForConversionDestination,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
           .SetReportTime(now + base::Hours(9))
           .SetPriority(-6)
           .Build()));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kInternalError,
       ReportBuilder(
           AttributionInfoBuilder(SourceBuilder(now).BuildStored()).Build())
@@ -453,17 +452,17 @@
           .Build()));
 
   // This shouldn't result in a row, as registration succeeded.
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
+  manager_.NotifyTriggerHandled(CreateReportResult(
       AttributionTrigger::Result::kSuccess, /*dropped_report=*/absl::nullopt,
       /*dropped_report_source_deactivation_reason=*/absl::nullopt,
       /*report_time=*/base::Time()));
 
   // These shouldn't result in a row, as `CreateReportResult::dropped_report()`
   // is null.
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
-      AttributionTrigger::Result::kInternalError));
-  manager_.NotifyTriggerHandled(AttributionStorage::CreateReportResult(
-      AttributionTrigger::Result::kNoMatchingImpressions));
+  manager_.NotifyTriggerHandled(
+      CreateReportResult(AttributionTrigger::Result::kInternalError));
+  manager_.NotifyTriggerHandled(
+      CreateReportResult(AttributionTrigger::Result::kNoMatchingImpressions));
 
   {
     static constexpr char wait_script[] = R"(
diff --git a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
index 61e229a..ca4eee27 100644
--- a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
+++ b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
@@ -14,6 +14,7 @@
 #include "base/time/time.h"
 #include "content/browser/attribution_reporting/attribution_info.h"
 #include "content/browser/attribution_reporting/attribution_manager_impl.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/attribution_utils.h"
@@ -34,8 +35,6 @@
 
 namespace {
 
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 using Attributability =
     ::content::mojom::WebUIAttributionSource::Attributability;
 
@@ -206,7 +205,7 @@
 }
 
 void AttributionInternalsHandlerImpl::OnSourceDeactivated(
-    const AttributionStorage::DeactivatedSource& deactivated_source) {
+    const DeactivatedSource& deactivated_source) {
   Attributability attributability;
   switch (deactivated_source.reason) {
     case DeactivatedSource::Reason::kReplacedByNewerSource:
@@ -284,7 +283,7 @@
 }
 
 void AttributionInternalsHandlerImpl::OnTriggerHandled(
-    const AttributionStorage::CreateReportResult& result) {
+    const CreateReportResult& result) {
   mojom::WebUIAttributionReport::Status status;
   switch (result.status()) {
     case AttributionTrigger::Result::kSuccessDroppedLowerPriority:
diff --git a/content/browser/attribution_reporting/attribution_internals_handler_impl.h b/content/browser/attribution_reporting/attribution_internals_handler_impl.h
index e964b72df..ddcbc685 100644
--- a/content/browser/attribution_reporting/attribution_internals_handler_impl.h
+++ b/content/browser/attribution_reporting/attribution_internals_handler_impl.h
@@ -11,7 +11,6 @@
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_storage.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
@@ -70,13 +69,12 @@
   void OnSourcesChanged() override;
   void OnReportsChanged() override;
   void OnSourceDeactivated(
-      const AttributionStorage::DeactivatedSource& deactivated_source) override;
+      const DeactivatedSource& deactivated_source) override;
   void OnSourceHandled(const StorableSource& source,
                        StorableSource::Result result) override;
   void OnReportSent(const AttributionReport& report,
                     const SendResult& info) override;
-  void OnTriggerHandled(
-      const AttributionStorage::CreateReportResult& result) override;
+  void OnTriggerHandled(const CreateReportResult& result) override;
 
   raw_ptr<WebUI> web_ui_;
   std::unique_ptr<AttributionManager::Provider> manager_provider_;
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.cc b/content/browser/attribution_reporting/attribution_manager_impl.cc
index c33f6143..63e09c5 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl.cc
@@ -20,6 +20,7 @@
 #include "content/browser/attribution_reporting/attribution_data_host_manager_impl.h"
 #include "content/browser/attribution_reporting/attribution_info.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_policy.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_report_network_sender.h"
@@ -47,8 +48,6 @@
 
 namespace {
 
-using CreateReportResult = ::content::AttributionStorage::CreateReportResult;
-
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
 enum class ConversionReportSendOutcome {
@@ -410,7 +409,7 @@
     NotifyReportsChanged();
   }
 
-  if (absl::optional<AttributionStorage::DeactivatedSource> source =
+  if (absl::optional<DeactivatedSource> source =
           result.GetDeactivatedSource()) {
     NotifySourceDeactivated(*source);
   }
@@ -650,7 +649,7 @@
 }
 
 void AttributionManagerImpl::NotifySourceDeactivated(
-    const AttributionStorage::DeactivatedSource& source) {
+    const DeactivatedSource& source) {
   for (auto& observer : observers_)
     observer.OnSourceDeactivated(source);
 }
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.h b/content/browser/attribution_reporting/attribution_manager_impl.h
index 0d54ce14..2689883 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.h
+++ b/content/browser/attribution_reporting/attribution_manager_impl.h
@@ -41,8 +41,10 @@
 class AttributionReportSender;
 class AttributionStorageDelegate;
 class BrowserContext;
+class CreateReportResult;
 class StoragePartitionImpl;
 
+struct DeactivatedSource;
 struct SendResult;
 
 // Provides access to the manager owned by the default StoragePartition.
@@ -161,12 +163,11 @@
                     SendResult info);
   void MarkReportCompleted(AttributionReport::EventLevelData::Id report_id);
 
-  void OnReportStored(AttributionStorage::CreateReportResult result);
+  void OnReportStored(CreateReportResult result);
 
   void NotifySourcesChanged();
   void NotifyReportsChanged();
-  void NotifySourceDeactivated(
-      const AttributionStorage::DeactivatedSource& source);
+  void NotifySourceDeactivated(const DeactivatedSource& source);
 
   // Friend to expose the AttributionStorage for certain tests.
   friend std::vector<AttributionReport> GetAttributionsToReportForTesting(
diff --git a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
index 1cea033..3938ce5 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
@@ -29,6 +29,7 @@
 #include "build/build_config.h"
 #include "content/browser/attribution_reporting/attribution_cookie_checker.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_report_sender.h"
 #include "content/browser/attribution_reporting/attribution_storage.h"
@@ -54,8 +55,6 @@
 
 namespace {
 
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 using ::testing::_;
 using ::testing::AllOf;
 using ::testing::ElementsAre;
@@ -96,7 +95,7 @@
 
   MOCK_METHOD(void,
               OnTriggerHandled,
-              (const AttributionStorage::CreateReportResult& result),
+              (const CreateReportResult& result),
               (override));
 };
 
diff --git a/content/browser/attribution_reporting/attribution_observer.h b/content/browser/attribution_reporting/attribution_observer.h
index e14d3295..656e19bf8 100644
--- a/content/browser/attribution_reporting/attribution_observer.h
+++ b/content/browser/attribution_reporting/attribution_observer.h
@@ -6,13 +6,14 @@
 #define CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_OBSERVER_H_
 
 #include "base/observer_list_types.h"
-#include "content/browser/attribution_reporting/attribution_storage.h"
 #include "content/browser/attribution_reporting/storable_source.h"
 
 namespace content {
 
 class AttributionReport;
+class CreateReportResult;
 
+struct DeactivatedSource;
 struct SendResult;
 
 // Observes events in the Attribution Reporting API. Observers are registered on
@@ -32,8 +33,7 @@
                                StorableSource::Result result) {}
 
   // Called when a source is deactivated.
-  virtual void OnSourceDeactivated(
-      const AttributionStorage::DeactivatedSource& source) {}
+  virtual void OnSourceDeactivated(const DeactivatedSource& source) {}
 
   // Called when a report is sent, regardless of success, but not for attempts
   // that will be retried.
@@ -41,8 +41,7 @@
                             const SendResult& info) {}
 
   // Called when a trigger is registered, regardless of success.
-  virtual void OnTriggerHandled(
-      const AttributionStorage::CreateReportResult& result) {}
+  virtual void OnTriggerHandled(const CreateReportResult& result) {}
 };
 
 }  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_observer_types.cc b/content/browser/attribution_reporting/attribution_observer_types.cc
new file mode 100644
index 0000000..6b5e723
--- /dev/null
+++ b/content/browser/attribution_reporting/attribution_observer_types.cc
@@ -0,0 +1,86 @@
+// Copyright 2022 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 "content/browser/attribution_reporting/attribution_observer_types.h"
+
+#include <utility>
+
+#include "base/check.h"
+#include "base/check_op.h"
+
+namespace content {
+
+CreateReportResult::CreateReportResult(
+    AttributionTrigger::Result status,
+    absl::optional<AttributionReport> dropped_report,
+    absl::optional<DeactivatedSource::Reason>
+        dropped_report_source_deactivation_reason,
+    absl::optional<base::Time> report_time)
+    : status_(status),
+      dropped_report_(std::move(dropped_report)),
+      dropped_report_source_deactivation_reason_(
+          dropped_report_source_deactivation_reason),
+      report_time_(report_time) {
+  DCHECK((status_ == AttributionTrigger::Result::kSuccess &&
+          !dropped_report_.has_value()) ||
+         status_ == AttributionTrigger::Result::kNoMatchingImpressions ||
+         status_ == AttributionTrigger::Result::kInternalError ||
+         dropped_report_.has_value());
+
+  DCHECK(dropped_report_.has_value() ||
+         !dropped_report_source_deactivation_reason_);
+
+  DCHECK_EQ(
+      status_ == AttributionTrigger::Result::kSuccess ||
+          status_ == AttributionTrigger::Result::kSuccessDroppedLowerPriority,
+      report_time_.has_value());
+}
+
+CreateReportResult::~CreateReportResult() = default;
+
+CreateReportResult::CreateReportResult(const CreateReportResult&) = default;
+CreateReportResult::CreateReportResult(CreateReportResult&&) = default;
+
+CreateReportResult& CreateReportResult::operator=(const CreateReportResult&) =
+    default;
+CreateReportResult& CreateReportResult::operator=(CreateReportResult&&) =
+    default;
+
+AttributionTrigger::Result CreateReportResult::status() const {
+  return status_;
+}
+
+const absl::optional<AttributionReport>& CreateReportResult::dropped_report()
+    const {
+  return dropped_report_;
+}
+
+absl::optional<base::Time> CreateReportResult::report_time() const {
+  return report_time_;
+}
+
+absl::optional<DeactivatedSource> CreateReportResult::GetDeactivatedSource()
+    const {
+  if (dropped_report_source_deactivation_reason_) {
+    return DeactivatedSource(dropped_report_->attribution_info().source,
+                             *dropped_report_source_deactivation_reason_);
+  }
+  return absl::nullopt;
+}
+
+DeactivatedSource::DeactivatedSource(StoredSource source, Reason reason)
+    : source(std::move(source)), reason(reason) {}
+
+DeactivatedSource::~DeactivatedSource() = default;
+
+DeactivatedSource::DeactivatedSource(const DeactivatedSource&) = default;
+
+DeactivatedSource::DeactivatedSource(DeactivatedSource&&) = default;
+
+DeactivatedSource& DeactivatedSource::operator=(const DeactivatedSource&) =
+    default;
+
+DeactivatedSource& DeactivatedSource::operator=(DeactivatedSource&&) = default;
+
+}  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_observer_types.h b/content/browser/attribution_reporting/attribution_observer_types.h
new file mode 100644
index 0000000..2726497
--- /dev/null
+++ b/content/browser/attribution_reporting/attribution_observer_types.h
@@ -0,0 +1,78 @@
+// Copyright 2022 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 CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_OBSERVER_TYPES_H_
+#define CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_OBSERVER_TYPES_H_
+
+#include "base/time/time.h"
+#include "content/browser/attribution_reporting/attribution_report.h"
+#include "content/browser/attribution_reporting/attribution_trigger.h"
+#include "content/browser/attribution_reporting/stored_source.h"
+#include "content/common/content_export.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace content {
+
+struct CONTENT_EXPORT DeactivatedSource {
+  enum class Reason {
+    kReplacedByNewerSource,
+    kReachedAttributionLimit,
+  };
+
+  DeactivatedSource(StoredSource source, Reason reason);
+  ~DeactivatedSource();
+
+  DeactivatedSource(const DeactivatedSource&);
+  DeactivatedSource(DeactivatedSource&&);
+
+  DeactivatedSource& operator=(const DeactivatedSource&);
+  DeactivatedSource& operator=(DeactivatedSource&&);
+
+  StoredSource source;
+  Reason reason;
+};
+
+class CONTENT_EXPORT CreateReportResult {
+ public:
+  explicit CreateReportResult(
+      AttributionTrigger::Result status,
+      absl::optional<AttributionReport> dropped_report = absl::nullopt,
+      absl::optional<DeactivatedSource::Reason>
+          dropped_report_source_deactivation_reason = absl::nullopt,
+      absl::optional<base::Time> report_time = absl::nullopt);
+  ~CreateReportResult();
+
+  CreateReportResult(const CreateReportResult&);
+  CreateReportResult(CreateReportResult&&);
+
+  CreateReportResult& operator=(const CreateReportResult&);
+  CreateReportResult& operator=(CreateReportResult&&);
+
+  AttributionTrigger::Result status() const;
+
+  const absl::optional<AttributionReport>& dropped_report() const;
+
+  absl::optional<base::Time> report_time() const;
+
+  absl::optional<DeactivatedSource> GetDeactivatedSource() const;
+
+ private:
+  AttributionTrigger::Result status_;
+
+  // `AttributionTrigger::Result::kInternalError` is only associated with a
+  // dropped report if the browser succeeded in running the
+  // source-to-attribute logic.
+  absl::optional<AttributionReport> dropped_report_;
+
+  // Null unless `dropped_report_`'s source was deactivated.
+  absl::optional<DeactivatedSource::Reason>
+      dropped_report_source_deactivation_reason_;
+
+  // Null unless `status` is `kSuccess` or `kSuccessDroppedLowerPriority`.
+  absl::optional<base::Time> report_time_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_OBSERVER_TYPES_H_
diff --git a/content/browser/attribution_reporting/attribution_storage.cc b/content/browser/attribution_reporting/attribution_storage.cc
index cdefcd84..3b642e3 100644
--- a/content/browser/attribution_reporting/attribution_storage.cc
+++ b/content/browser/attribution_reporting/attribution_storage.cc
@@ -4,88 +4,16 @@
 
 #include "content/browser/attribution_reporting/attribution_storage.h"
 
-#include "base/check_op.h"
+#include <utility>
+
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 
 namespace content {
 
 namespace {
-using CreateReportResult = ::content::AttributionStorage::CreateReportResult;
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
 using StoreSourceResult = ::content::AttributionStorage::StoreSourceResult;
 }  // namespace
 
-CreateReportResult::CreateReportResult(
-    AttributionTrigger::Result status,
-    absl::optional<AttributionReport> dropped_report,
-    absl::optional<DeactivatedSource::Reason>
-        dropped_report_source_deactivation_reason,
-    absl::optional<base::Time> report_time)
-    : status_(status),
-      dropped_report_(std::move(dropped_report)),
-      dropped_report_source_deactivation_reason_(
-          dropped_report_source_deactivation_reason),
-      report_time_(report_time) {
-  DCHECK((status_ == AttributionTrigger::Result::kSuccess &&
-          !dropped_report_.has_value()) ||
-         status_ == AttributionTrigger::Result::kNoMatchingImpressions ||
-         status_ == AttributionTrigger::Result::kInternalError ||
-         dropped_report_.has_value());
-
-  DCHECK(dropped_report_.has_value() ||
-         !dropped_report_source_deactivation_reason_);
-
-  DCHECK_EQ(
-      status_ == AttributionTrigger::Result::kSuccess ||
-          status_ == AttributionTrigger::Result::kSuccessDroppedLowerPriority,
-      report_time_.has_value());
-}
-
-CreateReportResult::~CreateReportResult() = default;
-
-CreateReportResult::CreateReportResult(const CreateReportResult&) = default;
-CreateReportResult::CreateReportResult(CreateReportResult&&) = default;
-
-CreateReportResult& CreateReportResult::operator=(const CreateReportResult&) =
-    default;
-CreateReportResult& CreateReportResult::operator=(CreateReportResult&&) =
-    default;
-
-AttributionTrigger::Result CreateReportResult::status() const {
-  return status_;
-}
-
-const absl::optional<AttributionReport>& CreateReportResult::dropped_report()
-    const {
-  return dropped_report_;
-}
-
-absl::optional<base::Time> CreateReportResult::report_time() const {
-  return report_time_;
-}
-
-absl::optional<DeactivatedSource> CreateReportResult::GetDeactivatedSource()
-    const {
-  if (dropped_report_source_deactivation_reason_) {
-    return DeactivatedSource(dropped_report_->attribution_info().source,
-                             *dropped_report_source_deactivation_reason_);
-  }
-  return absl::nullopt;
-}
-
-DeactivatedSource::DeactivatedSource(StoredSource source, Reason reason)
-    : source(std::move(source)), reason(reason) {}
-
-DeactivatedSource::~DeactivatedSource() = default;
-
-DeactivatedSource::DeactivatedSource(const DeactivatedSource&) = default;
-
-DeactivatedSource::DeactivatedSource(DeactivatedSource&&) = default;
-
-DeactivatedSource& DeactivatedSource::operator=(const DeactivatedSource&) =
-    default;
-
-DeactivatedSource& DeactivatedSource::operator=(DeactivatedSource&&) = default;
-
 StoreSourceResult::StoreSourceResult(
     StorableSource::Result status,
     std::vector<DeactivatedSource> deactivated_sources,
diff --git a/content/browser/attribution_reporting/attribution_storage.h b/content/browser/attribution_reporting/attribution_storage.h
index 0d6ec1c..e8791f4 100644
--- a/content/browser/attribution_reporting/attribution_storage.h
+++ b/content/browser/attribution_reporting/attribution_storage.h
@@ -10,9 +10,7 @@
 #include "base/callback_forward.h"
 #include "base/time/time.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/storable_source.h"
-#include "content/browser/attribution_reporting/stored_source.h"
 #include "content/common/content_export.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -22,7 +20,12 @@
 
 namespace content {
 
+class AttributionTrigger;
+class CreateReportResult;
+class StoredSource;
+
 struct AggregatableAttribution;
+struct DeactivatedSource;
 
 // This class provides an interface for persisting attribution data to
 // disk, and performing queries on it. AttributionStorage should initialize
@@ -30,25 +33,6 @@
 // properly should result in no-ops.
 class AttributionStorage {
  public:
-  struct CONTENT_EXPORT DeactivatedSource {
-    enum class Reason {
-      kReplacedByNewerSource,
-      kReachedAttributionLimit,
-    };
-
-    DeactivatedSource(StoredSource source, Reason reason);
-    ~DeactivatedSource();
-
-    DeactivatedSource(const DeactivatedSource&);
-    DeactivatedSource(DeactivatedSource&&);
-
-    DeactivatedSource& operator=(const DeactivatedSource&);
-    DeactivatedSource& operator=(DeactivatedSource&&);
-
-    StoredSource source;
-    Reason reason;
-  };
-
   struct CONTENT_EXPORT StoreSourceResult {
     explicit StoreSourceResult(
         StorableSource::Result status,
@@ -86,46 +70,6 @@
       const StorableSource& source,
       int deactivated_source_return_limit = -1) = 0;
 
-  class CONTENT_EXPORT CreateReportResult {
-   public:
-    explicit CreateReportResult(
-        AttributionTrigger::Result status,
-        absl::optional<AttributionReport> dropped_report = absl::nullopt,
-        absl::optional<DeactivatedSource::Reason>
-            dropped_report_source_deactivation_reason = absl::nullopt,
-        absl::optional<base::Time> report_time = absl::nullopt);
-    ~CreateReportResult();
-
-    CreateReportResult(const CreateReportResult&);
-    CreateReportResult(CreateReportResult&&);
-
-    CreateReportResult& operator=(const CreateReportResult&);
-    CreateReportResult& operator=(CreateReportResult&&);
-
-    AttributionTrigger::Result status() const;
-
-    const absl::optional<AttributionReport>& dropped_report() const;
-
-    absl::optional<base::Time> report_time() const;
-
-    absl::optional<DeactivatedSource> GetDeactivatedSource() const;
-
-   private:
-    AttributionTrigger::Result status_;
-
-    // `AttributionTrigger::Result::kInternalError` is only associated with a
-    // dropped report if the browser succeeded in running the
-    // source-to-attribute logic.
-    absl::optional<AttributionReport> dropped_report_;
-
-    // Null unless `dropped_report_`'s source was deactivated.
-    absl::optional<DeactivatedSource::Reason>
-        dropped_report_source_deactivation_reason_;
-
-    // Null unless `status` is `kSuccess` or `kSuccessDroppedLowerPriority`.
-    absl::optional<base::Time> report_time_;
-  };
-
   // Finds all stored sources matching a given `trigger`, and stores the
   // new associated report. Only active sources will receive new attributions.
   // Returns whether a new report has been scheduled/added to storage.
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index 085f044..de2582c 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -24,6 +24,7 @@
 #include "base/time/time.h"
 #include "content/browser/attribution_reporting/aggregatable_attribution.h"
 #include "content/browser/attribution_reporting/attribution_info.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate.h"
 #include "content/browser/attribution_reporting/attribution_storage_sql_migrations.h"
@@ -200,9 +201,6 @@
 
 namespace {
 
-using CreateReportResult = ::content::AttributionStorage::CreateReportResult;
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 const base::FilePath::CharType kInMemoryPath[] = FILE_PATH_LITERAL(":memory");
 
 const base::FilePath::CharType kDatabasePath[] =
diff --git a/content/browser/attribution_reporting/attribution_storage_unittest.cc b/content/browser/attribution_reporting/attribution_storage_unittest.cc
index 5edb817..2537a83 100644
--- a/content/browser/attribution_reporting/attribution_storage_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_unittest.cc
@@ -24,6 +24,7 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "content/browser/attribution_reporting/aggregatable_attribution.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_storage_sql.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
@@ -42,8 +43,6 @@
 
 namespace {
 
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 using ::testing::AllOf;
 using ::testing::ElementsAre;
 using ::testing::Ge;
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc
index 9b11a0d..24f7ccb 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.cc
+++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -26,8 +26,6 @@
 
 namespace {
 
-using DeactivatedSource = ::content::AttributionStorage::DeactivatedSource;
-
 const char kDefaultImpressionOrigin[] = "https://impression.test/";
 const char kDefaultTriggerOrigin[] = "https://sub.conversion.test/";
 const char kDefaultTriggerDestination[] = "https://conversion.test/";
@@ -213,7 +211,7 @@
 }
 
 void MockAttributionManager::NotifyTriggerHandled(
-    const AttributionStorage::CreateReportResult& result) {
+    const CreateReportResult& result) {
   for (auto& observer : observers_)
     observer.OnTriggerHandled(result);
 }
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index 84de4407..9938458 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -23,6 +23,7 @@
 #include "content/browser/attribution_reporting/attribution_info.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_manager_impl.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_storage.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate.h"
@@ -296,14 +297,12 @@
 
   void NotifySourcesChanged();
   void NotifyReportsChanged();
-  void NotifySourceDeactivated(
-      const AttributionStorage::DeactivatedSource& source);
+  void NotifySourceDeactivated(const DeactivatedSource& source);
   void NotifySourceHandled(const StorableSource& source,
                            StorableSource::Result result);
   void NotifyReportSent(const AttributionReport& report,
                         const SendResult& info);
-  void NotifyTriggerHandled(
-      const AttributionStorage::CreateReportResult& result);
+  void NotifyTriggerHandled(const CreateReportResult& result);
 
   void SetDataHostManager(std::unique_ptr<AttributionDataHostManager> manager);
 
@@ -494,13 +493,11 @@
 
 bool operator==(const SendResult& a, const SendResult& b);
 
-bool operator==(const AttributionStorage::DeactivatedSource& a,
-                const AttributionStorage::DeactivatedSource& b);
+bool operator==(const DeactivatedSource& a, const DeactivatedSource& b);
 
 std::ostream& operator<<(std::ostream& out, AttributionTrigger::Result status);
 
-std::ostream& operator<<(std::ostream& out,
-                         AttributionStorage::DeactivatedSource::Reason reason);
+std::ostream& operator<<(std::ostream& out, DeactivatedSource::Reason reason);
 
 std::ostream& operator<<(std::ostream& out, RateLimitResult result);
 
@@ -545,9 +542,8 @@
 std::ostream& operator<<(std::ostream& out,
                          StoredSource::AttributionLogic attribution_logic);
 
-std::ostream& operator<<(
-    std::ostream& out,
-    const AttributionStorage::DeactivatedSource& deactivated_source);
+std::ostream& operator<<(std::ostream& out,
+                         const DeactivatedSource& deactivated_source);
 
 std::ostream& operator<<(std::ostream& out, StorableSource::Result status);
 
diff --git a/content/browser/attribution_reporting/attributions_browsertest.cc b/content/browser/attribution_reporting/attributions_browsertest.cc
index c9d31b4..c18886f 100644
--- a/content/browser/attribution_reporting/attributions_browsertest.cc
+++ b/content/browser/attribution_reporting/attributions_browsertest.cc
@@ -11,9 +11,9 @@
 #include "base/test/values_test_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
-#include "build/build_config.h"
 #include "content/browser/attribution_reporting/attribution_manager_impl.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
@@ -32,20 +32,11 @@
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
 #include "net/test/embedded_test_server/request_handler_util.h"
+#include "services/network/test/test_network_connection_tracker.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "content/public/browser/network_service_instance.h"
-#include "services/network/public/cpp/network_connection_tracker.h"
-#endif
-
-#if BUILDFLAG(IS_FUCHSIA)
-#include "content/public/browser/network_service_instance.h"
-#include "services/network/test/test_network_connection_tracker.h"
-#endif
-
 namespace content {
 
 namespace {
@@ -136,52 +127,11 @@
   }
 };
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-class ConnectionWaiter
-    : public network::NetworkConnectionTracker::NetworkConnectionObserver {
- public:
-  static void WaitUntilOnline() {
-    ConnectionWaiter waiter;
-    waiter.run_loop_.Run();
-  }
-
-  ~ConnectionWaiter() override {
-    content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(
-        this);
-  }
-
- private:
-  ConnectionWaiter() {
-    content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
-  }
-
-  // network::NetworkConnectionTracker::NetworkConnectionObserver:
-  void OnConnectionChanged(network::mojom::ConnectionType type) override {
-    if (!content::GetNetworkConnectionTracker()->IsOffline())
-      run_loop_.Quit();
-  }
-
-  base::RunLoop run_loop_;
-};
-#endif
-
 }  // namespace
 
 class AttributionsBrowserTest : public ContentBrowserTest {
  public:
-  AttributionsBrowserTest() {
-    AttributionManagerImpl::RunInMemoryForTesting();
-
-#if BUILDFLAG(IS_FUCHSIA)
-    // Fuchsia's network connection tracker always seems to indicate offline in
-    // these tests, so override the tracker with a test one, which defaults to
-    // online. See crbug.com/1285057 for details.
-    network_connection_tracker_ =
-        network::TestNetworkConnectionTracker::CreateInstance();
-    content::SetNetworkConnectionTrackerForTesting(
-        network::TestNetworkConnectionTracker::GetInstance());
-#endif
-  }
+  AttributionsBrowserTest() { AttributionManagerImpl::RunInMemoryForTesting(); }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitch(switches::kConversionsDebugMode);
@@ -195,6 +145,14 @@
   }
 
   void SetUpOnMainThread() override {
+    // These tests don't cover online/offline behavior; that is covered by
+    // `AttributionManagerImpl`'s unit tests. Here we use a fake tracker that
+    // always indicates online. See crbug.com/1285057 for details.
+    network_connection_tracker_ =
+        network::TestNetworkConnectionTracker::CreateInstance();
+    SetNetworkConnectionTrackerForTesting(nullptr);
+    SetNetworkConnectionTrackerForTesting(network_connection_tracker_.get());
+
     host_resolver()->AddRule("*", "127.0.0.1");
 
     https_server_ = std::make_unique<net::EmbeddedTestServer>(
@@ -203,14 +161,10 @@
     net::test_server::RegisterDefaultHandlers(https_server_.get());
     https_server_->ServeFilesFromSourceDirectory("content/test/data");
     SetupCrossSiteRedirector(https_server_.get());
+  }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    // On ChromeOS the connection type comes from a fake Shill service, which
-    // is configured with a fake ethernet connection asynchronously. Wait for
-    // the connection type to be available to avoid getting notified of the
-    // connection change halfway through the test. See crrev.com/c/1684295.
-    ConnectionWaiter::WaitUntilOnline();
-#endif
+  void TearDownOnMainThread() override {
+    SetNetworkConnectionTrackerForTesting(nullptr);
   }
 
   WebContents* web_contents() { return shell()->web_contents(); }
@@ -220,10 +174,8 @@
  private:
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
 
-#if BUILDFLAG(IS_FUCHSIA)
   std::unique_ptr<network::TestNetworkConnectionTracker>
       network_connection_tracker_;
-#endif
 };
 
 // Verifies that storage initialization does not hang when initialized in a
diff --git a/content/browser/back_forward_cache_browsertest.h b/content/browser/back_forward_cache_browsertest.h
index 5194ae41..31d9a88 100644
--- a/content/browser/back_forward_cache_browsertest.h
+++ b/content/browser/back_forward_cache_browsertest.h
@@ -171,7 +171,6 @@
 
   bool same_site_back_forward_cache_enabled_ = true;
   bool skip_same_site_if_unload_exists_ = false;
-  bool check_eligibility_after_pagehide_ = false;
   std::string unload_support_ = "always";
 
   const int kMaxBufferedBytesPerProcess = 10000;
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 9e32df9..9382b2a 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -39,7 +39,6 @@
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/page/page.mojom.h"
 #include "third_party/blink/public/web/web_ax_enums.h"
-#include "third_party/blink/public/web/web_console_message.h"
 #include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/window_open_disposition.h"
diff --git a/content/browser/web_package/web_bundle_blob_data_source.cc b/content/browser/web_package/web_bundle_blob_data_source.cc
index e28c04b5..1ce8a31 100644
--- a/content/browser/web_package/web_bundle_blob_data_source.cc
+++ b/content/browser/web_package/web_bundle_blob_data_source.cc
@@ -308,6 +308,16 @@
       base::Unretained(this), offset, length, std::move(callback)));
 }
 
+void WebBundleBlobDataSource::BlobDataSourceCore::Length(
+    LengthCallback callback) {
+  std::move(callback).Run(-1);
+}
+
+void WebBundleBlobDataSource::BlobDataSourceCore::IsRandomAccessContext(
+    IsRandomAccessContextCallback callback) {
+  std::move(callback).Run(false);
+}
+
 void WebBundleBlobDataSource::BlobDataSourceCore::StreamingBlobDone(
     storage::BlobBuilderFromStream* builder,
     std::unique_ptr<storage::BlobDataHandle> result) {
diff --git a/content/browser/web_package/web_bundle_blob_data_source.h b/content/browser/web_package/web_bundle_blob_data_source.h
index fd5af0f..25cf166 100644
--- a/content/browser/web_package/web_bundle_blob_data_source.h
+++ b/content/browser/web_package/web_bundle_blob_data_source.h
@@ -78,6 +78,10 @@
     // Implements web_package::mojom::BundleDataSource.
     void Read(uint64_t offset, uint64_t length, ReadCallback callback) override;
 
+    void Length(LengthCallback callback) override;
+
+    void IsRandomAccessContext(IsRandomAccessContextCallback callback) override;
+
     void StreamingBlobDone(storage::BlobBuilderFromStream* builder,
                            std::unique_ptr<storage::BlobDataHandle> result);
     void WaitForBlob(base::OnceClosure closure);
diff --git a/content/browser/web_package/web_bundle_blob_data_source_unittest.cc b/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
index 3058217..92cbc1e 100644
--- a/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
+++ b/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
@@ -5,9 +5,9 @@
 #include "content/browser/web_package/web_bundle_blob_data_source.h"
 
 #include "base/files/scoped_temp_dir.h"
-#include "base/run_loop.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
+#include "base/test/test_future.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/system/data_pipe_utils.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -221,28 +221,38 @@
   EXPECT_FALSE(read_result);
 }
 
+TEST_F(WebBundleBlobDataSourceTest, Length) {
+  const std::string kData = "Test Data";
+  mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
+  auto source = CreateTestDataSource(kData, &remote_source);
+
+  base::test::TestFuture<int64_t> future;
+  remote_source->Length(future.GetCallback());
+  EXPECT_EQ(-1, future.Get());
+}
+
+TEST_F(WebBundleBlobDataSourceTest, IsRandomAccessContext) {
+  const std::string kData = "Test Data";
+  mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
+  auto source = CreateTestDataSource(kData, &remote_source);
+
+  base::test::TestFuture<bool> future;
+  remote_source->IsRandomAccessContext(future.GetCallback());
+  EXPECT_EQ(false, future.Get());
+}
+
 TEST_F(WebBundleBlobDataSourceTest, ReadToDataPipe) {
   const std::string kData = "Test Data";
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::ERR_FAILED;
-  source->ReadToDataPipe(
-      1, 3, std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(1, 3, std::move(producer), future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::OK, read_response_body_result);
 
   std::string result_string;
@@ -256,23 +266,13 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::ERR_FAILED;
-  source->ReadToDataPipe(
-      0, 100, std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(0, 100, std::move(producer), future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::OK, read_response_body_result);
 
   std::string result_string;
@@ -285,23 +285,13 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::ERR_FAILED;
-  source->ReadToDataPipe(
-      10, 100, std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(10, 100, std::move(producer), future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, read_response_body_result);
 }
 
@@ -310,23 +300,14 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source, kData.size() - 1);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::OK;
-  source->ReadToDataPipe(
-      0, kData.size(), std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(0, kData.size(), std::move(producer),
+                         future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::OK, read_response_body_result);
 
   std::string result_string;
@@ -339,23 +320,14 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source, kData.size() + 1);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::OK;
-  source->ReadToDataPipe(
-      0, kData.size(), std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(0, kData.size(), std::move(producer),
+                         future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::OK, read_response_body_result);
 
   std::string result_string;
@@ -370,23 +342,13 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(content, &remote_source);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::OK;
-  source->ReadToDataPipe(
-      1, 3, std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
-  run_loop.Run();
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(1, 3, std::move(producer), future.GetCallback());
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::ERR_FAILED, read_response_body_result);
 }
 
@@ -395,24 +357,14 @@
   mojo::Remote<web_package::mojom::BundleDataSource> remote_source;
   auto source = CreateTestDataSource(kData, &remote_source);
 
-  base::RunLoop run_loop;
-
   mojo::ScopedDataPipeProducerHandle producer;
   mojo::ScopedDataPipeConsumerHandle consumer;
   CHECK_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(nullptr, producer, consumer));
 
-  net::Error read_response_body_result = net::OK;
-  source->ReadToDataPipe(
-      1, 3, std::move(producer),
-      base::BindOnce(
-          [](base::OnceClosure closure, net::Error* read_response_body_result,
-             net::Error result) {
-            *read_response_body_result = result;
-            std::move(closure).Run();
-          },
-          run_loop.QuitClosure(), &read_response_body_result));
+  base::test::TestFuture<net::Error> future;
+  source->ReadToDataPipe(1, 3, std::move(producer), future.GetCallback());
   source.reset();
-  run_loop.Run();
+  net::Error read_response_body_result = future.Get();
   EXPECT_EQ(net::ERR_FAILED, read_response_body_result);
 }
 
diff --git a/content/browser/web_package/web_bundle_file_browsertest.cc b/content/browser/web_package/web_bundle_file_browsertest.cc
index 2a584e5..ff77fb1 100644
--- a/content/browser/web_package/web_bundle_file_browsertest.cc
+++ b/content/browser/web_package/web_bundle_file_browsertest.cc
@@ -204,8 +204,7 @@
                                                      test_data_url);
 
   EXPECT_EQ(
-      "Failed to read metadata of Web Bundle file: Wrong CBOR array size of "
-      "the top-level structure",
+      "Failed to read metadata of Web Bundle file: Invalid bundle length.",
       console_message);
 }
 
diff --git a/content/test/attribution_simulator_impl.cc b/content/test/attribution_simulator_impl.cc
index f73df3ec..d30ff788 100644
--- a/content/test/attribution_simulator_impl.cc
+++ b/content/test/attribution_simulator_impl.cc
@@ -24,10 +24,10 @@
 #include "content/browser/attribution_reporting/attribution_insecure_random_generator.h"
 #include "content/browser/attribution_reporting/attribution_manager_impl.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
+#include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_random_generator.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_report_sender.h"
-#include "content/browser/attribution_reporting/attribution_storage.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate_impl.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
@@ -202,8 +202,7 @@
     rejected_sources_.push_back(std::move(dict));
   }
 
-  void OnTriggerHandled(
-      const AttributionStorage::CreateReportResult& result) override {
+  void OnTriggerHandled(const CreateReportResult& result) override {
     DCHECK(!input_values_.empty());
     base::Value input_value = std::move(input_values_.front());
     input_values_.pop_front();
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
index 6ab67767..213e5da 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -332,6 +332,8 @@
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] WebglExtension_WEBGL_multi_draw_instanced_base_vertex_base_instance [ Failure ]
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] conformance/extensions/s3tc-and-rgtc.html [ Failure ]
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] conformance/extensions/webgl-compressed-texture-s3tc-srgb.html [ Failure ]
+crbug.com/angleproject/6430 [ mac passthrough angle-metal ] conformance/ogles/GL/build/build_009_to_016.html [ Failure ]
+crbug.com/angleproject/6430 [ mac passthrough angle-metal ] conformance/ogles/GL/build/build_017_to_024.html [ Failure ]
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html [ Failure ]
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] deqp/functional/gles3/fboinvalidate/sub.html [ Failure ]
 crbug.com/angleproject/6430 [ mac passthrough angle-metal ] deqp/functional/gles3/fboinvalidate/whole.html [ Failure ]
diff --git a/crypto/nss_util.cc b/crypto/nss_util.cc
index ad5fb8a..f82a6286 100644
--- a/crypto/nss_util.cc
+++ b/crypto/nss_util.cc
@@ -16,6 +16,7 @@
 #include <utility>
 
 #include "base/base_paths.h"
+#include "base/containers/flat_map.h"
 #include "base/debug/alias.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -84,9 +85,8 @@
       reinterpret_cast<crypto::CryptoModuleBlockingPasswordDelegate*>(arg);
   if (delegate) {
     bool cancelled = false;
-    std::string password = delegate->RequestPassword(PK11_GetTokenName(slot),
-                                                     retry != PR_FALSE,
-                                                     &cancelled);
+    std::string password = delegate->RequestPassword(
+        PK11_GetTokenName(slot), retry != PR_FALSE, &cancelled);
     if (cancelled)
       return nullptr;
     char* result = PORT_Strdup(password.c_str());
@@ -105,9 +105,7 @@
  private:
   friend struct base::LazyInstanceTraitsBase<NSPRInitSingleton>;
 
-  NSPRInitSingleton() {
-    PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
-  }
+  NSPRInitSingleton() { PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); }
 
   // NOTE(willchan): We don't actually cleanup on destruction since we leak NSS
   // to prevent non-joinable threads from using NSS after it's already been
@@ -115,8 +113,8 @@
   ~NSPRInitSingleton() = delete;
 };
 
-base::LazyInstance<NSPRInitSingleton>::Leaky
-    g_nspr_singleton = LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<NSPRInitSingleton>::Leaky g_nspr_singleton =
+    LAZY_INSTANCE_INITIALIZER;
 
 // Force a crash with error info on NSS_NoDB_Init failure.
 void CrashOnNSSInitFailure() {
@@ -130,6 +128,55 @@
 }
 
 class NSSInitSingleton {
+ public:
+  // NOTE(willchan): We don't actually cleanup on destruction since we leak NSS
+  // to prevent non-joinable threads from using NSS after it's already been
+  // shut down.
+  ~NSSInitSingleton() = delete;
+
+  ScopedPK11Slot OpenSoftwareNSSDB(const base::FilePath& path,
+                                   const std::string& description) {
+    base::AutoLock lock(slot_map_lock_);
+
+    auto slot_map_iter = slot_map_.find(path);
+    if (slot_map_iter != slot_map_.end()) {
+      // PK11_ReferenceSlot returns a new PK11Slot instance which refers
+      // to the same slot.
+      return ScopedPK11Slot(PK11_ReferenceSlot(slot_map_iter->second.get()));
+    }
+
+    const std::string modspec =
+        base::StringPrintf("configDir='sql:%s' tokenDescription='%s'",
+                           path.value().c_str(), description.c_str());
+    PK11SlotInfo* db_slot_info = SECMOD_OpenUserDB(modspec.c_str());
+    if (db_slot_info) {
+      if (PK11_NeedUserInit(db_slot_info))
+        PK11_InitPin(db_slot_info, nullptr, nullptr);
+      slot_map_[path] = ScopedPK11Slot(PK11_ReferenceSlot(db_slot_info));
+    } else {
+      LOG(ERROR) << "Error opening persistent database (" << modspec
+                 << "): " << GetNSSErrorMessage();
+    }
+
+    return ScopedPK11Slot(db_slot_info);
+  }
+
+  SECStatus CloseSoftwareNSSDB(PK11SlotInfo* slot) {
+    if (!slot) {
+      return SECFailure;
+    }
+
+    base::AutoLock lock(slot_map_lock_);
+    CK_SLOT_ID slot_id = PK11_GetSlotID(slot);
+    for (auto const& [stored_path, stored_slot] : slot_map_) {
+      if (PK11_GetSlotID(stored_slot.get()) == slot_id) {
+        slot_map_.erase(stored_path);
+        return SECMOD_CloseUserDB(slot);
+      }
+    }
+    return SECFailure;
+  }
+
  private:
   friend struct base::LazyInstanceTraitsBase<NSSInitSingleton>;
 
@@ -167,8 +214,8 @@
 #endif
       if (status != SECSuccess) {
         LOG(ERROR) << "Error initializing NSS with a persistent "
-                      "database (" << nss_config_dir
-                   << "): " << GetNSSErrorMessage();
+                      "database ("
+                   << nss_config_dir << "): " << GetNSSErrorMessage();
       }
     }
     if (status != SECSuccess) {
@@ -203,35 +250,35 @@
     // Disable MD5 certificate signatures. (They are disabled by default in
     // NSS 3.14.)
     NSS_SetAlgorithmPolicy(SEC_OID_MD5, 0, NSS_USE_ALG_IN_CERT_SIGNATURE);
-    NSS_SetAlgorithmPolicy(SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION,
-                           0, NSS_USE_ALG_IN_CERT_SIGNATURE);
+    NSS_SetAlgorithmPolicy(SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION, 0,
+                           NSS_USE_ALG_IN_CERT_SIGNATURE);
   }
 
-  // NOTE(willchan): We don't actually cleanup on destruction since we leak NSS
-  // to prevent non-joinable threads from using NSS after it's already been
-  // shut down.
-  ~NSSInitSingleton() = delete;
+  // Stores opened software NSS databases.
+  base::flat_map<base::FilePath, /*slot=*/ScopedPK11Slot> slot_map_
+      GUARDED_BY(slot_map_lock_);
+  // Ensures thread-safety for the methods that modify slot_map_.
+  // Performance considerations:
+  // Opening/closing a database is a rare operation in Chrome. Actually opening
+  // a database is a blocking I/O operation. Chrome doesn't open a lot of
+  // different databases in parallel. So, waiting for another thread to finish
+  // opening a database and (almost certainly) reusing the result is comparable
+  // to opening the same database twice in parallel (but the latter is not
+  // supported by NSS).
+  base::Lock slot_map_lock_;
 };
 
-base::LazyInstance<NSSInitSingleton>::Leaky
-    g_nss_singleton = LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<NSSInitSingleton>::Leaky g_nss_singleton =
+    LAZY_INSTANCE_INITIALIZER;
 }  // namespace
 
 ScopedPK11Slot OpenSoftwareNSSDB(const base::FilePath& path,
                                  const std::string& description) {
-  const std::string modspec =
-      base::StringPrintf("configDir='sql:%s' tokenDescription='%s'",
-                         path.value().c_str(),
-                         description.c_str());
-  PK11SlotInfo* db_slot = SECMOD_OpenUserDB(modspec.c_str());
-  if (db_slot) {
-    if (PK11_NeedUserInit(db_slot))
-      PK11_InitPin(db_slot, nullptr, nullptr);
-  } else {
-    LOG(ERROR) << "Error opening persistent database (" << modspec
-               << "): " << GetNSSErrorMessage();
-  }
-  return ScopedPK11Slot(db_slot);
+  return g_nss_singleton.Get().OpenSoftwareNSSDB(path, description);
+}
+
+SECStatus CloseSoftwareNSSDB(PK11SlotInfo* slot) {
+  return g_nss_singleton.Get().CloseSoftwareNSSDB(slot);
 }
 
 void EnsureNSPRInit() {
@@ -247,9 +294,9 @@
 }
 
 AutoSECMODListReadLock::AutoSECMODListReadLock()
-      : lock_(SECMOD_GetDefaultModuleListLock()) {
-    SECMOD_GetReadLock(lock_);
-  }
+    : lock_(SECMOD_GetDefaultModuleListLock()) {
+  SECMOD_GetReadLock(lock_);
+}
 
 AutoSECMODListReadLock::~AutoSECMODListReadLock() {
   SECMOD_ReleaseReadLock(lock_);
diff --git a/crypto/nss_util_chromeos.cc b/crypto/nss_util_chromeos.cc
index 6ccc9d3..c30801b 100644
--- a/crypto/nss_util_chromeos.cc
+++ b/crypto/nss_util_chromeos.cc
@@ -53,9 +53,9 @@
 
   ~ChromeOSUserData() {
     if (public_slot_) {
-      SECStatus status = SECMOD_CloseUserDB(public_slot_.get());
+      SECStatus status = CloseSoftwareNSSDB(public_slot_.get());
       if (status != SECSuccess)
-        PLOG(ERROR) << "SECMOD_CloseUserDB failed: " << PORT_GetError();
+        PLOG(ERROR) << "CloseSoftwareNSSDB failed: " << PORT_GetError();
     }
   }
 
diff --git a/crypto/nss_util_internal.h b/crypto/nss_util_internal.h
index ae2e784..24fa80c 100644
--- a/crypto/nss_util_internal.h
+++ b/crypto/nss_util_internal.h
@@ -23,12 +23,22 @@
 
 namespace crypto {
 
-// Opens an NSS software database in folder |path|, with the (potentially)
-// user-visible description |description|. Returns the slot for the opened
-// database, or nullptr if the database could not be opened.
+// Opens an NSS software database in folder `path`, with the (potentially)
+// user-visible description `description`. Returns the slot for the opened
+// database, or nullptr if the database could not be opened. Can be called
+// multiple times for the same `path`, thread-safe.
 CRYPTO_EXPORT ScopedPK11Slot OpenSoftwareNSSDB(const base::FilePath& path,
                                                const std::string& description);
 
+// Closes the underlying database for the `slot`. All remaining slots
+// referencing the same database will remain valid objects, but won't be able to
+// successfully retrieve certificates, etc. Should be used for all databases
+// that were opened with `OpenSoftwareNSSDB` (instead of `SECMOD_CloseUserDB`).
+// Can be called multiple times. Returns `SECSuccess` if the database was
+// successfully closed, returns `SECFailure` if it was never opened, was already
+// closed by an earlier call, or failed to close. Thread-safe.
+CRYPTO_EXPORT SECStatus CloseSoftwareNSSDB(PK11SlotInfo* slot);
+
 // A helper class that acquires the SECMOD list read lock while the
 // AutoSECMODListReadLock is in scope.
 class CRYPTO_EXPORT AutoSECMODListReadLock {
diff --git a/crypto/scoped_test_nss_db.cc b/crypto/scoped_test_nss_db.cc
index f3bc4d19..3edbcb5 100644
--- a/crypto/scoped_test_nss_db.cc
+++ b/crypto/scoped_test_nss_db.cc
@@ -38,9 +38,9 @@
   base::ScopedAllowBlockingForTesting allow_blocking;
 
   if (slot_) {
-    SECStatus status = SECMOD_CloseUserDB(slot_.get());
+    SECStatus status = CloseSoftwareNSSDB(slot_.get());
     if (status != SECSuccess)
-      PLOG(ERROR) << "SECMOD_CloseUserDB failed: " << PORT_GetError();
+      PLOG(ERROR) << "CloseSoftwareNSSDB failed: " << PORT_GetError();
   }
 
   if (!temp_dir_.Delete())
diff --git a/extensions/browser/api/declarative_net_request/constants.h b/extensions/browser/api/declarative_net_request/constants.h
index 5845c4f..e362151b7 100644
--- a/extensions/browser/api/declarative_net_request/constants.h
+++ b/extensions/browser/api/declarative_net_request/constants.h
@@ -24,6 +24,7 @@
   ERROR_INVALID_RULE_PRIORITY,
   ERROR_NO_APPLICABLE_RESOURCE_TYPES,
   ERROR_EMPTY_DOMAINS_LIST,
+  ERROR_EMPTY_REQUEST_DOMAINS_LIST,
   ERROR_EMPTY_RESOURCE_TYPES_LIST,
   ERROR_EMPTY_REQUEST_METHODS_LIST,
   ERROR_EMPTY_URL_FILTER,
@@ -34,6 +35,8 @@
   ERROR_NON_ASCII_URL_FILTER,
   ERROR_NON_ASCII_DOMAIN,
   ERROR_NON_ASCII_EXCLUDED_DOMAIN,
+  ERROR_NON_ASCII_REQUEST_DOMAIN,
+  ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN,
 
   ERROR_INVALID_URL_FILTER,
   ERROR_INVALID_REDIRECT,
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
index dc6b2f8..7cede73 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer.cc
@@ -248,6 +248,11 @@
   FlatStringListOffset initiator_domains_excluded_offset =
       BuildVectorOfSharedStrings(&builder_,
                                  indexed_rule.excluded_initiator_domains);
+  FlatStringListOffset request_domains_included_offset =
+      BuildVectorOfSharedStrings(&builder_, indexed_rule.request_domains);
+  FlatStringListOffset request_domains_excluded_offset =
+      BuildVectorOfSharedStrings(&builder_,
+                                 indexed_rule.excluded_request_domains);
   FlatStringOffset url_pattern_offset =
       builder_.CreateSharedString(indexed_rule.url_pattern);
   auto embedder_conditions_offset =
@@ -258,7 +263,8 @@
       indexed_rule.request_methods, indexed_rule.activation_types,
       indexed_rule.url_pattern_type, indexed_rule.anchor_left,
       indexed_rule.anchor_right, initiator_domains_included_offset,
-      initiator_domains_excluded_offset, url_pattern_offset, indexed_rule.id,
+      initiator_domains_excluded_offset, request_domains_included_offset,
+      request_domains_excluded_offset, url_pattern_offset, indexed_rule.id,
       indexed_rule.priority, embedder_conditions_offset);
 
   if (indexed_rule.url_pattern_type !=
diff --git a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
index e2c0a2c..16e9649b6 100644
--- a/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/flat_ruleset_indexer_unittest.cc
@@ -226,7 +226,11 @@
          indexed_rule->initiator_domains ==
              ToVector(rule->initiator_domains_included()) &&
          indexed_rule->excluded_initiator_domains ==
-             ToVector(rule->initiator_domains_excluded());
+             ToVector(rule->initiator_domains_excluded()) &&
+         indexed_rule->request_domains ==
+             ToVector(rule->request_domains_included()) &&
+         indexed_rule->excluded_request_domains ==
+             ToVector(rule->request_domains_excluded());
 }
 
 // Returns all UrlRule(s) in the given |index|.
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule.cc b/extensions/browser/api/declarative_net_request/indexed_rule.cc
index 9aeeecbb..62ca5bd 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule.cc
@@ -562,6 +562,11 @@
   if (parsed_rule.condition.domains && parsed_rule.condition.domains->empty())
     return ParseResult::ERROR_EMPTY_DOMAINS_LIST;
 
+  if (parsed_rule.condition.request_domains &&
+      parsed_rule.condition.request_domains->empty()) {
+    return ParseResult::ERROR_EMPTY_REQUEST_DOMAINS_LIST;
+  }
+
   if (parsed_rule.condition.resource_types &&
       parsed_rule.condition.resource_types->empty()) {
     return ParseResult::ERROR_EMPTY_RESOURCE_TYPES_LIST;
@@ -661,6 +666,17 @@
     return ParseResult::ERROR_NON_ASCII_EXCLUDED_DOMAIN;
   }
 
+  if (!CanonicalizeDomains(std::move(parsed_rule.condition.request_domains),
+                           &indexed_rule->request_domains)) {
+    return ParseResult::ERROR_NON_ASCII_REQUEST_DOMAIN;
+  }
+
+  if (!CanonicalizeDomains(
+          std::move(parsed_rule.condition.excluded_request_domains),
+          &indexed_rule->excluded_request_domains)) {
+    return ParseResult::ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN;
+  }
+
   {
     ParseTabIds(parsed_rule.condition.tab_ids.get(), indexed_rule->tab_ids);
     ParseTabIds(parsed_rule.condition.excluded_tab_ids.get(),
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule.h b/extensions/browser/api/declarative_net_request/indexed_rule.h
index b2c399c..4c70cf5 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule.h
+++ b/extensions/browser/api/declarative_net_request/indexed_rule.h
@@ -63,6 +63,8 @@
   // Lower-cased and sorted as required by the url_pattern_index component.
   std::vector<std::string> initiator_domains;
   std::vector<std::string> excluded_initiator_domains;
+  std::vector<std::string> request_domains;
+  std::vector<std::string> excluded_request_domains;
 
   // Note: For redirect rules, exactly one of |redirect_url|,
   // |regex_substitution| or |url_transform|  will be set.
diff --git a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
index 2175868..babd5d4 100644
--- a/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_rule_unittest.cc
@@ -341,45 +341,40 @@
 TEST_F(IndexedRuleTest, DomainsParsing) {
   using DomainVec = std::vector<std::string>;
   struct {
-    std::unique_ptr<DomainVec> domains;
-    std::unique_ptr<DomainVec> excluded_domains;
+    absl::optional<DomainVec> domains;
+    absl::optional<DomainVec> excluded_domains;
     const ParseResult expected_result;
     // Only valid if |expected_result| is SUCCESS.
-    const DomainVec expected_initiator_domains;
-    const DomainVec expected_excluded_initiator_domains;
+    const DomainVec expected_domains;
+    const DomainVec expected_excluded_domains;
   } cases[] = {
-      {nullptr, nullptr, ParseResult::SUCCESS, {}, {}},
-      {std::make_unique<DomainVec>(),
-       nullptr,
+      {absl::nullopt, absl::nullopt, ParseResult::SUCCESS, {}, {}},
+      {DomainVec({}),
+       absl::nullopt,
        ParseResult::ERROR_EMPTY_DOMAINS_LIST,
        {},
        {}},
-      {nullptr, std::make_unique<DomainVec>(), ParseResult::SUCCESS, {}, {}},
-      {std::make_unique<DomainVec>(DomainVec({"a.com", "b.com", "a.com"})),
-       std::make_unique<DomainVec>(
-           DomainVec({"g.com", "XY.COM", "zzz.com", "a.com", "google.com"})),
+      {absl::nullopt, DomainVec({}), ParseResult::SUCCESS, {}, {}},
+      {DomainVec({"a.com", "b.com", "a.com"}),
+       DomainVec({"g.com", "XY.COM", "zzz.com", "a.com", "google.com"}),
        ParseResult::SUCCESS,
        {"a.com", "a.com", "b.com"},
        {"google.com", "zzz.com", "xy.com", "a.com", "g.com"}},
       // Domain with non-ascii characters.
-      {std::make_unique<DomainVec>(
-           DomainVec({base::WideToUTF8(L"abc\x2010" /*hyphen*/ L"def.com")})),
-       nullptr,
+      {DomainVec({base::WideToUTF8(L"abc\x2010" /*hyphen*/ L"def.com")}),
+       absl::nullopt,
        ParseResult::ERROR_NON_ASCII_DOMAIN,
        {},
        {}},
       // Excluded domain with non-ascii characters.
-      {nullptr,
-       std::make_unique<DomainVec>(
-           DomainVec({base::WideToUTF8(L"36\x00b0"
-                                       L"c.com" /*36°c.com*/)})),
+      {absl::nullopt,
+       DomainVec({base::WideToUTF8(L"36\x00b0c.com" /*36°c.com*/)}),
        ParseResult::ERROR_NON_ASCII_EXCLUDED_DOMAIN,
        {},
        {}},
       // Internationalized domain in punycode.
-      {std::make_unique<DomainVec>(
-           DomainVec({"xn--36c-tfa.com" /* punycode for 36°c.com*/})),
-       nullptr,
+      {DomainVec({"xn--36c-tfa.com" /* punycode for 36°c.com*/}),
+       absl::nullopt,
        ParseResult::SUCCESS,
        {"xn--36c-tfa.com"},
        {}},
@@ -387,20 +382,68 @@
 
   for (size_t i = 0; i < base::size(cases); ++i) {
     SCOPED_TRACE(base::StringPrintf("Testing case[%" PRIuS "]", i));
-    dnr_api::Rule rule = CreateGenericParsedRule();
-    rule.condition.domains = std::move(cases[i].domains);
-    rule.condition.excluded_domains = std::move(cases[i].excluded_domains);
+    dnr_api::Rule initiator_domains_rule = CreateGenericParsedRule();
+    dnr_api::Rule request_domains_rule = CreateGenericParsedRule();
 
-    IndexedRule indexed_rule;
-    ParseResult result = IndexedRule::CreateIndexedRule(
-        std::move(rule), GetBaseURL(), kMinValidStaticRulesetID, &indexed_rule);
+    if (cases[i].domains) {
+      auto initiator_domains = std::make_unique<DomainVec>(*cases[i].domains);
+      auto request_domains = std::make_unique<DomainVec>(*cases[i].domains);
+      initiator_domains_rule.condition.domains = std::move(initiator_domains);
+      request_domains_rule.condition.request_domains =
+          std::move(request_domains);
+    }
 
-    EXPECT_EQ(cases[i].expected_result, result);
-    if (result == ParseResult::SUCCESS) {
-      EXPECT_EQ(cases[i].expected_initiator_domains,
-                indexed_rule.initiator_domains);
-      EXPECT_EQ(cases[i].expected_excluded_initiator_domains,
-                indexed_rule.excluded_initiator_domains);
+    if (cases[i].excluded_domains) {
+      auto excluded_initiator_domains =
+          std::make_unique<DomainVec>(*cases[i].excluded_domains);
+      auto excluded_request_domains =
+          std::make_unique<DomainVec>(*cases[i].excluded_domains);
+      initiator_domains_rule.condition.excluded_domains =
+          std::move(excluded_initiator_domains);
+      request_domains_rule.condition.excluded_request_domains =
+          std::move(excluded_request_domains);
+    }
+
+    IndexedRule indexed_initiator_domains_rule;
+    ParseResult initiator_domains_result = IndexedRule::CreateIndexedRule(
+        std::move(initiator_domains_rule), GetBaseURL(),
+        kMinValidStaticRulesetID, &indexed_initiator_domains_rule);
+
+    IndexedRule indexed_request_domains_rule;
+    ParseResult request_domains_result = IndexedRule::CreateIndexedRule(
+        std::move(request_domains_rule), GetBaseURL(), kMinValidStaticRulesetID,
+        &indexed_request_domains_rule);
+
+    EXPECT_EQ(cases[i].expected_result, initiator_domains_result);
+
+    switch (cases[i].expected_result) {
+      case ParseResult::ERROR_EMPTY_DOMAINS_LIST:
+        EXPECT_EQ(ParseResult::ERROR_EMPTY_REQUEST_DOMAINS_LIST,
+                  request_domains_result);
+        break;
+      case ParseResult::ERROR_NON_ASCII_DOMAIN:
+        EXPECT_EQ(ParseResult::ERROR_NON_ASCII_REQUEST_DOMAIN,
+                  request_domains_result);
+        break;
+      case ParseResult::ERROR_NON_ASCII_EXCLUDED_DOMAIN:
+        EXPECT_EQ(ParseResult::ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN,
+                  request_domains_result);
+        break;
+      default:
+        EXPECT_EQ(cases[i].expected_result, request_domains_result);
+    }
+
+    if (initiator_domains_result == ParseResult::SUCCESS) {
+      EXPECT_EQ(cases[i].expected_domains,
+                indexed_initiator_domains_rule.initiator_domains);
+      EXPECT_EQ(cases[i].expected_excluded_domains,
+                indexed_initiator_domains_rule.excluded_initiator_domains);
+    }
+    if (request_domains_result == ParseResult::SUCCESS) {
+      EXPECT_EQ(cases[i].expected_domains,
+                indexed_request_domains_rule.request_domains);
+      EXPECT_EQ(cases[i].expected_excluded_domains,
+                indexed_request_domains_rule.excluded_request_domains);
     }
   }
 }
diff --git a/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc b/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
index 8d5f247..233ef7e 100644
--- a/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/indexed_ruleset_format_version_unittest.cc
@@ -154,7 +154,7 @@
   EXPECT_EQ(StripCommentsAndWhitespace(kFlatbufferSchemaExpected),
             StripCommentsAndWhitespace(flatbuffer_schema))
       << "Schema change detected; update this test and the schema version.";
-  EXPECT_EQ(26, GetIndexedRulesetFormatVersionForTesting())
+  EXPECT_EQ(27, GetIndexedRulesetFormatVersionForTesting())
       << "Update this test if you update the schema version.";
 }
 
diff --git a/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc b/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
index c6784d2..f2d4de31 100644
--- a/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
+++ b/extensions/browser/api/declarative_net_request/regex_rules_matcher.cc
@@ -53,6 +53,10 @@
     return false;
   }
 
+  // Compares included and excluded request domains.
+  if (!url_pattern_index::DoesURLMatchRequestDomainList(*params.url, rule))
+    return false;
+
   // Compares included and excluded initiator domains.
   return url_pattern_index::DoesOriginMatchInitiatorDomainList(
       params.first_party_origin, rule);
diff --git a/extensions/browser/api/declarative_net_request/ruleset_matcher_unittest.cc b/extensions/browser/api/declarative_net_request/ruleset_matcher_unittest.cc
index eb38481..38849fc 100644
--- a/extensions/browser/api/declarative_net_request/ruleset_matcher_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/ruleset_matcher_unittest.cc
@@ -630,21 +630,30 @@
   xyz_rule.condition->is_url_filter_case_sensitive = false;
   rules.push_back(xyz_rule);
 
-  // Test |domains|, |excludedDomains|.
-  TestRule google_rule = create_regex_rule(3, "google");
-  google_rule.condition->domains = std::vector<std::string>({"example.com"});
-  google_rule.condition->excluded_domains =
+  // Test `domains`, `excludedDomains`.
+  TestRule initiator_domains_rule = create_regex_rule(3, "initiator_domains");
+  initiator_domains_rule.condition->domains =
+      std::vector<std::string>({"example.com"});
+  initiator_domains_rule.condition->excluded_domains =
       std::vector<std::string>({"b.example.com"});
-  rules.push_back(google_rule);
+  rules.push_back(initiator_domains_rule);
+
+  // Test `requestDomains`, `excludedRequestDomains`.
+  TestRule request_domains_rule = create_regex_rule(4, "request_domains");
+  request_domains_rule.condition->request_domains =
+      std::vector<std::string>({"example.com"});
+  request_domains_rule.condition->excluded_request_domains =
+      std::vector<std::string>({"b.example.com"});
+  rules.push_back(request_domains_rule);
 
   // Test |resourceTypes|.
-  TestRule sub_frame_rule = create_regex_rule(4, R"((abc|def)\.com)");
+  TestRule sub_frame_rule = create_regex_rule(5, R"((abc|def)\.com)");
   sub_frame_rule.condition->resource_types =
       std::vector<std::string>({"sub_frame"});
   rules.push_back(sub_frame_rule);
 
   // Test |domainType|.
-  TestRule third_party_rule = create_regex_rule(5, R"(http://(\d+)\.com)");
+  TestRule third_party_rule = create_regex_rule(6, R"(http://(\d+)\.com)");
   third_party_rule.condition->domain_type = "thirdParty";
   rules.push_back(third_party_rule);
 
@@ -688,17 +697,17 @@
   }
 
   {
-    TestCase test_case = {"http://example.com/google"};
+    TestCase test_case = {"http://example.com/initiator_domains"};
     test_case.first_party_origin =
         url::Origin::Create(GURL("http://a.example.com"));
     test_case.is_third_party = true;
     test_case.expected_action = CreateRequestActionForTesting(
-        RequestAction::Type::BLOCK, *google_rule.id);
+        RequestAction::Type::BLOCK, *initiator_domains_rule.id);
     test_cases.push_back(std::move(test_case));
   }
 
   {
-    TestCase test_case = {"http://example.com/google"};
+    TestCase test_case = {"http://example.com/initiator_domains"};
     test_case.first_party_origin =
         url::Origin::Create(GURL("http://b.example.com"));
     test_case.is_third_party = true;
@@ -706,6 +715,33 @@
   }
 
   {
+    TestCase test_case = {"http://example.com/request_domains"};
+    test_case.first_party_origin =
+        url::Origin::Create(GURL("http://foobar.com"));
+    test_case.is_third_party = true;
+    test_case.expected_action = CreateRequestActionForTesting(
+        RequestAction::Type::BLOCK, *request_domains_rule.id);
+    test_cases.push_back(std::move(test_case));
+  }
+
+  {
+    TestCase test_case = {"http://example.com/request_domains"};
+    test_case.expected_action = CreateRequestActionForTesting(
+        RequestAction::Type::BLOCK, *request_domains_rule.id);
+    test_cases.push_back(std::move(test_case));
+  }
+
+  {
+    TestCase test_case = {"http://b.example.com/request_domains"};
+    test_cases.push_back(std::move(test_case));
+  }
+
+  {
+    TestCase test_case = {"http://foobar.com/request_domains"};
+    test_cases.push_back(std::move(test_case));
+  }
+
+  {
     TestCase test_case = {"http://abc.com"};
     test_cases.push_back(std::move(test_case));
   }
diff --git a/extensions/browser/api/declarative_net_request/test_utils.cc b/extensions/browser/api/declarative_net_request/test_utils.cc
index cf2f0d5..f77ea1fd 100644
--- a/extensions/browser/api/declarative_net_request/test_utils.cc
+++ b/extensions/browser/api/declarative_net_request/test_utils.cc
@@ -186,6 +186,9 @@
     case ParseResult::ERROR_EMPTY_DOMAINS_LIST:
       output << "ERROR_EMPTY_DOMAINS_LIST";
       break;
+    case ParseResult::ERROR_EMPTY_REQUEST_DOMAINS_LIST:
+      output << "ERROR_EMPTY_REQUEST_DOMAINS_LIST";
+      break;
     case ParseResult::ERROR_EMPTY_RESOURCE_TYPES_LIST:
       output << "ERROR_EMPTY_RESOURCE_TYPES_LIST";
       break;
@@ -210,6 +213,12 @@
     case ParseResult::ERROR_NON_ASCII_EXCLUDED_DOMAIN:
       output << "ERROR_NON_ASCII_EXCLUDED_DOMAIN";
       break;
+    case ParseResult::ERROR_NON_ASCII_REQUEST_DOMAIN:
+      output << "ERROR_NON_ASCII_REQUEST_DOMAIN";
+      break;
+    case ParseResult::ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN:
+      output << "ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN";
+      break;
     case ParseResult::ERROR_INVALID_URL_FILTER:
       output << "ERROR_INVALID_URL_FILTER";
       break;
diff --git a/extensions/browser/api/declarative_net_request/utils.cc b/extensions/browser/api/declarative_net_request/utils.cc
index 6d890c45..cbaf9ecf 100644
--- a/extensions/browser/api/declarative_net_request/utils.cc
+++ b/extensions/browser/api/declarative_net_request/utils.cc
@@ -45,12 +45,12 @@
 // url_pattern_index.fbs. Whenever an extension with an indexed ruleset format
 // version different from the one currently used by Chrome is loaded, the
 // extension ruleset will be reindexed.
-constexpr int kIndexedRulesetFormatVersion = 26;
+constexpr int kIndexedRulesetFormatVersion = 27;
 
 // This static assert is meant to catch cases where
 // url_pattern_index::kUrlPatternIndexFormatVersion is incremented without
 // updating kIndexedRulesetFormatVersion.
-static_assert(url_pattern_index::kUrlPatternIndexFormatVersion == 13,
+static_assert(url_pattern_index::kUrlPatternIndexFormatVersion == 14,
               "kUrlPatternIndexFormatVersion has changed, make sure you've "
               "also updated kIndexedRulesetFormatVersion above.");
 
@@ -423,6 +423,9 @@
     case ParseResult::ERROR_EMPTY_DOMAINS_LIST:
       return ErrorUtils::FormatErrorMessage(
           kErrorEmptyList, base::NumberToString(rule_id), kDomainsKey);
+    case ParseResult::ERROR_EMPTY_REQUEST_DOMAINS_LIST:
+      return ErrorUtils::FormatErrorMessage(
+          kErrorEmptyList, base::NumberToString(rule_id), kRequestDomainsKey);
     case ParseResult::ERROR_EMPTY_RESOURCE_TYPES_LIST:
       return ErrorUtils::FormatErrorMessage(
           kErrorEmptyList, base::NumberToString(rule_id), kResourceTypesKey);
@@ -448,6 +451,13 @@
     case ParseResult::ERROR_NON_ASCII_EXCLUDED_DOMAIN:
       return ErrorUtils::FormatErrorMessage(
           kErrorNonAscii, base::NumberToString(rule_id), kExcludedDomainsKey);
+    case ParseResult::ERROR_NON_ASCII_REQUEST_DOMAIN:
+      return ErrorUtils::FormatErrorMessage(
+          kErrorNonAscii, base::NumberToString(rule_id), kRequestDomainsKey);
+    case ParseResult::ERROR_NON_ASCII_EXCLUDED_REQUEST_DOMAIN:
+      return ErrorUtils::FormatErrorMessage(kErrorNonAscii,
+                                            base::NumberToString(rule_id),
+                                            kExcludedRequestDomainsKey);
     case ParseResult::ERROR_INVALID_URL_FILTER:
       return ErrorUtils::FormatErrorMessage(
           kErrorInvalidKey, base::NumberToString(rule_id), kUrlFilterKey);
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl
index 3162385..5a4c74c 100644
--- a/extensions/common/api/declarative_net_request.idl
+++ b/extensions/common/api/declarative_net_request.idl
@@ -252,6 +252,32 @@
     // </ul>
     DOMString[]? excludedDomains;
 
+    // The rule will only match network requests when the domain matches one
+    // from the list of <code>requestDomains</code>. If the list is omitted,
+    // the rule is applied to requests from all domains. An empty list is not
+    // allowed.
+    //
+    // Notes:
+    // <ul>
+    //  <li>Sub-domains like "a.example.com" are also allowed.</li>
+    //  <li>The entries must consist of only ascii characters.</li>
+    //  <li>Use punycode encoding for internationalized domains.</li>
+    // </ul>
+    [nodoc] DOMString[]? requestDomains;
+
+    // The rule will not match network requests when the domains matches one
+    // from the list of <code>excludedDomains</code>. If the list is empty or
+    // omitted, no domains are excluded. This takes precedence over
+    // <code>requestDomains</code>.
+    //
+    // Notes:
+    // <ul>
+    //  <li>Sub-domains like "a.example.com" are also allowed.</li>
+    //  <li>The entries must consist of only ascii characters.</li>
+    //  <li>Use punycode encoding for internationalized domains.</li>
+    // </ul>
+    [nodoc] DOMString[]? excludedRequestDomains;
+
     // List of resource types which the rule can match. An empty list is not
     // allowed.
     //
diff --git a/extensions/common/api/declarative_net_request/constants.cc b/extensions/common/api/declarative_net_request/constants.cc
index c25b59dc..c77651a 100644
--- a/extensions/common/api/declarative_net_request/constants.cc
+++ b/extensions/common/api/declarative_net_request/constants.cc
@@ -19,6 +19,8 @@
 const char kIsUrlFilterCaseSensitiveKey[] = "isUrlFilterCaseSensitive";
 const char kDomainsKey[] = "domains";
 const char kExcludedDomainsKey[] = "excludedDomains";
+const char kRequestDomainsKey[] = "requestDomains";
+const char kExcludedRequestDomainsKey[] = "excludedRequestDomains";
 const char kResourceTypesKey[] = "resourceTypes";
 const char kRequestMethodsKey[] = "requestMethods";
 const char kExcludedRequestMethodsKey[] = "excludedRequestMethods";
diff --git a/extensions/common/api/declarative_net_request/constants.h b/extensions/common/api/declarative_net_request/constants.h
index 262ae672..4d795778 100644
--- a/extensions/common/api/declarative_net_request/constants.h
+++ b/extensions/common/api/declarative_net_request/constants.h
@@ -47,6 +47,8 @@
 extern const char kIsUrlFilterCaseSensitiveKey[];
 extern const char kDomainsKey[];
 extern const char kExcludedDomainsKey[];
+extern const char kRequestDomainsKey[];
+extern const char kExcludedRequestDomainsKey[];
 extern const char kResourceTypesKey[];
 extern const char kExcludedResourceTypesKey[];
 extern const char kRequestMethodsKey[];
diff --git a/extensions/common/api/declarative_net_request/test_utils.cc b/extensions/common/api/declarative_net_request/test_utils.cc
index 555324a..71c1f0165d 100644
--- a/extensions/common/api/declarative_net_request/test_utils.cc
+++ b/extensions/common/api/declarative_net_request/test_utils.cc
@@ -76,6 +76,8 @@
            is_url_filter_case_sensitive);
   SetValue(dict.get(), kDomainsKey, domains);
   SetValue(dict.get(), kExcludedDomainsKey, excluded_domains);
+  SetValue(dict.get(), kRequestDomainsKey, request_domains);
+  SetValue(dict.get(), kExcludedRequestDomainsKey, excluded_request_domains);
   SetValue(dict.get(), kRequestMethodsKey, request_methods);
   SetValue(dict.get(), kExcludedRequestMethodsKey, excluded_request_methods);
   SetValue(dict.get(), kResourceTypesKey, resource_types);
diff --git a/extensions/common/api/declarative_net_request/test_utils.h b/extensions/common/api/declarative_net_request/test_utils.h
index 9a2ad58..3a69424 100644
--- a/extensions/common/api/declarative_net_request/test_utils.h
+++ b/extensions/common/api/declarative_net_request/test_utils.h
@@ -43,6 +43,8 @@
   absl::optional<bool> is_url_filter_case_sensitive;
   absl::optional<std::vector<std::string>> domains;
   absl::optional<std::vector<std::string>> excluded_domains;
+  absl::optional<std::vector<std::string>> request_domains;
+  absl::optional<std::vector<std::string>> excluded_request_domains;
   absl::optional<std::vector<std::string>> request_methods;
   absl::optional<std::vector<std::string>> excluded_request_methods;
   absl::optional<std::vector<std::string>> resource_types;
diff --git a/infra/config/generated/builders/ci/linux-swangle-chromium-x64/properties.json b/infra/config/generated/builders/ci/linux-swangle-chromium-x64/properties.json
index 31e1f463..fa31d7d4 100644
--- a/infra/config/generated/builders/ci/linux-swangle-chromium-x64/properties.json
+++ b/infra/config/generated/builders/ci/linux-swangle-chromium-x64/properties.json
@@ -1,9 +1,8 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org",
-    "use_luci_auth": true
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 500,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/ci/linux-swangle-x64/properties.json b/infra/config/generated/builders/ci/linux-swangle-x64/properties.json
index 31e1f463..fa31d7d4 100644
--- a/infra/config/generated/builders/ci/linux-swangle-x64/properties.json
+++ b/infra/config/generated/builders/ci/linux-swangle-x64/properties.json
@@ -1,9 +1,8 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org",
-    "use_luci_auth": true
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 500,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index f2af63a1..848d01273 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -34873,11 +34873,10 @@
       }
       properties:
         '{'
-        '  "$build/goma": {'
-        '    "enable_ats": true,'
-        '    "rpc_extra_params": "?prod",'
-        '    "server_host": "goma.chromium.org",'
-        '    "use_luci_auth": true'
+        '  "$build/reclient": {'
+        '    "instance": "rbe-chromium-trusted",'
+        '    "jobs": 500,'
+        '    "metrics_project": "chromium-reclient-metrics"'
         '  },'
         '  "$recipe_engine/resultdb/test_presentation": {'
         '    "column_keys": [],'
@@ -34948,11 +34947,10 @@
       }
       properties:
         '{'
-        '  "$build/goma": {'
-        '    "enable_ats": true,'
-        '    "rpc_extra_params": "?prod",'
-        '    "server_host": "goma.chromium.org",'
-        '    "use_luci_auth": true'
+        '  "$build/reclient": {'
+        '    "instance": "rbe-chromium-trusted",'
+        '    "jobs": 500,'
+        '    "metrics_project": "chromium-reclient-metrics"'
         '  },'
         '  "$recipe_engine/resultdb/test_presentation": {'
         '    "column_keys": [],'
diff --git a/infra/config/subprojects/chromium/ci/chromium.swangle.star b/infra/config/subprojects/chromium/ci/chromium.swangle.star
index 0fdcbe3..4a7c58f 100644
--- a/infra/config/subprojects/chromium/ci/chromium.swangle.star
+++ b/infra/config/subprojects/chromium/ci/chromium.swangle.star
@@ -4,7 +4,7 @@
 """Definitions of builders in the chromium.swangle builder group."""
 
 load("//lib/builders.star", "goma", "sheriff_rotations")
-load("//lib/ci.star", "ci")
+load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
 load("//lib/consoles.star", "consoles")
 
 ci.defaults.set(
@@ -43,6 +43,9 @@
         short_name = "x64",
     ),
     executable = ci.DEFAULT_EXECUTABLE,
+    goma_backend = None,
+    reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+    reclient_instance = rbe_instance.DEFAULT,
 )
 
 ci.gpu.linux_builder(
@@ -51,6 +54,9 @@
         category = "ToT ANGLE|Linux",
         short_name = "x64",
     ),
+    goma_backend = None,
+    reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+    reclient_instance = rbe_instance.DEFAULT,
 )
 
 ci.gpu.linux_builder(
@@ -59,6 +65,9 @@
         category = "ToT SwiftShader|Linux",
         short_name = "x64",
     ),
+    goma_backend = None,
+    reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+    reclient_instance = rbe_instance.DEFAULT,
 )
 
 ci.gpu.linux_builder(
@@ -68,6 +77,9 @@
         short_name = "x64",
     ),
     executable = ci.DEFAULT_EXECUTABLE,
+    goma_backend = None,
+    reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+    reclient_instance = rbe_instance.DEFAULT,
 )
 
 ci.gpu.mac_builder(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
index 8581f3b1..97cfb021 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
@@ -176,6 +176,9 @@
 
 try_.builder(
     name = "linux-chromeos-dbg",
+    # The CI builder that this mirrors is enabled on branches, so this will
+    # allow testing changes that would break it before submitting
+    branch_selector = branches.STANDARD_MILESTONE,
 )
 
 try_.builder(
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd
index 5f66e0a..5df3746 100644
--- a/ios/chrome/app/strings/ios_chromium_strings.grd
+++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -271,6 +271,21 @@
       <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE" desc="Title of the screen suggesting to the user to sign in">
         Make Chromium Your Own
       </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX" desc="Checkbox to accept the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
+        Help Improve Chromium's Features and Performance
+        </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION" desc="Text to explain how the user can help to improve Chrome by accepting the metrics reporting consent. Bullet points lines should start with 2 spaces, followed by • and with a space right after. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
+        When on:
+<ph name="BEGIN_INDENT">BEGIN_INDENT</ph>  • Help make Chromium better for people who use it the way you do<ph name="END_INDENT">END_INDENT</ph>
+
+Things to consider:
+<ph name="BEGIN_INDENT">BEGIN_INDENT</ph>  • Info is sent to Google about your Chromium usage, but it isn't tied you
+  • If Chromium crashes, details about the crash may include some personal info
+  • If you turn on sync, metrics may also include info about URLs you visit<ph name="END_INDENT">END_INDENT</ph>
+      </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE" desc="Title to explain how the user can help to improve Chrome by accepting the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX and IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION. [iOS only]">
+        Make Chromium Better
+        </message>
       <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_METRICS_CONSENT" desc="The label next to the metrics reporting consent checkbox of the welcome screen presented to the user on First Run [iOS only]">
         Help improve Chromium by sending usage statistics and crash reports to Google
       </message>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd
index c17f70a..f9edea8 100644
--- a/ios/chrome/app/strings/ios_google_chrome_strings.grd
+++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -271,6 +271,21 @@
       <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE" desc="Title of the screen suggesting to the user to sign in">
         Make Chrome Your Own
       </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX" desc="Checkbox to accept the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
+        Help Improve Chrome's Features and Performance
+        </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION" desc="Text to explain how the user can help to improve Chrome by accepting the metrics reporting consent. Bullet points lines should start with 2 spaces, followed by • and with a space right after. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
+        When on:
+<ph name="BEGIN_INDENT">BEGIN_INDENT</ph>  • Help make Chrome better for people who use it the way you do<ph name="END_INDENT">END_INDENT</ph>
+
+Things to consider:
+<ph name="BEGIN_INDENT">BEGIN_INDENT</ph>  • Info is sent to Google about your Chrome usage, but it isn't tied you
+  • If Chrome crashes, details about the crash may include some personal info
+  • If you turn on sync, metrics may also include info about URLs you visit<ph name="END_INDENT">END_INDENT</ph>
+      </message>
+      <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE" desc="Title to explain how the user can help to improve Chrome by accepting the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX and IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION. [iOS only]">
+        Make Chrome Better
+        </message>
       <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_METRICS_CONSENT" desc="The label next to the metrics reporting consent checkbox of the welcome screen presented to the user on First Run [iOS only]">
         Help improve Chrome by sending usage statistics and crash reports to Google
       </message>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1
new file mode 100644
index 0000000..fd7c293
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@
+26995e4f912576ef6bde46293182f5540c65cf41
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
index 80a17728..897836b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium kon nie jou wagwoorde nagaan nie. Probeer jou internetverbinding nagaan.</translation>
 <translation id="3472200483164753384">Nie gesteun in Chromium Kanarie nie</translation>
 <translation id="3639997914391704523">Chromium kan jou wagwoorde nagaan as jy met jou Google-rekening aanmeld.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> het Chromium gebruik en het boekmerke, wagwoorde en ander instellings op hierdie toestel gelos.</translation>
 <translation id="3805899903892079518">Chromium het nie toegang tot jou foto's of video's nie. Aktiveer toegang in iOS-instellings &gt; Privacy &gt; Photos.</translation>
 <translation id="4043291146360695975">Wagwoorde word slegs op hierdie toestel in Wagwoordbestuurder gestoor.</translation>
 <translation id="4099085513035183040">Nie op Chromium Beta gesteun nie</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
index dab80ef..6e87284 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium parollarınızı yoxlaya bilmədi. İnternet bağlantınızı yoxlayın.</translation>
 <translation id="3472200483164753384">Chromium Canary'də dəstəklənmir</translation>
 <translation id="3639997914391704523">Google Hesabınız ilə daxil olduqda Chromium parollarınızı yoxlaya bilər.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> bu cihazda Chromium istifadə edirdi və əlfəcinlər, parollar və digər ayarlar qalıb.</translation>
 <translation id="3805899903892079518">Chromium məhsulunun foto və videolarınıza girişi yoxdur. iOS Ayarları &gt; Məxfilik &gt; Fotolar bölməsindən girişi aktiv edin.</translation>
 <translation id="4043291146360695975">Parollar yalnız bu cihazda Parol Menecerində saxlanılır.</translation>
 <translation id="4099085513035183040">Chromium Beta'da dəstəklənmir</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
index 6ab3c55..c721f87 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium nije mogao provjeriti vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="3472200483164753384">Nije podržano na Chromium Canaryju</translation>
 <translation id="3639997914391704523">Chromium može provjeravati vaše lozinke kada se prijavljujete pomoću Google računa.</translation>
+<translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> je koristio Chromium i ostavio je oznake, lozinke i ostale postavke na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium nema pristup vašim fotografijama ili videozapisima. Omogućite pristup u meniju iOS postavke &gt; Privatnost &gt; Fotografije.</translation>
 <translation id="4043291146360695975">Lozinke se pohranjuju u Upravitelju lozinki samo na ovom uređaju.</translation>
 <translation id="4099085513035183040">Nije podržano u Beta verziji Chromiuma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
index 743e4ea9..3626c9c 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium તમારા પાસવર્ડ ચેક કરી શક્યું નથી. તમારું ઇન્ટરનેટ કનેક્શન ચેક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="3472200483164753384">Chromium Canary પર સપોર્ટ કરવામાં આવતી નથી</translation>
 <translation id="3639997914391704523">જ્યારે તમે તમારા Google એકાઉન્ટ વડે સાઇન ઇન કરો, ત્યારે Chromium તમારા પાસવર્ડ ચેક કરી શકે છે.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromiumનો ઉપયોગ કરી રહ્યાં હતા અને તેઓ આ ડિવાઇસ પર બુકમાર્ક, પાસવર્ડ અને અન્ય સેટિંગ છોડી ગયા છે.</translation>
 <translation id="3805899903892079518">Chromiumને તમારા ફોટા અથવા વીડિયોનો ઍક્સેસ નથી. iOS સેટિંગ &gt; પ્રાઇવસી &gt; ફોટામાં ઍક્સેસને ચાલુ કરો.</translation>
 <translation id="4043291146360695975">આ ડિવાઇસના પાસવર્ડ માત્ર આ ડિવાઇસના પાસવર્ડ મેનેજરમાં સાચવવામાં આવે છે.</translation>
 <translation id="4099085513035183040">Chromium બીટા પર સપોર્ટ કરવામાં આવતી નથી</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
index a1d49c6..b7456cd 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -43,6 +43,7 @@
 <translation id="3344973607274501920">क्रोमियम आपके पासवर्ड की जांच नहीं कर सका. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="3472200483164753384">यह सुविधा क्रोमियम के कैनरी वर्शन पर काम नहीं करती</translation>
 <translation id="3639997914391704523">जब आप Google खाते से साइन इन करते हैं, तब क्रोमियम आपके पासवर्ड की जांच कर सकता है.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> से Chromium का इस्तेमाल किया गया था और इसमें सेव किए गए बुकमार्क, पासवर्ड, और दूसरी सेटिंग को इस डिवाइस से नहीं हटाया गया.</translation>
 <translation id="3805899903892079518">Chromium के पास आपकी फ़ोटो या वीडियो का एक्सेस नहीं है. iOS सेटिंग &gt; गोपनीयता &gt; फ़ोटो में एक्सेस चालू करें.</translation>
 <translation id="4043291146360695975">पासवर्ड, सिर्फ़ इस डिवाइस में पासवर्ड मैनेजर में सेव हैं.</translation>
 <translation id="4099085513035183040">यह सुविधा क्रोमियम के बीटा वर्शन पर काम नहीं करती</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
index e5b4702..5d7b7b4 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium nije uspio provjeriti vaše zaporke. Provjerite internetsku vezu.</translation>
 <translation id="3472200483164753384">Nije podržano u Chromium Canaryju</translation>
 <translation id="3639997914391704523">Chromium može provjeriti vaše zaporke kad se prijavite Google računom.</translation>
+<translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> upotrebljavao je Chromium i ostavio oznake, zaporke i druge postavke na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium nema pristup fotografijama ni videozapisima. Omogućite pristup u Postavkama iOS-a &gt; Privatnost &gt; Fotografije.</translation>
 <translation id="4043291146360695975">Zaporke se spremaju u Upravitelj zaporki samo na ovom uređaju.</translation>
 <translation id="4099085513035183040">Nije podržano u beta verziji Chromiuma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
index 759b95e..c0b68f7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium non ha potuto controllare le tue password. Verifica la tua connessione a Internet.</translation>
 <translation id="3472200483164753384">Non supportata su Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium può controllare le tue password quando accedi con il tuo Account Google.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> stava usando Chromium e ha lasciato preferiti, password e altre impostazioni su questo dispositivo.</translation>
 <translation id="3805899903892079518">Chromium non ha accesso alle tue foto o ai tuoi video. Attiva l'accesso in Impostazioni iOS &gt; Privacy &gt; Foto.</translation>
 <translation id="4043291146360695975">Le password vengono salvate in Gestore delle password solo su questo dispositivo.</translation>
 <translation id="4099085513035183040">Non supportata su Chromium beta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
index 7567ee3..5226bbc 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium でパスワードを確認できませんでした。インターネット接続を確認してみてください。</translation>
 <translation id="3472200483164753384">Chromium Canary ではサポートされていません</translation>
 <translation id="3639997914391704523">Google アカウントでログインすると、Chromium でパスワードを確認できるようになります。</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> は Chromium を使用しており、ブックマークやパスワードなどの設定がこのデバイスに残っています。</translation>
 <translation id="3805899903892079518">Chromium で写真または動画にアクセスできません。iOS の [設定] &gt; [プライバシー] &gt; [写真] でアクセスを有効にしてください。</translation>
 <translation id="4043291146360695975">パスワードは、このデバイスのパスワード マネージャーにのみ保存されます。</translation>
 <translation id="4099085513035183040">Chromium ベータ版ではサポートされていません</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
index 914ce8d..d6cd9edb 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium сіздің құпия сөздеріңізді тексере алмады. Интернет байланысын тексеріп көріңіз.</translation>
 <translation id="3472200483164753384">Chromium Canary-де қолдау көрсетілмейді.</translation>
 <translation id="3639997914391704523">Google аккаунтыңызбен кіргенде, Chromium сіздің құпия сөздеріңізді тексере алады.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium браузерін қолданған еді, сондықтан осы құрылғыда оның бетбелгілері, құпия сөздері және басқа да параметрлері қалып қойды.</translation>
 <translation id="3805899903892079518">Chromium сурет пен бейнелерге кіре алмайды. "iOS параметрлері &gt; Құпиялылық &gt; Фотосуреттер" арқылы рұқсат беру қажет.</translation>
 <translation id="4043291146360695975">Құпия сөздер осы құрылғыда ғана Құпия сөздер реттегішіне сақталады.</translation>
 <translation id="4099085513035183040">Chromium (бета нұсқасы) браузерінде қолдау көрсетілмейді.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
index 1aeb636..50ff5e9 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಕನೆಕ್ಷನ್ ಪರಿಶೀಲಿಸಿ ನೋಡಿ.</translation>
 <translation id="3472200483164753384">Chromium Canary ನಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
 <translation id="3639997914391704523">ನೀವು Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chromium ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" />, Chromium ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರು ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಉಳಿಸಿದ್ದಾರೆ.</translation>
 <translation id="3805899903892079518">Chromium ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೋಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ. iOS ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಗೌಪ್ಯತೆ &gt; ಫೋಟೋಗಳಲ್ಲಿ ಪ್ರವೇಶವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="4043291146360695975">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಈ ಸಾಧನದಲ್ಲಿನ ಪಾಸ್‌ವರ್ಡ್ ನಿರ್ವಾಹಕದಲ್ಲಿ ಮಾತ್ರ ಉಳಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="4099085513035183040">Chromium ಬೀಟಾದಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
index 016e064..d8dbc54 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="3472200483164753384">ບໍ່ຮອງຮັບໃນ Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ກຳລັງໃຊ້ Chromium ຢູ່ ແລະ ເປີດບຸກມາກ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆປະໄວ້ຢູ່ອຸປະກອນນີ້.</translation>
 <translation id="3805899903892079518">Chromium ບໍ່​ມີ​ການ​ເຂົ້າ​ເຖິງ​ຮູບຖ່າຍ ຫຼື ​ວິ​ດີ​ໂອ​ຂອງ​ທ່ານ. ເປີດ​ໃຊ້​ການ​ເຂົ້າເຖິງ​ຢູ່​ໃນ​ການ​ຕັ້ງ​ຄ່າ iOS &gt; Privacy &gt; Photos.</translation>
 <translation id="4043291146360695975">ລະຫັດຜ່ານແມ່ນຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານຢູ່ອຸປະກອນນີ້ເທົ່ານັ້ນ.</translation>
 <translation id="4099085513035183040">ບໍ່ຮອງຮັບໃນ Chromium Beta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
index fdd9045..799f963 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനായില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="3472200483164753384">Chromium Canary-യിൽ പിന്തുണയില്ല</translation>
 <translation id="3639997914391704523">Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാകും.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ആണ് Chromium ഉപയോഗിച്ചുകൊണ്ടിരുന്നത്, ഈ വ്യക്തിയുടെ ബുക്ക്‌മാർക്കുകളും പാസ്‌വേഡുകളും മറ്റ് ക്രമീകരണവും ഈ ഉപകരണത്തിലുണ്ട്.</translation>
 <translation id="3805899903892079518">Chromium-ത്തിന് നിങ്ങളുടെ ഫോട്ടോകളിലേക്കോ വീഡിയോകളിലേക്കോ ആക്‌സസ് ഇല്ല. iOS ക്രമീകരണം &gt; സ്വകാര്യത &gt; ഫോട്ടോകൾ എന്നതിൽ ആക്‌സസ് പ്രവർത്തനക്ഷമമാക്കുക.</translation>
 <translation id="4043291146360695975">നിങ്ങളുടെ ഈ ഉപകരണത്തിലെ പാസ്‌വേഡ് മാനേജറിൽ മാത്രമേ പാസ്‌വേഡുകൾ സംരക്ഷിക്കൂ.</translation>
 <translation id="4099085513035183040">Chromium ബീറ്റയിൽ പിന്തുണയില്ല</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
index 694eb1d..8ea7323e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium таны нууц үгнүүдийг шалгаж чадсангүй. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="3472200483164753384">Chromium Канар дээр дэмжихгүй</translation>
 <translation id="3639997914391704523">Chromium нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгнүүдийг шалгах боломжтой.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> энэ төхөөрөмж дээр Chromium-г ашиглаж байсан бөгөөд хавчуурга, нууц үг болон бусад тохиргоог үлдээсэн.</translation>
 <translation id="3805899903892079518">Chromium-д таны зураг, видеонд хандах зөвшөөрөл байхгүй байна. Хандалтыг iOS Тохиргоо &gt; Нууцлал &gt; Зураг хэсэгт идэвхжүүлээрэй.</translation>
 <translation id="4043291146360695975">Зөвхөн энэ төхөөрөмж дээр нууц үгийг Нууц үгний менежерт хадгалдаг.</translation>
 <translation id="4099085513035183040">Chromium Бета дээр дэмжихгүй</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
index 15c9f53b..85f0ee3 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium kan je wachtwoorden niet checken. Check de internetverbinding.</translation>
 <translation id="3472200483164753384">Niet ondersteund in Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium kan je wachtwoorden checken als je inlogt met je Google-account.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> heeft Chromium gebruikt en heeft bookmarks, wachtwoorden en andere instellingen op dit apparaat laten staan.</translation>
 <translation id="3805899903892079518">Chromium heeft geen toegang tot je foto's of video's. Geef in iOS toegang via Instellingen &gt; Privacy &gt; Foto's.</translation>
 <translation id="4043291146360695975">Wachtwoorden worden alleen opgeslagen in Wachtwoordmanager op dit apparaat.</translation>
 <translation id="4099085513035183040">Niet ondersteund in Chromium (bèta)</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
index 54cb9f3..5a84379 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Przeglądarce Chromium nie udało się sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="3472200483164753384">Nieobsługiwane w Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium może sprawdzić Twoje hasła, gdy zalogujesz się na swoje konto Google.</translation>
+<translation id="3650632991272923014">Użytkownik <ph name="USER_EMAIL1" /> korzystał z Chromium i zapisał na tym urządzeniu swoje zakładki, hasła i inne ustawienia.</translation>
 <translation id="3805899903892079518">Chromium nie ma dostępu do Twoich zdjęć ani filmów. Aby włączyć dostęp w iOS, wybierz Ustawienia &gt; Prywatność &gt; Zdjęcia.</translation>
 <translation id="4043291146360695975">Hasła są zapisywane w Menedżerze haseł tylko na tym urządzeniu.</translation>
 <translation id="4099085513035183040">Nieobsługiwane w Chromium Beta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
index 351c9da..e0b00b66 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Não foi possível verificar suas senhas com o Chromium. Verifique sua conexão de Internet.</translation>
 <translation id="3472200483164753384">Indisponível no Chromium Canary</translation>
 <translation id="3639997914391704523">O Chromium pode verificar suas senhas quando você faz login com sua Conta do Google.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> estava usando o Chromium e deixou favoritos, senhas e outras configurações neste dispositivo.</translation>
 <translation id="3805899903892079518">O Chromium não têm acesso às suas fotos ou seus vídeos. Permita o acesso em "Configurações do iOS" &gt; "Privacidade" &gt; "Fotos".</translation>
 <translation id="4043291146360695975">As senhas são salvas no Gerenciador de senhas somente neste dispositivo.</translation>
 <translation id="4099085513035183040">Indisponível no Chromium Beta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
index 80b3d50b..249298d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">O Chromium não conseguiu verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="3472200483164753384">Opção não suportada no Chromium Canary.</translation>
 <translation id="3639997914391704523">O Chromium pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation>
+<translation id="3650632991272923014"><ph name="USER_EMAIL1" /> estava a utilizar o Chromium e deixou marcadores, palavras-passe e outras definições neste dispositivo.</translation>
 <translation id="3805899903892079518">O Chromium não tem acesso aos seus vídeos ou fotos. Ative o acesso nas Definições do iOS &gt; Privacidade &gt; Fotos.</translation>
 <translation id="4043291146360695975">As palavras-passe são guardadas no Gestor de palavras-passe apenas neste dispositivo.</translation>
 <translation id="4099085513035183040">Opção não suportada no Chromium Beta.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
index a36acd6..8bc889509 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Не удается проверить пароли в браузере Chromium. Проверьте подключение к Интернету.</translation>
 <translation id="3472200483164753384">Проверка не поддерживается в Chromium Canary.</translation>
 <translation id="3639997914391704523">Chromium сможет проверить ваши пароли, если вы войдете в аккаунт Google.</translation>
+<translation id="3650632991272923014">Пользователь <ph name="USER_EMAIL1" />, который работал с Chromium на этом устройстве, не удалил свои закладки, пароли и другие настройки</translation>
 <translation id="3805899903892079518">У Chromium нет доступа к вашим фото и видео. Чтобы предоставить его, нажмите "Настройки &gt; Конфиденциальность &gt; Фотографии".</translation>
 <translation id="4043291146360695975">Пароли сохранены в Диспетчере паролей только на этом устройстве.</translation>
 <translation id="4099085513035183040">Проверка не поддерживается в бета-версии Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
index a58e68a..5cc20aab 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium nije uspeo da vam proveri lozinke. Proverite internet vezu.</translation>
 <translation id="3472200483164753384">Nije podržano u verziji Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium može da vam proverava lozinke kada se prijavite pomoću Google naloga.</translation>
+<translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> je koristio Chromium i ostavio obeleživače, lozinke i druga podešavanja na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium ne može da pristupa slikama ili video snimcima. Omogućite pristup u iOS Settings (Podešavanja iOS-a) &gt; Privacy (Privatnost) &gt; Photos (Slike).</translation>
 <translation id="4043291146360695975">Lozinke se čuvaju u Menadžeru lozinki samo na ovom uređaju.</translation>
 <translation id="4099085513035183040">Nije podržano u verziji Chromium beta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
index 67cfea8..1a97b16f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">Chromium није успео да вам провери лозинке. Проверите интернет везу.</translation>
 <translation id="3472200483164753384">Није подржано у верзији Chromium Canary</translation>
 <translation id="3639997914391704523">Chromium може да вам проверава лозинке када се пријавите помоћу Google налога.</translation>
+<translation id="3650632991272923014">Корисник <ph name="USER_EMAIL1" /> је користио Chromium и оставио обележиваче, лозинке и друга подешавања на овом уређају.</translation>
 <translation id="3805899903892079518">Chromium не може да приступа сликама или видео снимцима. Омогућите приступ у iOS Settings (Подешавања iOS-а) &gt; Privacy (Приватност) &gt; Photos (Слике).</translation>
 <translation id="4043291146360695975">Лозинке се чувају у Менаџеру лозинки само на овом уређају.</translation>
 <translation id="4099085513035183040">Није подржано у верзији Chromium бета</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
index e16f4140..384f9133 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
@@ -44,6 +44,7 @@
 <translation id="3344973607274501920">‏Chromium آپ کے پاس ورڈز چیک نہیں کر سکا۔ اپنا انٹرنیٹ کنکشن چیک کرنے کی کوشش کریں۔</translation>
 <translation id="3472200483164753384">‏Chromium Canary پر تعاون یافتہ نہیں ہے</translation>
 <translation id="3639997914391704523">‏جب آپ اپنے Google اکاؤنٹ سے سائن ان کرتے ہیں تو Chromium آپ کے پاس ورڈز کو چیک کر سکتا ہے۔</translation>
+<translation id="3650632991272923014">‏<ph name="USER_EMAIL1" /> Chromium استعمال کر رہا تھا اور اس آلہ پر بُک مارکس، پاس ورڈز اور دیگر ترتیبات چھوڑ دی ہیں۔</translation>
 <translation id="3805899903892079518">‏Chromium کو آپ کی تصاویر یا ویڈیوز تک رسائی حاصل نہیں ہے۔ iOS ترتیبات &gt; رازداری &gt; تصاویر میں رسائی کو فعال کریں۔</translation>
 <translation id="4043291146360695975">پاس ورڈز صرف اس آلہ پر پاس ورڈ مینیجر میں محفوظ کیے جاتے ہیں۔</translation>
 <translation id="4099085513035183040">‏Chromium بی ٹا پر تعاون یافتہ نہیں ہے</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
index 379da55c..33bfab4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Help om Chrome te verbeter deur gebruikstatistiek en omvalverslae na Google te stuur.</translation>
 <translation id="417201473131094001">Nie gesteun op Chrome Kanarie nie</translation>
 <translation id="4214277427269650960">Meld by hierdie werf en Chrome aan. Jy kan sinkronisering later aanskakel.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> het Chrome gebruik en het boekmerke, wagwoorde en ander instellings op hierdie toestel gelos.</translation>
 <translation id="424864128008805179">Meld af uit Chrome?</translation>
 <translation id="4249068189593983585">Chrome-wenk. Vir meer oortjieopsies, raak en hou die Wys Oortjies-knoppie op die nutsbalk aan die onderkant of bokant van jou skerm.</translation>
 <translation id="4523886039239821078">Sekere byvoegings het veroorsaak dat Chrome omval. Probeer om hulle te deïnstalleer:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
index f15e3f8a..6d93ddd4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">İstifadə statistikası və qəza raportlarını Google'a göndərməklə Chrome'un gəlişməsini sağlayın.</translation>
 <translation id="417201473131094001">Chrome Canary'də dəstəklənmir</translation>
 <translation id="4214277427269650960">Bu sayta və Chrome'a daxil olun. Sinxronlaşdırmanı daha sonra aktiv edə bilərsiniz.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> bu cihazda Chrome istifadə edirdi və əlfəcinlər, parollar və digər ayarlar qalıb.</translation>
 <translation id="424864128008805179">Chrome'dan çıxılsın?</translation>
 <translation id="4249068189593983585">Chrome məsləhəti. Daha çox tab seçimləri üçün ekranın aşağı və yuxarı hissəsində alətlər panelində yerləşən "Tabları Göstərin" düyməsinə basıb saxlayın.</translation>
 <translation id="4523886039239821078">Bəzi addonlar Chrome'da xətaya səbəb olur. Lütfən, sistemdən silin:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
index 1e4411aa..7171c62 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Poboljšajte Chrome šaljući Googleu statistike upotrebe i izvješća o rušenju.</translation>
 <translation id="417201473131094001">Nije podržano na Chrome Canaryju</translation>
 <translation id="4214277427269650960">Prijavite se na ovu web lokaciju i u Chrome. Sinhronizaciju možete uključiti kasnije.</translation>
+<translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> je koristio Chrome i ostavio je oznake, lozinke i ostale postavke na ovom uređaju.</translation>
 <translation id="424864128008805179">Odjaviti se iz Chromea?</translation>
 <translation id="4249068189593983585">Savjet za Chrome. Za više opcija za kartice dodirnite i zadržite dugme Prikaži kartice na alatnoj traci, na dnu ili na vrhu ekrana.</translation>
 <translation id="4523886039239821078">Zbog nekih dodataka Chrome može prestati da radi. Deinstalirajte:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
index 1624d1b..69047d7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">ઉપયોગનાં આંકડા અને ક્રૅશ રિપોર્ટ Googleને મોકલીને Chromeને વધુ સારું બનાવવામાં મદદ કરો.</translation>
 <translation id="417201473131094001">Chrome Canary પર સપોર્ટ કરવામાં આવતી નથી</translation>
 <translation id="4214277427269650960">આ સાઇટ અને Chromeમાં સાઇન ઇન કરો. તમે પછીથી તમારી સિંક કરવાની સુવિધા ચાલુ કરી શકો છો.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chromeનો ઉપયોગ કરી રહ્યાં હતા અને તેઓ આ ડિવાઇસ પર બુકમાર્ક, પાસવર્ડ અને અન્ય સેટિંગ છોડી ગયા છે.</translation>
 <translation id="424864128008805179">Chromeમાંથી સાઇન આઉટ કરીએ?</translation>
 <translation id="4249068189593983585">Chrome ટિપ. ટૅબના વધુ વિકલ્પો માટે, તમારી સ્ક્રીનના તળિયે અથવા ટોચે આવેલા ટૂલબારમાંના 'ટૅબ બતાવો' બટનને ટચ કરીને થોડીવાર દબાવી રાખો.</translation>
 <translation id="4523886039239821078">કેટલાંક એડ-ઓનને કારણે Chrome ક્રૅશ થાય છે. કૃપા કરી આને અનઇન્સ્ટૉલ કરો:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
index 01a720a..ab5f7d7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Google को इस्तेमाल के आंकड़े और खराबी रिपोर्ट भेजकर Chrome को बेहतर बनाने में मदद करें.</translation>
 <translation id="417201473131094001">यह सुविधा Chrome के कैनरी वर्शन पर काम नहीं करती</translation>
 <translation id="4214277427269650960">इस साइट और Chrome में साइन इन करें. आप सिंक करने की सुविधा को बाद में चालू कर सकते हैं.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> से Chrome का इस्तेमाल किया गया था और इसमें सेव किए गए बुकमार्क, पासवर्ड, और दूसरी सेटिंग को इस डिवाइस से नहीं हटाया गया.</translation>
 <translation id="424864128008805179">Chrome से साइन आउट करें?</translation>
 <translation id="4249068189593983585">Chrome इस्तेमाल करने के लिए सलाह. ज़्यादा टैब विकल्पों के लिए, टूलबार में 'टैब दिखाएं' बटन को दबाकर रखें. यह बटन आपकी स्क्रीन के सबसे नीचे या सबसे ऊपर मिलेगा.</translation>
 <translation id="4523886039239821078">कुछ ऐड-ऑन के कारण Chrome बंद हो जा रहा है. कृपया उन्हें अनइंस्टॉल करें:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
index 4bd3a46b..9f60debb 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Poboljšajte Chrome šaljući Googleu statistike upotrebe i izvješća o rušenju.</translation>
 <translation id="417201473131094001">Nije podržano u Chrome Canaryju</translation>
 <translation id="4214277427269650960">Prijavite se na ovu web-lokaciju i Chrome. Sinkronizaciju možete uključiti kasnije.</translation>
+<translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> upotrebljavao je Chrome i ostavio oznake, zaporke i druge postavke na ovom uređaju.</translation>
 <translation id="424864128008805179">Želite li se odjaviti s Chromea?</translation>
 <translation id="4249068189593983585">Savjet za Chrome. Za više opcija za kartice dodirnite i držite gumb Prikaži kartice na alatnoj traci pri dnu ili vrhu zaslona.</translation>
 <translation id="4523886039239821078">Neki programski dodaci uzrokuju rušenje preglednika Chrome. Deinstalirajte:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
index 5c2af2b..ccbfba55 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Aiutaci a migliorare Chrome inviando a Google statistiche sull'utilizzo e report sugli arresti anomali.</translation>
 <translation id="417201473131094001">Non supportata su Chrome Canary</translation>
 <translation id="4214277427269650960">Accedi a questo sito e a Chrome. Puoi attivare la sincronizzazione in un secondo momento.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> stava usando Chrome e ha lasciato preferiti, password e altre impostazioni su questo dispositivo.</translation>
 <translation id="424864128008805179">Uscire da Chrome?</translation>
 <translation id="4249068189593983585">Suggerimento per Chrome. Per vedere più opzioni sulla scheda, tocca e tieni premuto il pulsante Mostra schede della barra degli strumenti, che si trova nella parte inferiore o superiore della schermata.</translation>
 <translation id="4523886039239821078">Alcuni componenti aggiuntivi provocano l'arresto anomalo di Chrome. Disinstallali.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
index 2a2f4b7a..8bdfb8b 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">使用統計情報と障害レポートを Google に送信して、Chrome の品質向上にご協力ください。</translation>
 <translation id="417201473131094001">Chrome Canary ではサポートされていません</translation>
 <translation id="4214277427269650960">このサイトと Chrome にログインしてください。同期は後でオンにできます。</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> は Chrome を使用しており、ブックマークやパスワードなどの設定がこのデバイスに残っています。</translation>
 <translation id="424864128008805179">Chrome からログアウトしますか?</translation>
 <translation id="4249068189593983585">Chrome の使い方のヒント: タブのオプションをさらに表示するには、画面の下部または上部のツールバーにある [タブを表示] を長押しします。</translation>
 <translation id="4523886039239821078">アドオンが原因でChromeがクラッシュしました。次をアンインストールしてください:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
index d93a352..55bebaff 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Пайдалану статистикасы мен жаңылыс туралы есептерді Google компаниясына жіберу арқылы Chrome қызметін жақсартуға көмектесіңіз.</translation>
 <translation id="417201473131094001">Chrome Canary-де қолдау көрсетілмейді.</translation>
 <translation id="4214277427269650960">Осы сайтқа және Chrome-ға кіріңіз. Синхрондауды кейінірек қосуға болады.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome браузерін қолданған еді, сондықтан осы құрылғыда оның бетбелгілері, құпия сөздері және басқа да параметрлері қалып қойды.</translation>
 <translation id="424864128008805179">Chrome жүйесінен шығасыз ба?</translation>
 <translation id="4249068189593983585">Chrome кеңесі. Қосымша қойынды опциялары үшін экранның төменгі не жоғарғы жағындағы құралдар тақтасындағы "Қойындыларды көрсету" түймесін басып тұрыңыз.</translation>
 <translation id="4523886039239821078">Кейбір қондырмалар Chrome браузерінің бұзылуына себеп болады. Жойыңыз:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
index 4540c090..19b2743 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Google ಗೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ.</translation>
 <translation id="417201473131094001">Chrome Canary ನಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
 <translation id="4214277427269650960">ಈ ಸೈಟ್‌ಗೆ ಮತ್ತು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ. ನಂತರ ನೀವು ಸಿಂಕ್ ಆನ್ ಮಾಡಬಹುದು.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" />, Chrome ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರು ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಉಳಿಸಿದ್ದಾರೆ.</translation>
 <translation id="424864128008805179">Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation>
 <translation id="4249068189593983585">Chrome ಸಲಹೆ. ಇನ್ನಷ್ಟು ಟ್ಯಾಬ್ ಆಯ್ಕೆಗಳಿಗಾಗಿ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಕೆಳಭಾಗ ಅಥವಾ ಮೇಲ್ಭಾಗದಲ್ಲಿರುವ ಪರಿಕರ ಪಟ್ಟಿಯಲ್ಲಿರುವ "ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೋರಿಸಿ" ಬಟನ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್‌ ಮಾಡಿ.</translation>
 <translation id="4523886039239821078">ಕೆಲವು ಆ್ಯಡ್-ಆನ್‌ಗಳು Chrome ಕ್ರ್ಯಾಶ್ ಆಗಲು ಕಾರಣವಾಗಿವೆ. ದಯವಿಟ್ಟು ಇದನ್ನು ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
index 2c0bc69..d0f5f87 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">ຊ່ວຍເຮັດໃຫ້ Chrome ດີກ່ວາໂດຍການສົ່ງສະຖິຕິການໃຊ້ ແລະລາຍງານການຂັດຂ້ອງຫາ Google.</translation>
 <translation id="417201473131094001">ບໍ່ຮອງຮັບໃນ Chrome Canary</translation>
 <translation id="4214277427269650960">ເຂົ້າສູ່ລະບົບຫາເວັບໄຊນີ້ ແລະ Chrome. ທ່ານສາມາດເປີດການຊິ້ງຂໍ້ມູນໃນພາຍຫຼັງໄດ້.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ກຳລັງໃຊ້ Chrome ຢູ່ ແລະ ເປີດບຸກມາກ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆປະໄວ້ຢູ່ອຸປະກອນນີ້.</translation>
 <translation id="424864128008805179">ອອກຈາກລະບົບ Chrome ບໍ?</translation>
 <translation id="4249068189593983585">ເຄັດລັບກ່ຽວກັບ Chrome. ສຳລັບຕົວເລືອກແຖບເພີ່ມເຕີມ, ກະລຸນາແຕະປຸ່ມສະແດງແຖບໃນແຖບເຄື່ອງມືຄ້າງໄວ້ ເຊິ່ງຢູ່ລຸ່ມສຸດ ຫຼື ເທິງສຸດຂອງໜ້າຈໍຂອງທ່ານ.</translation>
 <translation id="4523886039239821078">ການ​ເພີ່ມ​ໃສ່​ບາງ​ອັນ​ເຮັດ​ໃຫ້ Chrome ເກີດ​ຂັດ​ຂ້ອງ. ກະ​ລຸ​ນາ​ຖອນ​ຕິດ​ຕັ້ງ​.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
index f2ae9435..405f0bc9 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Google-ലേക്ക് ഉപയോഗ വിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോർട്ടുകളും അയയ്‌ക്കുന്നതിലൂടെ Chrome-നെ മികച്ചതാക്കാൻ സഹായിക്കുക.</translation>
 <translation id="417201473131094001">Chrome Canary-യിൽ പിന്തുണയില്ല</translation>
 <translation id="4214277427269650960">ഈ സൈറ്റിലും Chrome-ലും സൈൻ ഇൻ ചെയ്യുക. സമന്വയിപ്പിക്കൽ പിന്നീടും ഓണാക്കാനാകും.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ആണ് Chrome ഉപയോഗിച്ചുകൊണ്ടിരുന്നത്, ഈ വ്യക്തിയുടെ ബുക്ക്‌മാർക്കുകളും പാസ്‌വേഡുകളും മറ്റ് ക്രമീകരണവും ഈ ഉപകരണത്തിലുണ്ട്.</translation>
 <translation id="424864128008805179">Chrome-ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യണോ?</translation>
 <translation id="4249068189593983585">Chrome നുറുങ്ങുകൾ. കൂടുതൽ ടാബ് ഓപ്ഷനുകൾക്കായി, നിങ്ങളുടെ സ്‌ക്രീനിന്റെ താഴെയോ മുകളിലോ ഉള്ള, ടൂൾബാറിലെ 'ടാബുകൾ കാണിക്കുക' ബട്ടൺ സ്‌പർശിച്ച് പിടിക്കുക.</translation>
 <translation id="4523886039239821078">ചില ആഡ്-ഓണുകൾ Chrome ക്രാഷാകുന്നതിന് ഇടയാക്കുന്നു. ഇനിപ്പറയുന്നവ അൺഇൻസ്റ്റാൾ ചെയ്യുക:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
index 14946f2..1a5f6b8 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Хэрэглээний статистик мэдээ болон алдаа ослын тайланг автоматаар Google рүү илгээх замаар Google Chrome-ийг улам сайжруулахад тусална уу.</translation>
 <translation id="417201473131094001">Chrome Канар дээр дэмжихгүй</translation>
 <translation id="4214277427269650960">Энэ сайт болон Chrome-д нэвтэрнэ үү. Та синк хийхийг дараа асааж болно.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> энэ төхөөрөмж дээр Chrome-г ашиглаж байсан бөгөөд хавчуурга, нууц үг болон бусад тохиргоог үлдээсэн.</translation>
 <translation id="424864128008805179">Chrome-с гарах уу?</translation>
 <translation id="4249068189593983585">Chrome-н зөвлөгөө. Табын бусад сонголтыг харахын тулд дэлгэцийнхээ доод эсвэл дээд хэсэгт байрлах самбараас Табыг харуулах товчлуурыг удаан дарна уу.</translation>
 <translation id="4523886039239821078">Зарим нэмэлт апп-ууд нь Chrome-ыг эвдрэхэд хүргэдэг. Тиймээс тэдгээрийг утсгана уу:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
index de8a14b7..96e693e8 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Verzend automatisch gebruiksstatistieken en crashmeldingen naar Google.</translation>
 <translation id="417201473131094001">Niet ondersteund in Chrome Canary</translation>
 <translation id="4214277427269650960">Log in bij deze site en Chrome. Je kunt synchronisatie later aanzetten.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> heeft Chrome gebruikt en heeft bookmarks, wachtwoorden en andere instellingen op dit apparaat laten staan.</translation>
 <translation id="424864128008805179">Uitloggen bij Chrome?</translation>
 <translation id="4249068189593983585">Chrome-tip. Voor meer tabbladopties tik je in de werkbalk onder- of bovenaan het scherm op de knop Tabbladen bekijken en houd je deze vast.</translation>
 <translation id="4523886039239821078">Sommige add-ons kunnen ervoor zorgen dat Chrome crasht. Verwijder de volgende add-ons:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
index 2991db8..e0b8a9a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Pomóż ulepszyć Chrome, wysyłając do Google statystyki użytkowania i raporty o awariach.</translation>
 <translation id="417201473131094001">Nieobsługiwane w Chrome Canary</translation>
 <translation id="4214277427269650960">Zaloguj się w na tej stronie i w Chrome. Synchronizację możesz włączyć później.</translation>
+<translation id="4233521129555661685">Użytkownik <ph name="USER_EMAIL1" /> korzystał z Chrome i zapisał na tym urządzeniu swoje zakładki, hasła i inne ustawienia.</translation>
 <translation id="424864128008805179">Wylogować z Chrome?</translation>
 <translation id="4249068189593983585">Wskazówka dla użytkowników Chrome. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub na górze ekranu.</translation>
 <translation id="4523886039239821078">Niektóre dodatki mogą powodować awarie Chrome. Odinstaluj je.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
index cd20578ec..3b698975 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Ajude a melhorar o Chrome. Envie estatísticas de uso e relatórios de falhas ao Google.</translation>
 <translation id="417201473131094001">Indisponível no Chrome Canary</translation>
 <translation id="4214277427269650960">Faça login neste site e no Chrome. É possível ativar a sincronização mais tarde.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> estava usando o Chrome e deixou favoritos, senhas e outras configurações neste dispositivo.</translation>
 <translation id="424864128008805179">Sair do Google Chrome?</translation>
 <translation id="4249068189593983585">Dica do Chrome. Para ver mais opções de guia, toque no botão "Mostrar guias" na barra de ferramentas localizada na parte superior ou inferior da tela e mantenha-o pressionado.</translation>
 <translation id="4523886039239821078">Alguns complementos causam a falha do Google Chrome. Desinstale-os.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
index e72f3c76..96cae4d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Ajude a melhorar o Chrome ao enviar estatísticas de utilização e relatórios de falhas para a Google.</translation>
 <translation id="417201473131094001">Opção não suportada no Chrome Canary.</translation>
 <translation id="4214277427269650960">Inicie sessão neste site e no Chrome. Pode ativar a sincronização mais tarde.</translation>
+<translation id="4233521129555661685"><ph name="USER_EMAIL1" /> estava a utilizar o Chrome e deixou marcadores, palavras-passe e outras definições neste dispositivo.</translation>
 <translation id="424864128008805179">Pretende terminar sessão no Chrome?</translation>
 <translation id="4249068189593983585">Sugestão para o Chrome: para obter mais opções de separadores, toque sem soltar no botão Mostrar separadores na barra de ferramentas, que se encontra na parte superior ou inferior do ecrã.</translation>
 <translation id="4523886039239821078">Alguns suplementos provocam falhas no sistema do Chrome. Desinstale:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
index 7e0554c..78d1a0e 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Отправлять в Google статистику использования и отчеты о сбоях</translation>
 <translation id="417201473131094001">Проверка не поддерживается в Chrome Canary</translation>
 <translation id="4214277427269650960">Войдите на этот сайт и в Chrome. Синхронизацию можно включить позже.</translation>
+<translation id="4233521129555661685">Пользователь <ph name="USER_EMAIL1" />, который работал с Chrome на этом устройстве, не удалил свои закладки, пароли и другие настройки</translation>
 <translation id="424864128008805179">Выйти из Chrome?</translation>
 <translation id="4249068189593983585">Совет для Chrome. Чтобы открыть список дополнительных действий с вкладками, нажмите и удерживайте кнопку "Показать вкладки" на панели инструментов в нижней или верхней части экрана.</translation>
 <translation id="4523886039239821078">Некоторые дополнения вызывают сбой Chrome. Необходимо удалить:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
index ab7b604..3879545 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Poboljšajte Chrome slanjem statistike korišćenja i izveštaja o otkazivanju Google-u.</translation>
 <translation id="417201473131094001">Nije podržano u verziji Chrome Canary</translation>
 <translation id="4214277427269650960">Prijavite se na ovaj sajt i u Chrome. Sinhronizaciju možete da uključite kasnije.</translation>
+<translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> je koristio Chrome i ostavio obeleživače, lozinke i druga podešavanja na ovom uređaju.</translation>
 <translation id="424864128008805179">Želite li da se odjavite iz Chrome-a?</translation>
 <translation id="4249068189593983585">Savet za Chrome. Ako želite više opcija za kartice, dodirnite i zadržite dugme Prikaži kartice na traci s alatkama, koja se nalazi u dnu ili vrhu ekrana.</translation>
 <translation id="4523886039239821078">Neki programski dodaci izazivaju otkazivanje Chrome-a. Deinstalirajte:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
index 7f80be28..76832085 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">Побољшајте Chrome слањем статистике коришћења и извештаја о отказивању Google-у.</translation>
 <translation id="417201473131094001">Није подржано у верзији Chrome Canary</translation>
 <translation id="4214277427269650960">Пријавите се на овај сајт и у Chrome. Синхронизацију можете да укључите касније.</translation>
+<translation id="4233521129555661685">Корисник <ph name="USER_EMAIL1" /> је користио Chrome и оставио обележиваче, лозинке и друга подешавања на овом уређају.</translation>
 <translation id="424864128008805179">Желите ли да се одјавите из Chrome-а?</translation>
 <translation id="4249068189593983585">Савет за Chrome. Ако желите више опција за картице, додирните и задржите дугме Прикажи картице на траци с алаткама, која се налази у дну или врху екрана.</translation>
 <translation id="4523886039239821078">Неки програмски додаци изазивају отказивање Chrome-а. Деинсталирајте:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
index 6914bd9..672e27b21 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
@@ -50,6 +50,7 @@
 <translation id="4099578267706723511">‏Google کو استعمال کے اعداد و شمار اور کریش رپورٹس بھیج کر Chrome کو بہتر بنانے میں مدد کریں۔</translation>
 <translation id="417201473131094001">‏Chrome Canary پر تعاون یافتہ نہیں ہے</translation>
 <translation id="4214277427269650960">‏اس سائٹ اور Chrome پر سائن ان کریں۔ آپ بعد میں مطابقت پذیری کو آن کر سکتے ہیں۔</translation>
+<translation id="4233521129555661685">‏<ph name="USER_EMAIL1" /> Chrome استعمال کر رہا تھا اور اس آلہ پر بُک مارکس، پاس ورڈز اور دیگر ترتیبات چھوڑ دی ہیں۔</translation>
 <translation id="424864128008805179">‏Chrome سے سائن آؤٹ کریں؟</translation>
 <translation id="4249068189593983585">‏Chrome تجویز۔ ٹیب کے مزید اختیارات کیلئے، ٹول بار میں اس "ٹیبز دکھائيں" بٹن کو ٹچ کریں اور دبائے رکھیں جو آپ کی اسکرین کے نیچے یا اوپر ہوتا ہے۔</translation>
 <translation id="4523886039239821078">‏کچھ اضافے Chrome کے کریش ہونے کا سبب بنتے ہیں۔ براہ کرم اَن انسٹال کریں:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb
index 1128cc9..51ffc73c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Vind uit hoe</translation>
 <translation id="1272079795634619415">Stop</translation>
 <translation id="1275718070701477396">Gekies</translation>
+<translation id="1281818060020671000">Bestuur data</translation>
 <translation id="1282311502488501110">Moenie aanmeld nie</translation>
 <translation id="1283524564873030414">Afgelope 24 uur</translation>
 <translation id="1285320974508926690">Moet nooit hierdie werf vertaal nie</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Bestuur betaalmetodes …</translation>
 <translation id="470966556546083668">Moenie sinkronisering aanskakel nie</translation>
 <translation id="4731472194328757163">Kamera- en mikrofoontoegang word toegelaat</translation>
+<translation id="4737560986434232178">Soek onlangse oortjies</translation>
 <translation id="473775607612524610">Dateer op</translation>
 <translation id="4747097190499141774">Wagfrase-enkripsie sluit nie betaalmetodes en adresse van Google Pay af in nie. Net iemand met jou wagfrase kan jou geënkripteerde data lees. Die wagfrase word nie na Google toe gestuur of deur Google geberg nie. As jy jou wagfrase vergeet of hierdie instelling wil verander, sal jy sinkronisering moet terugstel. <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nuwe incognito-oortjie</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index 735bb0d..e2b368e3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Məlumat əldə edin</translation>
 <translation id="1272079795634619415">Dayandırın</translation>
 <translation id="1275718070701477396">Seçilib</translation>
+<translation id="1281818060020671000">Datanı idarə edin</translation>
 <translation id="1282311502488501110">Daxil olmayın</translation>
 <translation id="1283524564873030414">Son 24 Saat</translation>
 <translation id="1285320974508926690">Bu saytı heç vaxt tərcümə etməyin</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Ödəniş Metodlarını İdarə Edin...</translation>
 <translation id="470966556546083668">Sinxronizasiyanı aktiv etməyin</translation>
 <translation id="4731472194328757163">Kamera və Mikrofona giriş icazəsi verilib</translation>
+<translation id="4737560986434232178">Son Tabları axtarın</translation>
 <translation id="473775607612524610">Güncəlləşdirin</translation>
 <translation id="4747097190499141774">Google Pay'dəki ödəniş metodları və ünvanlar parol şifrələməsinə daxil deyil. Yanlız parolunuzu bilən şəxs şifrələnmiş datanı oxuya bilər. Google parolu əldə etmir və ya saxlamır. Parolu unutsanız və ya bu ayarı dəyişmək istəsəniz, sinxronizasiyanı sıfırlamalısınız. <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Yeni Anonim Tab</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
index d4b8871..8939bc6e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Saznajte kako</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
 <translation id="1275718070701477396">Odabrano</translation>
+<translation id="1281818060020671000">Upravljajte podacima</translation>
 <translation id="1282311502488501110">Nemoj se prijaviti</translation>
 <translation id="1283524564873030414">Posljednja 24 sata</translation>
 <translation id="1285320974508926690">Nikada ne prevodi ovu web lokaciju</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Upravljajte načinima plaćanja...</translation>
 <translation id="470966556546083668">Nemojte uključiti sinhronizaciju</translation>
 <translation id="4731472194328757163">Pristup kameri i mikrofonu je dozvoljen</translation>
+<translation id="4737560986434232178">Pretražite nedavno korištene kartice</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4747097190499141774">Šifriranje pristupnim izrazom ne obuhvata načine plaćanja i adrese iz Google Paya. Vaše šifrirane podatke može čitati samo osoba koja posjeduje vaš pristupni izraz. Pristupni izraz se ne šalje Googleu niti ga Google pohranjuje. Ako zaboravite pristupni izraz ili želite promijeniti ovu postavku, morate poništiti sinhronizaciju <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nova anonimna kartica</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index ec1ae6b4..be481804 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">જાણો કેવી રીતે</translation>
 <translation id="1272079795634619415">રોકો</translation>
 <translation id="1275718070701477396">પસંદ કરેલું</translation>
+<translation id="1281818060020671000">ડેટા મેનેજ કરો</translation>
 <translation id="1282311502488501110">સાઇન ઇન કરશો નહીં</translation>
 <translation id="1283524564873030414">છેલ્લા 24 કલાક</translation>
 <translation id="1285320974508926690">આ સાઇટનો ક્યારેય અનુવાદ કરશો નહીં</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">ચુકવણી પદ્ધતિઓ મેનેજ કરો…</translation>
 <translation id="470966556546083668">સિંક કરવાની સુવિધા ચાલુ કરશો નહીં</translation>
 <translation id="4731472194328757163">કૅમેરા અને માઇક્રોફોનના ઍક્સેસની મંજૂરી આપવામાં આવી છે</translation>
+<translation id="4737560986434232178">તાજેતરની ટૅબમાં શોધો</translation>
 <translation id="473775607612524610">અપડેટ કરો</translation>
 <translation id="4747097190499141774">પાસફ્રેઝ એન્ક્રિપ્શનમાં Google Payની ચુકવણી પદ્ધતિઓ અને ઍડ્રેસ સામેલ હોતા નથી. માત્ર તમારા પાસફ્રેઝ ધરાવતી કોઈ વ્યક્તિ જ તમારા એન્ક્રિપ્ટ કરેલા ડેટાને વાંચી શકે છે. Googleને પાસફ્રેઝ મોકલવામાં આવતો નથી કે તેના દ્વારા સંગ્રહિત કરવામાં આવતો નથી. જો તમે તમારો પાસફ્રેઝ ભૂલી જાઓ અથવા આ સેટિંગ બદલવા માંગતા હો, તો તમારે સિંકને રીસેટ કરવું પડશે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">નવું છૂપું ટૅબ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 13ad7ef..de268109 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">तरीका जानें</translation>
 <translation id="1272079795634619415">रोकें</translation>
 <translation id="1275718070701477396">चयनित</translation>
+<translation id="1281818060020671000">डेटा मैनेज करें</translation>
 <translation id="1282311502488501110">साइन इन न करें</translation>
 <translation id="1283524564873030414">पिछले 24 घंटे</translation>
 <translation id="1285320974508926690">कभी भी इस साइट का अनुवाद न करें</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">भुगतान के तरीके प्रबंधित करें...</translation>
 <translation id="470966556546083668">सिंक करने की सुविधा को चालू न करें</translation>
 <translation id="4731472194328757163">कैमरा और माइक्रोफ़ोन इस्तेमाल किया जा सकता है</translation>
+<translation id="4737560986434232178">हाल ही में खोले गए टैब में खोजें</translation>
 <translation id="473775607612524610">अपडेट करें</translation>
 <translation id="4747097190499141774">लंबा पासवर्ड सुरक्षित करने के तरीके में Google Pay से भुगतान करने की विधि और पते शामिल नहीं हैं. सिर्फ़ वह इंसान आपका सुरक्षित किया हुआ डेटा पढ़ सकता है जिसके पास आपका लंबा पासवर्ड है. Google की ओर से लंबा पासवर्ड भेजा या संग्रहित नहीं किया जाता है. अगर आप अपना लंबा पासवर्ड भूल जाते हैं या इस सेटिंग को बदलना चाहते हैं, तो आपको सिंक रीसेट करना होगा. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">नया 'गुप्त' टैब</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 4e07e9e..77cc5a0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Saznajte kako</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
 <translation id="1275718070701477396">Odabrano</translation>
+<translation id="1281818060020671000">Upravljanje podacima</translation>
 <translation id="1282311502488501110">Ne prijavljuj se</translation>
 <translation id="1283524564873030414">Posljednja 24 sata</translation>
 <translation id="1285320974508926690">Nikad nemoj prevoditi ovu web-lokaciju</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Upravljajte načinima plaćanja...</translation>
 <translation id="470966556546083668">Ne uključuj sinkronizaciju</translation>
 <translation id="4731472194328757163">Dopušten je pristup kameri i mikrofonu</translation>
+<translation id="4737560986434232178">Pretraživanje nedavnih kartica</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4747097190499141774">Enkripcija šifrom ne uključuje podatke o načinima plaćanja i adresama s Google Paya. Samo osoba koja ima vašu šifru može čitati vaše kriptirane podatke. Šifra se ne šalje Googleu niti se na njemu pohranjuje. Ako zaboravite šifru ili želite promijeniti tu postavku, morate poništiti sinkronizaciju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nova anonimna kartica</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index d976519a1..949415f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Scopri come</translation>
 <translation id="1272079795634619415">Interrompi</translation>
 <translation id="1275718070701477396">Selezionato</translation>
+<translation id="1281818060020671000">Gestisci i dati</translation>
 <translation id="1282311502488501110">Non accedere</translation>
 <translation id="1283524564873030414">Ultime 24 ore</translation>
 <translation id="1285320974508926690">Non tradurre mai questo sito</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Gestisci metodi di pagamento…</translation>
 <translation id="470966556546083668">Non attivare la sincronizzazione</translation>
 <translation id="4731472194328757163">Accesso a fotocamera e microfono consentito</translation>
+<translation id="4737560986434232178">Cerca nelle schede recenti</translation>
 <translation id="473775607612524610">Aggiorna</translation>
 <translation id="4747097190499141774">La crittografia della passphrase non include metodi di pagamento e indirizzi di Google Pay. Soltanto chi conosce la tua passphrase può leggere i tuoi dati criptati. La passphrase non viene inviata a Google né memorizzata. Se dimentichi la passphrase o vuoi modificare questa impostazione, dovrai reimpostare la sincronizzazione. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nuova scheda in incognito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 829b7d6..cdc149f7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">詳細</translation>
 <translation id="1272079795634619415">中止</translation>
 <translation id="1275718070701477396">選択されています</translation>
+<translation id="1281818060020671000">データの管理</translation>
 <translation id="1282311502488501110">ログインしない</translation>
 <translation id="1283524564873030414">過去 24 時間</translation>
 <translation id="1285320974508926690">このサイトは翻訳しない</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">お支払い方法を管理...</translation>
 <translation id="470966556546083668">同期をオンにしない</translation>
 <translation id="4731472194328757163">カメラとマイクへのアクセスが許可されています</translation>
+<translation id="4737560986434232178">最近使ったタブを検索</translation>
 <translation id="473775607612524610">更新</translation>
 <translation id="4747097190499141774">パスフレーズ暗号化の対象に Google Pay のお支払い方法と住所は含まれません。パスフレーズを知っているユーザーだけが暗号化データを読み取ることができます。パスフレーズが Google に送信されたり Google で保存されたりすることはありません。パスフレーズを忘れた場合や、この設定を変更する場合は、同期をリセットする必要があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">新しいシークレット タブ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
index 19ef2cf..f1d5c5e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Әдісін білу</translation>
 <translation id="1272079795634619415">Тоқтату</translation>
 <translation id="1275718070701477396">Таңдалған</translation>
+<translation id="1281818060020671000">Деректерді басқару</translation>
 <translation id="1282311502488501110">Кірмеу</translation>
 <translation id="1283524564873030414">Соңғы 24 сағат</translation>
 <translation id="1285320974508926690">Бұл сайтты ешқашан аудармау</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Төлеу әдістерін басқару…</translation>
 <translation id="470966556546083668">Синхрондауды қоспау</translation>
 <translation id="4731472194328757163">Камера мен микрофонды пайдалану рұқсаты бар.</translation>
+<translation id="4737560986434232178">Соңғы қойындыларды іздеу</translation>
 <translation id="473775607612524610">Жаңарту</translation>
 <translation id="4747097190499141774">Google Pay қызметіндегі төлеу әдістері мен мекенжайлар құпия фразамен шифрланбайды. Құпия фразаны білетін адам ғана шифрланған деректерді оқи алады. Құпия фраза Google-ға жіберілмейді не онда сақталмайды. Оны ұмытып қалған жағдайда немесе бұл параметрді өзгертіңіз келгенде, синхрондауды бастапқы күйіне қайтару керек болады. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Жаңа инкогнито қойындысы</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index 70da28e3..f857939 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">ಹೇಗೆ ಎಂಬುದನ್ನು ತಿಳಿದುಕೊಳ್ಳಿ</translation>
 <translation id="1272079795634619415">ನಿಲ್ಲಿಸಿ</translation>
 <translation id="1275718070701477396">ಆಯ್ಕೆ ಮಾಡಿದ</translation>
+<translation id="1281818060020671000">ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="1282311502488501110">ಸೈನ್ ಇನ್ ಮಾಡಬೇಡಿ</translation>
 <translation id="1283524564873030414">ಕಳೆದ 24 ಗಂಟೆಗಳು</translation>
 <translation id="1285320974508926690">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಭಾಷಾಂತರಿಸದಿರಿ</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">ಪಾವತಿ ವಿಧಾನಗಳನ್ನು ನಿರ್ವಹಿಸಿ...</translation>
 <translation id="470966556546083668">ಸಿಂಕ್ ಆನ್ ಮಾಡಬೇಡಿ</translation>
 <translation id="4731472194328757163">ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation>
+<translation id="4737560986434232178">ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಹುಡುಕಿ</translation>
 <translation id="473775607612524610">ಅಪ್‌ಡೇಟ್‌‌</translation>
 <translation id="4747097190499141774">ಪಾಸ್‌ಫ್ರೇಸ್ ಎನ್‌ಕ್ರಿಪ್ಶನ್, Google Pay ನಿಂದ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ. ನಿಮ್ಮ ಎನ್‍‍ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಪಾಸ್‌ಫ್ರೇಸ್ ಹೊಂದಿರುವ ಯಾರಾದರೂ ಮಾತ್ರ ಓದಬಹುದು. ಪಾಸ್‍‍ಫ್ರೇಸ್‍ ಅನ್ನು Google ಗೆ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ ಅಥವಾ ಅದನ್ನು Google ನಿಂದ ಸಂಗ್ರಹಿಸಲಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮ ಪಾಸ್‍‍ಫ್ರೇಸ್ ಅನ್ನು ನೀವು ಮರೆತರೆ ಅಥವಾ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸಿದರೆ, ನೀವು ಸಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸುವ ಅಗತ್ಯವಿರುತ್ತದೆ. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">ಹೊಸ ಅದೃಶ್ಯ ಟ್ಯಾಬ್</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index 7b2ffb9..2e30b50 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">ສຶກສາວິທີການ</translation>
 <translation id="1272079795634619415">ຢຸດ</translation>
 <translation id="1275718070701477396">​ເລືອກແລ້ວ</translation>
+<translation id="1281818060020671000">ຈັດການຂໍ້ມູນ</translation>
 <translation id="1282311502488501110">ຢ່າເຂົ້າສູ່ລະບົບ</translation>
 <translation id="1283524564873030414">24 ຊົ່ວໂມງຜ່ານມາ</translation>
 <translation id="1285320974508926690">ຢ່າແປເວັບ​ໄຊ​ທ໌ນີ້</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">ຈັດການວິທີການຈ່າຍເງິນ...</translation>
 <translation id="470966556546083668">ຢ່າເປີດໃຊ້ການຊິ້ງຂໍ້ມູນ</translation>
 <translation id="4731472194328757163">ອະນຸຍາດສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນແລ້ວ</translation>
+<translation id="4737560986434232178">ຊອກຫາແຖບຫຼ້າສຸດ</translation>
 <translation id="473775607612524610">ອັບເດດ</translation>
 <translation id="4747097190499141774">ການເຂົ້າລະຫັດໂດຍໃຊ້ລະຫັດຜ່ານບໍ່ຮວມເອົາວິທີການຈ່າຍເງິນ ແລະ ທີ່ຢູ່ຈາກ Google Pay. ມີແຕ່ຜູ້ທີ່ມີລະຫັດຜ່ານຂອງທ່ານເທົ່ານັ້ນທີ່ສາມາດອ່ານຂໍ້ມູນທີ່ເຂົ້າລະຫັດຂອງທ່ານໄດ້. ລະຫັດຜ່ານຈະບໍ່ຖືກສົ່ງຫາ ຫຼື ຮັກສາໄວ້ໂດຍ Google. ຖ້າທ່ານລືມລະຫັດຜ່ານຂອງທ່ານ ຫຼື ຕ້ອງການປ່ຽນການຕັ້ງຄ່ານີ້, ທ່ານຈະຈຳເປັນຕ້ອງຣີເຊັດການຊິ້ງຂໍ້ມູນກ່ອນ. <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">ແຖບທີ່ບໍ່ເຜີຍຕົວຕົນໃໝ່</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index 8dcee08..26b6fc40 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">എങ്ങനെയെന്നറിയുക</translation>
 <translation id="1272079795634619415">നിര്‍ത്തുക</translation>
 <translation id="1275718070701477396">തിരഞ്ഞെടുത്തു</translation>
+<translation id="1281818060020671000">ഡാറ്റ മാനേജ് ചെയ്യുക</translation>
 <translation id="1282311502488501110">സൈൻ ഇൻ ചെയ്യരുത്</translation>
 <translation id="1283524564873030414">അവസാന 24 മണിക്കൂർ</translation>
 <translation id="1285320974508926690">ഈ സൈറ്റ് ഒരിക്കലും വിവര്‍‌ത്തനം ചെയ്യരുത്</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">പേയ്മെന്റ് രീതികൾ മാനേജ് ചെയ്യുക...</translation>
 <translation id="470966556546083668">സമന്വയിപ്പിക്കൽ ഓണാക്കരുത്</translation>
 <translation id="4731472194328757163">ക്യാമറ, മൈക്രോഫോൺ ആക്‌സസ് അനുവദിച്ചിരിക്കുന്നു</translation>
+<translation id="4737560986434232178">അടുത്തിടെ തുറന്ന ടാബുകൾ തിരയുക</translation>
 <translation id="473775607612524610">അപ്ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="4747097190499141774">പാസ്‌ഫ്രെയ്‌സ് എൻക്രിപ്ഷനിൽ, Google Pay-ൽ നിന്നുള്ള പേയ്മെന്‍റ് രീതികളും വിലാസങ്ങളും ഉൾപ്പെടുന്നില്ല. നിങ്ങളുടെ പാസ്‌ഫ്രെയ്‌സുള്ള വ്യക്തിക്ക് മാത്രമേ എൻക്രി‌പ്‌റ്റ് ചെയ്‌ത ഡാറ്റ വായിക്കാനാവൂ. പാസ്‌ഫ്രെയ്‌സ് Google-ലേക്ക് അയയ്‌ക്കുകയോ സംഭരിക്കുകയോ ചെയ്യുന്നില്ല. പാസ്‌ഫ്രെയ്‌സ് മറന്നുപോവുകയോ ഈ ക്രമീകരണം മാറ്റുകയോ ചെയ്യണമെങ്കിൽ, സമന്വയം പുനഃക്രമീകരിക്കേണ്ടി വരും. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">പുതിയ അദൃശ്യ ടാബ്</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index 6a65cc2..3dadf59 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Заавар харах</translation>
 <translation id="1272079795634619415">Зогс</translation>
 <translation id="1275718070701477396">Сонгогдсон</translation>
+<translation id="1281818060020671000">Өгөгдөл удирдах</translation>
 <translation id="1282311502488501110">Бүү нэвтэр</translation>
 <translation id="1283524564873030414">Сүүлийн 24 цаг</translation>
 <translation id="1285320974508926690">Энэ сайтыг хэзээ ч бүү хөрвүүл</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Төлбөрийн хэрэгслийг удирдах...</translation>
 <translation id="470966556546083668">Синк хийхийг бүү асаа</translation>
 <translation id="4731472194328757163">Камер болон микрофоны хандалтыг зөвшөөрсөн</translation>
+<translation id="4737560986434232178">Саяхны табуудыг хайх</translation>
 <translation id="473775607612524610">Шинэчлэх</translation>
 <translation id="4747097190499141774">Нэвтрэх үгийн шифрлэлтэд Google Pay-н төлбөрийн хэрэгслүүд болон хаягуудыг агуулдаггүй. Зөвхөн таны нэвтрэх үгийг мэддэг хүн л таны шифрлэсэн өгөгдлийг унших боломжтой. Нэвтрэх үгийг Google-д илгээхгүй бөгөөд Google-с хадгалахгүй. Хэрэв та нэвтрэх үгээ мартсан эсвэл энэ тохиргоог өөрчлөхийг хүсвэл синкийг шинэчлэх шаардлагатай. <ph name="BEGIN_LINK" />Нэмэлт мэдээлэл авах<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Нууцлалын шинэ таб</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 0511be0..44c87dac 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Meer informatie</translation>
 <translation id="1272079795634619415">Stop</translation>
 <translation id="1275718070701477396">Geselecteerd</translation>
+<translation id="1281818060020671000">Gegevens beheren</translation>
 <translation id="1282311502488501110">Niet inloggen</translation>
 <translation id="1283524564873030414">Afgelopen 24 uur</translation>
 <translation id="1285320974508926690">Deze site nooit vertalen</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Betaalmethoden beheren...</translation>
 <translation id="470966556546083668">Synchronisatie niet aanzetten</translation>
 <translation id="4731472194328757163">Camera- en microfoontoegang toegestaan</translation>
+<translation id="4737560986434232178">Recente tabbladen doorzoeken</translation>
 <translation id="473775607612524610">Updaten</translation>
 <translation id="4747097190499141774">Wachtwoordzinversleuteling is niet van toepassing op betaalmethoden en adressen van Google Pay. Alleen iemand met je wachtwoordzin kan je versleutelde gegevens lezen. De wachtwoordzin wordt niet verzonden naar of opgeslagen door Google. Als je je wachtwoordzin vergeet of deze instelling wilt wijzigen, moet je de synchronisatie resetten. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nieuw incognitotabblad</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 48171b9..ba51bc8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Instrukcje</translation>
 <translation id="1272079795634619415">Zatrzymaj</translation>
 <translation id="1275718070701477396">Zaznaczone</translation>
+<translation id="1281818060020671000">Zarządzaj danymi</translation>
 <translation id="1282311502488501110">Nie loguj się</translation>
 <translation id="1283524564873030414">Ostatnie 24 godziny</translation>
 <translation id="1285320974508926690">Nigdy nie tłumacz tej witryny</translation>
@@ -404,6 +405,7 @@
 <translation id="4689564913179979534">Zarządzaj formami płatności…</translation>
 <translation id="470966556546083668">Nie włączaj synchronizacji</translation>
 <translation id="4731472194328757163">Przyznano dostęp do kamery i mikrofonu</translation>
+<translation id="4737560986434232178">Szukaj w ostatnio przeglądanych kartach</translation>
 <translation id="473775607612524610">Aktualizuj</translation>
 <translation id="4747097190499141774">Szyfrowanie hasłem nie obejmuje form płatności ani adresów w Google Pay. Twoje zaszyfrowane dane może odczytać tylko ktoś znający hasło. Google nie otrzyma Twojego hasła ani nie będzie go przechowywać. Jeśli je zapomnisz lub zechcesz zmienić to ustawienie, konieczne będzie zresetowanie synchronizacji. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nowa karta incognito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 87bad3f..2f58a97 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Saiba como</translation>
 <translation id="1272079795634619415">Parar</translation>
 <translation id="1275718070701477396">Selecionado</translation>
+<translation id="1281818060020671000">Gerenciar dados</translation>
 <translation id="1282311502488501110">Não fazer login</translation>
 <translation id="1283524564873030414">Últimas 24 horas</translation>
 <translation id="1285320974508926690">Nunca traduzir este site</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Gerenciar formas de pagamento…</translation>
 <translation id="470966556546083668">Não ative a sincronização</translation>
 <translation id="4731472194328757163">Acesso permitido à câmera e ao microfone</translation>
+<translation id="4737560986434232178">Pesquisar guias recentes</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="4747097190499141774">A criptografia por senha longa não inclui formas de pagamento e endereços do Google Pay. Só alguém com acesso a sua senha longa pode ler seus dados criptografados. Essa senha não é enviada ou armazenada pelo Google. Se você esquecer a senha longa ou quiser alterar essa configuração, será necessário redefinir a sincronização. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nova guia anônima</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index a66d7efb..b2a84e5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Saiba como</translation>
 <translation id="1272079795634619415">Parar</translation>
 <translation id="1275718070701477396">Selecionado</translation>
+<translation id="1281818060020671000">Faça a gestão de dados</translation>
 <translation id="1282311502488501110">Não iniciar sessão</translation>
 <translation id="1283524564873030414">Últimas 24 horas</translation>
 <translation id="1285320974508926690">Nunca traduzir este site</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Gerir métodos de pagamento</translation>
 <translation id="470966556546083668">Não ative a sincronização</translation>
 <translation id="4731472194328757163">Acesso à câmara e ao microfone permitidos</translation>
+<translation id="4737560986434232178">Pesquise separadores recentes</translation>
 <translation id="473775607612524610">Atualizar</translation>
 <translation id="4747097190499141774">A encriptação da frase de acesso não inclui métodos de pagamento nem endereços do Google Pay. Apenas alguém que conheça a sua frase de acesso pode ler os seus dados encriptados. A frase de acesso não é enviada para a Google nem armazenada pela mesma. Se se esquecer da frase de acesso ou pretender alterar esta definição, tem de repor a sincronização. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Novo separador de navegação anónima</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 1e82570..d3dfefa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Подробнее</translation>
 <translation id="1272079795634619415">Остановить</translation>
 <translation id="1275718070701477396">Выбрано</translation>
+<translation id="1281818060020671000">Управление данными</translation>
 <translation id="1282311502488501110">Отмена</translation>
 <translation id="1283524564873030414">Последние 24 часа</translation>
 <translation id="1285320974508926690">Никогда не переводить этот сайт</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Настроить способы оплаты</translation>
 <translation id="470966556546083668">Не включать синхронизацию</translation>
 <translation id="4731472194328757163">Доступ к камере и микрофону разрешен.</translation>
+<translation id="4737560986434232178">Искать в недавних вкладках</translation>
 <translation id="473775607612524610">Обновить</translation>
 <translation id="4747097190499141774">Шифрование с помощью кодовой фразы не применяется к способам оплаты и адресам из Google Pay. Доступ к зашифрованным данным будет только у тех, кто знает кодовую фразу. Она не пересылается и не хранится в Google. Если вы забудете фразу или решите изменить эту настройку, вам придется сбросить параметры синхронизации. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Новая вкладка инкогнито</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index 8d70addd..8e69c65 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Saznajte kako</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
 <translation id="1275718070701477396">Izabrano</translation>
+<translation id="1281818060020671000">Upravljajte podacima</translation>
 <translation id="1282311502488501110">Ne prijavljuj me</translation>
 <translation id="1283524564873030414">Poslednja 24 sata</translation>
 <translation id="1285320974508926690">Nikad ne prevodi ovaj sajt</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Upravljajte načinima plaćanja...</translation>
 <translation id="470966556546083668">Ne uključuj sinhronizaciju</translation>
 <translation id="4731472194328757163">Pristup kameri i mikrofonu je dozvoljen</translation>
+<translation id="4737560986434232178">Pretražite nedavne kartice</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
 <translation id="4747097190499141774">Šifrovanje pomoću pristupne fraze ne obuhvata načine plaćanja i adrese iz Google Pay-a. Samo neko ko ima pristupnu frazu može da čita šifrovane podatke. Pristupna fraza se ne šalje Google-u niti je on čuva. Ako zaboravite pristupnu frazu ili poželite da promenite ovo podešavanje, treba da resetujete sinhronizaciju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Nova kartica bez arhiviranja</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 71120a8..78d5070 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">Сазнајте како</translation>
 <translation id="1272079795634619415">Заустави</translation>
 <translation id="1275718070701477396">Изабрано</translation>
+<translation id="1281818060020671000">Управљајте подацима</translation>
 <translation id="1282311502488501110">Не пријављуј ме</translation>
 <translation id="1283524564873030414">Последња 24 сата</translation>
 <translation id="1285320974508926690">Никад не преводи овај сајт</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">Управљајте начинима плаћања...</translation>
 <translation id="470966556546083668">Не укључуј синхронизацију</translation>
 <translation id="4731472194328757163">Приступ камери и микрофону је дозвољен</translation>
+<translation id="4737560986434232178">Претражите недавне картице</translation>
 <translation id="473775607612524610">Ажурирај</translation>
 <translation id="4747097190499141774">Шифровање помоћу приступне фразе не обухвата начине плаћања и адресе из Google Pay-а. Само неко ко има приступну фразу може да чита шифроване податке. Приступна фраза се не шаље Google-у нити је он чува. Ако заборавите приступну фразу или пожелите да промените ово подешавање, треба да ресетујете синхронизацију. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">Нова картица без архивирањa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index 625c84b..c23fc828 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -42,6 +42,7 @@
 <translation id="1265739287306757398">طریقہ جانیں</translation>
 <translation id="1272079795634619415">روکیں</translation>
 <translation id="1275718070701477396">منتخب</translation>
+<translation id="1281818060020671000">ڈیٹا کا نظم کریں</translation>
 <translation id="1282311502488501110">سائن ان نہ کریں</translation>
 <translation id="1283524564873030414">گزشتہ 24 گھنٹے</translation>
 <translation id="1285320974508926690">اس سائٹ کا ترجمہ کبھی نہ کریں</translation>
@@ -406,6 +407,7 @@
 <translation id="4689564913179979534">ادائیگی کے طریقوں کا نظم کریں...</translation>
 <translation id="470966556546083668">مطابقت پذیری کو آن نہ کریں</translation>
 <translation id="4731472194328757163">کیمرے اور مائیکروفون تک رسائی کی اجازت ہے</translation>
+<translation id="4737560986434232178">حالیہ ٹیبز تلاش کریں</translation>
 <translation id="473775607612524610">اپ ڈيٹ کریں</translation>
 <translation id="4747097190499141774">‏پاس فریز کی مرموز کاری میں Google Pay کے ادائیگی کے طریقے اور پتے شامل نہیں ہوتے ہیں۔ آپ کے پاس فریز کا حامل شخص ہی آپ کے مرموز کردہ ڈیٹا کو پڑھ سکتا ہے۔ پاس فریز Google کو نہیں بھیجا جاتا ہے اور نہ ہی Google اسے اسٹور کرتا ہے۔ اگر آپ اپنا پاس فریز بھول جاتے ہیں یا اس ترتیب کو تبدیل کرنا چاہتے ہیں تو آپ کو مطابقت پذیری کو دوبارہ ترتیب دینے کی ضرورت ہوگی۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">نیا پوشیدگی ٹیب</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 9882767..6a468aa0 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -778,6 +778,11 @@
      flag_descriptions::kMuteCompromisedPasswordsName,
      flag_descriptions::kMuteCompromisedPasswordsDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(password_manager::features::kMuteCompromisedPasswords)},
+    {"enable-favicon-passwords",
+     flag_descriptions::kEnableFaviconForPasswordsName,
+     flag_descriptions::kEnableFaviconForPasswordsDescription, flags_ui::kOsIos,
+     FEATURE_VALUE_TYPE(
+         password_manager::features::kEnableFaviconForPasswords)},
     {"autofill-enable-sending-bcn-in-get-upload-details",
      flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsName,
      flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 049028df..5faf7fe3 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -186,6 +186,12 @@
     "This test display the FRE default browser screen and other default "
     "browser promo depending on experiment.";
 
+const char kEnableFaviconForPasswordsName[] =
+    "Enable favicons in the Password Manager";
+const char kEnableFaviconForPasswordsDescription[] =
+    "Show favicons in the Password Manager settings for the Saved Passwords "
+    "and Never Saved sections.";
+
 const char kEnableFREUIModuleIOSName[] = "Enable FRE UI module with options";
 const char kEnableFREUIModuleIOSDescription[] =
     "Use the new FRE UI module for first run. There are 4 UI options: Identity "
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 733f97e..0a3a449 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -168,6 +168,11 @@
 extern const char kEnableDiscoverFeedStaticResourceServingName[];
 extern const char kEnableDiscoverFeedStaticResourceServingDescription[];
 
+// Title and description for the flag to enable favicon for the Password
+// Manager.
+extern const char kEnableFaviconForPasswordsName[];
+extern const char kEnableFaviconForPasswordsDescription[];
+
 // Title and description for the flag to test the FRE default browser promo
 // experiment.
 extern const char kEnableFREDefaultBrowserScreenTestingName[];
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn
index 94a2fa3..873db42 100644
--- a/ios/chrome/browser/ui/bookmarks/BUILD.gn
+++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -71,6 +71,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/default_promo:utils",
     "//ios/chrome/browser/ui/elements",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent",
     "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/list_model",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_shared_state.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_shared_state.mm
index b2e4c7a3..9c45a78 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_shared_state.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_shared_state.mm
@@ -6,6 +6,7 @@
 
 #include "base/check.h"
 #import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_cell_title_editing.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/table_view/table_view_model.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -13,12 +14,6 @@
 #endif
 
 namespace {
-// Minimal acceptable favicon size, in points.
-const CGFloat kMinFaviconSizePt = 16.0;
-
-// Desired favicon size, in points.
-const CGFloat kDesiredFaviconSizePt = 32.0;
-
 // Minimium spacing between keyboard and the titleText when creating new folder,
 // in points.
 const CGFloat kKeyboardSpacingPt = 16.0;
@@ -80,7 +75,7 @@
 }
 
 + (CGFloat)desiredFaviconSizePt {
-  return kDesiredFaviconSizePt;
+  return kDesiredMediumFaviconSizePt;
 }
 
 + (CGFloat)keyboardSpacingPt {
diff --git a/ios/chrome/browser/ui/context_menu/BUILD.gn b/ios/chrome/browser/ui/context_menu/BUILD.gn
index 0a6036b..4155b74 100644
--- a/ios/chrome/browser/ui/context_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/context_menu/BUILD.gn
@@ -22,6 +22,7 @@
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/context_menu/link_preview",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/image_util:web",
     "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_commands",
     "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent",
diff --git a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
index 2bd1443a..c72438b 100644
--- a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
+++ b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
@@ -26,6 +26,7 @@
 #import "ios/chrome/browser/ui/context_menu/context_menu_utils.h"
 #import "ios/chrome/browser/ui/context_menu/image_preview_view_controller.h"
 #import "ios/chrome/browser/ui/context_menu/link_no_preview_view_controller.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/image_util/image_copier.h"
 #import "ios/chrome/browser/ui/image_util/image_saver.h"
 #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_commands.h"
@@ -62,9 +63,6 @@
 // Character to append to context menut titles that are truncated.
 NSString* const kContextMenuEllipsis = @"…";
 
-// Desired width and height of favicon.
-const CGFloat kFaviconWidthHeight = 24;
-
 }  // namespace
 
 @interface ContextMenuConfigurationProvider ()
@@ -330,7 +328,7 @@
           IOSChromeFaviconLoaderFactory::GetForBrowserState(
               self.browser->GetBrowserState());
       faviconLoader->FaviconForPageUrl(
-          linkURL, kFaviconWidthHeight, kFaviconWidthHeight,
+          linkURL, kDesiredSmallFaviconSizePt, kDesiredSmallFaviconSizePt,
           /*fallback_to_google_server=*/false,
           ^(FaviconAttributes* attributes) {
             [weakPreview configureFaviconWithAttributes:attributes];
diff --git a/ios/chrome/browser/ui/favicon/BUILD.gn b/ios/chrome/browser/ui/favicon/BUILD.gn
index adb21cf..32e8547 100644
--- a/ios/chrome/browser/ui/favicon/BUILD.gn
+++ b/ios/chrome/browser/ui/favicon/BUILD.gn
@@ -24,3 +24,11 @@
   ]
   configs += [ "//build/config/compiler:enable_arc" ]
 }
+
+source_set("constants") {
+  sources = [
+    "favicon_constants.h",
+    "favicon_constants.mm",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/favicon/favicon_constants.h b/ios/chrome/browser/ui/favicon/favicon_constants.h
new file mode 100644
index 0000000..085b53a3
--- /dev/null
+++ b/ios/chrome/browser/ui/favicon/favicon_constants.h
@@ -0,0 +1,18 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_CONSTANTS_H_
+#define IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_CONSTANTS_H_
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+// Minimal acceptable favicon size, in points.
+extern CGFloat const kMinFaviconSizePt;
+// Desired small favicon size, in points.
+extern CGFloat const kDesiredSmallFaviconSizePt;
+// Desired medium favicon size, in points.
+extern CGFloat const kDesiredMediumFaviconSizePt;
+
+#endif  // IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/favicon/favicon_constants.mm b/ios/chrome/browser/ui/favicon/favicon_constants.mm
new file mode 100644
index 0000000..c26917c
--- /dev/null
+++ b/ios/chrome/browser/ui/favicon/favicon_constants.mm
@@ -0,0 +1,13 @@
+// Copyright 2022 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/chrome/browser/ui/favicon/favicon_constants.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+CGFloat const kMinFaviconSizePt = 16.0;
+CGFloat const kDesiredSmallFaviconSizePt = 24.0;
+CGFloat const kDesiredMediumFaviconSizePt = 32.0;
diff --git a/ios/chrome/browser/ui/first_run/uma/BUILD.gn b/ios/chrome/browser/ui/first_run/uma/BUILD.gn
new file mode 100644
index 0000000..1592b909
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/BUILD.gn
@@ -0,0 +1,45 @@
+# Copyright 2022 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("//build/config/chrome_build.gni")
+
+source_set("uma") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "uma_coordinator.h",
+    "uma_coordinator.mm",
+    "uma_mediator.h",
+    "uma_mediator.mm",
+  ]
+  deps = [
+    ":uma_ui",
+    "//base",
+    "//components/metrics",
+    "//components/prefs",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/table_view:utils",
+    "//ios/chrome/common",
+    "//ui/base",
+  ]
+}
+
+source_set("uma_ui") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "uma_table_view_controller.h",
+    "uma_table_view_controller.mm",
+    "uma_table_view_controller_model_delegate.h",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/list_model",
+    "//ios/chrome/browser/ui/table_view",
+    "//ios/chrome/browser/ui/table_view:utils",
+    "//ios/chrome/browser/ui/table_view/cells:cells_constants",
+    "//ios/chrome/common",
+    "//ui/base",
+  ]
+}
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_coordinator.h b/ios/chrome/browser/ui/first_run/uma/uma_coordinator.h
new file mode 100644
index 0000000..4df2503
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_coordinator.h
@@ -0,0 +1,27 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_COORDINATOR_H_
+
+#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
+
+@class UMACoordinator;
+
+// Delegate for UMACoordinator.
+@protocol UMACoordinatorDelegate <NSObject>
+
+// Called when the coordinator has been removed from the screen.
+- (void)UMACoordinatorDidRemove:(UMACoordinator*)coordinator;
+
+@end
+
+// Coordinator to present UMA dialog in the FRE.
+@interface UMACoordinator : ChromeCoordinator
+
+@property(nonatomic, weak) id<UMACoordinatorDelegate> delegate;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_coordinator.mm b/ios/chrome/browser/ui/first_run/uma/uma_coordinator.mm
new file mode 100644
index 0000000..ddb4f31
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_coordinator.mm
@@ -0,0 +1,70 @@
+// Copyright 2022 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/chrome/browser/ui/first_run/uma/uma_coordinator.h"
+
+#import "base/check_op.h"
+#import "base/mac/foundation_util.h"
+#import "ios/chrome/browser/ui/first_run/uma/uma_mediator.h"
+#import "ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.h"
+#import "ios/chrome/browser/ui/table_view/table_view_utils.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface UMACoordinator () <UIAdaptivePresentationControllerDelegate,
+                              UMATableViewControllerPresentationDelegate>
+
+@property(nonatomic, strong) UMATableViewController* viewController;
+@property(nonatomic, strong) UMAMediator* mediator;
+
+@end
+
+@implementation UMACoordinator
+
+- (void)start {
+  [super start];
+  // Creates the mediator and view controller.
+  self.mediator = [[UMAMediator alloc] init];
+  self.viewController =
+      [[UMATableViewController alloc] initWithStyle:ChromeTableViewStyle()];
+  self.viewController.modelDelegate = self.mediator;
+  self.viewController.presentationDelegate = self;
+  // Creates the navigation controller and present.
+  UINavigationController* navigationController = [[UINavigationController alloc]
+      initWithRootViewController:self.viewController];
+  navigationController.presentationController.delegate = self;
+  navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
+  if (@available(iOS 15, *)) {
+    // TODO(crbug.com/1290848): Needs to set the presentation for iPad.
+    UISheetPresentationController* presentationController =
+        navigationController.sheetPresentationController;
+    presentationController.prefersEdgeAttachedInCompactHeight = YES;
+    presentationController.detents = @[
+      UISheetPresentationControllerDetent.mediumDetent,
+      UISheetPresentationControllerDetent.largeDetent
+    ];
+  }
+  [self.baseViewController presentViewController:navigationController
+                                        animated:YES
+                                      completion:nil];
+}
+
+#pragma mark - UIAdaptivePresentationControllerDelegate
+
+- (void)presentationControllerDidDismiss:
+    (UIPresentationController*)presentationController {
+  [self.delegate UMACoordinatorDidRemove:self];
+}
+
+#pragma mark - UMATableViewControllerPresentationDelegate
+
+- (void)UMATableViewControllerDidDismiss:
+    (UMATableViewController*)viewController {
+  DCHECK_EQ(self.viewController, viewController);
+  [self.delegate UMACoordinatorDidRemove:self];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_mediator.h b/ios/chrome/browser/ui/first_run/uma/uma_mediator.h
new file mode 100644
index 0000000..dc64a5f5
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_mediator.h
@@ -0,0 +1,17 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_MEDIATOR_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ui/first_run/uma/uma_table_view_controller_model_delegate.h"
+
+// Mediator for the UMA dialog.
+@interface UMAMediator : NSObject <UMATableViewControllerModelDelegate>
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_mediator.mm b/ios/chrome/browser/ui/first_run/uma/uma_mediator.mm
new file mode 100644
index 0000000..a5f4c89
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_mediator.mm
@@ -0,0 +1,29 @@
+// Copyright 2022 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/chrome/browser/ui/first_run/uma/uma_mediator.h"
+
+#import "components/metrics/metrics_pref_names.h"
+#import "components/prefs/pref_service.h"
+#import "ios/chrome/browser/application_context.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@implementation UMAMediator
+
+#pragma mark - UMATableViewControllerModelDelegate
+
+- (BOOL)reportingMetricEnabled {
+  return GetApplicationContext()->GetLocalState()->GetBoolean(
+      metrics::prefs::kMetricsReportingEnabled);
+}
+
+- (void)setReportingMetricEnabled:(BOOL)isEnabled {
+  GetApplicationContext()->GetLocalState()->SetBoolean(
+      metrics::prefs::kMetricsReportingEnabled, isEnabled);
+}
+
+@end
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.h b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.h
new file mode 100644
index 0000000..d9efbff
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.h
@@ -0,0 +1,33 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_H_
+
+#import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h"
+
+@class UMATableViewController;
+@protocol UMATableViewControllerModelDelegate;
+
+// Delegate for UMATableViewController, to receive events when the view
+// controller is dismissed.
+@protocol UMATableViewControllerPresentationDelegate <NSObject>
+
+// Called when the view controller is dismissed, using the "Done" button.
+- (void)UMATableViewControllerDidDismiss:
+    (UMATableViewController*)viewController;
+
+@end
+
+// View controller for the UMA dialog.
+@interface UMATableViewController : ChromeTableViewController
+
+@property(nonatomic, weak) id<UMATableViewControllerModelDelegate>
+    modelDelegate;
+@property(nonatomic, weak) id<UMATableViewControllerPresentationDelegate>
+    presentationDelegate;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.mm b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.mm
new file mode 100644
index 0000000..bddaf51
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller.mm
@@ -0,0 +1,161 @@
+// Copyright 2022 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/chrome/browser/ui/first_run/uma/uma_table_view_controller.h"
+
+#import "base/check_op.h"
+#import "base/mac/foundation_util.h"
+#import "ios/chrome/browser/ui/first_run/uma/uma_table_view_controller_model_delegate.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_switch_cell.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_switch_item.h"
+#import "ios/chrome/common/string_util.h"
+#import "ios/chrome/grit/ios_google_chrome_strings.h"
+#import "ui/base/l10n/l10n_util_mac.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+// List of sections.
+typedef NS_ENUM(NSInteger, UMASectionIdentifier) {
+  // Main section.
+  UMAMainSectionIdentifier = kSectionIdentifierEnumZero,
+};
+
+// List of items.
+typedef NS_ENUM(NSInteger, UMAItemType) {
+  // Checkbox item to enable/disable the UMA metrics.
+  UMAItemTypeCheckbox = kItemTypeEnumZero,
+  // Footer with the description about UMA metrics.
+  UMAItemTypeFooter,
+};
+
+// Prefix used for bullet points in the UMA descriptions. This prefix is used to
+// compute how many pixels the paragraph lines needs to be aligned with the
+// first line. It is impportant all translations have the exact same prefix.
+NSString* const kBulletPrefix = @"  • ";
+// Begin and end tags to find bullet points paragraphs.
+NSString* const kBegingIndentString = @"BEGIN_INDENT";
+NSString* const kEndIndentString = @"END_INDENT";
+
+// Parses a string with an embedded bold part inside, delineated by
+// "BEGIN_INDENT" and "END_INDENT". Returns an attributed string with the right
+// paragraph style.
+NSMutableAttributedString* AddIndentAttributes(NSString* string,
+                                               CGFloat indentSize) {
+  StringWithTags parsedString =
+      ParseStringWithTags(string, kBegingIndentString, kEndIndentString);
+  NSMutableAttributedString* attributedString =
+      [[NSMutableAttributedString alloc] initWithString:parsedString.string];
+  NSMutableParagraphStyle* paragraphStyle =
+      [[NSMutableParagraphStyle alloc] init];
+  paragraphStyle.headIndent = indentSize;
+  for (std::vector<NSRange>::iterator it = parsedString.ranges.begin();
+       it != parsedString.ranges.end(); ++it) {
+    [attributedString addAttribute:NSParagraphStyleAttributeName
+                             value:paragraphStyle
+                             range:*it];
+  }
+  return attributedString;
+}
+
+}  // namespace
+
+@implementation UMATableViewController
+
+#pragma mark - UIViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  self.title = l10n_util::GetNSString(IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE);
+  UIBarButtonItem* doneButton = [[UIBarButtonItem alloc]
+      initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+                           target:self
+                           action:@selector(doneButtonAction:)];
+  self.navigationItem.rightBarButtonItem = doneButton;
+  [self loadModel];
+}
+
+#pragma mark - Actions
+
+- (void)doneButtonAction:(id)sender {
+  __weak __typeof(self) weakSelf = self;
+  [self dismissViewControllerAnimated:YES
+                           completion:^() {
+                             [weakSelf.presentationDelegate
+                                 UMATableViewControllerDidDismiss:self];
+                           }];
+}
+
+- (void)switchAction:(UISwitch*)sender {
+  TableViewModel* model = self.tableViewModel;
+  NSIndexPath* indexPath = [model indexPathForItemType:sender.tag];
+  DCHECK(indexPath);
+  TableViewSwitchItem* switchItem =
+      base::mac::ObjCCastStrict<TableViewSwitchItem>(
+          [model itemAtIndexPath:indexPath]);
+  DCHECK(switchItem);
+  self.modelDelegate.reportingMetricEnabled = sender.isOn;
+}
+
+#pragma mark - UITableViewDataSource
+
+- (UITableViewCell*)tableView:(UITableView*)tableView
+        cellForRowAtIndexPath:(NSIndexPath*)indexPath {
+  UITableViewCell* cell = [super tableView:tableView
+                     cellForRowAtIndexPath:indexPath];
+  if ([cell isKindOfClass:[TableViewSwitchCell class]]) {
+    TableViewSwitchCell* switchCell =
+        base::mac::ObjCCastStrict<TableViewSwitchCell>(cell);
+    [switchCell.switchView addTarget:self
+                              action:@selector(switchAction:)
+                    forControlEvents:UIControlEventValueChanged];
+    ListItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
+    switchCell.switchView.tag = item.type;
+  }
+  return cell;
+}
+
+#pragma mark - ChromeTableViewController
+
+- (void)loadModel {
+  [super loadModel];
+  // Adds the section.
+  TableViewModel* model = self.tableViewModel;
+  [model addSectionWithIdentifier:UMAMainSectionIdentifier];
+
+  // Adds switch item.
+  TableViewSwitchItem* switchItem =
+      [[TableViewSwitchItem alloc] initWithType:UMAItemTypeCheckbox];
+  switchItem.on = self.modelDelegate.reportingMetricEnabled;
+  switchItem.text =
+      l10n_util::GetNSString(IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX);
+  [model addItem:switchItem toSectionWithIdentifier:UMAMainSectionIdentifier];
+
+  // Adds the footer.
+  NSString* string =
+      l10n_util::GetNSString(IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION);
+  NSMutableDictionary* regularAttributes = [NSMutableDictionary dictionary];
+  [regularAttributes
+      setObject:[UIFont preferredFontForTextStyle:kTableViewSublabelFontStyle]
+         forKey:NSFontAttributeName];
+  CGSize indentSize = [kBulletPrefix sizeWithAttributes:regularAttributes];
+  NSMutableAttributedString* attributedString =
+      AddIndentAttributes(string, indentSize.width);
+  [attributedString
+      addAttributes:regularAttributes
+              range:NSMakeRange(0, attributedString.string.length)];
+  TableViewAttributedStringHeaderFooterItem* headerItem =
+      [[TableViewAttributedStringHeaderFooterItem alloc]
+          initWithType:UMAItemTypeFooter];
+  headerItem.attributedString = attributedString;
+  [model setFooter:headerItem
+      forSectionWithIdentifier:UMAMainSectionIdentifier];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller_model_delegate.h b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller_model_delegate.h
new file mode 100644
index 0000000..29f19cc7
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/uma/uma_table_view_controller_model_delegate.h
@@ -0,0 +1,18 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_
+#define IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_
+
+#import <UIKit/UIKit.h>
+
+// Delegate for UMATableViewController.
+@protocol UMATableViewControllerModelDelegate <NSObject>
+
+// Property to get and set the metrics reporting setting.
+@property(nonatomic, assign) BOOL reportingMetricEnabled;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_FIRST_RUN_UMA_UMA_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
index 8ef88db3..5cabff7 100644
--- a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
@@ -20,6 +20,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/first_run:screen_delegate",
+    "//ios/chrome/browser/ui/first_run/uma",
     "//ios/chrome/browser/ui/util:terms_util",
     "//ios/web/common:web_view_creation_util",
     "//ui/base",
diff --git a/ios/chrome/browser/ui/history/BUILD.gn b/ios/chrome/browser/ui/history/BUILD.gn
index cad8cdb..7121f3b 100644
--- a/ios/chrome/browser/ui/history/BUILD.gn
+++ b/ios/chrome/browser/ui/history/BUILD.gn
@@ -28,6 +28,7 @@
     "//ios/chrome/browser/ui/activity_services",
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/history/public",
     "//ios/chrome/browser/ui/menu",
     "//ios/chrome/browser/ui/sharing",
diff --git a/ios/chrome/browser/ui/history/history_mediator.mm b/ios/chrome/browser/ui/history/history_mediator.mm
index 70b0613..dcc278b 100644
--- a/ios/chrome/browser/ui/history/history_mediator.mm
+++ b/ios/chrome/browser/ui/history/history_mediator.mm
@@ -7,18 +7,12 @@
 #import "ios/chrome/browser/favicon/favicon_loader.h"
 #include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/net/crurl.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
 
-namespace {
-// Desired width and height of favicon.
-const CGFloat kFaviconWidthHeight = 24;
-// Minimum favicon size to retrieve.
-const CGFloat kFaviconMinWidthHeight = 16;
-}  // namespace
-
 @interface HistoryMediator ()
 // FaviconLoader is a keyed service that uses LargeIconService to retrieve
 // favicon images.
@@ -44,7 +38,7 @@
 - (void)faviconForURL:(CrURL*)URL
            completion:(void (^)(FaviconAttributes*))completion {
   self.faviconLoader->FaviconForPageUrl(
-      URL.gurl, kFaviconWidthHeight, kFaviconMinWidthHeight,
+      URL.gurl, kDesiredSmallFaviconSizePt, kMinFaviconSizePt,
       /*fallback_to_google_server=*/false, ^(FaviconAttributes* attributes) {
         completion(attributes);
       });
diff --git a/ios/chrome/browser/ui/omnibox/BUILD.gn b/ios/chrome/browser/ui/omnibox/BUILD.gn
index 97976dd..55865c0d 100644
--- a/ios/chrome/browser/ui/omnibox/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/BUILD.gn
@@ -152,6 +152,7 @@
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/default_promo",
     "//ios/chrome/browser/ui/default_promo:utils",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/fullscreen",
     "//ios/chrome/browser/ui/gestures",
     "//ios/chrome/browser/ui/location_bar:constants",
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm b/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
index 3ba087f..84e63fc 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
@@ -9,6 +9,7 @@
 #import "ios/chrome/browser/favicon/favicon_loader.h"
 #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h"
 #import "ios/chrome/browser/search_engines/search_engines_util.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_consumer.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_util.h"
 #include "ios/chrome/browser/ui/ui_feature_flags.h"
@@ -20,10 +21,6 @@
 #error "This file requires ARC support."
 #endif
 
-namespace {
-const CGFloat kOmniboxIconSize = 16;
-}  // namespace
-
 @interface OmniboxMediator () <SearchEngineObserving>
 
 // Whether the current default search engine supports search-by-image.
@@ -156,7 +153,7 @@
   // Download the favicon.
   // The code below mimics that in OmniboxPopupMediator.
   self.faviconLoader->FaviconForPageUrl(
-      pageURL, kOmniboxIconSize, kOmniboxIconSize,
+      pageURL, kMinFaviconSizePt, kMinFaviconSizePt,
       /*fallback_to_google_server=*/false, handleFaviconResult);
 }
 
@@ -206,7 +203,7 @@
   __weak __typeof(self) weakSelf = self;
   self.latestDefaultSearchEngine = defaultProvider;
   auto handleFaviconResult = ^void(FaviconAttributes* faviconCacheResult) {
-    DCHECK_LE(faviconCacheResult.faviconImage.size.width, kOmniboxIconSize);
+    DCHECK_LE(faviconCacheResult.faviconImage.size.width, kMinFaviconSizePt);
     if (weakSelf.latestDefaultSearchEngine != defaultProvider ||
         !faviconCacheResult.faviconImage ||
         faviconCacheResult.usesDefaultImage) {
@@ -229,13 +226,13 @@
         TemplateURLRef::SearchTermsArgs(std::u16string()),
         _templateURLService->search_terms_data());
     self.faviconLoader->FaviconForPageUrl(
-        GURL(emptyPageUrl), kOmniboxIconSize, kOmniboxIconSize,
+        GURL(emptyPageUrl), kMinFaviconSizePt, kMinFaviconSizePt,
         /*fallback_to_google_server=*/YES, handleFaviconResult);
   } else {
     // Download the favicon.
     // The code below mimics that in OmniboxPopupMediator.
     self.faviconLoader->FaviconForIconUrl(defaultProvider->favicon_url(),
-                                          kOmniboxIconSize, kOmniboxIconSize,
+                                          kMinFaviconSizePt, kMinFaviconSizePt,
                                           handleFaviconResult);
   }
 }
diff --git a/ios/chrome/browser/ui/reading_list/BUILD.gn b/ios/chrome/browser/ui/reading_list/BUILD.gn
index b7f968e..29bbb49 100644
--- a/ios/chrome/browser/ui/reading_list/BUILD.gn
+++ b/ios/chrome/browser/ui/reading_list/BUILD.gn
@@ -50,6 +50,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/favicon",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent",
     "//ios/chrome/browser/ui/main:scene_state_header",
     "//ios/chrome/browser/ui/menu",
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm b/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
index ac6dfbea..2d18847 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
+++ b/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
@@ -14,6 +14,7 @@
 #include "components/url_formatter/url_formatter.h"
 #import "ios/chrome/browser/favicon/favicon_loader.h"
 #include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_data_sink.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_list_item.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_list_item_factory.h"
@@ -32,11 +33,6 @@
 bool EntrySorter(const ReadingListEntry* rhs, const ReadingListEntry* lhs) {
   return rhs->UpdateTime() > lhs->UpdateTime();
 }
-// Desired width and height of favicon.
-const CGFloat kFaviconWidthHeight = 24;
-// Minimum favicon size to retrieve.
-const CGFloat kFaviconMinWidthHeight = 16;
-
 }  // namespace
 
 @interface ReadingListMediator ()<ReadingListModelBridgeObserver> {
@@ -169,7 +165,7 @@
         [strongSelf.dataSink itemHasChangedAfterDelay:strongItem];
       };
   self.faviconLoader->FaviconForPageUrl(
-      item.faviconPageURL, kFaviconWidthHeight, kFaviconMinWidthHeight,
+      item.faviconPageURL, kDesiredSmallFaviconSizePt, kMinFaviconSizePt,
       /*fallback_to_google_server=*/false, completionBlock);
 }
 
diff --git a/ios/chrome/browser/ui/recent_tabs/BUILD.gn b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
index c8fe6ecb1..0e91a0b 100644
--- a/ios/chrome/browser/ui/recent_tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
@@ -35,6 +35,7 @@
     "//ios/chrome/browser/ui/activity_services",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/menu",
     "//ios/chrome/browser/ui/menu:context_menu_delegate",
     "//ios/chrome/browser/ui/ntp",
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_mediator.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_mediator.mm
index 2574fdd..157c48f 100644
--- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_mediator.mm
+++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_mediator.mm
@@ -16,6 +16,7 @@
 #include "ios/chrome/browser/sync/session_sync_service_factory.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
 #include "ios/chrome/browser/sync/sync_setup_service_factory.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_consumer.h"
 #import "ios/chrome/browser/ui/recent_tabs/sessions_sync_user_state.h"
 #import "ios/chrome/browser/web_state_list/web_state_list.h"
@@ -26,13 +27,6 @@
 #error "This file requires ARC support."
 #endif
 
-namespace {
-// Desired width and height of favicon.
-const CGFloat kFaviconWidthHeight = 24;
-// Minimum favicon size to retrieve.
-const CGFloat kFaviconMinWidthHeight = 16;
-}  // namespace
-
 @interface RecentTabsMediator () <SyncedSessionsObserver,
                                   WebStateListObserving> {
   std::unique_ptr<synced_sessions::SyncedSessionsObserverBridge>
@@ -168,7 +162,7 @@
   FaviconLoader* faviconLoader =
       IOSChromeFaviconLoaderFactory::GetForBrowserState(self.browserState);
   faviconLoader->FaviconForPageUrl(
-      URL.gurl, kFaviconWidthHeight, kFaviconMinWidthHeight,
+      URL.gurl, kDesiredSmallFaviconSizePt, kMinFaviconSizePt,
       /*fallback_to_google_server=*/false, ^(FaviconAttributes* attributes) {
         completion(attributes);
       });
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index 8f7427d..b6b71fc 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -153,6 +153,7 @@
     "//ios/chrome/browser/ui/content_suggestions/cells",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/elements:elements_internal",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/icons",
     "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/list_model",
diff --git a/ios/chrome/browser/ui/settings/password/BUILD.gn b/ios/chrome/browser/ui/settings/password/BUILD.gn
index 30b7fad..b009e9b 100644
--- a/ios/chrome/browser/ui/settings/password/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/password/BUILD.gn
@@ -26,7 +26,9 @@
     "//ios/chrome/app/strings",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/main:public",
+    "//ios/chrome/browser/net:crurl",
     "//ios/chrome/browser/passwords",
     "//ios/chrome/browser/passwords:save_passwords_consumer",
     "//ios/chrome/browser/signin",
@@ -34,9 +36,11 @@
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/favicon:constants",
     "//ios/chrome/browser/ui/settings/password/password_details",
     "//ios/chrome/browser/ui/settings/password/passwords_in_other_apps",
     "//ios/chrome/browser/ui/settings/utils",
+    "//ios/chrome/browser/ui/table_view",
     "//ios/chrome/browser/ui/table_view:utils",
     "//ios/chrome/common",
     "//ios/chrome/common/ui/colors",
@@ -103,6 +107,7 @@
     "//ios/chrome/common:constants",
     "//ios/chrome/common/ui/colors",
     "//ios/chrome/common/ui/elements:popover_label_view_controller",
+    "//ios/chrome/common/ui/favicon",
     "//ios/chrome/common/ui/reauthentication",
     "//ios/chrome/common/ui/util",
     "//ios/third_party/material_components_ios",
@@ -153,6 +158,7 @@
     "//ios/chrome/app/strings",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/main:test_support",
     "//ios/chrome/browser/passwords",
     "//ios/chrome/browser/passwords:save_passwords_consumer",
diff --git a/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm b/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm
index 197f00b..762c3a5 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm
@@ -8,6 +8,8 @@
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#import "ios/chrome/browser/favicon/favicon_loader.h"
+#include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h"
@@ -105,10 +107,14 @@
 #pragma mark - ChromeCoordinator
 
 - (void)start {
+  ChromeBrowserState* browserState = self.browser->GetBrowserState();
+  FaviconLoader* faviconLoader =
+      IOSChromeFaviconLoaderFactory::GetForBrowserState(browserState);
   self.mediator = [[PasswordsMediator alloc]
       initWithPasswordCheckManager:[self passwordCheckManager]
                        syncService:SyncSetupServiceFactory::GetForBrowserState(
-                                       self.browser->GetBrowserState())];
+                                       browserState)
+                     faviconLoader:faviconLoader];
   self.reauthModule = [[ReauthenticationModule alloc]
       initWithSuccessfulReauthTimeAccessor:self.mediator];
 
@@ -120,6 +126,7 @@
   self.passwordsViewController.dispatcher = self.dispatcher;
   self.passwordsViewController.presentationDelegate = self;
   self.passwordsViewController.reauthenticationModule = self.reauthModule;
+  self.passwordsViewController.imageDataSource = self.mediator;
 
   self.mediator.consumer = self.passwordsViewController;
 
diff --git a/ios/chrome/browser/ui/settings/password/passwords_mediator.h b/ios/chrome/browser/ui/settings/password/passwords_mediator.h
index 5f3912e..e1fa886 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_mediator.h
+++ b/ios/chrome/browser/ui/settings/password/passwords_mediator.h
@@ -10,8 +10,10 @@
 #include "base/memory/scoped_refptr.h"
 #import "ios/chrome/browser/ui/settings/password/passwords_table_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/settings/utils/password_auto_fill_status_observer.h"
+#import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h"
 #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h"
 
+class FaviconLoader;
 class IOSChromePasswordCheckManager;
 @protocol PasswordsConsumer;
 class SyncSetupService;
@@ -19,12 +21,14 @@
 // This mediator fetches and organises the passwords for its consumer.
 @interface PasswordsMediator : NSObject <PasswordAutoFillStatusObserver,
                                          PasswordsTableViewControllerDelegate,
-                                         SuccessfulReauthTimeAccessor>
+                                         SuccessfulReauthTimeAccessor,
+                                         TableViewFaviconDataSource>
 
 - (instancetype)initWithPasswordCheckManager:
                     (scoped_refptr<IOSChromePasswordCheckManager>)
                         passwordCheckManager
                                  syncService:(SyncSetupService*)syncService
+                               faviconLoader:(FaviconLoader*)faviconLoader
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/settings/password/passwords_mediator.mm b/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
index debcc23e..b6155f1 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_mediator.mm
@@ -9,10 +9,13 @@
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#import "ios/chrome/browser/favicon/favicon_loader.h"
+#import "ios/chrome/browser/net/crurl.h"
 #include "ios/chrome/browser/passwords/password_check_observer_bridge.h"
 #import "ios/chrome/browser/passwords/save_passwords_consumer.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/settings/password/passwords_consumer.h"
 #import "ios/chrome/browser/ui/settings/password/saved_passwords_presenter_observer.h"
 #import "ios/chrome/browser/ui/settings/utils/password_auto_fill_status_manager.h"
@@ -64,6 +67,13 @@
 // of the Passwords Screen.
 @property(nonatomic, strong, readonly) NSDate* successfulReauthTime;
 
+// The coordinator's BrowserState.
+@property(nonatomic, assign) ChromeBrowserState* browserState;
+
+// FaviconLoader is a keyed service that uses LargeIconService to retrieve
+// favicon images.
+@property(nonatomic, assign) FaviconLoader* faviconLoader;
+
 @end
 
 @implementation PasswordsMediator
@@ -71,9 +81,12 @@
 - (instancetype)initWithPasswordCheckManager:
                     (scoped_refptr<IOSChromePasswordCheckManager>)
                         passwordCheckManager
-                                 syncService:(SyncSetupService*)syncService {
+                                 syncService:(SyncSetupService*)syncService
+                               faviconLoader:(FaviconLoader*)faviconLoader {
   self = [super init];
   if (self) {
+    _faviconLoader = faviconLoader;
+
     _syncService = syncService;
 
     _passwordCheckManager = passwordCheckManager;
@@ -324,4 +337,15 @@
   return [self successfulReauthTime];
 }
 
+#pragma mark - TableViewFaviconDataSource
+
+- (void)faviconForURL:(CrURL*)URL
+           completion:(void (^)(FaviconAttributes*))completion {
+  self.faviconLoader->FaviconForPageUrl(
+      URL.gurl, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
+      /*fallback_to_google_server=*/false, ^(FaviconAttributes* attributes) {
+        completion(attributes);
+      });
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/password/passwords_mediator_unittest.mm b/ios/chrome/browser/ui/settings/password/passwords_mediator_unittest.mm
index dbc4b1c..479bdd8 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_mediator_unittest.mm
@@ -15,6 +15,8 @@
 #include "components/prefs/testing_pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/favicon/favicon_loader.h"
+#include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h"
@@ -116,9 +118,12 @@
 
     consumer_ = [[FakePasswordsConsumer alloc] init];
 
-    mediator_ =
-        [[PasswordsMediator alloc] initWithPasswordCheckManager:password_check_
-                                                    syncService:syncService()];
+    mediator_ = [[PasswordsMediator alloc]
+        initWithPasswordCheckManager:password_check_
+                         syncService:syncService()
+                       faviconLoader:IOSChromeFaviconLoaderFactory::
+                                         GetForBrowserState(
+                                             browser_state_.get())];
     mediator_.consumer = consumer_;
   }
 
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.h b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.h
index 272e9d7..2730972 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.h
+++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.h
@@ -9,6 +9,7 @@
 #import "ios/chrome/browser/ui/settings/settings_controller_protocol.h"
 #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
 #import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
+#import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h"
 #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h"
 
 class Browser;
@@ -42,6 +43,9 @@
 @property(nonatomic, strong) id<ReauthenticationProtocol>
     reauthenticationModule;
 
+// Data source for favicon images.
+@property(nonatomic, weak) id<TableViewFaviconDataSource> imageDataSource;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_SETTINGS_PASSWORD_PASSWORDS_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm
index c4c2eea4..3f15c50 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm
@@ -58,12 +58,15 @@
 #import "ios/chrome/browser/ui/table_view/cells/table_view_switch_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h"
+#import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h"
 #import "ios/chrome/browser/ui/table_view/table_view_navigation_controller_constants.h"
 #import "ios/chrome/browser/ui/table_view/table_view_utils.h"
 #include "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/elements/popover_label_view_controller.h"
+#import "ios/chrome/common/ui/favicon/favicon_view.h"
 #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_chromium_strings.h"
@@ -177,9 +180,25 @@
   });
 }
 
+// Return if the feature flag for the favicon is enabled.
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+bool IsFaviconEnabled() {
+  return base::FeatureList::IsEnabled(
+      password_manager::features::kEnableFaviconForPasswords);
+}
+
 }  // namespace
 
-@interface PasswordFormContentItem : TableViewDetailTextItem
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+@interface LegacyPasswordFormContentItem : TableViewDetailTextItem
+@property(nonatomic) password_manager::PasswordForm form;
+@end
+@implementation LegacyPasswordFormContentItem
+@end
+
+@interface PasswordFormContentItem : TableViewURLItem
 @property(nonatomic) password_manager::PasswordForm form;
 @end
 @implementation PasswordFormContentItem
@@ -316,6 +335,13 @@
 // site equivalent to that of |mostRecentlyUpdatedPassword|.
 @property(nonatomic, weak) PasswordFormContentItem* mostRecentlyUpdatedItem;
 
+// Stores the PasswordFormContentItem which has form attribute's username and
+// site equivalent to that of |legacyMostRecentlyUpdatedItem|.
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+@property(nonatomic, weak)
+    LegacyPasswordFormContentItem* legacyMostRecentlyUpdatedItem;
+
 // YES, if the user has tapped on the "Check Now" button.
 @property(nonatomic, assign) BOOL shouldFocusAccessibilityOnPasswordCheckStatus;
 
@@ -895,9 +921,10 @@
                   forForm:(const password_manager::PasswordForm&)form {
   PasswordFormContentItem* passwordItem =
       [[PasswordFormContentItem alloc] initWithType:ItemTypeSavedPassword];
-  passwordItem.text = text;
+  passwordItem.title = text;
   passwordItem.form = form;
   passwordItem.detailText = detailText;
+  passwordItem.URL = [[CrURL alloc] initWithGURL:GURL(form.url)];
   passwordItem.accessibilityTraits |= UIAccessibilityTraitButton;
   passwordItem.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
   if (self.mostRecentlyUpdatedPassword) {
@@ -916,6 +943,46 @@
                     forForm:(const password_manager::PasswordForm&)form {
   PasswordFormContentItem* passwordItem =
       [[PasswordFormContentItem alloc] initWithType:ItemTypeBlocked];
+  passwordItem.title = text;
+  passwordItem.form = form;
+  passwordItem.URL = [[CrURL alloc] initWithGURL:GURL(form.url)];
+  passwordItem.accessibilityTraits |= UIAccessibilityTraitButton;
+  passwordItem.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+  return passwordItem;
+}
+
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+- (LegacyPasswordFormContentItem*)
+    legacySavedFormItemWithText:(NSString*)text
+                  andDetailText:(NSString*)detailText
+                        forForm:(const password_manager::PasswordForm&)form {
+  LegacyPasswordFormContentItem* passwordItem =
+      [[LegacyPasswordFormContentItem alloc]
+          initWithType:ItemTypeSavedPassword];
+  passwordItem.text = text;
+  passwordItem.form = form;
+  passwordItem.detailText = detailText;
+  passwordItem.accessibilityTraits |= UIAccessibilityTraitButton;
+  passwordItem.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+  if (self.mostRecentlyUpdatedPassword) {
+    if (self.mostRecentlyUpdatedPassword->username_value ==
+            form.username_value &&
+        self.mostRecentlyUpdatedPassword->signon_realm == form.signon_realm) {
+      self.legacyMostRecentlyUpdatedItem = passwordItem;
+      self.mostRecentlyUpdatedPassword = absl::nullopt;
+    }
+  }
+  return passwordItem;
+}
+
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+- (LegacyPasswordFormContentItem*)
+    legacyBlockedFormItemWithText:(NSString*)text
+                          forForm:(const password_manager::PasswordForm&)form {
+  LegacyPasswordFormContentItem* passwordItem =
+      [[LegacyPasswordFormContentItem alloc] initWithType:ItemTypeBlocked];
   passwordItem.text = text;
   passwordItem.form = form;
   passwordItem.accessibilityTraits |= UIAccessibilityTraitButton;
@@ -1355,9 +1422,13 @@
           ![detailText localizedCaseInsensitiveContainsString:searchTerm];
       if (hidden)
         continue;
-      [model addItem:[self savedFormItemWithText:text
-                                   andDetailText:detailText
-                                         forForm:form]
+      [model addItem:(IsFaviconEnabled()
+                          ? [self savedFormItemWithText:text
+                                          andDetailText:detailText
+                                                forForm:form]
+                          : [self legacySavedFormItemWithText:text
+                                                andDetailText:detailText
+                                                      forForm:form])
           toSectionWithIdentifier:SectionIdentifierSavedPasswords];
     }
   }
@@ -1371,7 +1442,10 @@
                     ![text localizedCaseInsensitiveContainsString:searchTerm];
       if (hidden)
         continue;
-      [model addItem:[self blockedFormItemWithText:text forForm:form]
+      [model addItem:(IsFaviconEnabled()
+                          ? [self blockedFormItemWithText:text forForm:form]
+                          : [self legacyBlockedFormItemWithText:text
+                                                        forForm:form])
           toSectionWithIdentifier:SectionIdentifierBlocked];
     }
   }
@@ -1633,16 +1707,22 @@
   std::vector<password_manager::PasswordForm> blockedToDelete;
 
   for (NSIndexPath* indexPath in indexPaths) {
+    // TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag
+    // is removed.
+    password_manager::PasswordForm form =
+        IsFaviconEnabled()
+            ? base::mac::ObjCCastStrict<PasswordFormContentItem>(
+                  [self.tableViewModel itemAtIndexPath:indexPath])
+                  .form
+            : base::mac::ObjCCastStrict<LegacyPasswordFormContentItem>(
+                  [self.tableViewModel itemAtIndexPath:indexPath])
+                  .form;
     // Only form items are editable.
-    PasswordFormContentItem* item =
-        base::mac::ObjCCastStrict<PasswordFormContentItem>(
-            [self.tableViewModel itemAtIndexPath:indexPath]);
     NSInteger itemType = [self.tableViewModel itemTypeForIndexPath:indexPath];
     BOOL blocked = (itemType == ItemTypeBlocked);
-    blocked ? blockedToDelete.push_back(item.form)
-            : passwordsToDelete.push_back(item.form);
+    blocked ? blockedToDelete.push_back(form)
+            : passwordsToDelete.push_back(form);
   }
-
   RemoveFormsToBeDeleted(_savedForms, passwordsToDelete);
   RemoveFormsToBeDeleted(_blockedForms, blockedToDelete);
 
@@ -1710,6 +1790,15 @@
                           atScrollPosition:UITableViewScrollPositionTop
                                   animated:NO];
     self.mostRecentlyUpdatedItem = nil;
+  } else if (self.legacyMostRecentlyUpdatedItem) {
+    // TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag
+    // is removed.
+    NSIndexPath* indexPath = [self.tableViewModel
+        indexPathForItem:self.legacyMostRecentlyUpdatedItem];
+    [self.tableView scrollToRowAtIndexPath:indexPath
+                          atScrollPosition:UITableViewScrollPositionTop
+                                  animated:NO];
+    self.legacyMostRecentlyUpdatedItem = nil;
   }
 }
 
@@ -1767,19 +1856,29 @@
     case ItemTypeSavedPassword: {
       DCHECK_EQ(SectionIdentifierSavedPasswords,
                 [model sectionIdentifierForSection:indexPath.section]);
-      PasswordFormContentItem* saveFormItem =
-          base::mac::ObjCCastStrict<PasswordFormContentItem>(
-              [model itemAtIndexPath:indexPath]);
-      [self.handler showDetailedViewForForm:saveFormItem.form];
+      password_manager::PasswordForm form =
+          IsFaviconEnabled()
+              ? base::mac::ObjCCastStrict<PasswordFormContentItem>(
+                    [model itemAtIndexPath:indexPath])
+                    .form
+              : base::mac::ObjCCastStrict<LegacyPasswordFormContentItem>(
+                    [model itemAtIndexPath:indexPath])
+                    .form;
+      [self.handler showDetailedViewForForm:form];
       break;
     }
     case ItemTypeBlocked: {
       DCHECK_EQ(SectionIdentifierBlocked,
                 [model sectionIdentifierForSection:indexPath.section]);
-      PasswordFormContentItem* blockedItem =
-          base::mac::ObjCCastStrict<PasswordFormContentItem>(
-              [model itemAtIndexPath:indexPath]);
-      [self.handler showDetailedViewForForm:blockedItem.form];
+      password_manager::PasswordForm form =
+          IsFaviconEnabled()
+              ? base::mac::ObjCCastStrict<PasswordFormContentItem>(
+                    [model itemAtIndexPath:indexPath])
+                    .form
+              : base::mac::ObjCCastStrict<LegacyPasswordFormContentItem>(
+                    [model itemAtIndexPath:indexPath])
+                    .form;
+      [self.handler showDetailedViewForForm:form];
       break;
     }
     case ItemTypeExportPasswordsButton:
@@ -1916,15 +2015,47 @@
     }
     case ItemTypeSavedPassword:
     case ItemTypeBlocked: {
-      TableViewDetailTextCell* textCell =
-          base::mac::ObjCCastStrict<TableViewDetailTextCell>(cell);
-      textCell.textLabel.lineBreakMode = NSLineBreakByTruncatingHead;
+      if (IsFaviconEnabled()) {
+        TableViewURLCell* urlCell =
+            base::mac::ObjCCastStrict<TableViewURLCell>(cell);
+        urlCell.textLabel.lineBreakMode = NSLineBreakByTruncatingHead;
+        // Load the favicon from cache.
+        [self loadFaviconAtIndexPath:indexPath forCell:cell];
+      } else {
+        TableViewDetailTextCell* textCell =
+            base::mac::ObjCCastStrict<TableViewDetailTextCell>(cell);
+        textCell.textLabel.lineBreakMode = NSLineBreakByTruncatingHead;
+      }
       break;
     }
   }
   return cell;
 }
 
+// Asynchronously loads favicon for given index path that is of type
+// `ItemTypeSavedPassword` or `ItemTypeBlocked`. The loads are cancelled upon
+// cell reuse automatically.
+- (void)loadFaviconAtIndexPath:(NSIndexPath*)indexPath
+                       forCell:(UITableViewCell*)cell {
+  TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
+  DCHECK(item);
+  DCHECK(cell);
+
+  TableViewURLItem* URLItem = base::mac::ObjCCastStrict<TableViewURLItem>(item);
+  TableViewURLCell* URLCell = base::mac::ObjCCastStrict<TableViewURLCell>(cell);
+
+  NSString* itemIdentifier = URLItem.uniqueIdentifier;
+  [self.imageDataSource
+      faviconForURL:URLItem.URL
+         completion:^(FaviconAttributes* attributes) {
+           // Only set favicon if the cell hasn't been reused.
+           if ([URLCell.cellUniqueIdentifier isEqualToString:itemIdentifier]) {
+             DCHECK(attributes);
+             [URLCell.faviconView configureWithAttributes:attributes];
+           }
+         }];
+}
+
 #pragma mark PasswordExporterDelegate
 
 - (void)showSetPasscodeDialog {
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
index 4958b74..7fdc5ab 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
@@ -19,6 +19,8 @@
 #include "components/password_manager/core/browser/test_password_store.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/favicon/favicon_loader.h"
+#include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #include "ios/chrome/browser/main/test_browser.h"
 #include "ios/chrome/browser/passwords/ios_chrome_bulk_leak_check_service_factory.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h"
@@ -104,7 +106,10 @@
         initWithPasswordCheckManager:IOSChromePasswordCheckManagerFactory::
                                          GetForBrowserState(
                                              browser_->GetBrowserState())
-                         syncService:nil];
+                         syncService:nil
+                       faviconLoader:IOSChromeFaviconLoaderFactory::
+                                         GetForBrowserState(
+                                             browser_->GetBrowserState())];
 
     // Inject some fake passwords to pass the loading state.
     PasswordsTableViewController* passwords_controller =
@@ -320,6 +325,40 @@
 
 // Tests the order in which the saved passwords are displayed.
 TEST_F(PasswordsTableViewControllerTest, TestSavedPasswordsOrder) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
+      password_manager::features::kEnableFaviconForPasswords);
+
+  AddSavedForm2();
+
+  CheckURLCellTitleAndDetailText(@"example2.com", @"test@egmail.com",
+                                 GetSectionIndex(SavedPasswords), 0);
+
+  AddSavedForm1();
+  CheckURLCellTitleAndDetailText(@"example.com", @"test@egmail.com",
+                                 GetSectionIndex(SavedPasswords), 0);
+  CheckURLCellTitleAndDetailText(@"example2.com", @"test@egmail.com",
+                                 GetSectionIndex(SavedPasswords), 1);
+}
+
+// Tests the order in which the blocked passwords are displayed.
+TEST_F(PasswordsTableViewControllerTest, TestBlockedPasswordsOrder) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
+      password_manager::features::kEnableFaviconForPasswords);
+
+  AddBlockedForm2();
+  CheckURLCellTitle(@"secret2.com", GetSectionIndex(SavedPasswords), 0);
+
+  AddBlockedForm1();
+  CheckURLCellTitle(@"secret.com", GetSectionIndex(SavedPasswords), 0);
+  CheckURLCellTitle(@"secret2.com", GetSectionIndex(SavedPasswords), 1);
+}
+
+// Tests the order in which the saved passwords are displayed.
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+TEST_F(PasswordsTableViewControllerTest, TestSavedPasswordsOrderLegacy) {
   AddSavedForm2();
 
   CheckTextCellTextAndDetailText(@"example2.com", @"test@egmail.com",
@@ -333,7 +372,9 @@
 }
 
 // Tests the order in which the blocked passwords are displayed.
-TEST_F(PasswordsTableViewControllerTest, TestBlockedPasswordsOrder) {
+// TODO(crbug.com/1300569): Remove this when kEnableFaviconForPasswords flag is
+// removed.
+TEST_F(PasswordsTableViewControllerTest, TestBlockedPasswordsOrderLegacy) {
   AddBlockedForm2();
   CheckTextCellText(@"secret2.com", GetSectionIndex(SavedPasswords), 0);
 
diff --git a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
index e5e6ed18..24943a2 100644
--- a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
@@ -19,6 +19,7 @@
 #include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#import "ios/chrome/browser/ui/favicon/favicon_constants.h"
 #import "ios/chrome/browser/ui/settings/cells/search_engine_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h"
@@ -45,8 +46,6 @@
 };
 
 const CGFloat kTableViewSeparatorLeadingInset = 56;
-const int kFaviconDesiredSizeInPoint = 32;
-const int kFaviconMinSizeInPoint = 16;
 constexpr base::TimeDelta kMaxVisitAge = base::Days(2);
 const size_t kMaxcustomSearchEngines = 3;
 const char kUmaSelectDefaultSearchEngine[] =
@@ -397,7 +396,7 @@
 
   if (item.type == ItemTypePrepopulatedEngine) {
     _faviconLoader->FaviconForPageUrl(
-        engineItem.URL, kFaviconDesiredSizeInPoint, kFaviconMinSizeInPoint,
+        engineItem.URL, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
         /*fallback_to_google_server=*/YES, ^(FaviconAttributes* attributes) {
           // Only set favicon if the cell hasn't been reused.
           if (urlCell.cellUniqueIdentifier == engineItem.uniqueIdentifier) {
@@ -407,7 +406,7 @@
         });
   } else {
     _faviconLoader->FaviconForIconUrl(
-        engineItem.URL, kFaviconDesiredSizeInPoint, kFaviconMinSizeInPoint,
+        engineItem.URL, kDesiredMediumFaviconSizePt, kMinFaviconSizePt,
         ^(FaviconAttributes* attributes) {
           // Only set favicon if the cell hasn't been reused.
           if (urlCell.cellUniqueIdentifier == engineItem.uniqueIdentifier) {
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 9efbac13..cbfb60b2 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
@@ -943,6 +943,8 @@
 
 #pragma mark - GridConsumer
 
+// TODO(crbug.com/1300733): Investigate this method not working correctly in the
+// main thread if the collectionview had already some items on it.
 - (void)populateItems:(NSArray<TabSwitcherItem*>*)items
        selectedItemID:(NSString*)selectedItemID {
 #ifndef NDEBUG
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 04c88f5..809acf5 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
@@ -594,12 +594,18 @@
         for (web::WebState* webState : results) {
           [items addObject:CreateItem(webState)];
         }
-        [self.consumer populateItems:items selectedItemID:nil];
+        // Updating UI (Reloading tabs) needs to happen on the main thread.
+        dispatch_async(dispatch_get_main_queue(), ^{
+          [self.consumer populateItems:items selectedItemID:nil];
+        });
       }));
 }
 
 - (void)resetToAllItems {
-  [self populateConsumerItems];
+  // Updating UI (Reloading tabs) needs to happen on the main thread.
+  dispatch_async(dispatch_get_main_queue(), ^{
+    [self populateConsumerItems];
+  });
 }
 
 - (void)fetchSearchHistoryResultsCountForText:(NSString*)searchText
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
index 77a30c16..ab54089 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
@@ -8,7 +8,9 @@
 #include <memory>
 
 #include "base/mac/foundation_util.h"
+#include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/test/ios/wait_util.h"
 #include "base/test/metrics/user_action_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/commerce/core/commerce_feature_list.h"
@@ -62,6 +64,8 @@
 #error "This file requires ARC support."
 #endif
 
+using base::test::ios::WaitUntilConditionOrTimeout;
+
 namespace sessions {
 class TabRestoreServiceObserver;
 class LiveTabContext;
@@ -73,6 +77,8 @@
     "price_tracking_with_optimization_guide";
 const char kHasPriceDropUserAction[] = "Commerce.TabGridSwitched.HasPriceDrop";
 const char kHasNoPriceDropUserAction[] = "Commerce.TabGridSwitched.NoPriceDrop";
+// Timeout for waiting for the GridConsumer updates.
+const NSTimeInterval kWaitForGridConsumerUpdateTimeout = 1.0;
 
 // A Fake restore service that just store and returns tabs.
 class FakeTabRestoreService : public sessions::TabRestoreService {
@@ -381,6 +387,13 @@
         {});
   }
 
+  bool WaitForConsumerUpdates(size_t expected_count) {
+    return WaitUntilConditionOrTimeout(kWaitForGridConsumerUpdateTimeout, ^{
+      base::RunLoop().RunUntilIdle();
+      return expected_count == consumer_.items.count;
+    });
+  }
+
  protected:
   web::WebTaskEnvironment task_environment_;
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
@@ -696,6 +709,10 @@
 
   [mediator_ searchItemsWithText:@"hello"];
 
+  // Only one result should be found.
+  EXPECT_TRUE(WaitForConsumerUpdates(1UL));
+  EXPECT_NSEQ(expected_result_identifier, consumer_.items[0]);
+
   // Web states count should not change.
   EXPECT_EQ(3, browser_->GetWebStateList()->count());
   // Active index should not change.
@@ -707,9 +724,6 @@
     NSString* identifier = web_state->GetStableIdentifier();
     EXPECT_NSEQ(identifier, pre_search_ids[i]);
   }
-  // Only one result should be found.
-  EXPECT_EQ(1UL, consumer_.items.count);
-  EXPECT_NSEQ(expected_result_identifier, consumer_.items[0]);
 }
 
 // Tests that when |-resetToAllItems:| is called, the consumer gets all the
@@ -720,11 +734,11 @@
 
   [mediator_ searchItemsWithText:@"hello"];
   // Only 1 result is in the consumer after the search is done.
-  ASSERT_EQ(1UL, consumer_.items.count);
+  ASSERT_TRUE(WaitForConsumerUpdates(1UL));
 
   [mediator_ resetToAllItems];
   // consumer should revert back to have the items from the webstate list.
-  EXPECT_EQ(3UL, consumer_.items.count);
+  ASSERT_TRUE(WaitForConsumerUpdates(3UL));
   // Active index should not change.
   EXPECT_NSEQ(original_selected_identifier_, consumer_.selectedItemID);
 
diff --git a/ios/chrome/browser/ui/table_view/cells/BUILD.gn b/ios/chrome/browser/ui/table_view/cells/BUILD.gn
index 19cb80b6..282e943 100644
--- a/ios/chrome/browser/ui/table_view/cells/BUILD.gn
+++ b/ios/chrome/browser/ui/table_view/cells/BUILD.gn
@@ -6,6 +6,8 @@
   sources = [
     "table_view_activity_indicator_header_footer_item.h",
     "table_view_activity_indicator_header_footer_item.mm",
+    "table_view_attributed_string_header_footer_item.h",
+    "table_view_attributed_string_header_footer_item.mm",
     "table_view_cell.h",
     "table_view_cell.mm",
     "table_view_detail_icon_item.h",
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.h
new file mode 100644
index 0000000..8b45400
--- /dev/null
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.h
@@ -0,0 +1,31 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TABLE_VIEW_CELLS_TABLE_VIEW_ATTRIBUTED_STRING_HEADER_FOOTER_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_TABLE_VIEW_CELLS_TABLE_VIEW_ATTRIBUTED_STRING_HEADER_FOOTER_ITEM_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ui/table_view/cells/table_view_header_footer_item.h"
+
+// TableViewAttributedStringHeaderFooterItem is the model class corresponding to
+// TableViewAttributedStringHeaderFooterView.
+@interface TableViewAttributedStringHeaderFooterItem : TableViewHeaderFooterItem
+
+// The attributed string to display.
+@property(nonatomic, copy) NSAttributedString* attributedString;
+
+@end
+
+// UITableViewHeaderFooterView subclass containing a single UITextView, to
+// display a attributed string.
+@interface TableViewAttributedStringHeaderFooterView
+    : UITableViewHeaderFooterView
+
+// Sets the |attributedString| displayed by this cell.
+- (void)setAttributedString:(NSAttributedString*)attributedString;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_TABLE_VIEW_CELLS_TABLE_VIEW_ATTRIBUTED_STRING_HEADER_FOOTER_ITEM_H_
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.mm
new file mode 100644
index 0000000..70b354a
--- /dev/null
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.mm
@@ -0,0 +1,104 @@
+// Copyright 2022 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/chrome/browser/ui/table_view/cells/table_view_attributed_string_header_footer_item.h"
+
+#import "base/check_op.h"
+#import "base/containers/contains.h"
+#import "ios/chrome/browser/net/crurl.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
+#import "ios/chrome/browser/ui/ui_feature_flags.h"
+#import "ios/chrome/browser/ui/util/ui_util.h"
+#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/string_util.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "net/base/mac/url_conversions.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@implementation TableViewAttributedStringHeaderFooterItem
+
+- (instancetype)initWithType:(NSInteger)type {
+  self = [super initWithType:type];
+  if (self) {
+    self.cellClass = [TableViewAttributedStringHeaderFooterView class];
+  }
+  return self;
+}
+
+#pragma mark CollectionViewItem
+
+- (void)configureHeaderFooterView:
+            (TableViewAttributedStringHeaderFooterView*)headerFooter
+                       withStyler:(ChromeTableViewStyler*)styler {
+  [super configureHeaderFooterView:headerFooter withStyler:styler];
+  headerFooter.attributedString = self.attributedString;
+}
+
+@end
+
+@interface TableViewAttributedStringHeaderFooterView () <UITextViewDelegate>
+
+// UITextView corresponding to |text| from the item.
+@property(nonatomic, readonly, strong) UITextView* textView;
+
+@end
+
+@implementation TableViewAttributedStringHeaderFooterView
+
+- (instancetype)initWithReuseIdentifier:(NSString*)reuseIdentifier {
+  self = [super initWithReuseIdentifier:reuseIdentifier];
+  if (self) {
+    _textView = [[UITextView alloc] init];
+    _textView.scrollEnabled = NO;
+    _textView.editable = NO;
+    _textView.delegate = self;
+    _textView.backgroundColor = UIColor.clearColor;
+    _textView.font =
+        [UIFont preferredFontForTextStyle:kTableViewSublabelFontStyle];
+    _textView.adjustsFontForContentSizeCategory = YES;
+    _textView.translatesAutoresizingMaskIntoConstraints = NO;
+    _textView.linkTextAttributes =
+        @{NSForegroundColorAttributeName : [UIColor colorNamed:kBlueColor]};
+
+    [self.contentView addSubview:_textView];
+
+    [NSLayoutConstraint activateConstraints:@[
+      [_textView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor
+                                          constant:kTableViewVerticalSpacing],
+      [_textView.bottomAnchor
+          constraintEqualToAnchor:self.contentView.bottomAnchor
+                         constant:-kTableViewVerticalSpacing],
+      [_textView.trailingAnchor
+          constraintEqualToAnchor:self.contentView.trailingAnchor
+                         constant:-HorizontalPadding()],
+      [_textView.leadingAnchor
+          constraintEqualToAnchor:self.contentView.leadingAnchor
+                         constant:HorizontalPadding()],
+    ]];
+  }
+  return self;
+}
+
+- (void)prepareForReuse {
+  [super prepareForReuse];
+  self.textView.text = nil;
+}
+
+#pragma mark - Properties
+
+- (void)setAttributedString:(NSAttributedString*)attributedString {
+  self.textView.attributedText = attributedString;
+}
+
+- (void)textViewDidChangeSelection:(UITextView*)textView {
+  // Always force the |selectedTextRange| to |nil| to prevent users from
+  // selecting text. Setting the |selectable| property to |NO| doesn't help
+  // since it makes links inside the text view untappable.
+  textView.selectedTextRange = nil;
+}
+
+@end
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.h
index 088a7819..9039fb8 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.h
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.h
@@ -25,6 +25,8 @@
 @property(nonatomic, readwrite, copy) NSString* supplementalURLText;
 // Delimiter used to separate the URL hostname and the supplemental text.
 @property(nonatomic, readwrite, copy) NSString* supplementalURLTextDelimiter;
+// Detail text to be displayed instead of the URL.
+@property(nonatomic, strong) NSString* detailText;
 // Metadata text displayed at the trailing edge of the cell.
 @property(nonatomic, readwrite, copy) NSString* metadata;
 // The image for the badge view added over the favicon.
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
index 9e27e6e..eb35a03 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
@@ -94,6 +94,9 @@
 
 // Returns the text to use when configuring a TableViewURLCell's URL label.
 - (NSString*)URLLabelText {
+  // Use detail text instead of the URL if there is one set.
+  if (self.detailText)
+    return self.detailText;
   // If there's no title text, the URL is used as the cell title.  Add the
   // supplemental text to the URL label below if it exists.
   if (!self.title.length)
diff --git a/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h b/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h
index fad2bb2..416dfbd 100644
--- a/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h
+++ b/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h
@@ -82,6 +82,18 @@
                                       int section,
                                       int item);
 
+  // Verifies that the URL cell at |item| in |section| has a title property
+  // which matches |expected_title|.
+  void CheckURLCellTitle(NSString* expected_title, int section, int item);
+
+  // Verifies that the URL cell at |item| in |section| has a title and
+  // detailText properties which match strings for |expected_title| and
+  // |expected_detail_text|, respectively.
+  void CheckURLCellTitleAndDetailText(NSString* expected_title,
+                                      NSString* expected_detail_text,
+                                      int section,
+                                      int item);
+
   // Verifies that the text cell at |item| in |section| has a text and
   // detailText properties which match strings for |expected_text| and
   // |expected_detail_text|, respectively.
diff --git a/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.mm b/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.mm
index 0b6fd309..2c9a4c1 100644
--- a/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.mm
+++ b/ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.mm
@@ -123,6 +123,14 @@
   EXPECT_NSEQ(expected_text, [cell text]);
 }
 
+void ChromeTableViewControllerTest::CheckURLCellTitle(NSString* expected_title,
+                                                      int section,
+                                                      int item) {
+  id cell = GetTableViewItem(section, item);
+  ASSERT_TRUE([cell respondsToSelector:@selector(title)]);
+  EXPECT_NSEQ(expected_title, [cell title]);
+}
+
 void ChromeTableViewControllerTest::CheckTextCellTextWithId(
     int expected_text_id,
     int section,
@@ -142,6 +150,18 @@
   EXPECT_NSEQ(expected_detail_text, [cell detailText]);
 }
 
+void ChromeTableViewControllerTest::CheckURLCellTitleAndDetailText(
+    NSString* expected_title,
+    NSString* expected_detail_text,
+    int section,
+    int item) {
+  id cell = GetTableViewItem(section, item);
+  ASSERT_TRUE([cell respondsToSelector:@selector(title)]);
+  ASSERT_TRUE([cell respondsToSelector:@selector(detailText)]);
+  EXPECT_NSEQ(expected_title, [cell title]);
+  EXPECT_NSEQ(expected_detail_text, [cell detailText]);
+}
+
 void ChromeTableViewControllerTest::CheckDetailItemTextWithIds(
     int expected_text_id,
     int expected_detail_text_id,
diff --git a/ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/internals_ui_handler.mm b/ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/internals_ui_handler.mm
index 5f8efbd..7f771dc 100644
--- a/ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/internals_ui_handler.mm
+++ b/ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/internals_ui_handler.mm
@@ -59,7 +59,7 @@
 }
 
 void InternalsUIHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "loaded", base::BindRepeating(&InternalsUIHandler::OnLoaded,
                                     base::Unretained(this)));
 }
diff --git a/ios/chrome/browser/ui/webui/crashes_ui.cc b/ios/chrome/browser/ui/webui/crashes_ui.cc
index d093a543..856351220 100644
--- a/ios/chrome/browser/ui/webui/crashes_ui.cc
+++ b/ios/chrome/browser/ui/webui/crashes_ui.cc
@@ -105,11 +105,11 @@
 void CrashesDOMHandler::RegisterMessages() {
   upload_list_->Load(base::BindOnce(&CrashesDOMHandler::OnUploadListAvailable,
                                     base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       crash_reporter::kCrashesUIRequestCrashList,
       base::BindRepeating(&CrashesDOMHandler::HandleRequestCrashes,
                           base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       crash_reporter::kCrashesUIRequestSingleCrashUpload,
       base::BindRepeating(&CrashesDOMHandler::HandleRequestSingleCrashUpload,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/download_internals_ui.cc b/ios/chrome/browser/ui/webui/download_internals_ui.cc
index 73d19f11..f6531f44 100644
--- a/ios/chrome/browser/ui/webui/download_internals_ui.cc
+++ b/ios/chrome/browser/ui/webui/download_internals_ui.cc
@@ -38,17 +38,17 @@
  private:
   // WebUIIOSMessageHandler implementation.
   void RegisterMessages() override {
-    web_ui()->RegisterMessageCallback(
+    web_ui()->RegisterDeprecatedMessageCallback2(
         "getServiceStatus",
         base::BindRepeating(
             &DownloadInternalsUIMessageHandler::HandleGetServiceStatus,
             weak_ptr_factory_.GetWeakPtr()));
-    web_ui()->RegisterMessageCallback(
+    web_ui()->RegisterDeprecatedMessageCallback2(
         "getServiceDownloads",
         base::BindRepeating(
             &DownloadInternalsUIMessageHandler::HandleGetServiceDownloads,
             weak_ptr_factory_.GetWeakPtr()));
-    web_ui()->RegisterMessageCallback(
+    web_ui()->RegisterDeprecatedMessageCallback2(
         "startDownload",
         base::BindRepeating(
             &DownloadInternalsUIMessageHandler::HandleStartDownload,
diff --git a/ios/chrome/browser/ui/webui/flags_ui.mm b/ios/chrome/browser/ui/webui/flags_ui.mm
index 79809c23..42c1c87f 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.mm
+++ b/ios/chrome/browser/ui/webui/flags_ui.mm
@@ -96,20 +96,20 @@
 };
 
 void FlagsDOMHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       flags_ui::kRequestExperimentalFeatures,
       base::BindRepeating(&FlagsDOMHandler::HandleRequestExperimentalFeatures,
                           base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       flags_ui::kEnableExperimentalFeature,
       base::BindRepeating(
           &FlagsDOMHandler::HandleEnableExperimentalFeatureMessage,
           base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       flags_ui::kRestartBrowser,
       base::BindRepeating(&FlagsDOMHandler::HandleRestartBrowser,
                           base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       flags_ui::kResetAllFlags,
       base::BindRepeating(&FlagsDOMHandler::HandleResetAllFlags,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.cc b/ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.cc
index 8e204b8..b90efd7 100644
--- a/ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.cc
+++ b/ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.cc
@@ -143,11 +143,11 @@
 }
 
 void GcmInternalsUIMessageHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       gcm_driver::kGetGcmInternalsInfo,
       base::BindRepeating(&GcmInternalsUIMessageHandler::RequestAllInfo,
                           weak_ptr_factory_.GetWeakPtr()));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       gcm_driver::kSetGcmInternalsRecording,
       base::BindRepeating(&GcmInternalsUIMessageHandler::SetRecording,
                           weak_ptr_factory_.GetWeakPtr()));
diff --git a/ios/chrome/browser/ui/webui/inspect/inspect_ui.mm b/ios/chrome/browser/ui/webui/inspect/inspect_ui.mm
index e1a7e2d..8a2ef07 100644
--- a/ios/chrome/browser/ui/webui/inspect/inspect_ui.mm
+++ b/ios/chrome/browser/ui/webui/inspect/inspect_ui.mm
@@ -128,7 +128,7 @@
 }
 
 void InspectDOMHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "setLoggingEnabled",
       base::BindRepeating(&InspectDOMHandler::HandleSetLoggingEnabled,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc b/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc
index 9d892ba1..05b02cf 100644
--- a/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc
+++ b/ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc
@@ -102,7 +102,7 @@
 void IOSNTPTilesInternalsMessageHandlerBridge::RegisterMessageCallback(
     const std::string& message,
     MessageCallback callback) {
-  web_ui()->RegisterMessageCallback(message, std::move(callback));
+  web_ui()->RegisterDeprecatedMessageCallback2(message, std::move(callback));
 }
 
 void IOSNTPTilesInternalsMessageHandlerBridge::
diff --git a/ios/chrome/browser/ui/webui/omaha_ui.cc b/ios/chrome/browser/ui/webui/omaha_ui.cc
index 2350cb92..47eb1da 100644
--- a/ios/chrome/browser/ui/webui/omaha_ui.cc
+++ b/ios/chrome/browser/ui/webui/omaha_ui.cc
@@ -63,7 +63,7 @@
 OmahaDOMHandler::~OmahaDOMHandler() {}
 
 void OmahaDOMHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "requestOmahaDebugInformation",
       base::BindRepeating(&OmahaDOMHandler::HandleRequestDebugInformation,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm b/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm
index 8e354b8..7e4d75f 100644
--- a/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm
+++ b/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm
@@ -130,16 +130,16 @@
       ChromeBrowserState::FromWebUIIOS(web_ui());
   browser_state->GetPolicyConnector()->GetSchemaRegistry()->AddObserver(this);
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "listenPoliciesUpdates",
       base::BindRepeating(&PolicyUIHandler::HandleListenPoliciesUpdates,
                           base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "reloadPolicies",
       base::BindRepeating(&PolicyUIHandler::HandleReloadPolicies,
                           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "copyPoliciesJSON",
       base::BindRepeating(&PolicyUIHandler::HandleCopyPoliciesJson,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
index 427fd843..d667eb88 100644
--- a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
+++ b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
@@ -59,7 +59,7 @@
 }
 
 void SignInInternalsHandlerIOS::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "getSigninInfo",
       base::BindRepeating(&SignInInternalsHandlerIOS::HandleGetSignInInfo,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/translate_internals/ios_translate_internals_handler.mm b/ios/chrome/browser/ui/webui/translate_internals/ios_translate_internals_handler.mm
index 5423907..b64776b5 100644
--- a/ios/chrome/browser/ui/webui/translate_internals/ios_translate_internals_handler.mm
+++ b/ios/chrome/browser/ui/webui/translate_internals/ios_translate_internals_handler.mm
@@ -35,7 +35,7 @@
 void IOSTranslateInternalsHandler::RegisterMessageCallback(
     const std::string& message,
     MessageCallback callback) {
-  web_ui()->RegisterMessageCallback(message, std::move(callback));
+  web_ui()->RegisterDeprecatedMessageCallback2(message, std::move(callback));
 }
 
 void IOSTranslateInternalsHandler::RegisterDeprecatedMessageCallback(
diff --git a/ios/chrome/browser/ui/webui/ukm_internals_ui.mm b/ios/chrome/browser/ui/webui/ukm_internals_ui.mm
index 5dcdb9c..925fe675 100644
--- a/ios/chrome/browser/ui/webui/ukm_internals_ui.mm
+++ b/ios/chrome/browser/ui/webui/ukm_internals_ui.mm
@@ -58,7 +58,7 @@
 UkmMessageHandler::~UkmMessageHandler() {}
 
 void UkmMessageHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       "requestUkmData",
       base::BindRepeating(&UkmMessageHandler::HandleRequestUkmData,
                           base::Unretained(this)));
diff --git a/ios/chrome/browser/ui/webui/version_handler.cc b/ios/chrome/browser/ui/webui/version_handler.cc
index 1023251..b761327 100644
--- a/ios/chrome/browser/ui/webui/version_handler.cc
+++ b/ios/chrome/browser/ui/webui/version_handler.cc
@@ -16,7 +16,7 @@
 VersionHandler::~VersionHandler() {}
 
 void VersionHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       version_ui::kRequestVariationInfo,
       base::BindRepeating(&VersionHandler::HandleRequestVariationInfo,
                           base::Unretained(this)));
diff --git a/ios/components/webui/sync_internals/sync_internals_message_handler.mm b/ios/components/webui/sync_internals/sync_internals_message_handler.mm
index 88c10d2..fea95140 100644
--- a/ios/components/webui/sync_internals/sync_internals_message_handler.mm
+++ b/ios/components/webui/sync_internals/sync_internals_message_handler.mm
@@ -52,53 +52,53 @@
 void SyncInternalsMessageHandler::RegisterMessages() {
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestDataAndRegisterForUpdates,
       base::BindRepeating(
           &SyncInternalsMessageHandler::HandleRequestDataAndRegisterForUpdates,
           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestListOfTypes,
       base::BindRepeating(
           &SyncInternalsMessageHandler::HandleRequestListOfTypes,
           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestIncludeSpecificsInitialState,
       base::BindRepeating(&SyncInternalsMessageHandler::
                               HandleRequestIncludeSpecificsInitialState,
                           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kSetIncludeSpecifics,
       base::BindRepeating(
           &SyncInternalsMessageHandler::HandleSetIncludeSpecifics,
           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestStart,
       base::BindRepeating(&SyncInternalsMessageHandler::HandleRequestStart,
                           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestStopKeepData,
       base::BindRepeating(
           &SyncInternalsMessageHandler::HandleRequestStopKeepData,
           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kRequestStopClearData,
       base::BindRepeating(
           &SyncInternalsMessageHandler::HandleRequestStopClearData,
           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kTriggerRefresh,
       base::BindRepeating(&SyncInternalsMessageHandler::HandleTriggerRefresh,
                           base::Unretained(this)));
 
-  web_ui()->RegisterMessageCallback(
+  web_ui()->RegisterDeprecatedMessageCallback2(
       syncer::sync_ui_util::kGetAllNodes,
       base::BindRepeating(&SyncInternalsMessageHandler::HandleGetAllNodes,
                           base::Unretained(this)));
diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service_unittest.mm b/ios/public/provider/chrome/browser/signin/chrome_identity_service_unittest.mm
index 5a34717..679ef51 100644
--- a/ios/public/provider/chrome/browser/signin/chrome_identity_service_unittest.mm
+++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service_unittest.mm
@@ -39,14 +39,37 @@
   TestChromeIdentityService() = default;
   ~TestChromeIdentityService() override = default;
 
-  // Sets the capability and its corresponding fetcher in the test service.
-  void SetCapabilityUnderTest(NSString* capability_name,
-                              CapabilityFetcherBlock capability_fetcher_block) {
-    capability_name_ = capability_name;
-    capability_fetcher_block_ = capability_fetcher_block;
+  // Defines available capabilities that can be set under test.
+  // Sets the capability |kCanOfferExtendedChromeSyncPromosCapabilityName| under
+  // test.
+  void SetCapabilityUnderTestCanOfferExtendedSyncPromos(
+      ChromeIdentity* identity) {
+    SetCapabilityUnderTest(
+        @(kCanOfferExtendedChromeSyncPromosCapabilityName),
+        ^(ChromeIdentityCapabilityResult* fetched_capability_result) {
+          CanOfferExtendedSyncPromos(identity,
+                                     ^(ChromeIdentityCapabilityResult result) {
+                                       *fetched_capability_result = result;
+                                     });
+        });
   }
 
-  // Retrieves the capability tribool result for the capability under test.
+  // Sets the capability |kIsSubjectToParentalControlsCapabilityName| under
+  // test.
+  void SetCapabilityUnderTestIsSubjectToParentalControls(
+      ChromeIdentity* identity) {
+    SetCapabilityUnderTest(
+        @(kIsSubjectToParentalControlsCapabilityName),
+        ^(ChromeIdentityCapabilityResult* fetched_capability_result) {
+          IsSubjectToParentalControls(identity,
+                                      ^(ChromeIdentityCapabilityResult result) {
+                                        *fetched_capability_result = result;
+                                      });
+        });
+  }
+
+  // Retrieves the capability tribool result for the capability under test
+  // with the specified delay.
   ChromeIdentityCapabilityResult FetchCapability(NSNumber* capability_value,
                                                  NSError* error) {
     base::HistogramTester histogramTester;
@@ -80,6 +103,13 @@
   }
 
  private:
+  // Sets the capability and its corresponding fetcher in the test service.
+  void SetCapabilityUnderTest(NSString* capability_name,
+                              CapabilityFetcherBlock capability_fetcher_block) {
+    capability_name_ = capability_name;
+    capability_fetcher_block_ = capability_fetcher_block;
+  }
+
   void RunFinishCapabilitiesCompletion(NSNumber* capability_value,
                                        NSError* error) {
     NSDictionary* capabilities =
@@ -105,17 +135,8 @@
   ~ChromeIdentityServiceTest() override = default;
 
  protected:
-  void RunCapabilitySmokeTests() {
-    CheckChromeIdentityCapabilityResult();
-    CheckMissingCapability();
-    CheckCapabilityValueOutOfRange();
-    CheckCapabillityFetcherWithError();
-  }
-
-  FakeChromeIdentity* identity_;
-  TestChromeIdentityService service_;
-
- private:
+  // Checks that the defined capability values correspond to expected
+  // ChromeIdentityCapabilityResult.
   void CheckChromeIdentityCapabilityResult() {
     {
       base::HistogramTester histogramTester;
@@ -143,6 +164,7 @@
     }
   }
 
+  // Checks that a missing capability maps to the kUnknown capability result.
   void CheckMissingCapability() {
     base::HistogramTester histogramTester;
     EXPECT_EQ(ChromeIdentityCapabilityResult::kUnknown,
@@ -154,6 +176,8 @@
         1);
   }
 
+  // Checks that an out of range capability value maps to the kUnknown
+  // capability result.
   void CheckCapabilityValueOutOfRange() {
     base::HistogramTester histogramTester;
     EXPECT_EQ(ChromeIdentityCapabilityResult::kUnknown,
@@ -164,7 +188,9 @@
         1);
   }
 
-  void CheckCapabillityFetcherWithError() {
+  // Checks that an error in fetching capabilities maps to the kUnknown
+  // capability result.
+  void CheckCapabilityFetcherWithError() {
     NSError* error = [NSError errorWithDomain:@"test" code:-100 userInfo:nil];
     {
       base::HistogramTester histogramTester;
@@ -193,32 +219,73 @@
           FetchAccountCapabilitiesFromSystemLibraryResult::kErrorGeneric, 1);
     }
   }
+
+  FakeChromeIdentity* identity_;
+  TestChromeIdentityService service_;
 };
 
-TEST_F(ChromeIdentityServiceTest, CanOfferExtendedSyncPromos) {
-  service_.SetCapabilityUnderTest(
-      @(kCanOfferExtendedChromeSyncPromosCapabilityName),
-      ^(ChromeIdentityCapabilityResult* fetched_capability_result) {
-        service_.CanOfferExtendedSyncPromos(
-            identity_, ^(ChromeIdentityCapabilityResult result) {
-              *fetched_capability_result = result;
-            });
-      });
-
-  RunCapabilitySmokeTests();
+// Checks that the capability CanOfferExtendedChromeSyncPromos maps
+// capability values to their corresponding ChromeIdentityCapabilityResult.
+TEST_F(ChromeIdentityServiceTest,
+       CanOfferExtendedSyncPromos_CheckChromeIdentityCapabilityResult) {
+  service_.SetCapabilityUnderTestCanOfferExtendedSyncPromos(identity_);
+  CheckChromeIdentityCapabilityResult();
 }
 
-TEST_F(ChromeIdentityServiceTest, IsSubjectToParentalControls) {
-  service_.SetCapabilityUnderTest(
-      @(kIsSubjectToParentalControlsCapabilityName),
-      ^(ChromeIdentityCapabilityResult* fetched_capability_result) {
-        service_.IsSubjectToParentalControls(
-            identity_, ^(ChromeIdentityCapabilityResult result) {
-              *fetched_capability_result = result;
-            });
-      });
+// Checks that the capability CanOfferExtendedSyncPromos correctly handles
+// missing capabilities as kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       CanOfferExtendedSyncPromos_CheckMissingCapability) {
+  service_.SetCapabilityUnderTestCanOfferExtendedSyncPromos(identity_);
+  CheckMissingCapability();
+}
 
-  RunCapabilitySmokeTests();
+// Checks that the capability CanOfferExtendedSyncPromos correctly handles
+// out of range capability values as kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       CanOfferExtendedSyncPromos_CheckCapabilityValueOutOfRange) {
+  service_.SetCapabilityUnderTestCanOfferExtendedSyncPromos(identity_);
+  CheckCapabilityValueOutOfRange();
+}
+
+// Checks that the capability CanOfferExtendedSyncPromos correctly handles
+// errors in the capability fetcher as capability value kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       CanOfferExtendedSyncPromos_CheckCapabilityFetcherWithError) {
+  service_.SetCapabilityUnderTestCanOfferExtendedSyncPromos(identity_);
+  CheckCapabilityFetcherWithError();
+}
+
+// Checks that the capability IsSubjectToParentalControls maps
+// capability values to their corresponding ChromeIdentityCapabilityResult.
+TEST_F(ChromeIdentityServiceTest,
+       IsSubjectToParentalControls_CheckChromeIdentityCapabilityResult) {
+  service_.SetCapabilityUnderTestIsSubjectToParentalControls(identity_);
+  CheckChromeIdentityCapabilityResult();
+}
+
+// Checks that the capability IsSubjectToParentalControls correctly handles
+// missing capabilities as kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       IsSubjectToParentalControls_CheckMissingCapability) {
+  service_.SetCapabilityUnderTestIsSubjectToParentalControls(identity_);
+  CheckMissingCapability();
+}
+
+// Checks that the capability IsSubjectToParentalControls correctly handles
+// out of range capability values as kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       IsSubjectToParentalControls_CheckCapabilityValueOutOfRange) {
+  service_.SetCapabilityUnderTestIsSubjectToParentalControls(identity_);
+  CheckCapabilityValueOutOfRange();
+}
+
+// Checks that the capability IsSubjectToParentalControls correctly handles
+// errors in the capability fetcher as capability value kUnknown.
+TEST_F(ChromeIdentityServiceTest,
+       IsSubjectToParentalControls_CheckCapabilityFetcherWithError) {
+  service_.SetCapabilityUnderTestIsSubjectToParentalControls(identity_);
+  CheckCapabilityFetcherWithError();
 }
 
 }  // namespace
diff --git a/ios/web/public/webui/web_ui_ios.h b/ios/web/public/webui/web_ui_ios.h
index e7671cd..e2f0c97 100644
--- a/ios/web/public/webui/web_ui_ios.h
+++ b/ios/web/public/webui/web_ui_ios.h
@@ -44,21 +44,21 @@
 
   // TODO(crbug.com/1300095): new version of DeprecatedMessageCallback2 that
   // takes base::Value::List as a parameter needs to be introduced. Afterwards
-  // existing callers of RegisterDeprecatedMessageCallback() should be migrated
-  // to the new RegisterMessageCallback() (not the one below) version.
+  // existing callers of RegisterDeprecatedMessageCallback2() should be migrated
+  // to the new RegisterMessageCallback() (not yet introduced) version.
   //
   // Used by WebUIIOSMessageHandlers. If the given message is already
   // registered, the call has no effect.
   using DeprecatedMessageCallback2 =
       base::RepeatingCallback<void(base::Value::ConstListView)>;
-  virtual void RegisterMessageCallback(const std::string& message,
-                                       DeprecatedMessageCallback2 callback) = 0;
+  virtual void RegisterDeprecatedMessageCallback2(
+      const std::string& message,
+      DeprecatedMessageCallback2 callback) = 0;
 
   // TODO(crbug.com/1300095): new version of DeprecatedMessageCallback that
   // takes base::Value::List as a parameter needs to be introduced. Afterwards
   // existing callers of RegisterDeprecatedMessageCallback() should be migrated
-  // to the new RegisterMessageCallback() (not the one above) version if
-  // possible.
+  // to the new RegisterMessageCallback() (not yet introduced) version.
   //
   // Used by WebUIIOSMessageHandlers. If the given message is already
   // registered, the call has no effect.
diff --git a/ios/web/webui/web_ui_ios_impl.h b/ios/web/webui/web_ui_ios_impl.h
index ed2dabf..882e8f3c 100644
--- a/ios/web/webui/web_ui_ios_impl.h
+++ b/ios/web/webui/web_ui_ios_impl.h
@@ -37,8 +37,9 @@
   void SetController(std::unique_ptr<WebUIIOSController> controller) override;
   void AddMessageHandler(
       std::unique_ptr<WebUIIOSMessageHandler> handler) override;
-  void RegisterMessageCallback(const std::string& message,
-                               DeprecatedMessageCallback2 callback) override;
+  void RegisterDeprecatedMessageCallback2(
+      const std::string& message,
+      DeprecatedMessageCallback2 callback) override;
   void RegisterDeprecatedMessageCallback(
       const std::string& message,
       const DeprecatedMessageCallback& callback) override;
diff --git a/ios/web/webui/web_ui_ios_impl.mm b/ios/web/webui/web_ui_ios_impl.mm
index edf4161..ce82ea7 100644
--- a/ios/web/webui/web_ui_ios_impl.mm
+++ b/ios/web/webui/web_ui_ios_impl.mm
@@ -108,7 +108,7 @@
       GetJavascriptCall("cr.webUIListenerCallback", modified_args));
 }
 
-void WebUIIOSImpl::RegisterMessageCallback(
+void WebUIIOSImpl::RegisterDeprecatedMessageCallback2(
     const std::string& message,
     DeprecatedMessageCallback2 callback) {
   deprecated_message_callbacks_2_.emplace(message, std::move(callback));
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index bf836e9..0fb175a 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -527,7 +527,7 @@
     "VaapiH264TemporalLayerEncoding", base::FEATURE_ENABLED_BY_DEFAULT};
 // Enable VP8 temporal layer encoding with HW encoder on ChromeOS.
 const base::Feature kVaapiVp8TemporalLayerHWEncoding{
-    "VaapiVp8TemporalLayerEncoding", base::FEATURE_DISABLED_BY_DEFAULT};
+    "VaapiVp8TemporalLayerEncoding", base::FEATURE_ENABLED_BY_DEFAULT};
 // Enable VP9 k-SVC encoding with HW encoder for webrtc use case on ChromeOS.
 const base::Feature kVaapiVp9kSVCHWEncoding{"VaapiVp9kSVCHWEncoding",
                                             base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/media/gpu/test/video_encoder/video_encoder_test_environment.cc b/media/gpu/test/video_encoder/video_encoder_test_environment.cc
index adde0b2..93f5c4b 100644
--- a/media/gpu/test/video_encoder/video_encoder_test_environment.cc
+++ b/media/gpu/test/video_encoder/video_encoder_test_environment.cc
@@ -165,8 +165,6 @@
 #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_VAAPI)
   // TODO(crbug.com/1186051): remove once enabled by default.
   combined_enabled_features.push_back(media::kVaapiVp9kSVCHWEncoding);
-  // TODO(b/202926617): remove once enabled by default.
-  combined_enabled_features.push_back(media::kVaapiVp8TemporalLayerHWEncoding);
 #endif
 
   const uint32_t bitrate = encode_bitrate.value_or(
diff --git a/mojo/core/channel_unittest.cc b/mojo/core/channel_unittest.cc
index f1ab091..e9dee38 100644
--- a/mojo/core/channel_unittest.cc
+++ b/mojo/core/channel_unittest.cc
@@ -379,6 +379,7 @@
                                           base::kNullProcessHandle));
 }
 
+// This test is only enabled for Linux-based platforms.
 #if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_FUCHSIA)
 TEST(ChannelTest, DeserializeMessage_NonZeroExtraHeaderSize) {
   // Verifies that a message payload is rejected when the extra header chunk
diff --git a/mojo/core/invitation_unittest.cc b/mojo/core/invitation_unittest.cc
index af4c9fc6..15a735d 100644
--- a/mojo/core/invitation_unittest.cc
+++ b/mojo/core/invitation_unittest.cc
@@ -544,6 +544,7 @@
 }
 
 #if !BUILDFLAG(IS_FUCHSIA)
+// Fuchsia has no named pipe support.
 TEST_F(InvitationTest, SendInvitationWithServer) {
   MojoHandle primordial_pipe;
   base::Process child_process = LaunchChildTestClient(
diff --git a/mojo/core/multiprocess_message_pipe_unittest.cc b/mojo/core/multiprocess_message_pipe_unittest.cc
index 94f5b6e7..cb02b88 100644
--- a/mojo/core/multiprocess_message_pipe_unittest.cc
+++ b/mojo/core/multiprocess_message_pipe_unittest.cc
@@ -1375,6 +1375,7 @@
                     test::MojoTestBase::LaunchType::PEER,
                     test::MojoTestBase::LaunchType::ASYNC
 #if !BUILDFLAG(IS_FUCHSIA)
+                    // Fuchsia has no named pipe support.
                     ,
                     test::MojoTestBase::LaunchType::NAMED_CHILD,
                     test::MojoTestBase::LaunchType::NAMED_PEER
diff --git a/mojo/public/cpp/system/tests/invitation_unittest.cc b/mojo/public/cpp/system/tests/invitation_unittest.cc
index afd6d65..723c748 100644
--- a/mojo/public/cpp/system/tests/invitation_unittest.cc
+++ b/mojo/public/cpp/system/tests/invitation_unittest.cc
@@ -42,6 +42,7 @@
 enum class TransportType {
   kChannel,
 #if !BUILDFLAG(IS_FUCHSIA)
+  // Fuchsia has no named pipe support.
   kChannelServer,
 #endif
 };
diff --git a/net/data/ssl/chrome_root_store/root_store.textproto b/net/data/ssl/chrome_root_store/root_store.textproto
index 613c237..2d5563a 100644
--- a/net/data/ssl/chrome_root_store/root_store.textproto
+++ b/net/data/ssl/chrome_root_store/root_store.textproto
@@ -1,6 +1,11 @@
-# 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.
+# Chrome Root Store.
+#
+# proto-file: googleclient/chrome/security/pki_metadata/chrome_root_store/root_store.proto
+# proto-message: chrome_browser_chrome_root_store.RootStore
+
+# Version # should always be incremented up whenever this (or any pem file that
+# it references) is changed.
+version_major: 1
 
 # Actalis Authentication Root CA
 trust_anchors {
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 2f05a62..cc567d2 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -3255,7 +3255,6 @@
     if (VersionUsesHttp3(version_.transport_version)) {
       client_maker_.set_connection_id(cid_on_old_path);
     }
-    if (version_.UsesTls()) {
       if (VersionUsesHttp3(version_.transport_version)) {
         socket_data.AddWrite(
             SYNCHRONOUS,
@@ -3276,28 +3275,6 @@
                 quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
                 "net error"));
       }
-    } else {
-      if (VersionUsesHttp3(version_.transport_version)) {
-        socket_data.AddWrite(
-            SYNCHRONOUS,
-            client_maker_.MakeDataRstAckAndConnectionClosePacket(
-                packet_num++, false, GetQpackDecoderStreamId(),
-                StreamCancellationQpackDecoderInstruction(0),
-                GetNthClientInitiatedBidirectionalStreamId(0),
-                quic::QUIC_STREAM_CANCELLED, 1, 1,
-                quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
-                "net error"));
-      } else {
-        socket_data.AddWrite(
-            SYNCHRONOUS,
-            client_maker_.MakeRstAckAndConnectionClosePacket(
-                packet_num++, false,
-                GetNthClientInitiatedBidirectionalStreamId(0),
-                quic::QUIC_STREAM_CANCELLED, 1, 1,
-                quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
-                "net error"));
-      }
-    }
   }
 
   socket_data.AddSocketDataToFactory(socket_factory_.get());
@@ -6488,7 +6465,6 @@
     if (VersionUsesHttp3(version_.transport_version)) {
       client_maker_.set_connection_id(cid_on_old_path);
     }
-    if (version_.UsesTls()) {
       if (VersionUsesHttp3(version_.transport_version)) {
         socket_data.AddWrite(
             SYNCHRONOUS,
@@ -6509,28 +6485,6 @@
                 quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
                 "net error"));
       }
-    } else {
-      if (VersionUsesHttp3(version_.transport_version)) {
-        socket_data.AddWrite(
-            SYNCHRONOUS,
-            client_maker_.MakeDataRstAckAndConnectionClosePacket(
-                packet_num++, false, GetQpackDecoderStreamId(),
-                StreamCancellationQpackDecoderInstruction(0),
-                GetNthClientInitiatedBidirectionalStreamId(0),
-                quic::QUIC_STREAM_CANCELLED, 1, 1,
-                quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
-                "net error"));
-      } else {
-        socket_data.AddWrite(
-            SYNCHRONOUS,
-            client_maker_.MakeRstAckAndConnectionClosePacket(
-                packet_num++, false,
-                GetNthClientInitiatedBidirectionalStreamId(0),
-                quic::QUIC_STREAM_CANCELLED, 1, 1,
-                quic::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS,
-                "net error"));
-      }
-    }
   }
 
   socket_data.AddSocketDataToFactory(socket_factory_.get());
diff --git a/net/quic/quic_test_packet_maker.cc b/net/quic/quic_test_packet_maker.cc
index f7f1a70..da24956 100644
--- a/net/quic/quic_test_packet_maker.cc
+++ b/net/quic/quic_test_packet_maker.cc
@@ -469,8 +469,9 @@
     AddQuicStopSendingFrame(stream_id, error_code);
   }
   AddQuicRstStreamFrame(stream_id, error_code);
-
-  AddQuicAckFrame(largest_received, smallest_received);
+  if (!FLAGS_quic_reloadable_flag_quic_single_ack_in_packet2) {
+    AddQuicAckFrame(largest_received, smallest_received);
+  }
   AddQuicConnectionCloseFrame(quic_error, quic_error_details);
 
   return BuildPacket();
diff --git a/remoting/host/chromoting_messages.h b/remoting/host/chromoting_messages.h
index 2394e7ce..0587385 100644
--- a/remoting/host/chromoting_messages.h
+++ b/remoting/host/chromoting_messages.h
@@ -15,8 +15,7 @@
 #include "remoting/host/chromoting_param_traits.h"
 #include "remoting/proto/control.pb.h"
 #include "remoting/protocol/file_transfer_helpers.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
+#include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h"
 
 #endif  // REMOTING_HOST_CHROMOTING_MESSAGES_H_
 
@@ -40,41 +39,6 @@
 //-----------------------------------------------------------------------------
 // Chromoting messages sent from the desktop to the network process.
 
-// Serialized webrtc::DesktopFrame.
-IPC_STRUCT_BEGIN(SerializedDesktopFrame)
-  // ID of the shared memory buffer containing the pixels.
-  IPC_STRUCT_MEMBER(int, shared_buffer_id)
-
-  // Width of a single row of pixels in bytes.
-  IPC_STRUCT_MEMBER(int, bytes_per_row)
-
-  // Captured region.
-  IPC_STRUCT_MEMBER(std::vector<webrtc::DesktopRect>, dirty_region)
-
-  // Dimensions of the buffer in pixels.
-  IPC_STRUCT_MEMBER(webrtc::DesktopSize, dimensions)
-
-  // Time spent in capture. Unit is in milliseconds.
-  IPC_STRUCT_MEMBER(int64_t, capture_time_ms)
-
-  // Latest event timestamp supplied by the client for performance tracking.
-  IPC_STRUCT_MEMBER(int64_t, latest_event_timestamp)
-
-  // DPI for this frame.
-  IPC_STRUCT_MEMBER(webrtc::DesktopVector, dpi)
-
-  // Capturer Id
-  IPC_STRUCT_MEMBER(uint32_t, capturer_id)
-IPC_STRUCT_END()
-
-IPC_ENUM_TRAITS_MAX_VALUE(webrtc::DesktopCapturer::Result,
-                          webrtc::DesktopCapturer::Result::MAX_VALUE)
-
-// Notifies the network process that a shared buffer has been created.
-IPC_MESSAGE_CONTROL(ChromotingDesktopNetworkMsg_CaptureResult,
-                    webrtc::DesktopCapturer::Result /* result */,
-                    SerializedDesktopFrame /* frame */)
-
 // Notifies the network process that the host display layout has changed.
 IPC_MESSAGE_CONTROL(ChromotingDesktopNetworkMsg_DisplayChanged,
                     remoting::protocol::VideoLayout /* layout */)
diff --git a/remoting/host/chromoting_param_traits.cc b/remoting/host/chromoting_param_traits.cc
index e12e492..f71d92d 100644
--- a/remoting/host/chromoting_param_traits.cc
+++ b/remoting/host/chromoting_param_traits.cc
@@ -69,37 +69,6 @@
                                p.width(), p.height()));
 }
 
-// webrtc::DesktopRect
-
-// static
-void ParamTraits<webrtc::DesktopRect>::Write(base::Pickle* m,
-                                             const webrtc::DesktopRect& p) {
-  m->WriteInt(p.left());
-  m->WriteInt(p.top());
-  m->WriteInt(p.right());
-  m->WriteInt(p.bottom());
-}
-
-// static
-bool ParamTraits<webrtc::DesktopRect>::Read(const base::Pickle* m,
-                                            base::PickleIterator* iter,
-                                            webrtc::DesktopRect* r) {
-  int left, right, top, bottom;
-  if (!iter->ReadInt(&left) || !iter->ReadInt(&top) ||
-      !iter->ReadInt(&right) || !iter->ReadInt(&bottom)) {
-    return false;
-  }
-  *r = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom);
-  return true;
-}
-
-// static
-void ParamTraits<webrtc::DesktopRect>::Log(const webrtc::DesktopRect& p,
-                                           std::string* l) {
-  l->append(base::StringPrintf("webrtc::DesktopRect(%d, %d, %d, %d)",
-                               p.left(), p.top(), p.right(), p.bottom()));
-}
-
 // webrtc::MouseCursor
 
 // static
@@ -157,10 +126,10 @@
 void ParamTraits<webrtc::MouseCursor>::Log(
     const webrtc::MouseCursor& p,
     std::string* l) {
-  l->append(base::StringPrintf(
-      "webrtc::DesktopRect{image(%d, %d), hotspot(%d, %d)}",
-      p.image()->size().width(), p.image()->size().height(),
-      p.hotspot().x(), p.hotspot().y()));
+  l->append(
+      base::StringPrintf("webrtc::MouseCursor{image(%d, %d), hotspot(%d, %d)}",
+                         p.image()->size().width(), p.image()->size().height(),
+                         p.hotspot().x(), p.hotspot().y()));
 }
 
 // remoting::protocol::VideoLayout
diff --git a/remoting/host/chromoting_param_traits.h b/remoting/host/chromoting_param_traits.h
index 8009ed5..693c557 100644
--- a/remoting/host/chromoting_param_traits.h
+++ b/remoting/host/chromoting_param_traits.h
@@ -10,7 +10,6 @@
 #include "remoting/base/result.h"
 #include "remoting/proto/control.pb.h"
 #include "remoting/proto/file_transfer.pb.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h"
 
@@ -37,16 +36,6 @@
 };
 
 template <>
-struct ParamTraits<webrtc::DesktopRect> {
-  typedef webrtc::DesktopRect param_type;
-  static void Write(base::Pickle* m, const param_type& p);
-  static bool Read(const base::Pickle* m,
-                   base::PickleIterator* iter,
-                   param_type* r);
-  static void Log(const param_type& p, std::string* l);
-};
-
-template <>
 struct ParamTraits<webrtc::MouseCursor> {
   typedef webrtc::MouseCursor param_type;
   static void Write(base::Pickle* m, const param_type& p);
diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc
index 697fb05..368ce4d 100644
--- a/remoting/host/desktop_session_agent.cc
+++ b/remoting/host/desktop_session_agent.cc
@@ -479,25 +479,27 @@
     std::unique_ptr<webrtc::DesktopFrame> frame) {
   DCHECK(caller_task_runner_->BelongsToCurrentThread());
 
-  // Serialize webrtc::DesktopFrame.
-  SerializedDesktopFrame serialized_frame;
+  mojom::CaptureResultPtr capture_result;
   if (frame) {
-    serialized_frame.shared_buffer_id = frame->shared_memory()->id();
-    serialized_frame.bytes_per_row = frame->stride();
-    serialized_frame.dimensions = frame->size();
-    serialized_frame.capture_time_ms = frame->capture_time_ms();
-    serialized_frame.dpi = frame->dpi();
-    serialized_frame.capturer_id = frame->capturer_id();
+    DCHECK_EQ(result, webrtc::DesktopCapturer::Result::SUCCESS);
+    std::vector<webrtc::DesktopRect> dirty_region;
     for (webrtc::DesktopRegion::Iterator i(frame->updated_region());
          !i.IsAtEnd(); i.Advance()) {
-      serialized_frame.dirty_region.push_back(i.rect());
+      dirty_region.push_back(i.rect());
     }
+    capture_result =
+        mojom::CaptureResult::NewDesktopFrame(mojom::DesktopFrame::New(
+            frame->shared_memory()->id(), frame->stride(), frame->size(),
+            std::move(dirty_region), frame->capture_time_ms(), frame->dpi(),
+            frame->capturer_id()));
+  } else {
+    DCHECK_NE(result, webrtc::DesktopCapturer::Result::SUCCESS);
+    capture_result = mojom::CaptureResult::NewCaptureError(result);
   }
 
   last_frame_ = std::move(frame);
 
-  SendToNetwork(std::make_unique<ChromotingDesktopNetworkMsg_CaptureResult>(
-      result, serialized_frame));
+  desktop_session_event_handler_->OnCaptureResult(std::move(capture_result));
 }
 
 void DesktopSessionAgent::OnMouseCursor(webrtc::MouseCursor* cursor) {
diff --git a/remoting/host/desktop_session_proxy.cc b/remoting/host/desktop_session_proxy.cc
index e086791..76d64b9 100644
--- a/remoting/host/desktop_session_proxy.cc
+++ b/remoting/host/desktop_session_proxy.cc
@@ -232,8 +232,6 @@
 
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(DesktopSessionProxy, message)
-    IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CaptureResult,
-                        OnCaptureResult)
     IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_DisplayChanged,
                         OnDesktopDisplayChanged)
     IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_MouseCursor, OnMouseCursor)
@@ -718,9 +716,7 @@
   }
 }
 
-void DesktopSessionProxy::OnCaptureResult(
-    webrtc::DesktopCapturer::Result result,
-    const SerializedDesktopFrame& serialized_frame) {
+void DesktopSessionProxy::OnCaptureResult(mojom::CaptureResultPtr result) {
   DCHECK(caller_task_runner_->BelongsToCurrentThread());
 
   --pending_capture_frame_requests_;
@@ -729,26 +725,27 @@
     return;
   }
 
-  if (result != webrtc::DesktopCapturer::Result::SUCCESS) {
-    video_capturer_->OnCaptureResult(result, nullptr);
+  if (result->is_capture_error()) {
+    video_capturer_->OnCaptureResult(result->get_capture_error(), nullptr);
     return;
   }
 
-  // Assume that |serialized_frame| is well-formed because it was received from
-  // a more privileged process.
+  // Assume that |desktop_frame| is well-formed because it was received from a
+  // more privileged process.
+  mojom::DesktopFramePtr& desktop_frame = result->get_desktop_frame();
   scoped_refptr<IpcSharedBufferCore> shared_buffer_core =
-      GetSharedBufferCore(serialized_frame.shared_buffer_id);
+      GetSharedBufferCore(desktop_frame->shared_buffer_id);
   CHECK(shared_buffer_core.get());
 
-  std::unique_ptr<webrtc::DesktopFrame> frame(
-      new webrtc::SharedMemoryDesktopFrame(
-          serialized_frame.dimensions, serialized_frame.bytes_per_row,
-          new IpcSharedBuffer(shared_buffer_core)));
-  frame->set_capture_time_ms(serialized_frame.capture_time_ms);
-  frame->set_dpi(serialized_frame.dpi);
-  frame->set_capturer_id(serialized_frame.capturer_id);
+  std::unique_ptr<webrtc::DesktopFrame> frame =
+      std::make_unique<webrtc::SharedMemoryDesktopFrame>(
+          desktop_frame->size, desktop_frame->stride,
+          new IpcSharedBuffer(shared_buffer_core));
+  frame->set_capture_time_ms(desktop_frame->capture_time_ms);
+  frame->set_dpi(desktop_frame->dpi);
+  frame->set_capturer_id(desktop_frame->capturer_id);
 
-  for (const auto& rect : serialized_frame.dirty_region) {
+  for (const auto& rect : desktop_frame->dirty_region) {
     frame->mutable_updated_region()->AddRect(rect);
   }
 
diff --git a/remoting/host/desktop_session_proxy.h b/remoting/host/desktop_session_proxy.h
index 3281be1..2644559 100644
--- a/remoting/host/desktop_session_proxy.h
+++ b/remoting/host/desktop_session_proxy.h
@@ -186,6 +186,7 @@
                                    base::ReadOnlySharedMemoryRegion region,
                                    uint32_t size) override;
   void OnSharedMemoryRegionReleased(int id) override;
+  void OnCaptureResult(mojom::CaptureResultPtr capture_result) override;
 
   // mojom::DesktopSessionStateHandler implementation.
   void DisconnectSession(protocol::ErrorCode error) override;
diff --git a/remoting/host/ipc_desktop_environment_unittest.cc b/remoting/host/ipc_desktop_environment_unittest.cc
index 73b6400..b4c4c52 100644
--- a/remoting/host/ipc_desktop_environment_unittest.cc
+++ b/remoting/host/ipc_desktop_environment_unittest.cc
@@ -85,9 +85,10 @@
 
   ~MockScreenCapturerCallback() override = default;
 
-  MOCK_METHOD2(OnCaptureResultPtr,
-               void(webrtc::DesktopCapturer::Result result,
-                    std::unique_ptr<webrtc::DesktopFrame>* frame));
+  MOCK_METHOD(void,
+              OnCaptureResultPtr,
+              (webrtc::DesktopCapturer::Result,
+               std::unique_ptr<webrtc::DesktopFrame>*));
   void OnCaptureResult(webrtc::DesktopCapturer::Result result,
                        std::unique_ptr<webrtc::DesktopFrame> frame) override {
     OnCaptureResultPtr(result, &frame);
diff --git a/remoting/host/mojom/BUILD.gn b/remoting/host/mojom/BUILD.gn
index eeb8c7ff..ad6d365 100644
--- a/remoting/host/mojom/BUILD.gn
+++ b/remoting/host/mojom/BUILD.gn
@@ -58,10 +58,18 @@
           cpp = "::webrtc::DesktopCaptureOptions"
         },
         {
+          mojom = "remoting.mojom.DesktopCaptureResult"
+          cpp = "::webrtc::DesktopCapturer::Result"
+        },
+        {
           mojom = "remoting.mojom.DesktopEnvironmentOptions"
           cpp = "::remoting::DesktopEnvironmentOptions"
         },
         {
+          mojom = "remoting.mojom.DesktopRect"
+          cpp = "::webrtc::DesktopRect"
+        },
+        {
           mojom = "remoting.mojom.DesktopSize"
           cpp = "::webrtc::DesktopSize"
         },
diff --git a/remoting/host/mojom/desktop_session.mojom b/remoting/host/mojom/desktop_session.mojom
index d166c60..5624c91 100644
--- a/remoting/host/mojom/desktop_session.mojom
+++ b/remoting/host/mojom/desktop_session.mojom
@@ -337,6 +337,13 @@
   SetUpUrlForwarder();
 };
 
+// |frame| is set and contains valid frame data when a frame is captured
+// successfully, otherwise |error| will contain the reason the capture failed.
+union CaptureResult {
+  DesktopFrame desktop_frame;
+  DesktopCaptureResult capture_error;
+};
+
 // Allows the desktop process to forward events and data to the network process
 // which may process it (e.g. encode a video frame) or forward it to the client
 // (in the case of updated clipboard contents).
@@ -367,6 +374,11 @@
   // Notifies the network process that a shared memory region has been released
   // and should no longer be used.
   OnSharedMemoryRegionReleased(int32 id);
+
+  // Notifies the network process that new frame data is available in the shared
+  // memory region along with the details on how to access it (e.g. stride,
+  // size, etc.), otherwise provides the error reason the capture failed.
+  OnCaptureResult(CaptureResult result);
 };
 
 // This enum mirrors the remoting::protocol::ErrorCode enum.
diff --git a/remoting/host/mojom/remoting_mojom_traits.cc b/remoting/host/mojom/remoting_mojom_traits.cc
index ff6e9c5b..fe4d558 100644
--- a/remoting/host/mojom/remoting_mojom_traits.cc
+++ b/remoting/host/mojom/remoting_mojom_traits.cc
@@ -113,6 +113,16 @@
 
 // static
 bool mojo::StructTraits<
+    remoting::mojom::DesktopRectDataView,
+    ::webrtc::DesktopRect>::Read(remoting::mojom::DesktopRectDataView data_view,
+                                 ::webrtc::DesktopRect* out_rect) {
+  *out_rect = webrtc::DesktopRect::MakeLTRB(
+      data_view.left(), data_view.top(), data_view.right(), data_view.bottom());
+  return true;
+}
+
+// static
+bool mojo::StructTraits<
     remoting::mojom::DesktopSizeDataView,
     ::webrtc::DesktopSize>::Read(remoting::mojom::DesktopSizeDataView data_view,
                                  ::webrtc::DesktopSize* out_size) {
diff --git a/remoting/host/mojom/remoting_mojom_traits.h b/remoting/host/mojom/remoting_mojom_traits.h
index de0b53d..9b83cb1 100644
--- a/remoting/host/mojom/remoting_mojom_traits.h
+++ b/remoting/host/mojom/remoting_mojom_traits.h
@@ -163,6 +163,63 @@
 };
 
 template <>
+struct EnumTraits<remoting::mojom::DesktopCaptureResult,
+                  ::webrtc::DesktopCapturer::Result> {
+  static remoting::mojom::DesktopCaptureResult ToMojom(
+      ::webrtc::DesktopCapturer::Result input) {
+    switch (input) {
+      case ::webrtc::DesktopCapturer::Result::SUCCESS:
+        return remoting::mojom::DesktopCaptureResult::kSuccess;
+      case ::webrtc::DesktopCapturer::Result::ERROR_TEMPORARY:
+        return remoting::mojom::DesktopCaptureResult::kErrorTemporary;
+      case ::webrtc::DesktopCapturer::Result::ERROR_PERMANENT:
+        return remoting::mojom::DesktopCaptureResult::kErrorPermanent;
+    }
+
+    NOTREACHED();
+    return remoting::mojom::DesktopCaptureResult::kSuccess;
+  }
+
+  static bool FromMojom(remoting::mojom::DesktopCaptureResult input,
+                        ::webrtc::DesktopCapturer::Result* out) {
+    switch (input) {
+      case remoting::mojom::DesktopCaptureResult::kSuccess:
+        *out = ::webrtc::DesktopCapturer::Result::SUCCESS;
+        return true;
+      case remoting::mojom::DesktopCaptureResult::kErrorTemporary:
+        *out = ::webrtc::DesktopCapturer::Result::ERROR_TEMPORARY;
+        return true;
+      case remoting::mojom::DesktopCaptureResult::kErrorPermanent:
+        *out = ::webrtc::DesktopCapturer::Result::ERROR_PERMANENT;
+        return true;
+    }
+
+    NOTREACHED();
+    return false;
+  }
+};
+
+template <>
+class mojo::StructTraits<remoting::mojom::DesktopRectDataView,
+                         ::webrtc::DesktopRect> {
+ public:
+  static int32_t left(const ::webrtc::DesktopRect& rect) { return rect.left(); }
+
+  static int32_t top(const ::webrtc::DesktopRect& rect) { return rect.top(); }
+
+  static int32_t right(const ::webrtc::DesktopRect& rect) {
+    return rect.right();
+  }
+
+  static int32_t bottom(const ::webrtc::DesktopRect& rect) {
+    return rect.bottom();
+  }
+
+  static bool Read(remoting::mojom::DesktopRectDataView data_view,
+                   ::webrtc::DesktopRect* out_rect);
+};
+
+template <>
 class mojo::StructTraits<remoting::mojom::DesktopSizeDataView,
                          ::webrtc::DesktopSize> {
  public:
diff --git a/remoting/host/mojom/webrtc_types.mojom b/remoting/host/mojom/webrtc_types.mojom
index 3b63223..3943da0 100644
--- a/remoting/host/mojom/webrtc_types.mojom
+++ b/remoting/host/mojom/webrtc_types.mojom
@@ -6,7 +6,8 @@
 
 // WebRTC structures which are shared over IPC between chromoting processes.
 
-// A subset of the desktop capture options used by CRD.
+// A subset of the WebRTC DesktopCaptureOptions used by CRD:
+// //third_party/webrtc/modules/desktop_capture/desktop_capture_options.h
 struct DesktopCaptureOptions {
   bool use_update_notifications;
   bool detect_updated_region;
@@ -15,11 +16,64 @@
   bool allow_directx_capturer;
 };
 
+// Original WebRTC enum can be found at:
+// //third_party/webrtc/modules/desktop_capture/desktop_capturer.h
+enum DesktopCaptureResult {
+  // The frame was captured successfully.
+  kSuccess = 0,
+  // There was a temporary error, trying again will eventually succeed.
+  kErrorTemporary = 1,
+  // Capture failed and will not succeed if retried.
+  kErrorPermanent = 2,
+};
+
+// A subset of the fields present in webrtc::DesktopFrame used to provide
+// captured frame data between processes.
+struct DesktopFrame {
+  // ID of the shared memory buffer containing the pixel data. This ID must have
+  // already been passed to the network process as part of the create shared
+  // memory region notification, otherwise the frame data cannot be retrieved.
+  int32 shared_buffer_id;
+
+  // Width of a single row of pixels in bytes.
+  int32 stride;
+
+  // Dimensions of the buffer in pixels.
+  DesktopSize size;
+
+  // Set of rects representing changed area of the desktop.
+  array<DesktopRect> dirty_region;
+
+  // Time spent in capture. Unit is in milliseconds.
+  int64 capture_time_ms;
+
+  // DPI for this frame.
+  DesktopVector dpi;
+
+  // ID of the capturer used to generate the frame, specific values for this
+  // field can be found in:
+  // //third_party/webrtc/modules/desktop_capture/desktop_capture_types.h
+  uint32 capturer_id;
+};
+
+// Original WebRTC class can be found at:
+// //third_party/webrtc/modules/desktop_capture/desktop_geometry.h
+struct DesktopRect {
+  int32 left;
+  int32 top;
+  int32 right;
+  int32 bottom;
+};
+
+// Original WebRTC class can be found at:
+// //third_party/webrtc/modules/desktop_capture/desktop_geometry.h
 struct DesktopSize {
   int32 width;
   int32 height;
 };
 
+// Original WebRTC class can be found at:
+// //third_party/webrtc/modules/desktop_capture/desktop_geometry.h
 struct DesktopVector {
   int32 x;
   int32 y;
diff --git a/remoting/protocol/fake_desktop_capturer.h b/remoting/protocol/fake_desktop_capturer.h
index a37c3b8..d717e03e 100644
--- a/remoting/protocol/fake_desktop_capturer.h
+++ b/remoting/protocol/fake_desktop_capturer.h
@@ -16,7 +16,7 @@
 namespace remoting {
 namespace protocol {
 
-// A FakeDesktopCapturer generates artificial image for testing purpose.
+// A FakeDesktopCapturer which generates an artificial image for testing.
 //
 // FakeDesktopCapturer is double-buffered as required by DesktopCapturer.
 class FakeDesktopCapturer : public webrtc::DesktopCapturer {
diff --git a/services/cert_verifier/cert_verifier_creation.cc b/services/cert_verifier/cert_verifier_creation.cc
index 962046b..d7f6ce4 100644
--- a/services/cert_verifier/cert_verifier_creation.cc
+++ b/services/cert_verifier/cert_verifier_creation.cc
@@ -12,7 +12,7 @@
 #include "net/cert_net/cert_net_fetcher_url_request.h"
 #include "net/net_buildflags.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 #include "crypto/nss_util_internal.h"
 #include "net/cert/cert_verify_proc_builtin.h"
 #include "net/cert/internal/system_trust_store.h"
@@ -63,7 +63,7 @@
 
 #endif  // BUILDFLAG(CHROME_ROOT_STORE_SUPPORTED)
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if BUILDFLAG(IS_CHROMEOS)
 scoped_refptr<net::CertVerifyProc> CreateCertVerifyProcForUser(
     scoped_refptr<net::CertNetFetcher> net_fetcher,
     crypto::ScopedPK11Slot user_public_slot) {
@@ -79,7 +79,7 @@
       std::move(net_fetcher),
       net::CreateSslSystemTrustStoreNSSWithNoUserSlots());
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // BUILDFLAG(IS_CHROMEOS)
 
 // Create the CertVerifyProc that is well-tested and stable for the platform in
 // question.
@@ -135,6 +135,27 @@
   DCHECK(cert_net_fetcher || !IsUsingCertNetFetcher());
   std::unique_ptr<net::CertVerifier> cert_verifier;
 
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  if (!cert_verifier) {
+    scoped_refptr<net::CertVerifyProc> verify_proc;
+    if (!creation_params || !creation_params->nss_full_path.has_value()) {
+      verify_proc =
+          CreateCertVerifyProcWithoutUserSlots(std::move(cert_net_fetcher));
+    } else {
+      crypto::ScopedPK11Slot public_slot =
+          crypto::OpenSoftwareNSSDB(creation_params->nss_full_path.value(),
+                                    /*description=*/"cert_db");
+      // `public_slot` can contain important security related settings. Crash if
+      // failed to load it.
+      CHECK(public_slot);
+      verify_proc = CreateCertVerifyProcForUser(std::move(cert_net_fetcher),
+                                                std::move(public_slot));
+    }
+    cert_verifier = std::make_unique<net::MultiThreadedCertVerifier>(
+        std::move(verify_proc));
+  }
+#endif
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   // CHROMEOS_ASH does something special, so we do this first before we do
   // anything else. If the trial comparisons feature ever gets supported in
@@ -160,9 +181,9 @@
 #endif
 
 #if BUILDFLAG(TRIAL_COMPARISON_CERT_VERIFIER_SUPPORTED)
-  // If we're doing trial verification, we always do it between the old default
-  // and the proposed new default, giving the user the value computed by the old
-  // default.
+  // If we're doing trial verification, we always do it between the old
+  // default and the proposed new default, giving the user the value computed
+  // by the old default.
   if (!cert_verifier && creation_params &&
       creation_params->trial_comparison_cert_verifier_params) {
     scoped_refptr<net::CertVerifyProc> primary =
@@ -198,9 +219,9 @@
 
   if (!cert_verifier) {
     scoped_refptr<net::CertVerifyProc> verify_proc;
-    // If we're trying to use the new cert verifier for the platform (either the
-    // builtin_verifier, or the Chrome Root Store, or both at the same time),
-    // use the new default. Otherwise use the old default.
+    // If we're trying to use the new cert verifier for the platform (either
+    // the builtin_verifier, or the Chrome Root Store, or both at the same
+    // time), use the new default. Otherwise use the old default.
     if (use_new_default_for_platform) {
       verify_proc = CreateNewDefaultWithoutCaching(std::move(cert_net_fetcher));
     } else {
diff --git a/services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom b/services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom
index b091022..d615a6f 100644
--- a/services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom
+++ b/services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom
@@ -14,9 +14,15 @@
 // objects should be instantiated.
 struct CertVerifierCreationParams {
   // Specifies the path to the directory where NSS will store its database.
+  // Example: /home/chronos/u-<hash>
   [EnableIf=is_chromeos_ash]
   mojo_base.mojom.FilePath? nss_path;
 
+  // Specifies the path to the software NSS database.
+  // Example: /home/chronos/u-<hash>/.pki/nssdb
+  [EnableIf=is_chromeos_lacros]
+  mojo_base.mojom.FilePath? nss_full_path;
+
   // This is used in combination with nss_path, to ensure that the NSS database
   // isn't opened multiple times for NetworkContexts in the same profie.
   [EnableIf=is_chromeos_ash]
diff --git a/services/data_decoder/public/cpp/safe_web_bundle_parser_unittest.cc b/services/data_decoder/public/cpp/safe_web_bundle_parser_unittest.cc
index 442768fd..ec3a5c1 100644
--- a/services/data_decoder/public/cpp/safe_web_bundle_parser_unittest.cc
+++ b/services/data_decoder/public/cpp/safe_web_bundle_parser_unittest.cc
@@ -113,6 +113,10 @@
   // Implements web_package::mojom::BundledDataSource.
   void Read(uint64_t offset, uint64_t length, ReadCallback callback) override {}
 
+  void Length(LengthCallback) override {}
+
+  void IsRandomAccessContext(IsRandomAccessContextCallback) override {}
+
   mojo::Receiver<web_package::mojom::BundleDataSource> receiver_;
 };
 
diff --git a/services/network/web_bundle/web_bundle_url_loader_factory.cc b/services/network/web_bundle/web_bundle_url_loader_factory.cc
index a930790..6c7c443 100644
--- a/services/network/web_bundle/web_bundle_url_loader_factory.cc
+++ b/services/network/web_bundle/web_bundle_url_loader_factory.cc
@@ -412,7 +412,7 @@
                                      std::move(writer), std::move(callback)));
   }
 
-  // mojom::BundleDataSource
+  // Implements mojom::BundleDataSource.
   void Read(uint64_t offset, uint64_t length, ReadCallback callback) override {
     TRACE_EVENT0("loading", "BundleDataSource::Read");
     if (!finished_loading_ && !buffer_.ContainsAll(offset, length)) {
@@ -429,7 +429,13 @@
     std::move(callback).Run(std::move(output));
   }
 
-  // mojo::DataPipeDrainer::Client
+  void Length(LengthCallback callback) override { std::move(callback).Run(-1); }
+
+  void IsRandomAccessContext(IsRandomAccessContextCallback callback) override {
+    std::move(callback).Run(false);
+  }
+
+  // Implements mojo::DataPipeDrainer::Client.
   void OnDataAvailable(const void* data, size_t num_bytes) override {
     DCHECK(!finished_loading_);
     if (!web_bundle_memory_quota_consumer_->AllocateMemory(num_bytes)) {
diff --git a/services/tracing/public/cpp/stack_sampling/stack_sampler_android.cc b/services/tracing/public/cpp/stack_sampling/stack_sampler_android.cc
index a16f0fe..2d4de082 100644
--- a/services/tracing/public/cpp/stack_sampling/stack_sampler_android.cc
+++ b/services/tracing/public/cpp/stack_sampling/stack_sampler_android.cc
@@ -27,8 +27,7 @@
 
 void StackSamplerAndroid::RecordStackFrames(
     base::StackBuffer* stack_buffer,
-    base::ProfileBuilder* profile_builder,
-    base::PlatformThreadId thread_id) {
+    base::ProfileBuilder* profile_builder) {
   if (!unwinder_.is_initialized()) {
     // May block on disk access. This function is executed on the profiler
     // thread, so this will only block profiling execution.
diff --git a/services/tracing/public/cpp/stack_sampling/stack_sampler_android.h b/services/tracing/public/cpp/stack_sampling/stack_sampler_android.h
index f33e00e..02b10262 100644
--- a/services/tracing/public/cpp/stack_sampling/stack_sampler_android.h
+++ b/services/tracing/public/cpp/stack_sampling/stack_sampler_android.h
@@ -31,8 +31,7 @@
   // StackSampler:
   void AddAuxUnwinder(std::unique_ptr<base::Unwinder> unwinder) override;
   void RecordStackFrames(base::StackBuffer* stack_buffer,
-                         base::ProfileBuilder* profile_builder,
-                         base::PlatformThreadId thread_id) override;
+                         base::ProfileBuilder* profile_builder) override;
 
  private:
   base::SamplingProfilerThreadToken thread_token_;
diff --git a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc
index ca843b55..cc58f4f5 100644
--- a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc
+++ b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc
@@ -768,7 +768,7 @@
 #elif ANDROID_CFI_UNWINDING_SUPPORTED
   auto* module_cache = profile_builder->GetModuleCache();
   profiler_ = std::make_unique<base::StackSamplingProfiler>(
-      sampled_thread_token_, params, std::move(profile_builder),
+      params, std::move(profile_builder),
       std::make_unique<StackSamplerAndroid>(sampled_thread_token_,
                                             module_cache));
   profiler_->Start();
diff --git a/testing/buildbot/filters/fuchsia.content_browsertests.filter b/testing/buildbot/filters/fuchsia.content_browsertests.filter
index f3cbd15..35f1ca8 100644
--- a/testing/buildbot/filters/fuchsia.content_browsertests.filter
+++ b/testing/buildbot/filters/fuchsia.content_browsertests.filter
@@ -13,6 +13,7 @@
 -All/WorkerFromAnonymousIframeNikBrowserTest.SharedWorkerRequestIsDoneWithPartitionedNetworkState/2
 -ContentBrowserTest.BrowserCrashCallStack
 -ContentBrowserTest.RendererCrashCallStack
+-CrossPlatformAccessibilityBrowserTest.ControlsIdsForDateTimePopup
 -DirectSocketsTcpBrowserTest.OpenTcp_MDNS
 -DohHttpsProtocolUpgradeBrowserTest.HttpsProtocolUpgrade
 -DohHttpsProtocolUpgradeBrowserTest.NoProtocolUpgrade
@@ -30,13 +31,17 @@
 -OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/2
 -OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/3
 -OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/4
+-PrerenderBrowserTest.AbandonIfRendererProcessCrashes
 -SitePerProcessDelegatedInkBrowserTest.MetadataAndPointGoThroughOOPIF
+-SnapshotBrowserTest.AsyncMultiWindowTest
+-SnapshotBrowserTest.SyncMultiWindowTest
 -StorageServiceSandboxBrowserTest.CompactDatabase
 -UnrestrictedSharedArrayBufferOriginTrialBrowserTest.CrashForBug1201589
 -UnrestrictedSharedArrayBufferOriginTrialBrowserTest.HasSharedArrayBuffer
 -UnrestrictedSharedArrayBufferOriginTrialBrowserTest.HasSharedArrayBufferReuseContext
 -UnrestrictedSharedArrayBufferOriginTrialBrowserTest.SupportForMeta
 -UnrestrictedSharedArrayBufferOriginTrialBrowserTest.TransferSharedArrayBuffer
+-UserMedia/WebRtcConstraintsBrowserTest.GetUserMediaConstraints/4
 -WebContentsViewAuraTest.OverscrollNavigation
 -WebContentsViewAuraTest.OverscrollNavigationWithTouchHandler
 -WebContentsViewAuraTest.RepeatedQuickOverscrollGestures
diff --git a/third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h b/third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h
index abe146f..8d474b06 100644
--- a/third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h
+++ b/third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_SERVICE_WORKER_WEB_SERVICE_WORKER_FETCH_CONTEXT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_SERVICE_WORKER_WEB_SERVICE_WORKER_FETCH_CONTEXT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_worker_fetch_context.h"
 
 #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/third_party/blink/public/platform/web_back_forward_cache_loader_helper.h b/third_party/blink/public/platform/web_back_forward_cache_loader_helper.h
index cd547e4..3bd3ec4 100644
--- a/third_party/blink/public/platform/web_back_forward_cache_loader_helper.h
+++ b/third_party/blink/public/platform/web_back_forward_cache_loader_helper.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_BACK_FORWARD_CACHE_LOADER_HELPER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_BACK_FORWARD_CACHE_LOADER_HELPER_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_private_ptr.h"
 
 #if INSIDE_BLINK
diff --git a/third_party/blink/public/platform/web_content_decryption_module.h b/third_party/blink/public/platform/web_content_decryption_module.h
index 4fbfe76..3e42dcb 100644
--- a/third_party/blink/public/platform/web_content_decryption_module.h
+++ b/third_party/blink/public/platform/web_content_decryption_module.h
@@ -33,6 +33,7 @@
 
 #include <memory>
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_content_decryption_module_result.h"
 #include "third_party/blink/public/platform/web_content_decryption_module_session.h"
 
diff --git a/third_party/blink/public/platform/web_font_description.h b/third_party/blink/public/platform/web_font_description.h
index f06aeab..3035c38 100644
--- a/third_party/blink/public/platform/web_font_description.h
+++ b/third_party/blink/public/platform/web_font_description.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FONT_DESCRIPTION_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FONT_DESCRIPTION_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 
 namespace blink {
diff --git a/third_party/blink/public/platform/web_font_render_style.h b/third_party/blink/public/platform/web_font_render_style.h
index ac37531..0c2fe9d 100644
--- a/third_party/blink/public/platform/web_font_render_style.h
+++ b/third_party/blink/public/platform/web_font_render_style.h
@@ -30,6 +30,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FONT_RENDER_STYLE_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_FONT_RENDER_STYLE_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/skia/include/core/SkFontStyle.h"
 #include "third_party/skia/include/core/SkFontTypes.h"
diff --git a/third_party/blink/public/platform/web_http_body.h b/third_party/blink/public/platform/web_http_body.h
index 51d05c9..292e44a 100644
--- a/third_party/blink/public/platform/web_http_body.h
+++ b/third_party/blink/public/platform/web_http_body.h
@@ -37,6 +37,7 @@
 #include "third_party/blink/public/common/loader/http_body_element_type.h"
 #include "third_party/blink/public/mojom/blob/blob.mojom-shared.h"
 #include "third_party/blink/public/platform/cross_variant_mojo_util.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
diff --git a/third_party/blink/public/platform/web_navigation_body_loader.h b/third_party/blink/public/platform/web_navigation_body_loader.h
index 2595196f..404ec630 100644
--- a/third_party/blink/public/platform/web_navigation_body_loader.h
+++ b/third_party/blink/public/platform/web_navigation_body_loader.h
@@ -12,6 +12,7 @@
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/navigation/navigation_params.mojom-forward.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_loader_freeze_mode.h"
 #include "third_party/blink/public/platform/web_url_error.h"
 
diff --git a/third_party/blink/public/platform/web_time_range.h b/third_party/blink/public/platform/web_time_range.h
index 4a4383b1..ae24397 100644
--- a/third_party/blink/public/platform/web_time_range.h
+++ b/third_party/blink/public/platform/web_time_range.h
@@ -33,6 +33,7 @@
 
 #include <algorithm>
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_vector.h"
 
 namespace blink {
diff --git a/third_party/blink/public/platform/web_url_error.h b/third_party/blink/public/platform/web_url_error.h
index fde6ca6f..c6bb887 100644
--- a/third_party/blink/public/platform/web_url_error.h
+++ b/third_party/blink/public/platform/web_url_error.h
@@ -36,6 +36,7 @@
 #include "services/network/public/mojom/blocked_by_response_reason.mojom-shared.h"
 #include "services/network/public/mojom/trust_tokens.mojom-shared.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_url.h"
 
 namespace blink {
diff --git a/third_party/blink/public/platform/webaudiosourceprovider_impl.h b/third_party/blink/public/platform/webaudiosourceprovider_impl.h
index 5e15d7a..0c744205 100644
--- a/third_party/blink/public/platform/webaudiosourceprovider_impl.h
+++ b/third_party/blink/public/platform/webaudiosourceprovider_impl.h
@@ -16,6 +16,7 @@
 #include "base/synchronization/lock.h"
 #include "media/base/audio_renderer_sink.h"
 #include "third_party/blink/public/platform/web_audio_source_provider.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_vector.h"
 
 namespace media {
diff --git a/third_party/blink/public/web/blink.h b/third_party/blink/public/web/blink.h
index b248458..171fdd5 100644
--- a/third_party/blink/public/web/blink.h
+++ b/third_party/blink/public/web/blink.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_BLINK_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_BLINK_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "v8/include/v8-isolate.h"
 
diff --git a/third_party/blink/public/web/modules/autofill_assistant/node_signals.h b/third_party/blink/public/web/modules/autofill_assistant/node_signals.h
index 30e675d..c3ca8df8 100644
--- a/third_party/blink/public/web/modules/autofill_assistant/node_signals.h
+++ b/third_party/blink/public/web/modules/autofill_assistant/node_signals.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_AUTOFILL_ASSISTANT_NODE_SIGNALS_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_AUTOFILL_ASSISTANT_NODE_SIGNALS_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_document.h"
diff --git a/third_party/blink/public/web/web_array_buffer_converter.h b/third_party/blink/public/web/web_array_buffer_converter.h
index 4c6fb1cd..24bae39 100644
--- a/third_party/blink/public/web/web_array_buffer_converter.h
+++ b/third_party/blink/public/web/web_array_buffer_converter.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ARRAY_BUFFER_CONVERTER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ARRAY_BUFFER_CONVERTER_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_array_buffer.h"
 
 namespace v8 {
diff --git a/third_party/blink/public/web/web_ax_context.h b/third_party/blink/public/web/web_ax_context.h
index cefdd30..ce2e610 100644
--- a/third_party/blink/public/web/web_ax_context.h
+++ b/third_party/blink/public/web/web_ax_context.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_CONTEXT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_CONTEXT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_ax_object.h"
 #include "third_party/blink/public/web/web_document.h"
 
diff --git a/third_party/blink/public/web/web_console_message.h b/third_party/blink/public/web/web_console_message.h
index a8f5aad..dddc25d4 100644
--- a/third_party/blink/public/web/web_console_message.h
+++ b/third_party/blink/public/web/web_console_message.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_CONSOLE_MESSAGE_H_
 
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-shared.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/web/web_node.h"
 
diff --git a/third_party/blink/public/web/web_document.h b/third_party/blink/public/web/web_document.h
index 2b7930b..c884a0a 100644
--- a/third_party/blink/public/web/web_document.h
+++ b/third_party/blink/public/web/web_document.h
@@ -36,6 +36,7 @@
 #include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "services/network/public/mojom/restricted_cookie_manager.mojom-shared.h"
 #include "third_party/blink/public/platform/cross_variant_mojo_util.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_draggable_region.h"
diff --git a/third_party/blink/public/web/web_dom_media_stream_track.h b/third_party/blink/public/web/web_dom_media_stream_track.h
index c08f24a8..a948518e 100644
--- a/third_party/blink/public/web/web_dom_media_stream_track.h
+++ b/third_party/blink/public/web/web_dom_media_stream_track.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_DOM_MEDIA_STREAM_TRACK_H_
 
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_track.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_private_ptr.h"
 
 namespace v8 {
diff --git a/third_party/blink/public/web/web_dom_message_event.h b/third_party/blink/public/web/web_dom_message_event.h
index d8e846a9..2b1c6f91 100644
--- a/third_party/blink/public/web/web_dom_message_event.h
+++ b/third_party/blink/public/web/web_dom_message_event.h
@@ -34,6 +34,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/messaging/message_port_channel.h"
 #include "third_party/blink/public/common/messaging/transferable_message.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_dom_event.h"
diff --git a/third_party/blink/public/web/web_element.h b/third_party/blink/public/web/web_element.h
index 11395cd..f795f64 100644
--- a/third_party/blink/public/web/web_element.h
+++ b/third_party/blink/public/web/web_element.h
@@ -33,6 +33,7 @@
 
 #include <vector>
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_node.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "v8/include/v8-forward.h"
diff --git a/third_party/blink/public/web/web_form_control_element.h b/third_party/blink/public/web/web_form_control_element.h
index fa87a8e..a25f9d9f 100644
--- a/third_party/blink/public/web/web_form_control_element.h
+++ b/third_party/blink/public/web/web_form_control_element.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_CONTROL_ELEMENT_H_
 
 #include "third_party/blink/public/common/metrics/form_element_pii_type.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/web/web_autofill_state.h"
 #include "third_party/blink/public/web/web_element.h"
diff --git a/third_party/blink/public/web/web_form_element.h b/third_party/blink/public/web/web_form_element.h
index 0287d7ee..858c0d7 100644
--- a/third_party/blink/public/web/web_form_element.h
+++ b/third_party/blink/public/web/web_form_element.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_ELEMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_ELEMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_element.h"
 
diff --git a/third_party/blink/public/web/web_hit_test_result.h b/third_party/blink/public/web/web_hit_test_result.h
index 038da7b..7ea140b 100644
--- a/third_party/blink/public/web/web_hit_test_result.h
+++ b/third_party/blink/public/web/web_hit_test_result.h
@@ -26,6 +26,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_HIT_TEST_RESULT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_HIT_TEST_RESULT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_private_ptr.h"
 #include "ui/gfx/geometry/point_f.h"
 
diff --git a/third_party/blink/public/web/web_input_element.h b/third_party/blink/public/web/web_input_element.h
index c6f6a604..6bd9f3d 100644
--- a/third_party/blink/public/web/web_input_element.h
+++ b/third_party/blink/public/web/web_input_element.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_INPUT_ELEMENT_H_
 
 #include "build/build_config.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_form_control_element.h"
 
 namespace blink {
diff --git a/third_party/blink/public/web/web_label_element.h b/third_party/blink/public/web/web_label_element.h
index 5a5404f3..54d0f93 100644
--- a/third_party/blink/public/web/web_label_element.h
+++ b/third_party/blink/public/web/web_label_element.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_LABEL_ELEMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_LABEL_ELEMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_element.h"
 
 namespace blink {
diff --git a/third_party/blink/public/web/web_language_detection_details.h b/third_party/blink/public/web/web_language_detection_details.h
index 11a7d58..ec34b221 100644
--- a/third_party/blink/public/web/web_language_detection_details.h
+++ b/third_party/blink/public/web/web_language_detection_details.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_LANGUAGE_DETECTION_DETAILS_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_LANGUAGE_DETECTION_DETAILS_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index e716d8e..7773aad 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -40,6 +40,7 @@
 #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-shared.h"
 #include "third_party/blink/public/platform/cross_variant_mojo_util.h"
 #include "third_party/blink/public/platform/task_type.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_url_error.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/public/web/web_document.h"
diff --git a/third_party/blink/public/web/web_meta_element.h b/third_party/blink/public/web/web_meta_element.h
index 7cd2d03..acfddd3 100644
--- a/third_party/blink/public/web/web_meta_element.h
+++ b/third_party/blink/public/web/web_meta_element.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_META_ELEMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_META_ELEMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_element.h"
 
 namespace blink {
diff --git a/third_party/blink/public/web/web_option_element.h b/third_party/blink/public/web/web_option_element.h
index 0967448..5ceaaf2 100644
--- a/third_party/blink/public/web/web_option_element.h
+++ b/third_party/blink/public/web/web_option_element.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_OPTION_ELEMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_OPTION_ELEMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_element.h"
 
 namespace blink {
diff --git a/third_party/blink/public/web/web_origin_policy.h b/third_party/blink/public/web/web_origin_policy.h
index e643168..028bd63 100644
--- a/third_party/blink/public/web/web_origin_policy.h
+++ b/third_party/blink/public/web/web_origin_policy.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ORIGIN_POLICY_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ORIGIN_POLICY_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_vector.h"
 
diff --git a/third_party/blink/public/web/web_plugin_document.h b/third_party/blink/public/web/web_plugin_document.h
index 26cec60..47c89f2 100644
--- a/third_party/blink/public/web/web_plugin_document.h
+++ b/third_party/blink/public/web/web_plugin_document.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PLUGIN_DOCUMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_PLUGIN_DOCUMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/web/web_document.h"
 
 namespace blink {
diff --git a/third_party/blink/public/web/web_remote_frame.h b/third_party/blink/public/web/web_remote_frame.h
index 8c5152f..5084278 100644
--- a/third_party/blink/public/web/web_remote_frame.h
+++ b/third_party/blink/public/web/web_remote_frame.h
@@ -10,6 +10,7 @@
 #include "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom-shared.h"
 #include "third_party/blink/public/mojom/frame/user_activation_update_types.mojom-shared.h"
 #include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-shared.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_policy_container.h"
 #include "third_party/blink/public/web/web_frame.h"
 #include "ui/events/types/scroll_types.h"
diff --git a/third_party/blink/public/web/web_searchable_form_data.h b/third_party/blink/public/web/web_searchable_form_data.h
index cfbd55e4..32b3542 100644
--- a/third_party/blink/public/web/web_searchable_form_data.h
+++ b/third_party/blink/public/web/web_searchable_form_data.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SEARCHABLE_FORM_DATA_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SEARCHABLE_FORM_DATA_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/web/web_input_element.h"
diff --git a/third_party/blink/public/web/web_select_element.h b/third_party/blink/public/web/web_select_element.h
index 321542e..e4e1d96d 100644
--- a/third_party/blink/public/web/web_select_element.h
+++ b/third_party/blink/public/web/web_select_element.h
@@ -31,6 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SELECT_ELEMENT_H_
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SELECT_ELEMENT_H_
 
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/public/web/web_form_control_element.h"
 #include "third_party/blink/public/web/web_option_element.h"
diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/web/web_view.h
index 14d4a002..560b72d 100644
--- a/third_party/blink/public/web/web_view.h
+++ b/third_party/blink/public/web/web_view.h
@@ -43,6 +43,7 @@
 #include "third_party/blink/public/mojom/renderer_preference_watcher.mojom-shared.h"
 #include "third_party/blink/public/platform/cross_variant_mojo_util.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/web/web_settings.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc b/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
index efe39b7..de3dc3d 100644
--- a/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
+++ b/third_party/blink/renderer/bindings/core/v8/js_event_handler.cc
@@ -8,6 +8,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_string_resource.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/before_unload_event.h"
 #include "third_party/blink/renderer/core/events/error_event.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/js_event_handler.h b/third_party/blink/renderer/bindings/core/v8/js_event_handler.h
index fb46e24..6aace36 100644
--- a/third_party/blink/renderer/bindings/core/v8/js_event_handler.h
+++ b/third_party/blink/renderer/bindings/core/v8/js_event_handler.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/js_based_event_listener.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_event_handler_non_null.h"
+#include "third_party/blink/renderer/core/core_export.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/bindings/core/v8/js_event_listener.h b/third_party/blink/renderer/bindings/core/v8/js_event_listener.h
index 7c8bc2e..a9659ab 100644
--- a/third_party/blink/renderer/bindings/core/v8/js_event_listener.h
+++ b/third_party/blink/renderer/bindings/core/v8/js_event_listener.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/js_based_event_listener.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h"
+#include "third_party/blink/renderer/core/core_export.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
index 0a3fd4e..7bd105f 100644
--- a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
+++ b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
@@ -10,6 +10,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_profiler_marker.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_html_constructor.h b/third_party/blink/renderer/bindings/core/v8/v8_html_constructor.h
index 784f4aab..cc05903 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_html_constructor.h
+++ b/third_party/blink/renderer/bindings/core/v8/v8_html_constructor.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_HTML_CONSTRUCTOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_HTML_CONSTRUCTOR_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/html_element_type_helpers.h"
 #include "third_party/blink/renderer/platform/bindings/wrapper_type_info.h"
 #include "v8/include/v8.h"
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc
index 393d01a..9a81ef9 100644
--- a/third_party/blink/renderer/core/animation/animation.cc
+++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -58,6 +58,7 @@
 #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/animation_playback_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/animation/animation_utils.h b/third_party/blink/renderer/core/animation/animation_utils.h
index 8ba8688..ccf9c133 100644
--- a/third_party/blink/renderer/core/animation/animation_utils.h
+++ b/third_party/blink/renderer/core/animation/animation_utils.h
@@ -8,6 +8,7 @@
 #include "third_party/blink/renderer/core/animation/interpolation.h"
 #include "third_party/blink/renderer/core/animation/keyframe.h"
 #include "third_party/blink/renderer/core/animation/property_handle.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/animation/basic_shape_interpolation_functions.h b/third_party/blink/renderer/core/animation/basic_shape_interpolation_functions.h
index 9e2c936..f0c034c 100644
--- a/third_party/blink/renderer/core/animation/basic_shape_interpolation_functions.h
+++ b/third_party/blink/renderer/core/animation/basic_shape_interpolation_functions.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolation_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/animation/css/css_animation_update.h b/third_party/blink/renderer/core/animation/css/css_animation_update.h
index 024f65b5..6b58240 100644
--- a/third_party/blink/renderer/core/animation/css/css_animation_update.h
+++ b/third_party/blink/renderer/core/animation/css/css_animation_update.h
@@ -10,6 +10,7 @@
 #include "third_party/blink/renderer/core/animation/inert_effect.h"
 #include "third_party/blink/renderer/core/animation/interpolation.h"
 #include "third_party/blink/renderer/core/animation/keyframe_effect_model.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_keyframes_rule.h"
 #include "third_party/blink/renderer/core/css/css_property_equality.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.h b/third_party/blink/renderer/core/animation/css/css_animations.h
index e4fa472..b2825dc0 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.h
+++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -36,6 +36,7 @@
 #include "third_party/blink/renderer/core/animation/css/css_transition_data.h"
 #include "third_party/blink/renderer/core/animation/inert_effect.h"
 #include "third_party/blink/renderer/core/animation/interpolation.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_keyframes_rule.h"
 #include "third_party/blink/renderer/core/css/css_property_value_set.h"
 #include "third_party/blink/renderer/core/css/properties/css_bitset.h"
diff --git a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h
index 82380df..11bef85 100644
--- a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h
+++ b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h
@@ -7,6 +7,7 @@
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/animation/scroll_timeline.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/id_target_observer.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/animation/css/css_transition_data.h b/third_party/blink/renderer/core/animation/css/css_transition_data.h
index b97de8e..e211b44 100644
--- a/third_party/blink/renderer/core/animation/css/css_transition_data.h
+++ b/third_party/blink/renderer/core/animation/css/css_transition_data.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "third_party/blink/renderer/core/animation/css/css_timing_data.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/core/animation/css_color_interpolation_type.h b/third_party/blink/renderer/core/animation/css_color_interpolation_type.h
index 6455bed9..79dc6f4f 100644
--- a/third_party/blink/renderer/core/animation/css_color_interpolation_type.h
+++ b/third_party/blink/renderer/core/animation/css_color_interpolation_type.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "third_party/blink/renderer/core/animation/css_interpolation_type.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
 #include "third_party/blink/renderer/platform/graphics/color.h"
 
diff --git a/third_party/blink/renderer/core/animation/document_animations.h b/third_party/blink/renderer/core/animation/document_animations.h
index efe9754..42c5071 100644
--- a/third_party/blink/renderer/core/animation/document_animations.h
+++ b/third_party/blink/renderer/core/animation/document_animations.h
@@ -34,6 +34,7 @@
 #include "base/auto_reset.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/animation/animation.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/document_lifecycle.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 
diff --git a/third_party/blink/renderer/core/animation/document_timeline.h b/third_party/blink/renderer/core/animation/document_timeline.h
index b7203408..251758f 100644
--- a/third_party/blink/renderer/core/animation/document_timeline.h
+++ b/third_party/blink/renderer/core/animation/document_timeline.h
@@ -34,6 +34,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/animation/animation_timeline.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/platform/timer.h"
 
diff --git a/third_party/blink/renderer/core/animation/element_animations.h b/third_party/blink/renderer/core/animation/element_animations.h
index a40a140..6303794 100644
--- a/third_party/blink/renderer/core/animation/element_animations.h
+++ b/third_party/blink/renderer/core/animation/element_animations.h
@@ -36,6 +36,7 @@
 #include "third_party/blink/renderer/core/animation/css/css_animations.h"
 #include "third_party/blink/renderer/core/animation/effect_stack.h"
 #include "third_party/blink/renderer/core/animation/worklet_animation_base.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/properties/css_bitset.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h"
diff --git a/third_party/blink/renderer/core/animation/interpolable_aspect_ratio.h b/third_party/blink/renderer/core/animation/interpolable_aspect_ratio.h
index 3f5d0077..cd6e111 100644
--- a/third_party/blink/renderer/core/animation/interpolable_aspect_ratio.h
+++ b/third_party/blink/renderer/core/animation/interpolable_aspect_ratio.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolable_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/style/style_aspect_ratio.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/animation/interpolable_filter.h b/third_party/blink/renderer/core/animation/interpolable_filter.h
index 07b20a5..45d9f5b 100644
--- a/third_party/blink/renderer/core/animation/interpolable_filter.h
+++ b/third_party/blink/renderer/core/animation/interpolable_filter.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolable_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/style/filter_operation.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/animation/interpolable_length.cc b/third_party/blink/renderer/core/animation/interpolable_length.cc
index c00a9a5..3209ba1 100644
--- a/third_party/blink/renderer/core/animation/interpolable_length.cc
+++ b/third_party/blink/renderer/core/animation/interpolable_length.cc
@@ -69,9 +69,18 @@
   if (primitive_value->AccumulateLengthArray(length_array))
     return std::make_unique<InterpolableLength>(std::move(length_array));
 
-  DCHECK(primitive_value->IsMathFunctionValue());
-  return std::make_unique<InterpolableLength>(
-      *To<CSSMathFunctionValue>(primitive_value)->ExpressionNode());
+  const CSSMathExpressionNode* expression_node = nullptr;
+
+  if (const auto* numeric_literal =
+          DynamicTo<CSSNumericLiteralValue>(primitive_value)) {
+    expression_node = CSSMathExpressionNumericLiteral::Create(numeric_literal);
+  } else {
+    DCHECK(primitive_value->IsMathFunctionValue());
+    expression_node =
+        To<CSSMathFunctionValue>(primitive_value)->ExpressionNode();
+  }
+
+  return std::make_unique<InterpolableLength>(*expression_node);
 }
 
 // static
diff --git a/third_party/blink/renderer/core/animation/interpolable_length.h b/third_party/blink/renderer/core/animation/interpolable_length.h
index 6fe83d6..371cc42 100644
--- a/third_party/blink/renderer/core/animation/interpolable_length.h
+++ b/third_party/blink/renderer/core/animation/interpolable_length.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolation_value.h"
 #include "third_party/blink/renderer/core/animation/pairwise_interpolation_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/platform/geometry/length.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
diff --git a/third_party/blink/renderer/core/animation/interpolable_transform_list.h b/third_party/blink/renderer/core/animation/interpolable_transform_list.h
index 65f9ca5..e81c988 100644
--- a/third_party/blink/renderer/core/animation/interpolable_transform_list.h
+++ b/third_party/blink/renderer/core/animation/interpolable_transform_list.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "third_party/blink/renderer/core/animation/interpolable_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/transforms/transform_operations.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/animation/interpolation_value.h b/third_party/blink/renderer/core/animation/interpolation_value.h
index 891b293..0df9afbd 100644
--- a/third_party/blink/renderer/core/animation/interpolation_value.h
+++ b/third_party/blink/renderer/core/animation/interpolation_value.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolable_value.h"
 #include "third_party/blink/renderer/core/animation/non_interpolable_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/animation/invalidatable_interpolation.h b/third_party/blink/renderer/core/animation/invalidatable_interpolation.h
index f6221423..5acbcf46 100644
--- a/third_party/blink/renderer/core/animation/invalidatable_interpolation.h
+++ b/third_party/blink/renderer/core/animation/invalidatable_interpolation.h
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/core/animation/interpolation_types_map.h"
 #include "third_party/blink/renderer/core/animation/primitive_interpolation.h"
 #include "third_party/blink/renderer/core/animation/typed_interpolation_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/animation/length_units_checker.h b/third_party/blink/renderer/core/animation/length_units_checker.h
index f687891..31538b5c 100644
--- a/third_party/blink/renderer/core/animation/length_units_checker.h
+++ b/third_party/blink/renderer/core/animation/length_units_checker.h
@@ -20,51 +20,52 @@
   static std::unique_ptr<LengthUnitsChecker> MaybeCreate(
       const CSSPrimitiveValue::LengthTypeFlags& length_types,
       const StyleResolverState& state) {
-    bool create = false;
-    wtf_size_t last_index = 0;
-    CSSLengthArray length_array;
+    Vector<UnitLength> unit_lengths;
     for (wtf_size_t i = 0; i < length_types.size(); ++i) {
       if (i == CSSPrimitiveValue::kUnitTypePercentage || !length_types[i])
         continue;
-      length_array.values[i] = LengthUnit(i, state.CssToLengthConversionData());
-      length_array.type_flags.set(i);
-      create = true;
-      last_index = i;
+      unit_lengths.push_back(
+          UnitLength(static_cast<CSSPrimitiveValue::LengthUnitType>(i),
+                     state.CssToLengthConversionData()));
     }
-    if (!create)
+    if (unit_lengths.IsEmpty())
       return nullptr;
-    return base::WrapUnique(
-        new LengthUnitsChecker(std::move(length_array), last_index));
+    return base::WrapUnique(new LengthUnitsChecker(std::move(unit_lengths)));
   }
 
   bool IsValid(const StyleResolverState& state,
                const InterpolationValue& underlying) const final {
-    for (wtf_size_t i = 0; i <= last_index_; i++) {
-      if (i == CSSPrimitiveValue::kUnitTypePercentage ||
-          !length_array_.type_flags[i])
-        continue;
-      if (length_array_.values[i] !=
-          LengthUnit(i, state.CssToLengthConversionData()))
+    for (const UnitLength& unit_length : unit_lengths_) {
+      if (unit_length.length_pixels !=
+          UnitLengthPixels(unit_length.unit,
+                           state.CssToLengthConversionData())) {
         return false;
+      }
     }
     return true;
   }
 
-  static double LengthUnit(wtf_size_t length_unit_type,
-                           const CSSToLengthConversionData& conversion_data) {
+ private:
+  static double UnitLengthPixels(
+      CSSPrimitiveValue::LengthUnitType length_unit_type,
+      const CSSToLengthConversionData& conversion_data) {
     return conversion_data.ZoomedComputedPixels(
-        1,
-        CSSPrimitiveValue::LengthUnitTypeToUnitType(
-            static_cast<CSSPrimitiveValue::LengthUnitType>(length_unit_type)));
+        1, CSSPrimitiveValue::LengthUnitTypeToUnitType(length_unit_type));
   }
 
- private:
-  LengthUnitsChecker(CSSPrimitiveValue::CSSLengthArray&& length_array,
-                     wtf_size_t last_index)
-      : length_array_(std::move(length_array)), last_index_(last_index) {}
+  struct UnitLength {
+    explicit UnitLength(CSSPrimitiveValue::LengthUnitType unit,
+                        const CSSToLengthConversionData& conversion_data)
+        : unit(unit), length_pixels(UnitLengthPixels(unit, conversion_data)) {}
 
-  const CSSLengthArray length_array_;
-  const wtf_size_t last_index_;
+    const CSSPrimitiveValue::LengthUnitType unit;
+    const double length_pixels;
+  };
+
+  explicit LengthUnitsChecker(Vector<UnitLength> unit_lengths)
+      : unit_lengths_(std::move(unit_lengths)) {}
+
+  Vector<UnitLength> unit_lengths_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/animation/list_interpolation_functions.h b/third_party/blink/renderer/core/animation/list_interpolation_functions.h
index 80ead64f..1be74482 100644
--- a/third_party/blink/renderer/core/animation/list_interpolation_functions.h
+++ b/third_party/blink/renderer/core/animation/list_interpolation_functions.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include "third_party/blink/renderer/core/animation/interpolation_value.h"
 #include "third_party/blink/renderer/core/animation/pairwise_interpolation_value.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/core/animation/path_interpolation_functions.h b/third_party/blink/renderer/core/animation/path_interpolation_functions.h
index 68cfa17..7a20fa08 100644
--- a/third_party/blink/renderer/core/animation/path_interpolation_functions.h
+++ b/third_party/blink/renderer/core/animation/path_interpolation_functions.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_PATH_INTERPOLATION_FUNCTIONS_H_
 
 #include "third_party/blink/renderer/core/animation/interpolation_type.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/svg/svg_path_byte_stream.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.h b/third_party/blink/renderer/core/animation/scroll_timeline.h
index ca4a1dc..85f1840 100644
--- a/third_party/blink/renderer/core/animation/scroll_timeline.h
+++ b/third_party/blink/renderer/core/animation/scroll_timeline.h
@@ -10,6 +10,7 @@
 #include "third_party/blink/renderer/core/animation/animation_timeline.h"
 #include "third_party/blink/renderer/core/animation/scroll_timeline_offset.h"
 #include "third_party/blink/renderer/core/animation/timing.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_offset.h b/third_party/blink/renderer/core/animation/scroll_timeline_offset.h
index 55ba05d..2021780 100644
--- a/third_party/blink/renderer/core/animation/scroll_timeline_offset.h
+++ b/third_party/blink/renderer/core/animation/scroll_timeline_offset.h
@@ -8,6 +8,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_scroll_timeline_element_based_offset.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_typedefs.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_style_sheet.h"
 #include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h"
 #include "third_party/blink/renderer/core/scroll/scroll_types.h"
diff --git a/third_party/blink/renderer/core/animation/string_keyframe.h b/third_party/blink/renderer/core/animation/string_keyframe.h
index daabfe1..7a084f5755 100644
--- a/third_party/blink/renderer/core/animation/string_keyframe.h
+++ b/third_party/blink/renderer/core/animation/string_keyframe.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_STRING_KEYFRAME_H_
 
 #include "third_party/blink/renderer/core/animation/keyframe.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_value_set.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
diff --git a/third_party/blink/renderer/core/animation/timing.h b/third_party/blink/renderer/core/animation/timing.h
index 0bbe113..fd532f1 100644
--- a/third_party/blink/renderer/core/animation/timing.h
+++ b/third_party/blink/renderer/core/animation/timing.h
@@ -35,6 +35,7 @@
 #include "base/memory/values_equivalent.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/animation/animation_time_delta.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/platform/animation/compositor_keyframe_model.h"
 #include "third_party/blink/renderer/platform/animation/timing_function.h"
diff --git a/third_party/blink/renderer/core/aom/accessible_node.cc b/third_party/blink/renderer/core/aom/accessible_node.cc
index 54cf77a..b518b9c 100644
--- a/third_party/blink/renderer/core/aom/accessible_node.cc
+++ b/third_party/blink/renderer/core/aom/accessible_node.cc
@@ -8,6 +8,7 @@
 #include "third_party/blink/renderer/core/aom/accessible_node_list.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/dom/qualified_name.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/html/custom/element_internals.h"
diff --git a/third_party/blink/renderer/core/app_history/app_history.cc b/third_party/blink/renderer/core/app_history/app_history.cc
index b5b6a34..b216f894 100644
--- a/third_party/blink/renderer/core/app_history/app_history.cc
+++ b/third_party/blink/renderer/core/app_history/app_history.cc
@@ -28,6 +28,7 @@
 #include "third_party/blink/renderer/core/app_history/app_history_transition.h"
 #include "third_party/blink/renderer/core/dom/abort_signal.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/error_event.h"
 #include "third_party/blink/renderer/core/frame/history_util.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/app_history/app_history_entry.cc b/third_party/blink/renderer/core/app_history/app_history_entry.cc
index 87b26a0..2d8a799 100644
--- a/third_party/blink/renderer/core/app_history/app_history_entry.cc
+++ b/third_party/blink/renderer/core/app_history/app_history_entry.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/app_history/app_history_entry.h"
 
 #include "third_party/blink/renderer/core/app_history/app_history.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/loader/document_loader.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
diff --git a/third_party/blink/renderer/core/css/basic_shape_functions.h b/third_party/blink/renderer/core/css/basic_shape_functions.h
index 01b0672e..2cda77cf9 100644
--- a/third_party/blink/renderer/core/css/basic_shape_functions.h
+++ b/third_party/blink/renderer/core/css/basic_shape_functions.h
@@ -31,6 +31,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_BASIC_SHAPE_FUNCTIONS_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/style/basic_shapes.h"
 
 namespace gfx {
diff --git a/third_party/blink/renderer/core/css/cascade_layer_map.h b/third_party/blink/renderer/core/css/cascade_layer_map.h
index e7837a3..b5744792 100644
--- a/third_party/blink/renderer/core/css/cascade_layer_map.h
+++ b/third_party/blink/renderer/core/css/cascade_layer_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CASCADE_LAYER_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CASCADE_LAYER_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/active_style_sheets.h"
 #include "third_party/blink/renderer/core/css/cascade_layer.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
diff --git a/third_party/blink/renderer/core/css/computed_style_css_value_mapping.h b/third_party/blink/renderer/core/css/computed_style_css_value_mapping.h
index c1bd5ae..82aaee9 100644
--- a/third_party/blink/renderer/core/css/computed_style_css_value_mapping.h
+++ b/third_party/blink/renderer/core/css/computed_style_css_value_mapping.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_COMPUTED_STYLE_CSS_VALUE_MAPPING_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_COMPUTED_STYLE_CSS_VALUE_MAPPING_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
diff --git a/third_party/blink/renderer/core/css/css_color.h b/third_party/blink/renderer/core/css/css_color.h
index 75544a27..ec0a383 100644
--- a/third_party/blink/renderer/core/css/css_color.h
+++ b/third_party/blink/renderer/core/css/css_color.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_COLOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_COLOR_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/graphics/color.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/css_custom_ident_value.h b/third_party/blink/renderer/core/css/css_custom_ident_value.h
index 51c0cebba..9178cb8 100644
--- a/third_party/blink/renderer/core/css/css_custom_ident_value.h
+++ b/third_party/blink/renderer/core/css/css_custom_ident_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CUSTOM_IDENT_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CUSTOM_IDENT_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/css_custom_property_declaration.h b/third_party/blink/renderer/core/css/css_custom_property_declaration.h
index f63291e..da94f5ec 100644
--- a/third_party/blink/renderer/core/css/css_custom_property_declaration.h
+++ b/third_party/blink/renderer/core/css/css_custom_property_declaration.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_CUSTOM_PROPERTY_DECLARATION_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/core/css/css_variable_data.h"
 #include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h"
diff --git a/third_party/blink/renderer/core/css/css_element_offset_value.h b/third_party/blink/renderer/core/css/css_element_offset_value.h
index 1926c32..f8720ca 100644
--- a/third_party/blink/renderer/core/css/css_element_offset_value.h
+++ b/third_party/blink/renderer/core/css/css_element_offset_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ELEMENT_OFFSET_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ELEMENT_OFFSET_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.h b/third_party/blink/renderer/core/css/css_font_face_src_value.h
index 861eef74c..b2a8342 100644
--- a/third_party/blink/renderer/core/css/css_font_face_src_value.h
+++ b/third_party/blink/renderer/core/css/css_font_face_src_value.h
@@ -29,6 +29,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_origin_clean.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/core/loader/resource/font_resource.h"
diff --git a/third_party/blink/renderer/core/css/css_font_family_value.h b/third_party/blink/renderer/core/css/css_font_family_value.h
index 6c0eb4e5..2c490578 100644
--- a/third_party/blink/renderer/core/css/css_font_family_value.h
+++ b/third_party/blink/renderer/core/css/css_font_family_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_FONT_FAMILY_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_FONT_FAMILY_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.h b/third_party/blink/renderer/core/css/css_gradient_value.h
index 75d31116..ca08672 100644
--- a/third_party/blink/renderer/core/css/css_gradient_value.h
+++ b/third_party/blink/renderer/core/css/css_gradient_value.h
@@ -27,6 +27,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_GRADIENT_VALUE_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_identifier_value.h"
 #include "third_party/blink/renderer/core/css/css_image_generator_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
diff --git a/third_party/blink/renderer/core/css/css_grouping_rule.h b/third_party/blink/renderer/core/css/css_grouping_rule.h
index 4d201b2..a21db09 100644
--- a/third_party/blink/renderer/core/css/css_grouping_rule.h
+++ b/third_party/blink/renderer/core/css/css_grouping_rule.h
@@ -23,6 +23,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_GROUPING_RULE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_GROUPING_RULE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_rule.h"
 #include "third_party/blink/renderer/core/css/style_rule.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/core/css/css_id_selector_value.h b/third_party/blink/renderer/core/css/css_id_selector_value.h
index cb9db1ab..9ca65ac 100644
--- a/third_party/blink/renderer/core/css/css_id_selector_value.h
+++ b/third_party/blink/renderer/core/css/css_id_selector_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ID_SELECTOR_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ID_SELECTOR_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/core/css/css_identifier_value.h b/third_party/blink/renderer/core/css/css_identifier_value.h
index 585a5ec..0b1fa81 100644
--- a/third_party/blink/renderer/core/css/css_identifier_value.h
+++ b/third_party/blink/renderer/core/css/css_identifier_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_IDENTIFIER_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_IDENTIFIER_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/core/css/css_value_id_mappings.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
diff --git a/third_party/blink/renderer/core/css/css_inherited_value.h b/third_party/blink/renderer/core/css/css_inherited_value.h
index b249c963..a5d10004 100644
--- a/third_party/blink/renderer/core/css/css_inherited_value.h
+++ b/third_party/blink/renderer/core/css/css_inherited_value.h
@@ -22,6 +22,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_INHERITED_VALUE_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/css/css_light_dark_value_pair.h b/third_party/blink/renderer/core/css/css_light_dark_value_pair.h
index ecac48a..ea45aca 100644
--- a/third_party/blink/renderer/core/css/css_light_dark_value_pair.h
+++ b/third_party/blink/renderer/core/css/css_light_dark_value_pair.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_LIGHT_DARK_VALUE_PAIR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_LIGHT_DARK_VALUE_PAIR_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value_pair.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
index 49990b9..3063b5f 100644
--- a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
+++ b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
@@ -30,6 +30,7 @@
 
 #include "third_party/blink/renderer/core/css/css_math_expression_node.h"
 
+#include <algorithm>
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
@@ -39,6 +40,7 @@
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/geometry/calculation_expression_node.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
 
@@ -69,24 +71,20 @@
   EXPECT_EQ(expected_percent, pixels_and_percent->percent);
 }
 
-CSSLengthArray& SetLengthArray(CSSLengthArray& length_array, String text) {
-  for (double& x : length_array.values)
-    x = 0;
+bool AccumulateLengthArray(String text, CSSLengthArray& length_array) {
   auto* property_set =
       MakeGarbageCollected<MutableCSSPropertyValueSet>(kHTMLQuirksMode);
   property_set->SetProperty(CSSPropertyID::kLeft, text, /* important */ false,
                             SecureContextMode::kInsecureContext);
-  To<CSSPrimitiveValue>(property_set->GetPropertyCSSValue(CSSPropertyID::kLeft))
+  return To<CSSPrimitiveValue>(
+             property_set->GetPropertyCSSValue(CSSPropertyID::kLeft))
       ->AccumulateLengthArray(length_array);
-  return length_array;
 }
 
-bool LengthArraysEqual(CSSLengthArray& a, CSSLengthArray& b) {
-  for (wtf_size_t i = 0; i < CSSPrimitiveValue::kLengthUnitTypeCount; ++i) {
-    if (a.values.at(i) != b.values.at(i))
-      return false;
-  }
-  return true;
+CSSLengthArray& SetLengthArray(String text, CSSLengthArray& length_array) {
+  std::fill(length_array.values.begin(), length_array.values.end(), 0);
+  AccumulateLengthArray(text, length_array);
+  return length_array;
 }
 
 TEST(CSSCalculationValue, AccumulatePixelsAndPercent) {
@@ -176,32 +174,85 @@
 
 TEST(CSSCalculationValue, AddToLengthUnitValues) {
   CSSLengthArray expectation, actual;
-  EXPECT_TRUE(LengthArraysEqual(expectation, SetLengthArray(actual, "0")));
+  EXPECT_EQ(expectation.values, SetLengthArray("0", actual).values);
 
   expectation.values.at(CSSPrimitiveValue::kUnitTypePixels) = 10;
-  EXPECT_TRUE(LengthArraysEqual(expectation, SetLengthArray(actual, "10px")));
+  EXPECT_EQ(expectation.values, SetLengthArray("10px", actual).values);
 
   expectation.values.at(CSSPrimitiveValue::kUnitTypePixels) = 0;
   expectation.values.at(CSSPrimitiveValue::kUnitTypePercentage) = 20;
-  EXPECT_TRUE(LengthArraysEqual(expectation, SetLengthArray(actual, "20%")));
+  EXPECT_EQ(expectation.values, SetLengthArray("20%", actual).values);
 
   expectation.values.at(CSSPrimitiveValue::kUnitTypePixels) = 30;
   expectation.values.at(CSSPrimitiveValue::kUnitTypePercentage) = -40;
-  EXPECT_TRUE(LengthArraysEqual(expectation,
-                                SetLengthArray(actual, "calc(30px - 40%)")));
+  EXPECT_EQ(expectation.values,
+            SetLengthArray("calc(30px - 40%)", actual).values);
 
   expectation.values.at(CSSPrimitiveValue::kUnitTypePixels) = 90;
   expectation.values.at(CSSPrimitiveValue::kUnitTypePercentage) = 10;
-  EXPECT_TRUE(LengthArraysEqual(
-      expectation, SetLengthArray(actual, "calc(1in + 10% - 6px)")));
+  EXPECT_EQ(expectation.values,
+            SetLengthArray("calc(1in + 10% - 6px)", actual).values);
 
   expectation.values.at(CSSPrimitiveValue::kUnitTypePixels) = 15;
   expectation.values.at(CSSPrimitiveValue::kUnitTypeFontSize) = 20;
   expectation.values.at(CSSPrimitiveValue::kUnitTypePercentage) = -40;
-  EXPECT_TRUE(LengthArraysEqual(
-      expectation,
-      SetLengthArray(
-          actual, "calc((1 * 2) * (5px + 20em / 2) - 80% / (3 - 1) + 5px)")));
+  EXPECT_EQ(
+      expectation.values,
+      SetLengthArray("calc((1 * 2) * (5px + 20em / 2) - 80% / (3 - 1) + 5px)",
+                     actual)
+          .values);
+}
+
+TEST(CSSCalculationValue, CSSLengthArrayUnits) {
+  ScopedCSSViewportUnits4ForTest scoped_viewport_units(true);
+  ScopedCSSContainerRelativeUnitsForTest scoped_container_units(true);
+
+  CSSLengthArray unused;
+
+  // Supported units:
+  EXPECT_TRUE(AccumulateLengthArray("1px", unused));
+  EXPECT_TRUE(AccumulateLengthArray("1%", unused));
+  EXPECT_TRUE(AccumulateLengthArray("1em", unused));
+  EXPECT_TRUE(AccumulateLengthArray("1ex", unused));
+  EXPECT_TRUE(AccumulateLengthArray("1rem", unused));
+  EXPECT_TRUE(AccumulateLengthArray("1ch", unused));
+
+  // Unsupported units:
+  EXPECT_FALSE(AccumulateLengthArray("1vw", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1vh", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1vi", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1vb", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1vmin", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1vmax", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svw", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svh", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svi", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svb", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svmin", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1svmax", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvw", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvh", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvi", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvb", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvmin", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1lvmax", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvw", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvh", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvi", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvb", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvmin", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1dvmax", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qw", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qh", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qi", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qb", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qmin", unused));
+  EXPECT_FALSE(AccumulateLengthArray("1qmax", unused));
+
+  EXPECT_TRUE(AccumulateLengthArray("calc(1em + calc(1ex + 1px))", unused));
+  EXPECT_FALSE(AccumulateLengthArray("calc(1dvh + calc(1ex + 1px))", unused));
+  EXPECT_FALSE(AccumulateLengthArray("calc(1em + calc(1dvh + 1px))", unused));
+  EXPECT_FALSE(AccumulateLengthArray("calc(1em + calc(1ex + 1dvh))", unused));
 }
 
 TEST(CSSMathExpressionNode, TestParseDeeplyNestedExpression) {
diff --git a/third_party/blink/renderer/core/css/css_math_function_value.h b/third_party/blink/renderer/core/css/css_math_function_value.h
index 134ec7e..7752232f 100644
--- a/third_party/blink/renderer/core/css/css_math_function_value.h
+++ b/third_party/blink/renderer/core/css/css_math_function_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MATH_FUNCTION_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MATH_FUNCTION_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_math_expression_node.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 
diff --git a/third_party/blink/renderer/core/css/css_media_rule.h b/third_party/blink/renderer/core/css/css_media_rule.h
index e003ebba..8446544a 100644
--- a/third_party/blink/renderer/core/css/css_media_rule.h
+++ b/third_party/blink/renderer/core/css/css_media_rule.h
@@ -23,6 +23,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MEDIA_RULE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_MEDIA_RULE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_condition_rule.h"
 #include "third_party/blink/renderer/core/css/media_list.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/css_numeric_literal_value.cc b/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
index 0d64dba..1f2452e1 100644
--- a/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
+++ b/third_party/blink/renderer/core/css/css_numeric_literal_value.cc
@@ -128,6 +128,8 @@
   LengthUnitType length_type;
   bool conversion_success = UnitTypeToLengthUnitType(GetType(), length_type);
   DCHECK(conversion_success);
+  if (length_type >= CSSLengthArray::kSize)
+    return false;
   length_array.values[length_type] +=
       num_ * ConversionToCanonicalUnitsScaleFactor(GetType()) * multiplier;
   length_array.type_flags.set(length_type);
diff --git a/third_party/blink/renderer/core/css/css_numeric_literal_value.h b/third_party/blink/renderer/core/css/css_numeric_literal_value.h
index d07cbea..a7f2b00 100644
--- a/third_party/blink/renderer/core/css/css_numeric_literal_value.h
+++ b/third_party/blink/renderer/core/css/css_numeric_literal_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_NUMERIC_LITERAL_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_NUMERIC_LITERAL_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/css_page_rule.h b/third_party/blink/renderer/core/css/css_page_rule.h
index ad158ab8..f85298f9 100644
--- a/third_party/blink/renderer/core/css/css_page_rule.h
+++ b/third_party/blink/renderer/core/css/css_page_rule.h
@@ -22,6 +22,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PAGE_RULE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PAGE_RULE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_rule.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
diff --git a/third_party/blink/renderer/core/css/css_paint_value.h b/third_party/blink/renderer/core/css/css_paint_value.h
index 8dc3e9c6..166e545b 100644
--- a/third_party/blink/renderer/core/css/css_paint_value.h
+++ b/third_party/blink/renderer/core/css/css_paint_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PAINT_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PAINT_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_custom_ident_value.h"
 #include "third_party/blink/renderer/core/css/css_image_generator_value.h"
 #include "third_party/blink/renderer/core/css/css_paint_image_generator.h"
diff --git a/third_party/blink/renderer/core/css/css_primitive_value.cc b/third_party/blink/renderer/core/css/css_primitive_value.cc
index 6ff4a35..7a6c8db 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value.cc
+++ b/third_party/blink/renderer/core/css/css_primitive_value.cc
@@ -333,8 +333,7 @@
 
 bool CSSPrimitiveValue::AccumulateLengthArray(CSSLengthArray& length_array,
                                               double multiplier) const {
-  DCHECK_EQ(length_array.values.size(),
-            static_cast<unsigned>(kLengthUnitTypeCount));
+  DCHECK_EQ(length_array.values.size(), CSSLengthArray::kSize);
   if (IsCalculated()) {
     return To<CSSMathFunctionValue>(this)->AccumulateLengthArray(length_array,
                                                                  multiplier);
diff --git a/third_party/blink/renderer/core/css/css_primitive_value.h b/third_party/blink/renderer/core/css/css_primitive_value.h
index 73da6e3..b37012aa 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value.h
+++ b/third_party/blink/renderer/core/css/css_primitive_value.h
@@ -22,6 +22,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PRIMITIVE_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PRIMITIVE_VALUE_H_
 
+#include <array>
 #include <bitset>
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
@@ -155,6 +156,8 @@
     kUnitTypeFontXSize,
     kUnitTypeRootFontSize,
     kUnitTypeZeroCharacterWidth,
+    // Units above this line are supported by CSSLengthArray.
+    // See CSSLengthArray::kSize.
     kUnitTypeViewportWidth,
     kUnitTypeViewportHeight,
     kUnitTypeViewportInlineSize,
@@ -191,20 +194,38 @@
     kLengthUnitTypeCount,
   };
 
-  using LengthTypeFlags = std::bitset<kLengthUnitTypeCount>;
+  // For performance reasons, InterpolableLength represents "sufficiently
+  // simple" <length> values as the terms in a sum, e.g.(10px + 1em + ...),
+  // stored in this class.
+  //
+  // For cases which can't be covered by CSSLengthArray [1], we instead
+  // interpolate using CSSMathExpressionNodes.
+  //
+  // To avoid an excessively large array of size kLengthUnitTypeCount, only a
+  // small subset of the units are supported in this optimization.
+  //
+  // [1] See AccumulateLengthArray.
   struct CSSLengthArray {
-    CSSLengthArray() : values(kLengthUnitTypeCount) {
-    }
+    static const wtf_size_t kSize = kUnitTypeZeroCharacterWidth + 1u;
+    static_assert(kUnitTypePixels < kSize, "px unit supported");
+    static_assert(kUnitTypePercentage < kSize, "percentage supported");
+    static_assert(kUnitTypeFontSize < kSize, "em unit supported");
+    static_assert(kUnitTypeFontXSize < kSize, "ex unit supported");
+    static_assert(kUnitTypeRootFontSize < kSize, "rem unit supported");
+    static_assert(kUnitTypeZeroCharacterWidth < kSize, "ch unit supported");
 
-    Vector<double, CSSPrimitiveValue::kLengthUnitTypeCount> values;
-    LengthTypeFlags type_flags;
+    std::array<double, kSize> values{{0}};
+    // Indicates whether or not a given value is explicitly set in |values|.
+    std::bitset<kSize> type_flags;
   };
 
-  // Returns false if the value cannot be represented as a length array, which
-  // happens when comparisons are involved (e.g., max(10px, 10%)).
+  // Returns false if the value cannot be represented as a CSSLengthArray,
+  // which happens when comparisons are involved (e.g., max(10px, 10%)),
+  // or when we encounter a unit which is not supported by CSSLengthArray.
   bool AccumulateLengthArray(CSSLengthArray&, double multiplier = 1) const;
 
   // Returns all types of length units involved in this value.
+  using LengthTypeFlags = std::bitset<kLengthUnitTypeCount>;
   void AccumulateLengthUnitTypes(LengthTypeFlags& types) const;
 
   enum UnitCategory {
diff --git a/third_party/blink/renderer/core/css/css_property_name.h b/third_party/blink/renderer/core/css/css_property_name.h
index 5ad959c..7733ac6 100644
--- a/third_party/blink/renderer/core/css/css_property_name.h
+++ b/third_party/blink/renderer/core/css/css_property_name.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PROPERTY_NAME_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 #include "third_party/blink/renderer/platform/wtf/vector_traits.h"
diff --git a/third_party/blink/renderer/core/css/css_property_value.h b/third_party/blink/renderer/core/css/css_property_value.h
index b170e7af..1d4ef404 100644
--- a/third_party/blink/renderer/core/css/css_property_value.h
+++ b/third_party/blink/renderer/core/css/css_property_value.h
@@ -21,6 +21,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PROPERTY_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_PROPERTY_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_name.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
diff --git a/third_party/blink/renderer/core/css/css_ratio_value.h b/third_party/blink/renderer/core/css/css_ratio_value.h
index ac15f8a7..5d8d93af 100644
--- a/third_party/blink/renderer/core/css/css_ratio_value.h
+++ b/third_party/blink/renderer/core/css/css_ratio_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_RATIO_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_RATIO_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/css_revert_layer_value.h b/third_party/blink/renderer/core/css/css_revert_layer_value.h
index 24b5aa4e..68a41ac 100644
--- a/third_party/blink/renderer/core/css/css_revert_layer_value.h
+++ b/third_party/blink/renderer/core/css/css_revert_layer_value.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/types/pass_key.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/css/css_revert_value.h b/third_party/blink/renderer/core/css/css_revert_value.h
index 0fadc4f..36e8277 100644
--- a/third_party/blink/renderer/core/css/css_revert_value.h
+++ b/third_party/blink/renderer/core/css/css_revert_value.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/types/pass_key.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/css/css_string_value.h b/third_party/blink/renderer/core/css/css_string_value.h
index bdf43558..b33fa40 100644
--- a/third_party/blink/renderer/core/css/css_string_value.h
+++ b/third_party/blink/renderer/core/css/css_string_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_STRING_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_STRING_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/core/css/css_style_rule.h b/third_party/blink/renderer/core/css/css_style_rule.h
index e0c42eb..9076c25 100644
--- a/third_party/blink/renderer/core/css/css_style_rule.h
+++ b/third_party/blink/renderer/core/css/css_style_rule.h
@@ -22,6 +22,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_STYLE_RULE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_STYLE_RULE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_rule.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/core/css/css_syntax_definition.h b/third_party/blink/renderer/core/css/css_syntax_definition.h
index 4e4854bc..3a8300d7 100644
--- a/third_party/blink/renderer/core/css/css_syntax_definition.h
+++ b/third_party/blink/renderer/core/css/css_syntax_definition.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_SYNTAX_DEFINITION_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_SYNTAX_DEFINITION_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_syntax_component.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h"
diff --git a/third_party/blink/renderer/core/css/css_syntax_string_parser.h b/third_party/blink/renderer/core/css/css_syntax_string_parser.h
index 37ec1a0..5390a44f2 100644
--- a/third_party/blink/renderer/core/css/css_syntax_string_parser.h
+++ b/third_party/blink/renderer/core/css/css_syntax_string_parser.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_SYNTAX_STRING_PARSER_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_syntax_definition.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenizer_input_stream.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/css/css_unset_value.h b/third_party/blink/renderer/core/css/css_unset_value.h
index 517b50e..e3c80c93 100644
--- a/third_party/blink/renderer/core/css/css_unset_value.h
+++ b/third_party/blink/renderer/core/css/css_unset_value.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/types/pass_key.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
diff --git a/third_party/blink/renderer/core/css/css_uri_value.h b/third_party/blink/renderer/core/css/css_uri_value.h
index 909779e..74f9b6c 100644
--- a/third_party/blink/renderer/core/css/css_uri_value.h
+++ b/third_party/blink/renderer/core/css/css_uri_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_URI_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_URI_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
diff --git a/third_party/blink/renderer/core/css/css_variable_data.h b/third_party/blink/renderer/core/css/css_variable_data.h
index 1f0d35e..f042f85 100644
--- a/third_party/blink/renderer/core/css/css_variable_data.h
+++ b/third_party/blink/renderer/core/css/css_variable_data.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_VARIABLE_DATA_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_VARIABLE_DATA_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenized_value.h"
diff --git a/third_party/blink/renderer/core/css/cssom/computed_style_property_map.h b/third_party/blink/renderer/core/css/cssom/computed_style_property_map.h
index eec4bb9c9..1f48d67 100644
--- a/third_party/blink/renderer/core/css/cssom/computed_style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/computed_style_property_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_COMPUTED_STYLE_PROPERTY_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_COMPUTED_STYLE_PROPERTY_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
 #include "third_party/blink/renderer/core/css/css_selector.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_clamp.h b/third_party/blink/renderer/core/css/cssom/css_math_clamp.h
index 976fb09..9cf5c27 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_clamp.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_clamp.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_CLAMP_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_array.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_invert.h b/third_party/blink/renderer/core/css/cssom/css_math_invert.h
index 5344a2b1..3180c1f 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_invert.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_invert.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_INVERT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_INVERT_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_math_expression_node.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_value.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_max.h b/third_party/blink/renderer/core/css/cssom/css_math_max.h
index aab7bc56..346b51d 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_max.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_max.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_MAX_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_variadic.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_min.h b/third_party/blink/renderer/core/css/cssom/css_math_min.h
index fcf0ad8..edc9407 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_min.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_min.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_MIN_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_variadic.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_negate.h b/third_party/blink/renderer/core/css/cssom/css_math_negate.h
index 39049b74..6da43c54 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_negate.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_negate.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_NEGATE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_NEGATE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_product.h b/third_party/blink/renderer/core/css/cssom/css_math_product.h
index 94ff7d08..d568b0f 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_product.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_product.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_PRODUCT_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_variadic.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_sum.h b/third_party/blink/renderer/core/css/cssom/css_math_sum.h
index 701d37b..5107f03 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_sum.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_sum.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_SUM_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_variadic.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_value.h b/third_party/blink/renderer/core/css/cssom/css_math_value.h
index c65f673..4e2a2d7 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_math_variadic.h b/third_party/blink/renderer/core/css/cssom/css_math_variadic.h
index ef26379..8a7af661 100644
--- a/third_party/blink/renderer/core/css/cssom/css_math_variadic.h
+++ b/third_party/blink/renderer/core/css/cssom/css_math_variadic.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_VARIADIC_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATH_VARIADIC_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_math_expression_node.h"
 #include "third_party/blink/renderer/core/css/cssom/css_math_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_array.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_matrix_component.h b/third_party/blink/renderer/core/css/cssom/css_matrix_component.h
index 30fff18..c60a245 100644
--- a/third_party/blink/renderer/core/css/cssom/css_matrix_component.h
+++ b/third_party/blink/renderer/core/css/cssom/css_matrix_component.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATRIX_COMPONENT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_MATRIX_COMPONENT_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 #include "third_party/blink/renderer/core/geometry/dom_matrix.h"
 #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_numeric_array.h b/third_party/blink/renderer/core/css/cssom/css_numeric_array.h
index e4f2b9c9..e287708c 100644
--- a/third_party/blink/renderer/core/css/cssom/css_numeric_array.h
+++ b/third_party/blink/renderer/core/css/cssom/css_numeric_array.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_NUMERIC_ARRAY_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_NUMERIC_ARRAY_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_numeric_value_type.h b/third_party/blink/renderer/core/css/cssom/css_numeric_value_type.h
index 42c0311..d0247a8 100644
--- a/third_party/blink/renderer/core/css/cssom/css_numeric_value_type.h
+++ b/third_party/blink/renderer/core/css/cssom/css_numeric_value_type.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_NUMERIC_VALUE_TYPE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_NUMERIC_VALUE_TYPE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/css_resource_value.h b/third_party/blink/renderer/core/css/cssom/css_resource_value.h
index d8eb1d5a..3c57110 100644
--- a/third_party/blink/renderer/core/css/cssom/css_resource_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_resource_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_RESOURCE_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_RESOURCE_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_value.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_rotate.h b/third_party/blink/renderer/core/css/cssom/css_rotate.h
index e958eea..b1a0644 100644
--- a/third_party/blink/renderer/core/css/cssom/css_rotate.h
+++ b/third_party/blink/renderer/core/css/cssom/css_rotate.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_ROTATE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_ROTATE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_scale.h b/third_party/blink/renderer/core/css/cssom/css_scale.h
index 5b92eea..302fbff4 100644
--- a/third_party/blink/renderer/core/css/cssom/css_scale.h
+++ b/third_party/blink/renderer/core/css/cssom/css_scale.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SCALE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SCALE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 #include "third_party/blink/renderer/core/css/cssom/css_unit_value.h"
 #include "third_party/blink/renderer/core/geometry/dom_matrix.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_skew.h b/third_party/blink/renderer/core/css/cssom/css_skew.h
index 92c5ce55..3d6b969b 100644
--- a/third_party/blink/renderer/core/css/cssom/css_skew.h
+++ b/third_party/blink/renderer/core/css/cssom/css_skew.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_skew_x.h b/third_party/blink/renderer/core/css/cssom/css_skew_x.h
index cef6ce6..df9d063 100644
--- a/third_party/blink/renderer/core/css/cssom/css_skew_x.h
+++ b/third_party/blink/renderer/core/css/cssom/css_skew_x.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_X_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_X_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_skew_y.h b/third_party/blink/renderer/core/css/cssom/css_skew_y.h
index 2d5bfde2..5937acc 100644
--- a/third_party/blink/renderer/core/css/cssom/css_skew_y.h
+++ b/third_party/blink/renderer/core/css/cssom/css_skew_y.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_Y_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_SKEW_Y_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/css_translate.h b/third_party/blink/renderer/core/css/cssom/css_translate.h
index 0dc14ca3..1ebb7e4c 100644
--- a/third_party/blink/renderer/core/css/cssom/css_translate.h
+++ b/third_party/blink/renderer/core/css/cssom/css_translate.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_TRANSLATE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_TRANSLATE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_transform_component.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_unit_value.h b/third_party/blink/renderer/core/css/cssom/css_unit_value.h
index 7460be3..476a871 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unit_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_unit_value.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_UNIT_VALUE_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_unparsed_value.h b/third_party/blink/renderer/core/css/cssom/css_unparsed_value.h
index 3d1b5da..a1ee436 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unparsed_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_unparsed_value.h
@@ -8,6 +8,7 @@
 #include "base/gtest_prod_util.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_typedefs.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_cssvariablereferencevalue_string.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_value.h"
 #include "third_party/blink/renderer/platform/bindings/v8_binding.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h b/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
index 9da65c7..42e9277d 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_UNSUPPORTED_STYLE_VALUE_H_
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_name.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_value.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
diff --git a/third_party/blink/renderer/core/css/cssom/css_url_image_value.h b/third_party/blink/renderer/core/css/cssom/css_url_image_value.h
index d85d80a7..6ce24b3 100644
--- a/third_party/blink/renderer/core/css/cssom/css_url_image_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_url_image_value.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_URL_IMAGE_VALUE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_CSS_URL_IMAGE_VALUE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_image_value.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/declared_style_property_map.h b/third_party/blink/renderer/core/css/cssom/declared_style_property_map.h
index 74fac5e..f50edf4 100644
--- a/third_party/blink/renderer/core/css/cssom/declared_style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/declared_style_property_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_DECLARED_STYLE_PROPERTY_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_DECLARED_STYLE_PROPERTY_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/inline_style_property_map.h b/third_party/blink/renderer/core/css/cssom/inline_style_property_map.h
index a07ef4f3..3ae702e 100644
--- a/third_party/blink/renderer/core/css/cssom/inline_style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/inline_style_property_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_INLINE_STYLE_PROPERTY_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_INLINE_STYLE_PROPERTY_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/paint_worklet_deferred_image.h b/third_party/blink/renderer/core/css/cssom/paint_worklet_deferred_image.h
index 2a5fd83..dc1937a1 100644
--- a/third_party/blink/renderer/core/css/cssom/paint_worklet_deferred_image.h
+++ b/third_party/blink/renderer/core/css/cssom/paint_worklet_deferred_image.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_PAINT_WORKLET_DEFERRED_IMAGE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_PAINT_WORKLET_DEFERRED_IMAGE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/paint_worklet_input.h"
 #include "third_party/blink/renderer/platform/graphics/generated_image.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_record.h"
diff --git a/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.h b/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.h
index 3dbe0bd5..508a803 100644
--- a/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/cross_thread_style_value.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map_read_only.h"
 #include "third_party/blink/renderer/platform/graphics/compositor_element_id.h"
diff --git a/third_party/blink/renderer/core/css/cssom/prepopulated_computed_style_property_map.h b/third_party/blink/renderer/core/css/cssom/prepopulated_computed_style_property_map.h
index 334f3d2..5f3e31c 100644
--- a/third_party/blink/renderer/core/css/cssom/prepopulated_computed_style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/prepopulated_computed_style_property_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_PREPOPULATED_COMPUTED_STYLE_PROPERTY_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_PREPOPULATED_COMPUTED_STYLE_PROPERTY_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/style_property_map.h b/third_party/blink/renderer/core/css/cssom/style_property_map.h
index 6f6d6ee3..f869520 100644
--- a/third_party/blink/renderer/core/css/cssom/style_property_map.h
+++ b/third_party/blink/renderer/core/css/cssom/style_property_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_PROPERTY_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_PROPERTY_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 
diff --git a/third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h b/third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h
index ae5ffc27..a54d3cb 100644
--- a/third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h
+++ b/third_party/blink/renderer/core/css/cssom/style_property_map_read_only_main_thread.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_PROPERTY_MAP_READ_ONLY_MAIN_THREAD_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_PROPERTY_MAP_READ_ONLY_MAIN_THREAD_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/cssom/style_property_map_read_only.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/cssom/style_value_factory.h b/third_party/blink/renderer/core/css/cssom/style_value_factory.h
index c8b38fb..0412da4 100644
--- a/third_party/blink/renderer/core/css/cssom/style_value_factory.h
+++ b/third_party/blink/renderer/core/css/cssom/style_value_factory.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_VALUE_FACTORY_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSSOM_STYLE_VALUE_FACTORY_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/css/cssom/css_style_value.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.h b/third_party/blink/renderer/core/css/element_rule_collector.h
index 42a7784..4e094c0 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.h
+++ b/third_party/blink/renderer/core/css/element_rule_collector.h
@@ -24,6 +24,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_ELEMENT_RULE_COLLECTOR_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_rule_list.h"
 #include "third_party/blink/renderer/core/css/resolver/element_resolve_context.h"
 #include "third_party/blink/renderer/core/css/resolver/match_request.h"
diff --git a/third_party/blink/renderer/core/css/font_face.h b/third_party/blink/renderer/core/css/font_face.h
index f93bee4..38dfca343 100644
--- a/third_party/blink/renderer/core/css/font_face.h
+++ b/third_party/blink/renderer/core/css/font_face.h
@@ -34,6 +34,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/core/css/font_display.h"
 #include "third_party/blink/renderer/core/css/parser/at_rule_descriptors.h"
diff --git a/third_party/blink/renderer/core/css/font_face_set.h b/third_party/blink/renderer/core/css/font_face_set.h
index 477fa05..dbe8934 100644
--- a/third_party/blink/renderer/core/css/font_face_set.h
+++ b/third_party/blink/renderer/core/css/font_face_set.h
@@ -10,9 +10,11 @@
 #include "third_party/blink/renderer/bindings/core/v8/iterable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/font_face.h"
 #include "third_party/blink/renderer/core/dom/events/event_listener.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/fonts/font_selector.h"
diff --git a/third_party/blink/renderer/core/css/font_face_set_document.h b/third_party/blink/renderer/core/css/font_face_set_document.h
index 859ff32..3cfebd8 100644
--- a/third_party/blink/renderer/core/css/font_face_set_document.h
+++ b/third_party/blink/renderer/core/css/font_face_set_document.h
@@ -28,6 +28,7 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/iterable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_font_selector.h"
 #include "third_party/blink/renderer/core/css/font_face.h"
 #include "third_party/blink/renderer/core/css/font_face_set.h"
diff --git a/third_party/blink/renderer/core/css/font_face_set_worker.h b/third_party/blink/renderer/core/css/font_face_set_worker.h
index 506275e..028a3a6 100644
--- a/third_party/blink/renderer/core/css/font_face_set_worker.h
+++ b/third_party/blink/renderer/core/css/font_face_set_worker.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/iterable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/font_face.h"
 #include "third_party/blink/renderer/core/css/font_face_set.h"
 #include "third_party/blink/renderer/core/css/offscreen_font_selector.h"
diff --git a/third_party/blink/renderer/core/css/invalidation/node_invalidation_sets.h b/third_party/blink/renderer/core/css/invalidation/node_invalidation_sets.h
index 0d8ea7d5..54314e34 100644
--- a/third_party/blink/renderer/core/css/invalidation/node_invalidation_sets.h
+++ b/third_party/blink/renderer/core/css/invalidation/node_invalidation_sets.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_NODE_INVALIDATION_SETS_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_NODE_INVALIDATION_SETS_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/invalidation/invalidation_set.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.h b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.h
index 1bf2d58..57c120f 100644
--- a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.h
+++ b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_PENDING_INVALIDATIONS_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_PENDING_INVALIDATIONS_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/invalidation/node_invalidation_sets.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/core/css/invalidation/style_invalidator.h b/third_party/blink/renderer/core/css/invalidation/style_invalidator.h
index 76edb15b..676cbb3 100644
--- a/third_party/blink/renderer/core/css/invalidation/style_invalidator.h
+++ b/third_party/blink/renderer/core/css/invalidation/style_invalidator.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_STYLE_INVALIDATOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_INVALIDATION_STYLE_INVALIDATOR_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/invalidation/invalidation_flags.h"
 #include "third_party/blink/renderer/core/css/invalidation/pending_invalidations.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/css/layout_tree_rebuild_root.h b/third_party/blink/renderer/core/css/layout_tree_rebuild_root.h
index 463a519..7c7cb24 100644
--- a/third_party/blink/renderer/core/css/layout_tree_rebuild_root.h
+++ b/third_party/blink/renderer/core/css/layout_tree_rebuild_root.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_LAYOUT_TREE_REBUILD_ROOT_H_
 
 #include "base/dcheck_is_on.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/style_traversal_root.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/media_feature_overrides.h b/third_party/blink/renderer/core/css/media_feature_overrides.h
index 3dd0479c..447ae94d 100644
--- a/third_party/blink/renderer/core/css/media_feature_overrides.h
+++ b/third_party/blink/renderer/core/css/media_feature_overrides.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_FEATURE_OVERRIDES_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_FEATURE_OVERRIDES_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/media_query_exp.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
diff --git a/third_party/blink/renderer/core/css/media_query_list.cc b/third_party/blink/renderer/core/css/media_query_list.cc
index b458391..8509f3e 100644
--- a/third_party/blink/renderer/core/css/media_query_list.cc
+++ b/third_party/blink/renderer/core/css/media_query_list.cc
@@ -24,6 +24,7 @@
 #include "third_party/blink/renderer/core/css/media_query_list_listener.h"
 #include "third_party/blink/renderer/core/css/media_query_matcher.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/web_feature.h"
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.h b/third_party/blink/renderer/core/css/media_values_dynamic.h
index ec607d7..48117b19 100644
--- a/third_party/blink/renderer/core/css/media_values_dynamic.h
+++ b/third_party/blink/renderer/core/css/media_values_dynamic.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_DYNAMIC_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_DYNAMIC_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/media_values.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.h b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.h
index b5e6c6a8..56c58d2 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PARSER_FAST_PATHS_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PARSER_FAST_PATHS_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
 #include "third_party/blink/renderer/platform/graphics/color.h"
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_local_context.h b/third_party/blink/renderer/core/css/parser/css_parser_local_context.h
index 95ca3af..84851a0 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_local_context.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_local_context.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PARSER_LOCAL_CONTEXT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PARSER_LOCAL_CONTEXT_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_token_stream.h b/third_party/blink/renderer/core/css/parser/css_parser_token_stream.h
index 65ad290..7affe27 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_token_stream.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_token_stream.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PARSER_TOKEN_STREAM_H_
 
 #include "base/auto_reset.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/css/parser/css_property_parser.h b/third_party/blink/renderer/core/css/parser/css_property_parser.h
index 286ab68..951d1a6 100644
--- a/third_party/blink/renderer/core/css/parser/css_property_parser.h
+++ b/third_party/blink/renderer/core/css/parser/css_property_parser.h
@@ -25,6 +25,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PROPERTY_PARSER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_CSS_PROPERTY_PARSER_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_context.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_mode.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.h b/third_party/blink/renderer/core/css/properties/computed_style_utils.h
index 5cbfd8b..71e1561 100644
--- a/third_party/blink/renderer/core/css/properties/computed_style_utils.h
+++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.h
@@ -7,6 +7,7 @@
 
 #include "cc/input/scroll_snap_data.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_border_image_slice_value.h"
 #include "third_party/blink/renderer/core/css/css_function_value.h"
 #include "third_party/blink/renderer/core/css/css_identifier_value.h"
diff --git a/third_party/blink/renderer/core/css/properties/css_bitset.h b/third_party/blink/renderer/core/css/properties/css_bitset.h
index f9c92c7..999be44 100644
--- a/third_party/blink/renderer/core/css/properties/css_bitset.h
+++ b/third_party/blink/renderer/core/css/properties/css_bitset.h
@@ -8,6 +8,7 @@
 #include <algorithm>
 #include <cstring>
 #include <initializer_list>
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/properties/css_property.h b/third_party/blink/renderer/core/css/properties/css_property.h
index 571d0183..c5d3872e 100644
--- a/third_party/blink/renderer/core/css/properties/css_property.h
+++ b/third_party/blink/renderer/core/css/properties/css_property.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_PROPERTY_H_
 
 #include <memory>
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_name.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/core/css/properties/css_direction_aware_resolver.h"
diff --git a/third_party/blink/renderer/core/css/properties/css_property_ref.h b/third_party/blink/renderer/core/css/properties/css_property_ref.h
index 6855c39..db3febda 100644
--- a/third_party/blink/renderer/core/css/properties/css_property_ref.h
+++ b/third_party/blink/renderer/core/css/properties/css_property_ref.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_PROPERTY_REF_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_PROPERTY_REF_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/properties/longhands/custom_property.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/properties/css_unresolved_property.h b/third_party/blink/renderer/core/css/properties/css_unresolved_property.h
index d0962e2..772326c 100644
--- a/third_party/blink/renderer/core/css/properties/css_unresolved_property.h
+++ b/third_party/blink/renderer/core/css/properties/css_unresolved_property.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_UNRESOLVED_PROPERTY_H_
 
 #include "base/notreached.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/properties/css_exposure.h"
 #include "third_party/blink/renderer/core/css/properties/css_property_instances.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/core/css/properties/longhands/custom_property.h b/third_party/blink/renderer/core/css/properties/longhands/custom_property.h
index 9979edd..2594fc8 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/custom_property.h
+++ b/third_party/blink/renderer/core/css/properties/longhands/custom_property.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_LONGHANDS_CUSTOM_PROPERTY_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_LONGHANDS_CUSTOM_PROPERTY_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/properties/longhands/variable.h"
 
 #include "third_party/blink/renderer/core/css/property_registration.h"
diff --git a/third_party/blink/renderer/core/css/properties/longhands/variable.h b/third_party/blink/renderer/core/css/properties/longhands/variable.h
index f8d0bf0..17f1ed6 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/variable.h
+++ b/third_party/blink/renderer/core/css/properties/longhands/variable.h
@@ -9,6 +9,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_LONGHANDS_VARIABLE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_LONGHANDS_VARIABLE_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/properties/longhand.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/property_registration.h b/third_party/blink/renderer/core/css/property_registration.h
index 4c10285c..51e0ecf 100644
--- a/third_party/blink/renderer/core/css/property_registration.h
+++ b/third_party/blink/renderer/core/css/property_registration.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/renderer/core/animation/interpolation_types_map.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_syntax_definition.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/core/css/property_registry.h b/third_party/blink/renderer/core/css/property_registry.h
index 1df6009..b3479e3 100644
--- a/third_party/blink/renderer/core/css/property_registry.h
+++ b/third_party/blink/renderer/core/css/property_registry.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTY_REGISTRY_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTY_REGISTRY_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/property_registration.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_expansion.h b/third_party/blink/renderer/core/css/resolver/cascade_expansion.h
index 0f138d0..ec7f603 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_expansion.h
+++ b/third_party/blink/renderer/core/css/resolver/cascade_expansion.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_CASCADE_EXPANSION_H_
 
 #include <limits>
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_value_set.h"
 #include "third_party/blink/renderer/core/css/properties/longhands/custom_property.h"
 #include "third_party/blink/renderer/core/css/resolver/cascade_filter.h"
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_interpolations.h b/third_party/blink/renderer/core/css/resolver/cascade_interpolations.h
index f4a2510e6..f140f93 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_interpolations.h
+++ b/third_party/blink/renderer/core/css/resolver/cascade_interpolations.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/core/animation/interpolation.h"
 #include "third_party/blink/renderer/core/animation/property_handle.h"
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/resolver/cascade_origin.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_map.h b/third_party/blink/renderer/core/css/resolver/cascade_map.h
index 6ac6bb0..712dd535 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_map.h
+++ b/third_party/blink/renderer/core/css/resolver/cascade_map.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_CASCADE_MAP_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_CASCADE_MAP_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_property_name.h"
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/css/properties/css_bitset.h"
diff --git a/third_party/blink/renderer/core/css/resolver/element_resolve_context.h b/third_party/blink/renderer/core/css/resolver/element_resolve_context.h
index c65c69fc..ea35607 100644
--- a/third_party/blink/renderer/core/css/resolver/element_resolve_context.h
+++ b/third_party/blink/renderer/core/css/resolver/element_resolve_context.h
@@ -23,6 +23,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_ELEMENT_RESOLVE_CONTEXT_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_ELEMENT_RESOLVE_CONTEXT_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/style/computed_style_constants.h"
diff --git a/third_party/blink/renderer/core/css/resolver/filter_operation_resolver.h b/third_party/blink/renderer/core/css/resolver/filter_operation_resolver.h
index e13f9a71..d9edad9 100644
--- a/third_party/blink/renderer/core/css/resolver/filter_operation_resolver.h
+++ b/third_party/blink/renderer/core/css/resolver/filter_operation_resolver.h
@@ -23,6 +23,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_FILTER_OPERATION_RESOLVER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_FILTER_OPERATION_RESOLVER_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
 #include "third_party/blink/renderer/core/style/filter_operations.h"
diff --git a/third_party/blink/renderer/core/css/resolver/match_request.h b/third_party/blink/renderer/core/css/resolver/match_request.h
index 94c8a78..0c4e6ec 100644
--- a/third_party/blink/renderer/core/css/resolver/match_request.h
+++ b/third_party/blink/renderer/core/css/resolver/match_request.h
@@ -24,6 +24,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_MATCH_REQUEST_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_MATCH_REQUEST_H_
 
+#include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_style_sheet.h"
 #include "third_party/blink/renderer/core/css/rule_set.h"
 
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index 35942da..3ec2e6c5 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -141,6 +141,7 @@
   if (Platform::Current() && Platform::Current()->ThemeEngine())
     forced_colors_ = Platform::Current()->ThemeEngine()->GetForcedColors();
   UpdateForcedBackgroundColor();
+  UpdateColorScheme();
 }
 
 StyleEngine::~StyleEngine() = default;
diff --git a/third_party/blink/renderer/core/dom/events/event_target.h b/third_party/blink/renderer/core/dom/events/event_target.h
index ef89318..29cc9464 100644
--- a/third_party/blink/renderer/core/dom/events/event_target.h
+++ b/third_party/blink/renderer/core/dom/events/event_target.h
@@ -38,7 +38,6 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/events/event_dispatch_result.h"
 #include "third_party/blink/renderer/core/dom/events/event_listener_map.h"
-#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/event_type_names.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/core/dom/events/event_target_impl.cc b/third_party/blink/renderer/core/dom/events/event_target_impl.cc
index d557318..2e6fed01 100644
--- a/third_party/blink/renderer/core/dom/events/event_target_impl.cc
+++ b/third_party/blink/renderer/core/dom/events/event_target_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/dom/events/event_target_impl.h"
 
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc
index 827df27..14b3729 100644
--- a/third_party/blink/renderer/core/dom/node.cc
+++ b/third_party/blink/renderer/core/dom/node.cc
@@ -78,6 +78,7 @@
 #include "third_party/blink/renderer/core/dom/user_action_element_set.h"
 #include "third_party/blink/renderer/core/editing/editing_utilities.h"
 #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/event_util.h"
 #include "third_party/blink/renderer/core/events/gesture_event.h"
 #include "third_party/blink/renderer/core/events/input_event.h"
diff --git a/third_party/blink/renderer/core/editing/ime/edit_context.cc b/third_party/blink/renderer/core/editing/ime/edit_context.cc
index 1cd62a36..b5e7304 100644
--- a/third_party/blink/renderer/core/editing/ime/edit_context.cc
+++ b/third_party/blink/renderer/core/editing/ime/edit_context.cc
@@ -18,6 +18,7 @@
 #include "third_party/blink/renderer/core/editing/ime/text_update_event.h"
 #include "third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine.h"
 #include "third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/composition_event.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
index 5e11bc7b..078a9400 100644
--- a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -76,6 +76,7 @@
 #include "third_party/blink/renderer/platform/text/text_direction.h"
 #include "third_party/blink/renderer/platform/web_test_support.h"
 #include "third_party/blink/renderer/platform/widget/frame_widget.h"
+#include "third_party/blink/renderer/platform/widget/input/input_metrics.h"
 #include "third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h"
 #include "third_party/blink/renderer/platform/widget/widget_base.h"
 
@@ -734,6 +735,9 @@
       HitTestResult resultScroll =
           MainFrame().GetEventHandler().HitTestResultAtLocation(locationScroll);
       scrollable_node_ = FindFirstScroller(resultScroll.InnerNode());
+      RecordScrollReasonsMetric(
+          event.SourceDevice(),
+          cc::MainThreadScrollingReason::kPopupNoThreadedInput);
       return WebInputEventResult::kHandledSystem;
     }
     if (event.GetType() == WebInputEvent::Type::kGestureScrollUpdate) {
diff --git a/third_party/blink/renderer/core/fileapi/file_reader.cc b/third_party/blink/renderer/core/fileapi/file_reader.cc
index 00521bc8..49b7e99 100644
--- a/third_party/blink/renderer/core/fileapi/file_reader.cc
+++ b/third_party/blink/renderer/core/fileapi/file_reader.cc
@@ -34,6 +34,7 @@
 #include "base/timer/elapsed_timer.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_arraybuffer_string.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/progress_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fileapi/file.h"
diff --git a/third_party/blink/renderer/core/frame/dom_visual_viewport.cc b/third_party/blink/renderer/core/frame/dom_visual_viewport.cc
index 57ce48c..82d2a2c 100644
--- a/third_party/blink/renderer/core/frame/dom_visual_viewport.cc
+++ b/third_party/blink/renderer/core/frame/dom_visual_viewport.cc
@@ -27,6 +27,7 @@
 
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/element.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
diff --git a/third_party/blink/renderer/core/frame/dom_window.cc b/third_party/blink/renderer/core/frame/dom_window.cc
index de0e82d..2231ce4 100644
--- a/third_party/blink/renderer/core/frame/dom_window.cc
+++ b/third_party/blink/renderer/core/frame/dom_window.cc
@@ -17,6 +17,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_window_post_message_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/window_proxy_manager.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/execution_context/security_context.h"
diff --git a/third_party/blink/renderer/core/html/forms/resources/calendar_picker.js b/third_party/blink/renderer/core/html/forms/resources/calendar_picker.js
index f19563e18..80c9edd 100644
--- a/third_party/blink/renderer/core/html/forms/resources/calendar_picker.js
+++ b/third_party/blink/renderer/core/html/forms/resources/calendar_picker.js
@@ -1855,113 +1855,109 @@
   };
 }
 
-/**
- * @constructor
- * @extends View
- */
-function ListView() {
-  View.call(this, createElement('div', ListView.ClassNameListView));
-  this.element.tabIndex = 0;
-  this.element.setAttribute('role', 'grid');
+// ----------------------------------------------------------------
 
-  /**
-   * @type {!number}
-   * @private
-   */
-  this._width = 0;
-  /**
-   * @type {!Object}
-   * @private
-   */
-  this._cells = {};
+class ListView extends View {
+  constructor() {
+    super(createElement('div', ListView.ClassNameListView));
+    this.element.tabIndex = 0;
+    this.element.setAttribute('role', 'grid');
 
-  /**
-   * @type {!number}
-   */
-  this.selectedRow = ListView.NoSelection;
+    /**
+     * @type {!number}
+     * @private
+     */
+    this._width = 0;
+    /**
+     * @type {!Object}
+     * @private
+     */
+    this._cells = {};
 
-  /**
-   * @type {!ScrollView}
-   */
-  this.scrollView = new ScrollView();
-  this.scrollView.delegate = this;
-  this.scrollView.minimumContentOffset = 0;
-  this.scrollView.setWidth(0);
-  this.scrollView.setHeight(0);
-  this.scrollView.attachTo(this);
+    /**
+     * @type {!number}
+     */
+    this.selectedRow = ListView.NoSelection;
 
-  this.element.addEventListener('click', this.onClick.bind(this), false);
+    /**
+     * @type {!ScrollView}
+     */
+    this.scrollView = new ScrollView();
+    this.scrollView.delegate = this;
+    this.scrollView.minimumContentOffset = 0;
+    this.scrollView.setWidth(0);
+    this.scrollView.setHeight(0);
+    this.scrollView.attachTo(this);
 
-  /**
-   * @type {!boolean}
-   * @private
-   */
-  this._needsUpdateCells = false;
-}
+    this.element.addEventListener('click', this.onClick.bind(this), false);
 
-{
-  ListView.prototype = Object.create(View.prototype);
+    /**
+     * @type {!boolean}
+     * @private
+     */
+    this._needsUpdateCells = false;
+  }
 
-  ListView.NoSelection = -1;
-  ListView.ClassNameListView = 'list-view';
+  static NoSelection = -1;
+  static ClassNameListView = 'list-view';
 
-  ListView.prototype.onAnimationFrameWillFinish = function() {
+  onAnimationFrameWillFinish() {
     if (this._needsUpdateCells)
       this.updateCells();
-  };
+  }
 
   /**
    * @param {!boolean} needsUpdateCells
    */
-  ListView.prototype.setNeedsUpdateCells = function(needsUpdateCells) {
+  setNeedsUpdateCells(needsUpdateCells) {
     if (this._needsUpdateCells === needsUpdateCells)
       return;
     this._needsUpdateCells = needsUpdateCells;
     if (this._needsUpdateCells)
       AnimationManager.shared.on(
           AnimationManager.EventTypeAnimationFrameWillFinish,
-          this.onAnimationFrameWillFinish);
+          this.onAnimationFrameWillFinish.bind(this));
     else
       AnimationManager.shared.removeListener(
           AnimationManager.EventTypeAnimationFrameWillFinish,
-          this.onAnimationFrameWillFinish);
-  };
+          this.onAnimationFrameWillFinish.bind(this));
+  }
 
   /**
    * @param {!number} row
    * @return {?ListCell}
    */
-  ListView.prototype.cellAtRow = function(row) {
+  cellAtRow(row) {
     return this._cells[row];
-  };
+  }
 
   /**
    * @param {!number} offset Scroll offset in pixels.
    * @return {!number}
    */
-  ListView.prototype.rowAtScrollOffset = function(offset) {
+  rowAtScrollOffset(offset) {
     console.assert(
         false,
         'NOT REACHED: ListView.prototype.rowAtScrollOffset needs to be overridden.');
     return 0;
-  };
+  }
 
   /**
    * @param {!number} row
    * @return {!number} Scroll offset in pixels.
    */
-  ListView.prototype.scrollOffsetForRow = function(row) {
+  scrollOffsetForRow(row) {
     console.assert(
         false,
         'NOT REACHED: ListView.prototype.scrollOffsetForRow needs to be overridden.');
     return 0;
-  };
+  }
 
   /**
    * @param {!number} row
    * @return {!ListCell}
    */
-  ListView.prototype.addCellIfNecessary = function(row) {
+  addCellIfNecessary(row) {
     var cell = this._cells[row];
     if (cell)
       return cell;
@@ -1983,64 +1979,64 @@
         this.scrollOffsetForRow(row)));
     this._cells[row] = cell;
     return cell;
-  };
+  }
 
   /**
    * @param {!number} row
    * @return {!ListCell}
    */
-  ListView.prototype.prepareNewCell = function(row) {
+  prepareNewCell(row) {
     console.assert(
         false,
         'NOT REACHED: ListView.prototype.prepareNewCell should be overridden.');
     return new ListCell();
-  };
+  }
 
   /**
    * @param {!ListCell} cell
    */
-  ListView.prototype.throwAwayCell = function(cell) {
+  throwAwayCell(cell) {
     delete this._cells[cell.row];
     cell.throwAway();
-  };
+  }
 
   /**
    * @return {!number}
    */
-  ListView.prototype.firstVisibleRow = function() {
+  firstVisibleRow() {
     return this.rowAtScrollOffset(this.scrollView.contentOffset());
-  };
+  }
 
   /**
    * @return {!number}
    */
-  ListView.prototype.lastVisibleRow = function() {
+  lastVisibleRow() {
     return this.rowAtScrollOffset(
         this.scrollView.contentOffset() + this.scrollView.height() - 1);
-  };
+  }
 
   /**
    * @param {!ScrollView} scrollView
    */
-  ListView.prototype.scrollViewDidChangeContentOffset = function(scrollView) {
+  scrollViewDidChangeContentOffset(scrollView) {
     this.setNeedsUpdateCells(true);
-  };
+  }
 
   /**
    * @param {!ScrollView} scrollView
    */
-  ListView.prototype.scrollViewDidChangeHeight = function(scrollView) {
+  scrollViewDidChangeHeight(scrollView) {
     this.setNeedsUpdateCells(true);
-  };
+  }
 
   /**
    * @param {!ScrollView} scrollView
    */
-  ListView.prototype.scrollViewDidChangePartition = function(scrollView) {
+  scrollViewDidChangePartition(scrollView) {
     this.setNeedsUpdateCells(true);
-  };
+  }
 
-  ListView.prototype.updateCells = function() {
+  updateCells() {
     var firstVisibleRow = this.firstVisibleRow();
     var lastVisibleRow = this.lastVisibleRow();
     console.assert(firstVisibleRow <= lastVisibleRow);
@@ -2058,19 +2054,19 @@
         this.addCellIfNecessary(i);
     }
     this.setNeedsUpdateCells(false);
-  };
+  }
 
   /**
    * @return {!number} Width in pixels.
    */
-  ListView.prototype.width = function() {
+  width() {
     return this._width;
-  };
+  }
 
   /**
    * @param {!number} width Width in pixels.
    */
-  ListView.prototype.setWidth = function(width) {
+  setWidth(width) {
     if (this._width === width)
       return;
     this._width = width;
@@ -2080,26 +2076,26 @@
     }
     this.element.style.width = this._width + 'px';
     this.setNeedsUpdateCells(true);
-  };
+  }
 
   /**
    * @return {!number} Height in pixels.
    */
-  ListView.prototype.height = function() {
+  height() {
     return this.scrollView.height();
-  };
+  }
 
   /**
    * @param {!number} height Height in pixels.
    */
-  ListView.prototype.setHeight = function(height) {
+  setHeight(height) {
     this.scrollView.setHeight(height);
-  };
+  }
 
   /**
    * @param {?Event} event
    */
-  ListView.prototype.onClick = function(event) {
+  onClick(event) {
     var clickedCellElement =
         enclosingNodeOrSelfWithClass(event.target, ListCell.ClassNameListCell);
     if (!clickedCellElement)
@@ -2107,12 +2103,12 @@
     var clickedCell = clickedCellElement.$view;
     if (clickedCell.row !== this.selectedRow)
       this.select(clickedCell.row);
-  };
+  }
 
   /**
    * @param {!number} row
    */
-  ListView.prototype.select = function(row) {
+  select(row) {
     if (this.selectedRow === row)
       return;
     this.deselect();
@@ -2122,26 +2118,28 @@
     var selectedCell = this._cells[this.selectedRow];
     if (selectedCell)
       selectedCell.setSelected(true);
-  };
+  }
 
-  ListView.prototype.deselect = function() {
+  deselect() {
     if (this.selectedRow === ListView.NoSelection)
       return;
     var selectedCell = this._cells[this.selectedRow];
     if (selectedCell)
       selectedCell.setSelected(false);
     this.selectedRow = ListView.NoSelection;
-  };
+  }
 
   /**
    * @param {!number} row
    * @param {!boolean} animate
    */
-  ListView.prototype.scrollToRow = function(row, animate) {
+  scrollToRow(row, animate) {
     this.scrollView.scrollTo(this.scrollOffsetForRow(row), animate);
-  };
+  }
 }
 
+// ----------------------------------------------------------------
+
 /**
  * @constructor
  * @extends View
diff --git a/third_party/blink/renderer/core/html/portal/portal_host.cc b/third_party/blink/renderer/core/html/portal/portal_host.cc
index bcd2a8cd..ac1edf0 100644
--- a/third_party/blink/renderer/core/html/portal/portal_host.cc
+++ b/third_party/blink/renderer/core/html/portal/portal_host.cc
@@ -10,6 +10,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_window_post_message_options.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/html/track/audio_track_list.cc b/third_party/blink/renderer/core/html/track/audio_track_list.cc
index 99504757..57055ba 100644
--- a/third_party/blink/renderer/core/html/track/audio_track_list.cc
+++ b/third_party/blink/renderer/core/html/track/audio_track_list.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/core/html/track/audio_track_list.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/html/track/text_track.cc b/third_party/blink/renderer/core/html/track/text_track.cc
index 7e1f585..86c0d45 100644
--- a/third_party/blink/renderer/core/html/track/text_track.cc
+++ b/third_party/blink/renderer/core/html/track/text_track.cc
@@ -31,6 +31,7 @@
 
 #include "third_party/blink/renderer/core/html/track/text_track.h"
 
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/html/media/html_media_element.h"
 #include "third_party/blink/renderer/core/html/track/cue_timeline.h"
 #include "third_party/blink/renderer/core/html/track/text_track_cue_list.h"
diff --git a/third_party/blink/renderer/core/html/track/text_track_cue.cc b/third_party/blink/renderer/core/html/track/text_track_cue.cc
index d67cc93b..d23f7d4 100644
--- a/third_party/blink/renderer/core/html/track/text_track_cue.cc
+++ b/third_party/blink/renderer/core/html/track/text_track_cue.cc
@@ -32,6 +32,7 @@
 #include "third_party/blink/renderer/core/html/track/text_track_cue.h"
 
 #include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/html/track/text_track.h"
 #include "third_party/blink/renderer/core/html/track/text_track_cue_list.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
diff --git a/third_party/blink/renderer/core/html/track/text_track_list.cc b/third_party/blink/renderer/core/html/track/text_track_list.cc
index 7393444b..9661fea 100644
--- a/third_party/blink/renderer/core/html/track/text_track_list.cc
+++ b/third_party/blink/renderer/core/html/track/text_track_list.cc
@@ -25,6 +25,7 @@
 
 #include "third_party/blink/renderer/core/html/track/text_track_list.h"
 
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/html/media/html_media_element.h"
 #include "third_party/blink/renderer/core/html/track/inband_text_track.h"
 #include "third_party/blink/renderer/core/html/track/loadable_text_track.h"
diff --git a/third_party/blink/renderer/core/html/track/video_track_list.cc b/third_party/blink/renderer/core/html/track/video_track_list.cc
index 0e002148..1dee2afa 100644
--- a/third_party/blink/renderer/core/html/track/video_track_list.cc
+++ b/third_party/blink/renderer/core/html/track/video_track_list.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/html/track/video_track_list.h"
 
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/html/media/html_media_element.h"
 #include "third_party/blink/renderer/core/html/track/video_track.h"
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index 65e8c9d..877723d5 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -663,7 +663,7 @@
   }
 
   end_margin_strut_ = result.EndMarginStrut();
-  exclusion_space_ = result.ExclusionSpace();
+  container_builder_.SetExclusionSpace(result.ExclusionSpace());
   container_builder_.SetAdjoiningObjectTypes(result.AdjoiningObjectTypes());
   lines_until_clamp_ = result.LinesUntilClamp();
   if (UNLIKELY(box_fragment.MayHaveDescendantAboveBlockStart()))
@@ -803,7 +803,7 @@
     // PositionLeadingFloats step.
     if (child.unpositioned_float) {
       NGPositionedFloat positioned_float = PositionFloat(
-          origin_bfc_block_offset, child.unpositioned_float, &exclusion_space_);
+          origin_bfc_block_offset, child.unpositioned_float, &ExclusionSpace());
       if (positioned_float.need_break_before) {
         // We decided to break before the float. No fragment here. Create a
         // break token and propagate it to the block container.
@@ -1097,7 +1097,7 @@
     LayoutUnit block_end_offset_without_clearence = bfc_offset.block_offset;
     const auto clear_type = item.Style()->Clear(Style());
     if (clear_type != EClear::kNone) {
-      AdjustToClearance(exclusion_space_.ClearanceOffset(clear_type),
+      AdjustToClearance(ExclusionSpace().ClearanceOffset(clear_type),
                         &bfc_offset);
 
       // Unlike regular CSS clearance (which adds space *before* content), BR
@@ -1108,7 +1108,7 @@
           bfc_offset.block_offset - block_end_offset_without_clearence);
     }
 
-    if (exclusion_space_.NeedsClearancePastFragmentainer(clear_type))
+    if (ExclusionSpace().NeedsClearancePastFragmentainer(clear_type))
       return false;
   }
   return true;
@@ -1184,7 +1184,7 @@
 
     // Reset any state that may have been modified in a previous pass.
     container_builder_.Reset();
-    exclusion_space_ = initial_exclusion_space;
+    container_builder_.SetExclusionSpace(initial_exclusion_space);
     is_line_created = false;
 
     NGLineLayoutOpportunity line_opportunity =
@@ -1195,7 +1195,7 @@
     NGLineBreaker line_breaker(Node(), NGLineBreakerMode::kContent,
                                ConstraintSpace(), line_opportunity,
                                leading_floats, handled_leading_floats_index,
-                               break_token, &exclusion_space_);
+                               break_token, &ExclusionSpace());
     line_breaker.NextLine(&line_info);
 
     const auto* block_in_inline_result = line_info.BlockInInlineLayoutResult();
@@ -1373,7 +1373,6 @@
 
   CHECK(is_line_created);
   container_builder_.SetEndMarginStrut(end_margin_strut_);
-  container_builder_.SetExclusionSpace(std::move(exclusion_space_));
   container_builder_.SetLinesUntilClamp(lines_until_clamp_);
 
   DCHECK(items_builder);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.h
index 746b850..29b0c0b 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.h
@@ -134,7 +134,6 @@
   NGInlineChildLayoutContext* context_;
 
   NGMarginStrut end_margin_strut_;
-  NGExclusionSpace exclusion_space_;
   absl::optional<int> lines_until_clamp_;
 
   FontBaseline baseline_type_ = FontBaseline::kAlphabeticBaseline;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index 67edd66..ebf9a96 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -222,8 +222,9 @@
       has_processed_first_child_(false),
       ignore_line_clamp_(false),
       is_line_clamp_context_(params.space.IsLineClampContext()),
-      lines_until_clamp_(params.space.LinesUntilClamp()),
-      exclusion_space_(params.space.ExclusionSpace()) {
+      lines_until_clamp_(params.space.LinesUntilClamp()) {
+  container_builder_.SetExclusionSpace(params.space.ExclusionSpace());
+
   child_percentage_size_ = CalculateChildPercentageSize(
       ConstraintSpace(), Node(), ChildAvailableSize());
   replaced_child_percentage_size_ = CalculateReplacedChildPercentageSize(
@@ -799,7 +800,7 @@
   // all of our floats.
   if (ConstraintSpace().IsNewFormattingContext()) {
     intrinsic_block_size_ = std::max(
-        intrinsic_block_size_, exclusion_space_.ClearanceOffset(EClear::kBoth));
+        intrinsic_block_size_, ExclusionSpace().ClearanceOffset(EClear::kBoth));
   }
 
   // If line clamping occurred, the intrinsic block-size comes from the
@@ -985,10 +986,10 @@
   container_builder_.SetLastBaselineToBlockEndMarginEdgeIfNeeded();
 
   // An exclusion space is confined to nodes within the same formatting context.
-  if (!ConstraintSpace().IsNewFormattingContext()) {
-    container_builder_.SetExclusionSpace(std::move(exclusion_space_));
+  if (ConstraintSpace().IsNewFormattingContext())
+    container_builder_.SetExclusionSpace(NGExclusionSpace());
+  else
     container_builder_.SetLinesUntilClamp(lines_until_clamp_);
-  }
 
   if (ConstraintSpace().UseFirstLineStyle())
     container_builder_.SetStyleVariant(NGStyleVariant::kFirstLine);
@@ -1115,7 +1116,7 @@
         origin_bfc_block_offset};
 
     static_offset.inline_offset += CalculateOutOfFlowStaticInlineLevelOffset(
-        Style(), origin_bfc_offset, exclusion_space_,
+        Style(), origin_bfc_offset, ExclusionSpace(),
         ChildAvailableSize().inline_size);
   }
 
@@ -1170,7 +1171,7 @@
   }
 
   NGPositionedFloat positioned_float =
-      PositionFloat(&unpositioned_float, &exclusion_space_);
+      PositionFloat(&unpositioned_float, &ExclusionSpace());
 
   if (positioned_float.need_break_before) {
     DCHECK(ConstraintSpace().HasBlockFragmentation());
@@ -1451,12 +1452,12 @@
   // The origin offset is where we should start looking for layout
   // opportunities. It needs to be adjusted by the child's clearance.
   AdjustToClearance(
-      exclusion_space_.ClearanceOffset(child_style.Clear(Style())),
+      ExclusionSpace().ClearanceOffset(child_style.Clear(Style())),
       &origin_offset);
   DCHECK(container_builder_.BfcBlockOffset());
 
   LayoutOpportunityVector opportunities =
-      exclusion_space_.AllLayoutOpportunities(origin_offset,
+      ExclusionSpace().AllLayoutOpportunities(origin_offset,
                                               ChildAvailableSize().inline_size);
 
   // We should always have at least one opportunity.
@@ -1646,7 +1647,7 @@
     // force this placement of this child.
     if (has_clearance_past_adjoining_floats) {
       forced_bfc_block_offset =
-          exclusion_space_.ClearanceOffset(child.Style().Clear(Style()));
+          ExclusionSpace().ClearanceOffset(child.Style().Clear(Style()));
     }
   }
 
@@ -1900,7 +1901,7 @@
 
   // It is now safe to update our version of the exclusion space, and any
   // propagated adjoining floats.
-  exclusion_space_ = layout_result->ExclusionSpace();
+  container_builder_.SetExclusionSpace(layout_result->ExclusionSpace());
 
   // Only self-collapsing children should have adjoining objects.
   DCHECK(!layout_result->AdjoiningObjectTypes() || is_self_collapsing);
@@ -2381,7 +2382,7 @@
     if (!child_box_fragment->IsFirstForNode())
       return NGBreakStatus::kContinue;
 
-    if (exclusion_space_.NeedsClearancePastFragmentainer(
+    if (ExclusionSpace().NeedsClearancePastFragmentainer(
             child.Style().Clear(Style())))
       pushed_to_next_fragmentainer_by_float = true;
   }
@@ -2696,7 +2697,7 @@
                                     : ConstraintSpace().ClearanceOffset();
   if (child.IsBlock()) {
     LayoutUnit child_clearance_offset =
-        exclusion_space_.ClearanceOffset(child_style.Clear(Style()));
+        ExclusionSpace().ClearanceOffset(child_style.Clear(Style()));
     clearance_offset = std::max(clearance_offset, child_clearance_offset);
   }
   builder.SetClearanceOffset(clearance_offset);
@@ -2705,7 +2706,7 @@
   if (!is_new_fc) {
     builder.SetMarginStrut(child_data.margin_strut);
     builder.SetBfcOffset(child_data.bfc_offset_estimate);
-    builder.SetExclusionSpace(exclusion_space_);
+    builder.SetExclusionSpace(ExclusionSpace());
     if (!has_bfc_block_offset) {
       builder.SetAdjoiningObjectTypes(
           container_builder_.AdjoiningObjectTypes());
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
index 9188521..f03608f 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
@@ -419,8 +419,6 @@
   // the current line should be clamped. This may go negative.
   absl::optional<int> lines_until_clamp_;
 
-  NGExclusionSpace exclusion_space_;
-
   // If set, one of the lines was clamped and this is the intrinsic size at the
   // time of the clamp.
   absl::optional<LayoutUnit> intrinsic_block_size_when_clamped_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
index 943996a..96d37f4 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
@@ -89,8 +89,9 @@
     may_have_descendant_above_block_start_ = b;
   }
 
-  void SetExclusionSpace(NGExclusionSpace&& exclusion_space) {
-    exclusion_space_ = std::move(exclusion_space);
+  NGExclusionSpace& ExclusionSpace() { return exclusion_space_; }
+  void SetExclusionSpace(const NGExclusionSpace& exclusion_space) {
+    exclusion_space_ = exclusion_space;
   }
 
   void SetLinesUntilClamp(const absl::optional<int>& value) {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h
index 1a10289..4adffc7 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h
@@ -128,6 +128,10 @@
     return container_builder_.ChildAvailableSize();
   }
 
+  NGExclusionSpace& ExclusionSpace() {
+    return container_builder_.ExclusionSpace();
+  }
+
   // Lay out again, this time with a predefined good breakpoint that we
   // discovered in the first pass. This happens when we run out of space in a
   // fragmentainer at an less-than-ideal location, due to breaking restrictions,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
index cebb78a6..08a4b0d 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
@@ -67,8 +67,7 @@
     if (result.LinesUntilClamp())
       container_builder_.SetLinesUntilClamp(result.LinesUntilClamp());
 
-    NGExclusionSpace exclusion_space = result.ExclusionSpace();
-    container_builder_.SetExclusionSpace(std::move(exclusion_space));
+    container_builder_.SetExclusionSpace(result.ExclusionSpace());
 
     if (result.IsSelfCollapsing())
       container_builder_.SetIsSelfCollapsing();
@@ -162,15 +161,17 @@
   } else {
     container_builder_.SetIntrinsicBlockSize(result.IntrinsicBlockSize());
 
-    LayoutUnit new_block_size = ComputeBlockSizeForFragment(
-        ConstraintSpace(), Style(), BorderPadding(),
-        result.IntrinsicBlockSize(),
-        container_builder_.InitialBorderBoxSize().inline_size);
+    auto ComputeNewBlockSize = [&]() -> LayoutUnit {
+      return ComputeBlockSizeForFragment(
+          ConstraintSpace(), Style(), BorderPadding(),
+          result.IntrinsicBlockSize(),
+          container_builder_.InitialBorderBoxSize().inline_size);
+    };
 
     // Only block-flow is allowed to change its block-size during "simplified"
     // layout, all other layout types must remain the same size.
     if (is_block_flow) {
-      container_builder_.SetFragmentBlockSize(new_block_size);
+      container_builder_.SetFragmentBlockSize(ComputeNewBlockSize());
     } else {
       LayoutUnit old_block_size =
           NGFragment(writing_direction_, physical_fragment).BlockSize();
@@ -179,7 +180,7 @@
       if (!physical_fragment.IsTableNG() &&
           !physical_fragment.IsTableNGSection() &&
           !physical_fragment.IsTableNGRow())
-        DCHECK_EQ(old_block_size, new_block_size);
+        DCHECK_EQ(old_block_size, ComputeNewBlockSize());
 #endif
       container_builder_.SetFragmentBlockSize(old_block_size);
     }
diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc
index c5714d11..a284d18 100644
--- a/third_party/blink/renderer/core/messaging/message_port.cc
+++ b/third_party/blink/renderer/core/messaging/message_port.cc
@@ -36,6 +36,7 @@
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_post_message_options.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/mojo/test/mojo_interface_interceptor.cc b/third_party/blink/renderer/core/mojo/test/mojo_interface_interceptor.cc
index 0de520a..895786e 100644
--- a/third_party/blink/renderer/core/mojo/test/mojo_interface_interceptor.cc
+++ b/third_party/blink/renderer/core/mojo/test/mojo_interface_interceptor.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
index 99898be..d333f867 100644
--- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
+++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
@@ -12,6 +12,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h"
 #include "third_party/blink/renderer/core/html/canvas/html_canvas_element.h"
 #include "third_party/blink/renderer/core/imagebitmap/image_bitmap_source.h"
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.cc b/third_party/blink/renderer/core/paint/paint_invalidator.cc
index 0115676..45afa7d 100644
--- a/third_party/blink/renderer/core/paint/paint_invalidator.cc
+++ b/third_party/blink/renderer/core/paint/paint_invalidator.cc
@@ -237,7 +237,6 @@
 
   UpdatePaintingLayer(object, context);
 
-#if DCHECK_IS_ON()
   // Assert that the container state in the invalidation context is consistent
   // with what the LayoutObject tree says. We cannot do this if we're fragment-
   // traversing an "orphaned" object (an object that has a fragment inside a
@@ -245,9 +244,7 @@
   // happen to OOFs, and also to floats, if they are inside a non-atomic
   // inline). In such cases we'll just have to live with the inconsitency, which
   // means that we'll lose any paint effects from such "missing" ancestors.
-  if (!pre_paint_info || !pre_paint_info->is_inside_orphaned_object)
-    DCHECK_EQ(context.painting_layer, object.PaintingLayer()) << object;
-#endif  // DCHECK_IS_ON()
+  DCHECK_EQ(context.painting_layer, object.PaintingLayer()) << object;
 
   if (AXObjectCache* cache = object.GetDocument().ExistingAXObjectCache())
     cache->InvalidateBoundingBox(&object);
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
index d6396567..bcb05d30 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -2507,6 +2507,16 @@
 
   DCHECK(!(non_composited_main_thread_scrolling_reasons_ &
            ~cc::MainThreadScrollingReason::kNonCompositedReasons));
+
+  if (!box->GetFrame()->Client()->GetWebFrame()) {
+    // If there's no WebFrame, then there's no WebFrameWidget, and we can't do
+    // threaded scrolling.  This currently only happens in a WebPagePopup.
+    // (However, we still allow needs_composited_scrolling to be true in this
+    // case, so that the scroller gets layerized.)
+    non_composited_main_thread_scrolling_reasons_ |=
+        cc::MainThreadScrollingReason::kPopupNoThreadedInput;
+  }
+
   return needs_composited_scrolling;
 }
 
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index d32f091..967a06b 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -14,6 +14,7 @@
 #include "third_party/blink/renderer/core/document_transition/document_transition_supplement.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
+#include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/frame/visual_viewport.h"
@@ -275,10 +276,9 @@
           oof_context) const {
     context_.current = oof_context;
 
-    // If we're not block-fragmented, or if we're traversing the fragment tree
-    // to an orphaned object, simply setting a new context is all we have to do.
-    if (!oof_context.is_in_block_fragmentation ||
-        (pre_paint_info_ && pre_paint_info_->is_inside_orphaned_object))
+    // If we're not block-fragmented, simply setting a new context is all we
+    // have to do.
+    if (!oof_context.is_in_block_fragmentation)
       return;
 
     // Inside NG block fragmentation we have to perform an offset adjustment.
@@ -2036,6 +2036,14 @@
     if (!object.GetFrame()->GetSettings()->GetThreadedScrollingEnabled())
       reasons |= cc::MainThreadScrollingReason::kThreadedScrollingDisabled;
   }
+
+  if (!object.GetFrame()->Client()->GetWebFrame()) {
+    // If there's no WebFrame, then there's no WebFrameWidget, and we can't do
+    // threaded scrolling.  This currently only happens in a WebPagePopup.
+    // (However, we still allow needs_composited_scrolling to be true in this
+    // case, so that the scroller gets layerized.)
+    reasons |= cc::MainThreadScrollingReason::kPopupNoThreadedInput;
+  }
   return reasons;
 }
 
@@ -2542,10 +2550,8 @@
         break;
       case EPosition::kAbsolute: {
 #if DCHECK_IS_ON()
-        if (!pre_paint_info_ || !pre_paint_info_->is_inside_orphaned_object) {
-          DCHECK_EQ(full_context_.container_for_absolute_position,
-                    box_model_object.Container());
-        }
+        DCHECK_EQ(full_context_.container_for_absolute_position,
+                  box_model_object.Container());
 #endif
         SwitchToOOFContext(context_.absolute_position);
 
@@ -2565,12 +2571,9 @@
       case EPosition::kSticky:
         break;
       case EPosition::kFixed: {
-#if DCHECK_IS_ON()
-        if (!pre_paint_info_ || !pre_paint_info_->is_inside_orphaned_object) {
-          DCHECK_EQ(full_context_.container_for_fixed_position,
-                    box_model_object.Container());
-        }
-#endif
+        DCHECK_EQ(full_context_.container_for_fixed_position,
+                  box_model_object.Container());
+
         SwitchToOOFContext(context_.fixed_position);
         // Fixed-position elements that are fixed to the viewport have a
         // transform above the scroll of the LayoutView. Child content is
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.h b/third_party/blink/renderer/core/paint/paint_property_tree_builder.h
index 301830b..45b666b 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.h
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.h
@@ -274,14 +274,12 @@
                  wtf_size_t fragmentainer_idx,
                  bool is_first_for_node,
                  bool is_last_for_node,
-                 bool is_inside_orphaned_object,
                  bool is_inside_fragment_child)
       : box_fragment(box_fragment),
         paint_offset(paint_offset),
         fragmentainer_idx(fragmentainer_idx),
         is_first_for_node(is_first_for_node),
         is_last_for_node(is_last_for_node),
-        is_inside_orphaned_object(is_inside_orphaned_object),
         is_inside_fragment_child(is_inside_fragment_child) {}
 
   // The fragment for the LayoutObject currently being processed, or, in the
@@ -294,12 +292,6 @@
   bool is_first_for_node;
   bool is_last_for_node;
 
-  // True if we're fragment-traversing an object (OOF or float) directly,
-  // instead of walking the layout object tree. In this case, the property /
-  // invalidation context chains will be missing ancestors between the
-  // fragmentainer and the OOF / float.
-  bool is_inside_orphaned_object;
-
   // True if |box_fragment| is the containing block of the LayoutObject
   // currently being processed. Otherwise, |box_fragment| is a fragment for the
   // LayoutObject itself.
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
index 5fa3bd7..c1cfa35 100644
--- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
+++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -355,7 +355,6 @@
   return NGPrePaintInfo(fragment, child.offset,
                         context.current_fragmentainer.fragmentainer_idx,
                         fragment.IsFirstForNode(), !fragment.BreakToken(),
-                        context.is_inside_orphaned_object,
                         /* is_inside_fragment_child */ false);
 }
 
@@ -442,6 +441,34 @@
   return fragment_data;
 }
 
+void PrePaintTreeWalk::UpdateContextForOOFContainer(
+    const LayoutObject& object,
+    PrePaintTreeWalkContext& context) {
+  DCHECK(object.CanContainAbsolutePositionObjects());
+
+  const LayoutBox* box = DynamicTo<LayoutBox>(&object);
+  if (context.current_fragmentainer.fragment && box &&
+      box->GetNGPaginationBreakability() == LayoutBox::kForbidBreaks) {
+    // If we're in a fragmentation context, the parent fragment of OOFs is the
+    // fragmentainer, unless the object is monolithic, in which case nothing
+    // inside the object participates in the current block fragmentation
+    // context. This means that this object (and not the nearest fragmentainer)
+    // acts as a containing block for OOF descendants,
+    context.current_fragmentainer = {};
+  }
+
+  // The OOF containing block structure is special under block fragmentation: A
+  // fragmentable OOF is always a direct child of a fragmentainer.
+  context.absolute_positioned_container = context.current_fragmentainer;
+  if (!context.absolute_positioned_container.fragment) {
+    context.absolute_positioned_container.fragment =
+        context.oof_container_candidate_fragment;
+  }
+  if (object.CanContainFixedPositionObjects()) {
+    context.fixed_positioned_container = context.absolute_positioned_container;
+  }
+}
+
 void PrePaintTreeWalk::WalkInternal(const LayoutObject& object,
                                     PrePaintTreeWalkContext& context,
                                     NGPrePaintInfo* pre_paint_info) {
@@ -553,8 +580,41 @@
   return has_missable_children;
 }
 
-void PrePaintTreeWalk::WalkMissedChildren(const NGPhysicalBoxFragment& fragment,
-                                          PrePaintTreeWalkContext& context) {
+void PrePaintTreeWalk::RebuildContextForMissedDescendant(
+    const LayoutObject& ancestor,
+    const LayoutObject& object,
+    PrePaintTreeWalkContext& context) {
+  // Walk up to the ancestor and, on the way down again, adjust the context with
+  // info about OOF containing blocks.
+  if (&object == &ancestor)
+    return;
+  RebuildContextForMissedDescendant(ancestor, *object.Parent(), context);
+
+  if (!object.CanContainAbsolutePositionObjects())
+    return;
+
+  UpdateContextForOOFContainer(object, context);
+  if (!context.tree_builder_context)
+    return;
+
+  PaintPropertyTreeBuilderContext& property_context =
+      *context.tree_builder_context;
+  PaintPropertyTreeBuilderFragmentContext& fragment_context =
+      property_context.fragments[0];
+  // Reset the relevant OOF context to this fragmentainer, since this is its
+  // containing block, as far as the NG fragment structure is concerned.
+  property_context.container_for_absolute_position = &object;
+  fragment_context.absolute_position = fragment_context.current;
+  if (object.CanContainFixedPositionObjects()) {
+    property_context.container_for_fixed_position = &object;
+    fragment_context.fixed_position = fragment_context.current;
+  }
+}
+
+void PrePaintTreeWalk::WalkMissedChildren(
+    const LayoutObject& ancestor,
+    const NGPhysicalBoxFragment& fragment,
+    const PrePaintTreeWalkContext& context) {
   if (pending_missables_.IsEmpty())
     return;
 
@@ -566,21 +626,10 @@
     const LayoutObject& descendant_object = *child->GetLayoutObject();
     PrePaintTreeWalkContext descendant_context(
         context, NeedsTreeBuilderContextUpdate(descendant_object, context));
-    if (child->IsOutOfFlowPositioned() &&
-        descendant_context.tree_builder_context) {
-      PaintPropertyTreeBuilderFragmentContext& fragment_context =
-          descendant_context.tree_builder_context->fragments[0];
-      // Reset the relevant OOF context to this fragmentainer, since this is its
-      // containing block, as far as the NG fragment structure is concerned.
-      // Note that when walking a missed child OOF fragment, we'll also
-      // forcefully miss any OOF descendant nodes, which is why we only set the
-      // context for the OOF type we're dealing with here.
-      if (child->IsFixedPositioned())
-        fragment_context.fixed_position = fragment_context.current;
-      else
-        fragment_context.absolute_position = fragment_context.current;
+    if (child->IsOutOfFlowPositioned()) {
+      RebuildContextForMissedDescendant(ancestor, *descendant_object.Parent(),
+                                        descendant_context);
     }
-    descendant_context.is_inside_orphaned_object = true;
 
     NGPrePaintInfo pre_paint_info =
         CreatePrePaintInfo(child, descendant_context);
@@ -700,22 +749,6 @@
            child->IsLayoutMultiColumnSpannerPlaceholder());
     child->GetMutableForPainting().ClearPaintFlags();
   }
-
-  // If we missed any nested fixpos elements during fragment traversal, that
-  // means that their containing block lives outside the fragmentation context
-  // root. Walk these missed fixepos elements now.
-  if (!pending_fixedpos_missables_.IsEmpty()) {
-    // First make a copy, clear the original set, and then walk the copy. There
-    // may be descendants attempting to walk the set as well, which will cause
-    // an infinite recursion.
-    HeapHashSet<Member<const LayoutObject>> copy;
-    copy.swap(pending_fixedpos_missables_);
-    for (const auto& fixedpos : copy) {
-      DCHECK(!walked_fixedpos_.Contains(fixedpos));
-      walked_fixedpos_.insert(fixedpos);
-      Walk(*fixedpos, parent_context, /* pre_paint_info */ nullptr);
-    }
-  }
 }
 
 void PrePaintTreeWalk::WalkLayoutObjectChildren(
@@ -742,14 +775,6 @@
       continue;
     }
 
-    // If we're in the middle of walking a missed OOF, don't enter nested OOFs
-    // (but miss those as well, and handle them via fragment traversal).
-    if (context.is_inside_orphaned_object && child->IsOutOfFlowPositioned()) {
-      if (child->IsFixedPositioned() && !walked_fixedpos_.Contains(child))
-        pending_fixedpos_missables_.insert(child);
-      continue;
-    }
-
     // Perform an NGPhysicalBoxFragment-accompanied walk of the child
     // LayoutObject tree.
     //
@@ -920,10 +945,9 @@
     }
 
     if (box_fragment) {
-      NGPrePaintInfo pre_paint_info(
-          *box_fragment, paint_offset, fragmentainer_idx, is_first_for_node,
-          is_last_for_node, context.is_inside_orphaned_object,
-          is_inside_fragment_child);
+      NGPrePaintInfo pre_paint_info(*box_fragment, paint_offset,
+                                    fragmentainer_idx, is_first_for_node,
+                                    is_last_for_node, is_inside_fragment_child);
       Walk(*child, context, &pre_paint_info);
     } else {
       Walk(*child, context, /* pre_paint_info */ nullptr);
@@ -985,28 +1009,8 @@
 
   // Keep track of fragments that act as containers for OOFs, so that we can
   // search their children when looking for an OOF further down in the tree.
-  if (object.CanContainAbsolutePositionObjects()) {
-    if (context.current_fragmentainer.fragment && box &&
-        box->GetNGPaginationBreakability() == LayoutBox::kForbidBreaks) {
-      // If we're in a fragmentation context, the parent fragment of OOFs is the
-      // fragmentainer, unless the object is monolithic, in which case nothing
-      // inside the object participates in the current block fragmentation
-      // context. This means that this object (and not the nearest
-      // fragmentainer) acts as a containing block for OOF descendants,
-      context.current_fragmentainer = {};
-    }
-    // The OOF containing block structure is special under block fragmentation:
-    // A fragmentable OOF is always a direct child of a fragmentainer.
-    context.absolute_positioned_container = context.current_fragmentainer;
-    if (!context.absolute_positioned_container.fragment) {
-      context.absolute_positioned_container.fragment =
-          context.oof_container_candidate_fragment;
-    }
-    if (object.CanContainFixedPositionObjects()) {
-      context.fixed_positioned_container =
-          context.absolute_positioned_container;
-    }
-  }
+  if (object.CanContainAbsolutePositionObjects())
+    UpdateContextForOOFContainer(object, context);
 
   if (fragment) {
     bool has_missable_children = false;
@@ -1025,7 +1029,7 @@
       WalkLayoutObjectChildren(object, fragment, context);
 
     if (has_missable_children)
-      WalkMissedChildren(*fragment, context);
+      WalkMissedChildren(object, *fragment, context);
   } else {
     WalkLayoutObjectChildren(object, fragment, context);
   }
@@ -1039,13 +1043,8 @@
   if (pre_paint_info) {
     physical_fragment = &pre_paint_info->box_fragment;
     if (physical_fragment && (physical_fragment->IsOutOfFlowPositioned() ||
-                              physical_fragment->IsFloating())) {
+                              physical_fragment->IsFloating()))
       pending_missables_.erase(physical_fragment);
-      if (object.IsFixedPositioned()) {
-        pending_fixedpos_missables_.erase(&object);
-        walked_fixedpos_.insert(&object);
-      }
-    }
     is_inside_fragment_child = pre_paint_info->is_inside_fragment_child;
   }
 
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
index 097bc33..4e1d5f4 100644
--- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
+++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
@@ -75,13 +75,6 @@
     // subtree may need to update.
     bool blocking_wheel_event_handler_changed = false;
 
-    // True if we're fragment-traversing an object whose fragment wasn't found
-    // and walked when walking the layout object tree. This may happen for
-    // out-of-flow positioned and floated fragments inside block fragmentation,
-    // when an ancestor object doesn't have a fragment representation in a
-    // fragmentainer even if the OOF / float is there.
-    bool is_inside_orphaned_object = false;
-
     // True if we're visiting the parent for the first time, i.e. when we're in
     // the first fragmentainer where the parent occurs (or if we're not
     // fragmented at all).
@@ -157,6 +150,9 @@
                                         const PrePaintTreeWalkContext&,
                                         const NGPrePaintInfo&);
 
+  void UpdateContextForOOFContainer(const LayoutObject&,
+                                    PrePaintTreeWalkContext&);
+
   void Walk(LocalFrameView&, const PrePaintTreeWalkContext& parent_context);
 
   // This is to minimize stack frame usage during recursion. Modern compilers
@@ -181,10 +177,17 @@
   bool CollectMissableChildren(PrePaintTreeWalkContext&,
                                const NGPhysicalBoxFragment&);
 
+  // Based on the context established by |ancestor|, modify it to become correct
+  // for |object|, at least as far as OOF containing block info is concerned.
+  void RebuildContextForMissedDescendant(const LayoutObject& ancestor,
+                                         const LayoutObject& object,
+                                         PrePaintTreeWalkContext&);
+
   // Walk any missed children (i.e. those collected by CollectMissableChildren()
   // and not walked by Walk()) after child object traversal.
-  void WalkMissedChildren(const NGPhysicalBoxFragment&,
-                          PrePaintTreeWalkContext&);
+  void WalkMissedChildren(const LayoutObject& ancestor,
+                          const NGPhysicalBoxFragment&,
+                          const PrePaintTreeWalkContext&);
 
   void WalkFragmentationContextRootChildren(const LayoutObject&,
                                             const NGPhysicalBoxFragment&,
@@ -225,17 +228,6 @@
   // CollectMissableChildren() and WalkMissedChildren().
   HeapHashSet<Member<const NGPhysicalFragment>> pending_missables_;
 
-  // List of fixedpos objects that may be missed during fragment traversal. This
-  // can happen if a fixedpos is nested in another OOF inside a multicol, and
-  // the OOF parent is a pending missable (see |pending_missables_|). If that
-  // fixedpos' containing block is located outside of the multicol, we can would
-  // miss it during normal fragment traversal.
-  HeapHashSet<Member<const LayoutObject>> pending_fixedpos_missables_;
-
-  // List of fixedpos objects that have already been walked. This helps to avoid
-  // re-walking any fixedpos objects handled by |pending_fixedpos_missables_|.
-  HeapHashSet<Member<const LayoutObject>> walked_fixedpos_;
-
   bool needs_invalidate_chrome_client_ = false;
 
   FRIEND_TEST_ALL_PREFIXES(PrePaintTreeWalkTest, ClipRects);
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc
index 2e51da9b..04b3626 100644
--- a/third_party/blink/renderer/core/timing/performance.cc
+++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -54,6 +54,7 @@
 #include "third_party/blink/renderer/core/dom/document_timing.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/timing/profiler.cc b/third_party/blink/renderer/core/timing/profiler.cc
index 0bee7ae..b5a583de 100644
--- a/third_party/blink/renderer/core/timing/profiler.cc
+++ b/third_party/blink/renderer/core/timing/profiler.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/timing/profiler.h"
 
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/timing/dom_window_performance.h"
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
index b3a78cc8..04138a1 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_factory.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_trusted_script_url.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/before_create_policy_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index e16779b..47dac87 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -23,6 +23,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_post_message_options.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fetch/request.h"
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
index 6172da2..4da8ccf 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -40,6 +40,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_post_message_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/agent.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
diff --git a/third_party/blink/renderer/core/workers/shared_worker.cc b/third_party/blink/renderer/core/workers/shared_worker.cc
index 145e7a2..1e19049 100644
--- a/third_party/blink/renderer/core/workers/shared_worker.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker.cc
@@ -38,6 +38,7 @@
 #include "third_party/blink/public/mojom/worker/shared_worker_info.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_string_workeroptions.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_worker_options.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fetch/request.h"
 #include "third_party/blink/renderer/core/fileapi/public_url_manager.h"
diff --git a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
index 95f1474e..ef52842 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
@@ -37,6 +37,7 @@
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/agent.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
index 2c8d14a..ce1401c1 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
+++ b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
@@ -15,6 +15,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
index 19a241f8..a94f7ca 100644
--- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
+++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
@@ -44,6 +44,7 @@
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/dom/xml_document.h"
 #include "third_party/blink/renderer/core/editing/serializers/serialization.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/progress_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fetch/trust_token_issuance_authorization.h"
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_upload.cc b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_upload.cc
index c7995e9..8173ebc 100644
--- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_upload.cc
+++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_upload.cc
@@ -25,6 +25,7 @@
 
 #include "third_party/blink/renderer/core/xmlhttprequest/xml_http_request_upload.h"
 
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/event_type_names.h"
 #include "third_party/blink/renderer/core/events/progress_event.h"
 #include "third_party/blink/renderer/core/probe/core_probes.h"
diff --git a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc
index 2de8d10..8992696 100644
--- a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc
+++ b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-shared.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard.cc b/third_party/blink/renderer/modules/clipboard/clipboard.cc
index bf5f8c7..f08ebfc 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard.cc
+++ b/third_party/blink/renderer/modules/clipboard/clipboard.cc
@@ -7,6 +7,7 @@
 #include <utility>
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_clipboard_item_options.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/navigator.h"
 #include "third_party/blink/renderer/modules/clipboard/clipboard_promise.h"
diff --git a/third_party/blink/renderer/modules/eventsource/event_source.cc b/third_party/blink/renderer/modules/eventsource/event_source.cc
index a6646b9..76e64511 100644
--- a/third_party/blink/renderer/modules/eventsource/event_source.cc
+++ b/third_party/blink/renderer/modules/eventsource/event_source.cc
@@ -42,6 +42,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_factory.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_event_source_init.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer.cc b/third_party/blink/renderer/modules/mediasource/source_buffer.cc
index 151473f..ee930370 100644
--- a/third_party/blink/renderer/modules/mediasource/source_buffer.cc
+++ b/third_party/blink/renderer/modules/mediasource/source_buffer.cc
@@ -43,6 +43,7 @@
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/public/platform/web_source_buffer.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_audio_decoder_config.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_encoded_audio_chunk.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_encoded_video_chunk.h"
@@ -1155,7 +1156,8 @@
     // TODO(crbug.com/1144908): Consider moving this verbosity to eventual
     // specification.
     DCHECK(append_encoded_chunks_resolver_);
-    append_encoded_chunks_resolver_->Reject(MakeGarbageCollected<DOMException>(
+    append_encoded_chunks_resolver_->Reject(V8ThrowDOMException::CreateOrDie(
+        append_encoded_chunks_resolver_->GetScriptState()->GetIsolate(),
         DOMExceptionCode::kAbortError, "Aborted by explicit abort()"));
     append_encoded_chunks_resolver_ = nullptr;
     TRACE_EVENT_NESTABLE_ASYNC_END0(
@@ -2164,7 +2166,8 @@
     // attachment will send updated buffered and seekable information to the
     // main thread here, too.
     AppendError(pass_key);
-    append_encoded_chunks_resolver_->Reject(MakeGarbageCollected<DOMException>(
+    append_encoded_chunks_resolver_->Reject(V8ThrowDOMException::CreateOrDie(
+        append_encoded_chunks_resolver_->GetScriptState()->GetIsolate(),
         DOMExceptionCode::kSyntaxError,
         "Parsing or frame processing error while buffering encoded chunks."));
     append_encoded_chunks_resolver_ = nullptr;
diff --git a/third_party/blink/renderer/modules/mediastream/video_track_adapter.h b/third_party/blink/renderer/modules/mediastream/video_track_adapter.h
index 9c0fe67c..5182eaa 100644
--- a/third_party/blink/renderer/modules/mediastream/video_track_adapter.h
+++ b/third_party/blink/renderer/modules/mediastream/video_track_adapter.h
@@ -42,6 +42,8 @@
  public:
   using OnMutedCallback = base::RepeatingCallback<void(bool mute_state)>;
 
+  // TODO(https://crbug.com/1296138): Remove |metronome_provider|, it is not
+  // used anymore.
   VideoTrackAdapter(
       scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
       scoped_refptr<MetronomeProvider> metronome_provider,
diff --git a/third_party/blink/renderer/modules/mediastream/video_track_adapter_unittest.cc b/third_party/blink/renderer/modules/mediastream/video_track_adapter_unittest.cc
index 5a2937255..261bf7e8 100644
--- a/third_party/blink/renderer/modules/mediastream/video_track_adapter_unittest.cc
+++ b/third_party/blink/renderer/modules/mediastream/video_track_adapter_unittest.cc
@@ -269,49 +269,6 @@
             base::DoNothing(), base::DoNothing(), adapter_settings));
   }
 
-  void StartFrameMonitoring() {
-    base::WaitableEvent frame_monitoring_started;
-    testing_render_thread_.task_runner()->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            [](scoped_refptr<VideoTrackAdapter> adapter,
-               scoped_refptr<base::SequencedTaskRunner> io_task_runner,
-               base::WaitableEvent* frame_monitoring_started) {
-              adapter->StartFrameMonitoring(
-                  30.0, base::BindRepeating([](bool mute_state) {}));
-              // Signal the event on the IO thread because that is where frame
-              // monitoring starts internally.
-              io_task_runner->PostTask(
-                  FROM_HERE,
-                  base::BindOnce(&base::WaitableEvent::Signal,
-                                 base::Unretained(frame_monitoring_started)));
-            },
-            adapter_, platform_support_->GetIOTaskRunner(),
-            base::Unretained(&frame_monitoring_started)));
-    frame_monitoring_started.Wait();
-  }
-
-  void StopFrameMonitoring() {
-    base::WaitableEvent frame_monitoring_stopped;
-    testing_render_thread_.task_runner()->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            [](scoped_refptr<VideoTrackAdapter> adapter,
-               scoped_refptr<base::SequencedTaskRunner> io_task_runner,
-               base::WaitableEvent* frame_monitoring_stopped) {
-              adapter->StopFrameMonitoring();
-              // Signal the event on the IO thread because that is where frame
-              // monitoring stops internally.
-              io_task_runner->PostTask(
-                  FROM_HERE,
-                  base::BindOnce(&base::WaitableEvent::Signal,
-                                 base::Unretained(frame_monitoring_stopped)));
-            },
-            adapter_, platform_support_->GetIOTaskRunner(),
-            base::Unretained(&frame_monitoring_stopped)));
-    frame_monitoring_stopped.Wait();
-  }
-
   void SetFrameValidationCallback(VideoCaptureDeliverFrameCB callback) {
     frame_validation_callback_ = std::move(callback);
   }
@@ -366,29 +323,6 @@
   bool track_added_ = false;
 };
 
-// Verifies that the metronome is used while frame monioring. For testing of the
-// mute detection logic that is based on this frame monitoring, see
-// MediaStreamVideoSourceTest.MutedSource instead.
-TEST_F(VideoTrackAdapterFixtureTest, MetronomeIsUsedWhileFrameMonitoring) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(kWebRtcTimerUsesMetronome);
-
-  scoped_refptr<MetronomeSource> metronome_source =
-      base::MakeRefCounted<MetronomeSource>(base::TimeTicks::Now(),
-                                            base::Hertz(64));
-  metronome_provider_->OnStartUsingMetronome(metronome_source);
-
-  const media::VideoCaptureFormat stream_format(gfx::Size(1280, 960), 30.0,
-                                                media::PIXEL_FORMAT_NV12);
-  CreateAdapter(stream_format);
-
-  EXPECT_FALSE(metronome_provider_->HasListeners());
-  StartFrameMonitoring();
-  EXPECT_TRUE(metronome_provider_->HasListeners());
-  StopFrameMonitoring();
-  EXPECT_FALSE(metronome_provider_->HasListeners());
-}
-
 TEST_F(VideoTrackAdapterFixtureTest, DeliverFrame_GpuMemoryBuffer) {
   // Attributes for the original input frame.
   const gfx::Size kCodedSize(1280, 960);
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
index 836b117..10473ea6 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -90,8 +90,6 @@
 
 using PassKey = base::PassKey<PeerConnectionDependencyFactory>;
 
-constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
-
 enum WebRTCIPHandlingPolicy {
   kDefault,
   kDefaultPublicAndPrivateInterfaces,
@@ -158,8 +156,7 @@
     webrtc::ThreadWrapper::current()->set_send_allowed(true);
   }
 
-  base::WaitableEvent& InitializeWorkerThread(
-      scoped_refptr<blink::MetronomeSource> metronome_source) {
+  base::WaitableEvent& InitializeWorkerThread() {
     if (!worker_thread_) {
       PostCrossThreadTask(
           *chrome_worker_thread_.task_runner(), FROM_HERE,
@@ -170,14 +167,12 @@
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
                   PeerConnectionStaticDeps::LogTaskLatencyWorker)),
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
-                  PeerConnectionStaticDeps::LogTaskDurationWorker)),
-              metronome_source));
+                  PeerConnectionStaticDeps::LogTaskDurationWorker))));
     }
     return init_worker_event;
   }
 
-  base::WaitableEvent& InitializeNetworkThread(
-      scoped_refptr<blink::MetronomeSource> metronome_source) {
+  base::WaitableEvent& InitializeNetworkThread() {
     if (!network_thread_) {
       PostCrossThreadTask(
           *chrome_network_thread_.task_runner(), FROM_HERE,
@@ -188,14 +183,12 @@
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
                   PeerConnectionStaticDeps::LogTaskLatencyNetwork)),
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
-                  PeerConnectionStaticDeps::LogTaskDurationNetwork)),
-              metronome_source));
+                  PeerConnectionStaticDeps::LogTaskDurationNetwork))));
     }
     return init_network_event;
   }
 
-  base::WaitableEvent& InitializeSignalingThread(
-      scoped_refptr<blink::MetronomeSource> metronome_source) {
+  base::WaitableEvent& InitializeSignalingThread() {
     if (!signaling_thread_) {
       PostCrossThreadTask(
           *chrome_signaling_thread_.task_runner(), FROM_HERE,
@@ -206,8 +199,7 @@
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
                   PeerConnectionStaticDeps::LogTaskLatencySignaling)),
               ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
-                  PeerConnectionStaticDeps::LogTaskDurationSignaling)),
-              metronome_source));
+                  PeerConnectionStaticDeps::LogTaskDurationSignaling))));
     }
     return init_signaling_event;
   }
@@ -254,9 +246,8 @@
       rtc::Thread** thread,
       base::WaitableEvent* event,
       base::RepeatingCallback<void(base::TimeDelta)> latency_callback,
-      base::RepeatingCallback<void(base::TimeDelta)> duration_callback,
-      scoped_refptr<blink::MetronomeSource> metronome_source) {
-    webrtc::ThreadWrapper::EnsureForCurrentMessageLoop(metronome_source);
+      base::RepeatingCallback<void(base::TimeDelta)> duration_callback) {
+    webrtc::ThreadWrapper::EnsureForCurrentMessageLoop();
     webrtc::ThreadWrapper::current()->set_send_allowed(true);
     webrtc::ThreadWrapper::current()->SetLatencyAndTaskDurationCallbacks(
         std::move(latency_callback), std::move(duration_callback));
@@ -477,23 +468,14 @@
         ExecutionContextMetronomeProvider::From(*GetExecutionContext())
             .metronome_provider();
     DCHECK(metronome_provider_);
-    metronome_source_ = base::MakeRefCounted<MetronomeSource>(
-        // By using a constant metronome phase (zero), MetronomeSources will be
-        // synchronized across process boundaries.
-        base::TimeTicks(), kMetronomeTick);
+    metronome_source_ = base::MakeRefCounted<MetronomeSource>();
   }
 
-  bool threads_uses_metronome =
-      base::FeatureList::IsEnabled(webrtc::kThreadWrapperUsesMetronome);
-  DCHECK(metronome_source_);
   StaticDeps().EnsureChromeThreadsStarted();
   base::WaitableEvent& worker_thread_started_event =
-      StaticDeps().InitializeWorkerThread(
-          threads_uses_metronome ? metronome_source_ : nullptr);
-  StaticDeps().InitializeNetworkThread(
-      threads_uses_metronome ? metronome_source_ : nullptr);
-  StaticDeps().InitializeSignalingThread(
-      threads_uses_metronome ? metronome_source_ : nullptr);
+      StaticDeps().InitializeWorkerThread();
+  StaticDeps().InitializeNetworkThread();
+  StaticDeps().InitializeSignalingThread();
 
 #if BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
   // Building /w |rtc_use_h264|, is the corresponding run-time feature enabled?
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
index 253b2255..cfd7cc2 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
@@ -195,6 +195,8 @@
   std::unique_ptr<IpcPacketSocketFactory> socket_factory_;
 
   scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_;
+  // TODO(https://crbug.com/1296138): Delete MetronomeProvider and related
+  // plumbing code, it is no longer used.
   scoped_refptr<MetronomeProvider> metronome_provider_;
   scoped_refptr<MetronomeSource> metronome_source_;
 
diff --git a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
index 2838a0a..6d6b619f 100644
--- a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
+++ b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
@@ -13,6 +13,7 @@
 #include "third_party/blink/public/mojom/worker/subresource_loader_updater.mojom-blink.h"
 
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/code_cache_loader.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/code_cache_loader.h
index 2b8f66b..9bfb674 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/code_cache_loader.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/code_cache_loader.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "third_party/blink/public/platform/web_code_cache_loader.h"
+#include "third_party/blink/public/platform/web_common.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc b/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
index 6132b7e..7ca16b2 100644
--- a/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
@@ -21,17 +21,16 @@
 
 namespace {
 
-constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
-
 class MetronomeSourceTest : public ::testing::Test {
  public:
   MetronomeSourceTest()
       : task_environment_(
             base::test::TaskEnvironment::ThreadingMode::MULTIPLE_THREADS,
             base::test::TaskEnvironment::TimeSource::MOCK_TIME),
-        metronome_source_(
-            base::MakeRefCounted<MetronomeSource>(base::TimeTicks::Now(),
-                                                  kMetronomeTick)) {}
+        metronome_source_(base::MakeRefCounted<MetronomeSource>()) {
+    task_environment_.FastForwardBy(
+        metronome_source_->EnsureNextTickAndGetDelayForTesting());
+  }
 
  protected:
   base::test::TaskEnvironment task_environment_;
@@ -147,7 +146,7 @@
               },
               task_runner, base::Unretained(&was_called)));
 
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_TRUE(was_called);
 
   // Cleanup.
@@ -166,22 +165,23 @@
                               base::Unretained(&callback_count)));
 
   // Fast-forward slightly less than a tick should not increment the counter.
-  task_environment_.FastForwardBy(kMetronomeTick - base::Milliseconds(1));
+  task_environment_.FastForwardBy(MetronomeSource::Tick() -
+                                  base::Milliseconds(1));
   EXPECT_EQ(callback_count, 0);
   // Fast-forward to the first tick.
   task_environment_.FastForwardBy(base::Milliseconds(1));
   EXPECT_EQ(callback_count, 1);
   // Fast-forward some more ticks.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 2);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 3);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 4);
 
   // Remove the listener and the counter should stop incrementing.
   metronome_source_->RemoveListener(listener_handle);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 4);
 }
 
@@ -198,7 +198,7 @@
 
   metronome_source_->RemoveListener(listener_handle);
   // The listener should be removed and not increment the counter.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 0);
 }
 
@@ -234,7 +234,8 @@
       base::ThreadPool::CreateSequencedTaskRunner({});
 
   // Set wakeup time to two ticks from now.
-  base::TimeTicks wakeup_time = base::TimeTicks::Now() + kMetronomeTick * 2;
+  base::TimeTicks wakeup_time =
+      base::TimeTicks::Now() + MetronomeSource::Tick() * 2;
 
   bool was_called = false;
   scoped_refptr<MetronomeSource::ListenerHandle> listener_handle =
@@ -246,10 +247,10 @@
 
   EXPECT_FALSE(was_called);
   // One trick is not sufficient for callback to be invoked.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_FALSE(was_called);
   // On the second tick, the callback should be invoked.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_TRUE(was_called);
 
   // Cleanup.
@@ -270,42 +271,44 @@
   EXPECT_EQ(callback_count, 0);
 
   // Wakeup next tick.
-  listener_handle->SetWakeupTime(base::TimeTicks::Now() + kMetronomeTick);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  listener_handle->SetWakeupTime(base::TimeTicks::Now() +
+                                 MetronomeSource::Tick());
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 1);
 
   // Not setting another wakeup results in being idle.
-  task_environment_.FastForwardBy(kMetronomeTick * 10);
+  task_environment_.FastForwardBy(MetronomeSource::Tick() * 10);
   EXPECT_EQ(callback_count, 1);
 
   // Wakeup 3 ticks from now.
-  listener_handle->SetWakeupTime(base::TimeTicks::Now() + kMetronomeTick * 3);
-  task_environment_.FastForwardBy(kMetronomeTick * 2);
+  listener_handle->SetWakeupTime(base::TimeTicks::Now() +
+                                 MetronomeSource::Tick() * 3);
+  task_environment_.FastForwardBy(MetronomeSource::Tick() * 2);
   EXPECT_EQ(callback_count, 1);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 2);
 
   // Wakeup slightly less than a tick from now.
-  listener_handle->SetWakeupTime(base::TimeTicks::Now() + kMetronomeTick -
-                                 base::Milliseconds(1));
-  task_environment_.FastForwardBy(kMetronomeTick);
+  listener_handle->SetWakeupTime(
+      base::TimeTicks::Now() + MetronomeSource::Tick() - base::Milliseconds(1));
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 3);
 
   // Wakeup slightly more than a tick from now.
-  listener_handle->SetWakeupTime(base::TimeTicks::Now() + kMetronomeTick +
-                                 base::Milliseconds(1));
-  task_environment_.FastForwardBy(kMetronomeTick);
+  listener_handle->SetWakeupTime(
+      base::TimeTicks::Now() + MetronomeSource::Tick() + base::Milliseconds(1));
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 3);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 4);
 
   // Wakeup every tick (stop being temporarily idle).
   listener_handle->SetWakeupTime(base::TimeTicks::Min());
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 5);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 6);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(callback_count, 7);
 
   // Cleanup.
@@ -313,7 +316,7 @@
 }
 
 TEST_F(MetronomeSourceTest, WebRtcMetronomeAdapterTickPeriod) {
-  EXPECT_EQ(kMetronomeTick.InMicroseconds(),
+  EXPECT_EQ(MetronomeSource::Tick().InMicroseconds(),
             metronome_source_->CreateWebRtcMetronome()->TickPeriod().us());
 }
 
@@ -331,16 +334,16 @@
   EXPECT_TRUE(metronome_source_->HasListenersForTesting());
 
   // Next tick should trigger callback.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(1, callback_count);
 
   // Each tick should trigger callback.
-  task_environment_.FastForwardBy(kMetronomeTick * 10);
+  task_environment_.FastForwardBy(MetronomeSource::Tick() * 10);
   EXPECT_EQ(11, callback_count);
 
   // Removing should not fire callback.
   metronome_adapter->RemoveListener(&tick_listener);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(11, callback_count);
 
   // Removing should inactivate metronome source.
@@ -359,7 +362,7 @@
   auto metronome_adapter = metronome_source_->CreateWebRtcMetronome();
 
   metronome_adapter->AddListener(&tick_listener);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(0, callback_count);
   // Now task should have been posted to fake queue. Running it should increase
   // the callback count.
@@ -371,7 +374,7 @@
   // `RemoveListener` has been called. This occurs when `RemoveListener` is
   // called after the metronome has ticked but before the task has been run on
   // the queue.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(1, callback_count);
 
   metronome_adapter->RemoveListener(&tick_listener);
@@ -380,80 +383,61 @@
   EXPECT_EQ(1, callback_count);
 }
 
-TEST(MetronomeSourcePhaseTest, MetronomesAlignByTheirPhase) {
+TEST(MetronomeSourcePhaseTest, MultipleMetronomesAreAligned) {
   base::test::TaskEnvironment task_environment(
       base::test::TaskEnvironment::ThreadingMode::MULTIPLE_THREADS,
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   scoped_refptr<base::SequencedTaskRunner> task_runner =
       base::ThreadPool::CreateSequencedTaskRunner({});
 
-  // Set up three metronomes with alignning ticks and one that is misaligned.
-  base::TimeTicks now = base::TimeTicks::Now();
-  base::TimeTicks phase_a = now - kMetronomeTick;
-  base::TimeTicks phase_b = now;
-  base::TimeTicks phase_c = now + kMetronomeTick;
-  base::TimeTicks phase_d = now - kMetronomeTick + base::Milliseconds(10);
-  scoped_refptr<MetronomeSource> metronome_a(
-      base::MakeRefCounted<MetronomeSource>(phase_a, kMetronomeTick));
-  scoped_refptr<MetronomeSource> metronome_b(
-      base::MakeRefCounted<MetronomeSource>(phase_b, kMetronomeTick));
-  scoped_refptr<MetronomeSource> metronome_c(
-      base::MakeRefCounted<MetronomeSource>(phase_c, kMetronomeTick));
-  scoped_refptr<MetronomeSource> metronome_d(
-      base::MakeRefCounted<MetronomeSource>(phase_d, kMetronomeTick));
+  // Create and align with first metronome.
+  scoped_refptr<MetronomeSource> metronome_a =
+      base::MakeRefCounted<MetronomeSource>();
+  task_environment.FastForwardBy(
+      metronome_a->EnsureNextTickAndGetDelayForTesting());
 
-  // Listen to each metronome.
-  bool listener_a_was_called = false;
-  scoped_refptr<MetronomeSource::ListenerHandle> listener_a =
-      metronome_a->AddListener(task_runner,
-                               base::BindRepeating(
-                                   [](bool* listener_a_was_called) {
-                                     *listener_a_was_called = true;
-                                   },
-                                   base::Unretained(&listener_a_was_called)));
-  bool listener_b_was_called = false;
-  scoped_refptr<MetronomeSource::ListenerHandle> listener_b =
-      metronome_b->AddListener(task_runner,
-                               base::BindRepeating(
-                                   [](bool* listener_b_was_called) {
-                                     *listener_b_was_called = true;
-                                   },
-                                   base::Unretained(&listener_b_was_called)));
-  bool listener_c_was_called = false;
-  scoped_refptr<MetronomeSource::ListenerHandle> listener_c =
-      metronome_c->AddListener(task_runner,
-                               base::BindRepeating(
-                                   [](bool* listener_c_was_called) {
-                                     *listener_c_was_called = true;
-                                   },
-                                   base::Unretained(&listener_c_was_called)));
-  bool listener_d_was_called = false;
-  scoped_refptr<MetronomeSource::ListenerHandle> listener_d =
-      metronome_d->AddListener(task_runner,
-                               base::BindRepeating(
-                                   [](bool* listener_d_was_called) {
-                                     *listener_d_was_called = true;
-                                   },
-                                   base::Unretained(&listener_d_was_called)));
+  // Advance so that we are not aligned with tick anymore.
+  task_environment.FastForwardBy(MetronomeSource::Tick() / 2);
 
-  // Metronome "D" is off by 10 ms.
-  task_environment.FastForwardBy(base::Milliseconds(10));
-  EXPECT_FALSE(listener_a_was_called);
-  EXPECT_FALSE(listener_b_was_called);
-  EXPECT_FALSE(listener_c_was_called);
-  EXPECT_TRUE(listener_d_was_called);
-  // Metronomes "A", "B" and "C" are all aligned to fire on the first tick.
-  task_environment.FastForwardBy(kMetronomeTick - base::Milliseconds(10));
-  EXPECT_TRUE(listener_a_was_called);
-  EXPECT_TRUE(listener_b_was_called);
-  EXPECT_TRUE(listener_c_was_called);
-  EXPECT_TRUE(listener_d_was_called);
+  // Create a second metronome and ensure alignment.
+  scoped_refptr<MetronomeSource> metronome_b =
+      base::MakeRefCounted<MetronomeSource>();
+  base::TimeDelta next_tick_a =
+      metronome_a->EnsureNextTickAndGetDelayForTesting();
+  base::TimeDelta next_tick_b =
+      metronome_b->EnsureNextTickAndGetDelayForTesting();
+  EXPECT_EQ(next_tick_a, next_tick_b);
+  task_environment.FastForwardBy(next_tick_b);
+
+  // Verify both metronomes tick at the same time.
+  bool metronome_a_ticked = false;
+  scoped_refptr<MetronomeSource::ListenerHandle> handle_a =
+      metronome_a->AddListener(
+          task_runner,
+          base::BindRepeating(
+              [](bool* metronome_a_ticked) { *metronome_a_ticked = true; },
+              base::Unretained(&metronome_a_ticked)));
+  bool metronome_b_ticked = false;
+  scoped_refptr<MetronomeSource::ListenerHandle> handle_b =
+      metronome_b->AddListener(
+          task_runner,
+          base::BindRepeating(
+              [](bool* metronome_b_ticked) { *metronome_b_ticked = true; },
+              base::Unretained(&metronome_b_ticked)));
+
+  // Get close to the next tick without hitting it.
+  task_environment.FastForwardBy(MetronomeSource::Tick() -
+                                 base::Milliseconds(1));
+  EXPECT_FALSE(metronome_a_ticked);
+  EXPECT_FALSE(metronome_b_ticked);
+  // Hit the tick!
+  task_environment.FastForwardBy(base::Milliseconds(1));
+  EXPECT_TRUE(metronome_a_ticked);
+  EXPECT_TRUE(metronome_b_ticked);
 
   // Cleanup.
-  metronome_a->RemoveListener(listener_a);
-  metronome_b->RemoveListener(listener_b);
-  metronome_c->RemoveListener(listener_c);
-  metronome_d->RemoveListener(listener_d);
+  metronome_a->RemoveListener(handle_a);
+  metronome_b->RemoveListener(handle_b);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/peerconnection/metronome_task_queue_factory_test.cc b/third_party/blink/renderer/platform/peerconnection/metronome_task_queue_factory_test.cc
index 33703ed9..344e658 100644
--- a/third_party/blink/renderer/platform/peerconnection/metronome_task_queue_factory_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/metronome_task_queue_factory_test.cc
@@ -23,15 +23,11 @@
 
 using ::webrtc::TaskQueueTest;
 
-constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
-
 // Test-only factory needed for the TaskQueueTest suite.
 class TestMetronomeTaskQueueFactory final : public webrtc::TaskQueueFactory {
  public:
   TestMetronomeTaskQueueFactory()
-      : metronome_source_(
-            base::MakeRefCounted<blink::MetronomeSource>(base::TimeTicks::Now(),
-                                                         kMetronomeTick)),
+      : metronome_source_(base::MakeRefCounted<blink::MetronomeSource>()),
         factory_(CreateWebRtcMetronomeTaskQueueFactory(metronome_source_)) {}
 
   std::unique_ptr<webrtc::TaskQueueBase, webrtc::TaskQueueDeleter>
@@ -57,15 +53,20 @@
  public:
   void Initialize() override {
     scoped_refptr<blink::MetronomeSource> metronome_source =
-        base::MakeRefCounted<blink::MetronomeSource>(base::TimeTicks::Now(),
-                                                     kMetronomeTick);
+        base::MakeRefCounted<blink::MetronomeSource>();
     task_queue_ =
         CreateWebRtcMetronomeTaskQueueFactory(metronome_source)
             ->CreateTaskQueue("MetronomeTestTaskQueue",
                               webrtc::TaskQueueFactory::Priority::NORMAL);
   }
 
-  base::TimeDelta MetronomeTick() const override { return kMetronomeTick; }
+  base::TimeDelta DeltaToNextTick() const override {
+    base::TimeTicks now = base::TimeTicks::Now();
+    return MetronomeSource::TimeSnappedToNextTick(now) - now;
+  }
+  base::TimeDelta MetronomeTick() const override {
+    return MetronomeSource::Tick();
+  }
   webrtc::TaskQueueBase* TaskQueue() const override {
     return task_queue_.get();
   }
diff --git a/third_party/blink/renderer/platform/peerconnection/webrtc_timer_test.cc b/third_party/blink/renderer/platform/peerconnection/webrtc_timer_test.cc
index 69dea98..0bd3b6f 100644
--- a/third_party/blink/renderer/platform/peerconnection/webrtc_timer_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/webrtc_timer_test.cc
@@ -16,32 +16,20 @@
 
 namespace {
 
-constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
-
 class WebRtcTimerTest : public ::testing::Test {
  public:
   WebRtcTimerTest()
       : task_environment_(
             base::test::TaskEnvironment::ThreadingMode::MULTIPLE_THREADS,
-            base::test::TaskEnvironment::TimeSource::MOCK_TIME),
-        metronome_source_(
-            base::MakeRefCounted<MetronomeSource>(base::TimeTicks::Now(),
-                                                  kMetronomeTick)),
-        metronome_provider_(base::MakeRefCounted<MetronomeProvider>()) {
-    scoped_feature_list_.InitAndEnableFeature(kWebRtcTimerUsesMetronome);
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
+    // Ensure mock time is aligned with metronome tick.
+    base::TimeTicks now = base::TimeTicks::Now();
+    task_environment_.FastForwardBy(
+        MetronomeSource::TimeSnappedToNextTick(now) - now);
   }
 
-  void StartUsingMetronome() {
-    metronome_provider_->OnStartUsingMetronome(metronome_source_);
-  }
-  void StopUsingMetronome() { metronome_provider_->OnStopUsingMetronome(); }
-
  protected:
-  base::test::ScopedFeatureList scoped_feature_list_;
   base::test::TaskEnvironment task_environment_;
-  scoped_refptr<MetronomeSource> metronome_source_;
-  scoped_refptr<MetronomeProvider> metronome_provider_;
-  MetronomeProviderListener* metronome_provider_listener_ = nullptr;
 };
 
 class CallbackListener {
@@ -70,11 +58,8 @@
 
 class RecursiveStartOneShotter {
  public:
-  RecursiveStartOneShotter(scoped_refptr<MetronomeProvider> metronome_provider,
-                           size_t repeat_count,
-                           base::TimeDelta delay)
-      : timer_(std::move(metronome_provider),
-               base::ThreadPool::CreateSequencedTaskRunner({}),
+  RecursiveStartOneShotter(size_t repeat_count, base::TimeDelta delay)
+      : timer_(base::ThreadPool::CreateSequencedTaskRunner({}),
                base::BindRepeating(&RecursiveStartOneShotter::Callback,
                                    base::Unretained(this))),
         repeat_count_(repeat_count),
@@ -103,10 +88,8 @@
 
 class RecursiveStopper {
  public:
-  RecursiveStopper(scoped_refptr<MetronomeProvider> metronome_provider,
-                   base::TimeDelta delay)
-      : timer_(std::move(metronome_provider),
-               base::ThreadPool::CreateSequencedTaskRunner({}),
+  explicit RecursiveStopper(base::TimeDelta delay)
+      : timer_(base::ThreadPool::CreateSequencedTaskRunner({}),
                base::BindRepeating(&RecursiveStopper::Callback,
                                    base::Unretained(this))) {
     timer_.StartRepeating(delay);
@@ -127,9 +110,8 @@
 
 class IsActiveChecker {
  public:
-  explicit IsActiveChecker(scoped_refptr<MetronomeProvider> metronome_provider)
-      : timer_(std::move(metronome_provider),
-               base::ThreadPool::CreateSequencedTaskRunner({}),
+  IsActiveChecker()
+      : timer_(base::ThreadPool::CreateSequencedTaskRunner({}),
                base::BindRepeating(&IsActiveChecker::Callback,
                                    base::Unretained(this))) {}
   ~IsActiveChecker() { timer_.Shutdown(); }
@@ -150,7 +132,7 @@
 
 TEST_F(WebRtcTimerTest, StartOneShotWithoutMetronome) {
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
 
@@ -179,25 +161,27 @@
 }
 
 TEST_F(WebRtcTimerTest, StartOneShotWithMetronome) {
+  base::test::ScopedFeatureList scoped_feature_list(kWebRtcTimerUsesMetronome);
+
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
-  StartUsingMetronome();
 
   // Schedule to fire on the first tick.
-  timer.StartOneShot(kMetronomeTick);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  timer.StartOneShot(MetronomeSource::Tick());
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 1u);
 
   // The task does not repeat automatically.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 1u);
 
   // Schedule to fire a millisecond before the next tick. Advancing to that
   // time does not result in a callback.
-  timer.StartOneShot(kMetronomeTick - base::Milliseconds(1));
-  task_environment_.FastForwardBy(kMetronomeTick - base::Milliseconds(1));
+  timer.StartOneShot(MetronomeSource::Tick() - base::Milliseconds(1));
+  task_environment_.FastForwardBy(MetronomeSource::Tick() -
+                                  base::Milliseconds(1));
   EXPECT_EQ(listener.callback_count(), 1u);
   // But it fires on the next tick.
   task_environment_.FastForwardBy(base::Milliseconds(1));
@@ -205,24 +189,23 @@
 
   // Fire a little after the next tick. Two ticks has to pass before anything
   // happens.
-  timer.StartOneShot(kMetronomeTick + base::Milliseconds(1));
-  task_environment_.FastForwardBy(kMetronomeTick);
+  timer.StartOneShot(MetronomeSource::Tick() + base::Milliseconds(1));
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 2u);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 3u);
 
   // Schedule to fire but shutdown the timer before it has time to fire.
-  timer.StartOneShot(kMetronomeTick);
+  timer.StartOneShot(MetronomeSource::Tick());
   timer.Shutdown();
 
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 3u);
 }
 
 TEST_F(WebRtcTimerTest, RecursiveStartOneShotWithoutMetronome) {
   base::TimeDelta delay = base::Milliseconds(1);
-  RecursiveStartOneShotter recursive_shotter(metronome_provider_,
-                                             /*repeat_count=*/2, delay);
+  RecursiveStartOneShotter recursive_shotter(/*repeat_count=*/2, delay);
 
   // Ensure the callback is repeated twice.
   EXPECT_EQ(recursive_shotter.callback_count(), 0u);
@@ -236,15 +219,15 @@
 }
 
 TEST_F(WebRtcTimerTest, RecursiveStartOneShotWithMetronome) {
+  base::test::ScopedFeatureList scoped_feature_list(kWebRtcTimerUsesMetronome);
+
   base::TimeDelta delay = base::Milliseconds(1);
-  RecursiveStartOneShotter recursive_shotter(metronome_provider_,
-                                             /*repeat_count=*/2, delay);
-  StartUsingMetronome();
+  RecursiveStartOneShotter recursive_shotter(/*repeat_count=*/2, delay);
 
   // A full tick is needed before the callback fires.
   task_environment_.FastForwardBy(delay);
   EXPECT_EQ(recursive_shotter.callback_count(), 0u);
-  task_environment_.FastForwardBy(kMetronomeTick - delay);
+  task_environment_.FastForwardBy(MetronomeSource::Tick() - delay);
   EXPECT_EQ(recursive_shotter.callback_count(), 1u);
 
   // The same is true the second time it fires. This is not a high precision
@@ -253,74 +236,17 @@
   // higher precision.
   task_environment_.FastForwardBy(delay);
   EXPECT_EQ(recursive_shotter.callback_count(), 1u);
-  task_environment_.FastForwardBy(kMetronomeTick - delay);
+  task_environment_.FastForwardBy(MetronomeSource::Tick() - delay);
   EXPECT_EQ(recursive_shotter.callback_count(), 2u);
 
   // It is not repeated a third time.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(recursive_shotter.callback_count(), 2u);
 }
 
-TEST_F(WebRtcTimerTest, StartUsingMetronomeWhileTaskIsInFlight) {
-  // Ensure the metronome is started by adding a dummy listener so that the
-  // metronome ticks are relative to the test start time.
-  scoped_refptr<MetronomeSource::ListenerHandle> dummy_listener =
-      metronome_source_->AddListener(
-          base::ThreadPool::CreateSequencedTaskRunner({}),
-          base::BindRepeating([]() {}));
-
-  CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
-                    base::BindRepeating(&CallbackListener::Callback,
-                                        base::Unretained(&listener)));
-
-  // Schedule in less than a tick, and advance time half-way there.
-  timer.StartOneShot(base::Milliseconds(6));
-  task_environment_.FastForwardBy(base::Milliseconds(3));
-  EXPECT_EQ(listener.callback_count(), 0u);
-
-  // Set metronome and move to the scheduled time, which is not on a metronome
-  // tick, so it shouldn't fire.
-  StartUsingMetronome();
-  task_environment_.FastForwardBy(base::Milliseconds(3));
-  EXPECT_EQ(listener.callback_count(), 0u);
-
-  // Advance time to the next tick.
-  task_environment_.FastForwardBy(kMetronomeTick - base::Milliseconds(6));
-  EXPECT_EQ(listener.callback_count(), 1u);
-
-  // Cleanup.
-  metronome_source_->RemoveListener(dummy_listener);
-  timer.Shutdown();
-}
-
-TEST_F(WebRtcTimerTest, StopUsingMetronomeWhileTaskIsInFlight) {
-  CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
-                    base::BindRepeating(&CallbackListener::Callback,
-                                        base::Unretained(&listener)));
-  StartUsingMetronome();
-
-  // Schedule in less than a tick, and advance time half-way there.
-  timer.StartOneShot(base::Milliseconds(6));
-  task_environment_.FastForwardBy(base::Milliseconds(3));
-  EXPECT_EQ(listener.callback_count(), 0u);
-
-  // Stop using the metronome and advance time to when it should fire.
-  StopUsingMetronome();
-  task_environment_.FastForwardBy(base::Milliseconds(3));
-  // This ensures we are not using the metronome because we have not allowed a
-  // full metronome tick of time to have passed and it fired anyway, indicating
-  // PostDelayedTask was used.
-  EXPECT_EQ(listener.callback_count(), 1u);
-
-  // Cleanup.
-  timer.Shutdown();
-}
-
 TEST_F(WebRtcTimerTest, MoveToNewTaskRunnerWithoutMetronome) {
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
 
@@ -343,22 +269,17 @@
 }
 
 TEST_F(WebRtcTimerTest, MoveToNewTaskRunnerWithMetronome) {
-  // Use a dummy listener to ensure we don't restart the metronome when moving
-  // to the new task runner.
-  scoped_refptr<MetronomeSource::ListenerHandle> dummy_listener =
-      metronome_source_->AddListener(
-          base::ThreadPool::CreateSequencedTaskRunner({}),
-          base::BindRepeating([]() {}));
+  base::test::ScopedFeatureList scoped_feature_list(kWebRtcTimerUsesMetronome);
 
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
-  StartUsingMetronome();
 
   // Schedule on the next tick, and advance time close to that.
-  timer.StartOneShot(kMetronomeTick);
-  task_environment_.FastForwardBy(kMetronomeTick - base::Milliseconds(3));
+  timer.StartOneShot(MetronomeSource::Tick());
+  task_environment_.FastForwardBy(MetronomeSource::Tick() -
+                                  base::Milliseconds(3));
   EXPECT_EQ(listener.callback_count(), 0u);
 
   // Move to a new task runner. The CallbackListener will EXPECT_TRUE that the
@@ -371,13 +292,12 @@
   EXPECT_EQ(listener.callback_count(), 1u);
 
   // Cleanup.
-  metronome_source_->RemoveListener(dummy_listener);
   timer.Shutdown();
 }
 
 TEST_F(WebRtcTimerTest, StartRepeatingWithoutMetronome) {
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
 
@@ -397,33 +317,35 @@
 }
 
 TEST_F(WebRtcTimerTest, StartRepeatingWithMetronome) {
+  base::test::ScopedFeatureList scoped_feature_list(kWebRtcTimerUsesMetronome);
+
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
-  StartUsingMetronome();
 
   // The timer can only fire on ticks, so 10 milliseconds is not enough here.
   timer.StartRepeating(base::Milliseconds(10));
   task_environment_.FastForwardBy(base::Milliseconds(10));
   EXPECT_EQ(listener.callback_count(), 0u);
   // But it does repeat on every tick.
-  task_environment_.FastForwardBy(kMetronomeTick - base::Milliseconds(10));
+  task_environment_.FastForwardBy(MetronomeSource::Tick() -
+                                  base::Milliseconds(10));
   EXPECT_EQ(listener.callback_count(), 1u);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 2u);
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 3u);
   timer.Shutdown();
 
   // The timer stops on shutdown.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(listener.callback_count(), 3u);
 }
 
 TEST_F(WebRtcTimerTest, StopRepeatingTimer) {
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider_, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
 
@@ -455,8 +377,7 @@
 
 TEST_F(WebRtcTimerTest, StopTimerFromInsideCallbackWithoutMetronome) {
   // Stops its own timer from inside the callback after 10 ms.
-  RecursiveStopper recursive_stopper(metronome_provider_,
-                                     base::Milliseconds(10));
+  RecursiveStopper recursive_stopper(base::Milliseconds(10));
   task_environment_.FastForwardBy(base::Milliseconds(10));
   EXPECT_EQ(recursive_stopper.callback_count(), 1u);
 
@@ -467,14 +388,15 @@
 
 // Ensures stopping inside the timer callback does not deadlock.
 TEST_F(WebRtcTimerTest, StopTimerFromInsideCallbackWithMetronome) {
+  base::test::ScopedFeatureList scoped_feature_list(kWebRtcTimerUsesMetronome);
+
   // Stops its own timer from inside the callback after a tick.
-  RecursiveStopper recursive_stopper(metronome_provider_, kMetronomeTick);
-  StartUsingMetronome();
-  task_environment_.FastForwardBy(kMetronomeTick);
+  RecursiveStopper recursive_stopper(MetronomeSource::Tick());
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(recursive_stopper.callback_count(), 1u);
 
   // Ensure we are stopped, the callback count does not increase.
-  task_environment_.FastForwardBy(kMetronomeTick);
+  task_environment_.FastForwardBy(MetronomeSource::Tick());
   EXPECT_EQ(recursive_stopper.callback_count(), 1u);
 }
 
@@ -484,14 +406,9 @@
   base::test::TaskEnvironment task_environment(
       base::test::TaskEnvironment::ThreadingMode::MULTIPLE_THREADS,
       base::test::TaskEnvironment::TimeSource::SYSTEM_TIME);
-  scoped_refptr<MetronomeSource> metronome_source(
-      base::MakeRefCounted<MetronomeSource>(base::TimeTicks::Now(),
-                                            kMetronomeTick));
-  scoped_refptr<MetronomeProvider> metronome_provider(
-      base::MakeRefCounted<MetronomeProvider>());
 
   CallbackListener listener;
-  WebRtcTimer timer(metronome_provider, listener.task_runner(),
+  WebRtcTimer timer(listener.task_runner(),
                     base::BindRepeating(&CallbackListener::Callback,
                                         base::Unretained(&listener)));
 
@@ -517,7 +434,7 @@
 
 TEST_F(WebRtcTimerTest, IsActive) {
   constexpr base::TimeDelta kDelay = base::Milliseconds(10);
-  IsActiveChecker is_active_checker(metronome_provider_);
+  IsActiveChecker is_active_checker;
 
   // StartOneShot() makes the timer temporarily active.
   EXPECT_FALSE(is_active_checker.timer().IsActive());
diff --git a/third_party/blink/renderer/platform/testing/unit_test_helpers.cc b/third_party/blink/renderer/platform/testing/unit_test_helpers.cc
index 08de7ee..0bfefb6 100644
--- a/third_party/blink/renderer/platform/testing/unit_test_helpers.cc
+++ b/third_party/blink/renderer/platform/testing/unit_test_helpers.cc
@@ -63,10 +63,6 @@
 void RunPendingTasks() {
   Thread::Current()->GetTaskRunner()->PostTask(FROM_HERE,
                                                WTF::Bind(&ExitRunLoop));
-
-  // The following runloop can execute non-nested tasks with heap pointers
-  // living on stack, so we force both Oilpan and Unified GC to visit the stack.
-  HeapPointersOnStackScope scan_stack(ThreadState::Current());
   EnterRunLoop();
 }
 
@@ -77,6 +73,9 @@
 }
 
 void EnterRunLoop() {
+  // The following runloop can execute non-nested tasks with heap pointers
+  // living on stack, so we force both Oilpan and unified GC to visit the stack.
+  HeapPointersOnStackScope scan_stack(ThreadState::Current());
   base::RunLoop().Run();
 }
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/display-contents.html b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/display-contents.html
index 55df5df..de5dd16 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/display-contents.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/display-contents.html
@@ -21,7 +21,7 @@
     background: skyblue;
   }
   .contents {
-    display: none;
+    display: contents;
   }
 
   @container size(width: 30px) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/chrome-bug-1293905.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/chrome-bug-1293905.html
new file mode 100644
index 0000000..2f1bd84
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/chrome-bug-1293905.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1293905">
+<div style="columns:1;">
+  <div style="columns:1; position:absolute;">
+    <div style="position:absolute;">
+      <div style="position:fixed;"></div>
+      <div style="appearance:searchfield; columns:1; background-image:url(not-found); width:100px; height:100px;"></div>
+    </div>
+    <div id="boo" style="display:none;"></div>
+  </div>
+</div>
+<script>
+  document.body.offsetTop;
+  function boom() {
+    boo.style.display = "block";
+  }
+  window.addEventListener("load", boom);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/crashtests/move-oof-inside-section-row-with-borders.html b/third_party/blink/web_tests/external/wpt/css/css-tables/crashtests/move-oof-inside-section-row-with-borders.html
new file mode 100644
index 0000000..f6fef22
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-tables/crashtests/move-oof-inside-section-row-with-borders.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1289408">
+<div style="display:table; border-collapse:collapse;">
+  <div style="display:table-row-group; border:solid; background:pink;">
+    <div style="display:table-row; border:solid; background:pink;">
+      <div style="position:relative;">
+        <div id="elm" style="top:0; position:absolute;"></div>
+      </div>
+    </div>
+  </div>
+</div>
+<script>
+  document.body.offsetTop;
+  elm.style.top = "10px";
+</script>
diff --git a/third_party/blink/web_tests/fast/scrolling/time-picker-datalist-wheel.html b/third_party/blink/web_tests/fast/scrolling/time-picker-datalist-wheel.html
new file mode 100644
index 0000000..6c81a88
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/time-picker-datalist-wheel.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+
+  This test is based on tests in fast/forms/time, but placed in fast/scrolling
+  so that it runs in the virtual/threaded-prefer-compositing configuration.
+
+ -->
+<script src="../../resources/gesture-util.js"></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../../resources/testdriver.js"></script>
+<script src="../../resources/testdriver-vendor.js"></script>
+<script src="../forms/resources/common.js"></script>
+<script src="../forms/resources/picker-common.js"></script>
+<script src="../forms/calendar-picker/resources/calendar-picker-common.js"></script>
+<script src="../forms/resources/common-wheel-event.js"></script>
+<input type="time" id="time" list="dl0">
+<datalist id="dl0"></datalist>
+<script>
+
+const opt_strs = ["00:00", "00:30", "01:00", "01:30", "02:00", "02:30",
+                  "03:00", "03:30", "04:00", "04:30", "05:00", "05:30",
+                  "06:00", "06:30", "07:00", "07:30", "08:00", "08:30",
+                  "09:00", "09:30", "10:00", "10:30", "11:00", "11:30",
+                  "12:00", "12:30", "13:00", "13:30", "14:00", "14:30",
+                  "15:00", "15:30", "16:00", "16:30", "17:00", "17:30",
+                  "18:00", "18:30", "19:00", "19:30", "20:00", "20:30",
+                  "21:00", "21:30", "22:00", "22:30", "23:00", "23:30"];
+
+for (let str of opt_strs) {
+  let opt = document.createElement("option");
+  opt.setAttribute("value", str);
+  dl0.appendChild(opt);
+}
+
+promise_test(async t => {
+  await waitForCompositorCommit();
+  await openPicker(document.getElementById('time'));
+  let scroller = internals.pagePopupWindow.global.picker._containerElement;
+
+  // Scroll down two ticks, and make sure the scroll offset changed.
+  await dispatchWheelEvent(scroller, 0, 2);
+  await waitFor(() => scroller.scrollTop > 0);
+}, "Test scrolling in time picker with suggestion list.");
+
+</script>
diff --git a/third_party/webrtc_overrides/metronome_source.cc b/third_party/webrtc_overrides/metronome_source.cc
index 8489e8f4c..0a1203a 100644
--- a/third_party/webrtc_overrides/metronome_source.cc
+++ b/third_party/webrtc_overrides/metronome_source.cc
@@ -25,6 +25,8 @@
 
 namespace blink {
 
+constexpr base::TimeDelta kMetronomeTick = base::Hertz(64);
+
 namespace {
 
 // Wraps a webrtc::Metronome::TickListener to ensure that OnTick is not called
@@ -111,8 +113,7 @@
 
   // Returns the current tick period of the metronome.
   webrtc::TimeDelta TickPeriod() const override {
-    return webrtc::TimeDelta::Micros(
-        metronome_source_->metronome_tick().InMicroseconds());
+    return webrtc::TimeDelta::Micros(MetronomeSource::Tick().InMicroseconds());
   }
 
  private:
@@ -207,18 +208,31 @@
   is_active_ = false;
 }
 
-MetronomeSource::MetronomeSource(base::TimeTicks metronome_phase,
-                                 base::TimeDelta metronome_tick)
+// static
+base::TimeTicks MetronomeSource::Phase() {
+  return base::TimeTicks();
+}
+
+// static
+base::TimeDelta MetronomeSource::Tick() {
+  return kMetronomeTick;
+}
+
+// static
+base::TimeTicks MetronomeSource::TimeSnappedToNextTick(base::TimeTicks time) {
+  return time.SnappedToNextTick(MetronomeSource::Phase(),
+                                MetronomeSource::Tick());
+}
+
+MetronomeSource::MetronomeSource()
     : metronome_task_runner_(
           // HIGHEST priority is used to reduce risk of jitter.
           base::ThreadPool::CreateSequencedTaskRunner(
-              {base::TaskPriority::HIGHEST})),
-      metronome_phase_(std::move(metronome_phase)),
-      metronome_tick_(std::move(metronome_tick)) {
+              {base::TaskPriority::HIGHEST})) {
   base::TimeTicks now = base::TimeTicks::Now();
-  prev_tick_ = GetTimeSnappedToNextMetronomeTick(now);
+  prev_tick_ = MetronomeSource::TimeSnappedToNextTick(now);
   if (prev_tick_ > now)
-    prev_tick_ -= metronome_tick_;
+    prev_tick_ -= MetronomeSource::Tick();
 }
 
 MetronomeSource::~MetronomeSource() {
@@ -226,11 +240,6 @@
   DCHECK(!next_tick_handle_.IsValid());
 }
 
-base::TimeTicks MetronomeSource::GetTimeSnappedToNextMetronomeTick(
-    base::TimeTicks time) const {
-  return time.SnappedToNextTick(metronome_phase_, metronome_tick_);
-}
-
 scoped_refptr<MetronomeSource::ListenerHandle> MetronomeSource::AddListener(
     scoped_refptr<base::SequencedTaskRunner> task_runner,
     base::RepeatingCallback<void()> callback,
@@ -282,9 +291,10 @@
   if (wakeup_time <= prev_tick_) {
     // Do not reschedule a tick that already fired, such as when adding a
     // listener on a tick.
-    wakeup_time = prev_tick_ + metronome_tick_;
+    wakeup_time = prev_tick_ + MetronomeSource::Tick();
   }
-  base::TimeTicks wakeup_tick = GetTimeSnappedToNextMetronomeTick(wakeup_time);
+  base::TimeTicks wakeup_tick =
+      MetronomeSource::TimeSnappedToNextTick(wakeup_time);
   if (!next_tick_.is_min() && wakeup_tick >= next_tick_) {
     //  We already have the next tick scheduled.
     return;
@@ -326,7 +336,7 @@
     // immediate "catch-up" tasks, make it possible to skip metronome ticks.
     constexpr double kTickThreshold = 0.5;
     EnsureNextTickIsScheduled(base::TimeTicks::Now() +
-                              metronome_tick_ * kTickThreshold);
+                              MetronomeSource::Tick() * kTickThreshold);
   }
 }
 
@@ -334,6 +344,18 @@
   return std::make_unique<WebRtcMetronomeAdapter>(base::WrapRefCounted(this));
 }
 
+base::TimeDelta MetronomeSource::EnsureNextTickAndGetDelayForTesting() {
+  base::TimeTicks now = base::TimeTicks::Now();
+  base::TimeTicks next_tick = MetronomeSource::TimeSnappedToNextTick(now);
+  // Ensure next tick is scheduled, even if there are no listeners. This makes
+  // it so that when mock time is advanced to |next_tick|, |prev_tick_| will be
+  // updated. This avoids the initial tick firing "now" in testing environments.
+  metronome_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&MetronomeSource::EnsureNextTickIsScheduled,
+                                this, next_tick));
+  return next_tick - now;
+}
+
 bool MetronomeSource::HasListenersForTesting() {
   base::WaitableEvent event;
   bool has_listeners = false;
diff --git a/third_party/webrtc_overrides/metronome_source.h b/third_party/webrtc_overrides/metronome_source.h
index 4011749..66bdc83d 100644
--- a/third_party/webrtc_overrides/metronome_source.h
+++ b/third_party/webrtc_overrides/metronome_source.h
@@ -76,18 +76,17 @@
     base::TimeTicks wakeup_time_;
   };
 
-  MetronomeSource(base::TimeTicks metronome_phase,
-                  base::TimeDelta metronome_tick);
+  // The tick phase.
+  static base::TimeTicks Phase();
+  // The tick frequency.
+  static base::TimeDelta Tick();
+  // The next metronome tick that is at or after |time|.
+  static base::TimeTicks TimeSnappedToNextTick(base::TimeTicks time);
+
+  MetronomeSource();
   MetronomeSource(const MetronomeSource&) = delete;
   MetronomeSource& operator=(const MetronomeSource&) = delete;
 
-  // The tick phase.
-  base::TimeTicks metronome_phase() const { return metronome_phase_; }
-  // The tick frequency.
-  base::TimeDelta metronome_tick() const { return metronome_tick_; }
-  // The next metronome tick that is at or after |time|.
-  base::TimeTicks GetTimeSnappedToNextMetronomeTick(base::TimeTicks time) const;
-
   // Creates a new listener whose |callback| will be invoked on |task_runner|.
   // If |wakeup_time| is set to base::TimeTicks::Min() then the listener will be
   // called on every metronome tick. Otherwise |wakeup_time| is the earliest
@@ -106,6 +105,10 @@
   // Creates a webrtc::Metronome which is backed by this metronome.
   std::unique_ptr<webrtc::Metronome> CreateWebRtcMetronome();
 
+  // Ensures the next tick is scheduled and get the time to advance to reach
+  // that tick. After advancing mock time by the returned time delta, the next
+  // tick is guaranteed to happen MetronomeTick::Tick() from now.
+  base::TimeDelta EnsureNextTickAndGetDelayForTesting();
   bool HasListenersForTesting();
 
  private:
@@ -133,8 +136,6 @@
 
   // All non-const members are only accessed on |metronome_task_runner_|.
   const scoped_refptr<base::SequencedTaskRunner> metronome_task_runner_;
-  const base::TimeTicks metronome_phase_;
-  const base::TimeDelta metronome_tick_;
   std::set<scoped_refptr<ListenerHandle>> listeners_;
   base::DelayedTaskHandle next_tick_handle_;
   base::TimeTicks next_tick_ = base::TimeTicks::Min();
diff --git a/third_party/webrtc_overrides/metronome_task_queue_factory.cc b/third_party/webrtc_overrides/metronome_task_queue_factory.cc
index 8f74678..c225650f 100644
--- a/third_party/webrtc_overrides/metronome_task_queue_factory.cc
+++ b/third_party/webrtc_overrides/metronome_task_queue_factory.cc
@@ -124,7 +124,7 @@
   base::TimeTicks target_time =
       base::TimeTicks::Now() + base::Milliseconds(milliseconds);
   base::TimeTicks snapped_target_time =
-      metronome_source_->GetTimeSnappedToNextMetronomeTick(target_time);
+      MetronomeSource::TimeSnappedToNextTick(target_time);
   // Queue to run the delayed task at |snapped_target_time|. If the snapped time
   // has not been scheduled before, schedule it with PostDelayedTaskAt().
   if (coalesced_tasks_.QueueDelayedTask(target_time, std::move(task),
diff --git a/third_party/webrtc_overrides/test/metronome_like_task_queue_test.h b/third_party/webrtc_overrides/test/metronome_like_task_queue_test.h
index e9f15e5..b5931fe 100644
--- a/third_party/webrtc_overrides/test/metronome_like_task_queue_test.h
+++ b/third_party/webrtc_overrides/test/metronome_like_task_queue_test.h
@@ -22,6 +22,7 @@
   virtual ~MetronomeLikeTaskQueueProvider() = default;
 
   virtual void Initialize() = 0;
+  virtual base::TimeDelta DeltaToNextTick() const = 0;
   virtual base::TimeDelta MetronomeTick() const = 0;
   virtual webrtc::TaskQueueBase* TaskQueue() const = 0;
 };
@@ -36,7 +37,10 @@
             base::test::TaskEnvironment::TimeSource::MOCK_TIME),
         provider_(GetParam()()) {}
 
-  void SetUp() override { provider_->Initialize(); }
+  void SetUp() override {
+    provider_->Initialize();
+    task_environment_.FastForwardBy(provider_->DeltaToNextTick());
+  }
   void TearDown() override { provider_.reset(); }
 
  protected:
diff --git a/third_party/webrtc_overrides/webrtc_timer.cc b/third_party/webrtc_overrides/webrtc_timer.cc
index e7e5d45..e1e0d14 100644
--- a/third_party/webrtc_overrides/webrtc_timer.cc
+++ b/third_party/webrtc_overrides/webrtc_timer.cc
@@ -15,11 +15,11 @@
 WebRtcTimer::SchedulableCallback::SchedulableCallback(
     scoped_refptr<base::SequencedTaskRunner> task_runner,
     base::RepeatingCallback<void()> callback,
-    scoped_refptr<MetronomeSource> metronome,
+    bool use_metronome,
     base::TimeDelta repeated_delay)
     : task_runner_(std::move(task_runner)),
       callback_(std::move(callback)),
-      metronome_(std::move(metronome)),
+      use_metronome_(use_metronome),
       repeated_delay_(std::move(repeated_delay)) {}
 
 WebRtcTimer::SchedulableCallback::~SchedulableCallback() {
@@ -33,9 +33,9 @@
       << "The callback has already been scheduled.";
   scheduled_time_ = scheduled_time;
   base::TimeTicks target_time = scheduled_time_;
-  if (metronome_) {
+  if (use_metronome_) {
     // Snap target time to metronome tick!
-    target_time = metronome_->GetTimeSnappedToNextMetronomeTick(target_time);
+    target_time = MetronomeSource::TimeSnappedToNextTick(target_time);
   }
   task_runner_->PostDelayedTaskAt(
       base::subtle::PostDelayedTaskPassKey(), FROM_HERE,
@@ -89,13 +89,13 @@
 WebRtcTimer::WebRtcTimer(scoped_refptr<MetronomeProvider> metronome_provider,
                          scoped_refptr<base::SequencedTaskRunner> task_runner,
                          base::RepeatingCallback<void()> callback)
-    : metronome_provider_(std::move(metronome_provider)),
-      callback_(std::move(callback)),
-      task_runner_(std::move(task_runner)) {
-  if (metronome_provider_) {
-    metronome_provider_->AddListener(this);
-  }
-}
+    : WebRtcTimer(std::move(task_runner), std::move(callback)) {}
+
+WebRtcTimer::WebRtcTimer(scoped_refptr<base::SequencedTaskRunner> task_runner,
+                         base::RepeatingCallback<void()> callback)
+    : callback_(std::move(callback)),
+      use_metronome_(base::FeatureList::IsEnabled(kWebRtcTimerUsesMetronome)),
+      task_runner_(std::move(task_runner)) {}
 
 WebRtcTimer::~WebRtcTimer() {
   DCHECK(is_shutdown_);
@@ -112,9 +112,6 @@
     schedulable_callback_->Inactivate();
     schedulable_callback_ = nullptr;
   }
-  if (metronome_provider_) {
-    metronome_provider_->RemoveListener(this);
-  }
   is_shutdown_ = true;
 }
 
@@ -158,7 +155,7 @@
 void WebRtcTimer::ScheduleCallback(base::TimeTicks scheduled_time) {
   if (!schedulable_callback_) {
     schedulable_callback_ = base::MakeRefCounted<SchedulableCallback>(
-        task_runner_, callback_, metronome_, repeated_delay_);
+        task_runner_, callback_, use_metronome_, repeated_delay_);
   }
   schedulable_callback_->Schedule(scheduled_time);
 }
@@ -175,28 +172,6 @@
   ScheduleCallback(cancelled_scheduled_time);
 }
 
-void WebRtcTimer::OnStartUsingMetronome(
-    scoped_refptr<MetronomeSource> metronome) {
-  if (!base::FeatureList::IsEnabled(kWebRtcTimerUsesMetronome)) {
-    // Don't use the metronome if the experiment is disabled.
-    return;
-  }
-  LOG(INFO) << "A WebRtcTimer is using the metronome";
-  base::AutoLock auto_lock(lock_);
-  DCHECK(!metronome_);
-  DCHECK(metronome);
-  metronome_ = std::move(metronome);
-  RescheduleCallback();
-}
-
-void WebRtcTimer::OnStopUsingMetronome() {
-  base::AutoLock auto_lock(lock_);
-  if (!metronome_)
-    return;
-  metronome_ = nullptr;
-  RescheduleCallback();
-}
-
 void WebRtcTimer::MoveToNewTaskRunner(
     scoped_refptr<base::SequencedTaskRunner> task_runner) {
   base::AutoLock auto_lock(lock_);
diff --git a/third_party/webrtc_overrides/webrtc_timer.h b/third_party/webrtc_overrides/webrtc_timer.h
index 31e35f6..61757c9 100644
--- a/third_party/webrtc_overrides/webrtc_timer.h
+++ b/third_party/webrtc_overrides/webrtc_timer.h
@@ -31,12 +31,16 @@
 // available, the timer has high precision.
 //
 // Prefer this timer for WebRTC use cases that does not require high precision.
-class RTC_EXPORT WebRtcTimer : public MetronomeProviderListener {
+class RTC_EXPORT WebRtcTimer final {
  public:
+  WebRtcTimer(scoped_refptr<base::SequencedTaskRunner> task_runner,
+              base::RepeatingCallback<void()> callback);
+  // TODO(https://crbug.com/1296138): Delete this constructor, the
+  // |metronome_provider| is not used anymore.
   WebRtcTimer(scoped_refptr<MetronomeProvider> metronome_provider,
               scoped_refptr<base::SequencedTaskRunner> task_runner,
               base::RepeatingCallback<void()> callback);
-  ~WebRtcTimer() override;
+  ~WebRtcTimer();
   // Must be called prior to destruction. Unregisters from the metronome
   // provider.
   void Shutdown();
@@ -66,7 +70,7 @@
    public:
     SchedulableCallback(scoped_refptr<base::SequencedTaskRunner> task_runner,
                         base::RepeatingCallback<void()> callback,
-                        scoped_refptr<MetronomeSource> metronome,
+                        bool use_metronome,
                         base::TimeDelta repeated_delay);
     ~SchedulableCallback();
 
@@ -83,8 +87,7 @@
 
     const scoped_refptr<base::SequencedTaskRunner> task_runner_;
     const base::RepeatingCallback<void()> callback_;
-    // If set, aligns the scheduling to metronome ticks.
-    const scoped_refptr<MetronomeSource> metronome_;
+    const bool use_metronome_;
 
     // Only accessed on |task_runner_|.
     bool is_currently_running_ = false;
@@ -108,16 +111,11 @@
   // latest settings. Used e.g. when we start or stop using the metronome.
   void RescheduleCallback() EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
-  // MetronomeProviderListener:
-  void OnStartUsingMetronome(scoped_refptr<MetronomeSource> metronome) override;
-  void OnStopUsingMetronome() override;
-
-  const scoped_refptr<MetronomeProvider> metronome_provider_;
   const base::RepeatingCallback<void()> callback_;
+  const bool use_metronome_;
   base::Lock lock_;
   bool is_shutdown_ GUARDED_BY(lock_) = false;
   scoped_refptr<base::SequencedTaskRunner> task_runner_ GUARDED_BY(lock_);
-  scoped_refptr<MetronomeSource> metronome_ GUARDED_BY(lock_);
   scoped_refptr<SchedulableCallback> schedulable_callback_ GUARDED_BY(lock_);
   // If not repeating this is zero.
   base::TimeDelta repeated_delay_ GUARDED_BY(lock_);
diff --git a/tools/grit/preprocess_if_expr.py b/tools/grit/preprocess_if_expr.py
index 0046680..1d069bb 100644
--- a/tools/grit/preprocess_if_expr.py
+++ b/tools/grit/preprocess_if_expr.py
@@ -81,7 +81,10 @@
     with io.open(in_path, encoding='utf-8', mode='r') as f:
       content = f.read()
 
-    preprocessed = node.PreprocessIfExpr(content)
+    try:
+      preprocessed = node.PreprocessIfExpr(content)
+    except:
+      raise Exception('Error processing %s' % in_path)
     out_path = os.path.join(out_folder, input_file)
     out_dir = os.path.dirname(out_path)
     assert out_dir.startswith(out_folder), \
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 7a95e0d..87a3fdd 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -608,10 +608,10 @@
     },
 
     'chromium.swangle': {
-      'linux-swangle-chromium-x64': 'gpu_tests_release_trybot_minimal_symbols',
-      'linux-swangle-tot-angle-x64': 'angle_deqp_release_trybot',
-      'linux-swangle-tot-swiftshader-x64': 'angle_deqp_release_trybot',
-      'linux-swangle-x64': 'angle_deqp_release_trybot',
+      'linux-swangle-chromium-x64': 'gpu_tests_release_trybot_minimal_symbols_reclient',
+      'linux-swangle-tot-angle-x64': 'angle_deqp_release_trybot_reclient',
+      'linux-swangle-tot-swiftshader-x64': 'angle_deqp_release_trybot_reclient',
+      'linux-swangle-x64': 'angle_deqp_release_trybot_reclient',
       'mac-swangle-chromium-x64': 'gpu_tests_release_trybot_minimal_symbols',
       'win-swangle-chromium-x86': 'gpu_tests_release_trybot_minimal_symbol_x86_resource_allowlisting',
       'win-swangle-tot-angle-x64': 'angle_deqp_release_trybot',
@@ -1672,6 +1672,10 @@
       'angle_deqp_tests', 'shared_release_bot_dcheck_always_on',
     ],
 
+    'angle_deqp_release_trybot_reclient': [
+      'angle_deqp_tests', 'shared_release_bot_dcheck_always_on', 'reclient',
+    ],
+
     'angle_deqp_release_trybot_x86': [
       'angle_deqp_tests', 'shared_release_trybot', 'x86',
     ],
diff --git a/tools/mb/mb_config_expectations/chromium.swangle.json b/tools/mb/mb_config_expectations/chromium.swangle.json
index 0c5d5b6..272eb76 100644
--- a/tools/mb/mb_config_expectations/chromium.swangle.json
+++ b/tools/mb/mb_config_expectations/chromium.swangle.json
@@ -8,7 +8,8 @@
       "is_debug": false,
       "proprietary_codecs": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_rbe": true,
+      "use_remoteexec": true
     }
   },
   "linux-swangle-tot-angle-x64": {
@@ -18,7 +19,9 @@
       "is_component_build": true,
       "is_debug": false,
       "symbol_level": 1,
-      "use_goma": true
+      "use_goma": true,
+      "use_rbe": true,
+      "use_remoteexec": true
     }
   },
   "linux-swangle-tot-swiftshader-x64": {
@@ -28,7 +31,9 @@
       "is_component_build": true,
       "is_debug": false,
       "symbol_level": 1,
-      "use_goma": true
+      "use_goma": true,
+      "use_rbe": true,
+      "use_remoteexec": true
     }
   },
   "linux-swangle-x64": {
@@ -38,7 +43,9 @@
       "is_component_build": true,
       "is_debug": false,
       "symbol_level": 1,
-      "use_goma": true
+      "use_goma": true,
+      "use_rbe": true,
+      "use_remoteexec": true
     }
   },
   "mac-swangle-chromium-x64": {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 4b23549..8b49de9 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -3681,6 +3681,8 @@
   <int value="26" label="Window mode changed to window"/>
   <int value="27" label="Run on OS Login mode turned on"/>
   <int value="28" label="Run on OS Login mode turned off"/>
+  <int value="29" label="File Handling turned on"/>
+  <int value="30" label="File Handling turned off"/>
 </enum>
 
 <enum name="AppMenuHighlightItem">
@@ -21980,6 +21982,8 @@
   <int value="55" label="stylesPaneCSSChanges"/>
   <int value="56" label="headerOverrides"/>
   <int value="57" label="lighthousePanelFR"/>
+  <int value="58" label="evaluateExpressionsWithSourceMaps"/>
+  <int value="59" label="cssLayers"/>
 </enum>
 
 <enum name="DevToolsGridOverlayOpenedFrom">
diff --git a/ui/events/event_constants.h b/ui/events/event_constants.h
index 5a7dfef..3db1646 100644
--- a/ui/events/event_constants.h
+++ b/ui/events/event_constants.h
@@ -90,8 +90,13 @@
                                      // when users is requesting to scroll by
                                      // pages.
   EF_UNADJUSTED_MOUSE = 1 << 24,     // Indicates this mouse event is unadjusted
-                                  // mouse events that has unadjusted movement
-                                  // delta, i.e. is from WM_INPUT on Windows.
+                                     // mouse events that has unadjusted
+                                     // movement delta, i.e. is from WM_INPUT
+                                     // on Windows.
+  EF_NOT_SUITABLE_FOR_MOUSE_WARPING =  // Indicates this mouse event should not
+  1 << 25,                             // trigger mouse warping (which moves the
+                                       // mouse to another display when the
+                                       // mouse hits the window boundaries).
 };
 
 // Result of dispatching an event.
@@ -173,9 +178,7 @@
 };
 
 // Device ID for Touch and Key Events.
-enum EventDeviceId {
-  ED_UNKNOWN_DEVICE = -1
-};
+enum EventDeviceId { ED_UNKNOWN_DEVICE = -1 };
 
 // Pointing device type.
 enum class EventPointerType : int {
diff --git a/ui/events/ozone/evdev/input_injector_evdev.cc b/ui/events/ozone/evdev/input_injector_evdev.cc
index a31d507..8197c66 100644
--- a/ui/events/ozone/evdev/input_injector_evdev.cc
+++ b/ui/events/ozone/evdev/input_injector_evdev.cc
@@ -8,6 +8,7 @@
 
 #include "base/logging.h"
 #include "ui/events/event.h"
+#include "ui/events/event_constants.h"
 #include "ui/events/event_modifiers.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/keycodes/dom/dom_code.h"
@@ -29,7 +30,7 @@
     CursorDelegateEvdev* cursor)
     : cursor_(cursor), dispatcher_(std::move(dispatcher)) {}
 
-InputInjectorEvdev::~InputInjectorEvdev() {}
+InputInjectorEvdev::~InputInjectorEvdev() = default;
 
 void InputInjectorEvdev::InjectMouseButton(EventFlags button, bool down) {
   unsigned int code;
@@ -66,8 +67,16 @@
 
   cursor_->MoveCursorTo(location);
 
+  // Mouse warping moves the mouse cursor to the adjacent display if the mouse
+  // is positioned at the edge of the current display.
+  // This is useful/needed for real mouse movements (as without mouse warping
+  // the mouse would be stuck on one display).
+  // Here we use absolute coordinates though, so mouse warping is not desirable
+  // as our coordinates already cover all available displays.
+  const int event_flags = EF_NOT_SUITABLE_FOR_MOUSE_WARPING;
+
   dispatcher_->DispatchMouseMoveEvent(MouseMoveEventParams(
-      kDeviceIdForInjection, EF_NONE, cursor_->GetLocation(),
+      kDeviceIdForInjection, event_flags, cursor_->GetLocation(),
       nullptr /* ordinal_delta */, PointerDetails(EventPointerType::kMouse),
       EventTimeForNow()));
 }
diff --git a/ui/lottie/resource.cc b/ui/lottie/resource.cc
index 8da83f37..d7d297b 100644
--- a/ui/lottie/resource.cc
+++ b/ui/lottie/resource.cc
@@ -18,7 +18,7 @@
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/image/image_skia_rep_default.h"
+#include "ui/gfx/image/image_skia_rep.h"
 #include "ui/gfx/image/image_skia_source.h"
 #include "ui/lottie/animation.h"
 
diff --git a/ui/strings/translations/ax_strings_id.xtb b/ui/strings/translations/ax_strings_id.xtb
index 84865a4..98dfaf5d 100644
--- a/ui/strings/translations/ax_strings_id.xtb
+++ b/ui/strings/translations/ax_strings_id.xtb
@@ -97,7 +97,7 @@
 <translation id="6637586476836377253">log</translation>
 <translation id="6692633176391053278">stepper</translation>
 <translation id="6696580792574109116">alat pilih bulan</translation>
-<translation id="6755330956360078551">keterangan alat</translation>
+<translation id="6755330956360078551">tooltip</translation>
 <translation id="6820615603175220800">referensi bibliografi</translation>
 <translation id="6845533974506654842">tekan</translation>
 <translation id="6885760532393684712">direktori</translation>
diff --git a/ui/webui/resources/cr_components/app_management/BUILD.gn b/ui/webui/resources/cr_components/app_management/BUILD.gn
index d9af008..a1fd6d8fc 100644
--- a/ui/webui/resources/cr_components/app_management/BUILD.gn
+++ b/ui/webui/resources/cr_components/app_management/BUILD.gn
@@ -13,6 +13,7 @@
     "$root_gen_dir/ui/webui/resources/preprocessed/cr_components/app_management"
 
 web_component_files = [
+  "file_handling_item.ts",
   "icons.ts",
   "more_permissions_item.ts",
   "permission_item.ts",
diff --git a/ui/webui/resources/cr_components/app_management/app_management.mojom b/ui/webui/resources/cr_components/app_management/app_management.mojom
index 5c43257..bf4e9c2 100644
--- a/ui/webui/resources/cr_components/app_management/app_management.mojom
+++ b/ui/webui/resources/cr_components/app_management/app_management.mojom
@@ -30,6 +30,7 @@
   bool hide_resize_locked;
   array<string> supported_links;
   apps.mojom.RunOnOsLogin? run_on_os_login;
+  FileHandlingState? file_handling_state;
 };
 
 // Extension-based apps primarily use install-time permissions that cannot be
@@ -69,6 +70,9 @@
   // of an app via app_management_page_handler.
   SetRunOnOsLoginMode(string app_id,
     apps.mojom.RunOnOsLoginMode run_on_os_login_mode);
+  // Used to set the state of the File Handling API from the frontend inside
+  // app_management_page_handler.
+  SetFileHandlingEnabled(string app_id, bool enabled);
 };
 
 // Frontend interface.
@@ -77,3 +81,9 @@
   OnAppChanged(App update);
   OnAppRemoved(string app_id);
 };
+
+struct FileHandlingState {
+  bool enabled;
+  bool is_managed;
+  string user_visible_types;
+};
diff --git a/ui/webui/resources/cr_components/app_management/constants.ts b/ui/webui/resources/cr_components/app_management/constants.ts
index 09c0ac7..ffa97dd9 100644
--- a/ui/webui/resources/cr_components/app_management/constants.ts
+++ b/ui/webui/resources/cr_components/app_management/constants.ts
@@ -74,4 +74,6 @@
   WindowModeChangedToWindow = 26,
   RunOnOsLoginModeTurnedOn = 27,
   RunOnOsLoginModeTurnedOff = 28,
+  FileHandlingTurnedOn = 29,
+  FileHandlingTurnedOff = 30,
 }
diff --git a/ui/webui/resources/cr_components/app_management/file_handling_item.html b/ui/webui/resources/cr_components/app_management/file_handling_item.html
new file mode 100644
index 0000000..9cd2a6d
--- /dev/null
+++ b/ui/webui/resources/cr_components/app_management/file_handling_item.html
@@ -0,0 +1,6 @@
+<app-management-toggle-row
+   id="toggle-row"
+   label="[[fileHandlingHeader]]"
+   managed="[[isManaged_(app)]]"
+   value="[[getValue_(app)]]">
+</app-management-toggle-row>
diff --git a/ui/webui/resources/cr_components/app_management/file_handling_item.ts b/ui/webui/resources/cr_components/app_management/file_handling_item.ts
new file mode 100644
index 0000000..44546f2
--- /dev/null
+++ b/ui/webui/resources/cr_components/app_management/file_handling_item.ts
@@ -0,0 +1,103 @@
+// Copyright 2022 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 './shared_style.js';
+import './toggle_row.js';
+
+import {assert} from '//resources/js/assert.m.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {App} from './app_management.mojom-webui.js';
+import {BrowserProxy} from './browser_proxy.js';
+import {AppManagementUserAction} from './constants.js';
+import {AppManagementToggleRowElement} from './toggle_row.js';
+import {recordAppManagementUserAction} from './util.js';
+
+export class AppManagementFileHandlingItemElement extends PolymerElement {
+  static get is() {
+    return 'app-management-file-handling-item';
+  }
+
+  static get template() {
+    return html`{__html_template__}`;
+  }
+
+  static get properties() {
+    return {
+      fileHandlingHeader: String,
+
+      app: Object,
+
+      /**
+       * @type {boolean}
+       */
+      hidden: {
+        type: Boolean,
+        computed: 'isHidden_(app)',
+        reflectToAttribute: true,
+      },
+    };
+  }
+
+  app: App;
+  fileHandlingHeader: String;
+
+  ready() {
+    super.ready();
+    this.addEventListener('click', this.onClick_);
+    this.addEventListener('change', this.onChanged_);
+  }
+
+  private isHidden_(app: App): boolean {
+    if (app && app.fileHandlingState) {
+      return !app.fileHandlingState.userVisibleTypes;
+    }
+    return false;
+  }
+
+  private isManaged_(app: App): boolean {
+    if (app && app.fileHandlingState) {
+      return app.fileHandlingState.isManaged;
+    }
+    return false;
+  }
+
+  private getValue_(app: App): boolean {
+    if (app && app.fileHandlingState) {
+      return app.fileHandlingState.enabled;
+    }
+    return false;
+  }
+
+  private onClick_() {
+    this.shadowRoot!
+        .querySelector<AppManagementToggleRowElement>('#toggle-row')!.click();
+  }
+
+  private onChanged_() {
+    assert(this.app);
+    const enabled = this.shadowRoot!
+                        .querySelector<AppManagementToggleRowElement>(
+                            '#toggle-row')!.isChecked();
+
+    BrowserProxy.getInstance().handler.setFileHandlingEnabled(
+        this.app.id,
+        enabled,
+    );
+    const fileHandlingChangeAction = enabled ?
+        AppManagementUserAction.FileHandlingTurnedOn :
+        AppManagementUserAction.FileHandlingTurnedOff;
+    recordAppManagementUserAction(this.app.type, fileHandlingChangeAction);
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'app-management-file-handling-item': AppManagementFileHandlingItemElement;
+  }
+}
+
+customElements.define(
+    AppManagementFileHandlingItemElement.is,
+    AppManagementFileHandlingItemElement);